|
擊退是直接寫在傷害計算程序內的,每10點傷害擊退一格,武器有Weapon Knockback的perk則是每5點一格,那部份可以用sfall的hook script(HOOK_COMBATDAMAGE)取消掉。
簡單範例:
- procedure start;
- #include ".\HEADERS\DEFINE.H"
- #include ".\HEADERS\define_extra.h"
- #include ".\headers\sfall.h"
- procedure start begin
- if game_loaded then begin
- register_hook(HOOK_COMBATDAMAGE);
- end else begin
- variable
- target := get_sfall_arg,
- source := get_sfall_arg,
- dmgTarget := get_sfall_arg,
- dmgSource := get_sfall_arg,
- flagsTarget := get_sfall_arg,
- flagsSource := get_sfall_arg,
- weapon := get_sfall_arg,
- knockback := get_sfall_arg;
- knockback := get_sfall_arg;
- knockback := get_sfall_arg;
- knockback := get_sfall_arg;
- // do nothing
- set_sfall_return(dmgTarget);
- set_sfall_return(dmgSource);
- set_sfall_return(flagsTarget);
- set_sfall_return(flagsSource);
- if knockback then begin
- if not(get_proto_data(obj_pid(weapon), PROTO_WP_DMG_TYPE) == DMG_explosion) then begin
- set_sfall_return(0); // no knockback
- end
- end
- end
- end
复制代码
knockback會大於0的先決條件之一是武器傷害為爆炸或攻擊模式是近戰武器(揮砍/刺擊),所以只要判斷不是爆炸傷害那就是近戰武器了。
當然要調整擊退的計算方式或單純設個上限別讓人飛得老遠也行。 |
|