local Base = require("Battle/Logic/Level/LevelFunction/LevelFunction") local SceneQuizTownLevelFunction = class("SceneQuizTownLevelFunction", Base) function SceneQuizTownLevelFunction:InitLevel() self.usePlayerInfoPos = true Base.InitLevel(self) end function SceneQuizTownLevelFunction:CreatePlayers(pos, dir) --观战者不需要创建 if BattleDataGetter.GetIsSceneQuizWatch() then return end --这里需要用到主城的形象,因此服务器不会推送阵容数据过来,需要重写 local playerID = LuaConst.STANDALONE_PLAYER_PlayID local army = LevelPlayerManager.GetPlayerArmyByPlayerIDInRoom(playerID) if not army then return end local playerInfo = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(playerID) local bornItem = LevelItemManager.GetBornItem(LuaConst.PlayerDefaultBornIndex) if (self.usePlayerInfoPos or LevelManager.IsUsePlayerInfoPos()) and playerInfo.Pos then pos = playerInfo.Pos end if pos then self.bornPos = pos else self.bornPos = LogicRandom.GetRandomPointInLevelItem(nil, bornItem.ItemData, 8238238) -- new 支持 固定/范围随机 位置出生 end self.bornDir = dir or bornItem.ItemData.ItemDir local heroEntityTable = {} for i, v in ipairs(army) do -- 优化S2CRoleEnterSceneResp相关包装数据结构 EntityFactory.SetParams("PlayerID", playerID, "Name", v.Name) EntityFactory.SetParams("BornItemID", bornItem.LevelItemID) local heroId = v.HeroId if heroId == nil then logging.error(LTAG.ERROR, "【gws】主城发现玩家自身数据的HeroId为nil,强制用成heroId。1.服务器需要检查S2CRoleEnterScene数据符合:BasicInfo不为空,heroLineUpInfos为空,simpleAttrs为空。2.客户端检查levelType是否绑定错误脚本。curLevelID=", LevelManager.GetCurLevelID()) heroId = v.heroId end EntityFactory.SetType_ID(LuaConst.CharacterType.Hero, heroId) EntityFactory.SetAttrTable_ID(v.Attr) EntityFactory.SetPos_Dir(self.bornPos, self.bornDir) EntityFactory.SetSelf_Sync(true, true) EntityFactory.SetEffectBreak_Weapon(v.heroBreakNums, v.isActiveMagicWeapon, v.weaponBreak) EntityFactory.SetHorse_ID(v.horseId, v.horseAppearanceId) EntityFactory.SetPet_Info(v.petInfo.petId, v.petInfo.stage, v.petInfo.petName, v.petInfo.petSkill) EntityFactory.SetTitle_ID(v.titleID) EntityFactory.SetPet_TitleInfo(v.petInfo.isLineUp, v.petInfo.runeSkillLevelSum, v.petInfo.aptitudeSum) EntityFactory.SetCart_Quality(playerInfo.cartQuality) EntityFactory.SetHeroAppearance_ID(v.heroAppearanceId) EntityFactory.SetWeaponAppearance_ID(v.weaponAppearanceId) EntityFactory.SetDyeAppearanceList(v.mainDyeCurPartList) local lightEffectIds = {} for i = 1, #v.lightEffectIds do table.insert(lightEffectIds, v.lightEffectIds[i]) end EntityFactory.SetLightEffect_ID(lightEffectIds) EntityFactory.SetWeaponSoulInfo(v.weaponSoulInfo) local entity = EntityFactory.DoCreatePlayerEntity() table.insert(heroEntityTable, entity) end LevelPlayerManager.SetPlayerEntityTable(heroEntityTable, playerID) --设置激活主将 local curEntity = heroEntityTable[1] LevelPlayerManager.SetCurEntity(curEntity) if PlayerInfoManager.MainPlayerBasicInfo.appearanceId > 0 then NotSyncBattleSetter.ChangeAppearanceId(curEntity, PlayerInfoManager.MainPlayerBasicInfo.appearanceId) end self:TryAddPlayerBuff(playerID) end function SceneQuizTownLevelFunction:GetVictoryPoseEntity() local victoryEntity = BattleDataGetter.GetSceneQuizVictoryEntity() local expEntity = victoryEntity.ExpEntity local comp_ExpModel = expEntity.components.model local modelData = comp_ExpModel.AppearanceModelData or expEntity.Entity.components.replace:GetCurExpModelData() -- 模型显示优先级:特殊外显 > 时装外显 > 当前逻辑外显 victoryEntity.ExpEntity:ChangeModel(modelData, true, true) return victoryEntity end return SceneQuizTownLevelFunction