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

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

2025-06-08 10:41:33作者:袁立春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属性的工作流程和实现技巧

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

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

热门内容推荐

最新内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
178
262
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
866
513
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
183
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
265
305
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
83
4
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
598
57
GitNextGitNext
基于可以运行在OpenHarmony的git,提供git客户端操作能力
ArkTS
10
3