Blame view

src/actions/RadioAction.lua 7.28 KB
782ee57d   liuzujun   多编队功能
1
2
  local _M = {}
  
16634605   liuzujun   多队挂机,天赋道具合成
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  -- 获取英雄大成功率
  local function getHeroCoef(hero, condition)
      -- 基础概率
      local rareMap = {[HeroQuality.N] = 10, [HeroQuality.R] = 10, [HeroQuality.SR] = 15, [HeroQuality.SSR] = 20}
      local rare = hero:getRare()
      local result = 0
      for _, it in ipairs(condition:toTableArray(true)) do
          local type = it[1]
          local value = it[2]
          local add = it[3]
          if type == 1 then   -- 种族加成
              if hero:getCamp() == value then
                  result = result + add
              end
          elseif type == 2 then   -- 定位加成
              if hero:getPosition() == value then
                  result = result + add
              end
          end
      end
782ee57d   liuzujun   多编队功能
23
  
16634605   liuzujun   多队挂机,天赋道具合成
24
      return result + (rareMap[rare] or 0)
782ee57d   liuzujun   多编队功能
25
26
  end
  
16634605   liuzujun   多队挂机,天赋道具合成
27
28
29
30
31
32
33
34
35
  local function getQuestMax(role)
      local count = 0
      for _, carbonId in ipairs(globalCsv.crusade_team_unlock or {}) do
          if role:checkHangPass(carbonId) then
              count = count + 1
          end
      end
  
      return count + (globalCsv.cursade_team_count_initial or 0)
