# Gay3Helper
**Repository Path**: ranossy/Gay3Helper
## Basic Information
- **Project Name**: Gay3Helper
- **Description**: No description available
- **Primary Language**: Lua
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2020-08-31
- **Last Updated**: 2024-10-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
宏和脚本编写说明
====================================
编写宏最好用支持Lua语法高亮的文本编辑器,推荐Notepad++。vs code 和 EditPlus 添加了插件也可以,这样比较容易发现语法错误。
## 目录
* [宏](#宏)
* [Lua基础](#lua基础)
* [基本概念](#基本概念)
* [全局函数](#全局函数)
* [Player对象](#player对象)
* [NPC对象](#npc对象)
* [枚举值和常量](#枚举值和常量)
* [其他常用示例](#其他常用示例)
* [脚本](#脚本)
* [基础命令](#基础命令)
* [移动和交通](#移动和交通)
* [交互和对话](#交互和对话)
* [任务](#任务)
* [物品和商店](#物品和商店)
* [交易行](#交易行)
* [战斗和技能](#战斗和技能)
* [其他命令](#其他命令)
* [全局变量](#全局变量)
* [台服版使用说明](#台服版使用说明)
## 宏
宏是一个lua脚本,所以要编写宏,需要了解Lua编程语言的基础知识。宏载入(绑定)后会编译为一个Lua函数,每次按下快捷键就会执行一次这个函数。
### Lua基础
参考[Lua教程](http://www.runoob.com/lua/lua-tutorial.html),重点看数据类型、变量、流程控制、运算符、表等内容,后面的不用看了。
其他参考资料:Lua程序设计(第2版)前六章。注:必须是第2版,这一版是参照Lua5.1,和软件使用的版本一致,其他版本语法等方面有细微差异。
Lua代码是区分大小写的,例如 abc 和 Abc 是两个不同的标识符。
### 基本概念
游戏中有三类对象。
Player:自己和其他玩家。
Doodad:可采集的矿、草、任务物品等等。
NPC:除玩家和Doodad外都是NPC。包括BOSS和玩家释放技能之后的效果,比如地刺之类的。一部分NPC没有名字。
编写宏重点关注的是Player和NPC对象。
### 全局函数
全局函数可以在编写宏的时候调用,也可以在脚本中作为表达式的一部分调用。
---
#### s_Output
描述:向控制台输出信息,用于输出宏中需要调试的信息。
参数:任意。
没有返回值。
示例:
```Lua
--向控制台输出我的名字和等级
local player = GetClientPlayer()
if not player then return end
s_Output(player.szName, player.nLevel)
```
---
#### GetClientPlayer
描述:获取自己控制的Player对象。
没有参数。
1个返回值:Player对象。如果尚未进入游戏返回nil。
示例: local player = GetClientPlayer()
---
#### s_util.GetTarget
描述:获取对象的当前目标。
1个参数:NPC或玩家对象。
2个返回值:没有目标返回nil。否则返回目标对象,目标对象类型([TARGET](#target) 类型的枚举值)。
示例:
```Lua
--有目标并且目标是玩家
local target, targetClass = s_util.GetTarget(player)
if target and targetClass == TARGET.PLAYER then
...
end
```
---
#### SetTarget
描述:设置自己的当前目标。
2个参数:类型(TARGET.NPC或TARGET.PLAYER), NPC或者玩家对象ID。
没有返回值。
---
#### IsEnemy
描述:判断两个对象是不是敌对关系
2个参数:NPC或玩家对象ID, NPC或玩家对象ID
1个返回值:是敌对返回true,否则返回false
示例:if IsEnemy(player.dwID, target.dwID) then ... end
---
#### s_util.GetBuffInfo
描述:返回指定对象的buff数据表。
2个参数:Player或者NPC对象, 是否只返回自己造成的buff(可选,缺省false)。
1个返回值:buff数据表。键是buffid,值是指定id的buff数据。
buff数据是如下结构的表:
| 键 | 值
| --- | ---
| dwID | buffid
| nLevel | buff等级
| bCanCancel | 是否能取消
| nLeftTime | 剩余时间(秒)
| nStackNum | 层数
| dwSkillSrcID | 造成这个buff的对象ID
示例:假设要判断的buffid为123,目标对象为target,我的对象为player
```Lua
--获取目标的buff表
local TargetBuff = s_util.GetBuffInfo(target)
--如果有指定buff
if TargetBuff[123] then
...
end
--如果没有指定buff
if not TargetBuff[123] then
...
end
--有指定buff,并且层数大于3
if TargetBuff[123] and TargetBuff[123].nStackNum > 3 then
...
end
--有指定buff并且剩余时间大于1.5秒
if TargetBuff[123] and TargetBuff[123].nLeftTime > 1.5 then
...
end
--返回我对目标造成的buff数据
local TargetBuffByMe = s_util.GetBuffInfo(target, true)
```
`注意:判断buff数据的其他信息之前必须先判断有没有这个buff,否则Lua会报错试图索引一个nil值。`
---
#### s_util.GetDistance
描述:返回两个对象之间的距离。
2个参数:对象1,对象2。
1个返回值:距离(尺)。
示例:local distance = s_util.GetDistance(player, target)
---
#### s_util.GetNpc
描述:获取一个指定类型的NPC。
2个参数:NPC模板ID, 范围(单位:尺,缺省值20)。
2个返回值:NPC对象(没有指定类型NPC,返回nil), 范围内指定NPC数量。
示例:
```
--获取扬州接秘境任务那个牌子的NPC对象
local npc_mjrw = s_util.GetNpc(869)
```
---
#### s_util.OutputTip
描述:输出提示信息
2个参数:文本串,颜色(1黄色 2红色 缺省为1)
没有返回值。
示例:s_util.OutputTip("基友们,大家好。")
---
#### s_util.GetSkillCN
描述:获取充能技能可使用次数和冷却剩余时间
1个参数:技能ID
2个返回值:可使用次数,冷却剩余时间(单位:秒)
示例:
```Lua
--如果盾击可使用次数大于0
if s_util.GetSkillCN(13047) > 0 then ... end
```
---
#### s_util.GetSkillOD
描述:获取透支技能可使用次数。
1个参数:技能ID。
1个返回值:剩余透支次数。
示例:
```Lua
--如果雷走风切剩余透支次数大于1
if s_util.GetSkillOD(16629) > 1 then
...
end
```
---
#### s_util.GetSkillCD
描述:获取技能冷却剩余时间。
1个参数:技能ID。
1个返回值:冷却剩余时间(单位:秒)。
示例:
```Lua
--如果闹须弥已经冷却
if s_util.GetSkillCD(17057) <= 0 then
...
end
```
---
#### s_util.CastSkill
描述:施放技能。
3个参数:技能ID,是否对自己施放,是否不判断读条(可选,如果为true和fcast效果一样,缺省为false)
1个返回值:释放成功返回true,否则返回false。
示例:
```Lua
--
```
说明:第二个参数对于不同类型的技能含义不同。对于需要选择一个位置施放的技能(比如唐门的天绝地灭,纯阳的气场等),如果为true是在自己的位置施放,如果为false是在目标位置施放。对于需要选择一个目标的增益技能(比如奶妈的加血技能),如果为true是对自己施放,如果为false是对目标释放。其他的普通攻击技能这个参数都应该为false.
---
#### GetSkillOTActionState
描述:获取对象读条数据。
1个参数:Player或NPC对象。
5个返回值: 是否在读条,技能ID,等级,读条百分比,动作类型。
示例:
```Lua
--获取目标的读条数据
local bPrepare, dwSkillId, dwLevel, nLeftTime, nActionState = GetSkillOTActionState(target)
```
---
#### s_util.StopSkill
描述:打断技能读条。
没有参数。
没有返回值。
示例:
```Lua
--获取自己读条数据
local bPrepare, dwSkillId, dwLevel, nLeftTime, nActionState = GetSkillOTActionState(player)
--如果在读条打断读条
if bPrepare then
s_util.StopSkill()
end
```
---
#### s_util.UseItem
描述:使用背包物品。
2个参数:id1,id2。
1个返回值:成功true,否则false。(不成功的原因可能是没有该物品或者物品还没冷却)
示例:
```Lua
--
```
---
#### s_util.GetPuppet
描述:获取唐门千机变数据。
没有参数。
2个返回值:千机变模板ID(没有返回nil), 千机变NPC对象(没有返回nil)。
说明:第一个返回值是千机变的模板ID,作为有没有千机变,千机变是什么形态的依据。第二个返回值是千机变的NPC对象,用于获取更详细的信息(一般用途可能是获取自己到千机变的距离)。第一个返回值成功获取的情况下,第二个返回值还是可能为nil。因为千机变的形态数据(模板ID)比NPC数据更早接收到,大概差几十毫秒,游戏中可以观察到,先显示千机变面板然后才出现千机变。所以不要假设第一个返回值正常就一定有第二个返回值。
示例:
```Lua
local TempID, Puppet = s_util.GetPuppet()
--如果没有机关,自己脚下放千机变
if not TempID then
s_util.CastSkill(3109, true)
end
--如果是底座,变形毒煞
if TempID == 16174 then
s_util.CastSkill(3370, false)
end
--如果是连弩
if TempID == 16175 then
...
end
--如果是重弩
if TempID == 16176 then
...
end
--如果是毒煞
if TempID == 16177 then
...
end
--如果有千机变,并且距离小于10尺
if Puppet and s_util.GetDistance(player, Puppet) < 10 then
...
end
```
---
#### s_util.GetTeamMember
描述:获取团队中血量百分比最少的玩家和团队血量百分比。
1个参数:距离(缺省20尺)。
3个返回值:队伍或团队中血量百分比最少的玩家对象(没有队伍返回nil),整个团队的血量百分比, 人数。
说明:查找的队友满足以下条件:没死,不是自己,在范围内,团队血量百分比和人数也是根据符合条件的这部分队友计算。
示例:
```Lua
--获取20尺内血量百分比最少的队友,和整个团队的血量百分比
local target, teamHP = s_util.GetTeamMember()
```
---
#### GetNpcIntensity
描述:获取NPC强度。
1个参数:NPC对象。
1个返回值: 强度。 (1普通, 2精英, 3头目, 4BOSS)。
说明: 如果参数不是NPC对象,返回1。
---
#### s_util.GetNpcHatred
描述: 获取NPC对象对自己的仇恨。
1个参数:NPC对象。
1个返回值:仇恨百分比。获取失败返回nil。
说明:当前目标才能获取仇恨数据。当前没有目标、仇恨数据还没同步到客户端、仇恨列表中没有自己都会获取失败。所以要先判断是否获取到,然后再判断数值。
示例:
```Lua
--如果仇恨大于90%
local hatread = s_util.GetNpcHatred(target)
if hatread and hatread > 0.9 then
...
end
```
---
#### s_util.GetShadow
描述:获取长歌影子数据。
没有参数。
1个返回值:影子数量。
说明:本人不玩长歌不知道需要获取哪些数据,当前只返回影子的数量。
---
#### Jump
描述:跳(和按下空格效果相同)。
没有参数。
没有返回值。
---
#### s_util.QuestIsAccept
描述:是否已接受指定任务。
1个参数:任务ID。
1个返回值:true或false。
---
#### s_util.QuestIsFinish
描述:指定任务是否可交。
1个参数:任务ID。
1个返回值:true或false。
---
#### s_util.QuestIsFail
描述:指定任务是否已失败。
1个参数:任务ID。
1个返回值:true或false。
---
#### s_util.QuestCheckKill
描述:检查指定任务杀怪条件是否完成。
2个参数:任务ID,索引。
1个返回值:true或false。
---
#### s_util.QuestCheckItem
描述:检查指定任务需要物品是否完成。
2个参数:任务ID,索引。
1个返回值:true或false。
---
#### s_util.QuestCheckState
描述:检查指定任务状态条件是否完成。
2个参数:任务ID,索引。
1个返回值:true或false。
---
#### s_util.GetMapID
描述:获取当前所在地图ID。
没有参数。
1个返回值:当前地图ID。
---
#### s_util.GetBagSize
描述:获取背包信息。
没有参数。
2个返回值:空闲位置数量,总数量
---
#### s_util.GetItemCount
描述:获取背包指定物品的数量。
2个参数:物品ID1,物品ID2。
1个返回值:数量,没有指定物品返回0。
---
#### s_util.FindItem
描述:查找背包物品。
2个参数:物品ID1,物品ID2。
3个返回值:Item对象(没有指定物品返回nil),背包索引,位置索引。
---
#### s_util.GetItemCD
描述:获取物品冷却时间。
2个参数:背包索引,位置索引。
1个返回值:指定位置物品的冷却剩余时间(单位:秒)。
```Lua
--假设物品的ID为 5, 11111
local item, bag, pos = s_util.FindItem(5, 11111)
--如果有指定物品,并且冷却时间小于0.5秒
if item and s_util.GetItemCD(bag, pos) < 0.5 then
...
end
```
---
#### s_util.GetWarnMsg
描述:获取警告信息。
没有参数。
1个返回值:警告信息文本。
说明:获取一次后,在游戏中没有再次出现警告信息的情况下,返回的是空串。
示例:
```Lua
--判断战兽山老一的警告信息
local warnmsg = s_util.GetWarnMsg()
if warnmsg == "报九枫吹奏手中长笛,潜入水下可隔绝笛音!" then
...
end
--查找子串,更好些,上面的完全相等,稍微复制错少个标点什么的就不行了
if string.find(warnmsg, "报九枫吹奏手中长笛") then
...
end
```
---
#### GetTickCount
描述:获取当前时间(毫秒)。
没有参数。
1个返回值:游戏启动后到当前的毫秒数。
---
#### s_util.SetTimer
描述:设置计时器。
1个参数: 计时器名。
没有返回值。
---
#### s_util.GetTimer
描述:获取计时器。
1个参数:计时器名。
1个返回值: 指定计时器从上次设置到当前时间的间隔(毫秒)。
示例:
```Lua
--比如某些操作至少间隔1秒
if s_util.GetTimer("aaa") > 1000 then
...
s_util.SetTimer("aaa")
end
```
---
### Player对象
自己和其他玩家都是Player对象。以下示例假设变量player是一个Player对象。
| 成员变量 | 描述
| --- | ---
| dwID | 对象ID
| nCurrentLife | 当前气血
| nMaxLife | 最大气血
| nCurrentMana | 当前内力
| nMaxMana | 最大内力
| nCurrentRage | 苍云怒气,霸刀狂意,藏剑剑气,天策战意
| nCurrentEnergy | 霸刀刀魂,唐门神机值
| nAccumulateValue | 少林禅那,纯阳气点,七秀剑舞层数
| nCurrentSunEnergy | 日灵(是看到的100倍),霸刀气劲
| nCurrentMoonEnergy | 月灵(是看到的100倍)
| nSunPowerValue | 满日(大于0满,否则不满)
| nMoonPowerValue | 满月(大于0满,否则不满)
| nPoseState | 姿态([POSE_TYPE](#pose_type)枚举值)
| nMoveState | 移动状态([MOVE_STATE](#move_state)枚举值)
| dwForceID | 门派ID([FORCE_TYPE](#force_type)枚举值)
| bFightState | 是否战斗状态
| szName | 名字
| nLevel | 等级
| nX | x坐标
| nY | y坐标
| nZ | z坐标
| nCurrentStamina | 精力
| nCurrentThew | 体力
| nCamp | 阵营(0中立,1浩气,2恶人)
| bOnHorse | 是否在马上
| 成员函数 | 描述
| --- | ---
| GetPet | 获取五毒宠物NPC对象,没有返回nil。没有参数。
---
### NPC对象
| 成员变量 | 描述
| --- | ---
| dwID | 对象ID
| dwTemplateID | 模板ID
| nCurrentLife | 当前气血
| nMaxLife | 最大气血
| nCurrentMana | 当前内力
| nMaxMana | 最大内力
| nLevel | 等级
| bFightState | 是否战斗状态
| szName | 名字
| nIntensity | 强度
| nMoveState | 移动状态([MOVE_STATE](#move_state)枚举值)
| nX | x坐标
| nY | y坐标
| nZ | z坐标
### 枚举值和常量
---
#### TARGET
| 成员 | 描述
| --- | ---
| NO_TARGET | 没有目标
| NPC | 目标是NPC
| PLAYER | 目标是玩家
| DOODAD | 目标是DOODAD
---
#### MOVE_STATE
| 成员 | 描述
| --- | ---
| INVALID | 未知状态
| ON_STAND | 站着不动
| ON_WALK | 走路
| ON_RUN | 跑步
| ON_JUMP | 跳跃
| ON_SWIM_JUMP | 水中跳跃
| ON_SWIM | 游泳
| ON_FLOAT | 水中漂浮
| ON_SIT | 坐下
| ON_KNOCKED_DOWN | 被击倒
| ON_KNOCKED_BACK | 被击退
| ON_KNOCKED_OFF | 被击飞
| ON_HALT | 眩晕
| ON_FREEZE | 定身
| ON_ENTRAP | 锁足
| ON_AUTO_FLY | 乘坐交通工具
| ON_DEATH | 重伤
| ON_DASH | 冲刺
| ON_PULL | 被抓
| ON_REPULSED | 滑行
| ON_RISE | 爬起
| ON_SKID | 滑行
| ON_SPRINT_BREAK | 使用轻功
| ON_SPRINT_DASH | 使用轻功
| ON_SPRINT_KICK | 使用轻功
| ON_SPRINT_FLASH | 使用轻功
| ON_SKILL_MOVE_SRC | 攻击位移状态
| ON_SKILL_MOVE_DST | 被攻击位移状态
| ON_SKILL_MOVE_TAIL | 技能收招状态
| ON_SKILL_MOVE_DEATH |
| ON_START_AUTO_FLY | 正在开始乘坐交通工具
| ON_FLY | 飞行
| ON_FLY_FLOAT | 未确认
| ON_FLY_JUMP | 未确认
| ON_DASH_TO_POSITION | 未确认
---
#### FORCE_TYPE
| 成员 | 描述
| --- | ---
| JIANG_HU | 大侠
| SHAO_LIN | 少林
| WAN_HUA | 万花
| TIAN_CE | 天策
| CHUN_YANG | 纯阳
| QI_XIU | 七秀
| WU_DU | 五毒
| TANG_MEN | 唐门
| CANG_JIAN | 藏剑
| GAI_BANG | 丐帮
| MING_JIAO | 明教
| CANG_YUN | 苍云
| CHANG_GE | 长歌
| BA_DAO | 霸刀
---
#### POSE_TYPE
| 成员 | 描述
| --- | ---
| SWORD | 苍云 擎刀
| SHIELD | 苍云 擎盾
| GAOSHANLIUSHUI | 长歌 高山流水
| YANGCUNBAIXUE | 长歌 阳春白雪
| PINGSHALUOYAN | 长歌 平沙落雁
| MEIHUASHANNONG | 长歌 梅花三弄
| BROADSWORD | 霸刀 秀明尘身
| SHEATH_KNIFE | 霸刀 雪絮金屏
| DOUBLE_BLADE | 霸刀 松烟竹雾
---
### 其他常用示例
```Lua
--获取自己的玩家对象,没有进入游戏会返回nil
local player = GetClientPlayer()
--没有自己的玩家对象直接返回,没有继续的必要了
if not player then return end
--获取自己的当前目标数据
local target, targetClass = s_util.GetTarget(player)
--获取目标的目标数据
local ttarget, ttargetClass = s_util.GetTarget(target)
--如果目标的目标是自己
if ttarget and ttarget.dwID == player.dwID then
...
end
--后跳技能(不是迎风回浪)
s_util.CastSkill(9007, false)
--如果在马上,就下马
if player.bOnHorse then
RideHorse()
end
```
## 脚本
脚本和宏是不同概念,脚本是一个文本文件,是按行执行的,每次执行一行,每行只能有一条命令,并且也只能有一条命令。一个命令执行完了,才会下一行。所有命令只有参数,没有返回值。
---
### 基础命令
这些命令用于脚本的流程控制。
---
#### s_cmd.Tag
描述:定义一个标号。
1个参数:标号(串)。
---
#### s_cmd.Goto
描述:跳转到指定标号。
1个参数:标号(串)。
说明:这个命令和上个命令配合组成循环结构。
示例:
```Lua
--这是一个死循环,永远不会退出,除非停止脚本
s_cmd.Tag("开始")
s_cmd.SendMessage("正在循环")
s_cmd.Goto("开始")
```
---
#### s_cmd.Next()
描述:下一行命令。
没有参数。
说明:这个命令要配合Lua代码使用,只有在一行代码中没有其他命令的时候才使用。
---
#### s_cmd.CheckExpr
描述:检查表达式的值,如果为真跳转到指定标号,否则执行下一行。
2个参数:Lua表达式,标号(串)。
说明:这个命令和s_cmd.Tag配合组成分支结构或者退出循环。表达式中可以用所有的全局函数和变量。
#### s_cmd.Wait
描述:等待指定时间。
1个参数:等待的时间(数字,单位:毫秒)。
示例:
```lua
--等待1秒
s_cmd.Wait(1000)
```
---
#### s_cmd.WaitFor
描述:等待到指定的表达式为真或超时。
2个参数:超时时间(单位:毫秒,-1表示无限等待),表达式(可选参数)。
说明:如果第2个参数的表达式为真,或者已经过去了第1个参数指定的时间,那么结束等待。
示例:
```Lua
--这是个反面的例子,这个等待永远不会结束。
--因为没有第2个参数,所有它永远不会为真。并且第1个参数指定为无限等待。
s_cmd.WaitFor(-1)
--这样使用和s_cmd.Wait是同样效果,没有指定第2个参数。只有超时了才会结束等待。
s_cmd.WaitFor(1000)
```
---
#### s_cmd.LoadScript
描述:载入脚本。
2个参数:脚本文件名(相对路径),行号或者标号(可选,缺省为1)。
示例:
```
--脚本路径是相对于工具所在目录下的脚本目录。假设脚本目录下有 脚本.txt 这个文件
--加载脚本,从第1行开始执行
s_cmd.LoadScript("脚本.txt")
--加载脚本,从指定行号开始
s_cmd.LoadScript("脚本.txt", 50)
--加载脚本,从指定标号开始
s_cmd.LoadScript("脚本.txt", "标号")
```
---
#### s_cmd.SendMessage
描述:向主控端发送消息。
2个参数:消息串,是否错误(可选,如果为true字体颜色是红色)。
---
#### s_cmd.SelectTarget
描述:选择目标。
2个参数:NPC模板ID, 范围(可选,缺省20尺)
---
### 移动和交通
这些命令用于控制角色移动和实现交通功能。
---
#### s_cmd.MoveTo
描述:移动到指定位置。
3个参数:X坐标,Y坐标,Z坐标。
---
#### s_cmd.SprintTo
描述:冲刺到指定位置。
4个参数:X坐标,Y坐标,Z坐标,是否停止(可选,如果为true,到达目标点不停止冲刺)。
---
#### s_cmd.Ride
描述:上马下马。
1个参数:0下马, 1上马。
---
#### s_cmd.TakeBus
描述:坐马车。
2个参数:出发点ID, 到达点ID。
---
#### s_cmd.ShenXing
描述:神行千里。
2个参数:地图ID,交通点ID。
---
#### s_cmd.ItemTransfer
描述:使用物品传送。
2个参数:类型(1旋返书、2战狂牌), 地图ID。
---
### 交互和对话
---
#### s_cmd.InteractNpc
描述:交互NPC。
3个参数:NPC模板ID,范围(可选,缺省10尺),等待对话面板打开(可选,false等待,true不等待)
---
#### s_cmd.SelectTalk
描述:选择对话项。
1个参数:索引或者文本。
说明:需要先用 s_cmd.InteractNpc 命令交互NPC。
---
#### s_cmd.CheckDialogText
描述:判断对话面板是否有指定文本。如果有跳转到指定标号。
2个参数:文本,标号。
说明:需要先用 s_cmd.InteractNpc 命令交互NPC。
---
#### s_cmd.InteractDoodad
描述:交互DOODAD。
1个参数:模板ID。
说明:交互6尺内指定模板ID的Doodad一次。
---
#### s_cmd.InteractDoodadEx
描述:交互DOODAD。
4个参数:模板ID, 范围(尺), 表达式(可选), 标号(如果有表达式,必须指定,否则不需要)。
说明:交互指定范围内的Doodad,如果距离大于6尺,会向Doodad移动。指定范围内没有指定的Doodad下一条命令。如果表达式为真,跳转到指定标号。
---
### 任务
---
#### s_cmd.AcceptQuest
描述:接受任务。
2个参数:NPC模板ID,任务ID。
---
#### s_cmd.AcceptAllQuest
描述:接受指定NPC所有可接任务。
1个参数:NPC模板ID。
---
#### s_cmd.FinishQuest
描述:完成任务。
4个参数:NPC模板ID, 任务ID, 第一组奖励选择索引(可选), 第二组奖励选择索引(可选)。
---
#### s_cmd.CancelQuest
描述:放弃任务。
1个参数:任务ID。
---
### 物品和商店
---
#### s_cmd.OpenShop
描述:打开商店。
1个参数:商店名。
说明:这个命令的上一条命令必须是s_cmd.InteractNpc。
---
#### s_cmd.BuyItem
描述:购买物品。
4个参数:物品ID1, 物品ID2, 购买数量, 物品所在的页数(可选,缺省第1页)。
说明:购买数量是买够这种物品的总数量,比如参数是5,这种物品背包已经有2个,只会再买3个。
---
#### s_cmd.SellItem
描述:出售物品。
2个参数:物品ID1, 物品ID2。
---
#### s_cmd.UseItem
描述:使用物品。
4个参数:物品ID1, 物品ID2, 是否使用到没有。
---
#### s_cmd.DestroyItem
描述:删除物品。
2个参数:物品ID1, 物品ID2。
---
#### s_cmd.OpenBox
描述: 打开盒子物品。
2个参数: 物品ID1, 物品ID2。
---
#### s_cmd.GetLevelAward
描述: 领取等级礼包。
1个参数: 索引(1-10)。
---
#### s_cmd.DailySign
描述: 每日签到。
没有参数。
---
#### s_cmd.ReadAllBook
描述: 阅读背包中所有没有读过的书籍。
没有参数。
---
#### s_cmd.ExchangeEquip
描述: 切换装备。
1个参数:索引(1-4)。
---
### 交易行
---
#### s_cmd.AuctionBuy
描述:交易行购买物品。
4个参数:NPC模板ID, 物品ID1, 物品ID2, 单价(单位:铜)
说明:从交易行购买一口价低于指定单价的所有指定物品。
---
#### s_cmd.AuctionSell
描述:交易行寄售物品。
5个参数:NPC模板ID, 物品ID1, 物品ID2, 单价(单位:铜), 保管时间(12,24,48之一)
说明:把背包中的所有指定物品,以比其他人低1银的单价寄售。如果最低单价低于指定的单价不寄售。
---
### 战斗和技能
---
#### s_cmd.Fight
描述: 战斗。
3个参数:
| 参数 | 说明
| --- | ---
| 参数1 | 战斗函数索引。缺省1。
| 参数2 | 敌人类型。 0所有, 1NPC, 2玩家, NPC模板ID。缺省0。
| 参数3 | 范围。单位:尺,缺省20。
示例:
```Lua
--下面两行效果完全一样,没有指定的参数,都会使用缺省值。
--用战斗函数表中第1个函数,攻击所有敌人,范围20尺。
s_cmd.Fight(1, 0, 20)
s_cmd.Fight()
--攻击10尺内模板ID为12345的NPC。
--这是个死循环,除非手动停止,脚本不会结束。
s_cmd.Tag("开始")
s_cmd.Fight(1, 12345, 10)
s_cmd.Goto("开始")
```
---
#### s_cmd.FightEx
描述: 战斗。
5个参数:
| 参数 | 说明
| --- | ---
| 参数1 | 战斗函数索引。缺省1.
| 参数2 | 敌人类型。 0所有, 1NPC, 2玩家, NPC模板ID。缺省0.
| 参数3 | 范围。单位:尺,缺省20.
| 参数4 | Lua表达式
| 参数5 | 标号
说明:和上一个命令的区别是,攻击到指定范围内没有符合条件的敌人,才下一条命令。表达式为真,跳转到指定标号。
---
#### s_cmd.SelectTalentPoint
描述: 选择奇穴。
2个参数: 奇穴ID, 索引。
---
#### s_cmd.LearnRecipe
描述: 领悟秘籍。
2个参数: 技能ID, 秘籍ID。
---
#### s_cmd.UpdateSkill
描述: 升级所有可升级的技能。
没有参数。
---
#### s_cmd.MountKungfu
描述: 切换内功。
1个参数: 内功ID。
---
#### s_cmd.SitDown
描述: 打坐。
1个参数: 表达式。
说明: 当表达式为真,结束打坐。
---
#### s_cmd.UseSkill
描述:使用技能。
2个参数: 技能ID, 是否等待读条(可选,缺省false)。
---
### 其他命令
---
#### s_cmd.CancelBuff
描述: 取消buff。
1个参数:buffid。
---
#### s_cmd.Fishing
描述: 帮会钓鱼。
没有参数。
---
#### s_cmd.SendChat
描述: 发送聊天信息。
1个参数: 聊天信息文本。
示例:
```
--地图频道喊话
s_cmd.SendChat("/y Hello World!")
```
---
#### s_cmd.SwitchMap
描述:切换地图
1个参数:目标地图名称。
示例:
```Lua
--进入副本
s_cmd.SwitchMap("5人英雄")
--进入地图
s_cmd.SwitchMap("洛道")
```
---
### 全局变量
以下全局变量用于配置脚本的一些选项。
---
#### s_tConfigVar.bRevive
描述:是否回营地复活。缺省值为false。
说明:脚本运行中,如果角色死亡会自动复活。如果当前地图不能原地复活(比如在副本内),直接回营地复活。如果当前地图可原地复活,判断这个变量,如果为false,原地复活,如果为true,回营地复活。如果是回营地复活,复活后会检查脚本中是否有 "复活点" 标号,如果有就跳转到这个标号。
示例:
```Lua
--自绝经脉回营地
s_tConfigVar.bRevive = true s_cmd.Next() --设置回营地复活
s_cmd.UseSkill(608, true) --自绝经脉
s_tConfigVar.bRevive = false s_cmd.Next() --设置原地复活
```
---
## 台服版使用说明
把 X:\你台服版的安装目录\bin\zhtw_hd\ 文件夹下的 gameupdater.exe 改名为 gameupdater2.exe, 把软件目录下的 gameupdater.exe 复制到这个位置,然后启动台服登录游戏的软件,和正常流程一样启动游戏。首次运行会有选择配套软件所在目录的对话框,选择手残党台服版目录下的m.exe。
注意:台服版的宏和脚本, 要保存为不带 BOM 的 UTF-8 编码(不明白自行百度), 不然会乱码, 脚本还可能不正常(比如打开商店的商店名)。