private static void SyncUnitProperties(Units unit, UnitRuntimeInfo info)
 {
     unit.data.SetMaxHp(info.maxhp);
     unit.SetHp(info.hp);
     unit.data.SetMaxMp(info.maxmp);
     unit.SetMp(info.mp);
 }
        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 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();
        }
 private static void TrySyncMonsterCreepGroupType(Units unit, UnitRuntimeInfo info)
 {
     if (unit == null || info == null || info.baseUnitInfo == null)
     {
         return;
     }
     if (!TagManager.CheckTag(unit, global::TargetTag.Creeps))
     {
         return;
     }
     if (unit.teamType == (int)info.baseUnitInfo.group)
     {
         return;
     }
     unit.teamType = (int)info.baseUnitInfo.group;
     unit.SetBloodBarStyle();
 }
 private static void SyncUnitPosition(Units unit, UnitRuntimeInfo info)
 {
     if (info.position != null && !unit.isBuilding)
     {
         Vector3 vector = new Vector3(info.position.x, unit.transform.position.y, info.position.z);
         if (unit.moveController != null)
         {
             unit.moveController.CurPosition = vector;
         }
         unit.SetPosition(vector, false);
         unit.transform.rotation = Quaternion.AngleAxis(info.rotateY, Vector3.up);
         unit.MoveToPoint(new Vector3?(info.targetPosition.ToVector3()), false);
     }
     else
     {
         unit.transform.position = unit.spwan_pos;
     }
 }
        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 SyncUnitBuff(Units unit, UnitRuntimeInfo info)
 {
     if (!unit)
     {
         return;
     }
     if (info == null)
     {
         return;
     }
     if (unit.buffManager != null)
     {
         unit.buffManager.ClearAllBuffs();
     }
     if (info.buffInfo == null)
     {
         return;
     }
     Dictionary <string, BuffRuntimeData> .Enumerator enumerator = info.buffInfo.GetEnumerator();
     while (enumerator.MoveNext())
     {
         int num = 0;
         while (true)
         {
             byte arg_83_0 = (byte)num;
             KeyValuePair <string, BuffRuntimeData> current = enumerator.Current;
             if (arg_83_0 >= current.Value.layer)
             {
                 break;
             }
             KeyValuePair <string, BuffRuntimeData> current2 = enumerator.Current;
             ActionManager.AddBuff(current2.Key, unit, null, false, string.Empty);
             num++;
         }
         BuffManager arg_B4_0 = unit.buffManager;
         KeyValuePair <string, BuffRuntimeData> current3 = enumerator.Current;
         string arg_B4_1 = current3.Key;
         KeyValuePair <string, BuffRuntimeData> current4 = enumerator.Current;
         arg_B4_0.SetBuffCDTime(arg_B4_1, (float)current4.Value.curTime);
     }
 }
        public static Units CreateMapItem(UnitRuntimeInfo info, UnitControlType unitControlType = UnitControlType.None)
        {
            if (info == null)
            {
                return(null);
            }
            if (info.baseUnitInfo == null)
            {
                return(null);
            }
            if (info.baseUnitInfo.skillunitInfo == null)
            {
                return(null);
            }
            SkillUnitData vo = Singleton <SkillUnitDataMgr> .Instance.GetVo(info.baseUnitInfo.typeId);

            if (vo == null)
            {
                return(null);
            }
            Dictionary <DataType, object> dictionary = new Dictionary <DataType, object>();

            dictionary.Add(DataType.NameId, info.baseUnitInfo.typeId);
            dictionary.Add(DataType.TeamType, (TeamType)info.baseUnitInfo.group);
            if (info.baseUnitInfo.unitId != 0)
            {
                dictionary.Add(DataType.UniqueId, info.baseUnitInfo.unitId);
            }
            Units result;

            if (vo.IsBloodBall)
            {
                result = MapManager.Instance.SpawnBuffItem(dictionary, null, MoveController.SVectgor3ToVector3(info.baseUnitInfo.skillunitInfo.burnPos), Quaternion.identity, unitControlType);
            }
            else
            {
                result = MapManager.Instance.SpawnSkillUnit(dictionary, null, MoveController.SVectgor3ToVector3(info.baseUnitInfo.skillunitInfo.burnPos), Quaternion.identity, unitControlType, null, string.Empty);
            }
            return(result);
        }
        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);
            }
        }