From 99503f69b7ec7e19e2b087612e9ead25813538c1 Mon Sep 17 00:00:00 2001 From: Eddoursul Date: Tue, 13 Feb 2024 18:09:37 +0100 Subject: [PATCH] Reworked lockpicking and pickpocketing bonuses to work without SKSE --- Lockpicking perk update.esp | Bin 0 -> 4976 bytes .../PRKF__00E_LockpickingBonusPe_030020DA.pex | Bin 0 -> 737 bytes .../PRKF__00E_LockpickingReqPerk_030039BA.pex | Bin 2573 -> 2838 bytes scripts/_00E_ContainerBonusControl.pex | Bin 0 -> 8427 bytes scripts/_00E_ContainerController.pex | Bin 10289 -> 0 bytes scripts/_00E_HiddenSlotContainer.pex | Bin 0 -> 761 bytes scripts/scriptarchiveorder.txt | 5 +- .../PRKF__00E_LockpickingBonusPe_030020DA.psc | 15 ++ .../PRKF__00E_LockpickingReqPerk_030039BA.psc | 19 +- ...ler.psc => _00E_ContainerBonusControl.psc} | 185 +++++------------- source/scripts/_00E_HiddenSlotContainer.psc | 16 ++ 11 files changed, 94 insertions(+), 146 deletions(-) create mode 100644 Lockpicking perk update.esp create mode 100644 scripts/PRKF__00E_LockpickingBonusPe_030020DA.pex create mode 100644 scripts/_00E_ContainerBonusControl.pex delete mode 100644 scripts/_00E_ContainerController.pex create mode 100644 scripts/_00E_HiddenSlotContainer.pex create mode 100644 source/scripts/PRKF__00E_LockpickingBonusPe_030020DA.psc rename source/scripts/{_00E_ContainerController.psc => _00E_ContainerBonusControl.psc} (70%) create mode 100644 source/scripts/_00E_HiddenSlotContainer.psc diff --git a/Lockpicking perk update.esp b/Lockpicking perk update.esp new file mode 100644 index 0000000000000000000000000000000000000000..6d8ef2877d3b487e4cf28bd2f54d051b69b32cc5 GIT binary patch literal 4976 zcmcInc|cP~6W=795>Px4umYl3QNeJicw!(4C?td=h$u7!@(6*DK=L?k6%Q0tybubM z%c!*~9#q6CUU(p_NEJi{JgM~r`Luu)M817_;Sja>N4tL{Z}7L}<3XmkeE$CC$`R4z{saKq!};s{$r5dmma9#yAT z5B}OGQYb)?&%Cw(bg2-L3nUgc77UqOBtua|YQaTiaxtR#gv>$~Z?Og-z%AT3KI|eQ zw8)Fa!**m+@O`m)1^%cLXs@Aq!nn|B3u#jTpF*MY8C*VBf`~<-s8@))Kq}SQ0ZfA@O_TgM*QdA(8B66tN%Y{WFgKOPSx&fd-CLQgH|d=8@sPeFHmJO>9~~ z#rR#o-{=Gl;5T(}eoRCtj*j>@2x@`%pnHh(-SfFEa2H$VJG%?l>%9 z-$N&|*sgqxWKY0i^D32dHGnqG9$*2xQXhc0`dr^-n@0E;zi(ibB6VYqR9G3t(8(#s zk=SU>;T5evUz3#DM)clp(-PsL)?8Sc+(F*nLhwSqn``X&BeYum) z3Z3(=Y-8i((T!OtVJVsD4bH|N3-@VBRvRQc=P&fzU~RoLz2jS;r+2G#_RcLQjs$9s z&#Pk!(=&!FJh-H);*!0M-AlKnpyRZ^_q5^Zo2%F8C{Id$qbn(|pIv&yc(5tNW6`hc z?^c+PpY`a@y5?5mxkZojY8DpxZ!HYkW~z1ceb;{T86`SqX{pL}31OQOh_13QDs!9o zL?%USMPJ04e`Y~P0^{-mA!p}uo3PATS8kwLld9fco=imTj2L6~7C*WtG_VQJq~Ewg zOV>}^&$Z9p-BAH{opP!sZ7F6?5N8ax@~Nr5o0vas+vV?e@QR9=ZTU7)b!)?Z8)dTm z{7WrH_wZ*!r+Kq^Wyzwgzf`5AkMucMy8X4mH>byL=lLGUSUO|utt&4`x8r6h*|n9S zKZnh3nsZ{Fl|V9H>qGr%%ZNilCJrAHD!%AVr`zhtBc8>b1Aj* zq60^N&c5@;qZ@NQDl;T;AulG}lm@@BY^g!l?BCQeowLlb&1i|WU@b>2xgi&Oe+ zT7BgzXHB+USVijFgna>_#S1c6)9=r3Gb%_5yK7$?m)a4i>EwO1c)yAL;)?j%9B12K zl7e4N2xIZ~C~bY2~-gx z=pAo%wq&oPtbbg4Z%g${zp#wTO!^M*OVw@lTWgw1@4bv#_V>$7JI=V8V!yPrk1kC& zL3am~XSW{P8q&D^`BkUmc2(c)4V?1V-9+oqaicrU)}M$cXX(yk|KOBVUBooIc-Jud z2mL6Q)4P*{R=x<;$#vQJtRk+E^xi*{4{{FMIuU~$Ee|HS6`@Wk~5DLi`%EH zJGd^kP|I#+24a@gbbAG1FR{sI2Dzn8`$e{K_KNS_v|D2gqE|GO?X(^GyuH9|=+cMO zDf2?pwc8S|E$e>$v~`2jKzC+*E5G`QOgYD_wOns*$GJ5(t2$>DSFJhJMm@*4UYz@I z#q#NS9_wFukj@2?qW=hEMP9#Sbg!MH3?v1#7I>Jo>RIwh0j~=9^PZl(+;XgV%h6`1 zKmU*%&TouBmnU-DA6^2Yjk}XN4jP|~o>5VkXQ~%fve&R}#;&g(M0`E>X?|GpMtMW% zg*T}iH^0AKUdM{R_O%(RcfRdjNa#fKa&vusXVb@0RLi@jWl5aLdIR&O#%u3l4?K7G zyeMxE(5j1!`aN^UIo%>J(}vL_idv5A4x4?3+||7AuirZbsAU#;!3G!4$`oMdNOpar z)Ha&8rz798KKy=a#FKVf+Abnlw>fcK-m43%yWUQ1AMsUP(gDNe(blUEJXw44>FHmZ z5}l=YZpS}-_cr%_&b(5G?~T3w_MWV{Q%diqY8LoV^-tpbg+h>Z2*w_Cp z2>@>&?g!-xHvbi_V6V+I8tnd}1p?##) zG*?4?Ul6wnby3(aE({^nFK7hRg1!C@hhkdl!@v#2iZvSShseN?0H|=H8Z7z}nBY{n zt^u0|yiXaa1pu4Q@xTB*Wgj-zS0{ebfW%j~8~sj+gG8|rdAKU|qX>BFTLCu5gTYs| zG#^9x6bA~$VU`OOS}_Sfcvp!)q2Tl6Fc}oE4dJsXj(i>r#t>>`q#TB$I2gg1UC+@1 zqdxud!2#Hp>a$8`@L?Jwaul;k5doct%iMxW)qZsoL?C=T_*n=dRB*$^5_NDrn5+RN ze9qiie5L@iTxB$_wFPP=e&I=AZ6g4LFGLRk47osrr753+HFV~n-yvJ5^1%YSC0Z<3 z<+1{H#avgoMNh9rAP}H`=p?L>!`4W^K$i$tFpMjYMzz3 zCg5P)_(bO;@If6mJy;d^LzNf`?|pkgpFpX)jy{0u3ELRg6{woK!wC9#^q~q=FITw! zGpa{}cK@zcy@=_evl%=B(13pq8Y+5NXyZw9RxMI*f%ERU9o1ixeoj$+O0bKvH&u?p z;K%y+&$wK5tFjSQs@PL#REQij>^~Q519d?M!11|Y8;BklY@mr}7C8Yk^8f!GdYcZ}te?kF(>B4Tffv69{8fsE~u>tr$Ax~<6 literal 0 HcmV?d00001 diff --git a/scripts/PRKF__00E_LockpickingBonusPe_030020DA.pex b/scripts/PRKF__00E_LockpickingBonusPe_030020DA.pex new file mode 100644 index 0000000000000000000000000000000000000000..d4b0db482841037e09a500c5670ae095b9fc3001 GIT binary patch literal 737 zcma)4O>fgc5S>ljd^Sz_D24RmOI2~HEPBGX7Lp!7Bx(^Ht?hb}EDp2LdQE-~e}Ov} zj!66meh4RKy$u4X2iDU1y?L{5X1xCO{@c%H0|fBGAD_R&)7jOlNtPwaID2hWvDT{4 zw74)-l{3tevm|+zygWZ$mkN60JU5jst5pnpxW%U%O)-q%_`i&}Z08c)wUZ8^duf~r zus5-C@e#>o3G|hrTsv(@uAsHld5#3p3~d2NY5KyDlbX=hJ$h!%D*GfYjCcyn_;Ao~ z{0yG44hMH0gXoPRgy)lrl&=@NrF3z*(M~O~WTwm5+k&GH zn=nD^+FAZ`&`ncs`i>jw85&a_;n4K=xihj0Lo;PBQ#aPDKSe(N9v>kamQ5{mg1I2Ea3J6SrG3*8_BE(Bk}Jv3{F?rX zzW1@`^gr~6^r5HU9Z3e4$olRZOW;K1+ zt~Od`wP9MP2lAJSbQ*egIh$S1mx`H|TcxB{tJ!VGZ8y_2Btt%PX=?>NU4XftKVvsqpn!(r;2vat$JTPJkky*u_e7j z&+sJmZP}jfv&l`zI6aq^r)R16%&gU$bYy)*s7aPIM6(T~ndSueI)4yu|}$^Pje|CVts^&hMzlI=-Z za}OJ4v&kOubLqOqsigTkq2%@VhC;;!IB2R+DBG52n3i-(w$*l(|w-z9kT+?rD=g#Cej*=qVmPa#pVCia?qI!z%wU0#ZWB`^J*=soltY&-Q83M%O_=9#oD z&8qq4s4JUwiWdsLIAB{Pd1_j|^r{{Xo;+`5DO$2IoyqcS_*u5!55_SYtM#*mY*3ihaXuOtE=p zdlg$?HjXDVDho4xL?4hdL4BYkXb?2iMJYicMRTApL0>UtC__C!M*XT0{9;oyz?_m}z&oI{1keGa@bYgY)Qr-Y zuSo*FA53usj6=^k<7n+6!U7?M9y@M>DDv31h>-EKiOC3<9g2qPTkSc(zb{@;@4fba zY2pgZ2u1F7o&Zn*p9H2e6`;g;omZj&jh6*Dd;pP=((V2Xur6o#o0We7k;#Q zib=R(K_-!fe?2rqFL_qOnAK~V$FvqOtqia&QkIrr%|X8m{R-Zy^eWzKu&-l9^Y|Aa zZ{Ys{#lIFbBWR8xJq(!Gkf0?&voL?d=A1HP^Os`C_CN^&wr|-s&!OmMSL=dn~zu^i4Qge zjZ~{Kf>(+2Ga8kD4N#^rJ03)4gs~|d5_9Vj4iubh7LNGbF-PTyZUaX?LWRA|ovw4I zJ@gj1^NODs!(D*;0wPr43gh^Pur&_a;2=RmzQ=|t3n#8SiMqI3g1Q@>x*T&=mum^X zE@Q~~b@M2FXI;jQ;~Mlm=C0QrLS0;BpWW}yXY@OAOTRt-nI{FI*Huh{8;#z^P0`a2pSL3re!<{z|JK0Vyi^?Y8_kL*gL zZB`nlb$Kd(DNCoJ=L`9KVSA^PYr7RnYt^dVaokQbOG7fmxogwPQin-_*|(+y47#A^7$QK?WeMKdRO(fbat+tQfgm%XP)6n z>f5(H+lT2r$GB`s%hU7JU$L#K>6x}=G$~Oxt5s=HOjS%v#UeLjw`sVpe(sYg>sW|J+FE$O<(rKDU>+D%>iwJjY_ zb>D57UY#9#+pp`KK&jn!P>flTY(Ew7yKijUQB<c5J&z z!LmTnhI}8c)+tuAomRNq2*GLy)+ph~+95o~-j$oid+F>N7WmC8HSTFs9sQBKk~jRD z6yIywh8GfSh2T{PwrTvp4Jgp_9W}Q@!wiTy?cj8p+}OFcNA;LogO@rIGHiPm_d01er6Z2!YQaGEo3Q z(NO*1{tQh9nNSjqn7U;iqr{`0|DsQR4e%UA5s#&Dh=$%64^r$=<27Wh@=l`v8NV3y z78!xYr?}Cq74$hQ1U-c+IxQ$G=nJe=*)#}S>_hvkON&8x0tbE~IG0(PqZjD@JT1^7 zEzvT4iP4+D%*|rh7BFQ?7_S9dgRVg9w1M9y)?4^#;C?0OxuAKDI2C~S5N1};9JaT4 zdqr(ys&jEvGr@;~y&~@|hRNmyEy8gglif|Uj5UnE0v|2~`wChf!&L~DH`tAY9H1Lh~f+J0ixKM>eO26^smlz>eQM3*LKEf`;YydbH97P4U&PJBzx|; z=Y7vP_wN6$KJk}G30Z_6`*+XYP8aqyHn#P(daj>zTsybga|?N1<-Baea6UzqZRxaE z$mI*!dKznMykWcJ*3)mPZggoFC|_&)J$}-+sba0?dkU@XV`?hr4EvkyT;B0qs@dpn z9JXEK1XXvqshmAzyZ%})o2Ie6yUt0cZMP@u`Bc+m`>Q0{zo5R;&gYZ;HkEbcH*Ru7lZrbtTX);Tt1L6n8 zt}57hpT;_?oqm>T9Z0$qPjg#ZBrokfee1o{;INY#bliRpWpyEw>FinCw=J2Y zGHoakviD?dr+>iTm|2%}(|w_XeLX|TY?keGx3!COjkjg1o$_;b#?IMnxq3+X-Rt!X zc-yJc;hyF zYmO<5c=`Frh1NpB3poL8ZVH9vqkPue$(-Ak$>7jc_*E?}UD@OgJ0~7jBvZbZ+mg)N zMG09-)h#U?SYu;cxX$O$LSIa+p#ju*==Iv2Y?h`-d50Men=UN71T~&J@=bX=-I>e{ z20?_<%@jYkbYDIAUK`G z-jU}ajcc;3;5%8z-$7L!`3|?!b_<*vZTw^sRe_Z+`c_PSpUQ%3pQ3p?o1toKuEqe|C^sXOtxM+l%A#@=VAD#C zB^oK#p7oNxA;hUR6Ba?xy^|f)JYBfIhdD;SXOO2~bw<&3lXv5;_J;W4XAf5K9NwJF z77$n{Nu@o04pW>Kv=>~NGWGsI(y!0iKJK$T7IuBAki%8(*XQNQgmX|yS~*f8zuoau zD0hfB`FeF(*884l$Pe2oC*#=ZKu5W2Z&ykxJ-5wGE4<2cSKIwga0Zo*dN?7MG||y_ zdg23u;dWd>VruoZYPjW9u_j+mkfuB~2=y%^hV z4|&_{RoSe(>ExK@AY+_f96LUGoSTr}q^S;Vp}EOmsMnN@;|jcOHa<2lr3pr`E6F); zWkz#)(qXbJ+O2`r;DS*5jYJyXwqZ@*x{ft#+BWp{tl!w%*Jz?inDb7U^G>YL zu_jC=noTB}<5c1B3rh|&IHrV2O2Q;1VUm(qN>xEusw*v!iW}o`V?1t*HyM*n#@!}k zC%%%#5120(x;pgB>&T!UAB{2eMV#a)n>9TVvR2hG(s1Z*7 z9*H?IC#ww0>z^~s_V{+h-}L?cmN#e|0c%c!OZ#?d&M2$%$@8v)a3xN!*hV=1zw;R=taOGfy1QW2pyrL0_<-kQ7s)8c!wBH3Y;Q_4+K7QGzL>92slodI9cm-P2h;Vb%z z{visg3HA9ez`p@s1O8J4B{bGTQ6fV8jJp*z$(RM0iGas5m8-diCZJU1XA(_T$OW1* zrI>FjN?CrUX=J+Qn?V<dV<*p{J3>-Ek;S{<@YK*wIFcNU{{jh#u< z7P8H!_Hbtjy1P!xOr>?zjQm7xbSX?@5xn>s@~(`f_p5`?gvHiin~ zpjxQGD6%B`@{g=Kt}LF9U5d<$tKe%XW=s$D;%^fqHq+IZHC>oB<7wFi7JVN~7In*v zMeTOucXF_fOtt6-7F}miZ_#$|8QVX!=o+ycy?i&(#K1#0eS@feo z7r`e{S_XR3qAh`oRtcpl#XDohcrCt{Dx)STqcOwR%@)l-H0dxJIJa3FHflpoTR0_~ z5pYVXVwT!p{B2DW!qmh}iosTDQAQsMG^&(?-Y@D!Enzue5n_>(5Bw55f~~SpLkWap z!Lea%_vqRp)Rlu8+A23u4{oACa~q;l*mEyzcgam3Mvj}2pBBgU{NzL z3AKcB*mtnRz6(royX7LZHF`xo5q3N*d52|cP)S)uLI$!-ikiKESH)i|jIip}0mI`W zPd>PV9}C0+MspV~Px-NEJ2;R?yaMnk&d1Cs}wD_ zpcQXL{&t}OcjI#pc5VaL?fBe_zdJym51n^f)DWCr1kD`d8|45&`Fm*dr--adj;lOS90LubXa`y;X)DlXXm5Ctu_5w!*!_U1;;)WDwYm^OW z(>C^k`wlEs6pK|Nn4l98`?g3-jO~;tu#3)W&`E_LHiMexvqeP3*1pXyF2{lZ#9JOM z9Dt0Le^PbW7Z&{(2OYz6>LNU+enR(Sia&tu2Z2{X^+RB==w2PNAd$M5Wm5K2VYp8i zVC6xJ?o(pGlo;~x0PsopU@i{fVPU*qgw*!^b=byJ(_986^avb#6t0xhWB9)htH)7y zT;coSNzj;uJuEP|0j8&ox9zjVxhF_#yNX64@A9@%9PvMbc(c^)@K2V;P zY7j~V-tOql^ZW-ZkLu8h`vHE$tRPoas%n3xCtZ}MKa3)0#eN%yvGq(?1qf-mq&$Lj z?dPH$xw#)|_QBi?i=Gv!ec%Iu1AR^ik_Jr2ebS-W;toZMfN_V)b~U(vZqaOup3q10 zIB5rEp##YD!jYMNUW8R!%K^Z|uPu7Pq9Uab>J{@RIphv0qiJD9A$>cIE!ADohfSP zRkNesagu^M$cJ3OnCn$7|C-1*LLNJ>nH`ZY5&7|u54nIb*K1l{X>Ni%c38985&4M7 zR~q}wb$0s~pVfX;Uz;gIuXu6u!mQ0)hHvnZ@E3a6i;FfqEqQn7n>4=n_Hw_NbYnF~yO!M|`W%J!@2x$x`Apui!a^lXBy~Znsy~wC@){{6?zNtf=3nWvxTfi>-w0Q$oWHs9bPW) zXERjVlj+X*1sdOz*^-X$_i`Jv@#OmWphx9Bne9VK)==4#+2m!0dxpFWRcX8h-b+$-cP5eZ2E9ySeKwt>8fM?%CzD>LH=Qj|ZLe3@K2$`Q*q%&w7repz zwyX=EW~|G4c{kh;-{TcY)WQ2;xXt%+RKo#5{U-Pj@As&zJKwW618+(P#57eUvYDh` zK&bIF)ok@rUe3!Ty!Nyo&(nCncQBq#vx1I+ILH+0&J<`|Tbs^B-=27mD&mPkHn%g5 zcq@H2+7Tb>Yo--#ZIb@3-oDA5lg=h~ds?KXKb_qfPea;|?@W6%^D@bf0nc$)4*K~-cIPfHQJ~75 z8wWSU^Rgo0wb^W%8rs^ncW;F5AwRL(&-8cfPy3mqm)ka+%WM({BYF0fny)6nwSND| z=w=zIA`4r++qQVQ-J&}@1dM8Jg0UXjq~w^Y2lX;;%k~ar_ZFo)W&>ekSLIod`K_H@ zVxzW4QsPR08pjTBI|_SKJh$7+iHhjh5`88k)@q#%bt4uwEm}SmXer7PFVWiJRBBW2 zdf^Ict%<7B@qEGU3aayi=uF*WRdq8M@bZQH&3<7ZsH(i^D^F!}gK0lspz5|ZHrCh} zm5JqnJ6A4bw@-pPp54|qf}i(Yt_ur^y(WswQhHFdj!|m53Tw`oP2#nIP!QHuZ*M%8 z>@rd5Ag|%#?#v{xnG2}xjb1#L=}e`t6Le`$G>SO>O~dJe_&LWAv2ua-&V57LfUwl~ zW?4FMAS(J!U1QA`&2eC+#%Zq12X2qj`>4tsNxXGv zj#U`QTv7tG$g+$m%%YAQ>}RUKau=lNSb8q&?6hP|5x3^3YMMU6!{V(&r8;O@I;O^; z3$V(u`SWJMbYz2iA9*WtHS30bfCOW|_ah#@w4rZ*zN!-pS zr353xqS;!^n%;euk!#&6%4@IPaxXR9lGW`n{rtY2{Z^n7g3U*Gl8y7hgg;aO4%J%v?z< zLrbH>q7I8uq${0`7aXC44dck9E zS!1o1*5rb2ic*-1k-~Bu^z8IVdH~Tr|&^U&4DI#ZeG{7p?lrB&dq(j z8+*3(HAbmShtp^gP;l#!B$=reJGI;*D=f0oBCS;6db!O;)MX>;N+24eshVAw*$!=ejI6K0)OE67J`UpMuys%mU`J`TRiK&#^YHjJ3FJ>gx)Xcjvi-;z~QQ zJ8x2p6LxJ{6FE*k18Hhe)%0Q~r9HDJ#(R9di>Fh=89AHtG_lCCD;*O=vkRix1<~9> zb*Z51nlo^UuNzfRxxKsj_^VE7x?yYWGIkpZ1Mxybey?9h;3UDw&o}5>YC|E5q1TWf z@)CZ^_mT~Hd2%VwczgAOOJz3GnMrCK3#yTE$O3jsMvtx?X(#6uaG_;0UW3^tR;#X+ zrkGu~CKqy(3%SW{nSy# zbQa@QrXRl0O{^D9t{pVFcF^oRYj&PB$EehofT@BT>b5K^;l3oLSccG~@!6VkDQtF~ zr`efmMi(}vBzI)H8)Ft}vPd(P4Et2sjmIkeG-@BC&ruy7c@>rLV>Kfoi-dU;5gNWj zR82KhE5lNvDw+tGM3ZR>O{Hl9(`mX)ml4R<&}_gQz+Axm5wL)+1zbmq1lUYDQI4X3 z7Qk{^0cZuZ0alF(t7$d08(2&0ilCD^sSB_{pqp+I=%F6k3g`uFzY5qvJLr!9pQT&q zPXK*@TLB3JNn%J9K|l4=F2HU;hO&Sh574&(-zkCzDS(IRVLAjj0{CmdQ3I@h9ML>FCUBgN)02Q7&{On7 zz|(XB@GRhYz>nz1fENHS3cN%NF9TkoR|QyIHPHe(CGaM_NpAyA1AZa!F1<_d(^&%_ z&)Fgo^ilJU$rec^S(4ZQGbv!bp7629&!FB37wWtUdtHtX2 zB3Po9sHH`)Of6GUQHQNHQ?&tZxCB`DxHGsmzwd1K;LkG+Z)Q|HkPn#lvAS=g-dnoSKF;Y};AdGslb z%(u+EcjdJZ8(3b8?9}2wdo5jWRV<;Uns1ra-e@UNYdB_AGzBWAQ?uo338?d=JBY%S zR$r@?Zlh0YQ#S+xg!W+^SdFeCuN!StYpet97Fioe)>20>Sc0x%)J#EBnW>Xrh91=g zHx#Qaqm{HCddy%Add_uru#mc8)6CpRe-OybMoU_1XBuf^prD;L!C@n_oHirzX0QMa z%y|%_ErHA|`b;p0qQ^M}tI_P7qswSp;Lbd>K&Nd6dYyA;72S-C8l!FWhbSX6n1*)f z*p|>A2MXqcMd3^dBX`0qU!>}}=oC#rS!fD=J_{WY`W)19W9@^jTQMC6K5nX_onTP( zIhLa-1_{+i)FjaahJ-NOA`I1v;)-t3V!*UmjiOtDPsR^(g)p5I#y%0!(|z@rMpO0z z$5QCuAsT=)KFGV^W_him0Y#}2+6`X@SiB6{(uxKZ`BvL5f*;L_cHw7Ega_A0Nc)TC zUKDu-DnmFHhUhlriH(%QnXIDOP?}SeQFI$CRUpEi;6dyGYhGBzeh9205>fRyuj}lR zKnqH<05ikzU=Qu3efaDLemg#QfIf4&qR%V3Q&E8xl!zAoN+N(eK&?|WEZACD1~v?r zhM6G(Z@-{up`tw^R6<__$3Dhyny6?$=oo6D{Z=T1e9xDp)J+f`m|(@=W}f{l9Y){< zMJ7 zo@|A{`~zV=YMC*8bQG??8ugn9Ap65#Nqd4tKrjF%D-3i4@FCPKrbc2 z;w_A-IEv_`BzVI=?#Pep*+X{Lq#NR+q?^@T!e0un6VRsU30WRJ#2NJcqSbl=Lj(LK>oyt) z$2fP~I;x850Z!>^0K;+1FfL#~Q$AqtH>StbqA8gB9U3YgE2q*kIOR@&{49Q-!}xjp z*6B>&spx6eD_0J5NnAM)#xtNIe+=AQ$b=6&e4y8 z6mSpwG3G)2=OQYe&HCvlA}n8c;KT!Ub&wo=`K_WCKzb2ZwU>~Xmw~^62K*{+?QH5b z&|b&qr}+E~v;{DNoj9oI1rCFk^#!~UmW**fG#3Q$AsFzzD12~n5pYnE3s7IO)Yllt zN6~9cLRsrMr1K>Ry^bH)gAItcS~I1XL8Y&9D=6xM6)Zu;LL=U#KD4Ie%9~oT}U&Xbi`Il&F97R(pYbqOElR`@VMbTxl6^O{nYj_I5KVU_tDc|QS=p-up4J_6vEaaQO-@;<@LjD}Iw=q7AU%ueu z!m>uuNw&%Q-vADSKL>_oI|WQ;5Zoz7LOjPvMAs=4=sh6{R0;hnbi4^3EE|4K;u{2+ zOoGH?ZQyPEVCF4%Qe|L~6(c)uX&rBrT7kDgFpiyej-4LqSW&YxO7kP0M?gFs;oIRU zAY#bI6w%sG8>rUpC)i_s7HCGm4gh`zb}gQ1q_J-kD0^c!N<$ z++hsk2f}C{56+0c<*rWOV+FEzT*beq2ye4@-h(M!p=XRKuF&_P9Yp~L-p3C%r+$>- za{iT&MJ=ITS(yle?<{cKN8smKCh;@1I9sc2K%2F37TmwYP)D&+CxQt!5&X;rw~9ru zBVbJW2+yJr&?F>mxN!!Pra5u{yhQYJc5yjk0uXPN31Cv_lTSYRPuyJ1zY82l1b;0~ z#b1ka=^Q@i@%atL^Pu(tMNvh+mT;lqH^7mB4+Xmc(E>B8Icc(e5JF` zT%+6X7}b7Q56`<=-&)k;a?I+f%Br}41+^o{V%W}Z?2C-{RPeVk!36gGDmb{{i=fItH3Q0 RC@@@a87{qymfgc5PcgvUryozZ9@qheB)MyBbGR{C@oy5)JXIg8GF(!xVw>eoro)cgulWO ziSift4V-&o)^%F`B_RDKQfFJtt^*f#|rqkKtjm$Dq^IY54TG>P@ zDvsACMKH@UT^6RyBZRbzkGE1qc#5O{Y1zDYPIhh+OX#0#tLrehP$#LC8%K9mRZk33 ztukq)R!NS%iw_?uwU@M{f>cV_kK;Ts|E5}Ok^-Z96#REu5eCU8=dBfs(T!tEH|r_< zQ>}CKj_6_C(-;z(awsg8r-9 z+noX4`ZXp2y=(};oFJ@!4=jdO@GH+8K%mh!uky7D7|L#DXTUzU$K#-vue Iub6PzAC*a>@Bjb+ literal 0 HcmV?d00001 diff --git a/scripts/scriptarchiveorder.txt b/scripts/scriptarchiveorder.txt index f594c5ff..5d7f3377 100644 --- a/scripts/scriptarchiveorder.txt +++ b/scripts/scriptarchiveorder.txt @@ -413,7 +413,10 @@ scripts\_00e_complexscenetriggerscript.pex scripts\_00e_complexsermontriggerbox.pex scripts\_00e_complexsetstageonaliasdeath.pex scripts\_00e_complexstartscenescript.pex -scripts\_00E_ContainerController.pex +scripts\_00E_ContainerBonusControl.pex +scripts\_00E_HiddenSlotContainer.pex +scripts\PRKF__00E_LockpickingBonusPe_030020DA.pex +scripts\PRKF__00E_LockpickingReqPerk_030039BA.pex scripts\_00e_cq_d_01_functions.pex scripts\_00e_cqc01_functions.pex scripts\_00e_cqc02_caliascuilasc.pex diff --git a/source/scripts/PRKF__00E_LockpickingBonusPe_030020DA.psc b/source/scripts/PRKF__00E_LockpickingBonusPe_030020DA.psc new file mode 100644 index 00000000..539a6521 --- /dev/null +++ b/source/scripts/PRKF__00E_LockpickingBonusPe_030020DA.psc @@ -0,0 +1,15 @@ +;BEGIN FRAGMENT CODE - Do not edit anything between this and the end comment +;NEXT FRAGMENT INDEX 3 +Scriptname PRKF__00E_LockpickingBonusPe_030020DA Extends Perk Hidden + +;BEGIN FRAGMENT Fragment_0 +Function Fragment_0(ObjectReference akTargetRef, Actor akActor) +;BEGIN CODE +ContainerBonusControl.OnOpenContainer(akTargetRef) +;END CODE +EndFunction +;END FRAGMENT + +;END FRAGMENT CODE - Do not edit anything between this and the begin comment + +_00E_ContainerBonusControl Property ContainerBonusControl Auto diff --git a/source/scripts/PRKF__00E_LockpickingReqPerk_030039BA.psc b/source/scripts/PRKF__00E_LockpickingReqPerk_030039BA.psc index 2f4dafc8..17068b22 100644 --- a/source/scripts/PRKF__00E_LockpickingReqPerk_030039BA.psc +++ b/source/scripts/PRKF__00E_LockpickingReqPerk_030039BA.psc @@ -12,7 +12,11 @@ endif Key refKey = akTargetRef.GetKey() if refKey && akActor.GetItemCount(refKey) > 0 + bool bLocked = akTargetRef.IsLocked() akTargetRef.Activate(akActor, True) + if bLocked + ContainerBonusControl.OnOpenContainer(akTargetRef) + endif return endif @@ -31,11 +35,16 @@ Else bPlayerCanActivate = True EndIf -If bPlayerCanActivate - akTargetRef.Activate(akActor, True) -Else +if ! bPlayerCanActivate _00E_Game_UnlockNeedsSkill.Show() -EndIf + return +endif + +akTargetRef.Activate(akActor, True) + +if akTargetRef.GetBaseObject() as Container + ContainerBonusControl.OnOpenContainer(akTargetRef) +endif ;END CODE EndFunction ;END FRAGMENT @@ -54,4 +63,4 @@ Perk Property _00E_Class_Trickster_P09_MasterThief Auto Message Property _00E_Game_UnlockNeedsSkill Auto -Message Property _00E_sDoorLocked Auto +_00E_ContainerBonusControl Property ContainerBonusControl Auto diff --git a/source/scripts/_00E_ContainerController.psc b/source/scripts/_00E_ContainerBonusControl.psc similarity index 70% rename from source/scripts/_00E_ContainerController.psc rename to source/scripts/_00E_ContainerBonusControl.psc index fb0c92a4..716883ad 100644 --- a/source/scripts/_00E_ContainerController.psc +++ b/source/scripts/_00E_ContainerBonusControl.psc @@ -1,145 +1,56 @@ -Scriptname _00E_ContainerController extends ReferenceAlias Hidden +Scriptname _00E_ContainerBonusControl extends Quest Hidden ; This script sets up the sleight of hand loot of a chest upon activating it int function _GetScriptVersion() Global return 1 endFunction -;===================================================================================== -; EVENTS -;===================================================================================== - -event OnInit() - RegisterForMenu("ContainerMenu") - RegisterForMenu("LootMenu") - PlayerREF.AddPerk(_00E_LockpickingReqPerk) -endevent - -event OnPlayerLoadGame() - lastContainer = None - bLmHasGold = false - bLmHasSlot = false - RegisterForMenu("ContainerMenu") - RegisterForMenu("LootMenu") - if ! PlayerREF.HasPerk(_00E_LockpickingReqPerk) - PlayerREF.AddPerk(_00E_LockpickingReqPerk) - endif -endevent - -event OnUpdate() - ObjectReference currentContainer = lastContainer - lastContainer = None - - if ! currentContainer - return - endif - - if UI.IsMenuOpen("LootMenu") && currentContainer == Game.GetCurrentCrosshairRef() - if bLmHasGold - IncrementGold(currentContainer) - endif - if bLmHasSlot - OpenHiddenSlot(currentContainer, true) - endif - endif -endevent - -event OnMenuOpen(String MenuName) - - if MenuName == "LootMenu" - ; Even when QuickLoot RE does not show up, it still sends open and close menu events - ; To determine if QuickLoot is open, we check it 0.1 seconds later - - lastContainer = None - UnregisterForUpdate() - ObjectReference lootMenuRef = Game.GetCurrentCrosshairRef() - - if ! lootMenuRef - return - endif - - if ! ( lootMenuRef.GetBaseObject() as Container ) || lootMenuRef.IsLocked() || lootMenuRef.IsActivationBlocked() || lootMenuRef.GetActorOwner() == Player - return - endif - - bLmHasGold = lootMenuRef.GetItemCount(Gold001) >= 5 - bLmHasSlot = false - - if bLmHasGold || _00E_ChestsWithHiddenSlots.HasForm(lootMenuRef.GetBaseObject()) - if ! bLmHasGold - bLmHasSlot = true - endif - if ! IsProcessed(lootMenuRef) - lastContainer = lootMenuRef - ; Clears previous request automatically - RegisterForSingleUpdate(0.1) - endif - endif - - return - endif - - if MenuName == "ContainerMenu" - ObjectReference currentContainer = EnderalFunctions.GetCurrentContainer() - - if ! currentContainer || currentContainer as Actor || currentContainer.GetActorOwner() == Player || currentContainer.GetParentCell() != PlayerREF.GetParentCell() - return - endif - - if currentContainer == containerToFill - ; Opened hidden container - Utility.Wait(0.1) - ; Move unclaimed items to the original container - containerToFill.RemoveAllItems(lastContainer, true, true) - lastContainer = None - containerToFill = None - return - endif - - bool bDoGold = currentContainer.GetItemCount(Gold001) >= 5 - bool bDoSlot = _00E_ChestsWithHiddenSlots.HasForm(currentContainer.GetBaseObject()) - - if ! bDoGold && ! bDoSlot - return - endif - - if IsProcessed(currentContainer) - return - endif - - if bDoGold - IncrementGold(currentContainer) - endif - - if bDoSlot - OpenHiddenSlot(currentContainer) - endif - - endif - -endevent - -event OnMenuClose(String MenuName) - if MenuName == "LootMenu" - UnregisterForUpdate() - lastContainer = None - bLmHasGold = false - bLmHasSlot = false - endif -endevent - - ;===================================================================================== ; FUNCTIONS ;===================================================================================== -bool function IsProcessed(ObjectReference targetContainer) +function OnOpenContainer(ObjectReference targetContainer) + + ; Lockpicking menu + while targetContainer.IsLocked() && Utility.IsInMenuMode() + Utility.WaitMenuMode(1.0) + endwhile + + ; Game mode and still locked + if targetContainer.IsLocked() + return + endif + + ; Wait for it to open + int i + while i < 20 && targetContainer.GetOpenState() == 2 + Utility.WaitMenuMode(0.1) + i += 1 + endwhile + + ; Leave if we are not in the container menu yet + if SKSE.GetVersion() + if ! UI.IsMenuOpen("ContainerMenu") + return + endif + elseif ! Utility.IsInMenuMode() + return + endif + if targetContainer.GetItemCount(_00E_HiddenSlotChecked) - return true + return endif targetContainer.AddItem(_00E_HiddenSlotChecked, 1, true) - return false + + if targetContainer.GetItemCount(Gold001) >= 5 + IncrementGold(targetContainer) + endif + + if _00E_ChestsWithHiddenSlots.HasForm(targetContainer.GetBaseObject()) + OpenHiddenSlot(targetContainer) + endif + endfunction Function IncrementGold(ObjectReference targetContainer) @@ -186,8 +97,8 @@ function OpenHiddenSlot(ObjectReference currentContainer, bool bLootMenu = false containerToFill.SetFactionOwner(none) Endif - lastContainer = currentContainer - containerToFill.Activate(PlayerREF, True) + containerToFill.lastContainer = currentContainer + containerToFill.Activate(PlayerREF, false) endif If containerToFill == _00E_FS_SleightOfHand_HiddenSlot_BigSlotREF @@ -215,17 +126,17 @@ bool function SetUpHiddenSlot(ObjectReference aContainer) if messageToShow == _00E_FS_SleightOfHand_HiddenSlot_sSmallSlotFound - containerToFill = _00E_FS_SleightOfHand_HiddenSlot_SmallSlotREF + containerToFill = _00E_FS_SleightOfHand_HiddenSlot_SmallSlotREF as _00E_HiddenSlotContainer iFormlistIndex = Utility.RandomInt(0, 2) + iFormlistIndexOffset Elseif messageToShow == _00E_FS_SleightOfHand_HiddenSlot_sMediumSlotFound - containerToFill = _00E_FS_SleightOfHand_HiddenSlot_MediumSlotREF + containerToFill = _00E_FS_SleightOfHand_HiddenSlot_MediumSlotREF as _00E_HiddenSlotContainer iFormlistIndex = Utility.RandomInt(3, 5) + iFormlistIndexOffset Elseif messageToShow == _00E_FS_SleightOfHand_HiddenSlot_sBigSlotFound - containerToFill = _00E_FS_SleightOfHand_HiddenSlot_BigSlotREF + containerToFill = _00E_FS_SleightOfHand_HiddenSlot_BigSlotREF as _00E_HiddenSlotContainer iFormlistIndex = Utility.RandomInt(6, 7) + iFormlistIndexOffset EndIf @@ -356,11 +267,7 @@ int iBigSlotChance = 15 ; This formlist will be filled with the formlist containing the items that will actually be added into the container Message messageToShow -ObjectReference lastContainer -ObjectReference containerToFill - -bool bLmHasGold -bool bLmHasSlot +_00E_HiddenSlotContainer containerToFill Actor Property PlayerRef Auto ActorBase Property Player Auto @@ -396,5 +303,3 @@ FormList Property _00E_ChestsWithHiddenSlots Auto Faction Property SleightOfHandOwnerFaction Auto Message Property _00E_FS_LockpickingGoldBuffMSG Auto - -Perk Property _00E_LockpickingReqPerk Auto diff --git a/source/scripts/_00E_HiddenSlotContainer.psc b/source/scripts/_00E_HiddenSlotContainer.psc new file mode 100644 index 00000000..7b4c9faf --- /dev/null +++ b/source/scripts/_00E_HiddenSlotContainer.psc @@ -0,0 +1,16 @@ +Scriptname _00E_HiddenSlotContainer extends ObjectReference + +Event OnActivate(ObjectReference akActionRef) + + if ! lastContainer + return + endif + + Utility.Wait(0.1) + + RemoveAllItems(lastContainer, true, true) + lastContainer = None + +EndEvent + +ObjectReference Property lastContainer Auto