From 516d520c5e8a74f0189c69a43490707be62e4805 Mon Sep 17 00:00:00 2001 From: "PC-20230316NUNE\\Administrator" <2858626794@qq.com> Date: Sat, 23 Dec 2023 19:00:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=9C=B0=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataTables/Datas/__beans__.xlsx | Bin 9813 -> 9889 bytes DataTables/Datas/__tables__.xlsx | Bin 10495 -> 10482 bytes .../Datas/战斗/模式/无尽模式/OnHook地图.xlsx | Bin 10308 -> 10317 bytes .../Datas/战斗/模式/无尽模式/天空城地图.xlsx | Bin 10086 -> 14409 bytes .../resources/config/json/tbgonhookmap1.json | 10 - .../config/json/tbgonhookmap120001.json | 972 ++++++++++++++++++ ...json.meta => tbgonhookmap120001.json.meta} | 2 +- .../resources/config/json/tbgonhookmaps.json | 4 +- .../battle/mode/CampGuardianMode.prefab | 3 + .../resources/prefab/ui/主页/MainView.prefab | 380 ++++++- .../模式/CampGuardian/阵营守护战斗页面.prefab | 164 +-- JisolGameCocos/assets/script/App.ts | 8 +- .../script/battle/base/role/GRoleDefault.ts | 12 +- .../script/battle/modes/GCampGuardianMode.ts | 28 +- .../assets/script/battle/modes/GMode.ts | 17 + .../assets/script/battle/modes/GMode.ts.meta | 9 + .../assets/script/battle/modes/GOnHookMode.ts | 22 +- .../assets/script/battle/modes/GPVPMode.ts | 10 +- .../assets/script/config/data/schema.ts | 40 +- JisolGameCocos/assets/script/consts/GAPI.ts | 3 + .../script/ui/Consts/Game/ModeRender.ts | 16 +- .../assets/script/ui/Home/MainView.ts | 7 + JisolGameCocos/extensions/ngame | 2 +- JisolGameCocos/proto/GOnHookMessage.proto | 1 + ...nHookMap1.java => TbGOnHookMap120001.java} | 10 +- .../Main/src/main/java/cfg/Tables.java | 6 +- .../main/java/cfg/TbGEntity/TOnHookLevel.java | 12 + ...nHookMap1.java => TbGOnHookMap120001.java} | 22 +- .../game/mode/GOnHookController.java | 23 + .../cn/jisol/game/entity/mode/ModeOnHook.java | 50 + .../game/entity/mode/ModeOnHookInfo.java | 20 + .../cn/jisol/game/proto/GOnHookMessage.java | 360 ++++--- .../cn/jisol/game/proto/GOnHookMessage.proto | 1 + .../cn/jisol/game/table/GTbGOnHookLevels.java | 85 ++ .../java/cn/jisol/game/table/TableUtil.java | 22 + .../main/resources/json/tbgonhookmap1.json | 10 - .../resources/json/tbgonhookmap120001.json | 972 ++++++++++++++++++ .../main/resources/json/tbgonhookmaps.json | 4 +- 38 files changed, 3020 insertions(+), 287 deletions(-) delete mode 100644 JisolGameCocos/assets/resources/config/json/tbgonhookmap1.json create mode 100644 JisolGameCocos/assets/resources/config/json/tbgonhookmap120001.json rename JisolGameCocos/assets/resources/config/json/{tbgonhookmap1.json.meta => tbgonhookmap120001.json.meta} (72%) create mode 100644 JisolGameCocos/assets/script/battle/modes/GMode.ts create mode 100644 JisolGameCocos/assets/script/battle/modes/GMode.ts.meta rename JisolGameServer/Main/src/main/java/cfg/TB/{TbGOnHookMap1.java => TbGOnHookMap120001.java} (78%) rename JisolGameServer/Main/src/main/java/cfg/{TbGOnHookMap1.java => TbGOnHookMap120001.java} (56%) create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/entity/mode/ModeOnHookInfo.java create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/table/GTbGOnHookLevels.java create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/table/TableUtil.java delete mode 100644 JisolGameServer/Main/src/main/resources/json/tbgonhookmap1.json create mode 100644 JisolGameServer/Main/src/main/resources/json/tbgonhookmap120001.json diff --git a/DataTables/Datas/__beans__.xlsx b/DataTables/Datas/__beans__.xlsx index 86a07228a2632a11409e4571a5b38dc4031643dc..762372dc4414180176a747606bf4b226728c23e7 100644 GIT binary patch delta 2790 zcmV4-h+HQ42@tFMo`Q?|7q?5I%yhqTctYwD6fFKVft9dDx8JZVUe~dh1spPb(C1hv= z22Jwgqm-$H)f%pJtw7rnjOR$wBur&!WvxmuHf#lgn!q)r3m3H()Vif!Vnx|Ke_aBO z2syz5EalWv+yZ?y5YZON*??3Jy6OO&VW>cWv<8Pkh<~~kv@m}j=#ssrDD6hMH*IzI z*_`#^&|aHzC^k(KG;ycl{6l;@yS(n6>X)*e6$6x~oFz;HwYAQRd5ZUz?dU3M?95Gh zQ35~P-3pRX?;@6Rdz9XeEJM&9#)d(I{4&3DO7e11_(Q67;f^vT#Kqk_Z<87G9? zwRaz!Z{7M0u{HRg82e%5M{(hBqd199_lP?{-gzJXhx{8*O9KRxpd%WyA_J5G3VP(+ zpvVLO03Z>Qzyu$ESX*Xj}(cM+GhEky#N|C#ZSL>RWR+QCINCk2pY{KT3lF@V#ve2AOLcN)pw*QD-t(#= zj%PW4zsSyMiq9V!wSnbHZlTgQ`rtH;;17*~JIm{DpIx^GRjsFwH&5-sPb++5~dm0QT1r*cb~8>-w&=I&H( zEpzuOw~@IAmD|ePNacLspaL-EZI+L!M9@fo@P);Tw$p*V4m?SK4Gn0!05j0n1rFcr zf)5gHe2&(lKq0jr?POA`%U)xsnX~t^}Kx@#|+UYlc z(vpZ);-E)FEA+lcq${`5W7t)j9uK74eU7WSyLwN0MD#d%M7riFalnbvw!m#Wz)>Cr zKS||v#?RSmw^JGha93Gv5Y`IW4T4zmzCvnE4ir*PQ6{~v_e!|@=ViS)D@6vpjn~sA zA&^N|_bQWKHz0~vI6Hg20^WJm3|2C;TEAuGusp*LyUi@g8BV>V)B|=sRStDeFkS#)d zgaioLA!IKjYTELmmG(`iTDEf9I>@9e!4Dq|~Qg`cPGyN%hiaS6B( ze|rwLrP%=h0AvIJ02BZK0C;RKb7*05Wn@!ya%pa7b1ryoY<-kXZ__Xs$L~mdhseDE zf~LF(F_dHn#G8bK1m%oO^0c*Z><~K@<;JwGD{L%6LKO$ldKpE~@iOhQA@OB!Lcays za+z$4qksSZ|MBDJk?bu$kEzp#R1nU5e{`|gLJqKyM}&2K^r(I7!ZqXwiCKgxXW*j& z2(%oWKII7^ohr+Ok9txj*IieHJ&3Vr@&s6=ba)zLSsl}^E0Pp&BzgccrtYOy>#7@L z!jKd4j7c9|Swc?6$g>P?)Zp?G3OqpqPX>)fAE%xx1J6AIHSA=RK4v%uT}W^We@yDM zk7)+&L1NeiB)S(hA^KLyZcp27s?-p>f>vjs`a(NFt_$2XtjGJ;^R>Bn z_kA(i(zO%a-)DC?e|iu4Ky_C!*(=C5IQp(0>Uz$Q+5pD*L`X&A&?5Q99Nu?5Iz$LucFVNRvi~l zKRJH_T7bzAmP$1NLNY5!jpd9tgz1}tiyABKiX)PZAUKyLA*!yBe{0(psK%7RK_L)R zGl_7L5{e_kqurGujOQqZD zx}InB&>M}u5n8Lae}MH_KA7e>y5q*)=tT5c1XLfyP44sxV_1f(>|Ow4dZO>xu5TFR zq;93^EocP|;qTa6#`fHItwrjj*23{^D~>M~mY1Y+@6t)GH(vT@9K*>d79VC&(@b#5 z3pLAljfOFNn5eTveKf(U6?##k)u0v_G(Dp)U@-va(%(H0KkO1y$~pRf#0R~o6`4p* z4-<*kcia7TBKLN)|M8ekC9k(}vYyUg?{@3&`^~rU3G~l~B0Y1xT;t@?_&1}!kQ%ch z9zX;E?2}_6Kmk;fq#`o`c$3&7lLbWlnm^Q_BGW0N(=u01p5F000000096X00017ldB~>0e+L{ sB_SJndfxXka z!zp0XqgGy-Sd1(_1kp7g+^X~6k%DsGEZyJ&DJUN1=UP_%q+`inz|1(gj6zR+bGmb_Mf%&=| zvHblI1p(!~+4Ft*TdO7o3p$V6L+J4XZZY?fv5I1g4Qi=A18CDjF^~_ZI~tkq=9d_W z$|D}(CLU0|NyzP*s9U{$6$Ho6lxV9BbcHnaQO7zWFix0FD zQ7p_j9J9QIGsbzCm-eap-p`7VbkVM$d~1kNED9a{nH_kQd-}x2tG--o2Zz~X`miOC z$Mm&L#rjZ3TV6h3K?TBu@zTL!yNcY5ZR4k`4@(JXVVpzOTJAO+`iE%`g^yWKf{waQNX4Nte&!K#lLw2z_ zv25I1`cnOh7JL6Eae4M5JFuAk6jlkB8yU9_CKvDQjm+2$;jh6c_)8_#T^o6;fio>p zaWI^-0SiioYsJ6Kpu9R09X6klM^Mer_$F$|8AINzX2}biZK&(cB;GG4SPZzB+KkD1 z!_Me+TvTLMh16VINbDZVf&0H{$hH&;|Dtuzh=6o?O zL&Q_fEw8T8WnD?PZ7uDKG=zn3ij z3gj)cVWu1`o{Cf*J0E(YUUB5&&R~KqAJ3?M^SXlU z6iiogWuUK%XxbDL#WzCL!0P!+2Jq7oCr0~8O*3udU!1rumUT+yDvw^_x?e25rs^Pd zIxHVc>c@=ve%*a4S0P>#B9c~&kyGWG&ewgPcie5R8-X3{DQZ%&=+-Pgo77@QNpyTJCgX4J^pXpY1 zq!tdk_pvb5#HcgLBs{8aEa_b;-Pa*K^*rGkXAJPW`#8|~uSUB`JY{iI3N zOZui8q3vm`nXjZzzKC7zak&lNQc{W;x5~XOzBcu*bMQR(d=avi@kvzNY4!> zJpq~Hccb-fqPaCi48FD}dO%D72*3bbMPTo|zheR|@vtZa}mO-iMpzav3NJ!j7 z1FUf|=X#}OzQP+_Z)$aQP0@nsXX2%OLXQD1k$B$vu-}jTh}eRL7dc!*M3_OcZGG^f z+T^0Ro;+n#ru|I*S-6z9<`9_+p&seUs24ffzOrk;R)4E!tBooR%tDq)g|j2YH@f$M z2a3wfZlPNeWX>xU<5yr1Xp!A0z&+WsMz43VBk#XfR=10 z$0~vP<~hj6-dm(Zty?UO+z%^b6sZEwf{_Xa9S*qM2T`6woyTFW;h>s={s7j_ow!-r zrnX+m_>HU!2m{Og;%U-uYwczKA7`y2)yUhGGoHKL*6< zdTfl%vG#U8@*>g~T<7shv69=JE1`3D$S+p!MV{DPjirEPt{C8?&a?{Cj< zwHGCBwk{l*9WGzGU*A>q;wwehaWr2nw?OfL%*cLJS&RQ%nCqAUQdlM_Xt-DU;#&K` zH~qq&7xd=u)BR&51c@t=JBawfr|%bcrsMWOzZ2{Cg#|%WhY1t0$?L-Jz`vqOL6s~R z3FfbIyy3=RRH1DfE4z6QRo}=CI;m~H&0#9D3ia&`J;#3#b2$ZrgVPlPH1W*6J(j z-p^10_Bp;dP~)OeNaWZwms6D0YCwNbU1!1&ABHUt}MWrKeSaAI(Y9-_4nr;=Gx-)qy zDHz_J@4pqmUOTNf+w-M2(cV{2{`E?a2IQ_Vio}pU722nlia8YJb|npQE()t@^X%wn zY_gxs8o!3+cjuoM#VMz^KhY!7_Y{|%Gz0DZZZdz^P4w(8)fIL>A354;e3{r?=y@|_ zY8A7+JN3?cn-s^h%Pg_#y`VXWCZTtGHZe2^GvufVANT=K3pD`?0$k`xum%8A0sdY0 zo~gKk`GA8k6H)xHit_8h9c{rphe3chpEM8#7X!Nj$uM1TJkSC|%Kxt&{L%{u3{v`q z@&FIqRJ7$+!TD_wk))u@MBpV<>0b;H02!_ez5}q~2)^IK0=~ng!4kkf;D+D?0F6+V W|L=bEoAf`lkAN_Qx_}<^_vD|U=lAyj diff --git a/DataTables/Datas/__tables__.xlsx b/DataTables/Datas/__tables__.xlsx index 79f5b1c0e8aaa3717fc8b1ce9ea2ccd2299dc5d1..f7d937a77e07f26cd8abbffd16b82b198e6ae609 100644 GIT binary patch delta 3417 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 delta 3445 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 N^azVl5d{8J{smEFR+9h# diff --git a/DataTables/Datas/战斗/模式/无尽模式/OnHook地图.xlsx b/DataTables/Datas/战斗/模式/无尽模式/OnHook地图.xlsx index 2b4301860f86a8242fb50d7eae90c00d9d561d58..08918a640b0ca780c539aa6ea019466df365dc8a 100644 GIT binary patch delta 3127 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 diff --git a/DataTables/Datas/战斗/模式/无尽模式/天空城地图.xlsx b/DataTables/Datas/战斗/模式/无尽模式/天空城地图.xlsx index 65aefae4429d2cac47bf73b90deff930e38e7f1b..6c5bd424e7fb4b0c618921a318b907cadd9d598c 100644 GIT binary patch delta 10116 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�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 L5@K)(-GA~woV^b} delta 5753 zcmZWtby(C**Ir6s5u{sc7o>C9MUW77>24H}knWO{AKgeS4H8O&bO_QY9RkwmQj*fC z)aUcO&-cDx%pdnPbLPIznRCsYxz0HQF6-*m$yj){MH&mb=nO0-KuEnukTTp0x<~4x z;ee>8Mno+EazJJd3r zQ{KkWu}ctcPD}?Ng6uhI_}$;Q?xgyL5%KT+0=vW~V2yUV4e<3*eGz!VHqTmUllVDA z-9C_#R=Z!uD8yFgP-7-|bT}7(yI^vd{3G9D*2|V>jg)G$jR+3g7)zr&mWK9XK(w=U zn!%~gHBzsRJa9!3%mH)B+VPf(a9X?Jy7PzkN60MF00)>#HKjSh3hELtg6iEXxW!Lv8_wkYL zu$r$ry*z77?f^tgemk(In-+b2y3o@J>oH_HM@dPy`2B_>d^_4#`Y)ii)DvnLkBV^H z1T~qo<@I;YQc|iwcBXvq)yPErX86g7b5cgf9pH9qVf@6akt3AO)C_$(B5I*D(^zM! zW-eW4BMZO}tWcA))(42|>N+U3Z#8#$LeVL`M+|tUKvsTV_ z&7+$~SIlYv&S+*+v7n{zJ)AEvJ|7C@Li68za{{b)lZL_YFq#zHhxfCp$Ke(*rpsXj zep@ScQ>o-8pIkqiKwDyx9)?l;+wv#dj027|AMgNwxoOC+eIoM2z(jUfjO_u3cku~= z#v{niWv3a`w1v-m1%;5KUb(LXdY@@X-R%<$fQ08IM(VF>l#j?d1UE<&mkl}3R&_$0YYmc&vL>f`2_0%!Hi3YXJ#15 zBQM!vM^BRSdN7qYHMd&27=Eu97v+)>XFdHR>~seV*|3P9hYZ8oQOS}K$xLJRyQzgR z@kc{l3;LJ$jJ7D14|r3=^>^<11VPtc1F|Cp@9-h+rdZ^7IGSZ16_eMivv22pAcyNr zC)zC{rYpx*LjZ~#B|<2E_{;8x$5RrReP>vNEWI*TTr$?>Lz|PI8k>W831TzsjC$r! zXdcUiyiN)&QPj)t1^%;2Z_-oY-VE+h87%4rgRSZxJiE&&Xx=t8H>-pi5LA(U2UuEB z-Vp~(%h<~}-3p-^1i57GEdHpAa2J9p&Q)gF@9g1sRqi$?(@qe~hIbEb_k0Q?@7dRy zqM7(IUF*iz;I`57DT-T&oczn~M6ZUPIWKgy0D~46;&V(+9Kjt=1_n0NoEl#|WO2wzK)mi81O6uC)z+CKcutTGKXHgqRlo zuJ*WzZx$#hckg(wzh|7bSwjBK9BEkd;+KYAqAM$QolbOiDH~cASD6!)JueQMdgW?I zG+sf;r30&?aC&pF{RtI-+n<*AkGKEdS>PXU#VSlo4CsE7azliYWz73UO$+VwaE{!O z3oBXGv(U_Ev#$sFK)BvdA6HgCYG4oW2p#s$Rdwvj_=zr!6P1*;;;74XZ`?cwbvUP319;~)62vNX?Id1;%eFNi>)oH=Y|=$?Y2@oh zT)b`?W38d!CZW=uVpX#nZNh5+jNcqlDvLq+yH@td(I=1&ertJ|CWcw7%<4-;{l#$w zb(%fG>YSNhRy67f{sw4)C8q2P=Cwf$>25VE1LO-l4hCw~PF>?n_hFl)x@!G)ojcD7 z2LbyFLpjrSQC4#K6cL(sF`0a!hDY)-%+5VbxCL<|Cfyd4DGJ$xK2-TA#89j1&O zofoF5Zlp|agG{Sm(OSi@aj7WtS=TsV@y>*m9Z{EW4zZjq7G$V-ewYJg+sT z=d^IsdH9>Sp|!F!`kS-g{o)RcCg4B$q`Y*H#pYCkZ)RtK_;i-3WTvtG`u)gbm!I

