Пример #1
0
 public void SetRoomInfo(int roomId, int myNewId, ReadyPlayerSampleInfo[] allPlayers, string summonerIdObserverd = null)
 {
     PvpProtocolTools.UpdateHeroSkins(allPlayers);
     this._roomInfo.SetPlayers(roomId, myNewId, allPlayers, summonerIdObserverd);
     this._roomInfo.IsOtherCancelConfirm = false;
     this._isObserver = (this.MyLobbyUserId == -2147483648);
 }
        public static Units CreateEyeItemByUnitInfo(UnitInfo info)
        {
            if (!StringUtils.CheckValid(info.burnValue))
            {
                ClientLogger.Error(string.Concat(new object[]
                {
                    "burnValue is invalid, use default position #",
                    info.typeId,
                    "  utype:",
                    info.unitType
                }));
                return(null);
            }
            string[] stringValue = StringUtils.GetStringValue(info.burnValue, '|');
            if (stringValue.Length != 6)
            {
                ClientLogger.Error("eye item burnValue is stuctured wrong");
                return(null);
            }
            int num = -1;

            if (!int.TryParse(stringValue[2], out num))
            {
                ClientLogger.Error("parse eye item pos failed");
                return(null);
            }
            if (num < 0)
            {
                ClientLogger.Error("eye item pos invalid");
                return(null);
            }
            Transform spawnPos = MapManager.Instance.GetSpawnPos(TeamType.Neutral, num);
            TeamType  teamType = PvpProtocolTools.GroupToTeam((int)info.group);
            EntityVo  npcinfo  = new EntityVo(EntityType.Monster, info.typeId, num, 9, string.Empty, "Default", 0)
            {
                uid = info.unitId
            };
            SpawnUtility spawnUtility = GameManager.Instance.Spawner.GetSpawnUtility();
            Units        units        = spawnUtility.SpawnEyeItemInstance(npcinfo, "Monster", teamType, "[]", spawnPos, info.position, stringValue[4], UnitControlType.None);

            if (units == null)
            {
                ClientLogger.Error("P2C_CreateUnits create monster failed, " + StringUtils.DumpObject(info));
                return(null);
            }
            units.SetOrigin(true, info.creepId.ToString(), info.monsterTeamId);
            units.TryAddBirthEffect();
            units.SetIsMonsterCreep(false);
            PvpProtocolTools.SyncUnitLifeStateAndSkill(units, info, 0L);
            if (units.isMonster && units.skillManager != null)
            {
                units.skillManager.EnableSkills(true);
            }
            return(units);
        }
 private static void SyncUnitLifeStateAndSkill(Units unit, UnitInfo unitInfo, long reliveLeftTime)
 {
     if (!unit)
     {
         return;
     }
     PvpProtocolTools.SyncHeroSkills(unit, unitInfo);
     PvpProtocolTools.SyncUnitLifeState(unit, unitInfo, reliveLeftTime);
     PvpProtocolTools.SyncHeroItems(unit, unitInfo);
     PvpProtocolTools.SyncMainHeroData(unit, unitInfo);
 }
        public static void SyncSingleUnit(UnitRuntimeInfo unitInfo)
        {
            byte lifeState = unitInfo.baseUnitInfo.lifeState;

            if (lifeState == 2 || lifeState == 3)
            {
                int unitId = unitInfo.baseUnitInfo.unitId;
                PvpManager.On_KillHero(unitId, 0f, (float)TimeSpan.FromTicks(unitInfo.reliveLeftTime).TotalSeconds);
            }
            PvpProtocolTools.TryRecoverUnit(unitInfo);
        }
 public static void UpdateHeroSkins(IEnumerable <ReadyPlayerSampleInfo> allPlayers)
 {
     HeroSkins.Clear();
     foreach (ReadyPlayerSampleInfo current in allPlayers)
     {
         if (!string.IsNullOrEmpty(current.heroSkinId))
         {
             int skinIdx = 0;
             if (int.TryParse(current.heroSkinId, out skinIdx))
             {
                 HeroSkins.SetHeroSkin(PvpProtocolTools.GroupToTeam((int)current.group), current.heroInfo.heroId, skinIdx);
             }
         }
     }
 }
        public static void SyncFightInfo(InBattleRuntimeInfo fightInfo)
        {
            if (fightInfo == null || fightInfo.teamInfos == null)
            {
                return;
            }
            if (fightInfo.frameTime > 0)
            {
                FrameSyncManager.Instance.OneFrameTime = (double)((float)fightInfo.frameTime / 1000f);
            }
            PvpProtocolTools.ResetHeroStatistic(fightInfo);
            GameManager.Instance.SurrenderMgr.SyncInfos(fightInfo.surrenderInfos);
            Singleton <PvpManager> .Instance.RoomInfo.CtrlUniqueIds.Clear();

            if (fightInfo.unitInfos == null)
            {
                return;
            }
            PvpProtocolTools.SyncSceneState(fightInfo.sceneValues);
            Singleton <PvpManager> .Instance.GameStartTime = new DateTime?(DateTime.Now - TimeSpan.FromTicks(fightInfo.gameTime));
            Dictionary <int, Units> allMapUnits = MapManager.Instance.GetAllMapUnits();
            List <Units>            list        = new List <Units>();

            foreach (Units unit in allMapUnits.Values)
            {
                if ((!unit.isHero && !unit.isHome && !unit.isBuilding) || unit.MirrorState)
                {
                    if (unit.isLive)
                    {
                        UnitRuntimeInfo unitRuntimeInfo = fightInfo.unitInfos.FirstOrDefault((UnitRuntimeInfo x) => x.baseUnitInfo.unitId == unit.unique_id);
                        if (unitRuntimeInfo == null)
                        {
                            list.Add(unit);
                        }
                    }
                }
            }
            foreach (Units current in list)
            {
                MapManager.Instance.DespawnUnit(current);
            }
            for (int i = 0; i < fightInfo.unitInfos.Length; i++)
            {
                PvpProtocolTools.SyncSingleUnit(fightInfo.unitInfos[i]);
            }
            Singleton <MiniMapView> .Instance.UpdateAfterReConect();
        }
