From 4f3d0b55a1c178d5c3d756b8a2f6ae937ceae8a9 Mon Sep 17 00:00:00 2001 From: Pho86 Date: Wed, 12 Jun 2024 21:12:01 -0700 Subject: [PATCH] add travellers to teambuilder, and fix raiden, childe pages --- public/characters/travellers.webp | Bin 0 -> 26480 bytes src/app/api/teamrec/google/route.ts | 2 +- src/app/api/teamrec/prompt.ts | 12 ++--- src/app/characters/[name]/page.tsx | 7 +-- src/app/components/CharacterCard/team.tsx | 36 ++++++++----- src/app/components/CharacterInfo/index.tsx | 1 - .../components/CharacterInfoBanner/index.tsx | 3 +- src/app/components/Gallery/index.tsx | 2 +- src/app/components/StatsTable/index.tsx | 1 + src/app/components/TeamBuilder/index.tsx | 48 ++++++++++++------ src/app/teambuilder/page.tsx | 18 +++++-- src/app/types/character.ts | 1 + src/app/utils/helper.ts | 23 +++++++-- 13 files changed, 103 insertions(+), 51 deletions(-) create mode 100644 public/characters/travellers.webp diff --git a/public/characters/travellers.webp b/public/characters/travellers.webp new file mode 100644 index 0000000000000000000000000000000000000000..299ce29a1238ccf36864aba3828cb58606f0fd12 GIT binary patch literal 26480 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
5RhDc1CD zYVy@0%b0WOn#mniz(?>>t*G9(=QPkB&BQ{@9HJ0Juf+%;fSd2t@mSSW1q5Y6tc(|6)$^FU7@9UH&@i z-FLxP*gQ=7%W5AOxO@b7kWsYCFb4UZ3X&$AMS82hI>9#6PfQ?uX@Cp@>9C!xl@wfU zwiV?fvGWgYqN$lYK%h=JsLS*g1?-!w#>aZQ`i(n@*icSGq+%CA&`3!S1=l)K4J zekgMb@6KJb5_;LNqZO_TfsF$Lz;*_F8^Fs6DAp3aj7)(`eHGQbQJ;d) zySn7xFZ1kqzFrZ75u+`L|7+6$Y0V}E&UzdD(0DxGyxmkO%}(82}okcBsW)eZq3 zu1!0?*9k}qCm=<2Di^SO@069jq=c4u#W(k{vf`QdM7;eY!#txAUHddVASOtS&3V_3 zE%YWPiz`Wk*cr$e5oiY#th>o}fbSL_VfRqj)D-d;cQ+D?MnlwG11f63hu-mxdTUFR zYF0aThfi8JH8#Qkh6eF082WtC97p=wD1PuR(o3SRJ~}qh?PM^#N}NzjuO)DiOf)s; zP?)!|7t(>}!I_PGkFao}f1>{s`Rkpy`vjqx`V#*Abe>(5PY)N>$<#5wH8F+S9jon! zz#ERw50P1?R6pEcO-w|=45|5qbK}1d?t1%>I;{;R5^3NrvIB~(r&B6j$)e^4n4olR z+o(b0Ef%K*GYM8e*_ZcJyN~fu(@RsHGAOQ}kFA-=X+iAYyDg{~Pa$5I`cQdE zZFV&jCBG=>Tf2u7yR1D>3Ap9?ZO2~)UjU+fH`)!6ZsL6|r}Y4K$Qd)#v*q(Hk;&)j z#vTWiN)=?^V%C_Y=;pAn)StHS*{q>B&Hq~J>olbg&;t~HP!JN_DJS!9ZiYnhDBHu$ z@Yl~X3KV{bq~Qo~hfP1M!{buL5>L=k6Vz^mQ7v+FiC{gw3MQ77Cgb8;kt%e78`S|X zPjJ-HRxRlxy7QA#w<>TVI2g0#_S6Ba4#1a}=hdiyB4w6+GHvvS_f!b0YObo@Vaq3w zB2j*PZhD>})}-gPcyd&Xu_|DNvlsNVOYQbWQ@D$G{0%*AdmG7$J8udhDBZZ=Q<;)R zWOitZ$wP3JjDnzjws?A2(Z3r*vh-C#>d*Ve^Pg4(d6MUk!%l!|CJ?R7C1z*v_!H{9 z1%=YpGy<|$Vx=CzVujZRXiS<837SC@2R+An(21OZsI=6m|pvh@cq6(*Qa~ zJ5yF{r_U!9v%B5OAt_+vpGa3oaTv>xLWQfj0z(s9jjKh(<~Plh%@*SS>cMp@tMKi> zn@utTsih#M*MaG!{(v&@6XNIs^FNr1sEKLK`lU@ybXYr9)Fx>@-aat7zG&Vq=$Tl| zqLi3qrYtZl6LvI8D@%u_WUuuvt^K&}QH&6igpui7ALacqK(S>`MGG@L82hH=XftQk(>-JT>5r`SYB&*% zQBJEFZ$PAL^!p-uPt-CsK55(!y2A#(TiVLqvQtnou&tmS3@P7>>NmEuFAqCD)QqwdYvcqj>e!I_v^0D)z-O#q#l)znTZLS%Q(dl!u^ zavx4YW*n|q?AYT{7;1VSLrO7oWlLP(8HKF)Fk=zOGy}||`=n0--}~w?n}I0R%}wJm z!D#wxt~&$yqFtQQM7KP4%9fIrIAREwWC_~Yl!e~b_S_UIU8>*H8P{B)2+kUL%a&{S zgsr3m1(rEveWP{%Qc@oL+ z0thsf`qCeJ$r)eWUb;ri7u&ytz$yfsNJvrzLaKTe%{8WQoN}?a*$cGcH`9}fb^DNQ zBT-PCb`Cd45GjxMvHPFaVVpCACWLpYTEJ@}2n_-2Dzzg03+@w!tzHO|%$Q65lO@oe}&pfmVn_FKD|_=iY#@9Qf*2jgUeYF&}fiD5m{G$8eDezO28wO z9vxp|_2m?-{QkTX&F?HJW>f9Ml_uC~_pqG09D-YPSbN-Q;d9A^ z*zQ_YOHg*tl#^PMX5}D6gH>&IWCvcGx-BJg_NXs;a^UZf+>DP4Wkn^plyNh5yDsZk zObZ-j)i*1+n^Qv;oxV04Nk8r@=|+>wl%w?I@l#}yGJ2Nt)1q^px@53Xf$Q)@k=STL z13L%>Y-)xAuq;yMIF}^|==kPD-bT9h4FawRVX`aTg^g`;=_Fc6JBILI@6e<+^aMQi z*uMrQ%=0$*Ii>PRW=^FgA?$_1bG4^%a(deFXi9~?S*U@XLd7`Uv;_DU?6!i%NDA_s zFa&@>JQw@B3q<-y%v@G8IG#mzbf@z?a-e5;;z|owkNrC5idHokPL7T_-DN4$hEAH< zYNcu{RYVJ%2Qz=JyreU$AjPfH5bYgttf1y@oxkUT&69@cG$7qQMXaD0Vvg7{pHzWg z&xE{731UN~yH{P-1$Mlrog)t3$mmoKo?iilb~uCzY7c-O;r@!5qh!9-4=gE2RLDO2e2n`eEZkkQ1c3KbQ z6!P8l9tePb3Is0`93TyGr#5A_{okk_77sU+^)X^+jU7+!B0w)ALW2w=2*haNUQ*9g z>s!GQT+*%nx7e?GW#QioY?*7KXbiI93xl6YO0BNJfnGBVb;(6o)?y3`TP{($$$Ab3 zj>MUiNkt`y`aw(+I0XIFj-2Etf03GHvKfHK*CkVudfEERRdz<=yS(f z6V9Xz5dKAa6v5^@Ya3l)jWB(ifYMx%_;;*8-BfGY@QrXbR!rgVLn)o*=5o#_?a!aK z*kk!IF_35$Y|%{m^v$~b(;-JSRC&NEbPIph{P!C1a9v4*x-tO$KTn&ETl6*m>R6CC z-`s;oWrtG(>xpLS{@Wl?m^j!#Z1?`9FCaHbndSk7x=aFBt*-nmTiEGbP0 z(ZPuDRp|-4ih$@m4^bi9fvS4iis)&IBO%+Ymm|%c(ps$Mf9D?nF17}psHobmeq+P? zO2f$G-{**}K<ZK11b*=lZ75fguh6~5$dUyg0ToILo zD2oyJ=XZ1lFXoAfiU@T4jNZEDrQckPLB&+EH|v90yqfbdHZFX+S$s9Mn!H-(7U<3p z0Q!ka;Tx6Bk=8kUGA3jq0w;+IXiGP!Tu|%IxT%8!4_zk^rvao>rvm|koK9o9L#2+( z*$}3~8;8&jwHp16aG zsTPZ7*w7NJXxI$>H-t)mI_ zN2AG2Bm-D!wa( zf6*gkBvJr?(-a^Ng8n~oA;N4}QQ}49wl_rxduqYm z56icxDW69lcW*~8+gE|_flI#S;KYN-xSn%x+NIg^_O(d6$WD(}z)672XUqHa74D0% z>?bOi_*CZj>Y6mOXS>IvD){7~~$u+#H3U>IBo#seFE!aY@duzr{QUH&a z;c>l8d`H^hU`xNXkc)diWV_z5U4Im&f(73G>gcmXd?pv-2`P#Zg6M9C8;LiYmq)NG`y z!}!0az0-&REiNq8k&y-QAiiCh{SnC3sws##yYR)!-Uu_wCdCYIj&1r8v@m-()^aT_ zGf`%7QK&R=D)pA5s)&>&o%6=-Tu?!!&1|?n3GbW#wJWfFY2uu?;`~^)^w=5W$3YOh zE_a9_YLZiWSwb1d$XDZlz27)!{OYm?2dSFTqG3XS5z`7ng%TFg=^e9=0z8~JQ>MY+ zrr2WA?P&$GTAyeS854E$YxtP@$mv^dsJQ-qniU?xY--hx)FR_gpAN=ZBoB>O1oJUk zjE%_6II9w*Je^;ZpNZR3BnL-fppGO?7@KLLis`!!k0Bqd4xokcuqI*eio_K(_(pt5 z5CwW!x5b_jw4aQRu#cP}+uQ{Ea$>hq@Lkd?=r(f3uf0Aq2 z$juCDS|=xbkt9XExPS2|-dyjxb^1I4=O&-AVX3MRCL0wbGVu+RK}+mnU1}z*7u{G) za>O-zC^SO`nb!S|;>-24xp$OZ;LvgmTehbVXaajJDr*&5Txm^bQwS0vP^S@UF*&fNTL! zalwm3kF@0RX|dyHkqPjx78e)f)E%{SKOOv_`khh2@OR0tm6ePohSRrzb1{!IGZn58 z+~T0`mX)GL&S>T`zexID0ofAgDBsW}Xz@T*9ze;j?R{&b0(D)7I>pE}-C!CMYE{Da>#xQ+RSdq7 zOj{}iG^`~^(4}^Q8~2B!La)aezk1C_;ggcZ9B7(wLcuVanvkyfUH^9S)4oE1C@SJs z?^T?-jdkIj@Yt!%VdBxf?(EYI&3ktJ$5KpbsV6MCt9F=?inT9uoPriXZ%digXyR1% z^PaQw6zf|W1);=gWoIlG!!~Jc9QM3&re3Qq#02@Iaqw~JUilB$3+ZJHW)eE#96@V{ zb7!Lwp3d|Ha##^2YZk2fJmWd%vB7rXkgM;#AJ0whZ0 ztzNw>M`vEQZZ)1pRuLR)$?%H`844@~-w>(u?T#<1tfa57K29%iQ4z@8cHB0}EBzNB z0N@jx*bVi%kqCY@>jB>npn^X$YQV@xWIgh7FZfe(GS3Ly$h`j|<^Dz3h3;}04=0z6 z17zhDsVd#7=D_AHPhIft40rM|^i0MbK`djg`nO>?d`Z`vk!&jrV7w*gSk)|3jl@ZUHZj`?tXCNZPlNe*1XO9;}@_8 zo%{APr&8ozr{R7NC)5Li9LG&K!38BIa&yoO0fnGSq%EzF2>{C`F3r$c^HrNl9v;dF{$i*58*Mzy#me2~m2f1@=Fo_m)I!^UL z0nf+qgr1r$8*G$*JR4G!GsNB)Dacn0!Zv2CIaEU(chVM)tvzQvj^ZEK zL4o&S)>thYj{{h=@Iv@(FuP>s7Pk_jeO6!#Hnn*#fQD22x#qFEEe?n_bzE?Xac=q+ z#M2NYM@R|Aqik^^$`M%T$-vjRD+%vvu34WNIbwhFm&aEQ7Z~BT-DXZB8;BQMO9%Eh z|De*47q`J&3RmIJiz5tl^bd+0c}$p2j2$#ppck-$=bg|`4UPioE)5`mHw;k|*xY(1 zvIh_A1cS@%vO*|6ZIa-Y1AynTtxAguA6OzS^Lz3oeg?ZVFEk~SoI~LRY<#Ftp8?UR zxIL3>&=@Hei;U2V)aX0g#lfUNT~HrTRYkK2;18LNNaNE=Yq!hRaoS$!$Qmb##_C9X zmE@m7S_YnsJTz|EEfUIw)em?Uix}3n+A)96^N)#%;=igpk6+D`zd{{Yn%quweEh1N zZuw|h3_9h!EGrQCNN25Yyp!xA?Vx~#c4-$M65iO&G3UGx(^cqgN~?h%ZrQ(_!uTCr?{lr$(wG49G-jZt}`c!D?;<+y}YXe_fuX^ zzBS((&odv4v%A>9Wg=}^PXeKxW+!cer~B_CY8Zhyjxcg%E8rK3(d@W{O1_1q z{T4JT_aXQN z7=|ZUu7N4O7qjCXf7xn>n7c;lEU~MMqD}eCBZ79-h&P8U@i z6R{V%@fIv)+d^#FnlCZAg=G(OhDBC0O-@c(jNa~vCr3XnJAKX7igVq>gfU`Iy)uV* zzuXIZh-avwD&n0j1R&C+r%i^>^)Yg#2K43FwXcyvou39LWP)i2fbb{s%A){ zDrxniG31`|;OoPRkp%wBuf?<``V<^6R-(Ia13cj<49wMr0zvL-nRkLlICeNG$v)Q_h;fBtot=?7++r zd-b2mD|qHg)z(~mLfD6$h4&=U8PJd)$}rOoEd`r$n^ z5_5UaE;;^SX^51l+C0JR>GYqWtMb&_T+!ActE}a!A=yhx8%2NL*)y;Gf45cY3G#+4x5p?WJs(2Q&QfAeJq z_5G*{|C2{^hd*O?JW8w}V_Hy#7UhF~6LvW9b73C)&SlF(UG^|amGOGRYca~NL!;pH zc>}(!iYm7zM}jM9@6+E|T(U(nMmjt0<5Um{k~$-2-<^fPANXvR8vMlIt_HRa_gEMb z?})cD82hM16t{QH&)H@%U$sXYaZSFg*7z`}hdYWgV}WMXRp2m?`5qPC(~6wcxHlfA zQ7jo5cjxwfV71m!9p(OvVdh)fqVPex>x37A{)>o?%1WMpE(%-PFPUsEeG=G1lv}q# zdrD8Y{M!a4ILx_2r~Fp{Qh;6w+Yg8>dN91ei8^YyJ-T;*M8i6E3(nW~I7JZqru zW80$a0z{DI`w#DNsX7V|V$gYABgx0}knlog*0(mLpPnk@2))c0Y$o=!N0C~j2pVKs zC%}z5?Na#b5A1Sj^jJ^cgX<0F* z0j&n@-(hWydsFxA$cxozMd{pPNGxxoW~a0ED%J%@0sI|up}`FFlpEx(^<(Z)FXMb2 z4uM&GrMp@0$9F|up}XG%?A!#`8limA{CR5{F6{8(?Dvog_MOhXlDN?3& z3LiwbsS55P-HJ+O91jAx0wq*F)oAdk4eObHjyO;_0Gt*?70W0KmAa81;?ycbg5msK z5-QZzTjA!tB=oVP%%&%vxfwgY0DO%-F~9X2>G86|Z$LnfEdrPSHk$~mPk7TO>KLQ| zWAKNnEv_U@glQ@OwgFT^`hF~(FeW17f@kF0c2we*b_l5=?z;?v`&crL*Cl%Ihud1r zaM07Wk!L!}aZonk)%PFo)Tq=-0x+@!7rS302+sKna&dmCMKi2la1$RaEz-Ea{Z#5X z8oZE~o6EbI_+vIkZO}J_w|%vcyuWTE_*v}x780K6V;i~3B>mjmC#s=EG33iD25U%M z0$qK^Y@b^o30usew)t%4cvahtt#3kX_WQS)7}??(5`&jEBRdu&ayo4LJXPMuHbBRJ z%vbDSIbr*uXUeMnPg0am@D^5aPQW8QrILFG2vrHepVq~Y4)UGhu_E*rKan6F?jk`{ zjSVESIuj@~MoP}nj6l0`<4r#{fC?kk<>cuZWEL$kAvs`x24cc|jqr(s?9HFHzpK>R z2KH`$WSrD@i&@(Lf+i~hdtK$uVQ$z?FmqInsXM@MZsI%HWHLSWm3xWM~!1zPj4as~?EU3bf07Lk!6%Q21r?-YpOkopPHtA&_~E zJ*CUZrI%B{^lVQR&#c3+mQ%?@e@CN;sTzDiNOMMgod?tmMAO zT{EN_TIYH5A`MmoPHEVEY_8Ui7-=6jw_kM5C&Hvt_Kp!nm)BjOx&;EHx=dbaxo}zKOWF`Dobe~@@25yzQRe<1=eDaPsOnnySpzXXbXzFl z=O<i%_=@bL$UcTPidr8$sW=0{nXM)G`Ox2{;(M+YPh^9N^iU%7+^%WSiV1q}oof zwTiPb-?n$=Z@*0_2tQ?@^4*am?o%Hz1j)!9uFFSvO+R67x@S;7-f1p$D5hEsw)BOR zZUw$bvQavOkB^r(_>$!EK9h|>0PHH6ivQSubZm{|PFbnsyITPK(M7xn)tt&lw<{fa zsOp@v)$2W&(_`WKOowamlZL$|?I6@Vl6OnZhoZE*I#`NWhDX2NX>aNIgn(Q`5vh*l3LlPk|8;1 zwg)8)M;kiIkzS{61h9(Y4@zJ{AV;9Si zN!Ff3CVbgv){22KP`gl$Df;S#nRm=rukg7|KPtv3`aru64_=n%RA6kNF9Sv7a8E&awZ`+9o;Mx1;3sWLWhDxUgjFY1H*m+opw?k#YZDLbKve5hg8Jk$uFlIGEYP%Q!t`UA9?J>`4U9l~kRNuf)%lUhii=i&FG9w|Xt zb_(-TlbkiA0Gu-=HFUe+tkq|eRTy+_Ri}1R{xDUdx_y&8zw{d@`@i+DZ$HkHY1?>K zi9c%7XOv?d=MV-LmPX_2)@oW5Vh#-i0wJXF}y z#{1xs2AEpYWk819aw(|&TZ@|AB*Flj+&j19D0F33|ttK^%A1t zU^Y^RV`BfGoFKbOj*Bu9=}70cTNE54)x%Q=7|dh!e0gO$4<8o1`Spj`;49uhkVY4pP>s? zL3FendZRu%Z!9F6BLASpsb-yEzWEhGz9A#F07>=AF$^y$O)cIox`RwwMrgS*u)e|d9DWz=qWWui#5q~c;*22WUA^s~U>tL&k0L95T! z7?_5x+KhJIUsiFr( z!GVp4Bpl*r3ek5&B$G~wN}P6L^ix2p?@4{qL;J)H-(%sd4uwPw>Xd*<@<^v!zo)!4 zjoohwoDwhU_O)i&yJLXN3=>;EoD~jOqc5ti$_{ z^%JnQabsbMjPy2UX^n16z&yRhmh3aj)(I-f>1*f`M&lb{{VPHR9rFG*4a?X-@UsP z==hD6*gOmIJbB#MF+w<2zSD*E=h=uGA=CFSL*LRA<$0nHD#zj#5joy?*o&7YCjbfw zEyh(U7r-=y)AoE}@+3Mvp~eQ>rz@5qSnD-P0+`GpS>@+w`v?C{^6w_Jx8?IK`wt}k&v765BRJ)AR1p!#3J`J{9Z}W#dT=e z1E_&2KPDsnLR^za+Uj0lu+Ia&4<&ZLNSlGJFameNr{(6PL9vRPRS}hC)iVGgbAw6g=rgmh}3& zF6Z}`5MAY^tD`@&klHs91bvjwlWZXqtKrqNrmUFjL1(*wgM94Kp1OUj zOwvnVyrJ7xqUFiAAYWt zj?EmMB}O&Dg`)a6b7<^_hU`_o3ASwB3=Od&<|B?iw5^akPs?)rL-grf1;fyg06u@y zenaA;I?|Bk%^yQs7oLDdRA%_~XPI%2Eu9IzAVsq*LPaH2PjUTG1zUlLxOg~0b0Mfm zgYs0{FIQgqYZJ9iSLc=@D(QBEY)K(ICcam)J7WCfy=h&ZMQY$7JHg6}3a`=v_I7;{ zKgzN!LULn#vTuovaUiQi2lL{sy6vTAI5~w}D?D~V^OvBM86xJ6O444A%Gn*|IK9@P z-#EZF^6kLH>&TfnwvW&)!?orL0uFj54epQD*jgI$nn*D$azQz6K=#Aksy_*nB z&^}EBT0+0Tx>M-8q@O2;J&vX6Y1ijMXIBu+azc-LB7fq&6Rn-yRF!-Ws?XmSie-jh zip3Nj>O_co?<{?a>8uLOiC?^Zu0)Pip<5p3jO;N^C`Nht2uY-|7KAI0lTQL2#%Y*= z6AVqeB;RqdUQA4q>-WCxz4)w9WUu#%Jql@_Q%Td$_YJSdz5=(mkdBir4iPnPz(mmM%HF zogPxSS@=HzL?*l0;mYY(iSB~L2FT$mSmg3qb3Ez=b|OoA6%Y8=AONWM-Cz;!&t0^3 zYp9GAtWUvC;NI8x#K7Vl2jQ5!;ncmyAIJ>yI4<2Ec7#p@XTTGn zc=5ah9A)dbK;)MGQ29|c>4F+MfvU4+8w`MYf>`a$go?lkgc8ULG)Dk49bstJ>cMnA z-2o6CneS>>`YGk?-!b*?Oq9XU!$lX1kHi1t9^e5>CU3-9{gZc4C6@dx&X9cC&B6Ai z`J+&j7_RM-tuqO>WFDj#o_ulXqV$nO!uF6W-Dk3z8AWRIAaj!`~$W>QWB zW>m%~>1^p_I5EHF;w6%UIW0NH$jaV6Pu||ZxDkbVmwL*WWbB2``dYCSBu~HOY5@@)(#J{ zT=s2>9v_t>dCH!0PJ!+akrs@_A!OFE$1Nl!_<;Ma@1ZOjP_1hCS$*8|zhHCSkE2{wjRH{`@Ah+zw< zT3tw?t+Jf6BVUr0yU=?jVjE!J)Ou*cALbgY%;p~nG7!94aF^`Nz~ORst|Zy0Q{SFW z^UBOTIXeO1$4@#Ln^`;5{(MDhIxpx=6 zZ_AZd`2x|RoQvy;7PWzS5&1q1@<^Oqhd3f;KmfDLy%-Jjd59>&VpLtky#DJ*-9%-) zuJ4{mfj834qYgT3W7!wnBAsQQaa8k{1Dv7c7y$DH=N*9PjNCOSC}Ds2cOclR$-oW0 z=bPY4v~H#i{G60nqF3_r&~;Vs!`--S;|9}pxp?XooXG6|)IEX&%RY%-=%vtA9IgBJ zkXLtP^A*2_iu3}IkYN3he_^sZJs?2Yb*B$PLl2cky5B(DRry9`3tsV$Hfx^OL?cW< z<|1=aL4ImAfZjk)#$^Z`XVa*^;5siD=nGK6X87VmP-J9F4X9)gw2xEi6iv;%GN^E5 zCPfjUle=5s0OebPNEaRPMS_*9y3XS;h0>H?cMkLPA7%#KIZ(X8B_) zYCoTdO~b5Qs~U6T@Y)Bo_Y`nC9`gCRm(F*)6qJQzs|$e5zl20VGz|XS4%0!cAI6xA z>0+6>Hzf|e+duA`wte>=?p21Bd1Olw9i`G1%HGg{S*P>auNY*2ezvg-YLA>M-(4)YDWrcbD9QRHGk#U1n=tSZH)VQ+gN7`e* zYr#V_;Ae8x3b+V&dZ$khyUhHmeH5NuDWAGC<1>uQOE%^!RssW3KV?xP`BR zl(;X722}ApUPYnF?P`DZQE=3Sfb1hI>=CZ(BAKGU_a}5>E50(?*RZ}P0X08;MWU~d zVYzzdJmuSTV%qX$J<{OHV$@69T^F!5N_~PD6NEIu{C4`!W-{k~&@1;E|4blIH;zcw zyX#{tSv8dfPk4Al8egemmn7`3wm{IIGL zR^j>G8wO~W!|!4A%}>HhlAmuPl;YXMOfZ_BEP_ovnxl0rg_teVp^?D?UD}Vt3`$pv8Mv_8un-=iWX{3g<@@RKQkQ`p0AnX44Bju<@6QP9XjLr6N)2-vd7#`1)=(RCB z%yuQOj&j`r{V~84Ep27bDQ@I&B6W1mlIv-v;5L(UZ94#pa`f-`K|XBpPnxv|Q>n@v#GR4It~E3ssAY{_1iGcXftJY8q!F3=u! zPsmF&9mJo>zfj=_Iig@a;oaH0Jn79HW=&~E9kyLc!S6x|mGQMlSqx=PGPsW64pp*T z)hLDF{WbyGfUvzqtebKEMw~7237elWR{nqDsHFgh=nhOn$8Q1(#v}E2vvQ;;MQC{M zUAu~emEF@OrmihiRXZ5htqc=Qz0-h!HFCdZ(GKGjArGF7 z6L6)jFj^D&|Fr@p80xdfjyyIKdxEvOB~kjCfl->t-8*|eWSgupW2WEN3zWwgiLWJc zrx!_q$lpNHP^4#)A9hC#DK0MZN6zLq_~SHTK(E@gD-%99-C;TcES6>C-~avD&=QO? zu7FP&Cg}yg4|Ls=<+Uc*-ovdW zqn0F`HB4@7*IJ_HWLH2N4|i_6XEOO4-(PY-51>@6oEhrI#udFG&21t4CwGP$!%=1o7mZC zE$IU1Xj0^aw$e&*S^bmnzPmK|EYWAWWx8@kv413fIJ;hNf{t$dYs|RMPT8oV2RM)T zS%lUWuFJlugmVlimhJSLje*`XRjmW@RcJHuc%{>ygQw+>s}$4f-y^RunxgRW?AJF; z_Z4?9KUfzJb_{-PXP$vnOA`zg2VlESl6*++lwC`ECFMN%VQsS^Jr@oJfr)ag&xn>A z0eEAA+8!oi=`8V#K6wUu{L7~%2F5(*7)P|An~uplY>L;TnZ<7@{FjdAt61`0L1VT* zPmoTnEEY>frlj4Tr_;jeY*1V)dh0<-^fxp~4a@;y8t&$(39!x%`!p(3q=oRYIfLc2 z=ixrz`!N;AN(6kA$6Y#-7$MmUY~YNQ%1^BL8mp99tywAOax*6Wxigb}wWAMd(yrfk zpXBAdyOSs`XruwRf0EJPQ*?iR`uxm{?N&g8Y*w`7^KVXv$~qW255B%l5P4|FmBZ+t z1b_~rdd=^u_nOd4G6`OKXCE1!TFJsV%)?*}EVzkQt!~w4FlystKsO}7(lrV_>gLzz(U&IME!ZMd^}49O`oz{&#bkK-hO6n z*cpQk(ynR-kQmQ}!!NQS{eXBnpIE zSLFA{>SG;NNHr`dg&}z8oPQeLb5~t&(;XBJiIygvY^zKaU-$22Jz4ugRY}ZW${_)} z_8viR&clhC-IP>Yi29_Re#99U`D$DjZmcKTA~ZM5>9VJsw_Rt?1JenJVxY3|HSiAS z;*5WS6i>jm5uK8*uEx0mhVizh=@9Id2$?-4TYRW8D?lH|a`FxHQ_#su$+zJsUv}O6 zB0;D(Sq1#!=!;3&hW6I=M^cD5Va0&?5Kt*YZ9k<_MO$fMpbG!p52-EMyoJGQqIojnw zE*!mJpEzn9>B1o8c)}*(k3~)3ZyK_fSWg^dBY_HLu;`G@0{R|$Pm6R&c61IlRc$^K z+K}voAHjtir+)cgV64DF*Q!+>GP4+i;E55P0WD7KHE~&lsz8zx*Jv`z&SO%0#_{p+ z1p4(YpVY@V{m1?EH#Y)#Pa02&i4e{R;(L>S71IY$gCY;IAhXO!?r z>mO_MEM45}fJ;!({OcWVs`jBn2p82!f$}@1dj)2;w@X%#^n`53#a#>6E6fYSKDA zeD|$Eeu_ci7rs&l_!ilW5%DI?1(s0AyzGOq98hFGKfsxjNFp_$C=ux58^t|-aSAFj7SJZpzuHC==DlFXb7iCfNRGmY~kiJD`}*m z1Ccg;vg_aTN0Ud>4?a-mV+Zyu%1ShzpTcOG_PXfZ!2wpeA}6~rl+-!)UjE<-DnaRj ztXVDWd-Z=VI~Y+a?Cs&NWdpmMm`zACOVfkr!?^ZW#Evna#Jhap&nt8>e#o;-rRBf$ z|41^10-19Nv^f!1y5Vb+bendhlW0ZKZTh+~+hb&AE)(W04v*tu9rFd&FLl>JXz^P= z|5VA4MtR|@pOL^je9MJHkuauO>$a5Hfw$*9lWAkzx z%GseVlNXI!wSxx#eC*&b?z#bI?jCSDSlQvj4nz>W8ZV@Zq-G3TH-0dYh`xwp45Ihn z>x(Z%md>5RV1hW0>vR$BUd%k@{$r*CKxvcgkgNV|WCvQI7LxQMOZfJ}QC~_zTM4ey zrze9M?4VKXbV7kvF4HxMe>S;f00D8f6S9dxBqv&HShz4F$m-HU-z*=mw|9v#f33)J zm`p+Hoq{2w9k{D~^jX@vi3TyuMV}!rx3}+h%0T7(qM5fG8wr36uwuLCY@ng!67se2 z2ASojow)C#HzLCV5qbcgYJ1qbqELzyIsDq~m)R>HuLWt$Q_;{Hs`J~xxh+FS zT9`?;YVNx!ixz>~UEO>m-Yc9U6w0(od+ykNg|}x#n8QrM>6>t1K`R`KfU1{!>bTd5yK;>Bp2-H5>hpPXfA4m0EWx*EWvqaie zUr{y6&^|2rT9i>>V@@lVQ>qqvy8aL1J}5gZ8HecLo99DKXv(X#(et8>euEi8a=*I5 z^XIX-sf~U4T&q1HtODU$L5jGzgli`23Q_1DEgoJDFOiXZ42ylPZq3|66@k%Uy$$6ICu{I zT!KxZGp0_>bZG<9Dzk)sLWLN{H^BzC)U*kV(L(YIq$`(L@}WB6fn=dmRviz;ogD3M zu%cOQ-vT{-K%OCZK^buBle+O0^(r%1Y6qT}aSivrSUQC4`Y7-hoY!fZZ~dqUEEc7o z&31XeT%NXJnP3vi+8Jq!AFQ|f9yAD>2lMpGe+^KmZv^*n0(ytC;WF@|g_@Fx^#48I zqpynN$F#Mi?_703U&@u)zj94;iy_eIX`z=;Cfg?~U@uWZ*)-F+lDT5Vd_ z;TE>Z@{Z`fy&??(FqjXQ-tX5g2ZuatWRl*Fuh&<*o)a1HC z(lt6UqFD8j<+w0Y>%WS_%Z6g!`x(fj#u9R1XI2FBq?-x#fqS6>C@NspvG>6{Mhti)wyri7TAI1Ba>kXtUZqJ40N<5s4<6d; zXyqNDXDZ0g7l8RLg0;nkN*$E7ES^l&1Hb41r^#37C$h71ni37f3*sEW1x22-5~*KA zMmm-pU^fyv@cPSmDgAddS6sQKwoysuM8fgrutWFiJAKxC&!nJxV5!yF5Jv<0knu4+|6R6(W5u z;(;^t^We3X#idDoLG3yLeS5o1mcPwysqOFsNZPKhhcgXap7Sijugs?A;X1KTv3ZA; ziPadqHBQEj;i>I~XWYO%+SS~|woP9E){3`WpW@XsV2s%V_Rk`L~89}b9HR6qs znR{?_Vro#`ZZp-XhoAcd-+!D=o%p6~nqo z1xubhxQG1QQY*?!z8VWr<#arWZV?fr1XFP{&Y9r#k)f0s>iETi@iuj38n6DkiHl!zEQ0g z==E+AsQejyI1oc75g#r1Esaqv%lGkEQv%`KsNQjZ%cf$vft+8!%$O5~4Pu0^f-&L+ zG^U-Hx4ldo{P#W2RV>t}91(`=py@^bdvq%f&Q~SeboS0imI^8Jevf(PeI^~Se^l@E z?HR^nZA%{F2;h+&EF083p@dN?v38wWE7E{t+Q_j@{sZBESlS3VM13xnZ}l?Xmf1GZ zYHSUZyhgvOiX1m?N^*1Xlxq2{X3ehS8B+&~#x}& z1M25ioL69A-z#2x9E1zRA>PtzA|y)8?Xsq_(_-YQEz)e|nRUAog}1r05|xNJ)S)us z@c&-AlgVR+f8Mn%P*Zploro9iMh{nT6A73Qk)kr8vi4g}<9q{_JK6SLYd{rz@m#0SnN~{lXD7o`JWLsC$6J=D) z!Vzu z%-Ozv>PCj$NW1p7OX@hO!;$2wz!!gfKZGUNWNm-J(VlgGF@b2_Dx1ek-`C8BvflcO z%&l2N{klu zaEz|NYt{eIl3H{JYwjbG16EOmHqMplJ2Xfo(oV{M{GBvbs00qKZE>~2U+3j$_# zc}rR&Bk@oe5i3ZgHJw#DvyE9dY>ugP%J#5IkHNDythM~AT7^Dc%v9!7+d#{7U08G+f74o|lx^oa>_X@Y;|s$!AU`5w zLD(}`-%XuyZg>VA$d#qm=9|s3#0=Q{OGV@;DhANj6=gvSq z2Gxxi{9FJumjGoxLKM>-?P0!Gw^YX;0g5xM92u=|O$Xa;Aw0MzH(ZKH$Wasar;@j7 zgGkg&ZQrp&h@FhNx;Q`G=V86*ero0Y(M;||^>b#4&q)amwVI{=*l)^i6H5E}mKv~G zLIfsZ^qpX+>!3Y`A-+L6VE6?A{C43?-rAg0ImO^mWH@&m%TlB4Pum_GJu~){icHr~|AP44^+>T9TwV{e zPFOu>nR93lCg47c9VG~|L&sznkTZ%LC9h2g;daY{KPGAaD@yOR_U(P3W2HTtw}_Ed zB6IdFbF0-bCjc-q_~_5nlyA%_Cpab;!b8csyur(6Q*?3vzyMOSl^MC%PJp+(P#2N% zB!9`9qtc5&)B?uSU@8Ch2nB;S#;Be;sq`PY!66`gl<4DogSm@2v3-LSg|CE4U9DSYg|loQWv zT0?i=yE~ZAh@gI-zt>2oou?3@M2MTo9IYDSydVcz+W>ggc4P!j3R6q*1P0uq} zC(&)xb?hU^+5Zd=hjQ+07XYC8sC;4j|E3ExMsv3g>KK!yE1I}s-?`Cf@%Xq|CG+=O z)nZ|lA@2rw*fvl-6XUH^5JZ~(Wfo+9A~uj@pdoBQX`lLJ^L}n~huIpP0n4^FfEnM;_xxXVU~PhFBU z7V9XA-k{u2(;uY@=>E9V`CvZ1A=-ca8kN}VFxI7-p3XD4x4QB#0btVdwRKiOCsV?` zlElM*Ktw;6v?iaF7)S#YyZR1CR6p7;LmN^4}Mti;aWXX2;pi}J#K;yUw`j<>0ij?0CP zH-#nQH^T)s)Mgg>i=Q959hEmt&^Q;=DUBPAi!Jk|nin>rgEp3sIIcPToPR>YCKiyL z^0pe?o@cdoDpO1KA%6KrgCPK`;&b(@2n1~viYv}>S(M`sD^eOrNXgDJ^_15n#hi%n zeEZ0KRPw5IaNEv0*mh7LcQ5Z2;*cASoXn492@ zg%k3zHGXc$9KJj!o~tEHed>czGBW>*D1i*$59yGaLTdbf+Er0)8iR$&i#u;$SeCj9 zeT*DFV|G)n)&;E$&lq5m9OY>HOY`A^_*eoD+ZrBEwDU}chZ#eBr4RAh_xy~`86iBS z`;X^0?8X;qTLl{Is>s6o5hsbOrMq);+X7trI-}30nxVA45IF&FK}50`z)fSe^z0H`rIKH@0MLv(hxB!4 z#PD#Q(0jJtlGy-7s~;o-%A3rWYq#oS7XFB}E0oPQtg{vFF^{b1t}N5c&bq#wpX+Q=anYj80ro*(oFn+uu(%zV_6t zpCkP3Nfr44DQf*+=s@+rQFud0HH+>?UA@)VHwhsgn_QzFC2rx+;#?l{BaAtt8!yYq zosQnV7GHLK4SGR!)mm$8=w_hW@o_&gUe~WxAu3CX6|}MbS8!(eY>CZbHMIysF(Z0D zS{}icznXf?#5pCws3v?N-eH+$>P;q(0fpxs;|OIM^`P>@1ho?apzJjyy1r&NQ)4E* z(^BGi+qJ*5`AM<~P1a$Xbw7sNm04%OP|F#XF1OdHc@Np1D@ue}8;S8$m>i)*PF}t0 za;*|xhMUyR9L&Gj09^XgEHdz$w`rw;(uVm%g)k|_2y^SzmXcKbV z<&J>e6X!k+OC%rz@k{x=Ja+^7N28-_^H)j1vShw(SvMx@(VKz?gv4i-#`WY7;95Qh z1}E0MKk;Xx-Tp3TQ^ERSp-{X_2gOh>Q3vJS_2;Gdo%}0oQ>4@R*@f_MkY6MVvB82dW-`~??Lds~mRw3VED$jeKf9!V1*98#iYKWU6vCou}ulWT^J*5pEzPt=+ jKWzA;!V1j~YMM&i>VN(ZkQzqN*Hy`Is6Hs2>jnS-!@oVB literal 0 HcmV?d00001 diff --git a/src/app/api/teamrec/google/route.ts b/src/app/api/teamrec/google/route.ts index dfffa94..cc24d00 100644 --- a/src/app/api/teamrec/google/route.ts +++ b/src/app/api/teamrec/google/route.ts @@ -26,7 +26,7 @@ export async function POST(req: Request, res: NextResponse) { }); const systemPrompt = `${prompt}, YOU ARE ON [PART ${body.part}] ${body.part > 1 ? `Past Info Provided: ${currentInfo}` : ""} PRINT ONLY [PART ${body.part}]`; - console.log(`YOU ARE ON [PART ${body.part}] `) + console.log(`YOU ARE ON [PART ${body.part}], ${availableCharacters} `) if(body.part == 1) { const result = await streamText({ model: google('models/gemini-1.5-flash-latest'), diff --git a/src/app/api/teamrec/prompt.ts b/src/app/api/teamrec/prompt.ts index dabfe04..4dee074 100644 --- a/src/app/api/teamrec/prompt.ts +++ b/src/app/api/teamrec/prompt.ts @@ -13,9 +13,9 @@ Healer/Shielder (Slot 4): Reserve slot 4 for a healer or shielder to sustain the Your Goal: Create a balanced team capable of handling various challenges in the game. -Your Response: Your response should be an array containing ONLY the filename of the selected characters. Ensure it is only the CHARACTER_FILENAME, which contain crucial information for character identification. Sometimes there will be another list provided of characters that is not available to be chosen and that character cannot be chosen again for this team. +Your Response: Your response should be an array containing ONLY the filename of the selected characters. Ensure it is only the CHARACTER_FILENAME, which contain crucial information for character identification. Sometimes there will be another list provided of characters that is not available to be chosen and that character cannot be chosen again for this team. You can only choose one traveller. Only if it is traveller return as Traveller (Element) instead of filename. -If there is another list of characters provided that cannot be chosen, please indicate and select alternative characters accordingly. +If there is another list of characters provided that cannot be chosen, please indicate and select alternative characters accordingly. [PART 1 END] @@ -42,7 +42,7 @@ The format should be in Markdown. --------- [PART 1 START] -Character_filename 1, Character_filename 2, Character_filename 3, Character_filename 4 [FILENAME IS PRIORITY DO NOT SPELLCHECK] +Character_filename 1, Character_filename 2, Character_filename 3, Character_filename 4 [FILENAME IS PRIORITY DO NOT SPELLCHECK, IF PLAYERBOY OR PLAYERGIRL (TRAVELLER) RETURN AS Traveller (ELEMENT) INSTEAD] [PART 1 END] [PART 2 START Create a Team Name] # Combine character names, use a standardized name, or employ a creative word and build off of that. @@ -120,13 +120,11 @@ Provide a short description of builds, stats, artifacts, weapons, and recommende [PART 4 END] [Additional Notes: -Ensure the first character is always the Main DPS. -The second and third characters are Sub DPS/Support, choose only the best one. -Try to make the fourth character a Healer/Shielder, if they do not provide those utilities, instea make them a support or Sub DPS. +Try to ensure the characters are in the correct slots, with 1 = DPS 2/3 = Sub DPS or support, 4 = Healer or Shielder. Describe artifacts, weapons, and substats for each character. Conclude with team rotation and tips for effective play. Do not display any information with square brackets []. - +If it is a traveller, return as Traveller (Element) `; export default prompt; \ No newline at end of file diff --git a/src/app/characters/[name]/page.tsx b/src/app/characters/[name]/page.tsx index c5e77e8..0e489c9 100644 --- a/src/app/characters/[name]/page.tsx +++ b/src/app/characters/[name]/page.tsx @@ -21,18 +21,15 @@ export default async function CharacterPage({ params }: { params: { name: string let CharacterData; const response = await fetch(`https://genshin-db-api.vercel.app/api/v5/stats?folder=characters&query=${params.name}&dumpResult=true`); - if (!response.ok) { - throw new Error("Failed to fetch character data"); - } + const res = await response.json(); CharacterData = res.result; const names = addFileName([CharacterData]); const characterName = names[0].fileName; - const [constellationsResponse, talentsResponse, nameCardResponse, voiceResponse, outfitResponse] = await Promise.all([ fetch(`https://genshin-db-api.vercel.app/api/v5/constellations?query=${params.name}&matchCategories=true&dumpResults=true&verboseCategories=true`), fetch(`https://genshin-db-api.vercel.app/api/v5/talents?query=${params.name}&matchCategories=true&dumpResults=true&verboseCategories=true`), - fetch(`https://genshin-db-api.vercel.app/api/v5/namecards?query=${characterName}&matchCategories=true`), + fetch(`https://genshin-db-api.vercel.app/api/v5/namecards?query=${CharacterData.nameCardName ? CharacterData.nameCardName : characterName}&matchCategories=true`), fetch(`https://genshin-db-api.vercel.app/api/v5/voiceovers?query=${params.name}&matchCategories=true`), fetch(`https://genshin-db-api.vercel.app/api/v5/outfits?query=${params.name}&matchCategories=true&dumpResults=true&verboseCategories=true`) ]); diff --git a/src/app/components/CharacterCard/team.tsx b/src/app/components/CharacterCard/team.tsx index 26ab200..7e6e24e 100644 --- a/src/app/components/CharacterCard/team.tsx +++ b/src/app/components/CharacterCard/team.tsx @@ -2,10 +2,10 @@ import { useState, useEffect } from "react"; import Image from "next/image"; import { Character } from "@/app/types/character"; -const isCharacterOwned = (arr:any, targetName:string) => { - return arr.some((character:Character) => character.name === targetName); +const isCharacterOwned = (arr: any, targetName: string) => { + return arr.some((character: Character) => character.name === targetName); }; -export default function TeamCharacterCard({ character, selectCharacter, removeCharacter, activeProp, selectOwned, ownedOption, ownedCharacters }: { +export default function TeamCharacterCard({ character, selectCharacter, removeCharacter, activeProp, selectOwned, ownedOption, ownedCharacters, traveller = false }: { character: Character, index: number, selectCharacter: (char: Character) => void, @@ -13,7 +13,8 @@ export default function TeamCharacterCard({ character, selectCharacter, removeCh activeProp: () => boolean, selectOwned: (char: Character) => void, ownedOption: boolean; - ownedCharacters: Character[] + ownedCharacters: Character[], + traveller?: boolean }) { const [active, setActive] = useState(activeProp()); const [owned, setOwned] = useState(false); @@ -33,6 +34,7 @@ export default function TeamCharacterCard({ character, selectCharacter, removeCh setActive(!active); } }; + useEffect(() => { if (ownedOption) { const isOwned = isCharacterOwned(ownedCharacters, character.name); @@ -54,14 +56,24 @@ export default function TeamCharacterCard({ character, selectCharacter, removeCh {`${character.region} )} - {`${character.name}`} + {traveller ? + {`${character.name}`} : + {`${character.name}`} + }

