Skill_1.lua 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. Skill = {}
  2. local this = {}
  3. -- 计算连击值
  4. -- function Skill.calculationComboValue(actor,skillCfgId,skillLevel,skill)
  5. -- -- local growthFactor = ConfigDataManager.getTableValue("cfg_skill_info","growthFactor","skillID",skillCfgId,"skillLevel",skillLevel)
  6. -- -- local comboValue = ConfigDataManager.getTableValue("cfg_skill","comboValue","id",skill)
  7. -- -- if string.isNullOrEmpty(comboValue) or string.isNullOrEmpty(growthFactor) then
  8. -- -- return 0
  9. -- -- end
  10. -- -- local add = math.ceil(tonumber(comboValue) * tonumber(growthFactor) / 10000)
  11. -- return 1000000, 1000000, 1000000
  12. -- -- return 1
  13. -- end
  14. -- 添加连击技能
  15. function Skill.ComboSkillUp(actor)
  16. local comboSkill = getrolefield(actor, "role.roleskill.comboskill")
  17. local skillLv = comboSkill.skillLv
  18. local skillCfgId = comboSkill.skillCfgId
  19. if skillCfgId == 0 then
  20. local comboSkillInfo = ConfigDataManager.getTableValue("cfg_global", "value", "id",
  21. GlobalConfigId.COMBO_SKILL_INFO)
  22. -- error(comboSkillInfo)
  23. local baseCareer = getbaseinfo(actor, "getbasecareer")
  24. local comboSkillTable = string.split(comboSkillInfo, "|")
  25. for index, careerComboSkill in pairs(comboSkillTable) do
  26. local careerComboSkillInfo = string.split(careerComboSkill, "#")
  27. if tonumber(careerComboSkillInfo[1]) == tonumber(baseCareer) then
  28. skillCfgId = tonumber(careerComboSkillInfo[2])
  29. end
  30. end
  31. skillLv = 0
  32. end
  33. skillLv = skillLv + 1
  34. local skillInfo = ConfigDataManager.getTable("cfg_skill_info", "skillID", skillCfgId, "skillLevel", skillLv)
  35. if table.isEmpty(skillInfo) then
  36. -- error("没有找到连击技能的配置信息")
  37. return
  38. end
  39. local skill = skillInfo[1]
  40. local skillLevelUpItemID = skill.skilllevelupitemid
  41. if not string.isNullOrEmpty(skillLevelUpItemID) then
  42. local skillLevelUpItemTable = string.split(skillLevelUpItemID, "|")
  43. local cost = {}
  44. for index, skillLevelUpItem in pairs(skillLevelUpItemTable) do
  45. local itemInfo = string.split(skillLevelUpItem, "#")
  46. local itemCfgId = tonumber(itemInfo[1])
  47. local count = tonumber(itemInfo[2])
  48. local have = getbagitemcountbyid(actor, itemCfgId)
  49. if have < count then
  50. tipinfo(actor, "连击技能已经提升到最高等级,无法再升级了")
  51. -- noticeTip.noticeinfo(actor, StringIdConst.TEXT346)
  52. return
  53. end
  54. cost[tostring(itemCfgId)] = count
  55. end
  56. for index, costCount in pairs(cost) do
  57. removeitemfrombag(actor, index, costCount, 0, 9999, '连击技能')
  58. end
  59. end
  60. local nextSkillLevel = skillLv
  61. addcomboskill(actor, skillCfgId, nextSkillLevel)
  62. TaskHandler.TriggerTaskGoal(actor, TaskTargetType.ACTIVATE_COMBO_SKILL)
  63. OpenServerCompetition.updateRankData(actor, CompetitionType.COMBO_SKILL, nextSkillLevel)
  64. local rid = getbaseinfo(actor, "rid")
  65. sendrefluamsg(actor, LuaMessageIdToClient.RES_COMBO_SKILL_MODEL_VIEW,
  66. {tostring(rid), tostring(skillCfgId), tostring(skillLv)})
  67. LogManager.RoleUpComboSkill(actor, nextSkillLevel)
  68. end
  69. -- 玩家进入是也发送连击技能视野包
  70. function Skill.playerequipview(actor, targetPlayer)
  71. local comboSkill = getrolefield(targetPlayer, "role.roleskill.comboskill")
  72. local skillLv = comboSkill.skillLv
  73. local skillCfgId = comboSkill.skillCfgId
  74. if skillCfgId == 0 then
  75. return
  76. end
  77. local rid = getbaseinfo(targetPlayer, "rid")
  78. sendluamsg(actor, LuaMessageIdToClient.RES_COMBO_SKILL_MODEL_VIEW,
  79. {tostring(rid), tostring(skillCfgId), tostring(skillLv)})
  80. end
  81. -- 判断是不是连击技能
  82. function Skill.isComboSkill(actor, skillId)
  83. local comboSkillInfo = ConfigDataManager.getTableValue("cfg_global", "value", "id", GlobalConfigId.COMBO_SKILL_INFO)
  84. local comboSkillTable = string.split(comboSkillInfo, "|")
  85. for index, careerComboSkill in pairs(comboSkillTable) do
  86. local careerComboSkillInfo = string.split(careerComboSkill, "#")
  87. if tonumber(careerComboSkillInfo[2]) == skillId then
  88. return true
  89. end
  90. end
  91. return false
  92. end
  93. --- 学习或升级技能
  94. function Skill.levelUp(actor, skillInfo)
  95. if skillInfo == SkillConfigId.DEMON_HERMIT_SKILL_ID then
  96. levelupskill(actor, SkillConfigId.DEMON_HERMIT_COMMON_ONE_SKILL_ID, 1, 0)
  97. levelupskill(actor, SkillConfigId.DEMON_HERMIT_COMMON_TWO_SKILL_ID, 1, 0)
  98. levelupskill(actor, SkillConfigId.DEMON_HERMIT_COMMON_THREE_SKILL_ID, 1, 0)
  99. end
  100. end
  101. function skilltest(actor)
  102. Skill.releaseSkill(actor, SkillConfigId.DEMON_HERMIT_SKILL_ID)
  103. end
  104. --- 技能生效前触发
  105. function Skill.releaseSkill(actor, skillid)
  106. if skillid == SkillConfigId.DEMON_HERMIT_SKILL_ID then
  107. setplaydef(actor, PlayerDefKey.skill.DEMON_HERMIT_SKILL, 1)
  108. local skillTable = {SkillConfigId.DEMON_HERMIT_COMMON_ONE_SKILL_ID,
  109. SkillConfigId.DEMON_HERMIT_COMMON_TWO_SKILL_ID,
  110. SkillConfigId.DEMON_HERMIT_COMMON_THREE_SKILL_ID}
  111. setskillopen(actor, skillTable, 1)
  112. -- setskillopen(actor,SkillConfigId.DEMON_HERMIT_COMMON_ONE_SKILL_ID,1)
  113. -- setskillopen(actor,SkillConfigId.DEMON_HERMIT_COMMON_TWO_SKILL_ID,1)
  114. -- setskillopen(actor,SkillConfigId.DEMON_HERMIT_COMMON_THREE_SKILL_ID,1)
  115. SceneMap.sendEnterViewInfoByType(actor, SceneMap.viewKey.DEMON_HERMIT_SKILL, 1)
  116. end
  117. end
  118. function Skill.closePet(actor)
  119. local pets = getpets(actor)
  120. local typeString = type(pets)
  121. if typeString ~= "table" then
  122. return nil
  123. end
  124. for index, value in ipairs(pets) do
  125. local petActor = pets[index]
  126. removepet(petActor);
  127. end
  128. end
  129. --- 关闭恶灵召唤技能
  130. function Skill.closeDemonHermitSkill(actor)
  131. -- local skill = getplaydef(actor, PlayerDefKey.skill.DEMON_HERMIT_SKILL)
  132. -- if skill and skill == 1 then
  133. -- local skillTable = {SkillConfigId.DEMON_HERMIT_COMMON_ONE_SKILL_ID,SkillConfigId.DEMON_HERMIT_COMMON_TWO_SKILL_ID,SkillConfigId.DEMON_HERMIT_COMMON_THREE_SKILL_ID}
  134. -- setskillopen(actor,skillTable,0)
  135. -- --setskillopen(actor,SkillConfigId.DEMON_HERMIT_COMMON_TWO_SKILL_ID,0)
  136. -- --setskillopen(actor,SkillConfigId.DEMON_HERMIT_COMMON_THREE_SKILL_ID,0)
  137. -- SceneMap.sendEnterViewInfoByType(actor, SceneMap.viewKey.DEMON_HERMIT_SKILL, 0)
  138. -- setplaydef(actor, PlayerDefKey.skill.DEMON_HERMIT_SKILL,0)
  139. -- info("关闭召唤恶灵")
  140. -- end
  141. end
  142. SYS_SKILL_TRANSFER = "R$skill_transfer"
  143. function Skill.GetTransfers()
  144. local transfers = getsysvar(SYS_SKILL_TRANSFER)
  145. if transfers == nil then
  146. transfers = {}
  147. end
  148. return transfers
  149. end
  150. function Skill.SetTransfers(transfers)
  151. setsysvar(SYS_SKILL_TRANSFER, transfers)
  152. end
  153. function Skill.releaseSkillAfter(actor, skillid)
  154. if skillid ~= 1005003 then
  155. return
  156. end
  157. local teamid = getbaseinfo(actor, "teamid")
  158. if teamid == nil or teamid == "" or teamid == 0 then
  159. return
  160. end
  161. local transfers = Skill.GetTransfers()
  162. if transfers == nil then
  163. transfers = {}
  164. end
  165. local playerName = getbaseinfo(actor, "rolename")
  166. local mapId = tonumber(getbaseinfo(actor, "mapid"))
  167. local x = tonumber(getbaseinfo(actor, "x"))
  168. local y = tonumber(getbaseinfo(actor, "y"))
  169. local line = tonumber(getbaseinfo(actor, "line"))
  170. local transferData = transfers[actor:toString()];
  171. if transferData == nil then
  172. transferData = {
  173. index = 0
  174. }
  175. end
  176. transferData.index = transferData.index + 1
  177. transferData.rid = actor:toString()
  178. transferData.playerName = playerName
  179. transferData.mapId = mapId
  180. transferData.line = line
  181. transferData.x = x
  182. transferData.y = y
  183. transfers[actor:toString()] = transferData
  184. Skill.SetTransfers(transfers)
  185. local team = getteaminfo(teamid)
  186. for k, v in pairs(team.allteammemberinfo) do
  187. if tostring(v.rid) ~= tostring(actor:toString()) then
  188. local tActor = getactor(actor, v.rid)
  189. sendluamsg(tActor, LuaMessageIdToSever.SkillTransfer, transferData)
  190. end
  191. end
  192. end
  193. function Skill.onTransfers(actor, data)
  194. local rid = data.rid
  195. if rid == nil or rid == "" then
  196. return
  197. end
  198. rid = tostring(rid)
  199. local index = data.index
  200. local transfers = Skill.GetTransfers()
  201. if transfers == nil or transfers[rid] == nil then
  202. tipinfo(actor, string.format("未知错误"))
  203. return
  204. end
  205. local transferData = transfers[rid];
  206. if transferData.index ~= index then
  207. tipinfo(actor, string.format("操作过时"))
  208. return
  209. end
  210. local canTransfer, reason = SummonAndChat.checkMapTransfer(actor, transferData.mapId, transferData.line, transferData.x,
  211. transferData.y)
  212. if canTransfer then
  213. -- 执行传送
  214. maptransfer(actor, transferData.x, transferData.y, transferData.mapId, transferData.line, 3)
  215. addbuff(actor, 100500301, 1)
  216. else
  217. tipinfo(actor, "无法传送:" .. reason)
  218. end
  219. end