Commit 1630cd4d0a0df03d59a469a8c415062fe7221116

Authored by liuzujun
2 parents 3d8468b2 18478207

Merge branch 'tr/develop' of 120.26.43.151:wasteland/server into tr/develop

src/actions/SeaportAction.lua
... ... @@ -26,25 +26,41 @@ function _M.donateRpc(agent, data)
26 26 if itemId == 0 or itemCount == 0 then return 0 end
27 27 if role:getItemCount(itemId) < itemCount then return 1 end
28 28 local DonateCsv = csvdb["seaport_purchaseCsv"]
29   - if DonateCsv[phase] or not DonateCsv[phase][id] then return 2 end
  29 + if not DonateCsv[phase] or not DonateCsv[phase][id] then return 2 end
30 30  
31   - local data = DonateCsv[phase][id]
32   - local needs = data.need_item:toArray("=",true)
  31 + local ddata = DonateCsv[phase][id]
  32 + local needs = ddata.need_item:toArray(true,"=")
33 33 if itemId ~= needs[1] then return 3 end
34 34 if itemCount % needs[2] ~= 0 then return 4 end
35 35  
36 36 local group = itemCount / needs[2]
37   - local rewards = data.award:toNumMap()
  37 + local rewards = ddata.award:toNumMap()
38 38  
39 39 for id, value in pairs(rewards) do
40 40 rewards[id] = value * group
41 41 end
42 42  
43   - local rediskey = {SEAPORT_TRADE_TASK_1,SEAPORT_TRADE_TASK_2}
44   - redisproxy:hincrby(rediskey[phase],id,itemCount)
  43 + if phase == 1 then
  44 + local old = tonumber(redisproxy:hget(SEAPORT_TRADE_TASK_1,id)) or 0
  45 + local need = ddata.need_num - old
  46 + if need >= itemCount then
  47 + redisproxy:hincrby(SEAPORT_TRADE_TASK_1,id,itemCount)
  48 + else
  49 + redisproxy:hincrby(SEAPORT_TRADE_TASK_1,id,need)
  50 + for _, temp in pairs(DonateCsv[2]) do
  51 + local items = temp.need_item:toArray(true,"=")
  52 + if items[1] == itemId then
  53 + redisproxy:hincrby(SEAPORT_TRADE_TASK_2,temp.id,itemCount - need)
  54 + break
  55 + end
  56 + end
  57 + end
  58 + else
  59 + redisproxy:hincrby(SEAPORT_TRADE_TASK_2,id,itemCount)
  60 + end
45 61  
46 62 role:costItems({[itemId] = itemCount}, {log = {desc = "seaportDonate", int1 = phase, int2 = id}})
47   - local reward, change = role:award(rewards, {log = {desc = "seaportDonate", int1 = data.phase, int2 = data.id}})
  63 + local reward, change = role:award(rewards, {log = {desc = "seaportDonate", int1 = ddata.phase, int2 = ddata.id}})
48 64  
49 65 role:mylog("role_action", {desc = "seaportDonate", int1 = itemId, int2 = itemCount})
50 66  
... ... @@ -123,19 +139,27 @@ function _M.taskRpc(agent, data)
123 139 if not TaskCsv[taskId] or not TaskCsv[taskId][level] then return 1 end
124 140  
125 141 local reward, change = {}, {}
  142 + local heroFaithMap = {}
126 143 local seaport = role:getProperty("seaport")
127 144  
128 145 local data = TaskCsv[taskId][level]
  146 + if data.phase == 2 then
  147 + local openTime = tonumber(redisproxy:hget("autoincrement_set", "seaportTime0")) or 0
  148 + local nowTime = skynet.timex()
  149 + if nowTime < (openTime + 86400) or nowTime > (openTime + 172800) then return 9 end
  150 + end
  151 +
129 152 if oper == 1 then -- 开始委托
130 153 if team == "" then return 3 end
131 154 local conditions = data.condition:toTableArray(true)
132   - local heros = team:toNumMap()
  155 + local heros = team:toArray(true,"=")
  156 + if not next(heros) then return 8 end
133 157 local UnitCsv = csvdb["unitCsv"]
134 158 for _, conds in pairs(conditions) do
135 159 local count = 0
136 160 for _, heroId in pairs(heros) do
137 161 local hero = role.heros[heroId]
138   - if not hero then return end
  162 + if not hero then return 8 end
139 163  
140 164 if conds[1] == 1 then
141 165 if hero:getProperty("level") >= conds[2] then
... ... @@ -169,7 +193,7 @@ function _M.taskRpc(agent, data)
169 193 end
170 194 local quick = msg.quick
171 195 local endTime = data.time + collect.time
172   - local remainT = skynet.timex() - endTime
  196 + local remainT = endTime - skynet.timex()
