Coder Social home page Coder Social logo

lwtmusou / touhoukill Goto Github PK

View Code? Open in Web Editor NEW
35.0 35.0 9.0 754.36 MB

Sanguosha (board game) mod including touhou project characters based on open source Qsanguosha

License: Other

QMake 0.15% HTML 0.35% Lua 22.82% C++ 50.24% C 24.67% Shell 0.01% SWIG 1.78%

touhoukill's People

Contributors

beginnerslob avatar fsu0413 avatar lwtmusou avatar mataraokina avatar yang-le avatar yanguam avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

touhoukill's Issues

请教一下WrappedCard是做什么的

发现FilterSkill里用到了这个但不明白它的功能,以及很多地方装备牌的类型用的也是WrappedCard而不是Card, EquipCard或具体的某个subtype,请问这个WrappedCard的功能是什么?在代码中是怎么体现的?

主公摩多罗 二童子改动

*(1)摩多罗4hp
秘神:你可横置人物牌或装备区的一张牌,视为使用【调虎离山】。
里季:你可横置上家或下家的装备区的一张牌,视为对其使用下列牌。
若横置的装备类型为: 武器:知己知彼 防具:铁索 防御马:桃 进攻马:火杀 宝物:调虎
后光1:你的装备区的牌被弃置或横置时,你可令其他璋势力角色选择是否代替你执行同类操作。

(注:主公技前提,其他tkz角色要能够做同类操作。 比如全部装备已经横置,就不能代替你横置装备了)

(2)尔子田里乃 3hp
鼓舞:当前回合角色使用普通锦囊牌指定其上家或下家为目标时,你可横置人物牌或装备区的一张牌,你令一名角色成为此牌的额外目标。
茗荷:你受到伤害后,你可视为对任意名角色使用【联军盛宴】。此牌对目标生效后,若其体力值大于你,其于本回合不能使用牌。

(联军盛宴目标由自己指定)
(注:已成为目标的角色不能再成为目标,大乔流离结算两次的情况东方杀体系内暂不允许)
(注:联军盛宴对不处于异常状态的角色是无效的。类似桃园结义。 所以后续小尾巴需要耦合?)

(3)丁礼田舞 3hp
狂舞:当前回合角色使用基本牌指定其上家或下家为目标时,你可横置人物牌或装备区的一张牌,你令一名角色成为此牌的额外目标。
竹笹:你受到伤害后,你可视为对任意名角色使用【联军盛宴】。此牌对目标生效后,若目标体力值大于你,其失去一点体力。

SP年代记永林药理的基本牌效果值+1和神莎充能的效果值+1冲突,不能同时生效

此人已死,有事烧纸 2020/9/30 20:34:37
@吉千八弔慧催笨猫干活 SP年代记永林药理的基本牌效果值+1和神莎充能的效果值+1冲突,不能同时生效

吉千八弔慧催笨猫干活 2020/9/30 20:40:27
是啊

吉千八弔慧催笨猫干活 2020/9/30 20:40:33
用的就是魔理沙的flag

此人已死,有事烧纸 2020/9/30 20:40:53
但这是BUG吧

吉千八弔慧催笨猫干活 2020/9/30 20:42:05
所以不是个例啊

吉千八弔慧催笨猫干活 2020/9/30 20:42:16
需要改设计

吉千八弔慧催笨猫干活 2020/9/30 20:42:24
包括神魔理沙也要改

bullytou 2020/9/30 20:43:16
效果值+1居然用的是flag

吉千八弔慧催笨猫干活 2020/9/30 20:44:27
因为效果值在effectstruct里

吉千八弔慧催笨猫干活 2020/9/30 20:44:35
使用和生效是两个结算

吉千八弔慧催笨猫干活 2020/9/30 21:23:23
所以有github的话报一下issue吧

吉千八弔慧催笨猫干活 2020/9/30 21:23:59
我十一回家没环境,没法改 得10月8日之后再说了

皮肤 bgm 不必单独下载

  • 通过自动更新的方式一次性下载(自动检测可以改手动检测?)

  • 随时检测并下载(比如本局游戏中自己选择的角色,若没有皮肤,则背后自动下载)

额定和额外目标 - 0.10之后考虑

问题背景:
魂魄妖忌发动‘御剑’成功时,国战同将魂魄妖梦‘双刃’只能选择攻击范围(有限距离)内的额外目标。

