FreeKill/docs/dev/hegemony.rst
2023-04-25 14:26:38 +08:00

72 lines
3.8 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.. SPDX-License-Identifier: GFDL-1.3-or-later
国战实现相关碎碎念
==================
国战流程与身份版基本相同,就有一些有区别:
- 双将,并且是同势力双将
- 开局所有人暗将状态
- 胜利判断和奖惩不同
- 亮将
- 预亮技能
下面来一个个分析一下。胜利和奖惩已经在22写过了不分析。
双将与同势力选将
----------------
双将好说,已经做完了。主要是同势力选将,可能需要单独写个处理函数吧。还有抽武将的时候也要避免出现没人同势力的情况啊。
简而言之就是UI加个同势力选项同时随机生成武将环节中如果可选人数小于X+1X为游戏内势力数一般为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。
调虎离山
--------
将目标设为死人即可(删除)
真正实现的话,可能还是就按照牌面描述来吧,但是要对距离计算和上家/下家做修改。前者可能还能用距离技顶一下,后者非改源码不可。