From d0d80bb9ad3a1bb920aff2561568817f550b4833 Mon Sep 17 00:00:00 2001 From: "PC-20230316NUNE\\Administrator" <2858626794@qq.com> Date: Wed, 10 Jan 2024 19:09:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Datas/宠物系统/宠物装备/锻造装备等级.xlsx | Bin 11688 -> 11680 bytes DataTables/Datas/常用/资源表.xlsx | Bin 10016 -> 10161 bytes .../resources/config/json/tbgresource.json | 12 +- .../prefab/ui/主页/野怪/野怪列表ICON.prefab | 10 +- .../prefab/ui/主页/锻造台/锻造台.prefab | 115 ++++++----- .../ui/宠物装备/弹出锻造装备页面.prefab | 8 +- .../ui/常用预制体/宠物/icon/宠物ICON.prefab | 181 +++++++++++++++++- .../宠物/icon/选择宠物展示ICON.prefab | 2 +- .../宠物装备/icon/宠物装备ICON.prefab | 181 +++++++++++++++++- .../prefab/ui/常用预制体/阵法/阵法节点.prefab | 4 +- .../prefab/ui/阵法/阵法选择页面.prefab | 2 +- JisolGameCocos/assets/script/App.ts | 8 +- .../assets/script/config/data/schema.ts | 6 + JisolGameCocos/assets/script/consts/API.ts | 27 ++- .../assets/script/data/PetEquipData.ts | 37 +++- .../assets/script/data/ResourceData.ts | 4 +- .../assets/script/ui/Consts/Pet/PetIcon.ts | 8 + .../ui/Consts/PetEquip/icon/PetEquipIcon.ts | 8 + .../ui/Home/ForgingBench/MainForgingBench.ts | 27 ++- .../script/ui/Home/Sreeps/MainSreepsIcon.ts | 15 +- .../ui/PetEquip/PetEquipForgingPopupView.ts | 8 +- JisolGameCocos/extensions/ngame | 2 +- .../src/main/java/cfg/TB/TbGResource.java | 6 + .../exception/GeneralException.java | 9 + .../exception/HTTPExceptionHandler.java | 6 + .../game/GPlayerEquipController.java | 74 +++++-- .../controller/game/GPlayerPetController.java | 14 +- .../java/cn/jisol/game/data/ResourceId.java | 2 + .../game/entity/table/EquipForgingBench.java | 44 ++++- .../jisol/game/service/ResourceService.java | 15 ++ .../service/impl/ResourceServiceImpl.java | 47 ++++- .../vo/pet/equip/EquipForgingBenchOV.java | 3 +- .../game/vo/pet/equip/PetEquipForgingOV.java | 13 ++ .../src/main/resources/json/tbgresource.json | 12 +- 34 files changed, 764 insertions(+), 146 deletions(-) create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/GeneralException.java create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/vo/pet/equip/PetEquipForgingOV.java diff --git a/DataTables/Datas/宠物系统/宠物装备/锻造装备等级.xlsx b/DataTables/Datas/宠物系统/宠物装备/锻造装备等级.xlsx index db4a9f56f2f23ab5327e5e3baaa6acfde0ce9e86..29cf32fb1cadab0a34e797f07e5f449e4a2139fb 100644 GIT binary patch delta 3756 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 delta 3755 zcmZ8kc|4SB8=g6|NJExVjY!(8r8A9e$&xIgD6&ln8B8+_V`=b)B80=pWJEcNkbRvP zk?h&C%s6(&GQ*Vhkoaa$=bZ1K_xF45=U%Sox~}_=_m$OKtK3-dj!py0q$wdDEDjib zJbSQ?b+V$m<2zD?JMWOBK((Hrpd)O6w8V9wB-<%7C9oZRriLS5dO;(@YPyzMUVnjKEQb2kxM6dD+MI{tRIfXs6@Kl zdF!QJsG*;yHNA_V2$DKGcI_edKqp^~y3MZCTtEyNL%A1CE?UCSCT9!YAggWg4h1%O z85u@h_hIGgH6@)*ne=qq)M*QzOM0?9gm#w77@mXHd1EZ1_WOK`!m zXb=$EuBVIC-6<7%OZ$*gza$#0H|qDdcnqe1hpPb0=VSXYrkNK6a=r)x9Rv|vG&XZsP~mLpZztB`{SgkLao1|=7x2bN)IT0(efXPQ-OpWL_It{zKGQC<0Yt;JOB1#8!|9*?E?w5zuTf0J#u=>l_unnZj9eO}>(!M}Tg2?MZiSQDkm(PQ}D>t)fc6$r;BRFb12wg?8Tx%m}GS59`f}G)R^(IE=O#$I)=A~g=BY{1m6aj7 zM{Smdf)jDWy3yqo-sAlZgV$?crYNt^`%W{HTH;=IG5uX`Tvd;`m2mKxypsu?YG%VaFgNcVl#YXczCNF+M8b3Dz6)klp&yYwZt%~?vx4>nLef3*EU zEPi1T9l16mSjMQqVeUPSis?kVoo@-R5i=%sQOz0s}73 zLr5QzS5!!t_BF0%FC-#mMXZ@0>90L6M0(l27D#`IMAV1Ag->V}m!q5L-S??FP9@{2 zJ*TV?VOX7U)~Q64qGfi$sy1#W^ueso6TN8xHI-u#kaSJ=nvIeEI`h0F;7=bnjr-Jj z=QMeHFGevl1t`AEy-{b-7eOa_4kk5Cpt(O3?()>0*7<6HM_#!qqyOyt<3YD6ukr!jtwWa7h02n>GA`nU4s9LEOr zR$58aY5$BAw{MgSlVsINGFC05>cnjOPz`n(7#c`C_GaY1RB{;=Ugq?^#MWs8Hq%&B zY88ul+lX6qvKf%Sx_GBBJ1D6sC`qQry;L47ZeuR+4naKC9UFGf1}%l1T^7Q~q$)q| z5MQtsTd*c4RWHoZ$B?TdHps*Q;>G=1Qi!t=6ArUg;e`c`YJy~|L3trcfRjDTEE=mMtW>4koZ#y7QqY!Rs6$Pf?7Zv0c$ha|pf|r} zxvnRxWVZvJWF#cLi@F;{y~`Ly?Jv()Ye?mJ7KGw1M&$u4x8glk)FfEvqecz*Z&t;< z3m2?*yhF7o1e*xcp%iO?-a6CRysYI z=RHRn zbJnL7BaR?7sm5OqZ-$hQ%TwLi=No+4gcH0H04I$dv(*x6OyzV5mb=0ySYG&kW^>uh+1T57bx4Yw#2 zaYrbCS{RxVkL@8eCHMv7e7H_ZZZ!C$`)~$^6q6y?KTp2wu}0dme6~&^cIs2 z2nIA~@&EEew&!tZtoUXrPPzu)^dDQ<)#LI?ga4N8lp7Cp`yS5J`0P>x^3LKnyZ|S1 z49hOqd0gH?k&q67LIb|hDwhxc6VLu(4>Fv5pDudWlwb?lPbh-$n}auB|H~9+{_nHY z6Zl{8IH*^-YzhzkW7{^U?wN}T{IzLwO*Bp8x#98@@s?e7tFA_w3RS@hQ~SA&Qoy1k zfo@c8cfCe_!d^aIz^c?A%s0HxL7aeC33m`;+o%H?(=~S1^$B~PwIW-`s}HpDNx6Pg z+osdQ=$Z)?pHbUd5QQm716!##o1#MS!kbD!HHBt<-M6W}uRRij`)PZ&hiOkfoj`4F z24@E^+aaKbaw2?xS(=?rGuEl-DPQ1^Z=i7rTGC3gCdfx(OEb)28h4|FY@Y!h;3CmfTvhm=>g?BR&SpNW;5aJVU5Y7@MJ|f7ug%Y*c>c za`q+;*E6cbi3z>|!%3392tbvP=~b}0a%g$&9sVTt_wR9(`1>E^X1yXDJY|fF5(~#_ zN^tyjaWlRYDSXZ4+dX8}z1BY%MoA4VV-_C?ak5`MDJ_}6?(_?@xHw=C1}`uyrXbeL z#eip-c#2JZXV17+&qQy3e2YXWwtP|SNUEcdXiV{<$Uwu}zmKDg_*HK`QdCatfd31rP zA%3*j4N|CQ*pcTmtr49(R73FIC%iLoIq!&Xywi-;^Wt-P{6~)mY@E6M_r;5WyGCJP z$y6BeV+f-4@x#z-I@WvryaB8zYEhysIPA$ule6MR&x5)0$pJ<1%8LE8kURw{SX23_ zg+9*s-qqfO-_uQ;nQw!29mCpn>z>BLH2Sj3LQEQWa3_C${B8ImH+g76Nd+}=@%SzG zK#1E5ftv>p1zv|tXEBxYLn=U$q~10$ZSIhB(R(#ZX7@Y2R!fJ*$2ZPvM?_1M8(ve{_~26rziobJH`EcZO3yq;c#4w}NevfG zGsyVva8vaeKk;^}x%inLL(_t6}0_t%Ki>u0wt0!B_|XSft6@;?N+TS@=` diff --git a/DataTables/Datas/常用/资源表.xlsx b/DataTables/Datas/常用/资源表.xlsx index 061efbd3652ae6f6dbbaf29663ab547339464036..746e960a6ff6d20d4a9f040425183c0bb63bc798 100644 GIT binary patch delta 5806 zcmZ8lWmMGP)*c21kOt{)L~1~~k(Q95JBMzDlJLh615yHmh@gP9AcAyCgM@^%bc1w= zG_U^ed)NEk`{h|@?em=TeAs*KwV$1%{rPD{Dh6bOOGFrkeuKdTJn4i|_a1~F==gY| z-8|e1cG~*1iLedHJy|YlDQ1P)M?F**+t3Rk#EYt-L}UJ?46(gycf$g$A?z6*CxgLQ z?%yA4lMvz_%O5|^_mNSU>YHO?88+sG4B*|nUyT`2c(kqFW$+cBP{ZQEh$v)LB1M?R z=zjHQ!zgOHFUYrVfHskQe50tLH+~u|J+Vi@wb*lP@EAmeCUn3Ha%!NV6r8`rrz^Ad z5gRv=C4xR*BpsXl&X;d%?)q7dw&XYI8maY#>Z!d-h-XJ_i-@xs?|{&Qs~Xfv(Ye3( zGXuGar}iQ|L=O_Nh#RmS@EHUgN%wh6N9_lvqcV>lLcG7k>9j6n$y!;-E@ZP^OZgW6 zXkJDhzSWpcXG+Pu-DQ1~SFgI&#-*4|KqiT|EzZ97sqtznWPQ?YEjR*r(efx;Cp#tb z)ODp^Q5v-JFgSu2?7G$kbywdAoL+8Es&6IhA2@Z>0PXIX~pcm z!WivxdLpBINLJO5c}3SQsEZLDrLK84<~ghtjp}d58C~@KtvP(XO+$Ts`{e!(dQDkV zOmP-rTB|HdYSEKf_dXO5yP2pe3y;dQPah$q`LUQ^0ld7ub*(742>#3&X+mP7N3bVi zH}iRiax^2~23Q`6cgwL?J`si=iUEi?Uan=*Z5A8Y14$;s$@(s_Nub_GE`Qrj2NwmswfK7q;V1~54`%}dUH^vX@3jS^H?NY*eu zgh4YB6)At@A&rqca}0!Of`hD9K|EZg@AraxZ@YG;M_An$Z7ccW7b)?rsMuLZ*)&Mv z+`UPgbuWhqH^WS&8=*^roiW|n?9A#y)xDNO^IV&*(Z;cn)9&Vf@p_fFI}ytwuL z2%@)^RZ#3e%TV;;1nGkvyguhD)zT9h@Jh8m<5Iqc67uLTItW{V0)3C18fM)wX6)+GHGMEv4he zcZ`FjvDn@L`{s$d5|2}_RcHu(8f$W5!Xk5;+v~_<$qTzozVc)T%pJ*}lZu@ch@66R zdBdJ3nqvM&M;lRc8Q_<@k?QmPu#fYe$knS&*XJYZr_^(A_oS6QrNJ(u9^?qS7?*Vf zV!zI!R4-J?U`k5U2m*d+eb*9Rge!puw7%OK+0KCdn_AlXFsA)J_Aqs`^%9TrE?1Wk z9yG?(JEE9EG{zLBV4k$0o!wkPvyxxCgmS)8S*J$)p;`Q$li)>O zx4xNE**B3X<&NA|Rh+OcLyYD$*J1kh=wnP@eL-0wkzI}-@0)ibtJ!f|q*3O3g zlv>*EFdTVc6r#vW#@%#=fF0iHn;PNXy?PmC)fv|^}S0N z5vl}P(7>K02o11)`b12EeTN0fabX8ye`}DpO4kV!4 zW5Kh=RE-Syg6QSh)rkE$ZSk}HuG`Y*if&^PV-y}G$+W3 zu($K)&E8t?)T8{890vvB#G+m$QKYt{VP5vHuQr~4bK-n3cT%3(es%B0ld${+uCzuq z{g$6H_ZT35E4?3H@sfM6zaxGv?p!V~7H4@x8b$SZMP_7V$Z6;p>JSnNulNuH2IlAE zN=NU|HdwS(Kku<(0~y;%OH+6t5S}3jLEu6v9>Xhhh&?pY);-In$2zI ze-SRS+b9!UzeoxAcN)9C==drYEi>jFZD=N4tFkgtb^v%H)|jLwe_;+BL#zeqYq~KP z<>rbfROT^VtrI8b6{bRb9VEK zqgOoNwU#-2uLndfccaT+THF=XEaAubs(8E3G4#Q1SBnO3hm6PaDN-eFU>j) z@|21BS$Os(7?u{emNW-l_$8H>^0ff(!)SF!S>DxIL5{u!wHUniQ%1*WztXvl9sC%# zj(U?~^(3A9q9BqcASrHmL#5BAaP2jj!;|OSHXfAb(H$yzCO-e%|3f^|S3jB|&^s-d z{D<+Exxc7+TP6|asEM#Ncv>7C0d`Z@^4$zw*S?s;sUB^CO$`Y{4 z2yYU!ehH32z4~;}X*)XUFf96e{{42F4PS1|b5f3vZ`zNI%}$A}pYfPJg!X=+`$RrI zqR8@l(D5^oanzuy!Z)>nK}SrxN_Pyp&)9DWG$tSE$@Onqj|s8T4oSK3Y!OeK4%QFp z!2{j1n0b0m$OQn}?Z^PuUZRg#GK^hbiK;4J_rsOD__9&h*`|8v3{wkdEZJcmsmciT z{t+{{0gERtcWektKCTZcDc2a409TPNPas#8rQ;5NE2>K_;9@t-(D@jM?}et2D?VJ# zn|Ay@IQvGuxDKafPR^b|uWZX5$LIy-6p9&hjGf(Y- zP6hM{7iLI#i8=2tVTl=V%Q|FKfoXaBi=dzV`$F&#O0PBT()a7(w0T19u5`?pRLg13 zbg|uKngx{fDdQzcvBlv>&A1Xq6as}GaQVNL0V{Yx#`+NugzRS{mPz)*5q@5s25aHm zAs1?w7=9R@ZmV=bG2ZY4gOZ|RR-z!1rwVAjtfKEF%r5qnPWB%w+cipqE9x4ABvW|9 zcsV{>>~`<1s55mS+{hUkQJDZ=(m^5@%V96p#=3OF8XGMq4f551({hJ zUb)I^hpaUqnhP+A+s%UxQst7cGl}K-Xhg93gRM>M<&@B{W8fT;5f2LAed14g1j-_1 zmsb!<4@XlJs+#J6_}m6`;QsmR54^h{`Uroc@OtOht^5;%AE7f{EaR|CR8>!ax3#xh zEB@^I{CZg`b*ts`UfbDK{ikoFb4@3EW5MX(3-3a&n_>u{D#^>9eC&NgcPC!Q=VdV< zmgKMP<%XR1hJf2sf=JEQm?(L-2ej8&)+r8;x6kmmjgp0hjoH2*mO85U%ge-K6TZVG zeE!loaicZBkx3@=_Dq2thY*gdb$FBHRAjZbU;af}E>yM&2s%5G+Efn`?qWVYcaO^- z+-|*-mAYUiiwU}l1abbf5wlKNxgK5QWO@$0>Fhg21Avlm@txKv#L8UFN%H0tem29z zhS!WMpX@ac+#VuyJc6!RcnHg?VJkn)L$Fq`0)^GU)s|YMeRIW8O5V5qyee>y>BqVC z>&P!mY%l2Ql5iObC+vC`8shxpOT4d*H>=i2yR?RhfE#i|?gJ}~Fi{PN7_c33Lx zs4wrTYFJhRxYGceLBqWSPrzoNSF00LzR*m&hk#W}3u+!iVl=A|L&*F3iV%42C?VlqfJ+96Y0z4HN%4~vM4vRjagSmVucGt`8Ii>at7v=Fw-?Yvt zda~vzfvTqY@c@59`!Wvqx=G=QlJf0ed+%x*CubIB1bx+$B|RU*M^tsi65)HcOsua? zGZ;g7DLB{Q?sjW!n@?IsrgbiM)=bUvwZXq&s7d*~B>-?!awiA6{C4hiG%&Hq|4hKR zplIzCc|Vg|2p$*&TEPT?{zm`K#ZERp_HaF4A7>B8f5zh$^i$6rN1g&`?u1H{B!U6?Q~-tEuR!>t_gNsS}3T2NoIhK>)Dr5`KGVE(;T;ZU|Gatuht z)Ad%4WxMz-Tb`|YYv(5C*PnypuClOw9I6!oLN}XLsELEk$mMi^Y@V*a(<8Nv9+%J?!x z3YuqiySnmmFE!H#)bTCG$TSiB%OCi!zY}ncHPpgkC@SODP%fL3YjFcfQEzAPL<6a+ ze+IMn?cGLH!G#aLIBQzO-2!D|y~QAF9HmJbH{RlhkHWK&j#2S?&qyovVU<9aCHr-# zJiW4-v!_W8W{wRc+yP@aSQ8H!|=Uw`pD(;oi$m!*x34R?vUe&#AVu-T-=! z{vqImiKqV_t4vqVz&Xw1DH?~<7(zGWke_k3=%~0AEvY4KvABwOdGOlEsHhR#8k3Y- zMI!l#4%{J>rRPtuJQeD~$C89sMQ`*rnMC&fz4F}QY(oaBr*aYi*fgwSr@HkqYy;!!C1ZMHq94sZDl3amVs^Xs1b_Es^J>fvuNIbi=t82$NGpkzE zD{ZT^>SU-XMKx>md)Bbb4WcQ@13idBRKbrm{bcD##NKgYGnf%8*L@|;@NzPHmS1U9 zBl-7Zslp$a9PdK96YwSbeHLWCo4;c56}X8?qpc8#WYj2_{n?o1csfFt@P*X0v@Q(z zWg?rtA>O#!v#_OfYJ#QD)TOn5if3nxD&4gN*#+euOn>sEUd#6=_{rx4AzVI~HtRW? z3n)|mnLpWaF!24q`Rf02ap!2p^@$o5tJBuKuPJYVE_r~Zsy|m z`|f@2z5AcN&%59CuIH?^_j%4*Up4a8Yg2%jK_v}AI?znuGl)8zhrIWIxxIV*#{LoC z*E#v;kx)iPOYm~mIXdZ#t3%cMBDWPKxAv%mBJrptEYO&*GYWNoy_5d4J9Xf_0*?T@ zSD1ZNKHwXxbtxGREcatK5Vv~G=(u$>F`wT6teTKusl}&7o{?3EvBp;$%Hl96o0(tY z$<#d?%f#v`0%v}kNuDP1e4egkmVOW$`U>!Z zXFXq19m9B8$J}y*Ufp^(>x@fT3n@HlfAJ%bTj(%{PSWtU=V5>y$<-0AdkA8#b z6uxBBS#Hqm#NY)7 zGk-mjsuL~DF4#7TcSuxIOds3uwqIUShn%W1*mc=b^mxfcZn!09ODLf3U(Sy2a+(pr z@eXVIqc*a>p7u4IxT_^Y=o;;n1$gQT4WIH{z6|(&0%quXP0sXn>FpKAv-0Us}uS%>V^ z^@ngBEC)xk4A1w1IY$_s1sz}LJ+*c_*nZ;vN!o*3i~1|#`5O`f3&@sT%aYLoxDl>K zC|4r6U!XR7DP{*gLMP2A3N;9=8luHdBh*RaZc9p<8a-WPa9j0JBPYzdiFQ806)-rg zqvOS)FqE#(z;X*CQ${qoKThdxdj!0o2diOZOe0;hT`kZ@;H4AaeX@5+nDg0G{b{N$eu!d65Qbczd{qqAHIYctU@(Mk*tp1e$=G!hU}Va-BP2{0&6RldNv{HWvxX154iN(MV%(^ zA59folO(~~W1rcXmAe9xu?41LGSxqA^_V;r8_QYjtzf)nI?CHM5%-Baq()-GRl@Z_ zUkI1!Oz2wWAihzDv`BQgLbwJfkI=tXw33dNLpG*hohfoPjeGz!8>!B^05nxG@VvbH z?33u|J2T)jTg5&3R{N`&eq46!dl($`npX=qbxw!HR`_ipk*89Vx?!$%zs_}mc6<)K zsDf|k;Zr0D+$sDOhz#ULxJ=)wa2aw)h$MpBh3D!+x@w6zn)SDPYPD=jqBzf_B;+LI!4&GFN; zoM6yl8V`}+O_x=XcPE?6B#iqIH)&#( zbLeeZNTi*UvHg%0PGr|-2Rq+e)4@j&)5tQS)eU1^Rj(g^Bly?O_x40p;EG=0Dz0AU zBp=U_D~2?nsrdV>XM-*G!%{GQo*D$(C@`NlIdu9sRPaG4PRj5J+>Hl{^^%?ZD2863 z-LIfP5b>4+vKwsqx*4P<>N8$Qu{Stgi@$sKH}bcWOMkt{NAV=TQqd1 z)Jlq)T{-g_-Er`a3lyO75v-`x5PctoB9mMj>z!Z)s0Lq z)i-Nz-6W=f(IeQfc_S0*GOc+$vBbh0AC|U*znd0l|K#@$72qV*3AWptS_<7X7U630UwLKq%U!SpcHkB0wsjV! ztEqeBFIHxy;a5J*)*jSLKj$z&wewyJv5PHJvGx&5N<|=9`}O5u)f>Tzf!E|-3p-&{ zjU@+4GwqPQEDvM<2x^owCgf(HihAUpFK z$2jMjS5&JHM{G~_AsR|Qdez*W?0chiIYkszO7z<@N$Q2Dx`Z8aCOHZuCT28f2 z&6%_{0BJ`LXJTP5_~@*1zpt($pjJ+)s}*z+-FJ%W zNwuYFGA9KtG%8%qRUF>(kpz|rtY1`TpM|D#I`ft8-`Fw@b-KMBiwOveqy0{&Z;LVQ zJX4weD7(*qnArPOBjO%Q>W%BMeVK4LGGPtYU#>sX9|9V7uI>hj*4~BUm=$kbP9w$f zq99oA^^(zsI9~>v{bw2<>wau#{ecmgyW23MVagr#%l#<{KMvaejKx}TT= zjK#LNlm4Q0z_D%4SzywrXw04x2J^kqt%V>aseWZ)xw4)_dI<;949!$c$?Li}MhYLi zj@jjA9ja_K$w;~@>5SXu#mdFIHOcdoAm*n$W9t5A-x~6QXQCqc zO8=$m825KK`SWzNf2d?&jF73g68L{eC@Q$B8y~X4r}w0#7IMlYHz-tz)tG{8{^&ik zkLk{^4HdGx#A^-mFy6)la*(=IzoT)Qp)%m2*0YScget&qy<%SO zhn;V->eHo|#}J;}G(qn1irt==y@fY+lNwu}7AcaNHl3e4T;X|~I85S~xaxd2$~Y-( zSQBh2jH~;hM-nR?%@`{cje+|xb1}#ZFqnen8MQd%88vz28Q(6Gw=9E5uZhIv6`x0x zuUPGR+LW#hkr2vev1^0%$~pgN$t%U~WiWFHj-Q1+f=t_d;;ebyR*8E%1;6fKH9tx~x|5WoPEq~bC{ZROApUXpW5HXrtJQEk*jsuH<+}5W zB^jb`+Dph+Je}<>jzCwn|{l*50J!hI2V_BcmyR!#)(oLuEEQdf;Sn+ z<4<#nSXG3RAzYrg$`C*G0@_?p$BInp9Kp*jK1{XYW4_d>N6C7&k@_3YsamUppPUP% z|5VV!)GWbUm@{1bgrcEzl+Zi@${DLa(*;|GbSDePVBxqMsI%~g1y1rnE!)vdrG?Tb zR3NiL-5!SX*Bh-IE)kxs>#q1JQ+lg^kXXhx$H_9EsJ2q3Rb1D#nYo2b(;9Y=4=luc zKP6EvNY!JF;nYc$xF)^%_NbG(Z$VFb2glFFKBbrJ1qk-2EL^xh7#tu8xLpw4euney z*bFu456}My5YD78U+5fW1vH^S5=ar-@q(^2G@abFs{x}#U*HT5oh)ZZ?V5*K4Rm<{I~U z%cE(>!Zs2ou#f~KXr@ZmbxM7TL$jvOZzr6ANuDA0#N2n}XYQtm8ypwnxLkuTyH^bc z5(j3Hmu~N|DH@Z?8K_3E@|9(j=5JPh&)1p z7b%3eoa5Dva$baDU$h6`o8M-e-9Y#^Y_+U+9nW(Oy1+YvVjpRCu`PUg@sSBN|34C2!#Ic5N}bd^|GK&NCGi*dC+gePC?`o)(^&pt0G#tGfz5>k;~d`{m4 z_DI;oj+2$GfE;yQ2E!kNfD57YdXar&^*y*FpbSic7;4nn`lZElxF;G6C$w*Uq6OL^ zN-1%9cX{8|59u{ysuSe~(`(ZIF0<~BCPbFtIQbucDe7P1w(|6P{r)Xmpre>t_fgSi z|CuNgn4amU88yqyiSuZIs{n1rb}@ zGHJ;iq?22~8&`^PpqV74k!}fI7RG50E39~eHE&*;vgTy4Xd;$+XkuQbp@pOG@E_@6 zTib{VWM)C}#~z|Ii%8T*($`TusChi72|0m;{zuK#Rxg9H@5y83J`*Xu5KApRNfJG} zb?3imZoMwO-OGCT?G)Xu!X(ndi5i*=NbiOX2k*TgS@NrJs?cm-oe@~}{Nj=H|TdNRfdw|v5|>JOYQ4`@_IOJ8rv>cP4#oV zBkYv@0@RT0_&u4eu=kG_rV)&ZBRB1V&kmC8cMP-gX=mhFDc0uYqY2aTr-8>6@F zhqFq52^HfsQ$%Jn+DKbYYQDi)en(VPL#)wqdyl)=1?CHrmwcb!>m?f^Ukvy$9V~Vj zsSNEx!PcC%Y|26wKQsBn=odUa_xOg7T215O~ z5nY7#jlz|6a>vl3{RpkvQop*IA*KiRGp^DvyR`?Uc0Pf-SkGph9}km>^zLunNTB!G znsE&yxYOWQEoA544qO5w#qN$+VlKHQA;5pr`fpZw()_rFpb#21NFM;RQZr1iqM{P4 z)>zh$PE<`vH82Vv={Nt@`bhcZqg#Sztjx#qf12V=p2HCUs9pLJ+(B0<5t$h z>jOb4KU+Ih-Jf>l$#zv;u0`pxub;f5&kZG9VGB#0R*Oy?V1I4JPlS)$C?&4@Ip1^~ zt;2xBr6U(zL*d~935ao26{04V7Lt=mVfv-ScC4+|L@Uc^VUT^QD@TR7rmI9Dghv8g z1ixz%@XMpXz+-QFQO+!fvH6pP(+^V=v|gd4o|3s>?%G1|gIjJ{WzB1fmepa3eYrWm zq?KTgh|`NiYUaXaq8oUly7hIu^s{U2HxaQ@`69RQu|J$Ekf5|DZ#=0dj)s>rWQPnR zC#l!fkf*p-2Jwc$+){S_mMgQaqr82F2(~3-_hfKb$I}swUB4Bh4@3Rc5k#|k$sA;9 z>9(E+P^hU}>+XeMq-U8yd$ydK=Zh59GY&F-%Abd>h4Bg3_F-pAS#mM@?~P^)<}ibR zgTSVg`x$hk1lOK&vn(p%(wsCkDQ10_C&@RcamkIv!|m0Lo5q~Zv43{)&i3t@YvVl( z5lE3IiE?J;d--aRU!C?NGf51f6SRXt5^aJO3S{I%yP$>gGbaDrL>*$( z0pdXEnIy3-9=d!FRVd{22HQ3S|-i%0ma3IH~{Vnxg{%54ZoH0R+%J%m RData(await app.api.get(`/game/equip/all`),false) as PetEquip[], //获取全部装备 - PetEquipForging: async () => RData(await app.api.get(`/game/equip/forging`),true) as PetEquip, //锻造装备 - PetEquipForgingInfo: async () => RData(await app.api.get(`/game/equip/forging/info`),true) as EquipForgingBench, //锻造台 + PetEquipForging: async () => RData(await app.api.get(`/game/equip/forging`),true) as PetEquipForgingOV, //锻造装备 + PetEquipForgingInfo: async () => RData(await app.api.get(`/game/equip/forging/info`),false) as EquipForgingBench, //锻造台 PetEquipForgingPetId: async (petId:number) => RData(await app.api.post(`/game/equip/forging/petId/${petId}`),true) as EquipForgingBench, //设置锻造宠 PetEquipWear: async (petId:number,equipId:number) => RData(await app.api.post(`/game/equip/wear/${petId}/${equipId}`),true) as PetEquip, //穿戴装备 + PetEquipForgingUp: async () => RData(await app.api.post(`/game/equip/forging/up`),true) as EquipForgingBench, //升级锻造台 + PetEquipUseSpeed: async (resType:number) => RData(await app.api.post(`/game/equip/use/speed/${resType}`),true) as EquipForgingBench, //加速锻造台升级 } diff --git a/JisolGameCocos/assets/script/data/PetEquipData.ts b/JisolGameCocos/assets/script/data/PetEquipData.ts index f6e052e6..9cc860be 100644 --- a/JisolGameCocos/assets/script/data/PetEquipData.ts +++ b/JisolGameCocos/assets/script/data/PetEquipData.ts @@ -1,4 +1,5 @@ -import { app } from "../App"; +import TimeUtil from "../../../extensions/ngame/assets/ngame/util/TimeUtil"; +import { TD, app } from "../App"; import { API, EquipForgingBench, PetEquip } from "../consts/API"; import { GUI } from "../ui/UIConfig"; import BaseData from "./BaseData"; @@ -19,6 +20,14 @@ export default class PetEquipData extends BaseData{ //锻造台 info:EquipForgingBench; + //锻造升级结束时间 + forgingBenchUpEnd:number; + //获取升级剩余时间 + get forgingUpTimeExcess(){ + if(!this.forgingBenchUpEnd) return 0; + return TimeUtil.remainder(this.forgingBenchUpEnd) + } + //锻造台是否有宠物 get isForgingBenchPet(){ return !!PlayerPetData.getIns().petIdQueryPetInfo(this.info.forgingPetId); @@ -26,18 +35,23 @@ export default class PetEquipData extends BaseData{ async onInit() { this.equips = await API.PetEquipAll(); - this.info = await API.PetEquipForgingInfo(); + this.onUpdateInfo(await API.PetEquipForgingInfo()) } //更新锻造数据 onUpdateInfo(info:EquipForgingBench){ + if(!info) return; this.info = info; + this.forgingBenchUpEnd = Date.now() + this.info.forgingUpTimeExcess; + console.log("this.forgingBenchUpEnd",this.forgingBenchUpEnd); app.event.emit(PetEquipDataEnum.UPDATE_FORGING_INFO); } //锻造 async forging(){ - return this.addEquip(await API.PetEquipForging()); + let info = await API.PetEquipForging(); + this.onUpdateInfo(info.info); + return this.addEquip(info.equip); } //添加装备 @@ -79,5 +93,22 @@ export default class PetEquipData extends BaseData{ return this.equips.filter(equip => (equip.equipPetId == petId && equip.equipPosition == position))[0]; } + //升级锻造台 + async upForgingBench(){ + this.onUpdateInfo(await API.PetEquipForgingUp()); + } + + //加速升级锻造台 + async useSpeedUpForgingBench(resType: number){ + this.onUpdateInfo(await API.PetEquipUseSpeed(resType)); + } + + //获取指定宠物等级 + getForgingBenchPetLevel(petId:number = this.info.forgingPetId){ + let exp = this.info.forgingPetLevels[`${petId}`] || 0; + let list = TD.TbGRoleEquipLevel.getDataList().filter(info => info.exp <= exp); + return list[list.length - 1].id; + } + } \ No newline at end of file diff --git a/JisolGameCocos/assets/script/data/ResourceData.ts b/JisolGameCocos/assets/script/data/ResourceData.ts index 7a48a85d..d80c8098 100644 --- a/JisolGameCocos/assets/script/data/ResourceData.ts +++ b/JisolGameCocos/assets/script/data/ResourceData.ts @@ -8,7 +8,9 @@ export enum ResourceEvent{ //资源类型 export enum ResourceType{ - Gold = 90001, //金币 + Gold = 90001, //金币 + ForgedStones = 90002, //锻造石 + SpeedUp = 90003, //加速卷 } //资源刷新类型 diff --git a/JisolGameCocos/assets/script/ui/Consts/Pet/PetIcon.ts b/JisolGameCocos/assets/script/ui/Consts/Pet/PetIcon.ts index 971d017e..1eceeb5e 100644 --- a/JisolGameCocos/assets/script/ui/Consts/Pet/PetIcon.ts +++ b/JisolGameCocos/assets/script/ui/Consts/Pet/PetIcon.ts @@ -6,6 +6,7 @@ import { v3 } from 'cc'; import { PlayerPetOV } from '../../../consts/API'; import { Label } from 'cc'; import { PlayerPetEvent } from '../../../data/PlayerPetData'; +import PetEquipData from '../../../data/PetEquipData'; const { ccclass, property } = _decorator; @ccclass('PetIcon') @@ -17,6 +18,10 @@ export class PetIcon extends Component { @property(Node) starNode:Node; //星星 + @property(Label) + levelLabel:Label; //等级 + + info:PlayerPetOV; onLoad(){ @@ -53,6 +58,9 @@ export class PetIcon extends Component { this.starNode.active = true; this.starNode.getComponentInChildren(Label).string = `${this.info.petStar}`; } + + //设置宠物等级 + this.levelLabel.string = `Lv ${PetEquipData.getIns().getForgingBenchPetLevel(this.info.petId)}` } diff --git a/JisolGameCocos/assets/script/ui/Consts/PetEquip/icon/PetEquipIcon.ts b/JisolGameCocos/assets/script/ui/Consts/PetEquip/icon/PetEquipIcon.ts index 5754b642..362575aa 100644 --- a/JisolGameCocos/assets/script/ui/Consts/PetEquip/icon/PetEquipIcon.ts +++ b/JisolGameCocos/assets/script/ui/Consts/PetEquip/icon/PetEquipIcon.ts @@ -3,6 +3,7 @@ import { PetEquip } from '../../../../consts/API'; import { Sprite } from 'cc'; import TbResource, { IconTypeEnum } from '../../../../tools/TbResource'; import { TD } from '../../../../App'; +import { Label } from 'cc'; const { ccclass, property } = _decorator; @ccclass('PetEquipIcon') @@ -15,6 +16,9 @@ export class PetEquipIcon extends Component { @property(Node) notEquip:Node; + @property(Label) + levelLabel:Label; //等级 + info:PetEquip; onLoad(){ @@ -24,6 +28,7 @@ export class PetEquipIcon extends Component { //刷新页面 onUpdateView(){ + this.levelLabel.node.active = false; this.notEquip.active = true; if(!this.info) return; @@ -32,6 +37,9 @@ export class PetEquipIcon extends Component { let config = TD.TbGRoleEquip.get(this.info.equipCfgId); TbResource.loadSpriteIcon(IconTypeEnum.宠物装备,config.icon,this.sprite,this); TbResource.loadSpriteIcon(IconTypeEnum.品质,config.quality,this.quality,this); + + this.levelLabel.node.active = true; + this.levelLabel.string = `Lv ${this.info.equipLevel}`; } diff --git a/JisolGameCocos/assets/script/ui/Home/ForgingBench/MainForgingBench.ts b/JisolGameCocos/assets/script/ui/Home/ForgingBench/MainForgingBench.ts index 9d956b22..1724e85a 100644 --- a/JisolGameCocos/assets/script/ui/Home/ForgingBench/MainForgingBench.ts +++ b/JisolGameCocos/assets/script/ui/Home/ForgingBench/MainForgingBench.ts @@ -6,12 +6,21 @@ import { API, PlayerPetOV } from '../../../consts/API'; import { PetIconSelectShow } from '../../Consts/Pet/PetIconSelectShow'; import PlayerPetData from '../../../data/PlayerPetData'; import { PetEquipIcon } from '../../Consts/PetEquip/icon/PetEquipIcon'; +import { Label } from 'cc'; +import TimeUtil from '../../../../../extensions/ngame/assets/ngame/util/TimeUtil'; +import { ResourceType } from '../../../data/ResourceData'; +import JComponent from '../../../../../extensions/ngame/assets/ngame/util/components/JComponent'; const { ccclass, property } = _decorator; //锻造台 @ccclass('MainForgingBench') -export class MainForgingBench extends Component { +export class MainForgingBench extends JComponent { + + + //锻造等级显示 + @property(Label) + forgingLevel:Label; //锻造宠 @property(PetIconSelectShow) @@ -37,6 +46,14 @@ export class MainForgingBench extends Component { app.event.off(PetEquipDataEnum.UPDATE_EQUIP,this.onUpdateEquip,this); } + updates(){ + if(PetEquipData.getIns().forgingUpTimeExcess){ + this.forgingLevel.string = `(锻造等级: ${PetEquipData.getIns().info.currentForgingQuality} ) ${TimeUtil.remainderString(PetEquipData.getIns().forgingBenchUpEnd)}`; + }else{ + this.forgingLevel.string = `(锻造等级: ${PetEquipData.getIns().info.currentForgingQuality} )`; + } + } + onUpdateView(){ this.onUpdateForging(); this.onUpdateEquip(); @@ -77,6 +94,14 @@ export class MainForgingBench extends Component { } + //点击升级锻造台 + async onClickUpForgingBench(){ + if(PetEquipData.getIns().forgingUpTimeExcess) + await PetEquipData.getIns().useSpeedUpForgingBench(ResourceType.SpeedUp); + else + await PetEquipData.getIns().upForgingBench(); + } + } diff --git a/JisolGameCocos/assets/script/ui/Home/Sreeps/MainSreepsIcon.ts b/JisolGameCocos/assets/script/ui/Home/Sreeps/MainSreepsIcon.ts index 07236e9a..beff0eee 100644 --- a/JisolGameCocos/assets/script/ui/Home/Sreeps/MainSreepsIcon.ts +++ b/JisolGameCocos/assets/script/ui/Home/Sreeps/MainSreepsIcon.ts @@ -3,23 +3,18 @@ import JNScrollViewItem from '../../../../../extensions/ngame/assets/ngame/util/ import { GOnHookPet } from '../../../../../extensions/ngame/assets/ngame/message/proto'; import { PetIcon } from '../../Consts/Pet/PetIcon'; import { PetIconSelect } from '../../Consts/Pet/PetIconSelect'; +import { TablePetIconSelect } from '../../Consts/Pet/table/TablePetIconSelect'; +import { TD } from '../../../App'; const { ccclass, property } = _decorator; @ccclass('MainSreepsIcon') export class MainSreepsIcon extends JNScrollViewItem { - @property(PetIconSelect) - icon:PetIconSelect; + @property(TablePetIconSelect) + icon:TablePetIconSelect; start(){ - this.icon.set({ - petTbId: this.data.petTbId, - petId: 0, - petPlayerId: 0, - petLevel: 0, - petStar: 0, - petStarExp: 0 - }); + this.icon.set(TD.TbGRole.get(this.data.petTbId)); } } diff --git a/JisolGameCocos/assets/script/ui/PetEquip/PetEquipForgingPopupView.ts b/JisolGameCocos/assets/script/ui/PetEquip/PetEquipForgingPopupView.ts index 159309dd..c755d6af 100644 --- a/JisolGameCocos/assets/script/ui/PetEquip/PetEquipForgingPopupView.ts +++ b/JisolGameCocos/assets/script/ui/PetEquip/PetEquipForgingPopupView.ts @@ -9,6 +9,7 @@ import { TB } from '../../config/data/schema'; import { app, TD } from '../../App'; import { TablePetEquipIcon } from '../Consts/PetEquip/table/TablePetEquipIcon'; import PetEquipData from '../../data/PetEquipData'; +import { PetEquipIcon } from '../Consts/PetEquip/icon/PetEquipIcon'; const { ccclass, property } = _decorator; //弹出锻造装备页面 @@ -16,8 +17,8 @@ const { ccclass, property } = _decorator; export class PetEquipForgingPopupView extends JNLayerBase { //装备展示 - @property(TablePetEquipIcon) - icon:TablePetEquipIcon; + @property(PetEquipIcon) + icon:PetEquipIcon; info:PetEquip; @@ -31,8 +32,7 @@ export class PetEquipForgingPopupView extends JNLayerBase { } onUpdateView(){ - let config = TD.TbGRoleEquip.get(this.info.equipCfgId); - this.icon.set(config); + this.icon.set(this.info); } //点击穿戴装备 diff --git a/JisolGameCocos/extensions/ngame b/JisolGameCocos/extensions/ngame index 8ff29172..3d09378c 160000 --- a/JisolGameCocos/extensions/ngame +++ b/JisolGameCocos/extensions/ngame @@ -1 +1 @@ -Subproject commit 8ff291724bd1cfb730fd326919ebfb44fed48237 +Subproject commit 3d09378c19db0f7c4c45aff7fa7674d9ddee8c3a diff --git a/JisolGameServer/Main/src/main/java/cfg/TB/TbGResource.java b/JisolGameServer/Main/src/main/java/cfg/TB/TbGResource.java index 2679c22f..9ee5cf0f 100644 --- a/JisolGameServer/Main/src/main/java/cfg/TB/TbGResource.java +++ b/JisolGameServer/Main/src/main/java/cfg/TB/TbGResource.java @@ -19,6 +19,7 @@ public final class TbGResource extends AbstractBean { id = _buf.get("id").getAsInt(); name = _buf.get("name").getAsString(); tig = _buf.get("tig").getAsString(); + args = _buf.get("args").getAsString(); } public static TbGResource deserialize(JsonObject _buf) { @@ -37,6 +38,10 @@ public final class TbGResource extends AbstractBean { * 描述 */ public final String tig; + /** + * 额外参数 + */ + public final String args; public static final int __ID__ = 1780642599; @@ -49,6 +54,7 @@ public final class TbGResource extends AbstractBean { + "(format_field_name __code_style field.name):" + id + "," + "(format_field_name __code_style field.name):" + name + "," + "(format_field_name __code_style field.name):" + tig + "," + + "(format_field_name __code_style field.name):" + args + "," + "}"; } } diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/GeneralException.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/GeneralException.java new file mode 100644 index 00000000..fb0f3697 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/GeneralException.java @@ -0,0 +1,9 @@ +package cn.jisol.game.controller.exception; + +public class GeneralException extends RuntimeException{ + public GeneralException() { + } + public GeneralException(String message) { + super(message); + } +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/HTTPExceptionHandler.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/HTTPExceptionHandler.java index db501c47..873d34b6 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/HTTPExceptionHandler.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/HTTPExceptionHandler.java @@ -32,6 +32,12 @@ public class HTTPExceptionHandler { return NewsContext.onFail("服务器忙碌啦~ 一会再试试."); } + //通用错误 + @ExceptionHandler(value = GeneralException.class) + @ResponseBody + public NewsContext generalHandler(Exception e){ + return NewsContext.onFail(e.getMessage()); + } //全局异常 @ExceptionHandler(value = Exception.class) @ResponseBody diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/GPlayerEquipController.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/GPlayerEquipController.java index df9a7dbc..e03227fe 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/GPlayerEquipController.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/GPlayerEquipController.java @@ -6,7 +6,6 @@ import cfg.TB.TbGRoleEquipType; import cfg.TbGEntity.TAttributeValue; import cn.hutool.core.util.RandomUtil; import cn.jisol.game.controller.argsresolver.CurrentPlayer; -import cn.jisol.game.controller.exception.ResourceNotException; import cn.jisol.game.data.ResourceId; import cn.jisol.game.data.TD; import cn.jisol.game.entity.data.GAttribute; @@ -16,20 +15,21 @@ import cn.jisol.game.service.PetEquipService; import cn.jisol.game.service.PlayerPetService; import cn.jisol.game.service.ResourceService; import cn.jisol.game.util.GRandomUtil; +import cn.jisol.game.vo.news.NewsResource; +import cn.jisol.game.vo.news.ov.ResourceUpdateOV; import cn.jisol.game.vo.pet.equip.EquipForgingBenchOV; +import cn.jisol.game.vo.pet.equip.PetEquipForgingOV; import cn.jisol.ngame.util.NewsContext; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.retry.RetryException; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -55,7 +55,7 @@ public class GPlayerEquipController { @ApiOperation(value = "锻造装备(扣除玩家锻造石 打造一件装备)") @GetMapping("/forging") @Transactional - public NewsContext forging(@CurrentPlayer Player player){ + public NewsContext forging(@CurrentPlayer Player player){ //扣除一个锻造石 resourceService.addResourceValue(player.getPlayerId(), ResourceId.ForgedStones.id, -1L); @@ -63,6 +63,8 @@ public class GPlayerEquipController { //获取锻造台 EquipForgingBenchOV forgingInfo = this.forgingInfo(player).data; + if(Objects.isNull(forgingInfo.getForgingPetId())) return NewsContext.onFail("请设置锻造宠"); + //随机取一个部位 TbGRoleEquipType position = GRandomUtil.randomArray(TD.DATA.getTbGRoleEquipType().getDataList()); @@ -77,7 +79,7 @@ public class GPlayerEquipController { //随机取一个装备 TbGRoleEquip equipInfo = GRandomUtil.randomArray(equips); - //封装 + //封装装备 PetEquip equip = new PetEquip(); equip.setEquipCfgId(equipInfo.id); equip.setEquipPlayerId(player.getPlayerId()); @@ -106,9 +108,13 @@ public class GPlayerEquipController { equip.setEquipHighAttributes(new ArrayList<>()); } - petEquipService.save(equip); + //宠物锻造经验+1 + forgingInfo.addForgingPetLevel(1); - return NewsContext.onSuccess("锻造成功",petEquipService.getById(equip.getEquipId())); + petEquipService.save(equip); + equipForgingBenchService.saveOrUpdate(forgingInfo); + + return NewsContext.onSuccess("锻造成功", PetEquipForgingOV.builder().equip(equip).info(forgingInfo).build()); } @@ -137,7 +143,7 @@ public class GPlayerEquipController { try{ info = EquipForgingBench.builder().playerId(player.getPlayerId()) .forgingQuality(TD.DATA.getTbGRoleEquipQuality().getDataList().get(0).id) - .forgingExp(0).build(); + .build(); equipForgingBenchService.saveOrUpdate(info); }catch (Exception ignored){} assert equipForgingBenchService != null; @@ -204,10 +210,52 @@ public class GPlayerEquipController { //升级锻造台 @ApiImplicitParams({}) - @ApiOperation(value = "锻造台升级") + @ApiOperation(value = "锻造台品质升级") @PostMapping("/forging/up") - public NewsContext wear(@CurrentPlayer Player player){ - return NewsContext.onFail("升级成功"); + public NewsResource wear(@CurrentPlayer Player player){ + EquipForgingBenchOV info = this.forgingInfo(player).data; + + if(info.getForgingUpTimeExcess() > 0) return NewsResource.onFail("正在升级",info); + + //下一个等级 + int nextLevel = info.getForgingQuality() + 1; + TbGRoleEquipQuality currentForgingInfo = TD.DATA.getTbGRoleEquipQuality().get(info.getForgingQuality()); + TbGRoleEquipQuality nextForgingInfo = TD.DATA.getTbGRoleEquipQuality().get(nextLevel); + if(Objects.isNull(nextForgingInfo)) return NewsResource.onFail("已满级"); + + //扣除材料 + ArrayList resources = new ArrayList<>(resourceService.deduct(player,nextForgingInfo.materials)); + + info.setForgingQuality(nextLevel); + //保存升级结束时间 + info.setForgingUpTime((new Date()).getTime() + currentForgingInfo.upTime * 1000L); + + equipForgingBenchService.saveOrUpdate(info); + + return NewsResource.onSuccess("升级成功",info,resources.toArray(new ResourceUpdateOV[0])); + } + + //使用加速卷 + @ApiImplicitParams({}) + @ApiOperation(value = "锻造台加速") + @PostMapping("/use/speed/{resType}") + @Transactional + public NewsResource useSpeed(@CurrentPlayer Player player, @PathVariable Integer resType){ + EquipForgingBenchOV info = this.forgingInfo(player).data; + + if(Objects.isNull(resType)) return NewsResource.onFail("请选择需要使用的加速卷",info); + if(info.getForgingUpTimeExcess() <= 0) return NewsResource.onFail("锻造台已升级成功",info); + + //扣除资源 + ArrayList resources = new ArrayList(){{add(resourceService.deductSpeedUp(player,resType));}}; + + //减少时间 + info.setForgingUpTime(info.getForgingUpTime() - resourceService.timeSpeedUp(resType)); + + if(!equipForgingBenchService.updateById(info)) throw new RetryException("");; + + return NewsResource.onSuccess("使用成功",info,resources.toArray(new ResourceUpdateOV[0])); + } diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/GPlayerPetController.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/GPlayerPetController.java index 48dfcd5c..4b94bd12 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/GPlayerPetController.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/GPlayerPetController.java @@ -131,8 +131,6 @@ public class GPlayerPetController { @Transactional public NewsResource onUpLevel(@PathVariable Integer petId, @CurrentPlayer Player player){ - //整理刷新数据 - ArrayList resources = new ArrayList<>(); //获取需要升级的宠物 PlayerPet pet = playerPetService.getById(petId); @@ -148,18 +146,8 @@ public class GPlayerPetController { if(pet.getPetStar() * 10 <= pet.getPetLevel()){ return NewsResource.onFail("突破星级 可升级"); } - //扣除玩家材料 - for (int i = 0; i < resource.materials.length; i++) { - TResource res = resource.materials[i]; - Resource data = resourceService.addResourceValue(player.getPlayerId(), res.id, -((long) res.value)); - if (Objects.isNull(data)){ - return NewsResource.onFail("材料不够"); - }else{ - //刷新资源 - resources.add(ResourceUpdateOV.onUpdate(data)); //刷新资源 - } - } + ArrayList resources = new ArrayList<>(resourceService.deduct(player, resource.materials)); //升级 pet.setPetLevel(pet.getPetLevel() + 1); diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/data/ResourceId.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/data/ResourceId.java index f6a8ee33..a0865fef 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/data/ResourceId.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/data/ResourceId.java @@ -6,6 +6,8 @@ public enum ResourceId { Gold(90001), //锻造石 ForgedStones(90002), + //加速卷 + SpeedUp(90003), ; public int id; diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/table/EquipForgingBench.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/table/EquipForgingBench.java index 5e149b97..312be008 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/table/EquipForgingBench.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/table/EquipForgingBench.java @@ -2,37 +2,65 @@ package cn.jisol.game.entity.table; import cfg.TB.TbGRoleEquipLevel; import cn.jisol.game.data.TD; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; +import cn.jisol.game.entity.data.GAttribute; +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @SuperBuilder @AllArgsConstructor @NoArgsConstructor @Data -@TableName("`equip_forging_bench`") +@TableName(value = "`equip_forging_bench`",autoResultMap = true) public class EquipForgingBench { @TableId(type = IdType.AUTO) private Integer forgingId; //锻造台Id private Long playerId; //锻造台所属的玩家Id - private Integer forgingExp; //锻造等级经验 private Integer forgingQuality; //锻造品质等级 private Integer forgingPetId; //当前占用宠物Id private Long forgingUpTime; //升级结束时间(服务器) + @Version + private Integer version; + + @TableField(typeHandler = FastjsonTypeHandler.class) + private Map forgingPetLevels; //锻造宠等级信息{宠物Id:宠物经验} + + public Map getForgingPetLevels() { + if(Objects.isNull(forgingPetLevels)) + return this.forgingPetLevels = new HashMap<>(); + return forgingPetLevels; + } + //获取锻造等级 public Integer getForgingLevel() { - List collect = TD.DATA.getTbGRoleEquipLevel().getDataList().stream().filter(info -> info.exp <= this.forgingExp).collect(Collectors.toList()); + List collect = TD.DATA.getTbGRoleEquipLevel().getDataList().stream().filter(info -> info.exp <= this.getForgingPetLevels().getOrDefault(this.getForgingPetId().toString(),0)).collect(Collectors.toList()); return collect.get(collect.size() - 1).id; } + + public Integer getForgingPetId(){ + if(Objects.isNull(this.forgingPetId)) + return 0; + return this.forgingPetId; + } + + //提升指定宠物锻造经验 + public boolean addForgingPetLevel(Integer exp) { + Integer petId = this.forgingPetId; + if (Objects.isNull(petId)) return false; + Integer level = this.getForgingPetLevels().get(petId.toString()); + if(Objects.isNull(level)) level = 0; + level += 1; + this.getForgingPetLevels().put(petId.toString(),level); + return true; + } + } diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/service/ResourceService.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/ResourceService.java index 0a377993..2a544294 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/service/ResourceService.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/ResourceService.java @@ -1,8 +1,12 @@ package cn.jisol.game.service; +import cn.jisol.game.entity.table.Player; import cn.jisol.game.entity.table.Resource; +import cn.jisol.game.vo.news.ov.ResourceUpdateOV; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.ArrayList; + public interface ResourceService extends IService { //添加某个资源的数量 @@ -12,4 +16,15 @@ public interface ResourceService extends IService { public Resource initResource(Long playerId, int type, Long value); public Resource initResource(Resource resource); + //扣除玩家材料 + public ArrayList deduct(Player player, cfg.TbGEntity.TResource[] materials); + + //扣除通用加速卷 + public ResourceUpdateOV deductSpeedUp(Player player, int type); + + //返回通用加速卷 减少的时间(ms) + public long timeSpeedUp(int type); + + + } diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/ResourceServiceImpl.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/ResourceServiceImpl.java index 590ebfad..4d13d5a8 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/ResourceServiceImpl.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/ResourceServiceImpl.java @@ -1,21 +1,26 @@ package cn.jisol.game.service.impl; +import cfg.TbGEntity.TResource; +import cn.jisol.game.controller.exception.GeneralException; import cn.jisol.game.controller.exception.ResourceInitException; import cn.jisol.game.controller.exception.ResourceNotException; +import cn.jisol.game.data.ResourceId; +import cn.jisol.game.data.TD; +import cn.jisol.game.entity.table.Player; import cn.jisol.game.entity.table.Resource; import cn.jisol.game.mapper.ResourceMapper; import cn.jisol.game.service.ResourceService; +import cn.jisol.game.vo.news.NewsResource; +import cn.jisol.game.vo.news.ov.ResourceUpdateOV; import cn.jisol.ngame.util.spring.SpringBeanUtils; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.aop.framework.AopContext; -import org.springframework.retry.RetryException; -import org.springframework.retry.annotation.Retryable; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Objects; @Service @@ -92,5 +97,37 @@ public class ResourceServiceImpl extends ServiceImpl i return resource; } + @Override + public ArrayList deduct(Player player, TResource[] materials) { + + ArrayList list = new ArrayList<>(); + + for (TResource res : materials) { + Resource data = this.addResourceValue(player.getPlayerId(), res.id, -((long) res.value)); + if (Objects.isNull(data)) { + throw new ResourceNotException("资源不够"); + } else { + //刷新资源 + list.add(ResourceUpdateOV.onUpdate(data)); //刷新资源 + } + } + + return list; + + } + + @Override + public ResourceUpdateOV deductSpeedUp(Player player, int type) { + if(!(Arrays.asList(ResourceId.SpeedUp.id).contains(type))) throw new GeneralException("资源错误"); + //扣除资源 + return ResourceUpdateOV.onUpdate(this.addResourceValue(player.getPlayerId(), type, -1L)); + } + + @Override + public long timeSpeedUp(int type) { + if(!(Arrays.asList(ResourceId.SpeedUp.id).contains(type))) throw new GeneralException("资源错误"); + return Integer.parseInt(TD.DATA.getTbGResource().get(type).args) * 1000L; + } + } diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/vo/pet/equip/EquipForgingBenchOV.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/vo/pet/equip/EquipForgingBenchOV.java index daddb88b..bbf2a5f9 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/vo/pet/equip/EquipForgingBenchOV.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/vo/pet/equip/EquipForgingBenchOV.java @@ -8,8 +8,7 @@ import java.util.Date; public class EquipForgingBenchOV extends EquipForgingBench { //获取当前品质等级 - @Override - public Integer getForgingQuality() { + public Integer getCurrentForgingQuality() { if(this.getForgingUpTimeExcess() > 0){ return super.getForgingQuality() - 1; }else{ diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/vo/pet/equip/PetEquipForgingOV.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/vo/pet/equip/PetEquipForgingOV.java new file mode 100644 index 00000000..b6a33d85 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/vo/pet/equip/PetEquipForgingOV.java @@ -0,0 +1,13 @@ +package cn.jisol.game.vo.pet.equip; + +import cn.jisol.game.entity.table.EquipForgingBench; +import cn.jisol.game.entity.table.PetEquip; +import lombok.Builder; +import lombok.Data; + +@Builder +@Data +public class PetEquipForgingOV { + private EquipForgingBench info; + private PetEquip equip; +} diff --git a/JisolGameServer/Main/src/main/resources/json/tbgresource.json b/JisolGameServer/Main/src/main/resources/json/tbgresource.json index fb678f6b..1c53050b 100644 --- a/JisolGameServer/Main/src/main/resources/json/tbgresource.json +++ b/JisolGameServer/Main/src/main/resources/json/tbgresource.json @@ -2,11 +2,19 @@ { "id": 90001, "name": "金币", - "tig": "金币 (目前叫做金币 名称还没有定) 游戏的基础资源 用于升级宠物" + "tig": "金币 (目前叫做金币 名称还没有定) 游戏的基础资源 用于升级宠物", + "args": "" }, { "id": 90002, "name": "锻造石", - "tig": "锻造石 可以锻造装备的石头" + "tig": "锻造石 可以锻造装备的石头", + "args": "" + }, + { + "id": 90003, + "name": "通用加速卷", + "tig": "加速卷 用来加速一切需要时间的东西 减少冷却:60s", + "args": "60" } ] \ No newline at end of file