请选择 进入手机版 | 继续访问电脑版

13号避难所

 找回密码
 立即注册
搜索
查看: 2325|回复: 13

问一个改武器的问题...

[复制链接]
发表于 2020-4-8 12:30:40 | 显示全部楼层 |阅读模式

今天用ProtoManager改了一个战斗刀,如上图所示,601是改完的,236是原始的战斗刀,本意是想让这个新的战斗刀有两个攻击模式,第一模式投掷,第二模式挥舞,结果在游戏里测试的时候,投掷模式没任何问题,但是从投掷换到挥舞模式会无法攻击,点到敌人身上可以看到命中率,但是点击后没有攻击动作,必须要切一下两手的武器挥舞攻击才能正常使用,反过来如果从挥舞模式切换到投掷模式就不会有无法攻击的问题,蛮奇怪的...

然后我又试了下第一模式挥舞,第二模式投掷,同样是从投掷切挥舞无法攻击。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
发表于 2020-4-8 13:35:08 | 显示全部楼层
我直接改戰鬥刀的話沒啥問題,圖中我唯一注意到的問題是你601的proto ID仍然是用舊的236
 楼主| 发表于 2020-4-8 14:13:59 | 显示全部楼层
那真是怪了,在你那边没问题吗...
我刚刚在英文原版没有任何修改的rp233里试着改了一下战斗刀,依然出现无法攻击的问题...而且同样是投掷切挥舞有问题,挥舞切投掷没问题...
发表于 2020-4-8 18:56:51 | 显示全部楼层
我剛才試出你的問題了,我的情況是要先攻擊(投擲)一次才會發生。
原因看來是你沒設定投射物(圖中的Project PID)
 楼主| 发表于 2020-4-9 02:33:29 | 显示全部楼层
