Commit 0a07bdd981c3ccb5305c53746d63f284ca5ac78b
1 parent
6871f4f6
角色升级 。gm
Showing
10 changed files
with
336 additions
and
298 deletions
Show diff stats
src/ProtocolCode.lua
| @@ -15,235 +15,14 @@ actionCodes = { | @@ -15,235 +15,14 @@ actionCodes = { | ||
| 15 | Role_queryLoginRpc = 101, | 15 | Role_queryLoginRpc = 101, |
| 16 | Role_createRpc = 102, | 16 | Role_createRpc = 102, |
| 17 | Role_loginRpc = 103, | 17 | Role_loginRpc = 103, |
| 18 | + Role_syncTimeRpc = 104, | ||
| 18 | Role_updateProperty = 105, | 19 | Role_updateProperty = 105, |
| 19 | Role_updateProperties = 106, | 20 | Role_updateProperties = 106, |
| 20 | - Role_changeFormationRpc = 107, | ||
| 21 | - Role_setCrownRpc = 108, | ||
| 22 | - Role_formationPosRpc = 109, | ||
| 23 | - Role_entrustRpc = 110, | ||
| 24 | - Role_finishEntrustRpc = 111, | ||
| 25 | - Role_updateStoryBook = 112, | ||
| 26 | - Role_finishTalkRpc = 113, | ||
| 27 | - Role_updateHeroBook = 114, | ||
| 28 | - Role_guideRpc = 115, | ||
| 29 | - Role_changeAutoSateRpc = 116, | ||
| 30 | - Role_signRpc = 117, | ||
| 31 | - Role_dailyTaskRpc = 118, | ||
| 32 | - Role_mainTaskRpc = 119, | ||
| 33 | - Role_missionRpc = 120, | ||
| 34 | - Role_formationQuickRpc = 121, | ||
| 35 | - Role_changeNameRpc = 122, | ||
| 36 | - Role_changeHomeBgRpc = 123, | ||
| 37 | - Role_changeHeadIconRpc = 124, | ||
| 38 | - Role_changeHeadFrameRpc = 125, | ||
| 39 | - Role_cookNotesRpc = 126, | ||
| 40 | - Role_cookAddFavoritesRpc = 127, | ||
| 41 | - Role_cookDelFavoritesRpc = 128, | ||
| 42 | - Role_drawCodeRpc = 129, | ||
| 43 | - Role_chat = 130, | ||
| 44 | - Role_signGiftRpc = 131, | ||
| 45 | - Role_changeToRealUserRpc = 132, | ||
| 46 | - Role_cafeSignRpc = 133, | ||
| 47 | - Role_syncTimeRpc = 134, | ||
| 48 | - Role_getLevelRankRpc = 135, | ||
| 49 | - Role_deletAccountRpc = 136, | ||
| 50 | - Role_getItemRankRpc = 137, | ||
| 51 | 21 | ||
| 52 | Hero_loadInfos = 201, | 22 | Hero_loadInfos = 201, |
| 53 | Hero_updateProperty = 202, | 23 | Hero_updateProperty = 202, |
| 54 | - Hero_decomposeRpc = 203, | ||
| 55 | - Hero_qualityRpc = 204, | ||
| 56 | - Hero_strengthRpc = 205, | ||
| 57 | - Hero_lockRpc = 206, | ||
| 58 | - Hero_researchRpc = 207, | ||
| 59 | - Hero_finishResearchRpc = 208, | ||
| 60 | - Hero_treatRpc = 209, | ||
| 61 | - Hero_finishTreatRpc = 210, | ||
| 62 | - Hero_loveItemRpc = 211, | ||
| 63 | - Hero_finishLoveTaskRpc = 212, | ||
| 64 | - Hero_changeDressRpc = 213, | ||
| 65 | - Hero_quickTreatRpc = 214, | ||
| 66 | - Hero_skillUpRpc = 215, | ||
| 67 | - Hero_changeNameRpc = 216, | ||
| 68 | - Hero_likeHeroRpc = 217, | ||
| 69 | - Hero_commentHeroRpc = 218, | ||
| 70 | - Hero_getCommentsRpc = 219, | ||
| 71 | - Hero_likeCommentRpc = 220, | 24 | + Hero_levelUpRpc = 203, |
| 72 | 25 | ||
| 73 | - | ||
| 74 | - | ||
| 75 | - Item_updateProperty = 301, | ||
| 76 | - | ||
| 77 | - Store_produceRpc = 401, | ||
| 78 | - Store_finishBuildRpc = 402, | ||
| 79 | - Store_diamondBuyRpc = 403, | ||
| 80 | - Store_itemBuyRpc = 404, | ||
| 81 | - Store_rechargeRpc = 405, | ||
| 82 | - Store_ayncPurchaseRpc = 406, | ||
| 83 | - Store_purchaseOrderResult = 407, | ||
| 84 | - Store_iapPurchaseRpc = 408, | ||
| 85 | - Store_iapCancelPurchase = 409, | ||
| 86 | - Store_restorePurchaseRpc = 410, | ||
| 87 | - Store_googlePurchaseRpc = 411, | ||
| 88 | - Store_googleCancelPurchase = 412, | ||
| 89 | - Store_samsungPurchaseRpc = 413, | ||
| 90 | - Store_samsungCancelPurchase = 414, | ||
| 91 | - | ||
| 92 | - Trade_getInfoRpc = 450, | ||
| 93 | - Trade_sellRpc = 451, | ||
| 94 | - Trade_buyRpc = 452, | ||
| 95 | - Trade_giveUpRpc = 453, | ||
| 96 | - Trade_cleanBuyRpc = 454, | ||
| 97 | - | ||
| 98 | - Carbon_arrangeCarbonRpc = 500, | ||
| 99 | - Carbon_moveRpc = 501, | ||
| 100 | - Carbon_actionEndRpc = 502, | ||
| 101 | - Carbon_beginGameRpc = 503, | ||
| 102 | - Carbon_endGameRpc = 504, | ||
| 103 | - Carbon_cancelMoveRpc = 505, | ||
| 104 | - Carbon_updateProperty = 506, | ||
| 105 | - Carbon_endCarbonRpc = 507, | ||
| 106 | - Carbon_exitTeamRpc = 508, | ||
| 107 | - Carbon_supplyRpc = 509, | ||
| 108 | - Map_updateProperty = 510, | ||
| 109 | - Carbon_changePosRpc = 511, | ||
| 110 | - Carbon_generateBoss = 512, | ||
| 111 | - Carbon_givpUpBoss = 513, | ||
| 112 | - Carbon_drawBossAward = 514, | ||
| 113 | - Carbon_SelectRpc = 515, | ||
| 114 | - | ||
| 115 | - Friend_updateProperty = 550, | ||
| 116 | - Friend_listRpc = 551, | ||
| 117 | - Friend_searchRpc = 552, | ||
| 118 | - Friend_randomRpc = 553, | ||
| 119 | - Friend_deleteRpc = 554, | ||
| 120 | - Friend_applyRpc = 555, | ||
| 121 | - Friend_applyListRpc = 556, | ||
| 122 | - Friend_handleApplyRpc = 557, | ||
| 123 | - Friend_report = 558, | ||
| 124 | - | ||
| 125 | - Farm_updateProperty = 600, | ||
| 126 | - Farm_drawMaterial = 601, | ||
| 127 | - Farm_levelUpBuilding = 602, | ||
| 128 | - Farm_changeShowMedal = 603, | ||
| 129 | - Farm_plantRpc = 604, | ||
| 130 | - Farm_useItemRpc = 605, | ||
| 131 | - Farm_getPlantRpc = 606, | ||
| 132 | - Farm_farmInfoRpc = 607, | ||
| 133 | - Farm_changeFarmerRpc = 608, | ||
| 134 | - | ||
| 135 | - Tower_updateProperty = 630, | ||
| 136 | - Tower_battleBeginRpc = 631, | ||
| 137 | - Tower_battleEndRpc = 632, | ||
| 138 | - Tower_resetRpc = 633, | ||
| 139 | - Tower_cureRpc = 634, | ||
| 140 | - Tower_changeFormatRpc = 635, | ||
| 141 | - Tower_getRankRpc = 636, | ||
| 142 | - Tower_formatQuickRpc = 637, | ||
| 143 | - Tower_formationPosRpc = 638, | ||
| 144 | - Tower_breakRpc = 639, | ||
| 145 | - | ||
| 146 | - Email_listRpc = 650, | ||
| 147 | - Email_drawAttachRpc = 651, | ||
| 148 | - Email_checkRpc = 652, | ||
| 149 | - Email_delRpc = 653, | ||
| 150 | - Email_drawAllAttachRpc = 654, | ||
| 151 | - | ||
| 152 | - Pvp_updateProperty = 670, | ||
| 153 | - Pvp_battleBeginRpc = 671, | ||
| 154 | - Pvp_battleEndRpc = 672, | ||
| 155 | - Pvp_resetRpc = 673, | ||
| 156 | - Pvp_enterPvpRpc = 674, | ||
| 157 | - Pvp_getRankRpc = 675, | ||
| 158 | - Pvp_changeFormatRpc = 676, | ||
| 159 | - Pvp_formatQuickRpc = 677, | ||
| 160 | - Pvp_formationPosRpc = 678, | ||
| 161 | - Pvp_skillOrderRpc = 679, | ||
| 162 | - Pvp_shopBuyRpc = 680, | ||
| 163 | - | ||
| 164 | - Equip_updateProperty = 750, | ||
| 165 | - Equip_wearEquipRpc = 751, | ||
| 166 | - Equip_repairEquipRpc = 752, | ||
| 167 | - Equip_forgeEquipAttrsRpc = 753, | ||
| 168 | - Equip_replaceEquipAttrRpc = 754, | ||
| 169 | - Equip_buildEquipRpc = 755, | ||
| 170 | - Equip_finishBuildEquipRpc = 756, | ||
| 171 | - Equip_decomposEquipRpc = 757, | ||
| 172 | - Equip_resetEquipRpc = 758, | ||
| 173 | - Equip_upEquipRpc = 759, | ||
| 174 | - | ||
| 175 | - Activity_getRewardRpc = 801, | ||
| 176 | - Activity_lotteryGiftRpc = 802, | ||
| 177 | - Activity_shopBuyRpc = 803, | ||
| 178 | - Activity_puzzleRewardRpc = 804, | ||
| 179 | - Activity_inheritRewardRpc = 805, | ||
| 180 | - Activity_midAutRewardRpc = 806, | ||
| 181 | - Activity_clearRed = 807, | ||
| 182 | - Activity_halloweenMoveRpc = 808, | ||
| 183 | - Activity_halloweenResetRpc = 809, | ||
| 184 | - Activity_halloweenRewardRpc = 810, | ||
| 185 | - Activity_traditionalRewardRpc = 811, | ||
| 186 | - Activity_africanRpc = 812, | ||
| 187 | - Activity_oldBackRpc = 813, | ||
| 188 | - Activity_orderRewardRpc = 814, | ||
| 189 | - Activity_cookHeroRpc = 815, | ||
| 190 | - | ||
| 191 | - Moon_arrangeCarbonRpc = 850, | ||
| 192 | - Moon_moveRpc = 851, | ||
| 193 | - Moon_actionEndRpc = 852, | ||
| 194 | - Moon_beginGameRpc = 853, | ||
| 195 | - Moon_endGameRpc = 854, | ||
| 196 | - Moon_cancelMoveRpc = 855, | ||
| 197 | - Moon_updateProperty = 856, | ||
| 198 | - Moon_endCarbonRpc = 857, | ||
| 199 | - Moon_exitTeamRpc = 858, | ||
| 200 | - Moon_supplyRpc = 859, | ||
| 201 | - Moon_changePosRpc = 860, | ||
| 202 | - Moon_generateBoss = 861, | ||
| 203 | - Moon_givpUpBoss = 862, | ||
| 204 | - Moon_drawBossAward = 863, | ||
| 205 | - Moon_SelectRpc = 864, | ||
| 206 | - | ||
| 207 | - Paradise_arrangeCarbonRpc = 875, | ||
| 208 | - Paradise_moveRpc = 876, | ||
| 209 | - Paradise_actionEndRpc = 877, | ||
| 210 | - Paradise_beginGameRpc = 878, | ||
| 211 | - Paradise_endGameRpc = 879, | ||
| 212 | - Paradise_cancelMoveRpc = 880, | ||
| 213 | - Paradise_updateProperty = 881, | ||
| 214 | - Paradise_endCarbonRpc = 882, | ||
| 215 | - Paradise_exitTeamRpc = 883, | ||
| 216 | - Paradise_supplyRpc = 884, | ||
| 217 | - Paradise_changePosRpc = 885, | ||
| 218 | - Paradise_SelectRpc = 886, | ||
| 219 | - Paradise_buyCountRpc = 887, | ||
| 220 | - | ||
| 221 | - Diner_loadRpc = 900, | ||
| 222 | - Diner_updateProperty = 901, | ||
| 223 | - Diner_updateProperties = 902, | ||
| 224 | - Diner_accessoryUpdateProperty = 903, | ||
| 225 | - Diner_itemUpdateProperty = 904, | ||
| 226 | - Diner_wearAccessoryRpc = 905, | ||
| 227 | - Diner_upLevelAccessoryRpc = 906, | ||
| 228 | - Diner_supplyMaterialRpc = 907, | ||
| 229 | - Diner_changeCarRpc = 908, | ||
| 230 | - Diner_recycleAccessoryRpc = 909, | ||
| 231 | - Diner_heroToBoxRpc = 910, | ||
| 232 | - Diner_saveBoxFitmentRpc = 911, | ||
| 233 | - Diner_recycleFitmentsRpc = 912, | ||
| 234 | - Diner_sellRpc = 913, | ||
| 235 | - Diner_finishSellRpc = 914, | ||
| 236 | - Diner_shopBuyRpc = 915, | ||
| 237 | - Diner_drawRewardRpc = 916, | ||
| 238 | - Diner_talentUpdateProperty = 917, | ||
| 239 | - | ||
| 240 | - Diner_likeOtherBoxRpc = 918, | ||
| 241 | - Diner_comfortRankRpc = 919, | ||
| 242 | - Diner_nearLikeMeRpc = 920, | ||
| 243 | - Diner_friendListRpc = 921, | ||
| 244 | - Diner_getBoxDataRpc = 922, | ||
| 245 | - Diner_changeTalkRpc = 923, | ||
| 246 | - Diner_changeTalkBgRpc = 924, | ||
| 247 | } | 26 | } |
| 248 | 27 | ||
| 249 | rpcResponseBegin = 10000 | 28 | rpcResponseBegin = 10000 |
src/RedisKeys.lua
| 1 | --- role | ||
| 2 | -R_FARM_KEY = "role:%d:farm" | ||
| 3 | -R_TOWER_KEY = "role:%d:tower" | ||
| 4 | -R_COOKLOG_KEY = "role:%d:cooklog" | ||
| 5 | -R_TRADELOG_KEY = "role:%d:tradelog" | ||
| 6 | -R_PVP_KEY = "role:%d:pvp" | ||
| 7 | -R_DINER_KEY = "role:%d:diner" | ||
| 8 | --- rank | ||
| 9 | -RANK_PVP = "rank:pvp" | ||
| 10 | -RANK_TRADE = "rank:trade" | ||
| 11 | -RANK_TOWER = "rank:tower" | ||
| 12 | -RANK_BOX = "rank:box" -- 盒子舒适度排行榜 | ||
| 13 | -MAP_LIKE = "map:box:like" --点赞个数 | ||
| 14 | -RANK_LEVEL = "rank:level" --等级排名 | ||
| 15 | -RANK_ITEM = "rank:item" --活动物品排行 | ||
| 16 | --- 日志 | ||
| 17 | -NOTE_COOK_KEY = "note:cook:%d" | ||
| 18 | - | ||
| 19 | -TRADE_KEY = "trade:%d" | ||
| 20 | -TRADE_ID_KEY = "tradeIDs" | ||
| 21 | - | ||
| 22 | -TASK_ACTIVE = "task:%d:active" -- 记录激活的任务 | ||
| 23 | -TASK_FINISH = "task:%d:finish" -- 记录完成的任务 | ||
| 24 | - | ||
| 25 | -BOSS_SET = "boss:%d:%d" | ||
| 26 | -BOSS_INFO = "boss:battle" | ||
| 27 | - | ||
| 28 | -FRIEND_KEY = "role:%d:friend" --哈希表 | ||
| 29 | -FRIEND_APPLY_KEY = "role:%d:apply" -- set | ||
| 30 | -FRIEND_DINER_LIKE_KEY = "role:%d:diner:like" -- list | ||
| 31 | - | ||
| 32 | -UNION_SET = "global:union" | ||
| 33 | -UNION_KEY = "union:%d" | ||
| 34 | -UNION_ROLE = "union:%d:%d" | ||
| 35 | -UNION_ROLE_SET = "union:%d:roleList" | ||
| 36 | -UNION_APPLY_SET = "union:%d:applyList" | ||
| 37 | - | ||
| 38 | -PVP_KING = "pvp:king" --王者传奇组 | ||
| 39 | -PVP_HONOR = "pvp:honor" --荣耀咸鱼组 | ||
| 40 | -PVP_NOOB = "pvp:noob" --菜鸟组 | ||
| 41 | -PVP_INFO = "pvp:info" --玩家信息组 | ||
| 42 | \ No newline at end of file | 1 | \ No newline at end of file |
| 2 | + | ||
| 3 | + | ||
| 4 | +R_INCR = "role:%d:autoincr" | ||
| 5 | +R_HEROS = "role:%d:heroIds" | ||
| 6 | +R_HERO = "hero:%d:%d" | ||
| 7 | + | ||
| 8 | +-- -- role | ||
| 9 | +-- R_FARM_KEY = "role:%d:farm" | ||
| 10 | +-- R_TOWER_KEY = "role:%d:tower" | ||
| 11 | +-- R_COOKLOG_KEY = "role:%d:cooklog" | ||
| 12 | +-- R_TRADELOG_KEY = "role:%d:tradelog" | ||
| 13 | +-- R_PVP_KEY = "role:%d:pvp" | ||
| 14 | +-- R_DINER_KEY = "role:%d:diner" | ||
| 15 | +-- -- rank | ||
| 16 | +-- RANK_PVP = "rank:pvp" | ||
| 17 | +-- RANK_TRADE = "rank:trade" | ||
| 18 | +-- RANK_TOWER = "rank:tower" | ||
| 19 | +-- RANK_BOX = "rank:box" -- 盒子舒适度排行榜 | ||
| 20 | +-- MAP_LIKE = "map:box:like" --点赞个数 | ||
| 21 | +-- RANK_LEVEL = "rank:level" --等级排名 | ||
| 22 | +-- RANK_ITEM = "rank:item" --活动物品排行 | ||
| 23 | +-- -- 日志 | ||
| 24 | +-- NOTE_COOK_KEY = "note:cook:%d" | ||
| 25 | + | ||
| 26 | +-- TRADE_KEY = "trade:%d" | ||
| 27 | +-- TRADE_ID_KEY = "tradeIDs" | ||
| 28 | + | ||
| 29 | +-- TASK_ACTIVE = "task:%d:active" -- 记录激活的任务 | ||
| 30 | +-- TASK_FINISH = "task:%d:finish" -- 记录完成的任务 | ||
| 31 | + | ||
| 32 | +-- BOSS_SET = "boss:%d:%d" | ||
| 33 | +-- BOSS_INFO = "boss:battle" | ||
| 34 | + | ||
| 35 | +-- FRIEND_KEY = "role:%d:friend" --哈希表 | ||
| 36 | +-- FRIEND_APPLY_KEY = "role:%d:apply" -- set | ||
| 37 | +-- FRIEND_DINER_LIKE_KEY = "role:%d:diner:like" -- list | ||
| 38 | + | ||
| 39 | +-- UNION_SET = "global:union" | ||
| 40 | +-- UNION_KEY = "union:%d" | ||
| 41 | +-- UNION_ROLE = "union:%d:%d" | ||
| 42 | +-- UNION_ROLE_SET = "union:%d:roleList" | ||
| 43 | +-- UNION_APPLY_SET = "union:%d:applyList" | ||
| 44 | + | ||
| 45 | +-- PVP_KING = "pvp:king" --王者传奇组 | ||
| 46 | +-- PVP_HONOR = "pvp:honor" --荣耀咸鱼组 | ||
| 47 | +-- PVP_NOOB = "pvp:noob" --菜鸟组 | ||
| 48 | +-- PVP_INFO = "pvp:info" --玩家信息组 | ||
| 43 | \ No newline at end of file | 49 | \ No newline at end of file |
src/actions/GmAction.lua
| @@ -15,4 +15,11 @@ function _M.clientRequest(agent, data) | @@ -15,4 +15,11 @@ function _M.clientRequest(agent, data) | ||
| 15 | return true | 15 | return true |
| 16 | end | 16 | end |
| 17 | 17 | ||
| 18 | + | ||
| 19 | +function _M.hero(role, pms) | ||
| 20 | + local heroType = tonum(pms.pm1) | ||
| 21 | + role:addHero({type = heroType}) | ||
| 22 | + return "成功" | ||
| 23 | +end | ||
| 24 | + | ||
| 18 | return _M | 25 | return _M |
| 19 | \ No newline at end of file | 26 | \ No newline at end of file |
| @@ -0,0 +1,31 @@ | @@ -0,0 +1,31 @@ | ||
| 1 | +local ipairs = ipairs | ||
| 2 | +local table = table | ||
| 3 | +local math = math | ||
| 4 | +local next = next | ||
| 5 | +local string = string | ||
| 6 | +local redisproxy = redisproxy | ||
| 7 | +local MsgPack = MsgPack | ||
| 8 | +local getRandomName = getRandomName | ||
| 9 | +local mcast_util = mcast_util | ||
| 10 | +local string_format = string.format | ||
| 11 | +local tonumber = tonumber | ||
| 12 | +local require = require | ||
| 13 | +local table_insert = table.insert | ||
| 14 | +local tconcat = table.concat | ||
| 15 | + | ||
| 16 | +local _M = {} | ||
| 17 | +function _M.levelUpRpc( agent, data ) | ||
| 18 | + local role = agent.role | ||
| 19 | + local msg = MsgPack.unpack(data) | ||
| 20 | + local hero = role.heros[msg.id] | ||
| 21 | + if not hero then return end | ||
| 22 | + | ||
| 23 | + if hero:getProperty("level") >= hero:getMaxLevel() then return end | ||
| 24 | + hero:updateProperty({field = "level", delta = 1}) | ||
| 25 | + | ||
| 26 | + SendPacket(actionCodes.Hero_levelUpRpc, '') | ||
| 27 | + return true | ||
| 28 | +end | ||
| 29 | + | ||
| 30 | + | ||
| 31 | +return _M | ||
| 0 | \ No newline at end of file | 32 | \ No newline at end of file |
src/actions/RoleAction.lua
| @@ -74,7 +74,7 @@ function _M.loginRpc( agent, data ) | @@ -74,7 +74,7 @@ function _M.loginRpc( agent, data ) | ||
| 74 | --维护不能登录 | 74 | --维护不能登录 |
| 75 | local maintain = tonumber(redisproxy:hget("autoincrement_set", "maintain")) | 75 | local maintain = tonumber(redisproxy:hget("autoincrement_set", "maintain")) |
| 76 | if maintain and maintain > 0 then | 76 | if maintain and maintain > 0 then |
| 77 | - if tonumber(redisproxy:hget(string_format("role:%d", roleId), "ignoreMaintain")) ~= 1 then | 77 | + if tonumber(redisproxy:hget(string_format("role:%d", roleId), "ignoreMt")) ~= 1 then |
| 78 | response.result = "MAINTAIN_TIP" | 78 | response.result = "MAINTAIN_TIP" |
| 79 | SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response)) | 79 | SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response)) |
| 80 | return true | 80 | return true |
| @@ -99,42 +99,73 @@ function _M.loginRpc( agent, data ) | @@ -99,42 +99,73 @@ function _M.loginRpc( agent, data ) | ||
| 99 | role:reloadWhenLogin() | 99 | role:reloadWhenLogin() |
| 100 | end | 100 | end |
| 101 | 101 | ||
| 102 | - -- if not msg.isGMlogin then | ||
| 103 | - -- local banTime = role:getProperty("banTime") | ||
| 104 | - -- if banTime > now then | ||
| 105 | - -- response.result = "BAN_TIP" | ||
| 106 | - -- response.banTime = banTime | ||
| 107 | - -- response.banType = role:getProperty("banType") | ||
| 108 | - -- response.roleId = roleId | ||
| 109 | - -- SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response)) | ||
| 110 | - -- return true | ||
| 111 | - -- end | ||
| 112 | - -- if banTime ~= 0 then | ||
| 113 | - -- -- 清除封号状态 | ||
| 114 | - -- role:setBan(0) | ||
| 115 | - -- end | ||
| 116 | - -- end | 102 | + if not msg.isGMlogin then |
| 103 | + local banTime = role:getProperty("banTime") | ||
| 104 | + if banTime > now then | ||
| 105 | + response.result = "BAN_TIP" | ||
| 106 | + response.banTime = banTime | ||
| 107 | + response.banType = role:getProperty("banType") | ||
| 108 | + response.roleId = roleId | ||
| 109 | + SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response)) | ||
| 110 | + return true | ||
| 111 | + end | ||
| 112 | + if banTime ~= 0 then | ||
| 113 | + -- 清除封号状态 | ||
| 114 | + role:setBan(0) | ||
| 115 | + end | ||
| 116 | + end | ||
| 117 | SERV_OPEN = redisproxy:hget("autoincrement_set", "server_start") | 117 | SERV_OPEN = redisproxy:hget("autoincrement_set", "server_start") |
| 118 | - local lastLoginTime = role:getProperty("lastLoginTime") | 118 | + local ltime = role:getProperty("ltime") |
| 119 | 119 | ||
| 120 | role:changeStructVersion() -- 数据结构 版本更新 | 120 | role:changeStructVersion() -- 数据结构 版本更新 |
| 121 | 121 | ||
| 122 | -- 跨天登陆事件 | 122 | -- 跨天登陆事件 |
| 123 | - -- role:onCrossDay(now) | ||
| 124 | - | ||
| 125 | - role:setProperty("lastLoginTime", now) | ||
| 126 | - -- if msg.device and type(msg.device) == "string" then | ||
| 127 | - -- role:setProperty("device", msg.device) | ||
| 128 | - -- end | 123 | + role:onCrossDay(now) |
| 129 | 124 | ||
| 125 | + role:setProperty("ltime", now) | ||
| 126 | + | ||
| 130 | response.role = role:data() | 127 | response.role = role:data() |
| 131 | response.result = "SUCCESS" | 128 | response.result = "SUCCESS" |
| 132 | response.serverTime = now | 129 | response.serverTime = now |
| 133 | 130 | ||
| 134 | - response.wave = 1 | 131 | + local modules = {} |
| 132 | + | ||
| 133 | + local heroIds = {} | ||
| 134 | + for heroId, _ in pairs(role.heros) do | ||
| 135 | + table.insert(heroIds, heroId) | ||
| 136 | + end | ||
| 137 | + local heroWave = math.ceil(#heroIds / WAVE_HERO_NUMS) | ||
| 138 | + if #heroIds <= 0 then | ||
| 139 | + heroWave = 0 | ||
| 140 | + table_insert(modules, "heros") | ||
| 141 | + end | ||
| 142 | + | ||
| 143 | + for _, name in ipairs(modules) do | ||
| 144 | + response[name] = {} | ||
| 145 | + for id, unit in pairs(role[name]) do | ||
| 146 | + response[name][id] = unit:data() | ||
| 147 | + end | ||
| 148 | + end | ||
| 149 | + | ||
| 150 | + response.wave = 1 + heroWave | ||
| 135 | 151 | ||
| 136 | SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response)) | 152 | SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response)) |
| 137 | 153 | ||
| 154 | + local heroIndex = 1 | ||
| 155 | + for index = 2, 1 + heroWave do | ||
| 156 | + local heroResponse = {heros = {}} | ||
| 157 | + for i = heroIndex, heroIndex + WAVE_HERO_NUMS do | ||
| 158 | + local heroId = heroIds[i] | ||
| 159 | + if not heroId then | ||
| 160 | + break | ||
| 161 | + end | ||
| 162 | + local hero = role.heros[heroId] | ||
| 163 | + table_insert(heroResponse.heros, hero:data()) | ||
| 164 | + heroIndex = heroIndex + 1 | ||
| 165 | + end | ||
| 166 | + heroResponse.heroWave = index | ||
| 167 | + SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(heroResponse)) | ||
| 168 | + end | ||
| 138 | 169 | ||
| 139 | -- role:log("login", { ip = agent.ip, diamond = role:getProperty("diamond"), reDiamond = role:getProperty("reDiamond")}) | 170 | -- role:log("login", { ip = agent.ip, diamond = role:getProperty("diamond"), reDiamond = role:getProperty("reDiamond")}) |
| 140 | 171 |
src/agent.lua
| @@ -221,13 +221,13 @@ function CMD.close() | @@ -221,13 +221,13 @@ function CMD.close() | ||
| 221 | 221 | ||
| 222 | local role = agentInfo.role | 222 | local role = agentInfo.role |
| 223 | if not role then return end | 223 | if not role then return end |
| 224 | - role:log("logout", {online = skynet.timex()-role:getProperty("lastLoginTime")}) | 224 | + role:log("logout", {online = skynet.timex()-role:getProperty("ltime")}) |
| 225 | role:onOfflineEvent() | 225 | role:onOfflineEvent() |
| 226 | end | 226 | end |
| 227 | 227 | ||
| 228 | function CMD.exit() | 228 | function CMD.exit() |
| 229 | if agentInfo.role then | 229 | if agentInfo.role then |
| 230 | - -- role:log("logout", {online = skynet.timex()-role:getProperty("lastLoginTime")}) | 230 | + -- role:log("logout", {online = skynet.timex()-role:getProperty("ltime")}) |
| 231 | datacenter.set("agent", agentInfo.role:getProperty("id"), nil) | 231 | datacenter.set("agent", agentInfo.role:getProperty("id"), nil) |
| 232 | end | 232 | end |
| 233 | skynet.exit() | 233 | skynet.exit() |
| @@ -0,0 +1,71 @@ | @@ -0,0 +1,71 @@ | ||
| 1 | +local Hero = class("Hero", require("shared.ModelBase")) | ||
| 2 | + | ||
| 3 | +Hero.schema = { | ||
| 4 | + key = { "string" }, | ||
| 5 | + id = {"number"}, | ||
| 6 | + type = {"number", 0}, | ||
| 7 | + level = {"number", 1}, -- 等级 | ||
| 8 | +} | ||
| 9 | + | ||
| 10 | +Hero.fields = { | ||
| 11 | + id = true, | ||
| 12 | + type = true, | ||
| 13 | + level = true, | ||
| 14 | +} | ||
| 15 | + | ||
| 16 | +function Hero:ctor( properties ) | ||
| 17 | + Hero.super.ctor(self, properties) | ||
| 18 | +end | ||
| 19 | + | ||
| 20 | +function Hero:notifyUpdateProperty(field, newValue, oldValue) | ||
| 21 | + local updateData = { | ||
| 22 | + id = self:getProperty("id"), | ||
| 23 | + datas = { | ||
| 24 | + { | ||
| 25 | + key = field, | ||
| 26 | + newValue = newValue, | ||
| 27 | + oldValue = oldValue or "", | ||
| 28 | + }, | ||
| 29 | + } | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + SendPacket(actionCodes.Hero_updateProperty, MsgPack.pack(updateData)) | ||
| 33 | +end | ||
| 34 | + | ||
| 35 | +function Hero:notifyUpdateProperties(params) | ||
| 36 | + local updateData = { | ||
| 37 | + id = self:getProperty("id"), | ||
| 38 | + datas = params | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + SendPacket(actionCodes.Hero_updateProperty, MsgPack.pack(updateData)) | ||
| 42 | +end | ||
| 43 | + | ||
| 44 | +function Hero:updateProperty(params) | ||
| 45 | + if not params.field or (not params.delta and not params.value) then | ||
| 46 | + return | ||
| 47 | + end | ||
| 48 | + if params.delta then | ||
| 49 | + self:incrProperty(params.field, params.delta) | ||
| 50 | + elseif params.value then | ||
| 51 | + self:setProperty(params.field, params.value) | ||
| 52 | + end | ||
| 53 | + local datas = {} | ||
| 54 | + table.insert(datas, {key = params.field, newValue = self:getProperty(params.field)}) | ||
| 55 | + | ||
| 56 | + self:notifyUpdateProperties(datas) | ||
| 57 | +end | ||
| 58 | + | ||
| 59 | +function Hero:getMaxLevel() | ||
| 60 | + return #csvdb["unit_expCsv"] | ||
| 61 | +end | ||
| 62 | + | ||
| 63 | +function Hero:data() | ||
| 64 | + return { | ||
| 65 | + id = self:getProperty("id"), | ||
| 66 | + type = self:getProperty("type"), | ||
| 67 | + level = self:getProperty("level"), | ||
| 68 | + } | ||
| 69 | +end | ||
| 70 | + | ||
| 71 | +return Hero | ||
| 0 | \ No newline at end of file | 72 | \ No newline at end of file |
src/models/Role.lua
| @@ -12,6 +12,7 @@ RoleChangeStruct.bind(Role) | @@ -12,6 +12,7 @@ RoleChangeStruct.bind(Role) | ||
| 12 | function Role:ctor( properties ) | 12 | function Role:ctor( properties ) |
| 13 | Role.super.ctor(self, properties) | 13 | Role.super.ctor(self, properties) |
| 14 | self.ignoreHeartbeat = false | 14 | self.ignoreHeartbeat = false |
| 15 | + self.heros = {} | ||
| 15 | end | 16 | end |
| 16 | 17 | ||
| 17 | Role.schema = { | 18 | Role.schema = { |
| @@ -23,9 +24,10 @@ Role.schema = { | @@ -23,9 +24,10 @@ Role.schema = { | ||
| 23 | device = {"string", ""}, | 24 | device = {"string", ""}, |
| 24 | banTime = {"number", 0}, | 25 | banTime = {"number", 0}, |
| 25 | banType = {"number", 0}, | 26 | banType = {"number", 0}, |
| 26 | - lastLoginTime = {"number", 0}, | ||
| 27 | - createTime = {"number", skynet.timex()}, | ||
| 28 | - structVersion = {"number", globalCsv.StructVersion or 0}, -- 重整数据 | 27 | + ltime = {"number", 0}, -- 最后登录时间 |
| 28 | + ctime = {"number", skynet.timex()}, -- 创建时间 | ||
| 29 | + ignoreMt = {"number", 0}, -- 忽略维护拦截 | ||
| 30 | + sversion = {"number", globalCsv.StructVersion or 0}, -- 重整数据版本 | ||
| 29 | 31 | ||
| 30 | -- roleInfo | 32 | -- roleInfo |
| 31 | level = {"number", 0}, | 33 | level = {"number", 0}, |
| @@ -42,8 +44,9 @@ Role.fields = { | @@ -42,8 +44,9 @@ Role.fields = { | ||
| 42 | name = true, | 44 | name = true, |
| 43 | banTime = true, | 45 | banTime = true, |
| 44 | banType = true, | 46 | banType = true, |
| 45 | - lastLoginTime = true, | ||
| 46 | - createTime = true, | 47 | + ltime = true, |
| 48 | + ctime = true, | ||
| 49 | + sversion = true, | ||
| 47 | level = true, | 50 | level = true, |
| 48 | diamond = true, | 51 | diamond = true, |
| 49 | reDiamond = true, | 52 | reDiamond = true, |
| @@ -51,6 +54,52 @@ Role.fields = { | @@ -51,6 +54,52 @@ Role.fields = { | ||
| 51 | } | 54 | } |
| 52 | 55 | ||
| 53 | 56 | ||
| 57 | +function Role:notifyUpdateProperty(field, newValue, oldValue, extraValue) | ||
| 58 | + local updateData = { | ||
| 59 | + { | ||
| 60 | + key = field, | ||
| 61 | + newValue = newValue, | ||
| 62 | + oldValue = oldValue or "", | ||
| 63 | + extraValue = extraValue, | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + SendPacket(actionCodes.Role_updateProperty, MsgPack.pack(updateData)) | ||
| 68 | +end | ||
| 69 | + | ||
| 70 | +function Role:updateProperty(params) | ||
| 71 | + params = params or {} | ||
| 72 | + if not self.fields[params.field] then return end | ||
| 73 | + local oldValue = self:getProperty(params.field) | ||
| 74 | + local ret = {key = params.field, oldValue = oldValue} | ||
| 75 | + if params.value then | ||
| 76 | + ret.newValue = params.value | ||
| 77 | + self:setProperty(params.field, params.value) | ||
| 78 | + elseif params.delta then | ||
| 79 | + self:incrProperty(params.field, params.delta) | ||
| 80 | + ret.newValue = self:getProperty(params.field) | ||
| 81 | + else | ||
| 82 | + return | ||
| 83 | + end | ||
| 84 | + if not params.notNotify then | ||
| 85 | + SendPacket(actionCodes.Role_updateProperty, MsgPack.pack({ret})) | ||
| 86 | + end | ||
| 87 | +end | ||
| 88 | + | ||
| 89 | +function Role:updateProperties(params, notNotify) | ||
| 90 | + for field, value in pairs(params) do | ||
| 91 | + self:setProperty(field, value) | ||
| 92 | + end | ||
| 93 | + if not notNotify then | ||
| 94 | + SendPacket(actionCodes.Role_updateProperties, MsgPack.pack(params)) | ||
| 95 | + end | ||
| 96 | +end | ||
| 97 | + | ||
| 98 | +function Role:notifyUpdateProperties(params) | ||
| 99 | + SendPacket(actionCodes.Role_updateProperties, MsgPack.pack(params)) | ||
| 100 | +end | ||
| 101 | + | ||
| 102 | + | ||
| 54 | 103 | ||
| 55 | function Role:data() | 104 | function Role:data() |
| 56 | return { | 105 | return { |
src/models/RoleChangeStruct.lua
| @@ -51,7 +51,7 @@ local RoleChangeStruct = {} | @@ -51,7 +51,7 @@ local RoleChangeStruct = {} | ||
| 51 | function RoleChangeStruct.bind(Role) | 51 | function RoleChangeStruct.bind(Role) |
| 52 | 52 | ||
| 53 | function Role:changeStructVersion() | 53 | function Role:changeStructVersion() |
| 54 | - local curVersion = self:getProperty("structVersion") | 54 | + local curVersion = self:getProperty("sversion") |
| 55 | if not globalCsv.StructVersion or curVersion >= globalCsv.StructVersion then return end | 55 | if not globalCsv.StructVersion or curVersion >= globalCsv.StructVersion then return end |
| 56 | 56 | ||
| 57 | local jumpVersion = {} | 57 | local jumpVersion = {} |
| @@ -99,7 +99,7 @@ function RoleChangeStruct.bind(Role) | @@ -99,7 +99,7 @@ function RoleChangeStruct.bind(Role) | ||
| 99 | end | 99 | end |
| 100 | end | 100 | end |
| 101 | end | 101 | end |
| 102 | - self:setProperty("structVersion", globalCsv.StructVersion) | 102 | + self:setProperty("sversion", globalCsv.StructVersion) |
| 103 | end | 103 | end |
| 104 | 104 | ||
| 105 | end | 105 | end |
src/models/RolePlugin.lua
| @@ -9,14 +9,78 @@ function RolePlugin.bind(Role) | @@ -9,14 +9,78 @@ function RolePlugin.bind(Role) | ||
| 9 | end | 9 | end |
| 10 | 10 | ||
| 11 | function Role:loadAll() | 11 | function Role:loadAll() |
| 12 | - | 12 | + self:loadHeros() |
| 13 | end | 13 | end |
| 14 | 14 | ||
| 15 | function Role:reloadWhenLogin() | 15 | function Role:reloadWhenLogin() |
| 16 | + end | ||
| 17 | + | ||
| 18 | + function Role:onCrossDay(now) | ||
| 19 | + | ||
| 20 | + end | ||
| 21 | + | ||
| 22 | + function Role:addHero(params) | ||
| 23 | + local roleId = self:getProperty("id") | ||
| 24 | + local heroId = tonum(redisproxy:hincrby(string.format(R_INCR, roleId), "hero", 1)) | ||
| 25 | + | ||
| 26 | + local heroType = params.type | ||
| 27 | + local unitData = csvdb["unitCsv"][heroType] | ||
| 16 | 28 | ||
| 29 | + redisproxy:sadd(string.format(R_HEROS, roleId), heroId) | ||
| 30 | + | ||
| 31 | + local heroInfo = { | ||
| 32 | + key = string.format(R_HERO, roleId, heroId), | ||
| 33 | + id = heroId, | ||
| 34 | + type= heroType, | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + local newHero = require("models.Hero").new(heroInfo) | ||
| 38 | + newHero:create() | ||
| 39 | + newHero.owner = self | ||
| 40 | + self.heros[heroId] = newHero | ||
| 41 | + | ||
| 42 | + if not params.notNotify then | ||
| 43 | + local heroResponse = {} | ||
| 44 | + table.insert(heroResponse, newHero:data()) | ||
| 45 | + local bin = MsgPack.pack(heroResponse) | ||
| 46 | + SendPacket(actionCodes.Hero_loadInfos, bin) | ||
| 47 | + end | ||
| 17 | end | 48 | end |
| 18 | 49 | ||
| 50 | + function Role:delHero(params) | ||
| 51 | + local roleId = self:getProperty('id') | ||
| 52 | + local hero = self.heros[heroId] | ||
| 53 | + if not hero then return end | ||
| 54 | + | ||
| 55 | + self.heros[heroId] = nil | ||
| 56 | + redisproxy:pipelining(function (red) | ||
| 57 | + red:del(string.format(R_HERO, roleId, heroId)) | ||
| 58 | + red:srem(string.format(R_HEROS, roleId), heroId) | ||
| 59 | + end) | ||
| 60 | + SendPacket(actionCodes.Hero_loadInfos, MsgPack.pack({{id = heroId, bDel = true}})) | ||
| 61 | + end | ||
| 19 | 62 | ||
| 63 | + function Role:loadHeros() | ||
| 64 | + local roleId = self:getProperty("id") | ||
| 65 | + local heroIds = redisproxy:smembers(string.format(R_HEROS, roleId)) | ||
| 66 | + local redret = redisproxy:pipelining(function (red) | ||
| 67 | + for _, heroId in ipairs(heroIds) do | ||
| 68 | + red:hgetall(string.format(R_HERO, roleId, heroId)) | ||
| 69 | + end | ||
| 70 | + end) | ||
| 71 | + for index, heroId in ipairs(heroIds) do | ||
| 72 | + local hero = require("models.Hero").new({key = string.format(R_HERO, roleId, heroId)}) | ||
| 73 | + if hero:load(table.array2Table(redret[index])) then | ||
| 74 | + hero.owner = self | ||
| 75 | + self.heros[tonumber(heroId)] = hero | ||
| 76 | + end | ||
| 77 | + end | ||
| 78 | + end | ||
| 79 | + | ||
| 80 | + -- 发奖功能入口 | ||
| 81 | + function Role:award() | ||
| 82 | + | ||
| 83 | + end | ||
| 20 | end | 84 | end |
| 21 | 85 | ||
| 22 | return RolePlugin | 86 | return RolePlugin |
| 23 | \ No newline at end of file | 87 | \ No newline at end of file |