Commit bd220d633084532680d985ad2844786d095a3f7b
Merge branch 'develop' of 120.26.43.151:wasteland/server into develop
Showing
9 changed files
with
43 additions
and
50 deletions
Show diff stats
config/develop.lua
src/GlobalVar.lua
| @@ -212,6 +212,7 @@ AdvBackEventType = { | @@ -212,6 +212,7 @@ AdvBackEventType = { | ||
| 212 | Artifact = 24, --获得神器 | 212 | Artifact = 24, --获得神器 |
| 213 | Level = 25, -- 升级 | 213 | Level = 25, -- 升级 |
| 214 | LinkChooseOver = 26, -- 连锁事件结束 | 214 | LinkChooseOver = 26, -- 连锁事件结束 |
| 215 | + BuffEffect = 27, -- buff 效果 | ||
| 215 | } | 216 | } |
| 216 | 217 | ||
| 217 | AdvScoreType = { | 218 | AdvScoreType = { |
src/adv/AdvBattle.lua
| @@ -76,6 +76,7 @@ function Battle:initPlayer() | @@ -76,6 +76,7 @@ function Battle:initPlayer() | ||
| 76 | end | 76 | end |
| 77 | player.exp = 0 | 77 | player.exp = 0 |
| 78 | player.sp = getAdvLvAttrUp(advAddAttrs, "sp", 100) | 78 | player.sp = getAdvLvAttrUp(advAddAttrs, "sp", 100) |
| 79 | + player.spMax = player.sp | ||
| 79 | player.growth = {} | 80 | player.growth = {} |
| 80 | player.passives = {} | 81 | player.passives = {} |
| 81 | 82 |
src/adv/AdvBuff.lua
| @@ -576,6 +576,9 @@ end | @@ -576,6 +576,9 @@ end | ||
| 576 | 576 | ||
| 577 | function Buff:effect() | 577 | function Buff:effect() |
| 578 | self:decCount() | 578 | self:decCount() |
| 579 | + if self.buffData.show:sismember(2, " ") then | ||
| 580 | + self.owner.battle.adv:pushBackEvent(AdvBackEventType.BuffEffect, {etype = 2}) | ||
| 581 | + end | ||
| 579 | if self._effectValue then | 582 | if self._effectValue then |
| 580 | return self:_effectValue() | 583 | return self:_effectValue() |
| 581 | end | 584 | end |
src/adv/AdvPlayer.lua
| @@ -699,6 +699,10 @@ function Player:addBuff(buffId, releaser) | @@ -699,6 +699,10 @@ function Player:addBuff(buffId, releaser) | ||
| 699 | self.battle.adv:checkAchievement(self.battle.adv.AchievType.GetBuff, 1, buffId) | 699 | self.battle.adv:checkAchievement(self.battle.adv.AchievType.GetBuff, 1, buffId) |
| 700 | self.battle.adv:pushBackEvent(AdvBackEventType.Buff, {buffId = buffId}) | 700 | self.battle.adv:pushBackEvent(AdvBackEventType.Buff, {buffId = buffId}) |
| 701 | self.battle:triggerPassive(Passive.PLAYER_BUFF, {buffId = buffId}) | 701 | self.battle:triggerPassive(Passive.PLAYER_BUFF, {buffId = buffId}) |
| 702 | + local buffData = csvdb["adv_map_buffCsv"][buffId] | ||
| 703 | + if buffData and buffData.show:sismember(1, " ") then | ||
| 704 | + self.battle.adv:pushBackEvent(AdvBackEventType.BuffEffect, {etype = 1}) | ||
| 705 | + end | ||
| 702 | end | 706 | end |
| 703 | return status | 707 | return status |
| 704 | end | 708 | end |
src/services/agent_ctrl.lua
| @@ -5,6 +5,7 @@ local netpack = require "skynet.netpack" | @@ -5,6 +5,7 @@ local netpack = require "skynet.netpack" | ||
| 5 | local xxtea = require "xxtea" | 5 | local xxtea = require "xxtea" |
| 6 | local deque = require "deque" | 6 | local deque = require "deque" |
| 7 | local datacenter = require "skynet.datacenter" | 7 | local datacenter = require "skynet.datacenter" |
| 8 | +local agent_queued = require "services.agent_queued" | ||
| 8 | 9 | ||
| 9 | local pcall = pcall | 10 | local pcall = pcall |
| 10 | local string_format = string.format | 11 | local string_format = string.format |
| @@ -59,16 +60,14 @@ function _M:exit_agent(fd) | @@ -59,16 +60,14 @@ function _M:exit_agent(fd) | ||
| 59 | 60 | ||
| 60 | pcall(skynet.send, agent, "lua", "exit") | 61 | pcall(skynet.send, agent, "lua", "exit") |
| 61 | 62 | ||
| 62 | - -- 这里检查是否有排队用户 | ||
| 63 | - local nuid, nfd = skynet.call(queued_serv, "lua", "pop") | 63 | + self.f2u[fd] = nil |
| 64 | + self.u2f[uid] = nil | ||
| 65 | + local nuid, nfd = agent_queued.pop() | ||
| 64 | if not nuid then | 66 | if not nuid then |
| 65 | pcall(skynet.send, poold, "lua", "feed") | 67 | pcall(skynet.send, poold, "lua", "feed") |
| 66 | else | 68 | else |
| 67 | self:query_agent(nfd, nuid, true) | 69 | self:query_agent(nfd, nuid, true) |
| 68 | end | 70 | end |
| 69 | - | ||
| 70 | - self.f2u[fd] = nil | ||
| 71 | - self.u2f[uid] = nil | ||
| 72 | end | 71 | end |
| 73 | 72 | ||
| 74 | -- @desc: 客户端连入 | 73 | -- @desc: 客户端连入 |
| @@ -82,7 +81,7 @@ function _M:socket_close(fd) | @@ -82,7 +81,7 @@ function _M:socket_close(fd) | ||
| 82 | local uid = self.f2u[fd] | 81 | local uid = self.f2u[fd] |
| 83 | if not uid then | 82 | if not uid then |
| 84 | -- 排队中? | 83 | -- 排队中? |
| 85 | - pcall(skynet.call, queued_serv, "lua", "socket_close", fd) | 84 | + agent_queued.socket_close(fd) |
| 86 | return | 85 | return |
| 87 | end | 86 | end |
| 88 | self.f2e[fd] = skynet.timex() + AGENT_EXPIRE_TIME | 87 | self.f2e[fd] = skynet.timex() + AGENT_EXPIRE_TIME |
| @@ -102,7 +101,7 @@ function _M:socket_error(fd) | @@ -102,7 +101,7 @@ function _M:socket_error(fd) | ||
| 102 | local uid = self.f2u[fd] | 101 | local uid = self.f2u[fd] |
| 103 | if not uid then | 102 | if not uid then |
| 104 | -- 排队中? | 103 | -- 排队中? |
| 105 | - pcall(skynet.call, queued_serv, "lua", "socket_close", fd) | 104 | + agent_queued.socket_close(fd) |
| 106 | return | 105 | return |
| 107 | end | 106 | end |
| 108 | 107 | ||
| @@ -129,6 +128,7 @@ local next_log_time = 0 | @@ -129,6 +128,7 @@ local next_log_time = 0 | ||
| 129 | local CHECK_AGENT_STATUS_INTERVAL = 100 -- 检查agent状态的定时间隔 | 128 | local CHECK_AGENT_STATUS_INTERVAL = 100 -- 检查agent状态的定时间隔 |
| 130 | -- @desc: 检查agent状态,若过期,则让agent退出;并定时打日志统计在线人数 | 129 | -- @desc: 检查agent状态,若过期,则让agent退出;并定时打日志统计在线人数 |
| 131 | function _M:check_agent_status() | 130 | function _M:check_agent_status() |
| 131 | + agent_queued.handle_timeout() | ||
| 132 | local now = skynet.timex() | 132 | local now = skynet.timex() |
| 133 | if now >= next_check_time then | 133 | if now >= next_check_time then |
| 134 | next_check_time = now + CHECK_AGENT_STATUS_INTERVAL | 134 | next_check_time = now + CHECK_AGENT_STATUS_INTERVAL |
| @@ -196,16 +196,26 @@ function _M:query_agent(fd, uid, isQueue) | @@ -196,16 +196,26 @@ function _M:query_agent(fd, uid, isQueue) | ||
| 196 | self.f2u[f] = nil | 196 | self.f2u[f] = nil |
| 197 | self.u2f[uid] = set_pack(fd, agent) | 197 | self.u2f[uid] = set_pack(fd, agent) |
| 198 | else | 198 | else |
| 199 | - -- 该uid未存储,则说明至少超过10分钟未登陆,由agent池服务pop出一个agent | ||
| 200 | - local agent | 199 | + local agent |
| 201 | if isQueue then | 200 | if isQueue then |
| 202 | - agent = skynet.newservice("agent") | 201 | + agent = self.factory:pop() |
| 202 | + if agent then | ||
| 203 | + pcall(skynet.send, poold, "lua", "feed") | ||
| 204 | + else | ||
| 205 | + agent = skynet.newservice("agent") | ||
| 206 | + end | ||
| 203 | else | 207 | else |
| 208 | + -- 该uid未存储,则说明至少超过10分钟未登陆,由agent池服务pop出一个agent | ||
| 209 | + if agent_queued.count() > 0 then | ||
| 210 | + -- 服务器满 开始排队 | ||
| 211 | + local rank = agent_queued.push(uid, fd) | ||
| 212 | + query_agent_response(fd, {ret = "RET_SERVER_FULL", rank = rank}) | ||
| 213 | + return | ||
| 214 | + end | ||
| 215 | + | ||
| 204 | agent = self.factory:pop() | 216 | agent = self.factory:pop() |
| 205 | if not agent then | 217 | if not agent then |
| 206 | - -- 服务器满 | ||
| 207 | - -- 开始排队 | ||
| 208 | - local ok, rank = pcall(skynet.call, queued_serv, "lua", "push", uid, fd) | 218 | + local rank = agent_queued.push(uid, fd) |
| 209 | query_agent_response(fd, {ret = "RET_SERVER_FULL", rank = rank}) | 219 | query_agent_response(fd, {ret = "RET_SERVER_FULL", rank = rank}) |
| 210 | return | 220 | return |
| 211 | end | 221 | end |
src/services/queued.lua renamed to src/services/agent_queued.lua
| @@ -18,7 +18,6 @@ local MAX_COUNT = tonumber(skynet.getenv("max_queue")) | @@ -18,7 +18,6 @@ local MAX_COUNT = tonumber(skynet.getenv("max_queue")) | ||
| 18 | -- 心跳定时间隔 | 18 | -- 心跳定时间隔 |
| 19 | local HEART_TIMER_INTERVAL = 30 | 19 | local HEART_TIMER_INTERVAL = 30 |
| 20 | local HEART_TIMEOUT_COUNT_MAX = 3 | 20 | local HEART_TIMEOUT_COUNT_MAX = 3 |
| 21 | -local gate_serv | ||
| 22 | 21 | ||
| 23 | local CMD = {} | 22 | local CMD = {} |
| 24 | local f2u = {} | 23 | local f2u = {} |
| @@ -28,7 +27,6 @@ local curIdx = 0 -- 下一个即将进入游戏的玩家索引 | @@ -28,7 +27,6 @@ local curIdx = 0 -- 下一个即将进入游戏的玩家索引 | ||
| 28 | local nextIdx = 0 -- 新加的位置 | 27 | local nextIdx = 0 -- 新加的位置 |
| 29 | 28 | ||
| 30 | 29 | ||
| 31 | - | ||
| 32 | local function getRank(uid) | 30 | local function getRank(uid) |
| 33 | local info = u2i[uid] | 31 | local info = u2i[uid] |
| 34 | if not info then return -1 end | 32 | if not info then return -1 end |
| @@ -63,18 +61,12 @@ skynet.register_protocol { | @@ -63,18 +61,12 @@ skynet.register_protocol { | ||
| 63 | end, | 61 | end, |
| 64 | dispatch = function(session, address, cmd, data) | 62 | dispatch = function(session, address, cmd, data) |
| 65 | skynet.ignoreret() | 63 | skynet.ignoreret() |
| 66 | - cs(function() | ||
| 67 | - if cmd == actionCodes.Sys_checkQueue then | ||
| 68 | - checkQueue(session) | ||
| 69 | - end | ||
| 70 | - end) | 64 | + if cmd == actionCodes.Sys_checkQueue then |
| 65 | + checkQueue(session) | ||
| 66 | + end | ||
| 71 | end | 67 | end |
| 72 | } | 68 | } |
| 73 | 69 | ||
| 74 | -function CMD.open(serv) | ||
| 75 | - gate_serv = serv | ||
| 76 | -end | ||
| 77 | - | ||
| 78 | function CMD.push(uid, fd) | 70 | function CMD.push(uid, fd) |
| 79 | uid = tostring(uid) | 71 | uid = tostring(uid) |
| 80 | if u2i[uid] then -- 存在] | 72 | if u2i[uid] then -- 存在] |
| @@ -129,6 +121,7 @@ function CMD.pop() | @@ -129,6 +121,7 @@ function CMD.pop() | ||
| 129 | end | 121 | end |
| 130 | end | 122 | end |
| 131 | 123 | ||
| 124 | + | ||
| 132 | -- 下线了 | 125 | -- 下线了 |
| 133 | function CMD.socket_close(fd) | 126 | function CMD.socket_close(fd) |
| 134 | local uid = f2u[fd] | 127 | local uid = f2u[fd] |
| @@ -138,8 +131,7 @@ function CMD.socket_close(fd) | @@ -138,8 +131,7 @@ function CMD.socket_close(fd) | ||
| 138 | info[2] = nil | 131 | info[2] = nil |
| 139 | end | 132 | end |
| 140 | 133 | ||
| 141 | - | ||
| 142 | -local function handle_timeout() | 134 | +function CMD.handle_timeout() |
| 143 | local now = skynet.timex() | 135 | local now = skynet.timex() |
| 144 | for uid, info in pairs(u2i) do | 136 | for uid, info in pairs(u2i) do |
| 145 | if info[2] and info[3] and now >= info[3][3] then --存在fd 检查心跳 | 137 | if info[2] and info[3] and now >= info[3][3] then --存在fd 检查心跳 |
| @@ -153,26 +145,10 @@ local function handle_timeout() | @@ -153,26 +145,10 @@ local function handle_timeout() | ||
| 153 | end | 145 | end |
| 154 | end | 146 | end |
| 155 | end | 147 | end |
| 156 | - skynet.timeout(100, handle_timeout) | ||
| 157 | end | 148 | end |
| 158 | 149 | ||
| 150 | +function CMD.count() | ||
| 151 | + return (nextIdx + MAX_COUNT - curIdx) % MAX_COUNT | ||
| 152 | +end | ||
| 159 | 153 | ||
| 160 | -skynet.start(function() | ||
| 161 | - skynet.dispatch("lua", function(session, source, command, ...) | ||
| 162 | - -- skynet.trace() --执行序的跟踪统计 | ||
| 163 | - local f = CMD[command] | ||
| 164 | - if f then | ||
| 165 | - skynet.ret(skynet.pack(f(...))) | ||
| 166 | - end | ||
| 167 | - end) | ||
| 168 | - | ||
| 169 | - skynet.info_func(function() | ||
| 170 | - local info = {} | ||
| 171 | - info.count = (nextIdx + MAX_COUNT - curIdx) % MAX_COUNT | ||
| 172 | - return info | ||
| 173 | - end) | ||
| 174 | - | ||
| 175 | - cs = queue() | ||
| 176 | - | ||
| 177 | - skynet.timeout(100, handle_timeout) | ||
| 178 | -end) | ||
| 179 | \ No newline at end of file | 154 | \ No newline at end of file |
| 155 | +return CMD |
src/services/poold.lua
| @@ -7,7 +7,7 @@ local deque = require "deque" | @@ -7,7 +7,7 @@ local deque = require "deque" | ||
| 7 | local CMD = {} | 7 | local CMD = {} |
| 8 | local factory | 8 | local factory |
| 9 | 9 | ||
| 10 | -local PRE_FEED_COUNT = 1 | 10 | +local PRE_FEED_COUNT = 5 |
| 11 | local dead = 0 | 11 | local dead = 0 |
| 12 | -- agent死亡,通知poold补充,当累计到5个agent时,马上生成5个agent放入poold中 | 12 | -- agent死亡,通知poold补充,当累计到5个agent时,马上生成5个agent放入poold中 |
| 13 | -- 当然这里也可以写得更复杂,参考redis落地规则 | 13 | -- 当然这里也可以写得更复杂,参考redis落地规则 |
src/services/watchdog.lua
| @@ -66,7 +66,6 @@ end | @@ -66,7 +66,6 @@ end | ||
| 66 | function CMD.start(conf) | 66 | function CMD.start(conf) |
| 67 | skynet.call(gate_serv, "lua", "open" , conf) | 67 | skynet.call(gate_serv, "lua", "open" , conf) |
| 68 | skynet.call(redisd, "lua", "open", conf) | 68 | skynet.call(redisd, "lua", "open", conf) |
| 69 | - skynet.call(queued_serv, "lua", "open", gate_serv) | ||
| 70 | 69 | ||
| 71 | if use_logd == 1 then | 70 | if use_logd == 1 then |
| 72 | skynet.call(logd, "lua", "open") | 71 | skynet.call(logd, "lua", "open") |
| @@ -138,5 +137,4 @@ skynet.start(function() | @@ -138,5 +137,4 @@ skynet.start(function() | ||
| 138 | skynet.newservice("services/chated") | 137 | skynet.newservice("services/chated") |
| 139 | -- 网关服务 | 138 | -- 网关服务 |
| 140 | gate_serv = skynet.newservice("gate") | 139 | gate_serv = skynet.newservice("gate") |
| 141 | - queued_serv = skynet.newservice("services/queued") | ||
| 142 | end) | 140 | end) |