173 197 if not quick and remainT > 0 then return 6 end
174 198  
175 199 if quick and remainT > 0 then
... ... @@ -180,15 +204,15 @@ function _M.taskRpc(agent, data)
180 204  
181 205 local carbonCsv = csvdb["idle_battleCsv"]
182 206 local expCarbonId = role:getProperty("hangInfo").expCarbonId
183   - local coidCarbonId = role:getProperty("hangInfo").carbonId
184   - if not carbonCsv[expCarbonId] or not expCarbonId[coidCarbonId] then return 7 end
  207 + if not carbonCsv[expCarbonId] then return 7 end
185 208  
186 209 local totalCoef = 0
187   - for _, heroId in ipairs(collect.team:toNumMap()) do
  210 + for _, heroId in ipairs(collect.team:toArray(true,"=")) do
188 211 local hero = role.heros[heroId]
189 212 if hero then
190 213 totalCoef = totalCoef + getHeroCoef(hero, data.success)
191 214 hero:addHeroFaith(data.trust)
  215 + heroFaithMap[heroId] = hero:getProperty("faith")
192 216 end
193 217 end
194 218  
... ... @@ -198,8 +222,8 @@ function _M.taskRpc(agent, data)
198 222 bigSuccess = true
199 223 end
200 224  
201   - local money = math.ceil(carbonCsv[coidCarbonId].money / 5 * data.time * carbonCsv[coidCarbonId].money_clear)
202   - local exp = math.ceil(carbonCsv[expCarbonId].exp / 5 * data.time * carbonCsv[expCarbonId].exp_clear)
  225 + local money = math.ceil(carbonCsv[expCarbonId].money / 5 * data.time * data.money_clear)
  226 + local exp = math.ceil(carbonCsv[expCarbonId].exp / 5 * data.time * data.exp_clear)
203 227 local itemReward = data.item_clear_special:toNumMap()
204 228 itemReward[ItemId.Gold] = (itemReward[ItemId.Gold] or 0) + money
205 229 itemReward[ItemId.Exp] = (itemReward[ItemId.Exp] or 0) + exp
... ... @@ -219,7 +243,10 @@ function _M.taskRpc(agent, data)
219 243  
220 244 role:updateProperty({field = "seaport", value = seaport})
221 245  
222   - SendPacket(actionCodes.Seaport_taskRpc, MsgPack.pack(role:packReward(reward, change)))
  246 + local result = role:packReward(reward, change)
  247 + result["heroFaith"] = heroFaithMap
  248 +
  249 + SendPacket(actionCodes.Seaport_taskRpc, MsgPack.pack(result))
223 250 return true
224 251 end
225 252  
... ... @@ -229,33 +256,40 @@ function _M.shopRpc(agent, data)
229 256 local id = msg.id or 0
230 257 local count = msg.count or 1
231 258  
232   - local seaport = role:getProperty{"seaport"}
233   - local shop = seaport.shop or {}
234   -
235   - if (shop[id] or 0) >= data.limit then return 1 end
236   -
237 259 local shopCsv = {}
238 260 local dataSet = csvdb["shop_normalCsv"]
239   - for _, data in pairs(dataSet) do
240   - if data.shop == 5 then
241   - shopCsv[data.id] = data
  261 + for _, datat in pairs(dataSet) do
  262 + if datat.shop == 5 then
  263 + shopCsv[datat.id] = datat
242 264 end
243 265 end
  266 + local sdata = shopCsv[id]
  267 +
  268 + if not sdata then return 2 end
  269 +
  270 + local seaport = role:getProperty("seaport")
  271 + local shop = seaport.shop or {}
244 272  
245   - local data = shopCsv[id]
246   - if not data then return 2 end
  273 + if (shop[id] or 0) >= sdata.limit then return 1 end
247 274  
248   - if role:getItemCount(data.icon) < data.cost * count then return 3 end
  275 +
  276 +
  277 +
249 278  
250   - role:costItems({[data.icon] = data.cost * count}, {log = {desc = "seaportShop", int1 = id, int2 = count}})
  279 + if role:getItemCount(sdata.icon) < sdata.cost * count then return 3 end
251 280  
252   - local itemReward = data.gift:toNumMap()
  281 + role:costItems({[sdata.icon] = sdata.cost * count}, {log = {desc = "seaportShop", int1 = id, int2 = count}})
  282 +
  283 + local itemReward = sdata.gift:toNumMap()
253 284 for itemId, value in pairs(itemReward) do
254 285 itemReward[itemId] = value * count
255 286 end
256 287  
257 288 local reward, change = role:award(itemReward, {log = {desc = "seaportShop", int1 = id, int2 = count}})
258 289  
  290 + shop[id] = (shop[id] or 0) + count
  291 + seaport.shop = shop
  292 +
