.. SPDX-License-Identifier: GFDL-1.3-or-later 国战实现相关碎碎念 ================== 国战流程与身份版基本相同,就有一些有区别: - 双将,并且是同势力双将 - 开局所有人暗将状态 - 胜利判断和奖惩不同 - 亮将 - 预亮技能 下面来一个个分析一下。胜利和奖惩已经在22写过了,不分析。 双将与同势力选将 ---------------- 双将好说,已经做完了。主要是同势力选将,可能需要单独写个处理函数吧。还有抽武将的时候也要避免出现没人同势力的情况啊。 简而言之就是UI加个同势力选项;同时,随机生成武将环节中如果可选人数小于X+1(X为游戏内势力数,一般为4),那么就抽X+1张,然后去掉多余的。 暗将与亮将 ---------- 首先不要亮出武将,即别broadcast general,或者把general先设为暗将。 每个玩家选完武将后可以用两个标记保存着自己实际的选将。而实际上会用暗将来代替选好的武将。 那设置体力上限也得重写了,总之就是GameLogic中选将和准备开始都需要重写呢。 暗将是没有任何技能的。但是亮将后,就可以用changeHero修改武将牌,然后就真的获得了该获得的所有技能了。 预亮 ---- 实现国战模式最大的难点。 预亮技能可以激活武将的某个技能,这样游戏会对该技能进行询问。 既然是询问,那么能预亮的技能只会是触发技咯,或者附带有隐藏触发技的技能。 那么,能预亮的技能从哪来?暗将可是个白板,没有任何技能的。 答案是游戏开始前公布武将(也就是公布暗将)环节的时候,用doNotify告诉每个玩家都获得了哪些技能。事实上呢,(在服务端这边)他们根本没有这些技能呢。但这样又有个问题,有些技能是在客户端有判断的,这意味着暗将的马术可能可以发挥作用。 解决办法是写个global的失效技令暗将的所有未预亮技能失效。然后在亮将后,先哟doNotify让玩家认为自己失去所有技能,再用changeHero变将,changeHero函数中有替换技能的代码。 那么预亮技能怎么处理呢?预亮和游戏流程没啥关系,纯属玩家想预亮就预亮想取消就取消。既然与游戏流程无关,那么这块就得用到异步IO了,pushRequest解决。 然后技能只要被预亮了,那么服务端就知道有这个技能了,先挂给Room。然后也给Player加上技能。此时只在服务端加技能!不对,不能加技能啊,把技能贴给logic就行了啊。那我既然要询问的话肯定得满足hasSkill啊。怎么办呢?果然还是要加给玩家啊,但又怕状态技捣乱,那就让状态技失效呗。 这样一来基本解决了预亮的游戏逻辑问题。接下来有一点要操心的是UI。首先对于有状态技的,找个地方塞个亮将按钮。手刹直接是在技能区加这个按钮了,那正好可以做个亮将技能啊。 然后就是UI了。这个得走cpp了谁让Lua服务端没有这种处理函数呢?(也根本不应该有,Lua和处理消息根本不在一个线程好吧)先不管这些,总之在暗将状态下,对于服务端notify到的触发型技能,给个预亮按钮。就换个按钮样式而已。主动和视为因为不影响烧条就照旧处理。就触发技弄成预亮键。视为技拼触发技的情况也弄成预亮hhh。 变回暗将 -------- 点名批评邹氏 changeHero成暗将然后notify获得即可。两人都暗了的话还要变势力。 明将就是先notify失去再changeHero。 调虎离山 -------- 将目标设为死人即可(删除) 真正实现的话,可能还是就按照牌面描述来吧,但是要对距离计算和上家/下家做修改。前者可能还能用距离技顶一下,后者非改源码不可。