当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇双7武器触发1.2倍攻击脚本编写武器攻击+7幸运+7触发倍率实现教程

热度:
想要实现武器攻击+7、幸运+7\(STR(S1)>7,GREATEREQUAL<\)同时达成双7条件后触发1.2倍攻击倍率\(STR(S1)>7,GREATEREQUAL<\)整套逻辑需要拆分两个部分\(STR(S1)>7,GREATEREQUAL<\)一部分是武器属性的设置\(STR(S1)>7,GREATEREQUAL<\)另一部分是触发倍率的脚本判断\(STR(S1)>7,GREATEREQUAL<\)脚本一般放置在QF触发脚本\(STR(S1)>7,GREATEREQUAL<\)也就是QManage.txt\(STR(S1)>7,GREATEREQUAL<\)也可以放到QF_OnTimer定时器脚本\(STR(S1)>7,GREATEREQUAL<\)依靠角色在线持续检测武器属性\(STR(S1)>7,GREATEREQUAL<\)满足条件就开启攻击倍率\(STR(S1)>7,GREATEREQUAL<\)不满足则取消倍率。

武器攻击+7和幸运+7\(STR(S1)>7,GREATEREQUAL<\)分为两种实现方式\(STR(S1)>7,GREATEREQUAL<\)第一种是直接在StdItems.DB物品数据库修改武器基础属性\(STR(S1)>7,GREATEREQUAL<\)把武器的攻击上限、下限直接加上7点\(STR(S1)>7,GREATEREQUAL<\)幸运属性设置为7。第二种是通过脚本给武器附加属性\(STR(S1)>7,GREATEREQUAL<\)使用SETITEMATTR命令给指定武器增加攻击与幸运\(STR(S1)>7,GREATEREQUAL<\)数据库内武器本身不改动\(STR(S1)>7,GREATEREQUAL<\)依靠脚本赋予属性。绝大多数版本会选择修改数据库\(STR(S1)>7,GREATEREQUAL<\)这样属性会永久保存在装备上\(STR(S1)>7,GREATEREQUAL<\)小退重登不会丢失\(STR(S1)>7,GREATEREQUAL<\)脚本只负责判断双7条件\(STR(S1)>7,GREATEREQUAL<\)触发攻击倍率。

攻击倍率1.2倍\(STR(S1)>7,GREATEREQUAL<\)M2引擎中使用SETATTACKRATE命令来设置攻击倍率\(STR(S1)>7,GREATEREQUAL<\)参数填写120就代表1.2倍攻击\(STR(S1)>7,GREATEREQUAL<\)设置为100代表恢复原本基础攻击。这个倍率属于临时攻击加成\(STR(S1)>7,GREATEREQUAL<\)角色下线、大退之后会自动清空\(STR(S1)>7,GREATEREQUAL<\)所以需要在线状态下持续检测武器属性\(STR(S1)>7,GREATEREQUAL<\)一旦条件不满足\(STR(S1)>7,GREATEREQUAL<\)立刻把倍率重置回100。

脚本的核心判断逻辑\(STR(S1)>7,GREATEREQUAL<\)玩家身上佩戴的武器\(STR(S1)>7,GREATEREQUAL<\)读取武器的攻击加成数值\(STR(S1)>7,GREATEREQUAL<\)同时读取武器幸运值\(STR(S1)>7,GREATEREQUAL<\)当武器攻击加成等于7\(STR(S1)>7,GREATEREQUAL<\)并且武器幸运等于7的时候\(STR(S1)>7,GREATEREQUAL<\)执行SETATTACKRATE120开启1.2倍攻击;如果任意一项不达标\(STR(S1)>7,GREATEREQUAL<\)就执行SETATTACKRATE100恢复原始攻击。这里要注意\(STR(S1)>7,GREATEREQUAL<\)读取武器属性需要使用GETITEMATTR命令\(STR(S1)>7,GREATEREQUAL<\)读取佩戴武器的属性参数\(STR(S1)>7,GREATEREQUAL<\)区分武器本身数据库属性和脚本附加属性。

完整QF触发脚本写法\(STR(S1)>7,GREATEREQUAL<\)把代码写入QManage.txt\(STR(S1)>7,GREATEREQUAL<\)放在[@OnTimer]定时器里面\(STR(S1)>7,GREATEREQUAL<\)设置定时器间隔\(STR(S1)>7,GREATEREQUAL<\)每一秒执行一次检测\(STR(S1)>7,GREATEREQUAL<\)保证状态实时更新。
[@OnTimer]
#IF
CHECKHAVEITEM屠龙
#ACT
GETITEMATTR屠龙攻击0<$STR(S1)>
GETITEMATTR屠龙幸运0<$STR(S2)>
#IF
EQUAL<$STR(S1)>7
EQUAL<$STR(S2)>7
#ACT
SETATTACKRATE120
#ELSEACT
SETATTACKRATE100

