From e167d9cd4813337019e253ec8610779c51fa449f Mon Sep 17 00:00:00 2001 From: gechangfu Date: Mon, 1 Sep 2025 18:22:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- excel/attribute.xlsx | Bin 14049 -> 14066 bytes excel/cha.xlsx | Bin 15248 -> 15140 bytes excel/enemy.xlsx | Bin 9156 -> 9160 bytes excel/equipment.xlsx | Bin 15969 -> 15977 bytes src/ReplicatedStorage/Data/SignalEnum.luau | 1 + src/ReplicatedStorage/Json/Attributes.json | 76 +++++++++--------- .../Json/AttributesUpgrade.json | 13 ++- src/ReplicatedStorage/Json/Enemy.json | 2 +- src/ReplicatedStorage/Tools/BattleUtils.luau | 11 +++ src/ServerStorage/Proxy/AbilityProxy.luau | 2 +- src/ServerStorage/Proxy/EquipmentProxy.luau | 14 ++-- .../Proxy/PlayerFightProxy/init.luau | 6 +- src/ServerStorage/Proxy/PlayerInfoProxy.luau | 16 +++- .../ClientMain/Camera.client.luau | 3 + .../ClientMain/CameraNew.client.luau | 33 ++++++++ .../AttributeLvupShow.luau | 16 +++- .../UI/Windows/AttributeLvupWindow/init.luau | 10 +-- .../UI/Windows/ChaWindow/init.luau | 21 +++-- .../UI/Windows/TipsWindow/init.luau | 9 ++- 19 files changed, 159 insertions(+), 74 deletions(-) create mode 100644 src/StarterPlayerScripts/ClientMain/CameraNew.client.luau diff --git a/excel/attribute.xlsx b/excel/attribute.xlsx index bdbc6d1c6679eb0d42db511e7ae35bdaaf21385e..2e21d0812cca113389253c60bcba272ce31b5bf0 100644 GIT binary patch delta 6282 zcmY*dbx_~1JrE$+;w&26Ay`--Sg_!*5FkL1UvSq2BDhO%f?JTqT^9&W&=4Gg zANO6=UETcAHC6q3W_spLP0w3*Id!RC#snn(L?-BHOpY**_jX`4l73vE>S1x>_7zCvaM?hVQN73EpB;d=T9d&U`XjvHN2@5;E6_Dt6+Cv!c=sIt%L1SXUp z-(Ox&?o2kd# zG8`l+WIu*ntCsyp&+%RpZhI_cD8T_-s<}CZeX^CPh_{ZmXygf_Mh#xP#}q*1M{rR{ z2l^;ghFJTB;@cq7EKPLnLjj~hxMXJRWUt%+T^tZZy?(>_qGH5wL4P91RbihnoL8-p zv1)+$_XnzofchI4S!c*iFr&D5^UL=e=S#mwe9mQ_(0FL%+bhyyc}Sot-?-hFJY*>1>Bzzt*RU#0F2c zZn5~C^hc&8ctk!&`%8||cd5w}N2Ekt>_X-)dZ&j6wL_`#Ml-^;gj1r4rmLeDa^uzI6i|fofk;cIetDLGT`4Y7gs)j#oZ|#t!ysLqtA%&+ zO5o4yZ3c=57XObsg02rm$!nTwV2{n`;`YL;iwPlOIe+9^E&wX_KUlbzzg*WSDB894 z0I{a(Jnr%$0sg?QhwrFBqjP>`d1eIS`6dP*k`FN zqVOr+q4gGLD;XTP5!%`&86w3~wErsD16&=49_ZDk^{HA?HE~1&04e>eMP zcQuAiRl)4?55~H6WgB~Q8H{zEUA&ZfsQ|n6M!PWR z;F{?_?D~&MFqN8{d~rQlPdJ(GbJBw0wVCSdbJhRS>#c z3LYd$7*nNZ9BdD`y}Y{v0{#7gw$_0Ai*dw(<+Ka$%EQOIYh|Ey0ml1q*wpW1rFu3 zmO8IT5!0)%qs~C7yN~xLs%NY{qBqu8oZ{O%M{nE1=<6v2uWN|t2(4tgttOb4Da{W# z`yv~O3dSW08dpy%*TF~KQ+-!X#tFi%<|O?6WLJllx-wsS#9;x=2aQWI($lwrCnn{q z8wJ-*%Mz>AHe*0{v#Z?6-zwUHCR`iYG)`j_WK!R#4Ssc0GmNNky-RbW?Sd`#-{Hx{ z_3-w_#r5xMcSBKEdI!waQXUr;!yhopO3?1e^oLJ-JQ*03_9sA-U?8rk+|xiw+_a(| z7>MKE0J8*&@sW)-Xd=aRbF2n7|0oMu`BI%5rG2w&4)9xI0`*Oieb|*(f%`lzUPfl< z>l3RY_Z8!94B023{;xW>%G)>2;2WPnpXNVke2MR(4YtDi%zV4#IWu0i9bgH?oy`gI zfgCAm*0{YW$58o}8wz`J0$!yOooWgz8;v3jzij7^H>KGYX!=MZ7Lsv^n=E+iFxTr; z1uY8G0Alqv5ieV_XV_&2GfF~RosFX^fsSS{fftZZF+=m=_yA`pVjw zh}UGfkI<+}v~8Q^(z7;97&|Hzaf&b6&!;5-7N4Inr}&&P3`S7QP)lkSW>HE~HrZpE z_Q&g0Vi2ZluZu+1F^hdHKQ-G0o$%D+|FcY_#?4fmpZfN?dbN}RvNISzf^b7*>@Hen zXGrB-n0%KZfS^-7BcG>d$x=!~;aYoR#UU_1)$gq_9G~f5``kmoRG{Bvo8&iF9Q557 z5Wa>QD(Hcnis3<<`B~SiV^vxB{U{BS@%F|>Wqah|PIc0`vHMmUr>e%p1)EovLny+m zb3jm*LP`UlZQGdkk+)%sq2VFMEI`gTBp@y?lCg}JSMoDn^ALG1i1^K=j_nw!!rtqN zJd_q>rgsS{WousK)uJS{d0##!aTvo7_{uVaNrh=?k!a3g*c}x?zA&gxl{H2y za5Exr8??VOVB#R5vpY`7#bZlZMmqiK#ZPH5p^C9jVN_qYwGf`~D>aX17H0)8foT@J zHlBIEOkLCdms!GkJ{e$zFp-syhdy#inE06OX%%+sDUJSA?na4VP*6s6)(ya7iWAP4lT* zi(=uq@@m$-o?+~DFcJv!6Fwm2d}IH@_b#8ieXyH7PufSKFGmz3j7$T07_T$Ci-_me z4$jqMl0t(zTr`wquVC4Igc9|&J6^EwsKaW@$(r@viZfVGaO-rr0^Xs`%2oSw`15M=Z1HALG3<{t>QG)-8 zuzHFRK9jE#2q7H>JHpmlaQRx<*P+7P^`CoaLQJH7H3WN(Qoh%ob!NNTfCYsomDL|H zlo(F~lgj0D=ijXB`xZvoP5&sB=a8O&CEV7c@nH2Y)}g({D)WL?_HAIUR4H4p06gZB zvU*PRTm52PY-5^6jvr4u(FIm_TlbgAQQy8-68v)Zy?fsz{nW=v=p1n~q%Czbz>?*+wGbAaWu^`+*|4!jND5u2#ImE~C@SrN!P_T;w3vA?b?B5Wqj^4Q2 z#mrUpZxc((B0H2yTd3BfqRW9_xq4$ha*`r1d`NdAnz2`Hgk~qY%n+kn7AiIhP@9}v zJQ0HOW6f(y^8!&xq4tIDPIC^`k!PlzP^0)Zk-!=ih~T9W6OTSypb7dawa8*OU&BE6 z_kXVvD(~3wOgM~yv&4GByy&5%MrFRsKIJ~fgk-Qj+eeeo6>5rEc|P+{?5aG`mn~E2 zJhA5WAH8BbCco#s->R65p35@gMPbegK)@QmvD^>yiYso>9|q{~1HP4m~eYnHSzj_>DqIuV7_>Qp#Lape@F=Ac&A`t)D}d>8rYF(e6FUVWGC*gjVLqj3r7v0ZIyRkV4+S! z0zXc1)7vSdULm-6zFcT!2AMtoz}dhQ&IVy6oFx?Ta}JM>*4jEKH42lqLh_<5F*lTG z#aKoWL~SDV^^yAJ-D*A6S2Re!Ucy%NaT0tDXI1+CqP%Wfp&n%`q%GV-4@PWCZv$pM ziD+cKYTn${^s<`1^mp9?iN1kY6PpVI&Uk8+>tEXkc(1erc}H>T?Hm~(C{_OP_tdb@ zSJs?EGh^;hUq^6#aB*3vE zyjTsNY{|eWerTq!W_{A_lLzwTLg9lYdYE>-Se}&;Z~E@+TeLU;t{u5)Qt%czWyDdt z%Om%nGP{RAB~yRO+f4X&>VH^V*UI39i!%`-rMia>0-3?ZIT+|nwCPmH0~>n*qeCGC zQf;wBP+3ifwVJj4`F5Gn)eZ?9nTG{P7WLe*LMfe)%N!kQ&`Eac|L#IT@-CduF;%I-##tF zr5W<5(L9KM2btB$A5@&_TxfG49q?)~uv(%c4s~XHPe&5`Lq!&?fKeVqZ*}JO>DfQ6 z;9vb;@#hA>-57h^#Kb^~kp04*3A)WBXwxtD56sdrbN!bxp(-aNKvn~b7*Et7#=I0& z?${hWS;N_4>TMYFBEsoM1A&SM@X|J4a%EVl1#$*hv{)a#slZn$I`cA4&qpXk4*mV} z*3&c8MN2^z(^o&xjQ^&ZV5qUbSJ`e4v;Uw!96k3v@+W%|<_r)bcO_JP?7xdhQj~G=6 zordCfpx?MT!D&|M6w~)7_YpnrkelGN9Xb`*?mzrp8jlFTJKMDjo;eELn>4{uvbGsE zF-p{#+rIj>X9kGHS0}i+6ZhtR$`304eB|4;+Uc*2+&^uPb+ukoD0k8c%~;9)9fwiQ zFp&2{1RMRNqKlifWO6zOJ4ob{p4gLl_N@Z$hdsAf)6B3!J~EP)8>1 zIf>M365n1)?TqlD{2-Fu0me+E<*c{47Z&8XoR`39BLJ>j`}A>bxwu>!2SCK#z0BaX zUvqOnKdtu8kF!cm<2qkJSCo9qHM${G%PKi}&DH{0r}*q}FQQn9VzcFY7;=-X_4kYh zGi4{uHP~e{wP^Q&-%on(i&Wlk3JC5#mWjGi6BhoENy(Sct6*RLt#l9V>#!7p!{+H> z&;8xIX8`FUB?^stVp@Beg^TzkDa3N};l$GZ;yF7(rYb^WX)`lV{BGcsV(>YvvYT?> zvu*6a#Do<=8SVMKd#CNgqmxS}5M->EPUe(`@;A+zA#WMxtW}MeZBT7f_;JA^w#YL7 zty3WYNpYA&2eMP;nq%zjg%-ycl8@Y5k5p9E0n4;t*u-ZIsSAJaYX!xCb~B!Tu4Hdn zf?Jsyly(Qo4J#&xRtCGi_w8evQ0J$<0)E_hqynPxcG{N!TKq*v$6<}Fr@3zH3;_=H z{2Fzz9jOL-QB9Ym3nkMGdIx_lK@tH`I}Uvu~p* zHY66W2sf;pJP@^NqQFLPn0=nj(`Rbp+ejqqtMTy?Z(kWOY~yg2H8|k+8Ti!ZKn@bw zBL17k#%Kf>U_}l^Bw4XBVLN8KNq2u0PIo{1lp73)zqS6bd>mGbCUCkj?WLHB2}+pi1d- zf^pD(&9Z|P88_8_Emv;L9o~ICBi%X_pzu8=-dy!f*i$eg;zcX7g89KQ8E4`HG zsl3a=I-JNO*ka{5x-ELNjEs30n@`j!UVkLD%W5LT868NzR-q!>ph>*!;Cqz6A*eg# zw?V`BkD?DZ5Y|K2#07!iuDG=DK4D_I|J4|!K_KcUk?8+g8vI0<`+tfjII{=^stYyT zkD3;)C&Go&4G$2JMe&Arh&-eJ-zVuA2t@vW(N8^54!AT2C7c+-g`x+SggmGF?^9Jr f0fCHAK_HU<2MvMyLZngA1>nsP7EGkjfBXImUNZ*@ delta 6286 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 Fe*x_j4Hf_Z diff --git a/excel/cha.xlsx b/excel/cha.xlsx index f88d0ae32289cc8aff60bd89200e8d405795da40..334054c6456007ef4d9aa6570d000ac5f034c10e 100644 GIT binary patch delta 7386 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 bKncW1P}HC-VvkVA_@UNfbQn!SxA6Y~&xPPx delta 7463 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 diff --git a/excel/enemy.xlsx b/excel/enemy.xlsx index e0326243a8b07dd51a55753a955570a5aebd2796..c70047c19a1a5a6a2d9411f7643e787da1ffa874 100644 GIT binary patch delta 2117 zcmV-L2)g&gN61I8$_52kN~C*Glg|bye}ef)0F_or0BxjpRCTh=OQp&Ir&tBd7}HRV z=D+W?$wxC8jk4{c#K!jJaE|Zs*q-SXOSAduC)T! zIWAdEBK?iD`t{Y9zb-e7zpNO0(Ey-sBfSu!2~D%j3R2|Fs=0gA>`*^u=Sc|BxYGxky;EOoRnAq{kEV@yF;t8bKok>U%JM~ zSk(Z;ik4KoDNtRjvT*)fGmcj!$nKG+^&Ea9_#+D%d-o<-I(bz^GtOGJ78d|*4x~@? zBg;hSXbbw&Jva}^H92{uGKYIse|+>oR---E=m3VSPop8QmhwsnoA*I9Z_mxvuP)cL zBoBjiHQY2`aV0ZV>RO3gk>pg6JkrN7WE*mr09CwerX4L|)%HDmq?=cJJKu2)+)oCq zMM2x;*5@(^JTWN+;WZXy#%ci;+)Dba-4yn$U|??To_y~pCvc{~S|Afzf1HJQ)!t!I zXdN#jJq{oFs-Nd2SrXi^`jPY*DIeci5}*42KbR6{QmzSl2TsHNuiAkc4|m496I_G) zd3*z#{|&!FDj?zc_N2~XuaWaqXFNntKWvmvJl{t~Y`Ko%#*>K=I1Vy`6wRF3*!Aro z`3Yk9D9jk{M6u1XgpPC#emsKq7CMFEBiEEhtCxxWd0E`Txed^riem&_vlh*3N+O5rkO zbHvDeM@dyqpr(4QR&GyfQoTWimPJ+VF_=4)ui*0>sT}T}%5a%Ue{(~p0s~~(fs7!% zxM_vz!CVyBA=jFWt-v*`#PJN*4{XDC9ov|>v7LD1Bu=KDOph%5;r~(ol*hx}7e%rx zFc%AsvlsXd-IMhcx8SEi5b%9ZcIx?4%K?gRic-Txfn`jmBiHca)bYkBo+Vy-AS>ms zKUjQxQ$0`k(GTBgcKzg26hY{*u5$lT@d>R$kpkpmR7MhY|n1KwF3lYI;(f7_1RAP|P{ zEA<@^_c69NyV+QAR#l^@xv8pd57!uvV-zqh;2c!--8+!eO1X*FvH@e}`)A}9VN z*@AV_bS2G_loIHKsb#k=>CYd_(K98^^RDK~bWqX*IQlaG_+hp)cH>$APms{LlD6LW z1!GRMpt(y-4;_AKjMd!Zf2&sInFk;Zq`6I-F z;vVyNt?b>Iro}xt&FyCBN5beH5tUTZA0m_zEsE8;GnQ8h>)vN$F38^Eo#XRxmWlH> zN?HnQoN0W5WOmH?w)`oZGA=Hp+xqXqWMgJwE5iX^QTh8)${sJQfBXu2cqi=X0t?$^ zi$T^U{hOYy5%yVV(ra`6_K(hI(I?+5K{LWvuJH_BgWWR9=CfMj>4%Dmg{GvRvSKv} z^D*X^gq?dcCZ1QXpg?#){fv@e-O89vSh&KeG^oV|fyjlITlfr0m2?r@|0inT5Czyp z;qCaWwv1-SoNH+Kf1vz#v-<*a-FlQAC;21pLa~27!s|7h;nQ zWa;QDxwP3=!K%Kx;H#0yj086lxsfQ0L}?@{4FTiUOJqub;6gGp))874Ahl-kx64Kf~_3ny34i{aQ#G4t?-5r?M{a7?LG!JbUZ z@_|Jo268+nKJ zVqP1?oqsP)fg3J9cma4u$O82Mn8$h)zf;Mr8A8svaN(h6)sDXEBW^{_#36 z%KrJFS0+wXx?|&aI>nu`r5MD~eX!+dY}+SONe55dZ)H00000000000085YTq8aKWRsgCBL*@d00000Uda#K delta 2164 zcmV-)2#fc~N5n_4$_548BZUx8lg|bye_|7$2`a5h0BxjpRCTh=OQp&Ir&tA>F{Ys! z&41r($VW37jk4{c#K!jJaE|Zs<>IQVO5>Hvh6x^;_zal_<(bGCe-6!m=BYI{jYbik zlTvURns2l*uP(p*b+H!mWhumq0RX%S%|fXE`pR?;cdVrUe?eCM4$I$zVf1M<4A$zs62Rtt5Y5|hbIi+&6)Wk( zU|oaM^;c5qOqHfll13#tQ#23Fa~O&>-A{lj+163ZN?3Kqp5vSL<<8D`(g63<0c&2c zX0h?P4gybHmx@YG6rBpLz=9h|pS4?$JuL*7+qkFSTP7)-DX0xvBvJmv8Hb9B;I)vCy}SqqYHoVf0V!8%TJ4^8{;JCLtRxru7ofHCKJ&w%R$;jhTgw3Tx!kqa+3@EMdU>0*NJ{}VNE zhyv`a@P2$!TST*C&NVcDd{F+o*?s}JYCX!1ll%d9A=s#>_pjgt`WLm6JaC0k2*H+U ziT@$WYQBs8R@T17_%wN%AfN*07cu}T5rgwa|2{4_Vh(`m5rF*>FikM}I)X*z{{R30 z|Nj600RR7#m1~ZIFc?L*Lb?EXiKqdRf$~}gVMzStOvE@dyPvNO7J*($ihqo`J+$fR zEt9PdHGlG+(nsP%_9Kbxb|BIv;i*KnB=#!7mxLRrNWMf4Dp6=Afptm^0<%;a1a@4% z5SuiR($Onf+U!-Zs#h1h8i~wEa3hf$iNZ*fMxxRXu-$rzObt*h`>N#&71KNJ0z;3* zQ^Gf$*|XTG4Cr?(why(%M>qyK1_cHs2GuK=mVb5Oy4160l#TDV*DDpQxae3>(zLmv z!SlLfEwyQ;P5F?*{mF+ofV`0TQ9XuIJ9R}H84u2dldI>0;W(Wl^YDg7G(#u6M8%rV>pLp>4E5h?hD)Sspq0D@y^K!S1>lZfCS zuLC3PpAQCQ=9INNXus1j?wl?7C{FIZttVsGby1fLF?@c4-!_lW!>VDe`de{8MJ71q z2AFG2QSmavv%0@s!>rr*GnX}p+e5+2;331m`yMl-K^|Ek0-uA9sZYvla(BO7qhb-0 zWf)(F@p4O2N^WR!_1=#?d*A088}c~(U*f_O(}756LMTaR#1o(xa-aW&;v18Z0~E7z z9!diR+#`h$Pm{qRQUN%V6e2Df?2`u40{{Ta3jhEZ0000000000000000Be(6B1Hmo z5R;G)6_dCkDhwzW004MwFLQKxY-N)$BNdZ(8W0Nr00000000000BDmQBPSb-jfX2o q0RRA40ssIJ0000000000000000OFHiBR&COlb<6a1}-500001>a{p8S diff --git a/excel/equipment.xlsx b/excel/equipment.xlsx index 7c21589e9c7237a1a44e52192844f67031c2ae94..e542f5a9c849b295fd581472aa55d564d44c1ecd 100644 GIT binary patch delta 2468 zcmZ8jc{CIX7oQmnCT6k?4P(g`^DNo2@7cEo*%DbNVJxW>CXzkW$S$NQ24#tC5hKP@ z5()DxGqUfKo$|c*o%6l#eD{yvx#!$_&$;K^-|u%WHDWQMY8K22Emq3LG5`P#_%$#e z?glo`g!@v#$dtceC!ULk+RaUH2IRlR?A5niP!~1O%bQs%bm`5~21r<=Ad=s;oGAWO0IyijO zr#vHv>blAeD5dDi#9|^`u|qL-4e#A?>}A&^d|Ns|O-D{xeygAncx(c3*pd{q4HO=H9KujaWg{jle;RJ-9MD+_QIGA&#%j!XS=iREC3FCQ20wVdCA z&LJUDYfn@J(N?&Q4yCB_j%3(a6dJ7I36A!q5Ex0QK_j4mwJ)?`TzB~nJXwG7&Y9B3$7F|JXHh*2?d;_zOFp4*ez?0gJm2Q7 zoo}|PzJOGFG_YRBpuC19ytjLedcnRA*u`R!^t9a>tuqG)^d}dT9 zR-5+&pPH>&f~}rg59b?qLo<2t0bMN`@1rBm2Bk59%^?^Ibel5)dYd4qDfl25;RGmF z=?hUeMEbAxec!-cjC(;QvAe1NVeXPYFQ)aU7t&v03JWp+TEBr*y^|PPHHoOGC1lYQ z-p?kru={IzWk0*3cQ<$E2S#_;9^NK%lYDiUsW)6uAi5 zcilWT3`3@7w*7K9&19PM=m|am(br4_X>fl{Lrdn?c&`8hUjzbf^Oh?Eqe5qsVRLl} zecl-&aW1#pszwquJ1iAVS+!7fj(k^sD{@RCZ*an08|r@)bd&b0*`zD7_V5@U z#k4K178)Fao9o!0&zt>}bK}j-?2v&1-=fa9)Uou{X_3f0Qh6Z&KM3Zo4Tm^^SSc(; zi{HQiz-K&#O$0|t9hW~Hw~pFIo}J?Aj`q$6I?bdP(_}IXoxKK@ z#~oYIj=Ry84GB=Vj#TT6-phhEo3Cic8H+_vu_4*{KDzHsqej)ovde9(B#Ge;t2hSD zlCSRwoohI&iY+$&HVzf7_KsU){;1^qBhv%l*vy9_YB18cTTM1Er?sjbkJGtOdbD@p zQ0$kFEdfP^oI7g|g&sy-IaAAeYM>M^+z}1pP#2|PZf$U6^!D(ov_Jbjfqsx?a@V7E zi}`oWD)o(ubkPr&*|wZtlIhF6GY@k*7m;w@CQ%eF)q0w-UYyu{eHv17I>z&b_*JYl)q_lDw4VQo^ka|>}aP`&1RhJ*7L19mE;-6 z&YCNxYL^byG-~iGnYyf}w8|Vqaw~Ym6`MLqo`Qqf(eFu=6&d@!J%$`W<~+nqWT7r}+j$v3+tvT?IiS z%*HIkr0~Kcl?YeQsc!kX7yt&+aqD^tT&nRQ9)p;k3RGC4OP7u# zt15&fp6Q=0! zGfBhuly(yS(4E*b8s_@tqXAo1;q<$SnV(fex3b@t1#B`|tQx^S`~^>2Og1Xkunvlz zx7YeFGSPOjH#_c`Y^=AE*vgFIECaJeo=dfK#MH#ROU6YJr#{+e=aEXsaU;j$~!Ew#PQ(sg;^ciq0{g5u_HT54aeWZMy>3<%YV|6QFDBem# zM&Q5xDhvSdov7^J=x4)EvmySlF$aQV0NemDfaRnn0{B;b|3C1Z>tuijPuGwG(Ru$# zRW;>+!+4CQE-(>arl}4Jm%yh=!10Hg(m;K@gqALlg!k1#3H)F;m)1THzN!9q$6v2_kGlW> delta 2474 zcmV;b303y#eBpese_d~*I23(fY5xP_or3vD2r3OtA`>wM|1cn*To6kk4kd%61kdHny*i&%O8fa`~mNEA5SNL0J>(=)%%9 z(qt^B%}c2Nb)Oo(t_g{o99OI%q5e*U{^jcT-!9jTzpfa2)c~Lopw*880m8nYCDlBA@Q%UkrpTdx>$$kR7;$0hcw1QRJ z_w0#oUhU+3%V7YypI4Ib21~MFjRdJ}sQ;?02JA)2K*ZV|`MaZ>z}*1}fjiLRe=NW& zaf@ZCb-W7oIC$c#ewkO~k>Hj!Po&RC^>iRTe5&*RAU>Qa-%ap$$phKKN$bmYBFLR{aI^6JQe}`2uONxSI zhnt*(P4>r4QALD+%71W(cVO=fV%gHmaFyM1O?3mC8M5q|vLL;@7INr8#T3GTTx&kH zX0Bl+j%T?3%r<=2v5kcr+le<#;w18v4%C+<_&@6DaG8SbCrYs_F_-roXRqMi9VsF# zK)6HHOyGM+HuC()a)6?nWunw@(abWUXyO`PoI2hV#f!vC_hgm(#V4zoZw|W&mK~G< zRRM-^pxSgZyPGV=iH#nP?s#w)tGI7=|C`}A@V+8v8mA9u8ZN%x+~1sOd!5`rKc<6_ z{?Xep8>$^NWNveK^%IlP1{9M!I}Wpt3QGbCF{ui%;syW!-XN3j6B(2J3WuOzrUYtfa#b%g`uo>>a7T&rqRvHSYRKpw9KD}?{4m`byK*IfCrGGW zMoaITlrbku(85Kgff{EDW3_+q_-dETH5NqPI_ZifaXe;PsG4?!)Lz3dMWG}-7`fI^ z`wn8E5+37srE1)PrsXv_E$nLD45ZNwA{MGre&0eV(K3Bp*2aoOg?aDzNJz4?cqjM_ z4>IlenUYr08fOY0A(?eCpQk@z6DH)5be{iJ7(QYaHYyz836;DrBz}K$WF;rq@SU*n z5f-+~rfZdF^l#i>1GGFe@u@k?{iCyKuJD9IR>VS)(N8@6n#7dNrfmT|DcHJKed5L9 zCsZIkpa`cV)aSyORap3lLop&^QZ}Nmbvy<8bN< zsX{9yu@ldH^H2PH`gG8W?7%u{nw-YHJ|)lyQ_5zY(;wfL(U=nFc~f#_8p!Dp9DSO7 z{xsbiyKyyuCrD^qPHXSmj4>x_(A@P*3k|MR#%k{I)qk#;Yc24yOVWxZ{r-q)E*p9x zWcCq;sVXU;Fk-8r@h6A{#XahGwQSvmro|&T&FyB}M#AV85i6;rKXy<`w8&o9jj?>C zuAwGmFmcK(>}1%$8!Gvj zqA;DfNy6&8M%&9<`4>F;zjSw4@FmndGoETVMqoJRA-U>p_0`C?M^$3V&o73=g7;Xr{1&LA9z9V|ep zKteh0*O}TO*_An)-sTtnvh(m)OG>EtR{3vc|6T>;y7qWr(q1ye=7Kx2@>qZqXiKc# zOM+Bk6hiPxv<$}!UBwUGxR<4`b2lh4{p5srE`1iX=RCWj4SPHS()M^5&3XY)iH@Lmaw8l4VZUj9# 0 and table.find(wearingEquipments, AbilityData.wearing) then + if tonumber(AbilityData.wearing) > 0 and table.find(wearingEquipments, AbilityData.wearing) then table.insert(wearingAbilityUniqueId, AbilityData.id) local AbilityData = Utils:GetIdDataFromJson(JsonAbility, AbilityData.orgId) table.insert(behaviourNames, AbilityData.behaviourName) diff --git a/src/ServerStorage/Proxy/EquipmentProxy.luau b/src/ServerStorage/Proxy/EquipmentProxy.luau index 799ef49..670f365 100644 --- a/src/ServerStorage/Proxy/EquipmentProxy.luau +++ b/src/ServerStorage/Proxy/EquipmentProxy.luau @@ -139,7 +139,7 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) local playerInfo = PlayerInfoProxy:GetPlayerInfo(Player) -- TODO: 其他随机词条内容添加在下面 -- 随机生成额外属性数量 - local maxExAttributeNumber = playerInfo["AttributesUpgrade"]["12"] or 0 + local maxExAttributeNumber = playerInfo["AttributesUpgrade"]["11"] or 0 local exAttributeNumber = rng:NextInteger(0, maxExAttributeNumber) ResultData.maxExAttributeNumber = exAttributeNumber ResultData.exAttributes = {} @@ -160,7 +160,7 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) end -- 随机生成元素属性数量(暂时跟额外属性相同,之后可以改逻辑) - local maxElementNumber = playerInfo["AttributesUpgrade"]["13"] or 0 + local maxElementNumber = playerInfo["AttributesUpgrade"]["12"] or 0 local elementNumber = rng:NextInteger(0, maxElementNumber) ResultData.maxElementNumber = elementNumber ResultData.elements = {} @@ -181,7 +181,7 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) end -- 随机生成元素抗性数量 - local maxElementDefNumber = playerInfo["AttributesUpgrade"]["14"] or 0 + local maxElementDefNumber = playerInfo["AttributesUpgrade"]["13"] or 0 local elementDefNumber = rng:NextInteger(0, maxElementDefNumber) ResultData.maxElementDefNumber = elementDefNumber ResultData.elementDef = {} @@ -253,7 +253,7 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) -- 随机生成技能槽位数量 local AbilityProxy = require(ServerStorage.Proxy.AbilityProxy) - local maxAbilityNumber = playerInfo["AttributesUpgrade"]["11"] or 0 + local maxAbilityNumber = playerInfo["AttributesUpgrade"]["10"] or 0 local abilityNumber = rng:NextInteger(0, maxAbilityNumber) ResultData.maxAbilityNumber = abilityNumber @@ -266,7 +266,7 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) -- 随机生成符文数量 local RuneProxy = require(ServerStorage.Proxy.RuneProxy) - local maxRuneNumber = playerInfo["AttributesUpgrade"]["15"] or 0 + local maxRuneNumber = playerInfo["AttributesUpgrade"]["14"] or 0 local runeNumber = rng:NextInteger(0, maxRuneNumber) ResultData.maxRuneNumber = runeNumber @@ -360,8 +360,8 @@ function EquipmentProxy:RecycleEquipment(Player: Player, EquipmentId: number) if not EquipmentData then return end -- 根据对应功能模块进行对应回收 - -- local AbilityProxy = require(ServerStorage.Proxy.AbilityProxy) - -- AbilityProxy:RecycleAbility(Player, EquipmentData.id) + local AbilityProxy = require(ServerStorage.Proxy.AbilityProxy) + AbilityProxy:RecycleAbility(Player, EquipmentData.id) -- 回收对应装备符文 local RuneProxy = require(ServerStorage.Proxy.RuneProxy) diff --git a/src/ServerStorage/Proxy/PlayerFightProxy/init.luau b/src/ServerStorage/Proxy/PlayerFightProxy/init.luau index bcb9fcd..774db69 100644 --- a/src/ServerStorage/Proxy/PlayerFightProxy/init.luau +++ b/src/ServerStorage/Proxy/PlayerFightProxy/init.luau @@ -171,9 +171,9 @@ function PlayerFightProxy:UpdatePlayerFightData(Player: Player) end AttributesData["maxhp"] = AttributesData["hp"] - if AttributesData["attackRate"] then - AttributesData["attack"] = math.floor(AttributesData["attack"] * (1 + AttributesData["attackRate"] / 100)) - end + -- if AttributesData["attackRate"] then + -- AttributesData["attack"] = math.floor(AttributesData["attack"] * (1 + AttributesData["attackRate"] / 100)) + -- end -- 获取原玩家属性,把不存在新属性列表的内容排除掉 local ConfigAttributes = PlayerRole.Attributes:GetAttributes() diff --git a/src/ServerStorage/Proxy/PlayerInfoProxy.luau b/src/ServerStorage/Proxy/PlayerInfoProxy.luau index b43d2fb..05c23a2 100644 --- a/src/ServerStorage/Proxy/PlayerInfoProxy.luau +++ b/src/ServerStorage/Proxy/PlayerInfoProxy.luau @@ -9,6 +9,7 @@ local ServerStorage = game:GetService("ServerStorage") local Utils = require(ReplicatedStorage.Tools.Utils) local ArchiveProxy = require(ServerStorage.Proxy.ArchiveProxy) local BookProxy = require(ServerStorage.Proxy.BookProxy) +local BattleUtils = require(ReplicatedStorage.Tools.BattleUtils) --> Json local JsonLvUpgrade = require(ReplicatedStorage.Json.LvUpgrade) @@ -158,6 +159,7 @@ function PlayerInfoProxy:UpgradeAttribute(Player: Player, AttributeId: number) local upgradeTable = ArchiveProxy.pData[Player.UserId][STORE_NAME].AttributesUpgrade local nowLv = upgradeTable[AttributeId] if nowLv == nil then nowLv = 0 end + local nowBattleValue = BattleUtils:GetPlayerBattleValue(Player) local attributeData = Utils:GetIdDataFromJson(JsonAttributesUpgrade, AttributeId) local requireBattleValue, requireMoney @@ -167,7 +169,11 @@ function PlayerInfoProxy:UpgradeAttribute(Player: Player, AttributeId: number) requireBattleValue = attributeData["battleValueLimit"][1] else requireMoney = attributeData["cost"][2] - requireBattleValue = attributeData["battleValueLimit"][1] + (nowLv - 1) * attributeData["battleValueLimit"][2] + if attributeData["type"] == 1 then + requireBattleValue = attributeData["battleValueLimit"][1] + (nowLv - 1) * attributeData["battleValueLimit"][2] + elseif attributeData["type"] == 2 then + requireBattleValue = attributeData["battleValueLimit"][math.min(nowLv, #attributeData.battleValueLimit)] + end end -- TODO 判断战力是否足够(暂无战力计算) @@ -187,6 +193,14 @@ function PlayerInfoProxy:UpgradeAttribute(Player: Player, AttributeId: number) RE_PlayerTip:FireClient(Player, tip) return end + + -- 判断战力是否足够 + if requireBattleValue > nowBattleValue then + local tip = '升级属性失败: ' .. AttributeId .. ' 战力不够' + RE_PlayerTip:FireClient(Player, tip) + return + end + -- 扣钱 self:ChangeItemCount(Player, 1, -requireMoney) diff --git a/src/StarterPlayerScripts/ClientMain/Camera.client.luau b/src/StarterPlayerScripts/ClientMain/Camera.client.luau index 33f6d40..e80363d 100644 --- a/src/StarterPlayerScripts/ClientMain/Camera.client.luau +++ b/src/StarterPlayerScripts/ClientMain/Camera.client.luau @@ -1,3 +1,6 @@ +-- 俯视角相机 + + -- 45度俯视角相机脚本 local Players = game:GetService("Players") local RunService = game:GetService("RunService") diff --git a/src/StarterPlayerScripts/ClientMain/CameraNew.client.luau b/src/StarterPlayerScripts/ClientMain/CameraNew.client.luau new file mode 100644 index 0000000..cdb25ad --- /dev/null +++ b/src/StarterPlayerScripts/ClientMain/CameraNew.client.luau @@ -0,0 +1,33 @@ +-- 简化版相机设置 - 只调整初始镜头距离 + +local Players = game:GetService("Players") +local StarterPlayer = game:GetService("StarterPlayer") + +local player = Players.LocalPlayer +local camera = workspace.CurrentCamera + +-- 设置更远的初始镜头距离 +local CAMERA_DISTANCE = 200 -- 比默认距离更远 +local CAMERA_MIN_DISTANCE = 25 +local CAMERA_HEIGHT_OFFSET = 20 -- 相机高度偏移 + +-- 设置StarterPlayer的相机缩放距离属性 +player.CameraMaxZoomDistance = CAMERA_DISTANCE +player.CameraMinZoomDistance = CAMERA_MIN_DISTANCE + +-- 当角色生成时,重新设置相机属性 +player.CharacterAdded:Connect(function(character) + character:WaitForChild("HumanoidRootPart") + wait(1) -- 等待角色完全初始化 + + -- 重新设置相机属性 + StarterPlayer.CameraMaxZoomDistance = CAMERA_DISTANCE + StarterPlayer.CameraMinZoomDistance = CAMERA_MIN_DISTANCE + +end) + +-- 如果角色已经存在,立即设置 +if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then + StarterPlayer.CameraMaxZoomDistance = CAMERA_DISTANCE + StarterPlayer.CameraMinZoomDistance = CAMERA_MIN_DISTANCE +end \ No newline at end of file diff --git a/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/AttributeLvupShow.luau b/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/AttributeLvupShow.luau index 65ccfee..b5f339d 100644 --- a/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/AttributeLvupShow.luau +++ b/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/AttributeLvupShow.luau @@ -9,6 +9,9 @@ local JsonAttributesUpgrade = require(ReplicatedStorage.Json.AttributesUpgrade) local JsonAttributes = require(ReplicatedStorage.Json.Attributes) local BattleUtils = require(ReplicatedStorage.Tools.BattleUtils) +local Signal = require(ReplicatedStorage.Tools.Signal) +local showTipSignal = Signal.new(Signal.ENUM.SHOW_TIP) + local RE_UpgradeAttributes = ReplicatedStorage.Events.RE_UpgradeAttributes local LocalPlayer = game:GetService("Players").LocalPlayer @@ -68,10 +71,14 @@ function AttributeLvupShow:Refresh() if nowLv == 0 then limitBattleValue = attributesUpgradeData.battleValueLimit[1] else - if self.Data.maxLv then - limitBattleValue = attributesUpgradeData.battleValueLimit[1] + math.min(nowLv, self.Data.maxLv - 1) * attributesUpgradeData.battleValueLimit[2] - else - limitBattleValue = attributesUpgradeData.battleValueLimit[1] + (nowLv - 1) * attributesUpgradeData.battleValueLimit[2] + if attributesUpgradeData.type == 1 then + if self.Data.maxLv then + limitBattleValue = attributesUpgradeData.battleValueLimit[1] + math.min(nowLv, self.Data.maxLv - 1) * attributesUpgradeData.battleValueLimit[2] + else + limitBattleValue = attributesUpgradeData.battleValueLimit[1] + (nowLv - 1) * attributesUpgradeData.battleValueLimit[2] + end + elseif attributesUpgradeData.type == 2 then + limitBattleValue = attributesUpgradeData.battleValueLimit[math.min(nowLv + 1, #attributesUpgradeData.battleValueLimit)] end end @@ -115,6 +122,7 @@ function AttributeLvupShow:OnInitFinish() if self.Data.maxLv then if self:GetNowLv() >= self.Data.maxLv then -- TODO: 之后做提示弹窗 + showTipSignal:Fire("属性已满级") else RE_UpgradeAttributes:FireServer(self.Data.id) end diff --git a/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/init.luau index 046fa9c..3f86502 100644 --- a/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/init.luau +++ b/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/init.luau @@ -39,7 +39,7 @@ function AttributeLvupWindow:Init(UIManager: table, Data: table?) ["__moneyCoin"] = 0, ["_btnClose"] = 0, - ["_btnBgClose"] = 0, + -- ["_btnBgClose"] = 0, } self.UIRootName = "ui_w_attribute_lvup" self.UIParentName = UIEnums.UIParent.UIRoot @@ -77,13 +77,13 @@ function AttributeLvupWindow:OnOpenWindow() self.Variables["__listSpecialAttributes"]:SetLayoutOrder("id") self.Variables["__listBaseAttributes"]:SetLayoutOrder("id") - local bgCloseCon = self.Variables["_btnBgClose"].Activated:Connect(function() - self.UIManager:CloseWindow(script.Name) - end) + -- local bgCloseCon = self.Variables["_btnBgClose"].Activated:Connect(function() + -- self.UIManager:CloseWindow(script.Name) + -- end) local closeCon = self.Variables["_btnClose"].Activated:Connect(function() self.UIManager:CloseWindow(script.Name) end) - table.insert(self.Connections, bgCloseCon) + -- table.insert(self.Connections, bgCloseCon) table.insert(self.Connections, closeCon) end diff --git a/src/StarterPlayerScripts/UI/Windows/ChaWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/ChaWindow/init.luau index 58b0f33..87c1a8b 100644 --- a/src/StarterPlayerScripts/UI/Windows/ChaWindow/init.luau +++ b/src/StarterPlayerScripts/UI/Windows/ChaWindow/init.luau @@ -4,6 +4,8 @@ local ReplicatedStorage = game:GetService("ReplicatedStorage") --> Dependencies local UIWindow = require(ReplicatedStorage.Base.UIWindow) local UIEnums = require(ReplicatedStorage.Base.UIEnums) +local BattleUtils = require(ReplicatedStorage.Tools.BattleUtils) +local Localization = require(ReplicatedStorage.Tools.Localization) --> Components local WearingShow = require(script.WearingShowOne) @@ -33,7 +35,7 @@ function ChaWindow:Init(UIManager: table, Data: table?) ["_tmpCombatValue"] = 0, ["_imgIcon"] = 0, ["_btnClose"] = 0, - ["_btnBgClose"] = 0, + -- ["_btnBgClose"] = 0, ["_btnRecycle"] = 0, } self.UIRootName = "ui_w_cha" @@ -49,6 +51,10 @@ function ChaWindow:ShowDetailData(uniqueId: number) self.UIManager:OpenWindow("EquipmentDetailWindow", data) end +function ChaWindow:UpdateCombatValue() + self.Variables["_tmpCombatValue"].Text = Localization:FormatString(Localization:GetLanguageData(1020), BattleUtils:GetPlayerBattleValue(LocalPlayer)) +end + function ChaWindow:WearRefresh(data: table) local newSlot = data.instance:GetAttribute("wearing") self.Variables["__listWeaing"]:RemoveData("slot"..newSlot) @@ -58,6 +64,8 @@ function ChaWindow:WearRefresh(data: table) data.wearing = newSlot self.Variables["__listWeaing"]:AddData("slot"..newSlot, data) + self:UpdateCombatValue() + -- 关闭装备详情窗口 if self.UIManager:IsOpened("EquipmentDetailWindow") then self.UIManager:CloseWindow("EquipmentDetailWindow") @@ -74,6 +82,8 @@ function ChaWindow:UnwearRefresh(data: table) } self.Variables["__listWeaing"]:AddData("slot"..oldSlot, self.Data.Wearing["slot"..oldSlot]) + self:UpdateCombatValue() + -- 关闭装备详情窗口 if self.UIManager:IsOpened("EquipmentDetailWindow") then self.UIManager:CloseWindow("EquipmentDetailWindow") @@ -117,6 +127,7 @@ end function ChaWindow:OnOpenWindow() UIWindow.OnOpenWindow(self) + self:UpdateCombatValue() -- 自己进行数据处理 local DataFolder = Utils:WaitPlayerDataFolder(LocalPlayer):FindFirstChild("Equipment") local data = { @@ -165,9 +176,9 @@ function ChaWindow:OnOpenWindow() end end) - local bgCloseCon = self.Variables["_btnBgClose"].Activated:Connect(function() - self.UIManager:CloseWindow(script.Name) - end) + -- local bgCloseCon = self.Variables["_btnBgClose"].Activated:Connect(function() + -- self.UIManager:CloseWindow(script.Name) + -- end) local closeCon = self.Variables["_btnClose"].Activated:Connect(function() self.UIManager:CloseWindow(script.Name) end) @@ -177,7 +188,7 @@ function ChaWindow:OnOpenWindow() table.insert(self.Connections, addCon) table.insert(self.Connections, removeCon) - table.insert(self.Connections, bgCloseCon) + -- table.insert(self.Connections, bgCloseCon) table.insert(self.Connections, closeCon) table.insert(self.Connections, recycleCon) diff --git a/src/StarterPlayerScripts/UI/Windows/TipsWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/TipsWindow/init.luau index 379d172..632d139 100644 --- a/src/StarterPlayerScripts/UI/Windows/TipsWindow/init.luau +++ b/src/StarterPlayerScripts/UI/Windows/TipsWindow/init.luau @@ -5,6 +5,8 @@ local ReplicatedStorage = game:GetService("ReplicatedStorage") local UIWindow = require(ReplicatedStorage.Base.UIWindow) local UIEnums = require(ReplicatedStorage.Base.UIEnums) local Tween = require(ReplicatedStorage.Modules.Tween) +local Signal = require(ReplicatedStorage.Tools.Signal) +local showTipSignal = Signal.new(Signal.ENUM.SHOW_TIP) --> Components @@ -52,12 +54,17 @@ end function TipsWindow:OnOpenWindow() UIWindow.OnOpenWindow(self) - + self.Variables["__goPanel1"].Visible = false local con = RE_PlayerTip.OnClientEvent:Connect(function(data) self:ShowPanel1(data) end) table.insert(self.Connections, con) + + local conClient = showTipSignal:Connect(function(data) + self:ShowPanel1(data) + end) + table.insert(self.Connections, conClient) end return TipsWindow \ No newline at end of file