782ee57d   liuzujun   多编队功能
36
37
38
39
40
41
42
43
  end
  
  function _M.startQuestRpc(agent, data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  	local id = msg.id
  	local heros = msg.heros
      local result = {}
16634605   liuzujun   多队挂机,天赋道具合成
44
45
46
47
      local radioTask = role:getProperty("radioTask")
      if table.numbers(radioTask) >= getQuestMax(role) then
          return 1
      end
782ee57d   liuzujun   多编队功能
48
      --  check id
16634605   liuzujun   多队挂机,天赋道具合成
49
50
51
52
      local config = csvdb["crusadeCsv"][id]
      if not config then return 2 end
      if not role:checkHangPass(config.unlock) then return 3 end
      if radioTask[id] then return 4 end
782ee57d   liuzujun   多编队功能
53
      --  check hero
16634605   liuzujun   多队挂机,天赋道具合成
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
      --1=指定等级=人数
      --2=指定稀有度=人数 
      --3=人数
      local needHeroCnt = 0
      local lvlMap = {}
      local rareMap = {}
      for _, it in ipairs(config.condition:toTableArray(true)) do
          local type = it[1]
          if type == 1 then
              lvlMap[1] = it[2]
              lvlMap[2] = it[3]
          elseif type == 2 then
              rareMap[1] = it[2]
              rareMap[2] = it[3]
          elseif type == 3 then
              needHeroCnt = it[2]
          end
      end
cf1d48e8   liuzujun   多队挂机70005报错 Bug
72
      for _, heroId in pairs(heros) do
16634605   liuzujun   多队挂机,天赋道具合成
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
          local hero = role.heros[heroId]
          if hero then
              needHeroCnt = needHeroCnt - 1
              if next(lvlMap) then
                  if hero:getProperty("level") >= lvlMap[1] then
                      lvlMap[2] = lvlMap[2] - 1
                      if lvlMap[2] <= 0 then
                          lvlMap = {}
                      end
                  end
              end
              if next(rareMap) then
                  if hero:getRare() >= rareMap[1] then
                      rareMap[2] = rareMap[2] - 1
                  end
                      if rareMap[2] <= 0 then
                          rareMap = {}
                      end
              end
          end
      end
      if needHeroCnt > 0 or next(rareMap) or next(lvlMap) then
          return 5
      end
782ee57d   liuzujun   多编队功能
97
      -- start quest, set finish time
40b19300   chenyueqi   电波塔激活加成效果后对各个系统的加成
98
      local timeSub = role:getBnousCrusade(config.time)
16634605   liuzujun   多队挂机,天赋道具合成
99
      local taskData = {}
40b19300   chenyueqi   电波塔激活加成效果后对各个系统的加成
100
      taskData["time"] = skynet.timex() + config.time + timeSub
16634605   liuzujun   多队挂机,天赋道具合成
101
102
103
      taskData["heros"] = heros
      radioTask[id] = taskData
      role:updateProperty({field="radioTask", value=radioTask, notNotify=true})
782ee57d   liuzujun   多编队功能
104
  
f76d63e1   liuzujun   联动任务活动
105
      SendPacket(actionCodes.Radio_startQuestRpc, MsgPack.pack({id=id, task=taskData}))
5b4db3a3   liuzujun   增加电台任务日志完成类型
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
  
      local herolist = {}
      for _, heroId in ipairs(heros) do
          local hero = role.heros[heroId]
          if hero then
              table.insert(herolist, hero:getProperty("type"))
          end
      end
  
  	--  讨伐行动 
  	role:log("punitive_action", {
  		mission_id	= id, --关卡ID
  		mission_herolist = herolist, -- 英雄ID,排序以玩家出战设置为准,示例:[111, 222, 333, 444, 555]
  		mission_success_rate = 0, -- 大成功几率
  		mission_reward = {}, -- 获得奖励,建议使用json格式记录。示例:{ itemid1: 1,  itemid2: 3,  itemid3: 5}
  		mission_result = 0, -- 战斗结果(0-无效,1-胜利,2-失败)
          mission_roundtime = 0, -- 完成耗时(秒)
          mission_cleartype = 1,  -- 1-开始; 2-完成(领取奖励时)
  	})
782ee57d   liuzujun   多编队功能
125
126
127
128
129
130
131
  	return true
  end
  
  function _M.finishQuestRpc(agent, data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  	local id = msg.id
782ee57d   liuzujun   多编队功能
132
      -- check finish time
16634605   liuzujun   多队挂机,天赋道具合成
133
134
135
136
      local radioTask = role:getProperty("radioTask")
      local task = radioTask[id]
      if not task then return 1 end
      if skynet.timex() < task.time then return 2 end
782ee57d   liuzujun   多编队功能
137
      --  check id
16634605   liuzujun   多队挂机,天赋道具合成
138
139
140
141
      local config = csvdb["crusadeCsv"][id]
      if not config then return 3 end
      local carbonData = csvdb["idle_battleCsv"][config.unlock]
      if not carbonData then return 4 end
782ee57d   liuzujun   多编队功能
142
      --  get heros
16634605   liuzujun   多队挂机,天赋道具合成
143
      local totalCoef = 0
8efb24c9   liuzujun   天赋系统属性加成改为百分比
144
      local exp = config.time / 60
4f7cffe5   liuzujun   多队挂机任务取消功能,累充奖励
145
      local heroFaithMap = {}
16634605   liuzujun   多队挂机,天赋道具合成
146
147
148
149
      for _, heroId in ipairs(task.heros) do
          local hero = role.heros[heroId]
          if hero then
              totalCoef = totalCoef + getHeroCoef(hero, config.success)
8efb24c9   liuzujun   天赋系统属性加成改为百分比
150
151
152
              -- 增加英雄信赖
              hero:addHeroFaith(exp)
              heroFaithMap[heroId] = hero:getProperty("faith")
16634605   liuzujun   多队挂机,天赋道具合成
153
154
          end
      end
782ee57d   liuzujun   多编队功能
155
      -- send award
16634605   liuzujun   多队挂机,天赋道具合成
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
      local bigSuccess = false
      local result = math.randomInt(0, 100)
      if result < totalCoef then
          bigSuccess = true
      end
      local money = math.ceil(carbonData.money / 5) * config.time * config.money_clear
      local exp = math.ceil(carbonData.exp / 5) * config.time * config.exp_clear
      local itemReward = config.item_clear_special:toNumMap()
      itemReward[ItemId.Gold] = (itemReward[ItemId.Gold] or 0) + money
      itemReward[ItemId.Exp] = (itemReward[ItemId.Exp] or 0) + exp
      if bigSuccess then
          for key, value in pairs(itemReward) do
              itemReward[key] = math.ceil(1.5 * value)
          end
      end
  
      local r, change = role:award(itemReward, {log = {desc = "radioQuest", int1 = id}})
      
      radioTask[id] = nil
      role:updateProperty({field="radioTask", value=radioTask, notNotify = true})
782ee57d   liuzujun   多编队功能
176
  
16634605   liuzujun   多队挂机,天赋道具合成
177
178
179
      local msg = role:packReward(r, change)
      msg["big"] = bigSuccess
      msg["id"] = id
8efb24c9   liuzujun   天赋系统属性加成改为百分比
180
      msg["heroFaith"] = heroFaithMap
6a2b449c   liuzujun   扭蛋机奖励不合并显示, 新增多队挂...
181
182
      SendPacket(actionCodes.Radio_finishQuestRpc, MsgPack.pack(msg))
      
f76d63e1   liuzujun   联动任务活动
183
      role:checkTaskEnter("RadioTaskStart", {heroCnt = #task.heros})
6a2b449c   liuzujun   扭蛋机奖励不合并显示, 新增多队挂...
184
185
186
187
188
189
190
191
192
193
194
195
196
197
  
      local herolist = {}
      for _, heroId in ipairs(task.heros) do
          local hero = role.heros[heroId]
          if hero then
              table.insert(herolist, hero:getProperty("type"))
          end
      end
  
  	--  讨伐行动 
  	role:log("punitive_action", {
  		mission_id	= id, --关卡ID
  		mission_herolist = herolist, -- 英雄ID,排序以玩家出战设置为准,示例:[111, 222, 333, 444, 555]
  		mission_success_rate = totalCoef, -- 大成功几率
8ec16c21   liuzujun   天赋升级写日志报错
198
  		mission_reward = r, -- 获得奖励,建议使用json格式记录。示例:{ itemid1: 1,  itemid2: 3,  itemid3: 5}
6a2b449c   liuzujun   扭蛋机奖励不合并显示, 新增多队挂...
199
  		mission_result = 1, -- 战斗结果(0-无效,1-胜利,2-失败)
5b4db3a3   liuzujun   增加电台任务日志完成类型
200
201
          mission_roundtime = config.time, -- 完成耗时(秒)
          mission_cleartype = 2,  -- 1-开始; 2-完成(领取奖励时)
6a2b449c   liuzujun   扭蛋机奖励不合并显示, 新增多队挂...
202
203
  	})
  
782ee57d   liuzujun   多编队功能
204
205
206
  	return true
  end
  
4f7cffe5   liuzujun   多队挂机任务取消功能,累充奖励
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
  function _M.cancelQuestRpc(agent, data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  	local id = msg.id
      -- check finish time
      local radioTask = role:getProperty("radioTask")
      local task = radioTask[id]
      if not task then return 1 end
      if skynet.timex() > task.time then return 2 end
      radioTask[id] = nil
      role:updateProperty({field="radioTask", value=radioTask, notNotify = true})
  
      SendPacket(actionCodes.Radio_cancelQuestRpc, MsgPack.pack({id = id}))
      return true
  end
  
782ee57d   liuzujun   多编队功能
223
  return _M