{character.name}

diff --git a/src/app/components/CharacterInfo/index.tsx b/src/app/components/CharacterInfo/index.tsx index 08d4d21..552f535 100644 --- a/src/app/components/CharacterInfo/index.tsx +++ b/src/app/components/CharacterInfo/index.tsx @@ -1,4 +1,3 @@ -"use client" import { Character } from "@/app/types/character"; import StatsTable from "@/app/components/StatsTable"; import InfoCharacterBanner from "@/app/components/CharacterInfoBanner"; diff --git a/src/app/components/CharacterInfoBanner/index.tsx b/src/app/components/CharacterInfoBanner/index.tsx index 81b7d23..771ca38 100644 --- a/src/app/components/CharacterInfoBanner/index.tsx +++ b/src/app/components/CharacterInfoBanner/index.tsx @@ -2,11 +2,12 @@ import Image from "next/image" import { motion, useScroll, useTransform } from "framer-motion" import { useRef, useState, } from "react" +import { Character } from "@/app/types/character" export default function InfoCharacterBanner({ characterData, params }: { - characterData: any, + characterData: Character, params: { name: string }, diff --git a/src/app/components/Gallery/index.tsx b/src/app/components/Gallery/index.tsx index 333ef66..910c4b3 100644 --- a/src/app/components/Gallery/index.tsx +++ b/src/app/components/Gallery/index.tsx @@ -1,3 +1,4 @@ +"use client" import Image from "next/image" import { useState } from "react" import Link from "next/link"; @@ -10,7 +11,6 @@ export default function Gallery({ characterData: Character }) { const [active, setActive] = useState(0); - // console.log(characterData) return ( <>

Gallery

diff --git a/src/app/components/StatsTable/index.tsx b/src/app/components/StatsTable/index.tsx index 7034979..c4b941a 100644 --- a/src/app/components/StatsTable/index.tsx +++ b/src/app/components/StatsTable/index.tsx @@ -1,3 +1,4 @@ +"use client" import { Character } from "@/app/types/character"; import Image from "next/image"; import { useLayoutEffect, useState } from "react"; diff --git a/src/app/components/TeamBuilder/index.tsx b/src/app/components/TeamBuilder/index.tsx index 330c831..b51061d 100644 --- a/src/app/components/TeamBuilder/index.tsx +++ b/src/app/components/TeamBuilder/index.tsx @@ -76,8 +76,8 @@ export default function TeamBuilder({ }; const removeCharacter = (character: Character) => { - const updatedCharacters = activeCharacters.map((item, i) => { - if (item.name === character.name) { + const updatedCharacters = activeCharacters.map(item => { + if (typeof item.name === 'string' && item.name.startsWith("Traveller") || item.name === character.name) { return {}; } return item; @@ -137,10 +137,10 @@ export default function TeamBuilder({ } const handleOwnedClick = (character: Character) => { - const isOwned = ownedCharacters.some(c => c.id === character.id); + const isOwned = ownedCharacters.some(c => c.name === character.name); let updatedOwnedCharacters; if (isOwned) { - updatedOwnedCharacters = ownedCharacters.filter(c => c.id !== character.id); + updatedOwnedCharacters = ownedCharacters.filter(c => c.name !== character.name); } else { updatedOwnedCharacters = [...ownedCharacters, character]; } @@ -209,6 +209,7 @@ export default function TeamBuilder({ if (part == 1) { const namesArray = recommendedData.trim().split(", "); + console.log(namesArray) let startIndex = 0; let endIndex = 0; if (team === 1) { @@ -221,8 +222,14 @@ export default function TeamBuilder({ for (let i = startIndex; i < endIndex; i++) { const nameToSearch = namesArray[i - startIndex]; - - const character = CharacterData.find(character => character.fileName.toLowerCase().includes(nameToSearch.toLowerCase())); + const character = CharacterData.find(character => { + if(nameToSearch.toLowerCase().startsWith("traveller")) { + return character.name.toLowerCase().includes(nameToSearch.toLowerCase()) + } else { + return character.fileName.toLowerCase().includes(nameToSearch.toLowerCase()) + } + } + ); if (character) { selectCharacter(character, i); } else { @@ -324,8 +331,6 @@ export default function TeamBuilder({ const dragCharacter = useRef(0) const draggedOverCharacter = useRef(0) - - return ( <>
@@ -353,18 +358,23 @@ export default function TeamBuilder({ const weaponConditions = [true, "Bow", "Sword", "Polearm", "Claymore", "Catalyst"]; const validElement = activeElement === 0 || elementConditions[activeElement] === character.elementText; const validWeapon = activeWeapon === 0 || weaponConditions[activeWeapon] === character.weaponText; - if (character.name == "Aether" || character.name == "Lumine") return //temp + if (character.name == "Aether" || character.name == "Lumine") return null if (validWeapon && validElement) return { - const count = activeCharacters.filter(item => item.name === character.name).length; - return count === 1; + let travellerActive = 0 + if (character.name.startsWith("Traveller")) { + travellerActive = activeCharacters.filter(item => typeof item.name === 'string' && item.name.startsWith("Traveller")).length; + } + const isCurrentActive = activeCharacters.some(item => item.name === character.name); + return travellerActive > 0 || isCurrentActive; }} - selectOwned={handleOwnedClick} ownedOption={selectedOwned} ownedCharacters={ownedCharacters} /> @@ -407,9 +417,10 @@ export default function TeamBuilder({
{mounted ? activeCharacters.map((character: any, index: number) => { if (!secondTeam) { - if (index > 3) return + if (index > 3) return null } - return
setSelectedSlot(index)} draggable onDragStart={() => (dragCharacter.current = index)} @@ -418,7 +429,14 @@ export default function TeamBuilder({ onDragOver={(e) => e.preventDefault()} > {character.active ?
- + {character.name.startsWith("Traveller") ? + + : + + } +
+ {`${character.element} +
:
diff --git a/src/app/teambuilder/page.tsx b/src/app/teambuilder/page.tsx index e73fdcf4..f18eb03 100644 --- a/src/app/teambuilder/page.tsx +++ b/src/app/teambuilder/page.tsx @@ -2,7 +2,7 @@ import { Suspense } from "react"; import TeamBuilder from "../components/TeamBuilder"; import { addFileName } from "../utils/helper"; import Loader from "../components/Loader"; - +import { Character } from "../types/character"; export default async function TeamBuilderPage() { const response = await fetch('https://genshin-db-api.vercel.app/api/v5/characters?query=names&matchCategories=true&verboseCategories=true', { cache: 'no-cache' @@ -11,17 +11,29 @@ export default async function TeamBuilderPage() { throw new Error("failed to fetch") } const res = await response.json() - const characterData = res.sort(); + let characterData = res.sort(); characterData.forEach((name: any) => { addFileName([name]); }); + const addCharacterToCharacterData = (characters: Character[], character: Character, element: string) => { + const newCharacter = { ...character, name: `Traveller (${element})`, elementText: element }; + return [newCharacter, ...characters]; + }; + let modifiedCharacterData = characterData; + modifiedCharacterData = addCharacterToCharacterData(modifiedCharacterData, characterData[0], "Hydro"); + modifiedCharacterData = addCharacterToCharacterData(modifiedCharacterData, characterData[0], "Dendro"); + modifiedCharacterData = addCharacterToCharacterData(modifiedCharacterData, characterData[0], "Electro"); + modifiedCharacterData = addCharacterToCharacterData(modifiedCharacterData, characterData[0], "Geo"); + modifiedCharacterData = addCharacterToCharacterData(modifiedCharacterData, characterData[0], "Anemo"); + + let sortedCharacterData = modifiedCharacterData return ( <>

Team Builder (Beta)

}> - + ); diff --git a/src/app/types/character.ts b/src/app/types/character.ts index dc4b9bd..3b2e325 100644 --- a/src/app/types/character.ts +++ b/src/app/types/character.ts @@ -61,6 +61,7 @@ export type Character = { "hoyolab-avatar"?: string; }; fileName: string; + nameCardName: string; talents: any; constellations: any; voices: any; diff --git a/src/app/utils/helper.ts b/src/app/utils/helper.ts index a669e9b..4dc6465 100644 --- a/src/app/utils/helper.ts +++ b/src/app/utils/helper.ts @@ -71,6 +71,7 @@ export function addFileName(names: any[]) { { name: "Raiden Shogun", fileName: "Shougun", + nameCardName: "Raiden" }, { name: "Sangonomiya Kokomi", @@ -111,21 +112,33 @@ export function addFileName(names: any[]) { { name: "Xianyun", fileName: "Liuyun" + }, + { + name:"Tartaglia", + fileName:"Tartaglia", + nameCardName:"Childe" } ]; MihoyoNames.sort((a, b) => a.name.localeCompare(b.name)); const mihoyoMap = new Map(); - MihoyoNames.forEach(({ name, fileName }) => { - mihoyoMap.set(name, fileName); + MihoyoNames.forEach(({ name, fileName, nameCardName }) => { + mihoyoMap.set(name, { fileName, nameCardName }); }); for (const nameEntry of names) { - const fileName = mihoyoMap.get(nameEntry.name); - nameEntry.fileName = fileName !== undefined ? fileName : nameEntry.name; + const mihoyoEntry = mihoyoMap.get(nameEntry.name); + if (mihoyoEntry) { + nameEntry.fileName = mihoyoEntry.fileName; + nameEntry.nameCardName = mihoyoEntry.nameCardName; + } else { + nameEntry.fileName = nameEntry.name; + nameEntry.nameCardName = undefined; + } } - return names + + return names; } export function parseColorTags(text: string) {