首页
/ QSanguosha-For-Hegemony项目中的Lua技能扩展详解

QSanguosha-For-Hegemony项目中的Lua技能扩展详解

2025-06-08 06:46:17作者:袁立春Spencer

前言

本文主要讲解QSanguosha-For-Hegemony项目中Lua技能扩展的高级用法,适合已经具备基础Lua编程能力的开发者阅读。我们将深入探讨几种特殊的Pile类型、ServerInfo结构体、SkipGameRule机制以及extra_cost属性的应用。

特殊Pile类型详解

1. expand_pile基础用法

expand_pile是与视为技绑定的特殊牌堆,它极大地简化了"将牌堆上的牌当作某种牌使用"这类技能的开发。以"箭矢"技能为例:

devJianshiVS = sgs.CreateViewAsSkill{
    name = "devJianshi",
    n = 2,
    expand_pile = "devJianshi",  -- 关键配置
    view_filter = function(self, selected, to_select)
        -- 过滤逻辑
    end,
    -- 其他方法...
}

技术要点

  • 当玩家点击技能按钮时,系统会自动将Pile中的牌移动到玩家手牌区
  • 支持多个Pile,用逗号分隔
  • 在view_filter中可以使用".|.|.|Pile名"的模式匹配

2. %Pile - 跨玩家牌堆访问

%Pile前缀允许访问其他玩家武将牌上的牌堆,这在君主技等需要共享牌堆的场景中非常有用:

expand_pile = "devShiren,%devShiren"

实现原理

  • 第一个devShiren访问自身牌堆
  • %devShiren访问同势力角色的牌堆
  • 系统会自动处理牌的移动逻辑

3. &Pile - 视为手牌

&Pile前缀的牌堆在使用和打出时会被视为手牌,类似于"木牛流马"的机制:

ask_who:addToPile("&devZhenduan",room:getNCards(2))

注意事项

  • &符号必须保留
  • 需要手动在视为技中处理相关逻辑
  • 适合实现"将牌堆上的牌当作手牌使用"的效果

ServerInfo结构体应用

ServerInfo结构体提供了访问服务器信息的能力,定义如下:

struct ServerInfoStruct {
    const QString Name;             // 服务器名称
    const QString GameMode;         // 游戏模式
    const int OperationTimeout;     // 操作超时时间
    // 其他字段...
};

使用示例

local serverName = sgs.ServerInfo.Name
local gameMode = sgs.ServerInfo.GameMode

应用场景

  • 根据游戏模式调整技能效果
  • 获取服务器配置信息
  • 实现与服务器状态相关的特殊逻辑

SkipGameRule机制

SkipGameRule允许技能覆盖默认的游戏规则处理流程,常用于改变游戏基本机制:

room:setTag("SkipGameRule",sgs.QVariant(true))

技术要点

  • 必须在技能逻辑的最后设置
  • 需要将技能priority设为1以确保优先执行
  • 常用于实现"改变响应方式"类技能

典型应用

  • 让【杀】可以用【杀】响应
  • 修改判定流程
  • 覆盖默认的卡牌使用规则

extra_cost属性详解

extra_cost是技能卡的特殊属性,主要用于处理拼点等需要前置操作的场景:

extra_cost = function(self,room,card_use)
    -- 拼点前置处理
    local pd = source:pindianSelect(target,"skill_name")
    local data = sgs.QVariant()
    data:setValue(pd)
    source:setTag("skill_tag",data)
end

实现流程

  1. 在extra_cost中处理拼点选择
  2. 将拼点数据存入tag
  3. 在on_effect中执行拼点并处理结果

注意事项

  • extra_cost执行时玩家尚未明置武将
  • 需要妥善处理Global_***Failed标记
  • 适合实现"拼点成功后触发效果"类技能

总结

本文详细介绍了QSanguosha-For-Hegemony项目中几种高级Lua扩展技术,包括:

  1. 三种特殊Pile类型的使用场景和实现方法
  2. ServerInfo结构体的字段含义和访问方式
  3. SkipGameRule机制的原理和应用
  4. extra_cost属性的工作流程和实现技巧

掌握这些高级技术可以帮助开发者实现更复杂、更有创意的技能效果,丰富游戏体验。建议读者结合实际代码示例进行实践,逐步掌握这些扩展技术的应用。

登录后查看全文
热门项目推荐

项目优选

收起
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
152
1.97 K
kernelkernel
deepin linux kernel
C
22
6
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
486
37
communitycommunity
本项目是CANN开源社区的核心管理仓库,包含社区的治理章程、治理组织、通用操作指引及流程规范等基础信息
315
10
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
145
191
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
991
395
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
193
276
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
937
554
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Python
75
69