From 818c2eb6b25847558af023f9f7681e3c50efa283 Mon Sep 17 00:00:00 2001 From: NovaRain Date: Wed, 27 Mar 2024 11:20:36 +0800 Subject: [PATCH] Edits to gl_partycontrol and main.h * it seems no need to "fix" Gecko Skinning perk anymore. * use array to hold perk levels instead of calling has_trait twice. --- .../gl_highlighting_lite.int | Bin 4956 -> 4968 bytes .../example_mods/ItemHighlight_Lite/main.h | 19 +++++++-------- .../gl_partycontrol_lite.int | Bin 5530 -> 5620 bytes .../gl_partycontrol_lite.ssl | 22 +++++++++++------- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/artifacts/example_mods/ItemHighlight_Lite/gl_highlighting_lite.int b/artifacts/example_mods/ItemHighlight_Lite/gl_highlighting_lite.int index 64d2b54f5dd29a54a3c78421192b44184a71e876..b14045413ce37accb36baf84e0287576cb5b1530 100644 GIT binary patch delta 1213 zcmcbk_Cjq!Vf_OJ1_ovZ1_loX6u_3mz`(%7z`ziKBFw<{4Z>%HP;ipnje&uIk%57c z4=w~|u&;oM%YeCXfX!pyt^PQ#w-X8 zBl%}QSd4WL8bvl00jX{gVAI^PKn8nSgjd7Cd;u&futrouz5?~0n0Nr7=dYq2IB^45R2{D zJPo`Jk_}o7nhiV+GLtW`DKe@}{=`{FAMafHeSf!GXe4MGr$IPDrF8uS~aK%$&Blj}GX zCR=do3*Q3q8JHV{8eF037EG?;py2hItj8&ANS1IlaLFqFg`?q+Cd#22FX!WFG-1Ibn{* z6sWp;O#)ygEDdImBqMNY@)`kc$uAAOU~vX8$t%YeCXfgCgKUUxo%i*Xv5RtA$GLcjz>GB7Yg4TSI*7z8>tPhwoo%-Av6iq)0z(BuYI zE4~9D@3S-*Lg>kUY%-Hyuv#iRfceY~Mh6)G|NsBL!MH&mEW!j50eP#zaIy!Rx8wyB zQHBQN25FE8+rG(b*i<+`Oa`U~!^wBp6d9!^|6{9V?3!G|9>m1{ZSn>71R;)ZU=@rF zMiApUiY7a8II=$hiE>Pv+{K~DehJLpH+d6BsH_`^&A`?m1hItEs6nDZzd;Hl%4smU zi$h_u3#Y#DIS`+Lxk0GG6{>E^x3 zfeXavZGrfjfuS)A#GgEkH=MC#@;hEhM!v~%!V*&aVIW}!ByA9d{05V)_!I@@z_K7u zg3}S-kI6ZFnvBmTPvf&@yfc}LUq*)S1Jnkt2BC%>Am#jG5D|Wn$z1%h(i#vR11DVG z4N75y+#{&Zcxmz;L48K1$!`Sp84V`O2&pngOm-5| tXKb2WB&5l>X7U`NOi34r|Abw@W`aBh_JXj=WI16;Mki1pPCmmg0syfN3I+fG diff --git a/artifacts/example_mods/ItemHighlight_Lite/main.h b/artifacts/example_mods/ItemHighlight_Lite/main.h index ad8a92dc..73c24758 100644 --- a/artifacts/example_mods/ItemHighlight_Lite/main.h +++ b/artifacts/example_mods/ItemHighlight_Lite/main.h @@ -18,45 +18,46 @@ variable translationIni; // Gets the integer value from the specified ini procedure GetIniConfig(variable section, variable key, variable def, variable inifile) begin variable val := get_ini_setting(inifile + "|" + section + "|" + key); - if val == -1 then val := def; + if (val == -1) then return def; return val; end // Gets the string value from the specified ini procedure GetIniConfigStr(variable section, variable key, variable def, variable inifile) begin variable val := get_ini_string(inifile + "|" + section + "|" + key); - if val == -1 orElse val == "" then val := def; + if (val == -1 orElse val == "") then return def; return val; end // Gets the integer value from sfall-mods.ini procedure GetConfig(variable section, variable key, variable def) begin variable val := get_ini_setting(ini + "|" + section + "|" + key); - if val == -1 then val := def; + if (val == -1) then return def; return val; end // Gets the string value from sfall-mods.ini procedure GetConfigStr(variable section, variable key, variable def) begin variable val := get_ini_string(ini + "|" + section + "|" + key); - if val == -1 orElse val == "" then val := def; + if (val == -1 orElse val == "") then return def; return val; end // Gets the value from sfall-mods.ini as a temp array of strings procedure GetConfigList(variable section, variable key) begin variable val := get_ini_string(ini + "|" + section + "|" + key); - if val == -1 orElse val == "" then return []; + if (val == -1 orElse val == "") then return []; return string_split(val, ","); end // Gets the value from sfall-mods.ini as a temp array of ints procedure GetConfigListInt(variable section, variable key) begin - variable arr, i, item; + variable arr, len, i, item; arr := GetConfigList(section, key); - for (i := 0; i < len_array(arr); i++) begin + len = len_array(arr); + for (i := 0; i < len; i++) begin arr[i] := atoi(arr[i]); end return arr; @@ -65,9 +66,7 @@ end // Translates given string using Translations.ini procedure Translate(variable id, variable def) begin variable str := get_ini_string(translationIni + "|Sfall|" + id); - if (str == 0 orElse (strlen(str) == 0)) then begin - str := def; - end + if (str == 0 orElse strlen(str) == 0) then return def; return str; end diff --git a/artifacts/example_mods/PartyControl_Lite/gl_partycontrol_lite.int b/artifacts/example_mods/PartyControl_Lite/gl_partycontrol_lite.int index 09d964b3d4f1874acca2b14a19ad10e794ff4a56..fea6f78f848f2d526a8c1dc77aaf8c974a07e740 100644 GIT binary patch delta 2148 zcmbQG{Y6`#f$0Dv0|SFl122eX>6s{CSpS9r0wf?5jAQ|cvoJ6)Xuw1uG;09^0|PSy z1A_^K4X9|A`qI#4?;6cg3?e*I1kEL1Eryq@FOVW2$U_#O$ z4H98XnXJQ>F?j$*VZj`PmzULGoNyAd-Q7@&gWS#$S_pIMo>^ zO*Y|FWn48mic?g2om@lP*}Exj}gH4lY~v zED(=7X!0K}d&ZKGKj4*Q?*YrRP2y8$SX46sDTX7bj~mV6pAiQWnhgg4Mq*0!7NsYM*dS!o)I)q;08g>VQnyi zn#2edfdm^Ycd<4YH8MfcFayXlvLNeVnF{KAzJHL!BH%N50>2ECfX?J~{F%mFkbn}n z0+qZ1b_qOs1a@JG4=({(Wwr)ku%FVJ${_X%wt;nW!6H_WXL6T-DO8lbK?ss81U)8S z5KygWhXxd5gHgj0us)6kp{7cRNet`_LXCI8qKsgY6XHhUFo+uk&w)kZZWKHNsdE@$ zVZ#D7ofS%hi%tgi23Cmqg5Na225`ch3bybrSPT-ZFbkO`&k;0cd@}ihpmse8u@6rd z(C8I90ydkq0T#V5heB*ajzngN6B#(6(F}`2&dCizY%D?s4J?z-@rzAfAjHEY95#8K zkcNnG2$mRnC1fZFNmHQs0GF7;^Cs&EtMWtR8=5iLCMO8%3&wz*2MSNHN)fKf3xvf* zV;c51G8|xJWMEhb%l;xxlg|iGu@SWaYhZ3Lf<&qas8E9zp^!2IRL#OPi3%Xf08xR- kb40Q=A(0EWP_zl6qVWmXTn4z#Ig<@UH5upF delta 2032 zcmeyOJxg1lf$0Dv0|SFl122eXshTKYSbv290wf?5jAQ|cvoJ6)Xuw1uG;0V00|PSy z1A_^K4X!p>{bv~JwpP70VBCV3PG+cfQdk8?k!M@ zYao0W$s+}2O@h);N>~KSSOcY@lyC=>aRf|jgGmq}0yF3qh=;%;zaVVJ37fMR1sON@ zGWj!cG%$lgklkwXD;8HqtH}neQhXo*29^dx2tD~8tGnSEFq;`7#<~N_GdjTd|NsC0 z4aN=nU=gMUBQVX}U^w{(YqVqnm%jNvoPQ<@aH*@ZL)^mP3D(2dSP7=VJm%+(RUjUh(_{xOO~$gx zSzOBEEiltSG7O9m-CWBiFX1wt{E^Fo-3%noEjQVK+n&*3asjt8)N; z1R=?*Gueq(U3?zc7}f?MNEkzX&pNq*S5mmIfwy5lSe^?Sj@*;i@R~E~O@6|w$*44$ zk57_44lK_)S&vU$p1VPK0>~{PVA7?j3@lgBQ~{>BCYSK3GO|vd#V5f@LgJ>dT*cC0)W`%$qzo{Jz;X-J;d~b$k<0&P z@&|qyCjK*%`2;eJIU#-&D1k@{lzBqGKjT;YG9q5u$U59 zGx?Q(DO8lLK?oB40xu>T2&&e@(mg0$F9GXgZxCv#gqQ?M^^JGHqKsgY1L8)ZKM*$x z=7B}wZWPRc)DjGg&=_EbrUn)$4K4v0*c(_O<_k{K02{yob1K-vyI?U$=7L$cV)7qB zW5%w@2144NTxb!;1uCJydN3jmDvB0wLP+t(36HnQ`-GHO1TQqOOx6<+oBT_Nhe_zq zWDa2s5usmLLf%E#P_O`OJSd#O<(ja|6m;*M21gf s8^k1#q{z0(-$b%Cn?P&^xLu+e5EW3n7+~g#I!*2p)nsg%yhYRj001$gjQ{`u diff --git a/artifacts/example_mods/PartyControl_Lite/gl_partycontrol_lite.ssl b/artifacts/example_mods/PartyControl_Lite/gl_partycontrol_lite.ssl index 06310dd4..6f655f4f 100644 --- a/artifacts/example_mods/PartyControl_Lite/gl_partycontrol_lite.ssl +++ b/artifacts/example_mods/PartyControl_Lite/gl_partycontrol_lite.ssl @@ -40,7 +40,7 @@ procedure SetGlobalVar_Handler; variable controlMode, - pidList, perksList, + pidList, perksList, addedPerkLevels, lightInt, lightDist, npcControl, displayName, displayNameColor, isShowTag, inControl := false, @@ -64,7 +64,7 @@ procedure CombatTurn_Handler begin variable status := get_sfall_arg, critter := get_sfall_arg, - pid, perkID, level; + pid, i, perkID, level; DEBUGMSG("Combat Turn: " + status + ", by " + obj_name(critter) + "/" + critter + ", arg3: " + get_sfall_arg) @@ -102,9 +102,14 @@ procedure CombatTurn_Handler begin lightInt := get_object_data(critter, OBJ_DATA_LIGHT_INTENSITY); // set perks (only work with 4.1.8+) - foreach (perkID in perksList) begin + foreach (i: perkID in perksList) begin + addedPerkLevels[i] := 0; + level := has_trait(TRAIT_PERK, real_dude_obj, perkID); - if (level) then critter_add_trait(critter, TRAIT_PERK, perkID, level); + if (level) then begin + addedPerkLevels[i] := level; + critter_add_trait(critter, TRAIT_PERK, perkID, level); + end end // special handling if dude has Jinxed trait/perk if (has_trait(TRAIT_TRAIT, real_dude_obj, TRAIT_jinxed) or has_trait(TRAIT_PERK, real_dude_obj, PERK_jinxed_perk)) then begin @@ -145,8 +150,8 @@ procedure CombatTurn_Handler begin // remove perks before switching control (only work with 4.1.8+) if (dude_obj != real_dude_obj) then begin DEBUGMSG("Remove perks after NPC control.") - foreach (perkID in perksList) begin - level := has_trait(TRAIT_PERK, real_dude_obj, perkID); + foreach (i: perkID in perksList) begin + level := addedPerkLevels[i]; //has_trait(TRAIT_PERK, real_dude_obj, perkID); if (level) then critter_rm_trait(critter, TRAIT_PERK, perkID, level); end // special handling for Jinxed @@ -230,9 +235,6 @@ procedure start begin displayNameColor := GetConfig("CombatControl", "DisplayNameColor", 0); end - set_perk_ranks(PERK_gecko_skinning_perk, 1); - set_perk_level(PERK_gecko_skinning_perk, 999); // prevent it from appearing in the perk selection window - pidList := GetConfigListInt("CombatControl", "PIDList"); if (len_array(pidList) > 0) then fix_array(pidList); @@ -242,6 +244,8 @@ procedure start begin perksList := GetConfigListInt("CombatControl", "PerksList"); fix_array(perksList); + addedPerkLevels := create_array_list(len_array(perksList)); + register_hook_proc(HOOK_COMBATTURN, CombatTurn_Handler); register_hook_proc(HOOK_GAMEMODECHANGE, GameModeChange_Handler); register_hook_proc(HOOK_INVENTORYMOVE, InventoryMove_Handler);