Skip to content
This repository has been archived by the owner on Feb 19, 2022. It is now read-only.

Commit

Permalink
fix(Phantom): generate task properly
Browse files Browse the repository at this point in the history
  • Loading branch information
NotSugden committed Aug 3, 2021
1 parent 8bfd1f3 commit d346d05
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 19 deletions.
64 changes: 47 additions & 17 deletions source/Patches/NeutralRoles/PhantomMod/SetPhantom.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,15 @@

namespace TownOfUs.NeutralRoles.PhantomMod
{
[HarmonyPatch(typeof(HudManager), nameof(HudManager.Update))]
public static class Testing
{
public static void Postfix()
{
if (Input.GetKeyDown(KeyCode.T))
SetPhantom.RemoveTasks(PlayerControl.LocalPlayer);
}
}
[HarmonyPatch(typeof(ExileController), nameof(ExileController.WrapUp))]
public class SetPhantom
{
Expand All @@ -30,7 +39,7 @@ public static void Postfix(ExileController __instance)
Role.RoleDictionary.Remove(localPlayer.PlayerId);
var role = new Phantom(localPlayer);
RemoveTasks(PlayerControl.LocalPlayer);
role.RegenTask();
// role.RegenTask();
Lights.SetLights();

localPlayer.MyPhysics.ResetMoveState();
Expand All @@ -52,28 +61,49 @@ public static void Postfix(ExileController __instance)

public static void RemoveTasks(PlayerControl player)
{
var newTasks = new List<PlayerTask>();
foreach (var task in player.myTasks)
task.gameObject.Destroy();

player.myTasks.Clear();
var newTaskDatas = new List<GameData.TaskInfo>();
foreach (var taskData in player.Data.Tasks)
for (var i = 0;i < player.myTasks.Count;i++) //(var taskData in player.Data.Tasks)
{
var newTaskData = new GameData.TaskInfo(taskData.TypeId, taskData.Id);
newTaskData.Id = taskData.Id;
var oldTask = player.myTasks[i].TryCast<NormalPlayerTask>();
if (oldTask == null) continue;
var taskInfo = player.Data.FindTaskById(oldTask.Id);
taskInfo.Complete = false;
var playerTask = Object.Instantiate(
ShipStatus.Instance.GetTaskById(newTaskData.TypeId), player.transform
oldTask, player.transform
);
playerTask.Id = newTaskData.Id;
playerTask.Id = oldTask.Id;
playerTask.Owner = player;
playerTask.taskStep = 0;
var consoles = playerTask.FindConsoles();
if (consoles.Count > 0)
{
foreach (var console in consoles)
{
console.gameObject.SetActive(true);
var towelTask = console.TryCast<TowelTaskConsole>();
if (towelTask != null)
towelTask.Image.color = Color.white;
}
playerTask.StartAt = consoles[0].Room;
}
else
{
var console = playerTask.FindSpecialConsole((Il2CppSystem.Func<Console, bool>)(
_console => _console.ValidTasks.Any(
(TaskSet set) => set.taskType == playerTask.TaskType && set.taskStep.Contains(0)
)
));
console.gameObject.SetActive(true);
playerTask.StartAt = console.Room;
}

playerTask.Arrow?.gameObject.SetActive(false);

playerTask.Initialize();
newTasks.Add(playerTask);
newTaskDatas.Add(newTaskData);
}

player.Data.Tasks = newTaskDatas;
player.myTasks = newTasks;
oldTask.gameObject.Destroy();

player.myTasks[i] = playerTask;
}
}

public static void AddCollider(Phantom role)
Expand Down
4 changes: 2 additions & 2 deletions source/Patches/RpcHandling.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@ private static void GenEachRole(List<GameData.PlayerInfo> infected)
if (TutorialManager.InstanceExists)
{
var role = Role.Gen<Role>(
typeof(Engineer),
typeof(Crewmate),
PlayerControl.LocalPlayer,
CustomRPC.SetEngineer
CustomRPC.SetCrewmate
);
return;
}
Expand Down

0 comments on commit d346d05

Please sign in to comment.