上面示例以屠龙作为测试武器\(STR(S1)>7,GREATEREQUAL<\)需要把武器名称替换成实际使用的武器名字。GETITEMATTR第二个参数代表读取装备属性\(STR(S1)>7,GREATEREQUAL<\)0代表读取佩戴的武器位置\(STR(S1)>7,GREATEREQUAL<\)S1存储武器攻击数值\(STR(S1)>7,GREATEREQUAL<\)S2存储武器幸运数值。当两个变量同时等于7\(STR(S1)>7,GREATEREQUAL<\)就开启1.2倍攻击\(STR(S1)>7,GREATEREQUAL<\)其他情况回归原本攻击。

如果是脚本赋予武器攻击+7、幸运+7\(STR(S1)>7,GREATEREQUAL<\)不修改数据库\(STR(S1)>7,GREATEREQUAL<\)需要写装备穿戴触发脚本\(STR(S1)>7,GREATEREQUAL<\)在QF_OnWear穿戴触发脚本\(STR(S1)>7,GREATEREQUAL<\)玩家穿戴武器的时候\(STR(S1)>7,GREATEREQUAL<\)执行SETITEMATTR给武器添加攻击和幸运\(STR(S1)>7,GREATEREQUAL<\)脱下武器的时候清除附加属性。
[@OnWear]
#IF
CHECKHAVEITEM屠龙
#ACT
SETITEMATTR屠龙攻击70
SETITEMATTR屠龙幸运70

[@OnUnWear]
#IF
CHECKHAVEITEM屠龙
#ACT
SETITEMATTR屠龙攻击00
SETITEMATTR屠龙幸运00

这种方式的弊端\(STR(S1)>7,GREATEREQUAL<\)部分引擎版本\(STR(S1)>7,GREATEREQUAL<\)SETITEMATTR附加的属性\(STR(S1)>7,GREATEREQUAL<\)在玩家小退之后会丢失\(STR(S1)>7,GREATEREQUAL<\)需要搭配上线脚本重新赋予属性\(STR(S1)>7,GREATEREQUAL<\)稳定性不如直接修改StdItems.DB数据库。

编写脚本过程容易出现的各类问题\(STR(S1)>7,GREATEREQUAL<\)第一点\(STR(S1)>7,GREATEREQUAL<\)武器名称必须和StdItems.DB里面的物品名称完全一致\(STR(S1)>7,GREATEREQUAL<\)不能存在多余空格、错别字\(STR(S1)>7,GREATEREQUAL<\)否则GETITEMATTR读取不到装备属性\(STR(S1)>7,GREATEREQUAL<\)条件永远无法成立\(STR(S1)>7,GREATEREQUAL<\)倍率不会触发。第二点\(STR(S1)>7,GREATEREQUAL<\)定时器不要设置间隔过短\(STR(S1)>7,GREATEREQUAL<\)OnTimer默认设置1000毫秒也就是1秒检测一次就足够\(STR(S1)>7,GREATEREQUAL<\)间隔太小会增加引擎运算压力\(STR(S1)>7,GREATEREQUAL<\)造成游戏卡顿。第三点\(STR(S1)>7,GREATEREQUAL<\)区分武器原始属性和附加属性\(STR(S1)>7,GREATEREQUAL<\)如果武器本身数据库自带攻击\(STR(S1)>7,GREATEREQUAL<\)再叠加脚本增加\(STR(S1)>7,GREATEREQUAL<\)读取出来的S1数值会大于7\(STR(S1)>7,GREATEREQUAL<\)条件判断就不会生效\(STR(S1)>7,GREATEREQUAL<\)这种情况需要修改判断逻辑\(STR(S1)>7,GREATEREQUAL<\)改为大于等于7\(STR(S1)>7,GREATEREQUAL<\)也就是#IFGREATEREQUAL<$STR(S1)>7\(STR(S1)>7,GREATEREQUAL<\)GREATEREQUAL<$STR(S2)>7。