基于此问题,目前需要考虑额定和额外目标的处理方法。
现在东方杀(以及神杀base)都是将额定和额外目标统一考虑(也即只有一个targetFilter)
然后在targetFilter中再去判定额定和额外目标。
这样导致的问题就是 - 额定和额外目标的分界线不明确

原三国杀的额定和额外目标区分比较复杂,机制比较多,举例:

  1. 高顺拼点结束后对拼点目标角色使用杀无距离和次数限制 - 超出次数限制的杀均只有唯一额定目标
  2. 刘封陷嗣拿来的牌当杀只有唯一额定目标
  3. 太史慈拼点结束后使用杀有一名额外目标 - 也即使用刘封的牌当杀可以选择另一名目标,方天画戟同理
  4. 丁奉使用的杀有一名距离为1的额外目标 - 就算刘封与丁奉距离为1,那名额外目标与丁奉距离也只能为1

还有很多,不一一举例了。

如此复杂的机制造成了三国杀选择目标的合法性校验异常复杂,尤其是不区分额定和额外目标的神杀的代码框架下。
目前有如下解决方案:

  • 1. 将额定和额外目标概念取消,相关技能全部重新描述
    举例:东方杀“双刃:你使用杀可以多选择一名目标,且若你选择了多于一名的目标,至多可以有一名目标不在攻击范围内。”
    举例:三国杀“短兵:你使用杀可以多选择一名目标,且若你选择了多于一名的目标,则至少有一名目标与你的距离为1。”
    举例:“方天画戟:你使用最后一张手牌的杀可以多选择两名目标。”
  • 2. 保留额定和额外目标概念,部分技能重新描述,并修改代码适配额定和额外目标的区分。
    举例:“借刀杀人:……,你选择一项:使用一张以该角色为唯一额定目标的杀,……”
    举例:三国杀“青龙偃月刀:……,你可以使用一张以该角色为唯一额定目标且无额外目标的杀。”
    举例:三国杀“陷嗣:……;其他角色可以将两张”嗣“当以你为唯一额定目标的杀使用。”
    举例:东方杀“双刃:你使用杀可以添加一名额外目标,以此法选择的额外目标可以不在攻击范围内。”

神鵺亮将机制调整

调整后的描述问题和天子协调一下?(若描述处理起来太操蛋了的话,12/12版干脆暂时搁置不调整)

状况说明:
(1) AnyunShowStaticSkill 原来是专门用来调整给神鵺主动亮出 一些静态技能和发动权在他人手里的。(如马术 无节操赛钱)
skill->getShowType() == "static" 目前也完全只是为了辨识这些静态技能
但准备阶段目前也只能亮出有这些技能的化身。没有静态技能的化身也只能在符合触发条件时才能亮。

(2) 另外还有一些完全无法实际适用的化身,目前是直接禁止进入化身池的。如zun

目前调整考虑为和国战完全一致:准备阶段就一定有一次自由亮化身的机会。这样自己回合主动过滤掉废物化身。

ai任务列表

  • 国战敌我判定混乱,主要是多了个天然野心家

  • 国战均势时,ai用力过猛的问题(俗称打工)
    (似乎敌我判断不能光看,还是可以设置适当的玩家间的仇恨。
    比如均势时,你手贱搞我,搞得我很难赢了,反过来就肯定拼死也拉你下水了。)

  • 国战亮将判定优化
    现在有的ai就是优势局不会主动亮将开团,非要技能被动触发出来的屑。 比如大冬对抗盟军打的辛辛苦苦,
    然后才发现还有暗着死活不亮将的*灵。
    包括射命丸文(国) 风速亮将?

  • 神将:天子 幽香 恋恋? 魔理沙 爱丽丝 图书

  • tkz势力的新将

  • 以外的普将:依神姐妹 sp堇子

  • 观星ai
    布都改良 (很难。。。)

  • 配合型ai
    代表 露米娅 永琳(国)

  • 用牌ai
    身份局,知己知彼 以逸待劳 只会单目标

  • 权衡型ai
    背水+太极
    国战 正邪逆转 (芙兰 因幡帝 朱路子)

游戏中标记数量文本问题

在游戏中因为背景部分区域的颜色与人物技能的标记数量文本颜色相同,导致玩家无法看清标记的数量,这问题需要解决,使得标记的数字可见。

摩多罗隐岐奈

