CreateRole.lua 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. ----------------------
  2. -- 创角相关逻辑
  3. ----------------------
  4. local Config = require("Config")
  5. local PlayerNamesExcel = require("excel.playerNames")
  6. local CommonDB = require("common.CommonDB")
  7. local Lang = require("common.Lang")
  8. local FilterUtil = require("common.FilterUtil")
  9. local Log = require("common.Log")
  10. local LogDefine = require("common.LogDefine")
  11. local CommonDefine = require("common.CommonDefine")
  12. local Msg = require("core.Msg")
  13. local ObjHuman = require("core.ObjHuman")
  14. local RoleDBLogic = require("role.RoleDBLogic")
  15. local RoleHeadLogic = require("role.RoleHeadLogic")
  16. local Broadcast = require("broadcast.Broadcast")
  17. local RoleExcel = require("excel.role")
  18. local ReportManager = require("platform.ReportManager")
  19. local HeroLogic = require("hero.HeroLogic")
  20. local RelationGiftLogic = require("present.RelationGiftLogic")
  21. local CombatDefine = require("combat.CombatDefine")
  22. local CombatPosLogic = require("combat.CombatPosLogic")
  23. local SysParameter = require("common.SysParameter")
  24. local ChatPaoMaLogic = require("chat.ChatPaoMaLogic")
  25. local MailExcel = require("excel.mail")
  26. local MailManager = require("mail.MailManager")
  27. local TriggerLogic = require("trigger.TriggerLogic")
  28. local TriggerDefine = require("trigger.TriggerDefine")
  29. local RoleStorageBox = require("roleSystem.RoleStorageBox")
  30. local DataCache = require("core.DataCache")
  31. local ROLE_NAME_LEN_MAX = 21
  32. local ROLE_NAME_LEN_MIN = 5
  33. local OP_RET_SUCC = 1
  34. local OP_RET_FAIL = 0
  35. local GodsAreaNS
  36. local AnotherWorldBattleNS
  37. -- 特定渠道用户创角时发送的邮件ID
  38. local NEW_ROLE_MAIL_ID = 7023
  39. -- 特定渠道列表
  40. local TARGET_CHANNEL_ARRAY = {1, 9}
  41. local function sendMail(human)
  42. local mailCfg = MailExcel.mail[NEW_ROLE_MAIL_ID]
  43. MailManager.add(MailManager.SYSTEM, human.db._id, mailCfg.title, mailCfg.content, nil, mailCfg.senderName or "GM")
  44. end
  45. -- 生成一个11位的全局不重复的数字组成的id
  46. -- 规则 前6位服务器index 后五位自增id
  47. function genIdentity()
  48. local firstStr= Config.SVR_INDEX
  49. local nowMax = CommonDB.getIdentityMax()
  50. nowMax = nowMax + 1
  51. CommonDB.setIdentityMax(nowMax)
  52. return firstStr .. "" .. nowMax
  53. end
  54. function getFakeIdentityMax()
  55. local firstStr= Config.SVR_INDEX
  56. local id = CommonDB.getFakeIdentityMax()
  57. return firstStr .. string.format("%05d", id)
  58. end
  59. local function checkRoleName(roleName, default)
  60. --如果roleName是nil 游戏名不能为空
  61. if not roleName then
  62. return false, Lang.CREATE_ROLE_FAIL_NAME_NIL
  63. end
  64. local nameLen = string.len(roleName)
  65. --如果游戏名长度小于游戏名最小长度 角色名过短
  66. if nameLen < ROLE_NAME_LEN_MIN then
  67. return false, Lang.CREATE_ROLE_FAIL_NAME_LEN1
  68. end
  69. --如果游戏名长度大于游戏名最小长度 角色名过长
  70. if nameLen > ROLE_NAME_LEN_MAX then
  71. return false, Lang.CREATE_ROLE_FAIL_NAME_LEN2
  72. end
  73. if default == nil then
  74. --如果游戏名中包含非法字符 角色名中有非法字符
  75. if roleName ~= FilterUtil.filterName(roleName) then
  76. return false, Lang.CREATE_ROLE_FAIL_NAME_SHIELD
  77. end
  78. end
  79. --角色名已经存在
  80. if RoleDBLogic.isNameExistInDB(roleName) then
  81. return false, Lang.CREATE_ROLE_FAIL_NAME_DUPLICATE
  82. end
  83. return true
  84. end
  85. function creatFakeDb(account, serverTag)
  86. local db = RoleDBLogic.createDefaultRole(account, serverTag)
  87. local identity = genIdentity()
  88. db.identity = identity
  89. db.name = account
  90. return db
  91. end
  92. function createNewRole(human)
  93. if _G.is_middle == true then
  94. return
  95. end
  96. -- if human.db or RoleDBLogic.isAccountExistInDB(human.account, human.serverTag) then
  97. -- assert(nil)
  98. -- return
  99. -- end
  100. if human.db or RoleDBLogic.isNewUniqueTagExistInDB(human.phpChanelID, human.account, human.serverTag) then
  101. assert(nil)
  102. return
  103. end
  104. human.db = RoleDBLogic.createDefaultRole(human.phpChanelID, human.account, human.serverTag)
  105. -- 保存数据
  106. human.db.name = human.account
  107. local identity = genIdentity()
  108. human.db.identity = identity
  109. -- 测试 临时增加,用于防沉迷测试
  110. human.db.age = 20
  111. ----------
  112. -- 给角色的月光包盒中添加一定数量的道具
  113. RoleStorageBox.FillStorageBox(human)
  114. RelationGiftLogic.relationCreate(human)
  115. ObjHuman.initHuman(human)
  116. ObjHuman.save(human)
  117. ObjHuman.onLogin(human, true)
  118. createRoleSettingUp(human)
  119. DataCache.Insert_PlayerUuidList(human.db._id, human.db.lv)
  120. -- 特定渠道用户创角时发送的邮件
  121. if table.find(TARGET_CHANNEL_ARRAY, human.phpChanelID) then
  122. sendMail(human)
  123. end
  124. ReportManager.register(human)
  125. end
  126. -- 改名操作结果
  127. CHANGE_NAME_RET_FAIL = 0 -- 失败
  128. CHANGE_NAME_RET_OK = 1 -- 成功,首次改名
  129. CHANGE_NAME_RET_OK2 = 2 -- 成功,非首次改名
  130. CHANGE_NAME_COST = 200
  131. function changeName(human, roleName)
  132. local msgRet = Msg.gc.GC_ROLE_CHANGE_NAME
  133. msgRet.ret = CHANGE_NAME_RET_FAIL
  134. local isOk, tip = checkRoleName(roleName)
  135. if not isOk then
  136. msgRet.tip = tip
  137. Msg.send(msgRet, human.fd)
  138. return
  139. end
  140. if not human.db.changeNameCnt then
  141. human.db.changeNameCnt = 1
  142. else
  143. if human.db.zuanshi < CHANGE_NAME_COST then
  144. msgRet.tip = Lang.COMMON_NO_ZUANSHI
  145. Msg.send(msgRet, human.fd)
  146. return
  147. end
  148. human.db.changeNameCnt = human.db.changeNameCnt + 1
  149. ObjHuman.decZuanshi(human, -CHANGE_NAME_COST, "change_name")
  150. end
  151. ObjHuman.onlineHuman[human.db.name] = nil
  152. ObjHuman.onlineHuman[roleName] = human
  153. human.db.name = roleName
  154. ObjHuman.save(human)
  155. msgRet.ret = CHANGE_NAME_RET_OK
  156. if human.db.changeNameCnt > 1 then
  157. msgRet.ret = CHANGE_NAME_RET_OK2
  158. end
  159. msgRet.tip = "ok"
  160. Msg.send(msgRet, human.fd)
  161. TriggerLogic.PublishEvent(TriggerDefine.CHANGE_NAME, human.db._id, 1)
  162. GodsAreaNS = GodsAreaNS or require("godsArea.GodsAreaNS")
  163. GodsAreaNS.UpdateShowData(human, 1)
  164. AnotherWorldBattleNS = AnotherWorldBattleNS or require("anotherWorldBattle.AnotherWorldBattleNS")
  165. AnotherWorldBattleNS.PlayerChangeName(human)
  166. if human.db.changeNameCnt == 1 then
  167. -- Log.write(Log.LOGID_OSS_REGISTER, human.db._id, human.db.account, human.db.name, human.ip,human.pf or "",human.appid, human.db.changeNameCnt)
  168. -- Log.write(Log.LOGID_OSS_CREATELOSS,human.db.account, human.db.name, LogDefine.HUMAN_LOST.CREATE_NAME_FINISH, human.db.ip,human.pf or "",human.appid, human.phpChanelID)
  169. -- ReportManager.create(human)
  170. -- Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip)
  171. Log.write(Log.LOGID_OSS_REGISTER, human.db._id, human.db.newUniqueTag, human.db.name, human.ip,human.pf or "",human.appid, human.db.changeNameCnt)
  172. Log.write(Log.LOGID_OSS_CREATELOSS,human.db.newUniqueTag, human.db.name, LogDefine.HUMAN_LOST.CREATE_NAME_FINISH, human.db.ip,human.pf or "",human.appid, human.phpChanelID)
  173. ReportManager.create(human)
  174. Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, human.db.ip)
  175. end
  176. end
  177. -- 改名查询
  178. function changeNameQuery(human)
  179. local msgRet = Msg.gc.GC_ROLE_CHANGE_NAME_QUERY
  180. if human.db.changeNameCnt == nil then
  181. msgRet.price = 0
  182. --Log.write(Log.LOGID_OSS_CREATELOSS,human.db.account, human.db.name, LogDefine.HUMAN_LOST.SHOW_NAME_PANEL, human.db.ip,human.pf or "",human.appid, human.phpChanelID)
  183. Log.write(Log.LOGID_OSS_CREATELOSS,human.db.newUniqueTag, human.db.name, LogDefine.HUMAN_LOST.SHOW_NAME_PANEL, human.db.ip,human.pf or "",human.appid, human.phpChanelID)
  184. else
  185. msgRet.price = CHANGE_NAME_COST
  186. end
  187. Msg.send(msgRet,human.fd)
  188. end
  189. function randomName(human, sex)
  190. local msgRet = Msg.gc.GC_ROLE_RANDOM_NAME
  191. msgRet.sex = sex
  192. msgRet.name = getRandomName(sex)
  193. Msg.send(msgRet, human.fd)
  194. end
  195. function getRandomName(sex)
  196. if not sex then
  197. sex = math.random(1, 2)
  198. end
  199. local random1 = math.random(1, #PlayerNamesExcel.xing)
  200. if sex == 1 then
  201. local random2 = math.random(1, #PlayerNamesExcel.name)
  202. return PlayerNamesExcel.xing[random1].xing..PlayerNamesExcel.name[random2].name
  203. else
  204. local random2 = math.random(1, #PlayerNamesExcel.name2)
  205. return PlayerNamesExcel.xing[random1].xing..PlayerNamesExcel.name2[random2].name
  206. end
  207. end
  208. -- 创角时修改角色信息
  209. function createRoleChangeInfo(human,name,sex,firendCode)
  210. local msgRet = Msg.gc.GC_ROLE_CREATE_ROLE_CHANGE_MSG
  211. local isOk = checkRoleName(name)
  212. if isOk == false then
  213. msgRet.ret = 1
  214. Msg.send(msgRet,human.fd)
  215. return
  216. end
  217. -- 创角
  218. if not human.db.changeNameCnt then
  219. human.db.changeNameCnt = 0
  220. else
  221. if human.db.zuanshi < CHANGE_NAME_COST then
  222. msgRet.ret = 1
  223. Msg.send(msgRet, human.fd)
  224. return
  225. end
  226. human.db.changeNameCnt = human.db.changeNameCnt + 1
  227. ObjHuman.decZuanshi(human, -CHANGE_NAME_COST, "change_name")
  228. end
  229. ObjHuman.onlineHuman[human.db.name] = nil
  230. ObjHuman.onlineHuman[name] = human
  231. human.db.name = name
  232. human.db.sex = sex
  233. RoleHeadLogic.setHead(human, sex, RoleHeadLogic.HEAD_TYPE_1)
  234. ObjHuman.save(human)
  235. ChatPaoMaLogic.loginTips(human)
  236. -- 好友推荐 todo
  237. RelationGiftLogic.relationBind(human, firendCode)
  238. msgRet.ret = 0
  239. Msg.send(msgRet,human.fd)
  240. -- 记录流失日志
  241. if human.db.changeNameCnt == 0 then
  242. -- Log.write(Log.LOGID_OSS_REGISTER, human.db._id, human.db.account, human.db.name, human.ip,human.pf or "",human.appid, human.db.changeNameCnt)
  243. -- Log.write(Log.LOGID_OSS_CREATELOSS,human.db.account, human.db.name, LogDefine.HUMAN_LOST.CREATE_NAME_FINISH, human.db.ip,human.pf or "",human.appid, human.phpChanelID)
  244. -- ReportManager.create(human)
  245. -- Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip)
  246. Log.write(Log.LOGID_OSS_REGISTER, human.db._id, human.db.newUniqueTag, human.db.name, human.ip,human.pf or "",human.appid, human.db.changeNameCnt)
  247. Log.write(Log.LOGID_OSS_CREATELOSS,human.db.newUniqueTag, human.db.name, LogDefine.HUMAN_LOST.CREATE_NAME_FINISH, human.db.ip,human.pf or "",human.appid, human.phpChanelID)
  248. ReportManager.create(human)
  249. Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, human.db.ip)
  250. end
  251. end
  252. function createRoleSettingUp(human)
  253. -- 赠送新英雄 上阵
  254. local heroId = SysParameter.getSysParameter(SysParameter.PARAMETER_8)
  255. if heroId and heroId ~= 0 then
  256. local bagIndex, uuid = HeroLogic.addHero(human, heroId,nil, 1, "create_role")
  257. if bagIndex and uuid and type(uuid) == "string" then
  258. local msg = {}
  259. msg.type = CombatDefine.COMBAT_TYPE1
  260. msg.formation = 1
  261. msg.heroList = "0,"..uuid
  262. msg.helpList = ""
  263. msg.jibanList = ""
  264. CombatPosLogic.updatePos(human, msg)
  265. end
  266. end
  267. end
  268. RANDOM_HEAD_ID_TABLE = nil
  269. function getRandomHead()
  270. if RANDOM_HEAD_ID_TABLE == nil then
  271. RANDOM_HEAD_ID_TABLE = {}
  272. for k, v in pairs(RoleExcel.head) do
  273. RANDOM_HEAD_ID_TABLE[#RANDOM_HEAD_ID_TABLE + 1] = k
  274. end
  275. end
  276. local index = math.random(1, #RANDOM_HEAD_ID_TABLE)
  277. return RANDOM_HEAD_ID_TABLE[index]
  278. end
  279. RANDOM_HEADFRAME_ID_TABLE = nil
  280. function getRandomHeadFrame()
  281. if RANDOM_HEADFRAME_ID_TABLE == nil then
  282. RANDOM_HEADFRAME_ID_TABLE = {}
  283. for k, v in pairs(RoleExcel.headFrame) do
  284. RANDOM_HEADFRAME_ID_TABLE[#RANDOM_HEADFRAME_ID_TABLE + 1] = k
  285. end
  286. end
  287. local index = math.random(1, #RANDOM_HEADFRAME_ID_TABLE)
  288. return RANDOM_HEADFRAME_ID_TABLE[index]
  289. end
  290. RANDOM_BODY_ID_TABLE = nil
  291. function getRandomBody()
  292. if RANDOM_BODY_ID_TABLE == nil then
  293. RANDOM_BODY_ID_TABLE = {}
  294. for k, v in pairs(RoleExcel.body) do
  295. RANDOM_BODY_ID_TABLE[#RANDOM_BODY_ID_TABLE + 1] = k
  296. end
  297. end
  298. local index = math.random(1, #RANDOM_BODY_ID_TABLE)
  299. return RANDOM_BODY_ID_TABLE[index]
  300. end