local Base = require("Battle/Logic/Level/LevelFunction/LevelFunction") local SyncTownLevelFunction = class("SyncTownLevelFunction",Base) local ChangeAvatarSystem = require "Battle/Logic/Entity/System/ChangeAvatarSystem" local EventSystem = require('Event/EventSystem') function SyncTownLevelFunction:BeginLevel() EventSystem.Dispatch(EventID.TownLevelBegin) --该事件不能注册寻路相关的逻辑,寻路要AfterTownLevelBegin之后 EventSystem.Dispatch(EventID.Task_ChangeWeather) Base.BeginLevel(self) if not MDL.Team.IsFollowing() then EventSystem.Dispatch(EventID.Task_ContinueAutoTask) end EventSystem.Dispatch(EventID.AfterTownLevelBegin) EventSystem.Dispatch(EventID.TeamDungeon_ContinueFindTeamPVENPC) EventSystem.Dispatch(EventID.GuildEscort_ContinueFindGuildEscortNPC) EventSystem.Dispatch(EventID.UI_Nobility_ContinueFindNPC) -- 进爵寻路到皇帝 EventSystem.Dispatch(EventID.ChannelChat_ContinueFindPath) if MDL.Team.IsFollowing() then local selfPos = BattleDataGetter.GetMainEntityLogicPos() MDL.Team.RawsetTeamLeaderPos(selfPos.x[1],selfPos.z[1]) NotSyncBattleSetter.StartFollowTeamLeader() end end -- 在线的时候,不在loading前设置好信息,在创建玩家时设置好就行 function SyncTownLevelFunction:CreatePlayers() 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) -- new↓ 支持 固定/范围随机 位置出生 local pos = nil if playerInfo.Pos then pos = playerInfo.Pos else pos = LogicRandom.GetRandomPointInLevelItem(nil, bornItem.ItemData, 8238235) end -- new↑ -- old↓-- 固定位置出生 -- local pos = playerInfo.Pos or bornItem.ItemData.ItemPos -- old↑ local dir = playerInfo.Dir or bornItem.ItemData.ItemDir local heroEntityTable = {} for i,v in ipairs(army) do -- 优化S2CRoleEnterSceneResp相关包装数据结构 EntityFactory.SetParams("PlayerID", playerID) EntityFactory.SetParams("BornItemID", bornItem.LevelItemID) if LevelManager.IsBattleWaitLevel() then EntityFactory.SetParams("Name", playerInfo.name) end 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(pos, dir) 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.dyeCurPartList) 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() --entity._logicInitData.PlayerIDInRoom = playerID if MDL.Team.IsFollowing() then NotSyncBattleSetter.StartFollowTeamLeader() end 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 if playerInfo.basicBuff then for i,basicBuffID in ipairs(playerInfo.basicBuff) do if basicBuffID > 0 then SystemManager.AddBuff(curEntity, basicBuffID) end end end self:TryAddPlayerBuff(playerID) end function SyncTownLevelFunction:GetPlayer_HeroKDA() logging.error(LTAG.ERROR , "主城不返回KDA") return nil end return SyncTownLevelFunction