摩多罗隐岐奈 体力上限:4 势力:璋
[秘仪]:出牌阶段限一次,若你于此阶段内使用过牌,你可以视为使用【调虎离山】。
[昭威]:结束阶段开始时,若你于此回合内使用过的牌数大于X(X为你的手牌数),你可以选择一项:获得一名其他角色的一张牌,然后其摸一张牌;获得至多X名其他角色各一张手牌,然后弃置等量的牌,这些角色各获得其中一张牌。
[主者]:主公技,出牌阶段限一次,你可以令其他璋势力角色选择是否将其一张牌交给你(选是会终止询问)。

火猫的怨灵或者是磁闪的bug

联机中发现:火猫的怨灵发动后,别人用磁【闪】抵消,虽然有绑上的动画了,但实际火猫并没被绑上。这需要修复。

神灵梦+化身bug

灵梦的封魔指定的判定的人与技能描述不符合。
如A的回合内有B角色第一次用了基本牌,然后灵梦发动了封魔,描述上是让B进行判定的,实际却是A角色进行判定。

国战扩将实装

【春】(Fs:我改了描述)
1 桑尼 1.5血 (身份也统一改成此版 3血)
折射:(原版)
xx(技能名找天子):一名角色回复体力后,你可以令其摸一张牌。

2 露娜 1.5血 (身份也统一改成此版 3血)
捉弄:(原版)
寂静(buff):你于回合内对其他角色造成伤害后,若其存活,你可以选择包括其的至多x名其他角色,你与这些角色的距离于此回合内视为1。你于其他角色的回合内受到伤害后,你选择除其以外的至多x名角色,其与这些角色的距离于此回合内无限大。(x为你已损失体力且至少为1)

注:无限大,可以妥协。换个说法?

3 斯塔 1.5血 (身份也统一改成此版 3血)
感应:(原版) 当其他角色回复体力后或受到伤害后,若其体力值与你相等,你可选择: 摸一张牌,或弃置其一张手牌。
xx(技能名找天子):其他角色使用锦囊牌指定目标时,你可失去1点体力,取消此牌的一名目标角色。

注:取消的是目标角色,自然和无邪无关。

狂舞和鼓舞发动时无文本提示

狂舞和鼓舞发动后无文本提示
丁礼田舞成为杀的目标后,发动狂舞让别人成为杀的额外目标,但记录信息的文本框没有提示和指示线,导致别人不知道成为了额外目标,这个需要优化。
尔子田里乃的鼓舞应该也应该需要优化

武将调整

  • 萃香(国战,身份)
    斗酒: 当其他角色使用【桃】或【酒】时,你可以摸一张牌并与其拼点,当你赢后,此牌无效,你回复1点体力。每阶段限一次。

备注: 国战是作为3血版的主将技。对方不能拼点时,不能发动此技能。

  • 小恶魔(身份)
    魔契: 一名角色于出牌阶段首次使用普通锦囊牌时,你可以令此牌的首个效果值+1。

备注:基本是国战翻版。可能偏强,装了看看

神魔理沙发动技能的文本显示错误

神魔理沙使用幻【杀】、秽【杀】这类杀时,发动充能增强效果值,选择增加横牌(或明牌)(第一个效果值)和增加伤害基数(第二个效果值)中的第二个时,记录文本框却弹出第一个效果值的加强文本。

国战皮肤

国战武将切换皮肤,显示的对应的图片不一致。目测是image内部名传参时候的问题。

武将稿

  • 帕秋莉(代替现有身份普版,国战暂不动)
    博览:出牌阶段开始时或当你成为其他角色使用锦囊牌的目标后,你可以观看牌堆顶的三张牌,然后以任意顺序放回牌堆顶或牌堆底。
    合咒:当你需要使用/打出任意基本牌或普通锦囊牌时,你可以声明之并将牌堆底两张牌置入弃牌堆,若其颜色与类型均不同,你将视为使用/打出声明的牌。每回合限一次。

  • 青兰(身份修改)
    异弹: 出牌阶段限一次,你可以将一张手牌当不计入次数的秽【杀】对一名有手牌且无明置手牌的角色使用。
    血杵: 锁定技,你使用的杀不能被闪响应。你对其他角色造成伤害后,你令其选择是否弃置一张【闪】并回复1点体力。

断线重连

目前的填写重连信息的逻辑是:

  1. 连接建立之后,通知objectName时记录,直接写到config.json里
  2. 重连时,点击按钮,把objectName和重连需要的URL添加进连接地址里

