local CharacterData = require "Battle/Logic/Entity/CharacterData" local LogicInitData = class("LogicInitData") function LogicInitData:initialize(paramData) self:ResetData() self.IsPlayer = paramData.CharacterType == LuaConst.CharacterType.Hero or paramData.CharacterType == LuaConst.CharacterType.Adjutant-- 这个包括自己+副将,pvp的AI_hero robot_hero ;异步pvp的robot_hero self.IsPlayerSelf = paramData.IsPlayerSelf self.CharacterID = paramData.MonsterID self.CharacterType = paramData.CharacterType --是否由服务器发过来的command驱动行为 self.NeedSyncInfo = paramData.NeedSyncInfo self.OriginBornItemID = paramData.BornItemID if self.BornItemID == nil then self.BornItemID = self.OriginBornItemID --else --表示已经被其他接口设置过了,以其他设置优先,不再用初始化参数设置bornItemID了 end self.BornPoint = paramData.Pos:cloneV2() self.MasterEntity = paramData.MasterEntity -- 如果self是副将,这个就是自己的主将 ; 如果self是召唤出的怪,那么这个就是召唤人 if self.MasterEntity then if self.MasterEntity._logicInitData.RootMasterEntity then self.RootMasterEntity = self.MasterEntity._logicInitData.RootMasterEntity else self.RootMasterEntity = self.MasterEntity while(self.RootMasterEntity) do if not self.RootMasterEntity._logicInitData.MasterEntity then break end self.RootMasterEntity = self.RootMasterEntity._logicInitData.MasterEntity end end end self.BirthFrame = LogicUpdateManager._clientHandleFrame local characterData = CharacterData:new(paramData.MonsterID, paramData.CharacterType, paramData.AdjutantOriginID, paramData.AdaptiveType, paramData.AdaptiveParam) self._characterData = characterData self._modelData = DataSheetManager.MonsterModelData:GetDataByID(characterData.ModelID) if self._modelData == nil then logging.error(LTAG.ERROR, "【策划醒目】:发现怪物配置的模型id不存在,怪id=", paramData.MonsterID ," ,ModelID =" ,characterData.ModelID) end self.InitCamp = paramData.CampID or characterData.Camp --名字搞长一点,方便全局搜索 self.EntityCampID = paramData.CampID or characterData.Camp self.PlayerIDInRoom = paramData.PlayerID or -1 self.isSyncMove = paramData.IsSyncMove --是否为主城同步位置的玩家 self.isStatue = paramData.IsStatue -- 是否为主城的雕像 self.Acid = paramData.Acid --目前只是为了取主城玩家数据用,除主城外不用 self.Name = paramData.Name or "" -- 玩家名字 self.HeroBreakNums = paramData.HeroBreakNums or 0-- 玩家突破等级 self.IsActiveMagicWeapon = paramData.IsActiveMagicWeapon --神兵激活 self.WeaponBreak = paramData.WeaponBreak -- 神兵突破 self.MagicWeaponID = paramData.MagicWeaponID -- 神兵ID self.HeroAppearanceID = paramData.HeroAppearance -- 武将时装ID self.LightEffectIDs = paramData.LightEffectIDs -- 光效ID self.IsLeader = nil self.LeaderID = nil self.IsTest = paramData.IsTest; self.TitleID = paramData.TitleID or 0 self.CartQuality = paramData.CartQuality or 0 self.HorseID = paramData.HorseID -- 设置坐骑数据 ↓ local horseModelID = -1 if paramData.HorseAppearanceID and paramData.HorseAppearanceID > 0 then local horseAppearanceData = DataSheetManager.HorseAppearance:GetDataByID(paramData.HorseAppearanceID); if horseAppearanceData then horseModelID = horseAppearanceData.HorseModelID end else local horseData = (paramData.HorseID and paramData.HorseID>0) and DataSheetManager.HorseData:GetDataByHorseID(paramData.HorseID) or nil; if horseData then horseModelID = horseData.HorseModelID end end if horseModelID > 0 then local horseModelData = DataSheetManager.HorseModelData:GetDataByHorseModelID(horseModelID) self.HorseModelData = horseModelData local horseMoveData = DataSheetManager.HorseMoveData:GetDataByID(horseModelData.MoveID); if horseMoveData then self.HorseMoveData = horseMoveData end end -- 设置坐骑数据 ↑ self.PetID = paramData.PetID -- 宠物ID self.PetStage = paramData.PetStage -- -- 宠物阶段 self.PetName = paramData.PetName self.PetSkillId = paramData.PetSkillId self.PetIsLineUp = paramData.PetIsLineUp self.PetRuneSkillLevelSum = paramData.PetRuneSkillLevelSum self.PetAptitudeSum = paramData.PetAptitudeSum self.WeaponSoulInfo = paramData.WeaponSoulInfo -- 神兵铸魂信息 self.DyeList = paramData.DyeList -- 染色列表(典藏幻色) end function LogicInitData:ResetData() self.EntityID = -1 self.PlayerIDInRoom = -1 -- 当前房间的唯一id ,不用玩家的accid是因为随进随出后acid一样,但是房间唯一id不同了。 self.CharacterID = nil self.Name = "" -- 玩家名字 self.EntityCampID = -1 self.BornItemID = nil --对应的MonsterData表数据 self._characterData = nil --对应的MonsterModelData表数据 self._modelData = {} --是否是玩家 这个包括自己+副将,pvp的AI_hero robot_hero ;异步pvp的robot_hero self.IsPlayer = false --是否为当前玩家 self.IsPlayerSelf = false --在同步玩法中,是否为需要接收服务器消息才能行动的Entity(包括自己) 不包括robot_hero self.NeedSyncInfo = false -- 在同步中是否向服务器发送其指令 self.NeedNotifyInfo = false --出生的帧数 self.BirthFrame = 0 self.CharacterType = 0 --怪物实验室中,测试使用 self.IsTest = false --因为是机器人而开启自动战斗 self.BattleMemberType = LuaConst.BattleMemberType.Account_Hero self.HeroBreakNums = 0 self.IsActiveMagicWeapon = false self.HorseModelData = nil self.IsLeader = nil self.LeaderID = nil end function LogicInitData:SetBornItemID(value) self.BornItemID = value end -- 只能在一些非战斗中使用,战斗中禁止使用 function LogicInitData:NotSyncResetInfo(characterID,heroBreakNums,isActiveMagicWeapon,weaponBreak,magicWeaponID,heroAppearance, lightEffectIDs, weaponSoulInfo, newDyeList) self.CharacterID = characterID local characterData = CharacterData:new(characterID,LuaConst.CharacterType.Hero) self._characterData = characterData self._modelData = DataSheetManager.MonsterModelData:GetDataByID(characterData.ModelID) self.HeroBreakNums = heroBreakNums or 0-- 玩家突破等级 self.IsActiveMagicWeapon = isActiveMagicWeapon --神兵激活 self.WeaponBreak = weaponBreak -- 神兵突破 self.MagicWeaponID = magicWeaponID -- 当前神兵 self.HeroAppearanceID = heroAppearance -- 武将时装ID self.LightEffectIDs = lightEffectIDs -- 武将时装ID self.WeaponSoulInfo = weaponSoulInfo -- 神兵铸魂信息 self.DyeList = newDyeList end return LogicInitData