From 361ebbe939ae9fe9b8f88e56405f272d0cf49d4a Mon Sep 17 00:00:00 2001 From: NovaRain Date: Sun, 14 Jul 2019 10:38:17 +0800 Subject: [PATCH] Added PerksList option to gl_partycontrol --- artifacts/config_files/sfall-mods.ini | 3 +++ artifacts/mods/gl_partycontrol.int | Bin 3904 -> 4120 bytes artifacts/mods/gl_partycontrol.ssl | 24 +++++++++++++++--------- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/artifacts/config_files/sfall-mods.ini b/artifacts/config_files/sfall-mods.ini index d466e0fa..9779535f 100644 --- a/artifacts/config_files/sfall-mods.ini +++ b/artifacts/config_files/sfall-mods.ini @@ -39,6 +39,9 @@ MotionScanner=0 Mode=0 ;PIDList=62,89,97,107,160,161 +;Set a comma delimited list of perk IDs for perks to be inherited from the player during the combat control +PerksList=0,73 + ;Choose a notification box to display the name of the controlled critter above the interface bar ;Must be between 5 and (4 + the value of BoxBarCount in ddraw.ini) ;For sfall 4.1.6+ the number for the notification box is set automatically, so just use any value diff --git a/artifacts/mods/gl_partycontrol.int b/artifacts/mods/gl_partycontrol.int index dae6ac02a8c535e3d40ddd278104b6c13b7c505e..4617d653739379f994d0e39036f5394e4e3e5d51 100644 GIT binary patch delta 1479 zcmX>gH$y?7f$0Dv0|SFl122eXQJW}WSYO2e0TK`jMzVm!nHd-uRA3?yn&k%r0|OHS z1A_^K4qd#jwYEgFaLX0G*{N-I(Bj0KMfKM`VCSb5%xQfWB~CAD3(B?3@i<-5O=cwnS6-dK#6k| zSeUWFXaXo2k2IAvm_QuI5d@ZDn=HbiSls)fBAiYTJ)pp2 zU|?WvFlsPwFaV1&Lp{OPVAK=_7Ga0z0ht2j8#RH0g@G9=!vJ%W0$2fagHgk0FpCAE zfKv&|Gn%}BLsXv`YAs8HQ6m#16d2f`VvG%zV6{-Eb96MYOm^UqW@Mcl!y(JaGP#OF z#)p9stb_~VSI!#^EFeDT4G_ryj@ zm&#-dPStvLXizXV7&R;bE9YnsYN~{~n7u)$@eWuN;v7zhbGS_)&fzuz%W=Wd4A&ws zpA*Js0O`LA7K1npt{)=SU?c}+m_rf**SiLZ23J_J;d(at7pEE%x5;EBE^9`%$#Gl? zLfjB5KvsgY0(aTu16=a_&~RdaSi?5?9haUE55#q#z=9}!G+B>ZOpM2*VLvFrGBPkM zgk>lmsmW2?Q-pX$z|H~1Em#N7u1P$yye|+5ndil1EuI1%0fxpDh=X~fCNJYLV&Yve z`4*2pKilM0ylPB*^Cn;7 zRb|{Z`3JAO`ag&~G%i>hpuxe15*!TdlkNB<71<$iz%K@g0|o|Ys)C8zO|IZm=j4E@ s%9y-@&&Pm&TLUjB{W6Mx$z@>cASE<&11p%v4AB6}0Zk^8Kkx+r05R(*hX4Qo delta 1466 zcmbQCa6nF=f$0Dv0|SFl122eXQJN@VSYO5f0TK`jMzVm!nHd-uRA3?yn&k@v0|OHS z1A_^K4KVBp3>e8(0bwzsSGU zADo?;mzSBB&M^5qV;$py&1Fmr7$+;SgfQ`ROs-&YX1q0d4@<3N6DR~3m>P@@F#iAl z|9^vVgEUBlHEnVbYbN83$$MCJ8J#A-VvS^cHra(uS@0A{mVvQB2%?T{-sB24L&j~B zSFr_5mSC5xPXo)dHV8H7gIMf7Ad-O@#s{$$FuFG|Ff`bJWl|cfo6^B7<_2Lf&DtOY zrkSBMOM_4&J6MFV!Kje|%wlRV1ks$+KqLbL$n~J;X)vC=ft{WAR)a)?euET9j(ykU zb6gS}5XZ9Ln*4;_K#AiTNQQy2!Ds>~LXR|+HJCtL%V7YPVV!Kop()SWAPknj0v2P0 z+L6;#0p_zzj^mVNWS(5ZDdWR&04&4>_asa)#Ic@WS;j^th?5u?!F*1LcR5)aSU`ME zFv-9=c^jv^IV)7I4t}BeYN~|jVPI$JV`)easnG$J=ZF* zHc$w8n##a3o(-SDG#Avp|G+$uJHg47>k=f&8`p!y9U2@!mV((3cS1v( z0m5T#5Jm~l$qTvV?YJj^)q|2Q*i3FasF_c|;>-=k5SMXJXxI-*hKvjh3t`!XyKM45 z?kP4r1yH3%5a08NL5u*4g7X+8l|p4*5VAZjlh5%K@bGIira&dPP4?n7V&eHTxsF$# zQET!#UKJ^R4X{BB&=_WDuz_t)ey zK2=7c$#eMR6QdyVP*YeNpi#x=g&b9&lmb= diff --git a/artifacts/mods/gl_partycontrol.ssl b/artifacts/mods/gl_partycontrol.ssl index 29f8225e..addad920 100644 --- a/artifacts/mods/gl_partycontrol.ssl +++ b/artifacts/mods/gl_partycontrol.ssl @@ -21,11 +21,10 @@ variable controlMode, noCheckArray, - pidList, + pidList, perksList, lightInt, lightDist, npcControl, displayName, displayNameColor, isShowTag, - inControl := false, - hasGeckoSkinning := false; + inControl := false; procedure AllowControl(variable pid) begin @@ -37,10 +36,9 @@ procedure combatturn_handler begin variable status := get_sfall_arg, critter := get_sfall_arg, - //arg3 := get_sfall_arg, - pid; + pid, perkID, level; - //display_msg("Combat Turn: " + status + ", by " + obj_name(critter) + ", arg3: " + arg3); + //display_msg("Combat Turn: " + status + ", by " + obj_name(critter) + ", arg3: " + get_sfall_arg); if npcControl then begin if lightInt then lightInt := round((lightInt / 65536.0) * 100); // calc percent of intensity obj_set_light_level(npcControl, lightInt, lightDist); // restore light for prev. controlled NPC @@ -49,14 +47,20 @@ procedure combatturn_handler begin pid := obj_pid(critter); if (status == 1 and (AllowControl(pid) or controlMode == 1)) then begin set_dude_obj(critter); + //display_msg("Take control of: " + obj_name(critter)); if (critter != real_dude_obj) then begin if not(npcControl) then obj_set_light_level(real_dude_obj, 0, 0); // dude off light npcControl := critter; + // set perks (only work with 4.1.8+) + foreach (perkID in perksList) begin + level := has_trait(TRAIT_PERK, real_dude_obj, perkID); + if (level) then begin + critter_add_trait(critter, TRAIT_PERK, perkID, level); + end + end lightDist := get_object_data(critter, OBJ_DATA_LIGHT_DISTANCE); lightInt := get_object_data(critter, OBJ_DATA_LIGHT_INTENSITY); obj_set_light_level(critter, 100, 4); - - if hasGeckoSkinning then critter_add_trait(critter, TRAIT_PERK, PERK_gecko_skinning_perk, 1); inControl := true; end else if npcControl then begin obj_set_light_level(dude_obj, 100, 4); // set dude default light @@ -87,7 +91,6 @@ procedure combatturn_handler begin end procedure gamemodechange_handler begin - if not(hasGeckoSkinning) then hasGeckoSkinning := has_trait(TRAIT_PERK, real_dude_obj, PERK_gecko_skinning_perk); if (inControl and not(get_game_mode BWAND COMBAT)) then begin inControl := false; npcControl := 0; @@ -146,6 +149,9 @@ procedure start begin fix_array(pidList); noCheckArray := (len_array(pidList) == 0); + perksList := GetConfigListInt("CombatControl", "PerksList"); + fix_array(perksList); + register_hook_proc(HOOK_COMBATTURN, combatturn_handler); register_hook_proc(HOOK_GAMEMODECHANGE, gamemodechange_handler); register_hook_proc(HOOK_INVENTORYMOVE, inventorymove_handler);