private static bool SetClass(CharacterClassManager __instance, RoleType id, CharacterClassManager.SpawnReason spawnReason) { var player = __instance.GetPlayer(); __instance.SetClassIDAdv(id, player.LiteRoleSet, spawnReason, false); return(false); }
/// <summary> /// Initializes a new instance of the <see cref="OwnerChangingRoleEventArgs"/> class. /// </summary> /// <param name="item"><inheritdoc cref="Item"/></param> /// <param name="player"><inheritdoc cref="ChangingRoleEventArgs.Player"/></param> /// <param name="newRole"><inheritdoc cref="ChangingRoleEventArgs.NewRole"/></param> /// <param name="shouldPreservePosition"><inheritdoc cref="ChangingRoleEventArgs.Lite"/></param> /// <param name="reason"><inheritdoc cref="ChangingRoleEventArgs.Reason"/></param> public OwnerChangingRoleEventArgs(ItemBase item, Player player, RoleType newRole, bool shouldPreservePosition, CharacterClassManager.SpawnReason reason) : base(player, newRole, shouldPreservePosition, reason) { Item = item; }
private static void ChangeInventory(Exiled.API.Features.Player player, List <ItemType> items, Dictionary <ItemType, ushort> ammo, RoleType prevRole, RoleType newRole, CharacterClassManager.SpawnReason reason) { try { Inventory inventory = player.Inventory; if (reason == CharacterClassManager.SpawnReason.Escaped && prevRole != newRole) { List <ItemPickupBase> list = new List <ItemPickupBase>(); if (inventory.TryGetBodyArmor(out BodyArmor bodyArmor)) { bodyArmor.DontRemoveExcessOnDrop = true; } while (inventory.UserInventory.Items.Count > 0) { int startCount = inventory.UserInventory.Items.Count; ushort key = inventory.UserInventory.Items.ElementAt(0).Key; ItemPickupBase item = inventory.ServerDropItem(key); // If the list wasn't changed, we need to manually remove the item to avoid a softlock. if (startCount == inventory.UserInventory.Items.Count) { inventory.UserInventory.Items.Remove(key); } else { list.Add(item); } } InventoryItemProvider.PreviousInventoryPickups[player.ReferenceHub] = list; } else { while (inventory.UserInventory.Items.Count > 0) { int startCount = inventory.UserInventory.Items.Count; ushort key = inventory.UserInventory.Items.ElementAt(0).Key; inventory.ServerRemoveItem(key, null); // If the list wasn't changed, we need to manually remove the item to avoid a softlock. if (startCount == inventory.UserInventory.Items.Count) { inventory.UserInventory.Items.Remove(key); } } inventory.UserInventory.ReserveAmmo.Clear(); inventory.SendAmmoNextFrame = true; } foreach (KeyValuePair <ItemType, ushort> keyValuePair in ammo) { inventory.ServerAddAmmo(keyValuePair.Key, keyValuePair.Value); } foreach (ItemType item in items) { InventoryItemProvider.OnItemProvided?.Invoke(player.ReferenceHub, inventory.ServerAddItem(item)); } } catch (Exception e) { Log.Error($"{nameof(ChangingRole)}.{nameof(ChangeInventory)}: {e}"); } }
/// <summary> /// Initializes a new instance of the <see cref="ChangingRoleEventArgs"/> class. /// </summary> /// <param name="player"><inheritdoc cref="Player"/></param> /// <param name="newRole"><inheritdoc cref="NewRole"/></param> /// <param name="shouldPreservePosition"><inheritdoc cref="Lite"/></param> /// <param name="reason"><inheritdoc cref="Reason"/></param> public ChangingRoleEventArgs(Player player, RoleType newRole, bool shouldPreservePosition, CharacterClassManager.SpawnReason reason) { Player = player; NewRole = newRole; if (InventorySystem.Configs.StartingInventories.DefinedInventories.ContainsKey(newRole)) { foreach (ItemType itemType in InventorySystem.Configs.StartingInventories.DefinedInventories[newRole].Items) { Items.Add(itemType); } foreach (KeyValuePair <ItemType, ushort> ammoPair in InventorySystem.Configs.StartingInventories.DefinedInventories[newRole].Ammo) { Ammo.Add(ammoPair.Key, ammoPair.Value); } } Lite = shouldPreservePosition; Reason = (SpawnReason)reason; }
private static bool OnSetClass(ref RoleType classid, GameObject ply, CharacterClassManager.SpawnReason spawnReason) { try { var player = ply.GetPlayer(); if (player.Hub.isDedicatedServer || !player.Hub.Ready) { return(false); } //Initialise eventargs var eventargs = new PlayerSetClassEventArgs { Allow = true, Player = player, Role = classid, SpawnReason = spawnReason, EscapeItems = new List <SynapseItem>(), Position = Vector3.zero, Rotation = 0f, Items = new List <SynapseItem>(), Ammo = new Dictionary <AmmoType, ushort>(), }; //Set EscapeItems if the Player is escaping if (eventargs.IsEscaping) { eventargs.EscapeItems = player.Inventory.Items; } //Find the Position and Rotation if the player becomes a living Role if (classid != RoleType.Spectator && classid != RoleType.None) { var randomPosition = SpawnpointManager.GetRandomPosition(classid); if (Map.Get.RespawnPoint != Vector3.zero) { eventargs.Position = Map.Get.RespawnPoint; } else if (randomPosition != null) { eventargs.Position = randomPosition.transform.position; eventargs.Rotation = randomPosition.transform.rotation.eulerAngles.y; } else { eventargs.Position = player.ClassManager.DeathPosition; } } //Find and create the Items that the Player should spawn with if (InventorySystem.Configs.StartingInventories.DefinedInventories.TryGetValue(classid, out var roleitems)) { foreach (var ammo in roleitems.Ammo) { eventargs.Ammo[(AmmoType)ammo.Key] = ammo.Value; } foreach (var itemtype in roleitems.Items) { eventargs.Items.Add(new SynapseItem(itemtype)); } } Server.Get.Events.Player.InvokeSetClassEvent(eventargs); classid = eventargs.Role; if (eventargs.Allow) { player.setClassEventArgs = eventargs; } return(eventargs.Allow); } catch (Exception e) { Logger.Get.Error($"Synapse-Event: PlayerSetClass(SetPlayersClass) failed!!\n{e}"); return(true); } }
public static bool Prefix(ReferenceHub userHub, RoleType prevClass, RoleType newClass, bool lite, CharacterClassManager.SpawnReason spawnReason) { if (spawnReason == CharacterClassManager.SpawnReason.Escaped) { switch (prevClass) { case RoleType.ClassD: if (newClass == RoleType.ChaosConscript) { RoundSummary.EscapedClassD++; } break; case RoleType.Scientist: if (newClass == RoleType.NtfSpecialist) { RoundSummary.EscapedScientists++; } break; } } else if (spawnReason == CharacterClassManager.SpawnReason.Revived && prevClass == RoleType.Spectator && newClass == RoleType.Scp0492) { RoundSummary.ChangedIntoZombies++; RoundSummary.singleton.classlistStart.scps_except_zombies++; RoundSummary.singleton.classlistStart.zombies++; } return(false); }