Пример #7
0
 private void SyncFightInfo(InBattleRuntimeInfo fightInfo)
 {
     if (fightInfo == null)
     {
         PvpStateBase.LogState("no fight info");
         this.TryStartOberving();
         return;
     }
     if (fightInfo.roomState == 3)
     {
         Singleton <PvpManager> .Instance.AbandonGame(PvpErrorCode.StateError);
     }
     else
     {
         PvpProtocolTools.SyncFightInfo(fightInfo);
         this.TryStartOberving();
     }
 }
        private static void SetUnitState(Units unit, UnitRuntimeInfo info)
        {
            if (!unit)
            {
                return;
            }
            PvpProtocolTools.SyncUnitPosition(unit, info);
            PvpProtocolTools.SyncUnitProperties(unit, info);
            PvpProtocolTools.SyncUnitBuff(unit, info);
            PvpProtocolTools.SyncUnitLifeStateAndSkill(unit, info.baseUnitInfo, info.reliveLeftTime);
            Units player = PlayerControlMgr.Instance.GetPlayer();

            if (player != null && player.teamType < 4)
            {
                unit.m_nServerVisibleState = (int)info.nVisebleState[player.teamType];
            }
            PvpProtocolTools.TrySyncMonsterCreepGroupType(unit, info);
            PvpProtocolTools.TrySyncMonsterCreepRotation(unit);
        }
        private static void TryRecoverUnit(UnitRuntimeInfo info)
        {
            UnitInfo baseUnitInfo = info.baseUnitInfo;
            Units    units        = MapManager.Instance.GetUnit(baseUnitInfo.unitId);

            try
            {
                UnitType unitType = baseUnitInfo.unitType;
                if (unitType != UnitType.Hero)
                {
                    if (unitType != UnitType.Monster)
                    {
                        if (unitType != UnitType.Tower && unitType != UnitType.Home)
                        {
                            if (unitType == UnitType.MapItem)
                            {
                                if (!units)
                                {
                                    PvpProtocolTools.CreateMapItem(info, UnitControlType.None);
                                }
                                goto IL_179;
                            }
                            if (unitType != UnitType.Soldier)
                            {
                                if (unitType == UnitType.FenShenHero)
                                {
                                    if (!units)
                                    {
                                        units = PvpProtocolTools.CreateHeroByUnitInfo(info.baseUnitInfo);
                                    }
                                    PvpProtocolTools.SetUnitState(units, info);
                                    goto IL_179;
                                }
                                if (unitType != UnitType.EyeUnit && unitType != UnitType.SummonMonster && unitType != UnitType.Pet && unitType != UnitType.LabisiUnit)
                                {
                                    goto IL_179;
                                }
                            }
                        }
                        else
                        {
                            units = MapManager.Instance.GetUnit(baseUnitInfo.unitId);
                            if (!units)
                            {
                                ClientLogger.Error("TryCreateUnit: tower not found - " + StringUtils.DumpObject(baseUnitInfo));
                                return;
                            }
                            PvpProtocolTools.SetUnitState(units, info);
                            goto IL_179;
                        }
                    }
                    if (!units)
                    {
                        units = PvpProtocolTools.CreateMonsterByUnitInfo(info.baseUnitInfo);
                    }
                    PvpProtocolTools.SetUnitState(units, info);
                }
                else
                {
                    if (!units)
                    {
                        units = MapManager.Instance.TryFetchRecycledUnit(baseUnitInfo.unitId);
                        if (!units)
                        {
                            ClientLogger.Error("TryCreateUnit: hero not found - " + StringUtils.DumpObject(baseUnitInfo));
                            return;
                        }
                    }
                    PvpProtocolTools.SetUnitState(units, info);
                }
IL_179:
                if (units)
                {
                    units.UpdateVisible();
                    units.RefreshSyncState();
                }
            }
            catch (Exception e)
            {
                ClientLogger.LogException(e);
            }
        }