目前的问题整理:

  • 客户端结束游戏的“重新开始”,会把重连URL也发过去,所以要改mainwindow的restart信号槽
  • 服务器影分身 改完了,加个return的事
  • 客户端在第一次尝试重连时,没有点击添加重连信息,导致重新建立了一个连接并重新通知了objectName,此时会更新config.json,上局就再也进不去了

针对问题3,逻辑的1要改
针对问题1,需要改restart

图书

【若两张牌颜色与类型均不同,】

改为 【若两张牌花色与类型均不同,】

sp丧面秦心 体力3

面灵:当你从牌堆获得牌时,你须将牌堆顶等量的牌置于人物牌上,称为“面”,然后若“面”数大于X(X为存活角色数),你将“面”调整至X张;你能使用或打出“面”,以此法使用或打出的结算完毕后,你选择一项:弃置一张牌,或失去1点体力。

心殇:一名角色的结束阶段开始时,若你失去过牌,且此回合内置入弃牌堆的牌有四种不同的花色,你可以对一名角色造成1点伤害。

重构

引言

Fs打算对神杀的几次重新设计都以失败告终了。都是遇到了一些困难,然后由于自己时间、精力和能力上的不足导致失败。
所以Fs的思路由重新制作神杀变为基于神杀代码逐步进行重构,在不破坏现有功能的前提下一点一点对现有的历史问题进行修改。

(最终还是走到了破坏性修改的地步 嘤)

此次修改不涉及的内容

  1. 结算问题
    举例:闪和无懈可击先进行使用结算,使用结算完毕后生效
    举例:无视防具使用防具无效进行结算

  2. 用户体验
    dashboard的装备栏和手牌区域有色差,确定取消按钮出框,部分字体过大过小等

打算修改的问题列表

  1. LuaState的大量共用
    LuaState并不线程安全,而现有LuaState仅在各个room各持有一份,engine持有一份,并不是一个线程一份。
    而且还存在跨线程共用的情况。
    修改方案:将LuaState修改为thread storage

  2. 服务器架构
    当前服务器跑在主线程(界面线程),单机启动时和客户端共用线程。虽然不是什么大问题就是了。。。
    Room和Roomthread都是线程。没必要开两个线程来处理一个room,可以考虑取消room的线程属性。
    现在room本身的线程只用来处理选将逻辑,可以考虑一并移动进入Roomthread。

  3. room架构
    客户端类(Client)本身已经成为de facto Room object。Engine有一个currentRoomObject的函数在客户端返回Client。
    由于Client和Room两个类有着相似的特性(是各自端的room对象,管理一堆玩家和牌,储存部分状态)所以可以抽出部分共通内容做一个基类放在core。
    这样也可以解除Client和Room在Engine上的耦合,一定程度上缓解core/server/client耦合过于严重的问题,方便之后对程序进行模块化。

  4. 客户端架构
    目前的Client是单例。导致实现AI客户端化在现有架构下不可能。
    同时对于现在的client来说,是针对roomscene存在部分耦合内容。
    需要让client可以多例且可以不再主线程运行。且删除与roomscene的耦合。

  5. Card/FliterSkill
    目前的Card既是牌面,同时又是虚拟牌和添加到Engine的牌。实体牌是WrappedCard这个继承了Card的类。
    这种设计的问题是:牌面和牌耦合过于严重(都在同一个类里),牌和服务器客户端也存在严重耦合。
    FliterSkill本身继承OneCardViewAsSkill,但是没有ViewAsSkill的一切特征,而且修改的牌是实体牌不是虚拟牌,由此也引发过一些bug比如客户端闪退等(比如曾经有过主公技是FilterSkill,袁术一点伪帝就闪退的问题)
    把card解耦成牌和牌面(暂定CardFace),FilterSkill设计成服务器和客户端通用,可能可行?

  6. 界面
    坑最大的地方。
    freetype需要干掉,Qt自己就使用freetype进行字体渲染,没必要再弄一个freetype放在那里。
    fmod由于是专有软件,与GPL v3不兼容。不过目前的自由软件库里没看到任何可以代替fmod的软件,暂时没有解决方案。
    客户端存在不明原因的闪退(爬树?),怀疑和界面渲染方式有关。

  7. AI
    AI运行在RoomThread,运行时完全阻塞room线程且思考时间无限,手牌较多时性能很差且无法被打断。
    Lua扩展接口对AI完全开放,AI可以取得任意服务器资源,包括服务器上完全公开的手牌及身份信息,导致服务器端的AI存在许多特权,部分代码甚至有开挂的现象。
    所以将AI放在客户端,与玩家平起平坐,不再有任何特权,不再阻塞room线程,不再开挂,可能会是一个不错的思路。这也是我近几年来提出的一个大课题。
    不过就算客户端化,AI还有其他问题(比如性能,比如算法基于规则且程式化,并不智能)等待解决。