第四点\(STR(S1)>7,GREATEREQUAL<\)SETATTACKRATE攻击倍率\(STR(S1)>7,GREATEREQUAL<\)只对物理攻击生效\(STR(S1)>7,GREATEREQUAL<\)魔法、道术不会受到倍率加成\(STR(S1)>7,GREATEREQUAL<\)如果想要同时加成魔法道术\(STR(S1)>7,GREATEREQUAL<\)需要搭配其他属性命令。第五点\(STR(S1)>7,GREATEREQUAL<\)角色脱下武器之后\(STR(S1)>7,GREATEREQUAL<\)脚本没有及时重置倍率\(STR(S1)>7,GREATEREQUAL<\)会出现武器取下依旧保留1.2倍攻击的BUG\(STR(S1)>7,GREATEREQUAL<\)所以定时器必须持续检测\(STR(S1)>7,GREATEREQUAL<\)不满足条件立刻把倍率恢复100。第六点\(STR(S1)>7,GREATEREQUAL<\)部分老旧M2内核不支持GETITEMATTR读取装备属性\(STR(S1)>7,GREATEREQUAL<\)这类引擎需要换另外一套方案\(STR(S1)>7,GREATEREQUAL<\)通过变量记录武器的攻击与幸运\(STR(S1)>7,GREATEREQUAL<\)穿戴的时候赋值\(STR(S1)>7,GREATEREQUAL<\)脱下清空变量。

针对多把武器都可以触发双7效果的情况\(STR(S1)>7,GREATEREQUAL<\)不能写死单一武器名字\(STR(S1)>7,GREATEREQUAL<\)需要循环遍历身上装备\(STR(S1)>7,GREATEREQUAL<\)判断武器位置装备的攻击与幸运\(STR(S1)>7,GREATEREQUAL<\)只要武器位置装备同时满足攻击7、幸运7\(STR(S1)>7,GREATEREQUAL<\)就开启倍率。

测试验证流程\(STR(S1)>7,GREATEREQUAL<\)修改完成脚本\(STR(S1)>7,GREATEREQUAL<\)保存为ANSI编码\(STR(S1)>7,GREATEREQUAL<\)关闭M2引擎全部网关\(STR(S1)>7,GREATEREQUAL<\)重启服务端。进入游戏\(STR(S1)>7,GREATEREQUAL<\)佩戴武器\(STR(S1)>7,GREATEREQUAL<\)查看武器面板确认攻击+7\(STR(S1)>7,GREATEREQUAL<\)幸运+7\(STR(S1)>7,GREATEREQUAL<\)观察人物攻击数值是否出现提升。取下武器\(STR(S1)>7,GREATEREQUAL<\)确认攻击倍率恢复正常。切换其他武器\(STR(S1)>7,GREATEREQUAL<\)确认不会误触发倍率。小退重新登录游戏\(STR(S1)>7,GREATEREQUAL<\)检查属性和倍率状态是否保持正常。

还有一种常见逻辑漏洞\(STR(S1)>7,GREATEREQUAL<\)武器经过升级、锻造\(STR(S1)>7,GREATEREQUAL<\)攻击变成8点\(STR(S1)>7,GREATEREQUAL<\)幸运变成8点\(STR(S1)>7,GREATEREQUAL<\)也会触发倍率\(STR(S1)>7,GREATEREQUAL<\)想要严格限定只能攻击7并且幸运7才触发\(STR(S1)>7,GREATEREQUAL<\)就必须使用EQUAL等于判断。如果允许高于7的属性同样触发\(STR(S1)>7,GREATEREQUAL<\)就使用大于等于判断。

如果使用数据库修改武器属性\(STR(S1)>7,GREATEREQUAL<\)打开StdItems.DB\(STR(S1)>7,GREATEREQUAL<\)找到对应武器\(STR(S1)>7,GREATEREQUAL<\)修改攻击下限、攻击上限\(STR(S1)>7,GREATEREQUAL<\)加上7点\(STR(S1)>7,GREATEREQUAL<\)幸运字段直接填7\(STR(S1)>7,GREATEREQUAL<\)保存数据库\(STR(S1)>7,GREATEREQUAL<\)重启服务端\(STR(S1)>7,GREATEREQUAL<\)武器属性永久生效\(STR(S1)>7,GREATEREQUAL<\)不需要穿戴脚本去附加属性。脚本只负责做条件判断\(STR(S1)>7,GREATEREQUAL<\)检测佩戴武器的属性数值\(STR(S1)>7,GREATEREQUAL<\)完成倍率开关。

部分版本会出现倍率生效但是人物面板不显示攻击数字变化\(STR(S1)>7,GREATEREQUAL<\)属于正常现象\(STR(S1)>7,GREATEREQUAL<\)SETATTACKRATE是战斗倍率\(STR(S1)>7,GREATEREQUAL<\)面板不会刷新\(STR(S1)>7,GREATEREQUAL<\)实际打怪PK伤害会按照1.2倍计算\(STR(S1)>7,GREATEREQUAL<\)可以通过打怪测试伤害确认是否生效。
[顶部]