public static void GoToLevel(string campaignName, int levelNum, string terrainName) { if (instance == null || !Main.enabled) { //Main.Log("instance null"); return; } WorldTerritory3D territoryObject = null; // = WorldMapController.GetTerritory(campaignName); WorldTerritory3D[] territories = Traverse.Create(typeof(WorldMapController)).Field("territories3D").GetValue() as WorldTerritory3D[]; foreach (WorldTerritory3D ter in territories) { //Main.Log(ter.properties.territoryName + " == " + campaignName + " = " + (ter.properties.territoryName == campaignName)); if (ter.properties.territoryName == campaignName) { territoryObject = ter; } } if (territoryObject == null) { //Main.Log(campaignName + " territory not found"); return; } WorldMapController.QueuedAction item = default(WorldMapController.QueuedAction); if (territoryObject.properties.isBurning) { item.actionType = WorldMapController.QueuedActions.Burning; } else if ((Main.campaignNum.indexNumber + 1) >= 11) { item.actionType = WorldMapController.QueuedActions.Alien; } else { item.actionType = WorldMapController.QueuedActions.Terrorist; } item.territory = territoryObject; (Traverse.Create(instance).Field("actionQueue").GetValue() as List <WorldMapController.QueuedAction>).Add(item); //Main.mod.Logger.Log(territoryObject.properties.territoryName); //Main.mod.Logger.Log("isburning: " + territoryObject.properties.isBurning + " isCity: " + territoryObject.properties.isCity + " isSecret: " + // territoryObject.properties.isCity + " state: " + territoryObject.properties.state); //return; foreach (TerritoryProgress territoryProgress in WorldMapProgressController.currentProgress.territoryProgress) { //Main.mod.Logger.Log(territoryProgress.name.ToLower() + " == " + territoryObject.properties.territoryName.ToLower() + " = " + (territoryProgress.name.ToLower() == territoryObject.properties.territoryName.ToLower())); if (territoryProgress.name.ToLower() == terrainName) { //Main.mod.Logger.Log("found territory changed level"); territoryProgress.startLevel = levelNum; } } WorldMapController.RestTransport(territoryObject); WorldMapController.EnterMission(territoryObject.GetCampaignName(), territoryObject.properties.loadingText, territoryObject.properties); }
static bool Prefix(WorldMapController __instance) { if (!Main.enabled) { return(true); } if (!Main.settings.cameraShake) { PlayerOptions.Instance.cameraShakeAmount = 0f; } if (!Main.settings.enableSkip) { return(true); } Traverse actionQueueTraverse = Traverse.Create(__instance); List <WorldMapController.QueuedAction> actionQueue = actionQueueTraverse.Field("actionQueue").GetValue() as List <WorldMapController.QueuedAction>; /*for (int i = 0; i < actionQueue.Count; i++) * { * Main.mod.Logger.Log(actionQueue[i].ToString()); * } * if (actionQueue.Count == 0 || actionQueue == null) * { * Main.mod.Logger.Log("NO ACTIONS"); * }*/ if (actionQueue.Count > 0) { WorldMapController.QueuedAction queuedAction = actionQueue[0]; switch (queuedAction.actionType) { case WorldMapController.QueuedActions.Helicopter: WorldCamera.instance.MoveToHelicopter(0f); break; case WorldMapController.QueuedActions.Terrorist: string lastSafe = WorldMapProgressController.currentProgress.lastSafeTerritory; queuedAction.territory.BecomeEnemyBase(); WorldMapController.RestTransport(queuedAction.territory); WorldMapController.EnterMission(queuedAction.territory.GetCampaignName(), queuedAction.territory.properties.loadingText, queuedAction.territory.properties); break; case WorldMapController.QueuedActions.Alien: queuedAction.territory.SetState(TerritoryState.Infested); WorldMapController.RestTransport(queuedAction.territory); WorldMapController.EnterMission(queuedAction.territory.GetCampaignName(), queuedAction.territory.properties.loadingText, queuedAction.territory.properties); break; case WorldMapController.QueuedActions.Burning: queuedAction.territory.SetState(TerritoryState.TerroristBurning); WorldMapController.RestTransport(queuedAction.territory); WorldMapController.EnterMission(queuedAction.territory.GetCampaignName(), queuedAction.territory.properties.loadingText, queuedAction.territory.properties); break; case WorldMapController.QueuedActions.Liberated: queuedAction.territory.SetState(TerritoryState.Liberated); break; case WorldMapController.QueuedActions.Hell: queuedAction.territory.SetState(TerritoryState.Hell); WorldMapController.RestTransport(queuedAction.territory); WorldMapController.EnterMission(queuedAction.territory.GetCampaignName(), queuedAction.territory.properties.loadingText, queuedAction.territory.properties); break; case WorldMapController.QueuedActions.Secret: queuedAction.territory.SetState(TerritoryState.TerroristBase); WorldMapController.RestTransport(queuedAction.territory); WorldMapController.EnterMission(queuedAction.territory.GetCampaignName(), queuedAction.territory.properties.loadingText, queuedAction.territory.properties); break; } actionQueue.RemoveAt(0); Traverse queueCounter = Traverse.Create(__instance); if (queuedAction.actionType == WorldMapController.QueuedActions.Hell) { //queueCounter = 5.2f; queueCounter.Field("queueCounter").SetValue(0); } else if (queuedAction.actionType == WorldMapController.QueuedActions.Liberated) { //queueCounter = 2f; queueCounter.Field("queueCounter").SetValue(0); } else if (queuedAction.actionType == WorldMapController.QueuedActions.Secret) { //queueCounter = 0f; queueCounter.Field("queueCounter").SetValue(0); } else { //queueCounter = 1.6f; queueCounter.Field("queueCounter").SetValue(0); } } else if (WorldCamera.instance.CamState != WorldCamera.CameraState.FollowHelicopter && WorldCamera.instance.CamState != WorldCamera.CameraState.MoveToHelicopter) { WorldCamera.instance.MoveToHelicopter(0f); } actionQueueTraverse.Field("actionQueue").SetValue(actionQueue); return(false); }