259 293 role:updateProperty({field = "seaport", value = seaport})
260 294  
261 295 SendPacket(actionCodes.Seaport_shopRpc, MsgPack.pack(role:packReward(reward, change)))
... ...
src/actions/TowerAction.lua
... ... @@ -109,7 +109,9 @@ function _M.endBattleRpc(agent, data)
109 109  
110 110 curLevel = curLevel + 1
111 111 reward, change = role:award(curTower.reward, {log = {desc = "towerBattle", int1 = id}})
112   - role:checkTaskEnter("TowerPass", {count = 1, type = towerType + 1})
  112 + if towerType == 0 then
  113 + role:checkTaskEnter("TowerPass", {level = towerInfo.l})
  114 + end
113 115 end
114 116  
115 117 if towerType == 0 then
... ...
src/models/Diner.lua
... ... @@ -193,10 +193,6 @@ function Diner:calSellReward(sell, delta, dishData, isExpedite)
193 193 local addReward = {}
194 194 for key, value in pairs(dishData.item_normal:toNumMap()) do
195 195 addReward[key] = (addReward[key] or 0) + value * delta
196   - if key == ItemId.Gold then
197   - local goldPriceAdd = self.owner:getBnousDiner(4,value)
198   - addReward[key] = addReward[key] + goldPriceAdd * delta
199   - end
200 196 end
201 197  
202 198 popular = dishData.famous_normal * delta
... ... @@ -234,10 +230,16 @@ function Diner:calSellReward(sell, delta, dishData, isExpedite)
234 230 end
235 231 upValue[-1] = (upValue[-1] or 0) + collectAdd
236 232  
  233 + -- 电波塔加成
  234 + local goldCount = self.owner:getBnousDiner(4,addReward[ItemId.Gold])
  235 +
237 236 for id, count in pairs(addReward) do
238 237 addReward[id] = math.floor(count * (1 + (upValue[id] or 0) / 100))
239 238 reward = reward:incrv(id, addReward[id])
240 239 end
  240 +
  241 + reward = reward:incrv(ItemId.Gold, goldCount)
  242 +
241 243 popular = math.floor(popular * (1 + (upValue[-1] or 0) / 100))
242 244  
243 245 return reward, popular
... ...
src/models/RolePlugin.lua
... ... @@ -1351,8 +1351,8 @@ function RolePlugin.bind(Role)
1351 1351 end
1352 1352 if done then
1353 1353 update = true
1354   - self:award(data.phase_award, {log = {desc = "seaportReward", int1 = set[1].phase, int2 = set[1].id}})
1355   - donate[id] = 1
  1354 + self:award(set[1].phase_award, {log = {desc = "seaportReward", int1 = set[1].phase, int2 = set[1].id}})
  1355 + donate[idx] = 1
1356 1356 end
1357 1357 end
1358 1358 seaport.donate = donate
... ... @@ -1386,7 +1386,6 @@ function RolePlugin.bind(Role)
1386 1386  
1387 1387 local carbonCsv = csvdb["idle_battleCsv"]
1388 1388 local expCarbonId = self:getProperty("hangInfo").expCarbonId
1389   - local coidCarbonId = self:getProperty("hangInfo").carbonId
1390 1389 local taskCsv = csvdb["seaport_taskCsv"]
1391 1390 local endTime = openTime0 + 86400 * 2
1392 1391 for slot, set in pairs(taskCsv) do
... ... @@ -1397,10 +1396,10 @@ function RolePlugin.bind(Role)
1397 1396 local teams = collect[slot].team
1398 1397 local time = collect[slot].time
1399 1398 if time + data.time <= endTime then
1400   - if not carbonCsv[expCarbonId] or not expCarbonId[coidCarbonId] then return 7 end
  1399 + if not carbonCsv[expCarbonId] then break end
1401 1400  
1402 1401 local totalCoef = 0
1403   - for _, heroId in ipairs(teams:toNumMap()) do
  1402 + for _, heroId in ipairs(teams:toArray(true,"=")) do
1404 1403 local hero = self.heros[heroId]
1405 1404 if hero then
1406 1405 totalCoef = totalCoef + getHeroCoef(hero, data.success)
... ... @@ -1414,8 +1413,8 @@ function RolePlugin.bind(Role)
1414 1413 bigSuccess = true
1415 1414 end
1416 1415  
1417   - local money = math.ceil(carbonCsv[coidCarbonId].money / 5 * data.time * carbonCsv[coidCarbonId].money_clear)
1418   - local exp = math.ceil(carbonCsv[expCarbonId].exp / 5 * data.time * carbonCsv[expCarbonId].exp_clear)
  1416 + local money = math.ceil(carbonCsv[expCarbonId].money / 5 * data.time * data.money_clear)
  1417 + local exp = math.ceil(carbonCsv[expCarbonId].exp / 5 * data.time * data.exp_clear)
