From aa91e9fad47711f3512745902d7d9460d982276d Mon Sep 17 00:00:00 2001 From: NovaRain Date: Sat, 16 Mar 2019 08:47:37 +0800 Subject: [PATCH] Fixed range for object ID. Added checks for FID in NPC armor appearance mod. Minor edits to documents. --- artifacts/ddraw.ini | 2 +- artifacts/mods/gl_npcarmor.int | Bin 4280 -> 4408 bytes artifacts/mods/gl_npcarmor.ssl | 13 +++++++++++-- artifacts/scripting/sfall function notes.txt | 2 +- sfall/Modules/Objects.cpp | 4 +++- sfall/Modules/Perks.cpp | 2 +- sfall/Modules/Scripting/Handlers/Utils.cpp | 16 +++++++++------- 7 files changed, 26 insertions(+), 13 deletions(-) diff --git a/artifacts/ddraw.ini b/artifacts/ddraw.ini index 45ca8ca0..f19aaad8 100644 --- a/artifacts/ddraw.ini +++ b/artifacts/ddraw.ini @@ -353,8 +353,8 @@ PlayIdleAnimOnReload=0 CorpseLineOfFireFix=0 ;Changes the timer (in days) for deleting corpses on a map after you leave (valid range: 0..13) -;Default is 6. Set to 0 for a 12-hour timer ;The corpses of critters with 'Ages' flag or on maps with 'dead_bodies_age=No' set in maps.txt will not disappear +;Default is 6. Set to 0 for a 12-hour timer CorpseDeleteTime=6 ;Set a number of milliseconds to idle each input loop diff --git a/artifacts/mods/gl_npcarmor.int b/artifacts/mods/gl_npcarmor.int index bc267a74304facd16a09c2879d40ae6c1b72cf1b..54d07d490721a0b78b74305f6062dca61b5e57c9 100644 GIT binary patch delta 1000 zcmdm?xI;;xf$0Dv0|SFl122eX=9?&BSZ~Jw0Z|YNMlyrMnHd-u3Sc4-nq>(C0|Q9B z4Z??!Y)K3Z3?Rd2!9*Z5`x6MwumMU#DJ}^JLyO@EgaISD6`-s;P#Q|{=uLd}meFYP z4aVy#Dy~IE`9)R=egV!3jzzioMGCq3DOL)(nZ?DKdFcvno-TR}lh-n(v+(FOuuQ(d zDZ#|jGkF7x858q?$yv<0oIMRJpa5X$nY@76j)_HK@&jgd$qJAV18aj3m}Y1&Zjc7C zSmGutu=F!}P2Rv_&S)|D1&b%6!DJ&=Jtj7}$w{ofjQ=KYV0C5gXkeMVk3)=!&1fBi><8J!$kbE@a!|v5 zh*gac$1*k;g7{n=lLffUn7BD6dvMvAfJ7LWAu`+$r!hAeHI+cT!@%5N)c6#nhMNP) z9}5H|CNJR9G2jtHwGgC`M+`)QEW<6!cxkc~w;U4>%VYsA z^~sIglX(Oc8dD&_&$D5&0*?a|qtN6e9#_USlUMLGF!5?k*5Z}nV-y1Uk6{alWK@|P z!mG!`uQ$1cw}pwHZ!#BOBV*U(9zHoHK98;Gw~RcK zZ!lh;e3dDcg?n8C%VY&^k;xZWSeRJSCPy%vGtQbkfmxR`t$_vPJ(je|$C&Myn14-X zV^L=enykkn&S){&jisMaWpV_w855h(WIk3;My|;bta?nWKPGpu`ZC^_e2vwWF=?_4 znY~6^g%4B3`>I$h{wRtVB8=LVzFJC ze1}b$kzo?MF=NDJ6LxpT8Ix<+?HNlZ?_saf;J5%%!@$sB1X0al&>+#E-yj7R1=$KV zgTrrf9EU7p-6VGL$&)!`g*f(s<(V3c4lw@z|Nno3$>b{>YLk`NgxolHfTa)ye!*rS zrx21TGsqZF?7_Uk=`cBoQ=2glWZhCubtcXolh1LAGj5ywjMIyYtD|B61W-iZne4zN z%V;$@j?0XRt7GysE<2{ir<1sJCUbF!n1CF?Jq@O^sjR^S5=z|DKr-O)I{{|F!--pD zat*gUW68lXr2;F>$v{j^k3F%*ZpDM_@r?3M7Ph3??t&abRM2Gx-sZE2GY2 z4c-POo)wc<@yhTqya79G3z+;j`3kQd6W_YYEPO3Ye0`I<_!=3xCiC#iG4Zxc*5TIz znGnIRA|S8;>JB52Hb$PwJ^YP~W|R2@d>O?i#|VT;@%KT}69W@GYGF#x2*8YC;rrLX IGKot90In;*id > UniqueID::Start || obj == fo::var::obj_dude) return obj->id; // dude id = 18000 + long id = obj->id; + if (id > UniqueID::Start || obj == fo::var::obj_dude || (id >= 18000 && id < 83536)) return id; // 65535 maximum possible number of prototypes if ((DWORD)uniqueID >= UniqueID::End) uniqueID = UniqueID::Start; obj->id = ++uniqueID; diff --git a/sfall/Modules/Perks.cpp b/sfall/Modules/Perks.cpp index f55ac363..ab479dd1 100644 --- a/sfall/Modules/Perks.cpp +++ b/sfall/Modules/Perks.cpp @@ -71,7 +71,7 @@ struct PerkInfoExt { static std::vector extPerks; struct FakePerk { - int Level; // current level (max 99) + int Level; // current level (max 100) int Image; char Name[maxNameLen]; char Desc[maxDescLen]; diff --git a/sfall/Modules/Scripting/Handlers/Utils.cpp b/sfall/Modules/Scripting/Handlers/Utils.cpp index 416897b2..7dd9c063 100644 --- a/sfall/Modules/Scripting/Handlers/Utils.cpp +++ b/sfall/Modules/Scripting/Handlers/Utils.cpp @@ -92,29 +92,31 @@ void sf_typeof(OpcodeContext& ctx) { static int _stdcall StringSplit(const char* str, const char* split) { int id; - if (strlen(split) == 0) { - id = TempArray(strlen(str), 4); - for (DWORD i = 0; i < strlen(str); i++) { + size_t count, splitLen = strlen(split); + if (!splitLen) { + count = strlen(str); + id = TempArray(count, 0); + for (DWORD i = 0; i < count; i++) { arrays[id].val[i].set(&str[i], 1); } } else { - int count = 1; + count = 1; const char *ptr = str, *newptr; while (true) { newptr = strstr(ptr, split); if (!newptr) break; count++; - ptr = newptr + strlen(split); + ptr = newptr + splitLen; } id = TempArray(count, 0); ptr = str; count = 0; while (true) { newptr = strstr(ptr, split); - int len = newptr ? newptr - ptr : strlen(ptr); + int len = (newptr) ? newptr - ptr : strlen(ptr); arrays[id].val[count++].set(ptr, len); if (!newptr) break; - ptr = newptr + strlen(split); + ptr = newptr + splitLen; } } return id;