Пример #10
0
 private static void SyncUnitLifeState(Units unit, UnitInfo unitInfo, long reliveLeftTime)
 {
     try
     {
         PvpLifeState lifeState = (PvpLifeState)unitInfo.lifeState;
         if (lifeState == PvpLifeState.Dead || lifeState == PvpLifeState.WaitRelive)
         {
             PvpProtocolTools.ToDie(unit, null, reliveLeftTime);
         }
         else
         {
             if (!unit.isLive)
             {
                 if (unit.isHero)
                 {
                     SpawnUtility spawnUtility = GameManager.Instance.Spawner.GetSpawnUtility();
                     spawnUtility.RespawnPvpHero(unit);
                 }
                 else
                 {
                     ClientLogger.Error(string.Concat(new object[]
                     {
                         "SetUnitState: cannot relive non-hero unit #",
                         unit.unique_id,
                         " ",
                         unit.name,
                         " to state ",
                         lifeState
                     }));
                 }
             }
             if (unit.IsMonsterCreep())
             {
                 Monster monster = unit as Monster;
                 if (lifeState == PvpLifeState.Unactive)
                 {
                     monster.Sleep();
                 }
                 else if (lifeState == PvpLifeState.Live)
                 {
                     if (monster.Sleeping.IsInState)
                     {
                         monster.Wakeup(false);
                     }
                     else
                     {
                         monster.Appear();
                     }
                 }
                 else
                 {
                     ClientLogger.Warn(string.Concat(new object[]
                     {
                         "don't know how to treat ",
                         unit.name,
                         " with life state ",
                         lifeState
                     }));
                 }
             }
         }
     }
     catch (Exception e)
     {
         ClientLogger.LogException(e);
     }
 }
Пример #11
0
 public static TeamType GetTeam(this ReadyPlayerSampleInfo info)
 {
     return(PvpProtocolTools.GroupToTeam((int)info.group));
 }
