From ce338fa5d0173d4c10a389ab246f00b1bd8b983c Mon Sep 17 00:00:00 2001 From: NovaRain Date: Sun, 16 Dec 2018 19:37:06 +0800 Subject: [PATCH] Added a procedure to search for alternative weapons to NPC armor appearance mod (#222) --- artifacts/mods/gl_npcarmor.int | Bin 3650 -> 4006 bytes artifacts/mods/gl_npcarmor.ssl | 23 ++++++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/artifacts/mods/gl_npcarmor.int b/artifacts/mods/gl_npcarmor.int index 9272cd4c4f288803f9dafba4613c687b4becb827..03589cca6e284cbd7425deddda876daa22cb1cb9 100644 GIT binary patch delta 1051 zcmX>kvrJx~f$0Dv0|SFl122eXIx|r~ww{B5fq{(y1u%Vpa_yirlmd%0GcYiOKn0)_ zOBe$K14ujzDgdQee=#sHfGn(o3P34#5h!B{1A`ls38pw+fGGxs6;K*VarQwO2cR^R z;+g|x9GZA5RY<5fHL)l;BR(;wB)&W~u^>Nhvn^vYBOBM829^fx$sbt7m{{y4-(xao zESfCFtjlTFzyb;e7Q4wl%=V0zCigI_NwH{wgcw*GjKDNQgK>j2h{Yl>`3!SExM6Y(t1G7!#6$*$$!sik9#AvDVa>qM$O$rsfw935 zM6>+?kqnFtMhyla7TX>W3Fe;!vzQx<8}vaewx-DqY~qZJlQ^aFpsJWaCjbBc|36F( z0|Q6|6xa<$4Y$C${y?3=441J4i8C-m?1$@sxQ@BO2+e&)4J?xtIPE6$vFW&Rh=8>+ zG#EhwgT1XmqCvkw3M>lp0yv1+mmrD4tOW%i*cq_o7}*rIyszO(gbQ8IM%@7Vgd;}j&qQd4)-l1*jnZW)&{A` z3Y=O@oMn?|u&Xd}`b^%(ZU*9gV^0v{YH8R%0hDa-G?g_#P2y^qoWmi(#KknZjYH0X z%K^z@h_HvI6|k%;Jb+;GOfZLY6;0m9u0ENYb21NqUt+$?uq?8HFY*FpEr9fPpgNS8ST9UIz~afcZ!#CFKI4+fR;<2^Et5M~T^ac%pJNr{VPIgr05a|W z|Ns9dUt_hKT)@IJ*@|69gY5;#3I>J-qXuaZi!G`_qCvkw3dCk$go{>8?qio>Vp}me zjzd+Dv4IsV&D3BBqS;)?^0`87B6q$#EQZlRLQ7m^g$c z|KU(!Vt+B&gG+s~CnrBhB#JXZj8mau{{&DJ-)SmqFlo>S8PBOO`2wc|6UV&CuQ=tH zIPOg5;*tST8eDQroP3i#xOVaIX*H%m{KC0wG9S0BEOS#5NGk)xPb^TL1Xzr9vIn;h z6W6xM)3_U$xQr%C@I)~2SWGVBX<_1#nEZpMfr)#{oT__QX!;q7DM iJutb3&xeV3!Q@kXVNARdla=^0Sa>=bSSDZKkN^P5Mv6B8 diff --git a/artifacts/mods/gl_npcarmor.ssl b/artifacts/mods/gl_npcarmor.ssl index e05147db..01ac9a87 100644 --- a/artifacts/mods/gl_npcarmor.ssl +++ b/artifacts/mods/gl_npcarmor.ssl @@ -49,19 +49,33 @@ procedure check_weapon_change(variable critter, variable item, variable isWield) if isWield then begin newWeaponAnim := get_proto_data(obj_pid(item), PROTO_WP_ANIM); weaponAnimList := string_split(npc["WeaponAnims"], ","); - if newWeaponAnim then begin + if newWeaponAnim then begin // anim code 0 - none/unarmed foreach (i in weaponAnimList) begin if (newWeaponAnim == atoi(i)) then return -1; end return 0; - end else begin // anim code 0 - none/unarmed - return -1; end end end return -1; end +procedure search_alt_weapon(variable critter) begin + variable obj, res, i := 0; + obj := inven_ptr(critter, 0); + while (obj) do begin + if (obj_item_subtype(obj) == item_type_weapon) then begin + res := check_weapon_change(critter, obj, 1); + if (res == -1) then begin + wield_obj_critter(critter, obj); + break; + end + end + i++; + obj := inven_ptr(critter, i); + end +end + // for NPCs when they change armor/weapon themselves procedure invenwield_handler begin variable critter, item, fid, slot, isWorn, canWield; @@ -80,6 +94,9 @@ procedure invenwield_handler begin if (critter and item and slot == INVEN_TYPE_RIGHT_HAND) then begin canWield := check_weapon_change(critter, item, isWorn); set_sfall_return(canWield); + if (canWield != -1) then begin + call search_alt_weapon(critter); + end end end