1419 1418 local itemReward = data.item_clear_special:toNumMap()
1420 1419 itemReward[ItemId.Gold] = (itemReward[ItemId.Gold] or 0) + money
1421 1420 itemReward[ItemId.Exp] = (itemReward[ItemId.Exp] or 0) + exp
... ... @@ -1441,7 +1440,7 @@ function RolePlugin.bind(Role)
1441 1440 donate = {}
1442 1441 }
1443 1442 end
1444   - self:setProperty("seaport",seaport)
  1443 + self:updateProperty({field = "seaport", value = seaport})
1445 1444 end
1446 1445 end
1447 1446  
... ... @@ -1468,9 +1467,9 @@ function RolePlugin.bind(Role)
1468 1467 end
1469 1468 end)
1470 1469 result[idx] = {}
1471   - for i,v in ipairs(temp) do
  1470 + for i,v in pairs(temp) do
1472 1471 if v then
1473   - result[idx][i] = v
  1472 + result[idx][i] = tonumber(v)
1474 1473 end
1475 1474 end
1476 1475 end
... ...
src/models/RoleTask.lua
... ... @@ -191,7 +191,7 @@ local AchievListener = {
191 191 [TaskType.OverOderTask] = {{14}},
192 192 [TaskType.FoodSellGold] = {{15, f("count")}},
193 193 [TaskType.DinerPopular] = {{16, f("count")}},
194   - [TaskType.TowerPass] = {{17, f("count"), f("type")}},
  194 + [TaskType.TowerPass] = {{17, f("level")}},
195 195 [TaskType.OpenBox] = {{18, f("count")}},
196 196 [TaskType.DinerLevelUp] = {{19, f("level"), f("type")}},
197 197 [TaskType.DinerTalentUp] = {{20, 1, f("type")}},
... ... @@ -493,6 +493,7 @@ function RoleTask.bind(Role)
493 493 [6] = true,
494 494 [7] = true,
495 495 [16] = true,
  496 + [17] = true,
496 497 [19] = true,
497 498 [22] = true,
498 499 [23] = true,
... ...
src/services/globald.lua
... ... @@ -155,22 +155,27 @@ end
155 155  
156 156 -- @desc: 检查海港贸易开启、关闭
157 157 local function check_trade_seaport_status()
158   - local delta = 1615579200 + 1000
159   - local nowTime = delta or skynet.timex()
  158 + local nowTime = skynet.timex()
160 159 local nextTime = dayLater(nowTime)
161   - local interval = nextTime - nowTime + 1
  160 + local interval = 100 * (nextTime - nowTime + 1)
162 161  
163 162 local curTm = os.date("*t", nowTime)
164   - if curTm.wday == 7 and curTm.hour == 4 then
165   - redisproxy:hset("autoincrement_set", "seaportTime0", nowTime)
166   - redisproxy:hset("autoincrement_set", "seaportTime1", 1)
167   - redisproxy:del(SEAPORT_TRADE_TASK_1)
168   - redisproxy:del(SEAPORT_TRADE_TASK_2)
  163 + if curTm.wday == 7 and curTm.hour >= 4 then -- 周六
  164 + local oldTime = tonumber(redisproxy:hget("autoincrement_set", "seaportTime0")) or 0
  165 + local cur4Time = specTime({hour = 4},nowTime)
  166 + if cur4Time ~= oldTime then
  167 + redisproxy:hset("autoincrement_set", "seaportTime0", cur4Time)
  168 + redisproxy:hset("autoincrement_set", "seaportTime1", 1)
  169 + redisproxy:del(SEAPORT_TRADE_TASK_1)
  170 + redisproxy:del(SEAPORT_TRADE_TASK_2)
  171 + end
169 172 end
170   - if curTm.wday == 1 and curTm.hour == 4 then
171   - redisproxy:hset("autoincrement_set", "seaportTime2", 1)
  173 + if curTm.wday == 1 and curTm.hour >= 4 then -- 周日
  174 + if (tonumber(redisproxy:hget("autoincrement_set", "seaportTime1")) or 0) == 1 then
  175 + redisproxy:hset("autoincrement_set", "seaportTime2", 1)
  176 + end
172 177 end
173   - if curTm.wday == 2 and curTm.hour == 4 then
  178 + if curTm.wday == 2 and curTm.hour >= 4 then -- 周一
174 179 -- redisproxy:hset("autoincrement_set", "seaportTime0", 0)
175 180 redisproxy:hset("autoincrement_set", "seaportTime1", 0)
176 181 redisproxy:hset("autoincrement_set", "seaportTime2", 0)
... ...