Пример #12
0
        public static Units CreateMonsterByUnitInfo(UnitInfo info)
        {
            Units result;

            try
            {
                if (info == null)
                {
                    ClientLogger.Error("CreateMonsterByUnitInfo: info is null");
                    result = null;
                }
                else if (MapManager.Instance == null)
                {
                    ClientLogger.Error("MapManager.Instance is null");
                    result = null;
                }
                else if (GlobalSettings.TestCreep)
                {
                    Singleton <CreepSpawner> .Instance.CreateCreeps(new List <string>
                    {
                        "101"
                    }, info.unitId);

                    result = null;
                }
                else if (GlobalSettings.NoMonster)
                {
                    ClientLogger.Warn("P2C_CreateUnits create monster ignored");
                    result = null;
                }
                else if (info.unitType == UnitType.EyeItem)
                {
                    result = PvpProtocolTools.CreateEyeItemByUnitInfo(info);
                }
                else
                {
                    TeamType  teamType  = PvpProtocolTools.GroupToTeam((int)info.group);
                    int       num       = -1;
                    Transform transform = null;
                    if (StringUtils.CheckValid(info.burnValue))
                    {
                        string[] stringValue = StringUtils.GetStringValue(info.burnValue, '|');
                        UnitType unitType    = info.unitType;
                        if (unitType != UnitType.Monster)
                        {
                            if (unitType != UnitType.Soldier)
                            {
                                ClientLogger.Error("cannot be here");
                            }
                            else
                            {
                                num = int.Parse(stringValue[2]);
                            }
                        }
                        else
                        {
                            num       = int.Parse(stringValue[1]);
                            transform = MapManager.Instance.GetSpawnPos(TeamType.Neutral, num);
                        }
                        if (num < 0)
                        {
                            ClientLogger.Error("burnValue is invalid, use position #" + info.typeId + "  " + info.burnValue);
                        }
                    }
                    else if (info.unitType == UnitType.EyeUnit)
                    {
                        transform = MapManager.Instance.GetSpawnPos(TeamType.Neutral, 1);
                        if (transform != null)
                        {
                            transform.position = new Vector3(info.position.x, info.position.y, info.position.z);
                        }
                    }
                    else if (info.unitType == UnitType.SummonMonster || info.unitType == UnitType.BoxUnit)
                    {
                        transform = MapManager.Instance.GetSpawnPos((TeamType)info.group, 1);
                        if (transform != null)
                        {
                            transform.position = new Vector3(info.position.x, info.position.y, info.position.z);
                        }
                    }
                    else if (info.unitType == UnitType.Pet)
                    {
                        transform = MapManager.Instance.GetSpawnPos((TeamType)info.group, 1);
                        if (transform != null)
                        {
                            transform.position = new Vector3(info.position.x, info.position.y, info.position.z);
                        }
                    }
                    else if (info.unitType == UnitType.LabisiUnit)
                    {
                        transform = MapManager.Instance.GetSpawnPos((TeamType)info.group, 1);
                        if (transform != null)
                        {
                            transform.position = new Vector3(info.position.x, info.position.y, info.position.z);
                        }
                    }
                    else
                    {
                        ClientLogger.Error(string.Concat(new object[]
                        {
                            "burnValue is invalid, use default position #",
                            info.typeId,
                            "  utype:",
                            info.unitType
                        }));
                    }
                    Units unit = MapManager.Instance.GetUnit(info.mainHeroId);
                    int   skin = 0;
                    if (unit != null && info.unitType == UnitType.SummonMonster)
                    {
                        skin = HeroSkins.GetRealHeroSkin((TeamType)unit.teamType, unit.model_id);
                    }
                    EntityVo npcinfo = new EntityVo(EntityType.Monster, info.typeId, num, 0, string.Empty, "Default", 0)
                    {
                        uid  = info.unitId,
                        skin = skin
                    };
                    if (null == GameManager.Instance)
                    {
                        Debug.LogError("null == GameManager.Instance");
                        result = null;
                    }
                    else if (GameManager.Instance.Spawner == null)
                    {
                        Debug.LogError("null == GameManager.Instance.Spawner");
                        result = null;
                    }
                    else
                    {
                        SpawnUtility spawnUtility = GameManager.Instance.Spawner.GetSpawnUtility();
                        Units        units        = spawnUtility.SpawnInstance(npcinfo, "Monster", teamType, num, "[]", transform, UnitControlType.None, info.unitType);
                        if (units == null)
                        {
                            ClientLogger.Error(string.Concat(new object[]
                            {
                                "P2C_CreateUnits create monster failed, creepId=",
                                info.creepId,
                                " typeid= ",
                                info.typeId,
                                " burnValue=",
                                info.burnValue ?? "null"
                            }));
                            result = null;
                        }
                        else
                        {
                            if (units.UnitType == UnitType.EyeUnit)
                            {
                            }
                            if (unit != null)
                            {
                                units.ParentUnit = unit;
                            }
                            if (units.UnitType == UnitType.EyeUnit || units.UnitType == UnitType.SummonMonster)
                            {
                                units.m_fLiveTime = info.liveTime;
                                units.m_fLeftTime = info.liveTime;
                            }
                            units.SetOrigin(true, info.creepId.ToString(), info.monsterTeamId);
                            units.TryAddBirthEffect();
                            units.SetIsMonsterCreep(info.unitType == UnitType.Monster || info.unitType == UnitType.CreepBoss);
                            PvpProtocolTools.SyncUnitLifeStateAndSkill(units, info, 0L);
                            if (units.isMonster && units.skillManager != null)
                            {
                                units.skillManager.EnableSkills(true);
                            }
                            if (units != null && transform != null)
                            {
                                units.SetPosition(transform.position, true);
                            }
                            result = units;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                ClientLogger.LogException(e);
                result = null;
            }
            return(result);
        }