novarain 发表于 2020-4-8 18:56
我剛才試出你的問題了,我的情況是要先攻擊(投擲)一次才會發生。
原因看來是你沒設定投射物(圖中的Proj ...

额...可是如果选择投掷物的话,攻击之后就会把刀丢出去,我是想做出可以无限投掷的并且可远程可近战的刀子...
发表于 2020-4-9 04:20:33 | 显示全部楼层
hellsinger 发表于 2020-4-9 02:33
额...可是如果选择投掷物的话,攻击之后就会把刀丢出去,我是想做出可以无限投掷的并且可远程可近战的刀 ...

投擲武器一定得有投射物才不會有近戰攻擊無法使用的問題,你想無限投擲(遠程攻擊)的話不如直接把刀的攻擊距離提高當成用劍氣攻擊算了。
不然就是寫hook script在執行攻擊之後送給玩家另一把刀,然後刪除掉在地上的前一把。

 楼主| 发表于 2020-4-10 13:30:12 | 显示全部楼层
novarain 发表于 2020-4-9 04:20
投擲武器一定得有投射物才不會有近戰攻擊無法使用的問題,你想無限投擲(遠程攻擊)的話不如直接把刀的攻 ...

算了呀...送武器倒是会写,删除丢出去的武器完全不知道怎么搞...
然后我以“手中是否持有这个新武器”作为判断条件写了脚本,但是拿到游戏里没用,是不是也需要注册否则引擎不认识?就像必须在ITEMPID.H里面注册,否则ScriptEditor会报错一样?
发表于 2020-4-10 21:05:22 | 显示全部楼层
hellsinger 发表于 2020-4-10 13:30
算了呀...送武器倒是会写,删除丢出去的武器完全不知道怎么搞...
然后我以“手中是否持有这个新武器”作 ...

如果不要求“漂亮“的話不難,我直接把清除程序hook在Keypress和MouseClick,反正攻擊完不管怎樣一定會點擊或按鍵盤切換鼠標做其他事,那時再清就夠了。拿一般飛刀做例子:


為什麼不把清除程序hook在CombatDamage是因為拿飛刀去投門之類的物體不會被呼叫到,這樣一直丟門就等於有無限把刀在地上了。
另外你新武器的Proto ID仍然是舊的236而不是新的601,所以你要是寫pid == 601之類的判斷當然沒用。如果你要做新武器的話在Proto Manager內用選單建立新proto,不要去手動複製proto檔,不然你就得拿hex editor自己改了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
 楼主| 发表于 2020-4-11 02:31:08 | 显示全部楼层
novarain 发表于 2020-4-10 21:05
如果不要求“漂亮“的話不難,我直接把清除程序hook在Keypress和MouseClick,反正攻擊完不管怎樣一定會點 ...

原来得用选单内建才行,已经可以用了...
还劳烦写了脚本,多谢多谢!
 楼主| 发表于 2020-4-11 10:45:39 | 显示全部楼层
novarain 发表于 2020-4-10 21:05
如果不要求“漂亮“的話不難,我直接把清除程序hook在Keypress和MouseClick,反正攻擊完不管怎樣一定會點 ...

首先再次谢谢你帮忙写的脚本,非常感谢!

我把脚本拆成了两部分,一部分在HS_Afterhitroll里面,另一部分在gl脚本里面,两者之间用人物属性10号(STAT_unused)联系;
---
HS_Afterhitroll里面是:
如果STAT_unused不等于99则给予人物自定武器601,然后设置STAT_unused为98。
---
gl脚本里面是:
如果STAT_unused等于98则清除地面上的自定武器601,然后设置STAT_unused为97。
---
这样的好处是可以即时删除掉落在地面上的601,坏处是使用了一个人物属性,有隐患...而且看上去非常非常蠢...
所以...请问人物属性10号(STAT_unused)在rpmod里面确定是没用的吗?然后有没有办法创造一个独有的且可以在多个脚本里面同时使用的“参数”,这样就不需要依靠STAT_unused了...
发表于 2020-4-11 11:31:20 | 显示全部楼层
現在完全不建議用hs_開頭的那些名稱固定的hook腳本(對它們的支援還留著純粹只是為了兼容舊mod),想用某個hook就用register_hook_proc把在gl腳本某個程序註冊為hook觸發。
你想要在背景不斷跑檢查盡可能即時移除地上刀子的話,原本的gl腳本稍微修改一下就行了。


玩家的STAT_unused屬性從來沒用處,但就算這樣也別拿它來當數值暫存用。
你真的要有一個必須留在存檔內的變數就用set_sfall_global建個新變數(一定要正好8個字元,不能多不能少),然後用get_sfall_global_int/float讀取數值。
不過你今天這種場合根本不需要那些東西,一個單純在腳本中的變數(cleanOnce)就夠了,不會在存檔留下無用內容。
sfall全域變數是很方便,但能不需要就盡可能別用,實際上沒那麼多資料需要保留,絕大多數都是gl腳本載入當下初始化就夠了。

EDIT: 更省工的方式:

這樣腳本就不用一直在背景跑空迴圈。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
 楼主| 发表于 2020-4-12 12:00:05 | 显示全部楼层
ok,等我下来看看!
 楼主| 发表于 2020-4-12 13:20:31 | 显示全部楼层
本帖最后由 hellsinger 于 2020-4-12 13:30 编辑
novarain 发表于 2020-4-11 11:31
現在完全不建議用hs_開頭的那些名稱固定的hook腳本(對它們的支援還留著純粹只是為了兼容舊mod),想用某個 ...

明白了,因为hook_throwing_knife是在每次攻击时自动运行,所以加上set_global_script_repeat(60)就可以启动clean_knife,同时在clean_knife里面加上set_global_script_repeat(0)就可以确保只启动一次清除工作并且让脚本不会一直空转...
我问下禁止这个空转是必要的吗?一直空转有什么坏处吗?比如伤害硬盘之类的?

然后这种集成多个hook的脚本,一个hook里面的参数能作用于别的地方吗?
比如说在第3个脚本里面,我在清除地上武器的同时还想提升攻击者的属性,所以我能在clean_knife的段落里面直接用hook_throwing_knife里面的attacker吗?
或者在第1个脚本里面,我能在hook_clean_knife的段落里面这样做吗?



发表于 2020-4-12 13:51:54 | 显示全部楼层
空轉不會怎樣,就只是效能浪費而已,雖然以這年頭的電腦能力來說這擔憂算是多餘的就是了。
事實上遊戲背景本來就有一堆程序在重覆執行,例如各角色腳本內的critter_p_proc執行頻率就相當高。

你想把一個hook的參數傳給其他程序用,就在腳本一開頭宣告個全域變數把資料放進去,讓所有程序都能取用就好了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Archiver|13号避难所

GMT+8, 2024-3-29 21:55 , Processed in 0.061221 second(s), 15 queries .

快速评论 返回顶部 返回列表