阿吽 养精蓄锐修改

3hp
陀螺:当主公摸牌或回复体力时,你可横置人物牌或横置装备区的一张牌,然后摸一张牌。
寻佛: 你可以将红桃牌当【养精蓄锐】使用。

2 养精蓄锐改动。
【养精蓄锐】 锦囊牌·一次性的延时类锦囊牌
使用时机:出牌阶段。
使用目标:一名角色。
作用效果:目标角色判定,若结果不为黑桃,其跳过弃牌阶段。且结束阶段开始时,其摸两张牌。

(东方化牌堆时准备给白莲)

年代记永琳漏洞

当场上存在两个年代记永琳的药理时(如被依姬凭依),一个角色先发动A药理获得基本牌效果加强,再发动B药理获得基本牌效果加强,但实际该角色使用基本牌获得的加强只能存在一个,如使用杀只会受到一个药理效果,让伤害值加一。
若从A获得基本牌效果加强,从B获得锦囊牌加强,则这两个加强效果可以共存。
其余同理。

SP莉莉白程序与本意不符问题

莉莉白
有单改的啥?
本来是展示同花色的春,展示完后丢任意春给别人的。现在变成了直接展示同花色的春并给别人,本意都变了。
本意的春腾:用牌时,展示一个同花色的扣置的春,展示完后,把任意一张春给别人,给完后那个人如果手牌数大于春的数量,就二选一,把所有春丢了,或者自己弃一张牌(没春可以弃就只能选此项)

身份普版灵梦

4hp
绮想: 当牌因使用打出弃置以外的原因进入弃牌堆后,你可以令一名角色获得其中的红桃牌。
封魔: 一名角色于一个回合内首次使用基本牌时,你可以弃置一张手牌,令使用者判定,若结果为红色,此牌无效。
(约等于对每名角色一回合限一次)
主公技【教主型替换】 -》 改为司马懿型代替

ai 补充及确认

  • 桑尼
  • 露娜
  • 斯塔
  • 夜雀
  • 小碗
  • 正邪
  • 火猫
  • 华扇
  • 萃香
  • 姬海棠
  • 魅魔
  • 乡长
  • 朱路子

请教关于一类触发视为技操作的问题

假设有个技能的效果是: 准备阶段,你可以将一张手牌当作【杀】使用。那么游戏中执行到相应的Room::askForUseCard语句时,需要先点一下技能按钮,然后才能选中一张任意手牌。如果不点技能按钮就无法选中手牌。请问为什么会有这种限制?实现代码在哪?
另外,上述情况下弹出的提示框里没有操作提示; prompt中如果有冒号,那么冒号以后的部分会被直接无视,后接的%1这样的参数也没法传递了。要修正这些的话需要改哪些代码?

神鵺化身问题

断线重连后不显示化身
(第一次重连时没点断线重连)断线重连后神鵺没有显示化身。虽然能发动技能,但更新化身后仍旧不显示。

神鵺化身问题

神鵺

当前回合是神鵺上家 搞事⑨。霍青娥濒死求桃 然后就神鵺化身红美铃发动背水给【桃】,接着就善逝。然后背水好像还没消失。
神鵺在当回合同时使用了背水 善逝两个技能 当回合好像并没有亮出红美铃 然后后面有一个回合又发动了背水 说是红美铃并没从X里消失

二童子视为使用【联军盛宴】问题

二童子视为使用【联军盛宴】时可以选择处于神隐状态的角色使用。需要追加合法性检测,以防止处于神隐状态的角色通过【联军盛宴】获得牌这种情况出现。

武将一览(非必要?)

  • 武将一览拆成身份 国战两个

  • 国战的武将体力减半。 (配套的勾玉image也要换?)

国战投降相关优化

  • 当前状况,投降后暗将并没有自动亮出来。

  • 国战投降后是否会自动存录像,需要确认。

  • 投降的情况下,是否要记录胜场: saveWinnerTable() 需要根据实际情况优化判断条件。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.