CreateRole.lua 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  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 ROLE_NAME_LEN_MAX = 21
  28. local ROLE_NAME_LEN_MIN = 5
  29. local OP_RET_SUCC = 1
  30. local OP_RET_FAIL = 0
  31. -- 生成一个11位的全局不重复的数字组成的id
  32. -- 规则 前6位服务器index 后五位自增id
  33. function genIdentity()
  34. local firstStr= Config.SVR_INDEX
  35. local nowMax = CommonDB.getIdentityMax()
  36. nowMax = nowMax + 1
  37. CommonDB.setIdentityMax(nowMax)
  38. return firstStr .. "" .. nowMax
  39. end
  40. function getFakeIdentityMax()
  41. local firstStr= Config.SVR_INDEX
  42. local id = CommonDB.getFakeIdentityMax()
  43. return firstStr .. string.format("%05d", id)
  44. end
  45. local function checkRoleName(roleName, default)
  46. --如果roleName是nil 游戏名不能为空
  47. if not roleName then
  48. return false, Lang.CREATE_ROLE_FAIL_NAME_NIL
  49. end
  50. local nameLen = string.len(roleName)
  51. --如果游戏名长度小于游戏名最小长度 角色名过短
  52. if nameLen < ROLE_NAME_LEN_MIN then
  53. return false, Lang.CREATE_ROLE_FAIL_NAME_LEN1
  54. end
  55. --如果游戏名长度大于游戏名最小长度 角色名过长
  56. if nameLen > ROLE_NAME_LEN_MAX then
  57. return false, Lang.CREATE_ROLE_FAIL_NAME_LEN2
  58. end
  59. if default == nil then
  60. --如果游戏名中包含非法字符 角色名中有非法字符
  61. if roleName ~= FilterUtil.filterName(roleName) then
  62. return false, Lang.CREATE_ROLE_FAIL_NAME_FILTER
  63. end
  64. end
  65. --角色名已经存在
  66. if RoleDBLogic.isNameExistInDB(roleName) then
  67. return false, Lang.CREATE_ROLE_FAIL_NAME_DUPLICATE
  68. end
  69. return true
  70. end
  71. function creatFakeDb(account, serverTag)
  72. local db = RoleDBLogic.createDefaultRole(account, serverTag)
  73. local identity = genIdentity()
  74. db.identity = identity
  75. db.name = account
  76. return db
  77. end
  78. function createNewRole(human)
  79. if _G.is_middle == true then
  80. return
  81. end
  82. -- if human.db or RoleDBLogic.isAccountExistInDB(human.account, human.serverTag) then
  83. -- assert(nil)
  84. -- return
  85. -- end
  86. if human.db or RoleDBLogic.isNewUniqueTagExistInDB(human.account, human.serverTag) then
  87. assert(nil)
  88. return
  89. end
  90. human.db = RoleDBLogic.createDefaultRole(human.account, human.serverTag)
  91. -- 保存数据
  92. human.db.name = human.account
  93. local identity = genIdentity()
  94. human.db.identity = identity
  95. -- 测试 临时增加,用于防沉迷测试
  96. human.db.age = 20
  97. ----------
  98. RelationGiftLogic.relationCreate(human)
  99. ObjHuman.initHuman(human)
  100. ObjHuman.save(human)
  101. ObjHuman.onLogin(human, true)
  102. createRoleSettingUp(human)
  103. ReportManager.register(human)
  104. end
  105. -- 改名操作结果
  106. CHANGE_NAME_RET_FAIL = 0 -- 失败
  107. CHANGE_NAME_RET_OK = 1 -- 成功,首次改名
  108. CHANGE_NAME_RET_OK2 = 2 -- 成功,非首次改名
  109. CHANGE_NAME_COST = 200
  110. function changeName(human, roleName)
  111. local msgRet = Msg.gc.GC_ROLE_CHANGE_NAME
  112. msgRet.ret = CHANGE_NAME_RET_FAIL
  113. local isOk, tip = checkRoleName(roleName)
  114. if not isOk then
  115. msgRet.tip = tip
  116. Msg.send(msgRet, human.fd)
  117. return
  118. end
  119. if not human.db.changeNameCnt then
  120. human.db.changeNameCnt = 1
  121. else
  122. if human.db.zuanshi < CHANGE_NAME_COST then
  123. msgRet.tip = Lang.COMMON_NO_ZUANSHI
  124. Msg.send(msgRet, human.fd)
  125. return
  126. end
  127. human.db.changeNameCnt = human.db.changeNameCnt + 1
  128. ObjHuman.decZuanshi(human, -CHANGE_NAME_COST, "change_name")
  129. end
  130. ObjHuman.onlineHuman[human.db.name] = nil
  131. ObjHuman.onlineHuman[roleName] = human
  132. human.db.name = roleName
  133. ObjHuman.save(human)
  134. msgRet.ret = CHANGE_NAME_RET_OK
  135. if human.db.changeNameCnt > 1 then
  136. msgRet.ret = CHANGE_NAME_RET_OK2
  137. end
  138. msgRet.tip = "ok"
  139. Msg.send(msgRet, human.fd)
  140. if human.db.changeNameCnt == 1 then
  141. -- 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)
  142. -- 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)
  143. -- ReportManager.create(human)
  144. -- Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip)
  145. 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)
  146. 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)
  147. ReportManager.create(human)
  148. Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, human.db.ip)
  149. end
  150. end
  151. -- 改名查询
  152. function changeNameQuery(human)
  153. local msgRet = Msg.gc.GC_ROLE_CHANGE_NAME_QUERY
  154. if human.db.changeNameCnt == nil then
  155. msgRet.price = 0
  156. --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)
  157. 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)
  158. else
  159. msgRet.price = CHANGE_NAME_COST
  160. end
  161. Msg.send(msgRet,human.fd)
  162. end
  163. function randomName(human, sex)
  164. local msgRet = Msg.gc.GC_ROLE_RANDOM_NAME
  165. msgRet.sex = sex
  166. msgRet.name = getRandomName(sex)
  167. Msg.send(msgRet, human.fd)
  168. end
  169. function getRandomName(sex)
  170. if not sex then
  171. sex = math.random(1, 2)
  172. end
  173. local random1 = math.random(1, #PlayerNamesExcel.xing)
  174. if sex == 1 then
  175. local random2 = math.random(1, #PlayerNamesExcel.name)
  176. return PlayerNamesExcel.xing[random1].xing..PlayerNamesExcel.name[random2].name
  177. else
  178. local random2 = math.random(1, #PlayerNamesExcel.name2)
  179. return PlayerNamesExcel.xing[random1].xing..PlayerNamesExcel.name2[random2].name
  180. end
  181. end
  182. -- 创角时修改角色信息
  183. function createRoleChangeInfo(human,name,sex,firendCode)
  184. local msgRet = Msg.gc.GC_ROLE_CREATE_ROLE_CHANGE_MSG
  185. local isOk = checkRoleName(name)
  186. if isOk == false then
  187. msgRet.ret = 1
  188. Msg.send(msgRet,human.fd)
  189. return
  190. end
  191. -- 创角
  192. if not human.db.changeNameCnt then
  193. human.db.changeNameCnt = 0
  194. else
  195. if human.db.zuanshi < CHANGE_NAME_COST then
  196. msgRet.ret = 1
  197. Msg.send(msgRet, human.fd)
  198. return
  199. end
  200. human.db.changeNameCnt = human.db.changeNameCnt + 1
  201. ObjHuman.decZuanshi(human, -CHANGE_NAME_COST, "change_name")
  202. end
  203. ObjHuman.onlineHuman[human.db.name] = nil
  204. ObjHuman.onlineHuman[name] = human
  205. human.db.name = name
  206. human.db.sex = sex
  207. RoleHeadLogic.setHead(human, sex, RoleHeadLogic.HEAD_TYPE_1)
  208. ObjHuman.save(human)
  209. ChatPaoMaLogic.loginTips(human)
  210. -- 好友推荐 todo
  211. RelationGiftLogic.relationBind(human, firendCode)
  212. msgRet.ret = 0
  213. Msg.send(msgRet,human.fd)
  214. -- 记录流失日志
  215. if human.db.changeNameCnt == 0 then
  216. -- 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)
  217. -- 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)
  218. -- ReportManager.create(human)
  219. -- Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip)
  220. 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)
  221. 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)
  222. ReportManager.create(human)
  223. Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, human.db.ip)
  224. end
  225. end
  226. function createRoleSettingUp(human)
  227. -- 赠送新英雄 上阵
  228. local heroId = SysParameter.getSysParameter(SysParameter.PARAMETER_8)
  229. if heroId and heroId ~= 0 then
  230. local bagIndex, uuid = HeroLogic.addHero(human, heroId,nil, 1, "create_role")
  231. if bagIndex and uuid and type(uuid) == "string" then
  232. local msg = {}
  233. msg.type = CombatDefine.COMBAT_TYPE1
  234. msg.formation = 1
  235. msg.heroList = "0,"..uuid
  236. msg.helpList = ""
  237. msg.jibanList = ""
  238. CombatPosLogic.updatePos(human, msg)
  239. end
  240. end
  241. end
  242. RANDOM_HEAD_ID_TABLE = nil
  243. function getRandomHead()
  244. if RANDOM_HEAD_ID_TABLE == nil then
  245. RANDOM_HEAD_ID_TABLE = {}
  246. for k, v in pairs(RoleExcel.head) do
  247. RANDOM_HEAD_ID_TABLE[#RANDOM_HEAD_ID_TABLE + 1] = k
  248. end
  249. end
  250. local index = math.random(1, #RANDOM_HEAD_ID_TABLE)
  251. return RANDOM_HEAD_ID_TABLE[index]
  252. end
  253. RANDOM_BODY_ID_TABLE = nil
  254. function getRandomBody()
  255. if RANDOM_BODY_ID_TABLE == nil then
  256. RANDOM_BODY_ID_TABLE = {}
  257. for k, v in pairs(RoleExcel.body) do
  258. RANDOM_BODY_ID_TABLE[#RANDOM_BODY_ID_TABLE + 1] = k
  259. end
  260. end
  261. local index = math.random(1, #RANDOM_BODY_ID_TABLE)
  262. return RANDOM_BODY_ID_TABLE[index]
  263. end