v8&M$K?^X`wQARSDu;X_>0 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 w91!T{ //监听攻击 this.fsmAnim.addEventListener(GRoleAnimEvent.Attack,this.onAttack.bind(this)); //监听死亡击飞 - this.fsmAnim.addStartListener(GPetAminEnum.Fly,this.onFly.bind(this)); + // this.fsmAnim.addStartListener(GPetAminEnum.Fly,this.onFly.bind(this)); + this.killBack.push(this.onFly.bind(this)); } //初始化 @@ -106,7 +107,10 @@ export default class GRoleDefault extends GRoleBase<{}>{ //设置血条位置 if(this.spine){ let runtimeData = this.spine.skeletonData.getRuntimeData(); - let headY = (runtimeData.height + runtimeData.y + 20) * this.spine.node.scale.x; + let height = Math.abs(runtimeData.height); + let y = Math.abs(runtimeData.y); + let x = Math.abs(this.spine.node.scale.x); + let headY = (height + y + 20) * x; this.headInfo.setPosition(v3(this.headInfo.position.x,headY,this.headInfo.position.z)) } @@ -155,7 +159,7 @@ export default class GRoleDefault extends GRoleBase<{}>{ this.JTween(vWorld) .to({x:vEndWorld.x},1200) .onUpdate(pos => { - if(this.node.isValid) + if(this.node && this.node.isValid) this.node.worldPosition = pos; }) .start(); @@ -163,7 +167,7 @@ export default class GRoleDefault extends GRoleBase<{}>{ .to({y:vEndWorld.y},1200) .easing(JEasing.Circular.Out) .onUpdate(pos => { - if(this.node.isValid) + if(this.node && this.node.isValid) this.node.worldPosition = vWorld }) .start(); diff --git a/JisolGameCocos/assets/script/battle/modes/GCampGuardianMode.ts b/JisolGameCocos/assets/script/battle/modes/GCampGuardianMode.ts index 7d1a87d2..0ed7187a 100644 --- a/JisolGameCocos/assets/script/battle/modes/GCampGuardianMode.ts +++ b/JisolGameCocos/assets/script/battle/modes/GCampGuardianMode.ts @@ -7,7 +7,7 @@ import GBaseMode from "../GBaseMode"; import { Prefab } from "cc"; import { instantiate } from "cc"; import GRoleCGCrystal from "../base/role/CampGuardian/GRoleCGCrystal"; -import { TD } from "../../App"; +import { TD, app } from "../../App"; import { GTowards } from "../base/GObject"; import GRoleBase from "../base/role/GRoleBase"; import { GTactical } from "../entity/GTactical"; @@ -16,6 +16,8 @@ import { TbGPetId } from "../../config/TbGPet"; import GModeTools from "./GModeTools"; import GPetAttribute from "../base/values/attribute/role/GPetAttribute"; import RandomUtil from "../../../../extensions/ngame/assets/ngame/util/RandomUtil"; +import { GModeEvent } from "./GMode"; +import { Camera } from "cc"; const { ccclass, property } = _decorator; //阵营守护 角色 @@ -51,6 +53,10 @@ export default class GCampGuardianMode extends GBaseMode<{},{}>{ //敌方宠物 enemyRoles: GRoleBase<{}>[] = []; + //模式相机 + @property(Camera) + modeCamera:Camera; + onSyncInitSuccess(){ //生成水晶 @@ -127,8 +133,8 @@ export default class GCampGuardianMode extends GBaseMode<{},{}>{ petStar:0, petStarExp:0, })); - // //绑定受击回调 - // entity.addHitCallback(this.onHitBack.bind(this)); + //绑定受击回调 + entity.addHitCallback(this.onHitBack.bind(this)); this.addGObject(entity,pos); this.getOnesRole(type).push(entity); @@ -158,6 +164,22 @@ export default class GCampGuardianMode extends GBaseMode<{},{}>{ },3000) } + + //角色受击回调 + onHitBack(role:GRoleDefault,hit:number){ + + if(!role.get()) return; + + //添加受击显示 + app.event.emit(GModeEvent.HIT,{ + mode:this, + role:role, + hit:hit, + world:role.v2World, + camera:this.modeCamera, + }); + + } } diff --git a/JisolGameCocos/assets/script/battle/modes/GMode.ts b/JisolGameCocos/assets/script/battle/modes/GMode.ts new file mode 100644 index 00000000..21ab58cb --- /dev/null +++ b/JisolGameCocos/assets/script/battle/modes/GMode.ts @@ -0,0 +1,17 @@ +import { Vec2 } from "cc"; +import GBaseMode from "../GBaseMode"; +import GRoleBase from "../base/role/GRoleBase"; +import { Camera } from "cc"; + +export interface GModeHitInfo{ + mode:GBaseMode<{},{}>, //模式 + role:GRoleBase<{}>, //宠物 + hit:number, //受击 + world:Vec2, //世界坐标 + camera:Camera, //相机 +} + +export enum GModeEvent{ + //受击通知 + HIT = "ModeRenderEvent_HIT" +} \ No newline at end of file diff --git a/JisolGameCocos/assets/script/battle/modes/GMode.ts.meta b/JisolGameCocos/assets/script/battle/modes/GMode.ts.meta new file mode 100644 index 00000000..59359524 --- /dev/null +++ b/JisolGameCocos/assets/script/battle/modes/GMode.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "b9fffb62-4b14-48cb-85fe-51ab780f49c0", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/JisolGameCocos/assets/script/battle/modes/GOnHookMode.ts b/JisolGameCocos/assets/script/battle/modes/GOnHookMode.ts index 06565b84..25f31c80 100644 --- a/JisolGameCocos/assets/script/battle/modes/GOnHookMode.ts +++ b/JisolGameCocos/assets/script/battle/modes/GOnHookMode.ts @@ -15,7 +15,7 @@ import { TD, app } from "../../App"; import { v3 } from "cc"; import { v2 } from "cc"; import GFSMOnHookMode from "./OnHook/GFSMOnHookMode"; -import { TB } from "../../config/data/schema"; +import { TB, TbGEntity } from "../../config/data/schema"; import PlayerTacticalData, { PlayerTacticalEvent } from "../../data/PlayerTacticalData"; import GRoleOnHookPlayerExpand from "../base/role/expand/OnHook/GRoleOnHookPlayerExpand"; import PlayerPetData from "../../data/PlayerPetData"; @@ -23,10 +23,10 @@ import { GUI } from "../../ui/UIConfig"; import { GOnHookPet, GOnHookPets } from "../../../../extensions/ngame/assets/ngame/message/proto"; import GOnHookManager, { GOnHookManagerEvent } from "../../manager/battle/mode/GOnHookManager"; import GRoleOnHookCreepsExpand from "../base/role/expand/OnHook/GRoleOnHookCreepsExpand"; -import { ModeRenderEvent } from "../../ui/Consts/Game/ModeRender"; import GPetAttribute from "../base/values/attribute/role/GPetAttribute"; import GDefaultMode from "./default/GDefaultMode"; import GOnHookData from "../../data/GOnHookData"; +import { GModeEvent, GModeHitInfo } from "./GMode"; const { ccclass, property } = _decorator; //挂机模式状态 @@ -262,7 +262,7 @@ export default class GOnHookMode extends GDefaultMode<{},{}>{ petId:0, petPlayerId:0, petTbId:creeps.petTbId, - petLevel:0, + petLevel:creeps.petLevel, petStar:0, petStarExp:0, })); @@ -357,7 +357,13 @@ export default class GOnHookMode extends GDefaultMode<{},{}>{ //获取敌人 let creeps = GOnHookManager.getIns().getNextCreeps(); if(!creeps) return; //没有获取到野怪则返回 - this.onGenCreeps(2,creeps); + + let sign = TD.TbGOnHookMaps.get(GOnHookData.getIns().info.onHookMap).sign; + let table:{data:TbGEntity.TOnHookLevel} = TD[sign].get(GOnHookData.getIns().info.levelId); + + for (let index = 0; index < table.data.petSize; index++) { + this.onGenCreeps(index + 1,creeps); + } // this.enemyInfo.roles.forEach((info,index) => this.onGenRole(GOnHookModePlayerEnum.ENEMY,index + 1,info)); } @@ -385,7 +391,13 @@ export default class GOnHookMode extends GDefaultMode<{},{}>{ if(!role.get()) return; //添加受击显示 - app.event.emit(ModeRenderEvent.HIT,role.v2World.clone(),hit); + app.event.emit(GModeEvent.HIT,{ + mode:this, + role:role, + hit:hit, + world:role.v2World, + camera:this.camera, + }); } diff --git a/JisolGameCocos/assets/script/battle/modes/GPVPMode.ts b/JisolGameCocos/assets/script/battle/modes/GPVPMode.ts index 1706bfb0..e80dd2ee 100644 --- a/JisolGameCocos/assets/script/battle/modes/GPVPMode.ts +++ b/JisolGameCocos/assets/script/battle/modes/GPVPMode.ts @@ -11,10 +11,10 @@ import { TB } from "../../config/data/schema"; import JNFrameTime from "../../../../extensions/ngame/assets/ngame/sync/frame/game/time/JNFrameTime"; import GBattleModeManager from "../GBattleModeManager"; import { app, TD } from "../../App"; -import { ModeRenderEvent } from "../../ui/Consts/Game/ModeRender"; import { GPVPStart } from "../../action/PVPAction"; import { PlayerPetOV } from "../../consts/API"; import GPetAttribute from "../base/values/attribute/role/GPetAttribute"; +import { GModeEvent } from "./GMode"; const { ccclass, property } = _decorator; //PVP 角色 @@ -241,7 +241,13 @@ export default class GPVPMode extends GBaseMode<{},GPVPStart>{ if(!role.get()) return; //添加受击显示 - app.event.emit(ModeRenderEvent.HIT,role.v2World.clone(),hit); + app.event.emit(GModeEvent.HIT,{ + mode:this, + role:role, + hit:hit, + world:role.v2World, + camera:this.camera, + }); } diff --git a/JisolGameCocos/assets/script/config/data/schema.ts b/JisolGameCocos/assets/script/config/data/schema.ts index 17945ac9..c5e6ee09 100644 --- a/JisolGameCocos/assets/script/config/data/schema.ts +++ b/JisolGameCocos/assets/script/config/data/schema.ts @@ -589,7 +589,7 @@ export class TbGOnHookMaps { export namespace TB { -export class TbGOnHookMap1 { +export class TbGOnHookMap120001 { constructor(_json_: any) { if (_json_.id === undefined) { throw new Error() } @@ -624,8 +624,12 @@ export class TOnHookLevel { constructor(_json_: any) { if (_json_.level === undefined) { throw new Error() } this.level = _json_.level + if (_json_.childLevel === undefined) { throw new Error() } + this.childLevel = _json_.childLevel if (_json_.petLevel === undefined) { throw new Error() } this.petLevel = _json_.petLevel + if (_json_.petSize === undefined) { throw new Error() } + this.petSize = _json_.petSize if (_json_.oddsId === undefined) { throw new Error() } this.oddsId = _json_.oddsId } @@ -634,10 +638,18 @@ export class TOnHookLevel { * 关卡等级 */ readonly level: number + /** + * 子关卡等级 + */ + readonly childLevel: number /** * 宠物等级 */ readonly petLevel: number + /** + * 宠物数量 + */ + readonly petSize: number /** * 概率Id */ @@ -1140,24 +1152,24 @@ export class TbGOnHookMaps{ -export class TbGOnHookMap1{ - private _dataMap: Map - private _dataList: TB.TbGOnHookMap1[] +export class TbGOnHookMap120001{ + private _dataMap: Map + private _dataList: TB.TbGOnHookMap120001[] constructor(_json_: any) { - this._dataMap = new Map() + this._dataMap = new Map() this._dataList = [] for(var _json2_ of _json_) { - let _v: TB.TbGOnHookMap1 - _v = new TB.TbGOnHookMap1(_json2_) + let _v: TB.TbGOnHookMap120001 + _v = new TB.TbGOnHookMap120001(_json2_) this._dataList.push(_v) this._dataMap.set(_v.id, _v) } } - getDataMap(): Map { return this._dataMap; } - getDataList(): TB.TbGOnHookMap1[] { return this._dataList; } + getDataMap(): Map { return this._dataMap; } + getDataList(): TB.TbGOnHookMap120001[] { return this._dataList; } - get(key: number): TB.TbGOnHookMap1 | undefined { return this._dataMap.get(key); } + get(key: number): TB.TbGOnHookMap120001 | undefined { return this._dataMap.get(key); } resolve(tables:Tables) { @@ -1235,8 +1247,8 @@ export class Tables { get TbGRoleBaseAttribute(): TbGRoleBaseAttribute { return this._TbGRoleBaseAttribute;} private _TbGOnHookMaps: TbGOnHookMaps get TbGOnHookMaps(): TbGOnHookMaps { return this._TbGOnHookMaps;} - private _TbGOnHookMap1: TbGOnHookMap1 - get TbGOnHookMap1(): TbGOnHookMap1 { return this._TbGOnHookMap1;} + private _TbGOnHookMap120001: TbGOnHookMap120001 + get TbGOnHookMap120001(): TbGOnHookMap120001 { return this._TbGOnHookMap120001;} private _TbBattleResource: TbBattleResource get TbBattleResource(): TbBattleResource { return this._TbBattleResource;} @@ -1255,7 +1267,7 @@ export class Tables { this._TbGAttribute = new TbGAttribute(loader('tbgattribute')) this._TbGRoleBaseAttribute = new TbGRoleBaseAttribute(loader('tbgrolebaseattribute')) this._TbGOnHookMaps = new TbGOnHookMaps(loader('tbgonhookmaps')) - this._TbGOnHookMap1 = new TbGOnHookMap1(loader('tbgonhookmap1')) + this._TbGOnHookMap120001 = new TbGOnHookMap120001(loader('tbgonhookmap120001')) this._TbBattleResource = new TbBattleResource(loader('tbbattleresource')) this._TbGGlobal.resolve(this) @@ -1272,7 +1284,7 @@ export class Tables { this._TbGAttribute.resolve(this) this._TbGRoleBaseAttribute.resolve(this) this._TbGOnHookMaps.resolve(this) - this._TbGOnHookMap1.resolve(this) + this._TbGOnHookMap120001.resolve(this) this._TbBattleResource.resolve(this) } } diff --git a/JisolGameCocos/assets/script/consts/GAPI.ts b/JisolGameCocos/assets/script/consts/GAPI.ts index d31f4131..133af419 100644 --- a/JisolGameCocos/assets/script/consts/GAPI.ts +++ b/JisolGameCocos/assets/script/consts/GAPI.ts @@ -7,6 +7,7 @@ export interface ModeOnHookOV{ playerId:number; //玩家Id onHookMap:number; //当前玩家所在的地图(配置表Id) + levelId:number; //当前关卡Id } @@ -23,5 +24,7 @@ export const GAPI = { GOnHookCatchCreeps : async (creepId) => RData(await app.api.post(`/game/mode/onHook/onCatchCreeps/${creepId}`)) as PlayerPetOV, //出售野怪 GOnHookSellCreeps : async (creepId) => RData(await app.api.post(`/game/mode/onHook/onSellCreeps/${creepId}`)) as boolean, + //下一关 + GOnHookNextLevel : async () => RData(await app.api.post(`/game/mode/onHook/nextLevel`)) as boolean, } \ No newline at end of file diff --git a/JisolGameCocos/assets/script/ui/Consts/Game/ModeRender.ts b/JisolGameCocos/assets/script/ui/Consts/Game/ModeRender.ts index 958661d2..a23cf5c2 100644 --- a/JisolGameCocos/assets/script/ui/Consts/Game/ModeRender.ts +++ b/JisolGameCocos/assets/script/ui/Consts/Game/ModeRender.ts @@ -8,13 +8,9 @@ import { instantiate } from 'cc'; import { v3 } from 'cc'; import { ModeRenderHitText } from './ModeRenderHitText'; import { Vec2 } from 'cc'; +import { GModeEvent, GModeHitInfo } from '../../../battle/modes/GMode'; const { ccclass, property } = _decorator; -export enum ModeRenderEvent{ - //受击 - HIT = "ModeRenderEvent_HIT" -} - @ccclass('ModeRender') export class ModeRender extends Component { @@ -24,27 +20,27 @@ export class ModeRender extends Component { onLoad(){ - app.event.on(ModeRenderEvent.HIT,this.onHit,this); + app.event.on(GModeEvent.HIT,this.onHit,this); } protected onDestroy(): void { - app.event.off(ModeRenderEvent.HIT,this.onHit,this); + app.event.off(GModeEvent.HIT,this.onHit,this); } //受击 - onHit(pos:Vec2,hit:number){ + onHit(info:GModeHitInfo){ - let rolePos = GData.WorldCanvas.camera.worldToScreen(v3(pos.x,pos.y)); + let rolePos = info.camera.worldToScreen(v3(info.world.x,info.world.y)); let hitNode = instantiate(this.hitPrefab); this.node.addChild(hitNode); hitNode.position = rolePos.add(v3(0,100,0)); - hitNode.getComponent(ModeRenderHitText).setText(hit); + hitNode.getComponent(ModeRenderHitText).setText(info.hit); } diff --git a/JisolGameCocos/assets/script/ui/Home/MainView.ts b/JisolGameCocos/assets/script/ui/Home/MainView.ts index 22c9e068..4cdd9222 100644 --- a/JisolGameCocos/assets/script/ui/Home/MainView.ts +++ b/JisolGameCocos/assets/script/ui/Home/MainView.ts @@ -6,6 +6,7 @@ import GBattleModeManager, { BattleMode } from '../../battle/GBattleModeManager' import { JNGLayerBase } from '../../components/JNComponent'; import { app } from '../../App'; import { GAction } from '../../consts/GAction'; +import { GAPI } from '../../consts/GAPI'; const { ccclass, property } = _decorator; @ccclass('MainView') @@ -60,6 +61,12 @@ export class MainView extends JNGLayerBase { app.layer.Open(GUI.MapSelectView); } + //点击下一关 + async onClickNextLevel(){ + await GAPI.GOnHookNextLevel(); + app.layer.Open(GUI.Tips,{text:"下一关"}); + } + } diff --git a/JisolGameCocos/extensions/ngame b/JisolGameCocos/extensions/ngame index 3a8c35bc..01f3e124 160000 --- a/JisolGameCocos/extensions/ngame +++ b/JisolGameCocos/extensions/ngame @@ -1 +1 @@ -Subproject commit 3a8c35bc7bc02e22021acfc4671e9d8ffaadd87b +Subproject commit 01f3e1248ac4e0d1469e087ab84d8b04315273ff diff --git a/JisolGameCocos/proto/GOnHookMessage.proto b/JisolGameCocos/proto/GOnHookMessage.proto index 5f972cda..397cddd6 100644 --- a/JisolGameCocos/proto/GOnHookMessage.proto +++ b/JisolGameCocos/proto/GOnHookMessage.proto @@ -6,6 +6,7 @@ option java_package = "cn.jisol.ngame.proto"; message GOnHookPet { string key = 1; //生成宠物的key int32 petTbId = 2; //生成宠物的配置表Id + int32 petLevel = 3; //生成宠物的等级 } //生成的宠物类列表 diff --git a/JisolGameServer/Main/src/main/java/cfg/TB/TbGOnHookMap1.java b/JisolGameServer/Main/src/main/java/cfg/TB/TbGOnHookMap120001.java similarity index 78% rename from JisolGameServer/Main/src/main/java/cfg/TB/TbGOnHookMap1.java rename to JisolGameServer/Main/src/main/java/cfg/TB/TbGOnHookMap120001.java index 8ed9611e..14130493 100644 --- a/JisolGameServer/Main/src/main/java/cfg/TB/TbGOnHookMap1.java +++ b/JisolGameServer/Main/src/main/java/cfg/TB/TbGOnHookMap120001.java @@ -14,14 +14,14 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; -public final class TbGOnHookMap1 extends AbstractBean { - public TbGOnHookMap1(JsonObject _buf) { +public final class TbGOnHookMap120001 extends AbstractBean { + public TbGOnHookMap120001(JsonObject _buf) { id = _buf.get("id").getAsInt(); data = cfg.TbGEntity.TOnHookLevel.deserialize(_buf.get("data").getAsJsonObject()); } - public static TbGOnHookMap1 deserialize(JsonObject _buf) { - return new cfg.TB.TbGOnHookMap1(_buf); + public static TbGOnHookMap120001 deserialize(JsonObject _buf) { + return new cfg.TB.TbGOnHookMap120001(_buf); } /** @@ -33,7 +33,7 @@ public final class TbGOnHookMap1 extends AbstractBean { */ public final cfg.TbGEntity.TOnHookLevel data; - public static final int __ID__ = 1197577712; + public static final int __ID__ = 196461379; @Override public int getTypeId() { return __ID__; } diff --git a/JisolGameServer/Main/src/main/java/cfg/Tables.java b/JisolGameServer/Main/src/main/java/cfg/Tables.java index 33cf7582..800c6772 100644 --- a/JisolGameServer/Main/src/main/java/cfg/Tables.java +++ b/JisolGameServer/Main/src/main/java/cfg/Tables.java @@ -47,8 +47,8 @@ public final class Tables public cfg.TbGRoleBaseAttribute getTbGRoleBaseAttribute() { return _tbgrolebaseattribute; } private final cfg.TbGOnHookMaps _tbgonhookmaps; public cfg.TbGOnHookMaps getTbGOnHookMaps() { return _tbgonhookmaps; } - private final cfg.TbGOnHookMap1 _tbgonhookmap1; - public cfg.TbGOnHookMap1 getTbGOnHookMap1() { return _tbgonhookmap1; } + private final cfg.TbGOnHookMap120001 _tbgonhookmap120001; + public cfg.TbGOnHookMap120001 getTbGOnHookMap120001() { return _tbgonhookmap120001; } private final cfg.TbBattleResource _tbbattleresource; public cfg.TbBattleResource getTbBattleResource() { return _tbbattleresource; } @@ -67,7 +67,7 @@ public final class Tables _tbgattribute = new cfg.TbGAttribute(loader.load("tbgattribute")); _tbgrolebaseattribute = new cfg.TbGRoleBaseAttribute(loader.load("tbgrolebaseattribute")); _tbgonhookmaps = new cfg.TbGOnHookMaps(loader.load("tbgonhookmaps")); - _tbgonhookmap1 = new cfg.TbGOnHookMap1(loader.load("tbgonhookmap1")); + _tbgonhookmap120001 = new cfg.TbGOnHookMap120001(loader.load("tbgonhookmap120001")); _tbbattleresource = new cfg.TbBattleResource(loader.load("tbbattleresource")); } } diff --git a/JisolGameServer/Main/src/main/java/cfg/TbGEntity/TOnHookLevel.java b/JisolGameServer/Main/src/main/java/cfg/TbGEntity/TOnHookLevel.java index 84a8ac51..004525a4 100644 --- a/JisolGameServer/Main/src/main/java/cfg/TbGEntity/TOnHookLevel.java +++ b/JisolGameServer/Main/src/main/java/cfg/TbGEntity/TOnHookLevel.java @@ -20,7 +20,9 @@ import com.google.gson.JsonObject; public final class TOnHookLevel extends AbstractBean { public TOnHookLevel(JsonObject _buf) { level = _buf.get("level").getAsInt(); + childLevel = _buf.get("childLevel").getAsInt(); petLevel = _buf.get("petLevel").getAsInt(); + petSize = _buf.get("petSize").getAsInt(); oddsId = _buf.get("oddsId").getAsInt(); } @@ -32,10 +34,18 @@ public final class TOnHookLevel extends AbstractBean { * 关卡等级 */ public final int level; + /** + * 子关卡等级 + */ + public final int childLevel; /** * 宠物等级 */ public final int petLevel; + /** + * 宠物数量 + */ + public final int petSize; /** * 概率Id */ @@ -50,7 +60,9 @@ public final class TOnHookLevel extends AbstractBean { public String toString() { return "{ " + "(format_field_name __code_style field.name):" + level + "," + + "(format_field_name __code_style field.name):" + childLevel + "," + "(format_field_name __code_style field.name):" + petLevel + "," + + "(format_field_name __code_style field.name):" + petSize + "," + "(format_field_name __code_style field.name):" + oddsId + "," + "}"; } diff --git a/JisolGameServer/Main/src/main/java/cfg/TbGOnHookMap1.java b/JisolGameServer/Main/src/main/java/cfg/TbGOnHookMap120001.java similarity index 56% rename from JisolGameServer/Main/src/main/java/cfg/TbGOnHookMap1.java rename to JisolGameServer/Main/src/main/java/cfg/TbGOnHookMap120001.java index edabc1af..6d089f98 100644 --- a/JisolGameServer/Main/src/main/java/cfg/TbGOnHookMap1.java +++ b/JisolGameServer/Main/src/main/java/cfg/TbGOnHookMap120001.java @@ -13,25 +13,25 @@ import luban.*; import com.google.gson.JsonElement; -public final class TbGOnHookMap1 { - private final java.util.HashMap _dataMap; - private final java.util.ArrayList _dataList; +public final class TbGOnHookMap120001 { + private final java.util.HashMap _dataMap; + private final java.util.ArrayList _dataList; - public TbGOnHookMap1(JsonElement _buf) { - _dataMap = new java.util.HashMap(); - _dataList = new java.util.ArrayList(); + public TbGOnHookMap120001(JsonElement _buf) { + _dataMap = new java.util.HashMap(); + _dataList = new java.util.ArrayList(); for (com.google.gson.JsonElement _e_ : _buf.getAsJsonArray()) { - cfg.TB.TbGOnHookMap1 _v; - _v = cfg.TB.TbGOnHookMap1.deserialize(_e_.getAsJsonObject()); + cfg.TB.TbGOnHookMap120001 _v; + _v = cfg.TB.TbGOnHookMap120001.deserialize(_e_.getAsJsonObject()); _dataList.add(_v); _dataMap.put(_v.id, _v); } } - public java.util.HashMap getDataMap() { return _dataMap; } - public java.util.ArrayList getDataList() { return _dataList; } + public java.util.HashMap getDataMap() { return _dataMap; } + public java.util.ArrayList getDataList() { return _dataList; } - public cfg.TB.TbGOnHookMap1 get(int key) { return _dataMap.get(key); } + public cfg.TB.TbGOnHookMap120001 get(int key) { return _dataMap.get(key); } } diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/mode/GOnHookController.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/mode/GOnHookController.java index 7cdc5780..01bafe55 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/mode/GOnHookController.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/mode/GOnHookController.java @@ -15,6 +15,7 @@ import cn.jisol.game.proto.GOnHookMessage; import cn.jisol.game.service.ModeOnHookService; import cn.jisol.game.service.PlayerPetService; import cn.jisol.game.service.ResourceService; +import cn.jisol.game.table.GTbGOnHookLevels; import cn.jisol.game.vo.news.NewsResource; import cn.jisol.game.vo.news.ov.ResourceUpdateOV; import cn.jisol.ngame.util.NewsContext; @@ -92,6 +93,24 @@ public class GOnHookController { return NewsContext.onSuccess("成功",data); } + //下一关 + @ApiImplicitParams({}) + @ApiOperation(value = "下一关") + @PostMapping("/nextLevel") + public NewsContext nextLevel(@CurrentPlayer Player player){ + ModeOnHook data = this.getInfo(player).data; + //获取当前关卡Id + Integer levelId = data.getLevelId(); + + //获取玩家所在地图 是否有下一关关卡 + GTbGOnHookLevels.GTbGOnHookLevel nextLevel = data.getGTbGOnHookLevels().get(levelId + 1); + data.getHookInfo().getMaps().put(data.getOnHookMap(),nextLevel.getId()); + + //保存地图 + modeOnHookService.saveOrUpdate(data); + return NewsContext.onSuccess("下一关"); + } + //生成野怪 @ApiImplicitParams({}) @ApiOperation(value = "生成野怪") @@ -116,6 +135,8 @@ public class GOnHookController { ModeOnHook info = this.getInfo(player).data; TbGOnHookMaps mapInfo = TD.DATA.getTbGOnHookMaps().get(info.getOnHookMap()); List tdPets = Arrays.stream(mapInfo.petIds).mapToObj(petId -> TD.DATA.getTbGRole().get(petId)).collect(Collectors.toList()); + //获取关卡信息 + GTbGOnHookLevels.GTbGOnHookLevel levelInfo = info.getGTbGOnHookLevels().get(info.getLevelId()); //如果小于最大数量则生成 while (creeps.size() < max){ @@ -126,6 +147,8 @@ public class GOnHookController { .setKey(RandomUtil.randomString(8)) //随机取配置表宠物中的宠物 .setPetTbId(tdPets.get(RandomUtil.randomInt(0, tdPets.size())).id) + //设置宠物等级 + .setPetLevel(levelInfo.getData().petLevel) .build(); //添加到宠物列表中 diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/mode/ModeOnHook.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/mode/ModeOnHook.java index 1678d4ed..b2d1e5f5 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/mode/ModeOnHook.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/mode/ModeOnHook.java @@ -1,10 +1,22 @@ package cn.jisol.game.entity.mode; +import cfg.TbGEntity.TOnHookLevel; +import cn.hutool.json.JSONUtil; +import cn.jisol.game.data.TD; +import cn.jisol.game.table.GTbGOnHookLevels; +import cn.jisol.game.table.TableUtil; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; /** * 玩家 无限模式(OnHook) 信息 @@ -12,10 +24,48 @@ import lombok.Data; @Builder @Data @TableName("`mode_on_hook`") +@NoArgsConstructor +@AllArgsConstructor public class ModeOnHook { @TableId(type = IdType.INPUT) private Long playerId; //玩家Id private Integer onHookMap; //当前玩家所在的地图(配置表Id) + private String onHookInfo; //地图信息Json + + @TableField(exist = false) + private ModeOnHookInfo hookInfo; //地图信息类 + @TableField(exist = false) + private Integer levelId; //当前地图Id + + public String getOnHookInfo() { + if (Objects.nonNull(hookInfo)) this.onHookInfo = JSONUtil.toJsonStr(this.hookInfo); + if (Objects.isNull(this.onHookInfo)) this.onHookInfo = JSONUtil.toJsonStr(new ModeOnHookInfo()); + return this.onHookInfo; + } + + public ModeOnHookInfo getHookInfo(){ + if(Objects.isNull(hookInfo)) this.hookInfo = JSONUtil.toBean(this.getOnHookInfo(), ModeOnHookInfo.class); + return this.hookInfo; + } + + //获取当前地图类 + public GTbGOnHookLevels getGTbGOnHookLevels(){ + String sign = TD.DATA.getTbGOnHookMaps().get(this.getOnHookMap()).sign; + return new GTbGOnHookLevels(TableUtil.getTDObject(sign)); + } + + //获取当前关卡Id + public Integer getLevelId(){ + //获取玩家当前地图关卡Id + Integer levelId = this.getHookInfo().getMaps().get(this.getOnHookMap()); + //如果没有则默认当前地图的第一个Id + if(Objects.isNull(levelId)) { + List dataList = this.getGTbGOnHookLevels().getDataList(); + if(dataList.size() == 0) return -1; + levelId = dataList.get(0).getId(); + } + return levelId; + } } diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/mode/ModeOnHookInfo.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/mode/ModeOnHookInfo.java new file mode 100644 index 00000000..51d28082 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/mode/ModeOnHookInfo.java @@ -0,0 +1,20 @@ +package cn.jisol.game.entity.mode; + +import lombok.Getter; +import lombok.Setter; + +import java.util.HashMap; +import java.util.Map; + +@Getter +@Setter +public class ModeOnHookInfo { + + //地图关卡信息 {地图Id: 地图关卡Id} + private Map maps; + + public ModeOnHookInfo(){ + maps = new HashMap<>(); + } + +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/proto/GOnHookMessage.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/proto/GOnHookMessage.java index fa17f147..4c50ff61 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/proto/GOnHookMessage.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/proto/GOnHookMessage.java @@ -26,7 +26,7 @@ public final class GOnHookMessage { * string key = 1; * @return The key. */ - String getKey(); + java.lang.String getKey(); /** *

      *生成宠物的key
@@ -47,6 +47,16 @@ public final class GOnHookMessage {
      * @return The petTbId.
      */
     int getPetTbId();
+
+    /**
+     * 
+     *生成宠物的等级
+     * 
+ * + * int32 petLevel = 3; + * @return The petLevel. + */ + int getPetLevel(); } /** *
@@ -68,14 +78,14 @@ public final class GOnHookMessage {
       key_ = "";
     }
 
-    @Override
+    @java.lang.Override
     @SuppressWarnings({"unused"})
-    protected Object newInstance(
+    protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
       return new GOnHookPet();
     }
 
-    @Override
+    @java.lang.Override
     public final com.google.protobuf.UnknownFieldSet
     getUnknownFields() {
       return this.unknownFields;
@@ -86,7 +96,7 @@ public final class GOnHookMessage {
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       if (extensionRegistry == null) {
-        throw new NullPointerException();
+        throw new java.lang.NullPointerException();
       }
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -99,7 +109,7 @@ public final class GOnHookMessage {
               done = true;
               break;
             case 10: {
-              String s = input.readStringRequireUtf8();
+              java.lang.String s = input.readStringRequireUtf8();
 
               key_ = s;
               break;
@@ -109,6 +119,11 @@ public final class GOnHookMessage {
               petTbId_ = input.readInt32();
               break;
             }
+            case 24: {
+
+              petLevel_ = input.readInt32();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -135,8 +150,8 @@ public final class GOnHookMessage {
       return GOnHookMessage.internal_static_GOnHookPet_descriptor;
     }
 
-    @Override
-    protected FieldAccessorTable
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
       return GOnHookMessage.internal_static_GOnHookPet_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
@@ -144,7 +159,7 @@ public final class GOnHookMessage {
     }
 
     public static final int KEY_FIELD_NUMBER = 1;
-    private volatile Object key_;
+    private volatile java.lang.Object key_;
     /**
      * 
      *生成宠物的key
@@ -153,15 +168,15 @@ public final class GOnHookMessage {
      * string key = 1;
      * @return The key.
      */
-    @Override
-    public String getKey() {
-      Object ref = key_;
-      if (ref instanceof String) {
-        return (String) ref;
+    @java.lang.Override
+    public java.lang.String getKey() {
+      java.lang.Object ref = key_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
+        java.lang.String s = bs.toStringUtf8();
         key_ = s;
         return s;
       }
@@ -174,14 +189,14 @@ public final class GOnHookMessage {
      * string key = 1;
      * @return The bytes for key.
      */
-    @Override
+    @java.lang.Override
     public com.google.protobuf.ByteString
         getKeyBytes() {
-      Object ref = key_;
-      if (ref instanceof String) {
+      java.lang.Object ref = key_;
+      if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
-                (String) ref);
+                (java.lang.String) ref);
         key_ = b;
         return b;
       } else {
@@ -199,13 +214,28 @@ public final class GOnHookMessage {
      * int32 petTbId = 2;
      * @return The petTbId.
      */
-    @Override
+    @java.lang.Override
     public int getPetTbId() {
       return petTbId_;
     }
 
+    public static final int PETLEVEL_FIELD_NUMBER = 3;
+    private int petLevel_;
+    /**
+     * 
+     *生成宠物的等级
+     * 
+ * + * int32 petLevel = 3; + * @return The petLevel. + */ + @java.lang.Override + public int getPetLevel() { + return petLevel_; + } + private byte memoizedIsInitialized = -1; - @Override + @java.lang.Override public final boolean isInitialized() { byte isInitialized = memoizedIsInitialized; if (isInitialized == 1) return true; @@ -215,7 +245,7 @@ public final class GOnHookMessage { return true; } - @Override + @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(key_)) { @@ -224,10 +254,13 @@ public final class GOnHookMessage { if (petTbId_ != 0) { output.writeInt32(2, petTbId_); } + if (petLevel_ != 0) { + output.writeInt32(3, petLevel_); + } unknownFields.writeTo(output); } - @Override + @java.lang.Override public int getSerializedSize() { int size = memoizedSize; if (size != -1) return size; @@ -240,13 +273,17 @@ public final class GOnHookMessage { size += com.google.protobuf.CodedOutputStream .computeInt32Size(2, petTbId_); } + if (petLevel_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(3, petLevel_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; } - @Override - public boolean equals(final Object obj) { + @java.lang.Override + public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } @@ -259,11 +296,13 @@ public final class GOnHookMessage { .equals(other.getKey())) return false; if (getPetTbId() != other.getPetTbId()) return false; + if (getPetLevel() + != other.getPetLevel()) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } - @Override + @java.lang.Override public int hashCode() { if (memoizedHashCode != 0) { return memoizedHashCode; @@ -274,6 +313,8 @@ public final class GOnHookMessage { hash = (53 * hash) + getKey().hashCode(); hash = (37 * hash) + PETTBID_FIELD_NUMBER; hash = (53 * hash) + getPetTbId(); + hash = (37 * hash) + PETLEVEL_FIELD_NUMBER; + hash = (53 * hash) + getPetLevel(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -349,7 +390,7 @@ public final class GOnHookMessage { .parseWithIOException(PARSER, input, extensionRegistry); } - @Override + @java.lang.Override public Builder newBuilderForType() { return newBuilder(); } public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); @@ -357,15 +398,15 @@ public final class GOnHookMessage { public static Builder newBuilder(GOnHookMessage.GOnHookPet prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } - @Override + @java.lang.Override public Builder toBuilder() { return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); } - @Override + @java.lang.Override protected Builder newBuilderForType( - BuilderParent parent) { + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } @@ -385,21 +426,21 @@ public final class GOnHookMessage { return GOnHookMessage.internal_static_GOnHookPet_descriptor; } - @Override - protected FieldAccessorTable + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { return GOnHookMessage.internal_static_GOnHookPet_fieldAccessorTable .ensureFieldAccessorsInitialized( GOnHookMessage.GOnHookPet.class, GOnHookMessage.GOnHookPet.Builder.class); } - // Construct using cn.jisol.ngame.proto.GOnHookMessage.GOnHookPet.newBuilder() + // Construct using cn.jisol.game.proto.GOnHookMessage.GOnHookPet.newBuilder() private Builder() { maybeForceBuilderInitialization(); } private Builder( - BuilderParent parent) { + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } @@ -408,28 +449,30 @@ public final class GOnHookMessage { .alwaysUseFieldBuilders) { } } - @Override + @java.lang.Override public Builder clear() { super.clear(); key_ = ""; petTbId_ = 0; + petLevel_ = 0; + return this; } - @Override + @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { return GOnHookMessage.internal_static_GOnHookPet_descriptor; } - @Override + @java.lang.Override public GOnHookMessage.GOnHookPet getDefaultInstanceForType() { return GOnHookMessage.GOnHookPet.getDefaultInstance(); } - @Override + @java.lang.Override public GOnHookMessage.GOnHookPet build() { GOnHookMessage.GOnHookPet result = buildPartial(); if (!result.isInitialized()) { @@ -438,48 +481,49 @@ public final class GOnHookMessage { return result; } - @Override + @java.lang.Override public GOnHookMessage.GOnHookPet buildPartial() { GOnHookMessage.GOnHookPet result = new GOnHookMessage.GOnHookPet(this); result.key_ = key_; result.petTbId_ = petTbId_; + result.petLevel_ = petLevel_; onBuilt(); return result; } - @Override + @java.lang.Override public Builder clone() { return super.clone(); } - @Override + @java.lang.Override public Builder setField( com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { + java.lang.Object value) { return super.setField(field, value); } - @Override + @java.lang.Override public Builder clearField( com.google.protobuf.Descriptors.FieldDescriptor field) { return super.clearField(field); } - @Override + @java.lang.Override public Builder clearOneof( com.google.protobuf.Descriptors.OneofDescriptor oneof) { return super.clearOneof(oneof); } - @Override + @java.lang.Override public Builder setRepeatedField( com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { + int index, java.lang.Object value) { return super.setRepeatedField(field, index, value); } - @Override + @java.lang.Override public Builder addRepeatedField( com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { + java.lang.Object value) { return super.addRepeatedField(field, value); } - @Override + @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof GOnHookMessage.GOnHookPet) { return mergeFrom((GOnHookMessage.GOnHookPet)other); @@ -498,17 +542,20 @@ public final class GOnHookMessage { if (other.getPetTbId() != 0) { setPetTbId(other.getPetTbId()); } + if (other.getPetLevel() != 0) { + setPetLevel(other.getPetLevel()); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; } - @Override + @java.lang.Override public final boolean isInitialized() { return true; } - @Override + @java.lang.Override public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) @@ -527,7 +574,7 @@ public final class GOnHookMessage { return this; } - private Object key_ = ""; + private java.lang.Object key_ = ""; /** *
        *生成宠物的key
@@ -536,16 +583,16 @@ public final class GOnHookMessage {
        * string key = 1;
        * @return The key.
        */
-      public String getKey() {
-        Object ref = key_;
-        if (!(ref instanceof String)) {
+      public java.lang.String getKey() {
+        java.lang.Object ref = key_;
+        if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
-          String s = bs.toStringUtf8();
+          java.lang.String s = bs.toStringUtf8();
           key_ = s;
           return s;
         } else {
-          return (String) ref;
+          return (java.lang.String) ref;
         }
       }
       /**
@@ -558,11 +605,11 @@ public final class GOnHookMessage {
        */
       public com.google.protobuf.ByteString
           getKeyBytes() {
-        Object ref = key_;
+        java.lang.Object ref = key_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
-                  (String) ref);
+                  (java.lang.String) ref);
           key_ = b;
           return b;
         } else {
@@ -579,7 +626,7 @@ public final class GOnHookMessage {
        * @return This builder for chaining.
        */
       public Builder setKey(
-          String value) {
+          java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
@@ -632,7 +679,7 @@ public final class GOnHookMessage {
        * int32 petTbId = 2;
        * @return The petTbId.
        */
-      @Override
+      @java.lang.Override
       public int getPetTbId() {
         return petTbId_;
       }
@@ -665,13 +712,56 @@ public final class GOnHookMessage {
         onChanged();
         return this;
       }
-      @Override
+
+      private int petLevel_ ;
+      /**
+       * 
+       *生成宠物的等级
+       * 
+ * + * int32 petLevel = 3; + * @return The petLevel. + */ + @java.lang.Override + public int getPetLevel() { + return petLevel_; + } + /** + *
+       *生成宠物的等级
+       * 
+ * + * int32 petLevel = 3; + * @param value The petLevel to set. + * @return This builder for chaining. + */ + public Builder setPetLevel(int value) { + + petLevel_ = value; + onChanged(); + return this; + } + /** + *
+       *生成宠物的等级
+       * 
+ * + * int32 petLevel = 3; + * @return This builder for chaining. + */ + public Builder clearPetLevel() { + + petLevel_ = 0; + onChanged(); + return this; + } + @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); } - @Override + @java.lang.Override public final Builder mergeUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { return super.mergeUnknownFields(unknownFields); @@ -693,7 +783,7 @@ public final class GOnHookMessage { private static final com.google.protobuf.Parser PARSER = new com.google.protobuf.AbstractParser() { - @Override + @java.lang.Override public GOnHookPet parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) @@ -706,12 +796,12 @@ public final class GOnHookMessage { return PARSER; } - @Override + @java.lang.Override public com.google.protobuf.Parser getParserForType() { return PARSER; } - @Override + @java.lang.Override public GOnHookMessage.GOnHookPet getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -729,7 +819,7 @@ public final class GOnHookMessage { * * repeated .GOnHookPet pets = 1; */ - java.util.List + java.util.List getPetsList(); /** *
@@ -754,7 +844,7 @@ public final class GOnHookMessage {
      *
      * repeated .GOnHookPet pets = 1;
      */
-    java.util.List
+    java.util.List
         getPetsOrBuilderList();
     /**
      * 
@@ -786,14 +876,14 @@ public final class GOnHookMessage {
       pets_ = java.util.Collections.emptyList();
     }
 
-    @Override
+    @java.lang.Override
     @SuppressWarnings({"unused"})
-    protected Object newInstance(
+    protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
       return new GOnHookPets();
     }
 
-    @Override
+    @java.lang.Override
     public final com.google.protobuf.UnknownFieldSet
     getUnknownFields() {
       return this.unknownFields;
@@ -804,7 +894,7 @@ public final class GOnHookMessage {
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       if (extensionRegistry == null) {
-        throw new NullPointerException();
+        throw new java.lang.NullPointerException();
       }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
@@ -819,7 +909,7 @@ public final class GOnHookMessage {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                pets_ = new java.util.ArrayList();
+                pets_ = new java.util.ArrayList();
                 mutable_bitField0_ |= 0x00000001;
               }
               pets_.add(
@@ -855,8 +945,8 @@ public final class GOnHookMessage {
       return GOnHookMessage.internal_static_GOnHookPets_descriptor;
     }
 
-    @Override
-    protected FieldAccessorTable
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
       return GOnHookMessage.internal_static_GOnHookPets_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
@@ -864,7 +954,7 @@ public final class GOnHookMessage {
     }
 
     public static final int PETS_FIELD_NUMBER = 1;
-    private java.util.List pets_;
+    private java.util.List pets_;
     /**
      * 
      *宠物列表
@@ -872,8 +962,8 @@ public final class GOnHookMessage {
      *
      * repeated .GOnHookPet pets = 1;
      */
-    @Override
-    public java.util.List getPetsList() {
+    @java.lang.Override
+    public java.util.List getPetsList() {
       return pets_;
     }
     /**
@@ -883,8 +973,8 @@ public final class GOnHookMessage {
      *
      * repeated .GOnHookPet pets = 1;
      */
-    @Override
-    public java.util.List
+    @java.lang.Override
+    public java.util.List
         getPetsOrBuilderList() {
       return pets_;
     }
@@ -895,7 +985,7 @@ public final class GOnHookMessage {
      *
      * repeated .GOnHookPet pets = 1;
      */
-    @Override
+    @java.lang.Override
     public int getPetsCount() {
       return pets_.size();
     }
@@ -906,7 +996,7 @@ public final class GOnHookMessage {
      *
      * repeated .GOnHookPet pets = 1;
      */
-    @Override
+    @java.lang.Override
     public GOnHookMessage.GOnHookPet getPets(int index) {
       return pets_.get(index);
     }
@@ -917,14 +1007,14 @@ public final class GOnHookMessage {
      *
      * repeated .GOnHookPet pets = 1;
      */
-    @Override
+    @java.lang.Override
     public GOnHookMessage.GOnHookPetOrBuilder getPetsOrBuilder(
         int index) {
       return pets_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
-    @Override
+    @java.lang.Override
     public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized == 1) return true;
@@ -934,7 +1024,7 @@ public final class GOnHookMessage {
       return true;
     }
 
-    @Override
+    @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       for (int i = 0; i < pets_.size(); i++) {
@@ -943,7 +1033,7 @@ public final class GOnHookMessage {
       unknownFields.writeTo(output);
     }
 
-    @Override
+    @java.lang.Override
     public int getSerializedSize() {
       int size = memoizedSize;
       if (size != -1) return size;
@@ -958,8 +1048,8 @@ public final class GOnHookMessage {
       return size;
     }
 
-    @Override
-    public boolean equals(final Object obj) {
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
       if (obj == this) {
        return true;
       }
@@ -974,7 +1064,7 @@ public final class GOnHookMessage {
       return true;
     }
 
-    @Override
+    @java.lang.Override
     public int hashCode() {
       if (memoizedHashCode != 0) {
         return memoizedHashCode;
@@ -1060,7 +1150,7 @@ public final class GOnHookMessage {
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
-    @Override
+    @java.lang.Override
     public Builder newBuilderForType() { return newBuilder(); }
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
@@ -1068,15 +1158,15 @@ public final class GOnHookMessage {
     public static Builder newBuilder(GOnHookMessage.GOnHookPets prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
-    @Override
+    @java.lang.Override
     public Builder toBuilder() {
       return this == DEFAULT_INSTANCE
           ? new Builder() : new Builder().mergeFrom(this);
     }
 
-    @Override
+    @java.lang.Override
     protected Builder newBuilderForType(
-        BuilderParent parent) {
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
       Builder builder = new Builder(parent);
       return builder;
     }
@@ -1096,21 +1186,21 @@ public final class GOnHookMessage {
         return GOnHookMessage.internal_static_GOnHookPets_descriptor;
       }
 
-      @Override
-      protected FieldAccessorTable
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
         return GOnHookMessage.internal_static_GOnHookPets_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
                 GOnHookMessage.GOnHookPets.class, GOnHookMessage.GOnHookPets.Builder.class);
       }
 
-      // Construct using cn.jisol.ngame.proto.GOnHookMessage.GOnHookPets.newBuilder()
+      // Construct using cn.jisol.game.proto.GOnHookMessage.GOnHookPets.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
 
       private Builder(
-          BuilderParent parent) {
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
         super(parent);
         maybeForceBuilderInitialization();
       }
@@ -1120,7 +1210,7 @@ public final class GOnHookMessage {
           getPetsFieldBuilder();
         }
       }
-      @Override
+      @java.lang.Override
       public Builder clear() {
         super.clear();
         if (petsBuilder_ == null) {
@@ -1132,18 +1222,18 @@ public final class GOnHookMessage {
         return this;
       }
 
-      @Override
+      @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
         return GOnHookMessage.internal_static_GOnHookPets_descriptor;
       }
 
-      @Override
+      @java.lang.Override
       public GOnHookMessage.GOnHookPets getDefaultInstanceForType() {
         return GOnHookMessage.GOnHookPets.getDefaultInstance();
       }
 
-      @Override
+      @java.lang.Override
       public GOnHookMessage.GOnHookPets build() {
         GOnHookMessage.GOnHookPets result = buildPartial();
         if (!result.isInitialized()) {
@@ -1152,7 +1242,7 @@ public final class GOnHookMessage {
         return result;
       }
 
-      @Override
+      @java.lang.Override
       public GOnHookMessage.GOnHookPets buildPartial() {
         GOnHookMessage.GOnHookPets result = new GOnHookMessage.GOnHookPets(this);
         int from_bitField0_ = bitField0_;
@@ -1169,39 +1259,39 @@ public final class GOnHookMessage {
         return result;
       }
 
-      @Override
+      @java.lang.Override
       public Builder clone() {
         return super.clone();
       }
-      @Override
+      @java.lang.Override
       public Builder setField(
           com.google.protobuf.Descriptors.FieldDescriptor field,
-          Object value) {
+          java.lang.Object value) {
         return super.setField(field, value);
       }
-      @Override
+      @java.lang.Override
       public Builder clearField(
           com.google.protobuf.Descriptors.FieldDescriptor field) {
         return super.clearField(field);
       }
-      @Override
+      @java.lang.Override
       public Builder clearOneof(
           com.google.protobuf.Descriptors.OneofDescriptor oneof) {
         return super.clearOneof(oneof);
       }
-      @Override
+      @java.lang.Override
       public Builder setRepeatedField(
           com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, Object value) {
+          int index, java.lang.Object value) {
         return super.setRepeatedField(field, index, value);
       }
-      @Override
+      @java.lang.Override
       public Builder addRepeatedField(
           com.google.protobuf.Descriptors.FieldDescriptor field,
-          Object value) {
+          java.lang.Object value) {
         return super.addRepeatedField(field, value);
       }
-      @Override
+      @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
         if (other instanceof GOnHookMessage.GOnHookPets) {
           return mergeFrom((GOnHookMessage.GOnHookPets)other);
@@ -1244,12 +1334,12 @@ public final class GOnHookMessage {
         return this;
       }
 
-      @Override
+      @java.lang.Override
       public final boolean isInitialized() {
         return true;
       }
 
-      @Override
+      @java.lang.Override
       public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
@@ -1269,17 +1359,17 @@ public final class GOnHookMessage {
       }
       private int bitField0_;
 
-      private java.util.List pets_ =
+      private java.util.List pets_ =
         java.util.Collections.emptyList();
       private void ensurePetsIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          pets_ = new java.util.ArrayList(pets_);
+          pets_ = new java.util.ArrayList(pets_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          GOnHookPet, GOnHookPet.Builder, GOnHookPetOrBuilder> petsBuilder_;
+          GOnHookMessage.GOnHookPet, GOnHookMessage.GOnHookPet.Builder, GOnHookMessage.GOnHookPetOrBuilder> petsBuilder_;
 
       /**
        * 
@@ -1288,7 +1378,7 @@ public final class GOnHookMessage {
        *
        * repeated .GOnHookPet pets = 1;
        */
-      public java.util.List getPetsList() {
+      public java.util.List getPetsList() {
         if (petsBuilder_ == null) {
           return java.util.Collections.unmodifiableList(pets_);
         } else {
@@ -1447,7 +1537,7 @@ public final class GOnHookMessage {
        * repeated .GOnHookPet pets = 1;
        */
       public Builder addAllPets(
-          Iterable values) {
+          java.lang.Iterable values) {
         if (petsBuilder_ == null) {
           ensurePetsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
@@ -1524,7 +1614,7 @@ public final class GOnHookMessage {
        *
        * repeated .GOnHookPet pets = 1;
        */
-      public java.util.List
+      public java.util.List
            getPetsOrBuilderList() {
         if (petsBuilder_ != null) {
           return petsBuilder_.getMessageOrBuilderList();
@@ -1562,16 +1652,16 @@ public final class GOnHookMessage {
        *
        * repeated .GOnHookPet pets = 1;
        */
-      public java.util.List
+      public java.util.List
            getPetsBuilderList() {
         return getPetsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          GOnHookPet, GOnHookPet.Builder, GOnHookPetOrBuilder>
+          GOnHookMessage.GOnHookPet, GOnHookMessage.GOnHookPet.Builder, GOnHookMessage.GOnHookPetOrBuilder>
           getPetsFieldBuilder() {
         if (petsBuilder_ == null) {
           petsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              GOnHookPet, GOnHookPet.Builder, GOnHookPetOrBuilder>(
+              GOnHookMessage.GOnHookPet, GOnHookMessage.GOnHookPet.Builder, GOnHookMessage.GOnHookPetOrBuilder>(
                   pets_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
@@ -1580,13 +1670,13 @@ public final class GOnHookMessage {
         }
         return petsBuilder_;
       }
-      @Override
+      @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
         return super.setUnknownFields(unknownFields);
       }
 
-      @Override
+      @java.lang.Override
       public final Builder mergeUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
         return super.mergeUnknownFields(unknownFields);
@@ -1608,7 +1698,7 @@ public final class GOnHookMessage {
 
     private static final com.google.protobuf.Parser
         PARSER = new com.google.protobuf.AbstractParser() {
-      @Override
+      @java.lang.Override
       public GOnHookPets parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
@@ -1621,12 +1711,12 @@ public final class GOnHookMessage {
       return PARSER;
     }
 
-    @Override
+    @java.lang.Override
     public com.google.protobuf.Parser getParserForType() {
       return PARSER;
     }
 
-    @Override
+    @java.lang.Override
     public GOnHookMessage.GOnHookPets getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
@@ -1651,11 +1741,11 @@ public final class GOnHookMessage {
   private static  com.google.protobuf.Descriptors.FileDescriptor
       descriptor;
   static {
-    String[] descriptorData = {
-      "\n\024GOnHookMessage.proto\"*\n\nGOnHookPet\022\013\n\003" +
-      "key\030\001 \001(\t\022\017\n\007petTbId\030\002 \001(\005\"(\n\013GOnHookPet" +
-      "s\022\031\n\004pets\030\001 \003(\0132\013.GOnHookPetB\026\n\024cn.jisol" +
-      ".ngame.protob\006proto3"
+    java.lang.String[] descriptorData = {
+      "\n\024GOnHookMessage.proto\"<\n\nGOnHookPet\022\013\n\003" +
+      "key\030\001 \001(\t\022\017\n\007petTbId\030\002 \001(\005\022\020\n\010petLevel\030\003" +
+      " \001(\005\"(\n\013GOnHookPets\022\031\n\004pets\030\001 \003(\0132\013.GOnH" +
+      "ookPetB\026\n\024cn.jisol.ngame.protob\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -1666,13 +1756,13 @@ public final class GOnHookMessage {
     internal_static_GOnHookPet_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_GOnHookPet_descriptor,
-        new String[] { "Key", "PetTbId", });
+        new java.lang.String[] { "Key", "PetTbId", "PetLevel", });
     internal_static_GOnHookPets_descriptor =
       getDescriptor().getMessageTypes().get(1);
     internal_static_GOnHookPets_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_GOnHookPets_descriptor,
-        new String[] { "Pets", });
+        new java.lang.String[] { "Pets", });
   }
 
   // @@protoc_insertion_point(outer_class_scope)
diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/proto/GOnHookMessage.proto b/JisolGameServer/Main/src/main/java/cn/jisol/game/proto/GOnHookMessage.proto
index 5f972cda..397cddd6 100644
--- a/JisolGameServer/Main/src/main/java/cn/jisol/game/proto/GOnHookMessage.proto
+++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/proto/GOnHookMessage.proto
@@ -6,6 +6,7 @@ option java_package = "cn.jisol.ngame.proto";
 message GOnHookPet {
     string key = 1;     //生成宠物的key
     int32 petTbId = 2; //生成宠物的配置表Id
+    int32 petLevel = 3; //生成宠物的等级
 }
 
 //生成的宠物类列表
diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/table/GTbGOnHookLevels.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/table/GTbGOnHookLevels.java
new file mode 100644
index 00000000..9217f8c7
--- /dev/null
+++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/table/GTbGOnHookLevels.java
@@ -0,0 +1,85 @@
+package cn.jisol.game.table;
+
+
+import cfg.TbGEntity.TOnHookLevel;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+
+//游戏中使用的 TbGOnHookMaps 类
+public class GTbGOnHookLevels {
+
+    //TbGOnHookMaps 表数据
+    Object data;
+
+    public GTbGOnHookLevels(Object data){
+        this.data = data;
+    }
+
+    public static class GTbGOnHookLevel{
+
+        //TbGOnHookMap 表数据
+        Object data;
+
+        GTbGOnHookLevel(Object data){
+            this.data = data;
+        }
+
+        public int getId(){
+            try {
+                Field idField = data.getClass().getField("id");
+                return (int)idField.get(data);
+            } catch (NoSuchFieldException | IllegalAccessException e) {
+                e.printStackTrace();
+                return -1;
+            }
+        }
+
+        public TOnHookLevel getData(){
+            try {
+                Field dataField = data.getClass().getField("data");
+                return (TOnHookLevel)dataField.get(data);
+            } catch (NoSuchFieldException | IllegalAccessException e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+
+    }
+
+    //通过Id获取关卡
+    public GTbGOnHookLevel get(int key){
+        try {
+            Method method = this.data.getClass().getMethod("get",int.class);
+            Object data = method.invoke(this.data,key);
+            if(Objects.isNull(data)) return null;
+            return new GTbGOnHookLevel(data);
+        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
+            return null;
+        }
+    }
+
+    //获取全部关卡
+    public List getDataList(){
+        try {
+            Method method = null;
+            method = this.data.getClass().getMethod("getDataList");
+            Object data = method.invoke(this.data);
+            if(Objects.isNull(data) || !(data instanceof ArrayList)){
+                return null;
+            }
+            return (List) ((ArrayList)data).stream().map((Object i) -> new GTbGOnHookLevel(i)).collect(Collectors.toList());
+
+        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
+            return null;
+        }
+    }
+
+}
diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/table/TableUtil.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/table/TableUtil.java
new file mode 100644
index 00000000..90191ce0
--- /dev/null
+++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/table/TableUtil.java
@@ -0,0 +1,22 @@
+package cn.jisol.game.table;
+
+import cn.jisol.game.data.TD;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+
+//文档工具类
+public class TableUtil {
+
+    //获取名字的对象
+    public static Object getTDObject(String sign){
+        try {
+            Method method = TD.DATA.getClass().getMethod("get" + sign);
+            return method.invoke(TD.DATA);
+        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
+            return null;
+        }
+    }
+
+}
diff --git a/JisolGameServer/Main/src/main/resources/json/tbgonhookmap1.json b/JisolGameServer/Main/src/main/resources/json/tbgonhookmap1.json
deleted file mode 100644
index 71aa9a83..00000000
--- a/JisolGameServer/Main/src/main/resources/json/tbgonhookmap1.json
+++ /dev/null
@@ -1,10 +0,0 @@
-[
-  {
-    "id": 1,
-    "data": {
-      "level": 1,
-      "petLevel": 0,
-      "oddsId": 1
-    }
-  }
-]
\ No newline at end of file
diff --git a/JisolGameServer/Main/src/main/resources/json/tbgonhookmap120001.json b/JisolGameServer/Main/src/main/resources/json/tbgonhookmap120001.json
new file mode 100644
index 00000000..10948ef0
--- /dev/null
+++ b/JisolGameServer/Main/src/main/resources/json/tbgonhookmap120001.json
@@ -0,0 +1,972 @@
+[
+  {
+    "id": 1,
+    "data": {
+      "level": 1,
+      "childLevel": 1,
+      "petLevel": 0,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 2,
+    "data": {
+      "level": 1,
+      "childLevel": 2,
+      "petLevel": 0,
+      "petSize": 2,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 3,
+    "data": {
+      "level": 1,
+      "childLevel": 3,
+      "petLevel": 0,
+      "petSize": 3,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 4,
+    "data": {
+      "level": 1,
+      "childLevel": 4,
+      "petLevel": 0,
+      "petSize": 4,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 5,
+    "data": {
+      "level": 1,
+      "childLevel": 5,
+      "petLevel": 0,
+      "petSize": 5,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 6,
+    "data": {
+      "level": 1,
+      "childLevel": 6,
+      "petLevel": 0,
+      "petSize": 6,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 7,
+    "data": {
+      "level": 2,
+      "childLevel": 1,
+      "petLevel": 1,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 8,
+    "data": {
+      "level": 2,
+      "childLevel": 2,
+      "petLevel": 1,
+      "petSize": 2,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 9,
+    "data": {
+      "level": 2,
+      "childLevel": 3,
+      "petLevel": 1,
+      "petSize": 3,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 10,
+    "data": {
+      "level": 2,
+      "childLevel": 4,
+      "petLevel": 1,
+      "petSize": 4,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 11,
+    "data": {
+      "level": 2,
+      "childLevel": 5,
+      "petLevel": 1,
+      "petSize": 5,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 12,
+    "data": {
+      "level": 2,
+      "childLevel": 6,
+      "petLevel": 1,
+      "petSize": 6,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 13,
+    "data": {
+      "level": 3,
+      "childLevel": 1,
+      "petLevel": 2,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 14,
+    "data": {
+      "level": 3,
+      "childLevel": 2,
+      "petLevel": 2,
+      "petSize": 2,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 15,
+    "data": {
+      "level": 3,
+      "childLevel": 3,
+      "petLevel": 2,
+      "petSize": 3,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 16,
+    "data": {
+      "level": 3,
+      "childLevel": 4,
+      "petLevel": 2,
+      "petSize": 4,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 17,
+    "data": {
+      "level": 3,
+      "childLevel": 5,
+      "petLevel": 2,
+      "petSize": 5,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 18,
+    "data": {
+      "level": 3,
+      "childLevel": 6,
+      "petLevel": 2,
+      "petSize": 6,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 19,
+    "data": {
+      "level": 4,
+      "childLevel": 1,
+      "petLevel": 3,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 20,
+    "data": {
+      "level": 4,
+      "childLevel": 2,
+      "petLevel": 3,
+      "petSize": 2,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 21,
+    "data": {
+      "level": 4,
+      "childLevel": 3,
+      "petLevel": 3,
+      "petSize": 3,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 22,
+    "data": {
+      "level": 4,
+      "childLevel": 4,
+      "petLevel": 3,
+      "petSize": 4,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 23,
+    "data": {
+      "level": 4,
+      "childLevel": 5,
+      "petLevel": 3,
+      "petSize": 5,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 24,
+    "data": {
+      "level": 4,
+      "childLevel": 6,
+      "petLevel": 3,
+      "petSize": 6,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 25,
+    "data": {
+      "level": 5,
+      "childLevel": 1,
+      "petLevel": 4,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 26,
+    "data": {
+      "level": 5,
+      "childLevel": 2,
+      "petLevel": 4,
+      "petSize": 2,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 27,
+    "data": {
+      "level": 5,
+      "childLevel": 3,
+      "petLevel": 4,
+      "petSize": 3,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 28,
+    "data": {
+      "level": 5,
+      "childLevel": 4,
+      "petLevel": 4,
+      "petSize": 4,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 29,
+    "data": {
+      "level": 5,
+      "childLevel": 5,
+      "petLevel": 4,
+      "petSize": 5,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 30,
+    "data": {
+      "level": 5,
+      "childLevel": 6,
+      "petLevel": 4,
+      "petSize": 6,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 31,
+    "data": {
+      "level": 6,
+      "childLevel": 1,
+      "petLevel": 5,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 32,
+    "data": {
+      "level": 6,
+      "childLevel": 2,
+      "petLevel": 5,
+      "petSize": 2,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 33,
+    "data": {
+      "level": 6,
+      "childLevel": 3,
+      "petLevel": 5,
+      "petSize": 3,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 34,
+    "data": {
+      "level": 6,
+      "childLevel": 4,
+      "petLevel": 5,
+      "petSize": 4,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 35,
+    "data": {
+      "level": 6,
+      "childLevel": 5,
+      "petLevel": 5,
+      "petSize": 5,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 36,
+    "data": {
+      "level": 6,
+      "childLevel": 6,
+      "petLevel": 5,
+      "petSize": 6,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 37,
+    "data": {
+      "level": 7,
+      "childLevel": 1,
+      "petLevel": 6,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 38,
+    "data": {
+      "level": 7,
+      "childLevel": 2,
+      "petLevel": 6,
+      "petSize": 2,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 39,
+    "data": {
+      "level": 7,
+      "childLevel": 3,
+      "petLevel": 6,
+      "petSize": 3,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 40,
+    "data": {
+      "level": 7,
+      "childLevel": 4,
+      "petLevel": 6,
+      "petSize": 4,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 41,
+    "data": {
+      "level": 7,
+      "childLevel": 5,
+      "petLevel": 6,
+      "petSize": 5,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 42,
+    "data": {
+      "level": 7,
+      "childLevel": 6,
+      "petLevel": 6,
+      "petSize": 6,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 43,
+    "data": {
+      "level": 8,
+      "childLevel": 1,
+      "petLevel": 7,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 44,
+    "data": {
+      "level": 8,
+      "childLevel": 2,
+      "petLevel": 7,
+      "petSize": 2,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 45,
+    "data": {
+      "level": 8,
+      "childLevel": 3,
+      "petLevel": 7,
+      "petSize": 3,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 46,
+    "data": {
+      "level": 8,
+      "childLevel": 4,
+      "petLevel": 7,
+      "petSize": 4,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 47,
+    "data": {
+      "level": 8,
+      "childLevel": 5,
+      "petLevel": 7,
+      "petSize": 5,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 48,
+    "data": {
+      "level": 8,
+      "childLevel": 6,
+      "petLevel": 7,
+      "petSize": 6,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 49,
+    "data": {
+      "level": 9,
+      "childLevel": 1,
+      "petLevel": 8,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 50,
+    "data": {
+      "level": 9,
+      "childLevel": 2,
+      "petLevel": 8,
+      "petSize": 2,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 51,
+    "data": {
+      "level": 9,
+      "childLevel": 3,
+      "petLevel": 8,
+      "petSize": 3,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 52,
+    "data": {
+      "level": 9,
+      "childLevel": 4,
+      "petLevel": 8,
+      "petSize": 4,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 53,
+    "data": {
+      "level": 9,
+      "childLevel": 5,
+      "petLevel": 8,
+      "petSize": 5,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 54,
+    "data": {
+      "level": 9,
+      "childLevel": 6,
+      "petLevel": 8,
+      "petSize": 6,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 55,
+    "data": {
+      "level": 10,
+      "childLevel": 1,
+      "petLevel": 9,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 56,
+    "data": {
+      "level": 10,
+      "childLevel": 2,
+      "petLevel": 9,
+      "petSize": 2,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 57,
+    "data": {
+      "level": 10,
+      "childLevel": 3,
+      "petLevel": 9,
+      "petSize": 3,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 58,
+    "data": {
+      "level": 10,
+      "childLevel": 4,
+      "petLevel": 9,
+      "petSize": 4,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 59,
+    "data": {
+      "level": 10,
+      "childLevel": 5,
+      "petLevel": 9,
+      "petSize": 5,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 60,
+    "data": {
+      "level": 10,
+      "childLevel": 6,
+      "petLevel": 9,
+      "petSize": 6,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 61,
+    "data": {
+      "level": 11,
+      "childLevel": 1,
+      "petLevel": 10,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 62,
+    "data": {
+      "level": 11,
+      "childLevel": 2,
+      "petLevel": 10,
+      "petSize": 2,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 63,
+    "data": {
+      "level": 11,
+      "childLevel": 3,
+      "petLevel": 10,
+      "petSize": 3,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 64,
+    "data": {
+      "level": 11,
+      "childLevel": 4,
+      "petLevel": 10,
+      "petSize": 4,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 65,
+    "data": {
+      "level": 11,
+      "childLevel": 5,
+      "petLevel": 10,
+      "petSize": 5,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 66,
+    "data": {
+      "level": 11,
+      "childLevel": 6,
+      "petLevel": 10,
+      "petSize": 6,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 67,
+    "data": {
+      "level": 12,
+      "childLevel": 1,
+      "petLevel": 11,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 68,
+    "data": {
+      "level": 12,
+      "childLevel": 2,
+      "petLevel": 11,
+      "petSize": 2,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 69,
+    "data": {
+      "level": 12,
+      "childLevel": 3,
+      "petLevel": 11,
+      "petSize": 3,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 70,
+    "data": {
+      "level": 12,
+      "childLevel": 4,
+      "petLevel": 11,
+      "petSize": 4,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 71,
+    "data": {
+      "level": 12,
+      "childLevel": 5,
+      "petLevel": 11,
+      "petSize": 5,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 72,
+    "data": {
+      "level": 12,
+      "childLevel": 6,
+      "petLevel": 11,
+      "petSize": 6,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 73,
+    "data": {
+      "level": 13,
+      "childLevel": 1,
+      "petLevel": 12,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 74,
+    "data": {
+      "level": 13,
+      "childLevel": 2,
+      "petLevel": 12,
+      "petSize": 2,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 75,
+    "data": {
+      "level": 13,
+      "childLevel": 3,
+      "petLevel": 12,
+      "petSize": 3,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 76,
+    "data": {
+      "level": 13,
+      "childLevel": 4,
+      "petLevel": 12,
+      "petSize": 4,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 77,
+    "data": {
+      "level": 13,
+      "childLevel": 5,
+      "petLevel": 12,
+      "petSize": 5,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 78,
+    "data": {
+      "level": 13,
+      "childLevel": 6,
+      "petLevel": 12,
+      "petSize": 6,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 79,
+    "data": {
+      "level": 14,
+      "childLevel": 1,
+      "petLevel": 13,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 80,
+    "data": {
+      "level": 14,
+      "childLevel": 2,
+      "petLevel": 13,
+      "petSize": 2,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 81,
+    "data": {
+      "level": 14,
+      "childLevel": 3,
+      "petLevel": 13,
+      "petSize": 3,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 82,
+    "data": {
+      "level": 14,
+      "childLevel": 4,
+      "petLevel": 13,
+      "petSize": 4,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 83,
+    "data": {
+      "level": 14,
+      "childLevel": 5,
+      "petLevel": 13,
+      "petSize": 5,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 84,
+    "data": {
+      "level": 14,
+      "childLevel": 6,
+      "petLevel": 13,
+      "petSize": 6,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 85,
+    "data": {
+      "level": 15,
+      "childLevel": 1,
+      "petLevel": 14,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 86,
+    "data": {
+      "level": 15,
+      "childLevel": 2,
+      "petLevel": 14,
+      "petSize": 2,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 87,
+    "data": {
+      "level": 15,
+      "childLevel": 3,
+      "petLevel": 14,
+      "petSize": 3,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 88,
+    "data": {
+      "level": 15,
+      "childLevel": 4,
+      "petLevel": 14,
+      "petSize": 4,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 89,
+    "data": {
+      "level": 15,
+      "childLevel": 5,
+      "petLevel": 14,
+      "petSize": 5,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 90,
+    "data": {
+      "level": 15,
+      "childLevel": 6,
+      "petLevel": 14,
+      "petSize": 6,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 91,
+    "data": {
+      "level": 16,
+      "childLevel": 1,
+      "petLevel": 15,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 92,
+    "data": {
+      "level": 16,
+      "childLevel": 2,
+      "petLevel": 15,
+      "petSize": 2,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 93,
+    "data": {
+      "level": 16,
+      "childLevel": 3,
+      "petLevel": 15,
+      "petSize": 3,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 94,
+    "data": {
+      "level": 16,
+      "childLevel": 4,
+      "petLevel": 15,
+      "petSize": 4,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 95,
+    "data": {
+      "level": 16,
+      "childLevel": 5,
+      "petLevel": 15,
+      "petSize": 5,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 96,
+    "data": {
+      "level": 16,
+      "childLevel": 6,
+      "petLevel": 15,
+      "petSize": 6,
+      "oddsId": 1
+    }
+  },
+  {
+    "id": 97,
+    "data": {
+      "level": 17,
+      "childLevel": 1,
+      "petLevel": 16,
+      "petSize": 1,
+      "oddsId": 1
+    }
+  }
+]
\ No newline at end of file
diff --git a/JisolGameServer/Main/src/main/resources/json/tbgonhookmaps.json b/JisolGameServer/Main/src/main/resources/json/tbgonhookmaps.json
index 2947ec60..cc88c4d5 100644
--- a/JisolGameServer/Main/src/main/resources/json/tbgonhookmaps.json
+++ b/JisolGameServer/Main/src/main/resources/json/tbgonhookmaps.json
@@ -9,7 +9,7 @@
       10002,
       10003
     ],
-    "sign": "",
+    "sign": "TbGOnHookMap120001",
     "introduce": "新手地图在这里可以遇到可爱的宠物哦~"
   },
   {
@@ -23,7 +23,7 @@
       10006,
       10007
     ],
-    "sign": "",
+    "sign": "TbGOnHookMap120001",
     "introduce": "魔法阵 这里有魔法精灵~"
   }
 ]
\ No newline at end of file