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); } }