diff --git a/game-server/app/servers/battle/handler/friendBattleHandler.ts b/game-server/app/servers/battle/handler/friendBattleHandler.ts new file mode 100644 index 000000000..a7176f118 --- /dev/null +++ b/game-server/app/servers/battle/handler/friendBattleHandler.ts @@ -0,0 +1,59 @@ +import { Application, BackendSession, pinus, HandlerService, } from 'pinus'; +import { LadderMatchModel } from '../../../db/LadderMatch'; +import { HeroModel, HeroType } from '../../../db/Hero'; +import { ArtifactModel } from '../../../db/Artifact'; +import { getHeroesAttributes } from '../../../services/playerCeService'; +import { gameData } from '../../../pubUtils/data'; +import { LadderOppDetailHeroReturn } from '../../../domain/battleField/ladder'; +import { resResult } from '../../../pubUtils/util'; +import { STATUS } from '../../../consts/statusCode'; +import { RoleType } from '../../../db/Role'; +import { FRIEND_BATTLE_DISPATCH_JSONID } from '../../../consts'; + +export default function (app: Application) { + new HandlerService(app, {}); + return new FriendBattleHandler(app); +} + +export class FriendBattleHandler { + constructor(private app: Application) { + } + + async getFriendOpp(msg: { roleId: string }, session: BackendSession) { + const { roleId: targetRoleId, } = msg; + + let hisLadderData = await LadderMatchModel.findByRoleIdAndInclude(targetRoleId); + if (!hisLadderData || !hisLadderData.defense || !hisLadderData.defense.heroes) return resResult(STATUS.LADDER_NOT_OPEN); + + let artifactSeids = [], subHids: number[] = []; + for (let { hero, subHid } of hisLadderData.defense.heroes) { + let dbHero = hero; + if (dbHero) artifactSeids.push(dbHero.artifact); + if (subHid) subHids.push(subHid); + } + + let artifacts = await ArtifactModel.findbySeqIds(targetRoleId, artifactSeids); + let subHeroes = await HeroModel.findByHidRange(subHids, targetRoleId, 'hid skinId'); + let attrByHid = await getHeroesAttributes(targetRoleId); + let dicWarJson = gameData.warJson.get(FRIEND_BATTLE_DISPATCH_JSONID); + let result: LadderOppDetailHeroReturn[] = []; + for (let obj of hisLadderData.defense.heroes) { + const { dataId, subHid, actorId } = obj; + let warJson = dicWarJson.find(cur => cur.dataId == dataId); + if (warJson) { + let subHero = subHeroes.find(sub => sub.hid == subHid); + let rec = new LadderOppDetailHeroReturn(warJson, obj, artifacts, subHero); + let attr = attrByHid.get(actorId); + if (attr) { + rec.setAttribute(attr.getAttributesToString()); + } + result.push(rec); + } + } + const role = hisLadderData.role; + const title = role?.title || 1; + const combo = hisLadderData.defense.combo || []; + + return resResult(STATUS.SUCCESS, { title, combo, heroes: result }) + } +} \ No newline at end of file diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index 26f07d4bb..bb7fb35aa 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -642,6 +642,7 @@ export class NormalBattleHandler { case WAR_TYPE.GVG_VESTIGE: case WAR_TYPE.GVG_BATTLE: case WAR_TYPE.ROUGE: + case WAR_TYPE.FRIEND_BATTLE: canSkip = true; break; } diff --git a/game-server/app/servers/role/handler/friendHandler.ts b/game-server/app/servers/role/handler/friendHandler.ts index 3c42df081..6883df444 100644 --- a/game-server/app/servers/role/handler/friendHandler.ts +++ b/game-server/app/servers/role/handler/friendHandler.ts @@ -31,6 +31,7 @@ import { getSchoolPoint } from "../../../services/roleService"; import { LadderMatchModel } from "../../../db/LadderMatch"; import { ArtifactModel } from "../../../db/Artifact"; import { AuthorBookModel } from "../../../db/AuthorBook"; +import { getIsExistLadderDefense } from "../../../services/ladderService"; export default function (app: Application) { @@ -678,7 +679,7 @@ export class FriendHandler { let { serverId } = role; let serverName = await getServerName(serverId); param.setServerName(serverId, serverName); - return resResult(STATUS.SUCCESS, {...param, isRobot }); + return resResult(STATUS.SUCCESS, {...param, isRobot, isExistLadderDefense: await getIsExistLadderDefense(targetRoleId) }); } } diff --git a/game-server/app/services/checkParam.ts b/game-server/app/services/checkParam.ts index ce3bde592..21f738658 100644 --- a/game-server/app/services/checkParam.ts +++ b/game-server/app/services/checkParam.ts @@ -1027,6 +1027,11 @@ export function checkRouteParam(route: string, msg: any) { if (!checkNaturalNumbers(msg.index)) return false; break; } + case "battle.friendBattleHandler.getFriendOpp": + { + if (!checkNaturalStrings(msg.roleId)) return false; + break; + } case "chat.chatHandler.sendGroupMessage": { let { channel, type, content, targetRoleId, targetMsgCode } = msg; diff --git a/game-server/app/services/ladderService.ts b/game-server/app/services/ladderService.ts index 0f5b2f2b1..fb0e85c73 100644 --- a/game-server/app/services/ladderService.ts +++ b/game-server/app/services/ladderService.ts @@ -443,8 +443,12 @@ export async function getLadderOppDetailData(rec: LadderMatchRecType) { } export async function pushLadderIconShow(roleId: string, ladderIconShow:boolean) { - console.log('-x-11111x--x-x-x-x-x-xx- roleId', roleId) - console.log('-x-x--x11111-x-x-x-x-xx- ladderIconShow', ladderIconShow) if (!roleId) return; await pushIconShow(roleId, ladderIconShow); +} + +export async function getIsExistLadderDefense(roleId: string) { + let ladderData = await LadderMatchModel.findByRoleId(roleId); + if (!ladderData || !ladderData.defense || !ladderData.defense.heroes) return false; + return true; } \ No newline at end of file diff --git a/shared/consts/constModules/battleConst.ts b/shared/consts/constModules/battleConst.ts index 25ab32d79..d199d4767 100644 --- a/shared/consts/constModules/battleConst.ts +++ b/shared/consts/constModules/battleConst.ts @@ -37,6 +37,7 @@ export const WAR_TYPE = { GVG_VESTIGE: 22, // GVG征战中原 GVG_BATTLE: 23, // GVG激战期战斗 ROUGE: 24, // 肉鸽 + FRIEND_BATTLE: 26, // 好有切磋 }; // 藏宝图掉落参数 diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index dca679fae..4dd56c821 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -34,6 +34,8 @@ export const ITID_STONE_LIMIT = 6; //玉石一键合成等级限制 export const ROUGE_SLOT_LIMIT = 5;//rouge卡槽数量 +export const FRIEND_BATTLE_DISPATCH_JSONID = 70001; //好友比武 + export enum TIME_OUTPUT_TYPE { DATE = 1, STAMP_10 = 2, @@ -684,6 +686,7 @@ export const FILENAME = { DIC_ROUGE_EVENT_OPTION: "dic_rougeEventOption", DIC_ROUGE_OPTION_GROUP: "dic_rougeOptionGroup", DIC_GK_ROUGE: "dic_zyz_gk_rouge", + DIC_GK_FRIEND_BATTLE: "dic_zyz_gk_friendBattle", DIC_ROUGE_SCORE_REWARD: "dic_rougeScoreReward", DIC_ROUGE_EFFECT: "dic_rougeEffect", DIC_ROUGE_EFFECT_TYPE: "dic_rougeEffectType", @@ -716,6 +719,8 @@ export const WAR_RELATE_TABLES = [ FILENAME.DIC_GK_GVG_VESTIGE, FILENAME.DIC_GK_GVGBATTLE, FILENAME.DIC_GK_ROUGE, + FILENAME.DIC_GK_FRIEND_BATTLE, + ] // 装备栏强化类型 diff --git a/shared/resource/jsons/dic_zyz_gk_friendBattle.json b/shared/resource/jsons/dic_zyz_gk_friendBattle.json new file mode 100644 index 000000000..eee7e7ef2 --- /dev/null +++ b/shared/resource/jsons/dic_zyz_gk_friendBattle.json @@ -0,0 +1,29 @@ +[ + { + "war_id": 1, + "dispatchJsonId": 70001, + "bg_img": 9968, + "mapid": 9968, + "warType": 26, + "gk_name": "好友切磋", + "value": 3000000, + "secondAttrLevel": 2, + "level": 0, + "lvLimted": 1, + "quality": 0, + "star": 0, + "job": 0, + "turnLimted": 20, + "forcedCharactor": "&", + "fobiddenCharactor": "&", + "heroInUI": "1&307", + "victoryInfoInUI": "消灭所有敌军&20回合内造成伤害更高", + "loseInfoInUI": "我方全部阵亡&20回合内造成伤害不敌敌军", + "starInfoInUI": "无", + "cost": 0, + "recommendedPower": 0, + "previousGk": 0, + "needPrepare": 1, + "HeroNum": "1&6" + } +] \ No newline at end of file