RoleRealmLogic.lua 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. --境界系统
  2. --[=[
  3. 数据库存储数据: human.db.realmLv
  4. 只存境界等级,境界的属性加成等则是实时计算
  5. ]=]--
  6. local Msg = require("core.Msg")
  7. local BagLogic = require("bag.BagLogic")
  8. local realmConfig = require("excel.realm").Sheet1
  9. local Grid = require("bag.Grid")
  10. local RoleAttr = require("role.RoleAttr")
  11. local RoleDefine = require("role.RoleDefine")
  12. local ObjHuman = require("core.ObjHuman")
  13. local Util = require("common.Util")
  14. local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
  15. local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
  16. local TriggerLogic = require("trigger.TriggerLogic")
  17. local TriggerDefine = require("trigger.TriggerDefine")
  18. local TalismanLogic = require("talisman.TalismanLogic")
  19. local REALM_UPGRADE_LOG = "realmUpgrade"
  20. --加万分比的属性
  21. local sp_attr = {
  22. [201] = 1,
  23. [202] = 1,
  24. [203] = 1,
  25. [204] = 1
  26. }
  27. -- 获取来自秘宝的属性倍数加成
  28. local function getAttrMulFromTalisman(human)
  29. local attrMul = TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.RoleReal_Attr_Mul)
  30. attrMul = attrMul / 100
  31. return attrMul
  32. end
  33. local function calAttrSum(net, lv, attrMul)
  34. attrMul = 1 + attrMul
  35. for i = 1, lv do
  36. local cfg = realmConfig[i]
  37. if cfg and cfg.attrs then
  38. for k,v in ipairs(cfg.attrs) do
  39. local id = v[1]
  40. local value = v[2]
  41. net[k] = net[k] or {}
  42. net[k].key = id
  43. if sp_attr[id] then
  44. net[k].value = (net[k].value or 0) + (value / 100)
  45. else
  46. net[k].value = (net[k].value or 0) + value
  47. end
  48. net[k].value = net[k].value * attrMul
  49. end
  50. end
  51. end
  52. end
  53. local function sendToclient(human)
  54. local realmLv = human.db and human.db.realmLv or 0
  55. local msgRet = Util.copyTable(Msg.gc.GC_ROLE_REALM_QUERY)
  56. local bl = false
  57. if realmLv <= 0 then
  58. bl = true
  59. msgRet.nowRealmName = ""
  60. end
  61. local nowRealmCfg = bl and realmConfig[1] or realmConfig[realmLv]
  62. if not nowRealmCfg then
  63. return
  64. end
  65. if not bl then
  66. msgRet.nowRealmName = nowRealmCfg.name
  67. end
  68. local attrMul = getAttrMulFromTalisman(human)
  69. local attrsCfg = nowRealmCfg.attrs
  70. msgRet.nowAttrs[0] = #attrsCfg
  71. if bl then
  72. for k,v in ipairs(attrsCfg) do
  73. msgRet.nowAttrs[k] = msgRet.nowAttrs[k] or {}
  74. msgRet.nowAttrs[k].key = v[1] or 0
  75. msgRet.nowAttrs[k].value = 0
  76. end
  77. else
  78. calAttrSum(msgRet.nowAttrs, realmLv, attrMul)
  79. end
  80. local itemId, itemCnt, nextRealmCfg
  81. if realmLv < #realmConfig then
  82. nextRealmCfg = realmConfig[realmLv + 1]
  83. if not nextRealmCfg then
  84. return
  85. end
  86. itemCnt = nextRealmCfg.itemCnt
  87. calAttrSum(msgRet.nextAttrs, realmLv+1, 0)
  88. else
  89. nextRealmCfg = realmConfig[realmLv]
  90. itemCnt = 0
  91. calAttrSum(msgRet.nextAttrs, realmLv, 0)
  92. end
  93. itemId = nextRealmCfg.itemId
  94. Grid.makeItem(msgRet.itemData, itemId, itemCnt)
  95. msgRet.nextRealmName = nextRealmCfg.name
  96. msgRet.nextAttrs[0] = #nextRealmCfg.attrs
  97. Msg.send(msgRet, human.fd)
  98. if BagLogic.getItemCnt(human, itemId) < itemCnt then
  99. RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_303)
  100. end
  101. end
  102. --境界对属性加成
  103. function doCalcHero(human, attrs)
  104. if not human then
  105. return
  106. end
  107. local realmLv = human.db and human.db.realmLv or 0
  108. if realmLv <= 0 then
  109. return
  110. end
  111. local attrMul = getAttrMulFromTalisman(human)
  112. attrMul = 1 + attrMul
  113. for i=1, realmLv do
  114. local singleCfg = realmConfig[i]
  115. if singleCfg and singleCfg.attrs then
  116. for _, v in ipairs(singleCfg.attrs) do
  117. if v[2] > 0 then
  118. RoleAttr.updateValue(v[1], v[2] * attrMul, attrs)
  119. end
  120. end
  121. end
  122. end
  123. end
  124. --获取境界名字
  125. function getRealmName(human)
  126. local name = ""
  127. if human.db and human.db.realmLv then
  128. local singleCfg = realmConfig[human.db.realmLv]
  129. if singleCfg and singleCfg.name then
  130. name = singleCfg.name
  131. end
  132. end
  133. return name
  134. end
  135. --获取当前境界
  136. function GetNowRealmLv(human)
  137. local realmLv = human.db.realmLv or 0
  138. return realmLv
  139. end
  140. --红点判断
  141. function isDot(human)
  142. local realmLv = human.db.realmLv or 0
  143. if realmLv >= #realmConfig then
  144. return false
  145. end
  146. local singleCfg = realmConfig[1]
  147. if realmLv > 0 then
  148. singleCfg = realmConfig[realmLv + 1]
  149. end
  150. if not singleCfg then
  151. return false
  152. end
  153. local itemId = singleCfg.itemId
  154. local itemCnt = singleCfg.itemCnt
  155. if BagLogic.getItemCnt(human, itemId) < itemCnt then
  156. return false
  157. end
  158. return true
  159. end
  160. --查询
  161. function query(human)
  162. sendToclient(human)
  163. end
  164. --提升境界
  165. function realmUpgrade(human)
  166. local realmLv = human.db.realmLv or 0
  167. if realmLv >= #realmConfig then
  168. return
  169. end
  170. realmLv = realmLv + 1
  171. local singleCfg = realmConfig[realmLv]
  172. if not singleCfg then
  173. return
  174. end
  175. local itemId = singleCfg.itemId
  176. local itemCnt = singleCfg.itemCnt
  177. if not BagLogic.checkItemCnt(human, itemId, itemCnt) then
  178. RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_303)
  179. return
  180. end
  181. BagLogic.delItem(human, itemId, itemCnt, REALM_UPGRADE_LOG)
  182. human.db.realmLv = realmLv
  183. sendToclient(human)
  184. RoleAttr.cleanHeroAttrCache(human)
  185. RoleAttr.doCalc(human)
  186. ObjHuman.sendAttr(human, RoleDefine.ZHANDOULI)
  187. ObjHuman.doCalc(human)
  188. TriggerLogic.PublishEvent(TriggerDefine.REALM_UPGRADE, human.db._id, 1, realmLv)
  189. end