コード例 #1
0
        private static bool SetClass(CharacterClassManager __instance, RoleType id)
        {
            var player = __instance.GetPlayer();

            __instance.SetClassIDAdv(id, player.LiteRoleSet, CharacterClassManager.SpawnReason.None, true);
            return(false);
        }
コード例 #2
0
        private static bool Prefix(WeaponManager __instance, out bool __result, CharacterClassManager c, bool forceFriendlyFire = false)
        {
            try
            {
                var shooter = __instance.GetPlayer();
                var target  = c.GetPlayer();

                __result = true;

                if (shooter.CustomRole == null && target.CustomRole == null)
                {
                    if (shooter.Team == Team.SCP && target.Team == Team.SCP)
                    {
                        __result = false;
                    }

                    var ff = Server.Get.FF;
                    if (forceFriendlyFire)
                    {
                        ff = true;
                    }

                    else if (!ff)
                    {
                        __result = Misc.GetFraction(shooter.Team) != Misc.GetFraction(target.Team);
                    }
                }
                else
                {
                    if (shooter.CustomRole != null)
                    {
                        if (shooter.CustomRole.GetFriends().Any(x => x == target.RealTeam))
                        {
                            __result = false;
                            shooter.GiveTextHint(Server.Get.Configs.SynapseTranslation.GetTranslation("sameteam"));
                        }
                    }
                    if (target.CustomRole != null)
                    {
                        if (target.CustomRole.GetFriends().Any(x => x == shooter.RealTeam))
                        {
                            __result = false;
                            shooter.GiveTextHint(Server.Get.Configs.SynapseTranslation.GetTranslation("sameteam"));
                        }
                    }
                }
                return(false);
            }
            catch (Exception e)
            {
                Synapse.Api.Logger.Get.Error($"Synapse-API: GetShootPermission  failed!!\n{e}\nStackTrace:\n{e.StackTrace}");
                __result = true;
                return(true);
            }
        }
コード例 #3
0
        public static bool Prefix(CharacterClassManager __instance)
        {
            try
            {
                if (!NetworkServer.active)
                {
                    return(false);
                }
                if (!NonFacilityCompatibility.currentSceneSettings.enableStandardGamplayItems)
                {
                    return(false);
                }

                foreach (var gameObject in PlayerManager.players)
                {
                    if (!(Vector3.Distance(gameObject.transform.position, __instance._lureSpj.transform.position) <
                          1.97f))
                    {
                        continue;
                    }
                    var component  = gameObject.GetComponent <CharacterClassManager>();
                    var component2 = gameObject.GetComponent <PlayerStats>();
                    if (component.CurClass == RoleType.Spectator || component.GodMode)
                    {
                        continue;
                    }
                    var allow = component.CurRole.team != Team.SCP;

                    var closeFemur = FemurBrokePeople + 1 >= SynapseConfigs.RequiredForFemur;
                    var player     = __instance.GetPlayer();

                    Events.InvokeFemurEnterEvent(player, ref allow, ref closeFemur);

                    if (!allow)
                    {
                        return(false);
                    }
                    component2.HurtPlayer(new PlayerStats.HitInfo(10000f, "WORLD", DamageTypes.Lure, 0), gameObject);
                    FemurBrokePeople++;
                    if (closeFemur)
                    {
                        __instance._lureSpj.SetState(true);
                    }
                }

                return(false);
            }
            catch (Exception e)
            {
                Log.Error($"FemurEnterEvent Error: {e}");
                return(true);
            }
        }
コード例 #4
0
ファイル: TagPatch.cs プロジェクト: SynapseSL/SynapseOld
 public static bool Prefix(CharacterClassManager __instance)
 {
     try
     {
         Events.InvokePlayerTagEvent(__instance.GetPlayer(), true, out var allow);
         return(allow);
     }
     catch (Exception e)
     {
         Log.Error($"PlayerTagEvent Error: {e}");
         return(true);
     }
 }
コード例 #5
0
        private static bool Prefix(CharacterClassManager __instance)
        {
            try
            {
                //Ratelimit Check
                if (!__instance._interactRateLimit.CanExecute())
                {
                    return(false);
                }

                //Position Check
                if (Vector3.Distance(__instance.transform.position, __instance.GetComponent <Escape>().worldPosition) >=
                    Escape.radius * 2)
                {
                    return(false);
                }

                //Event vars
                var player     = __instance.GetPlayer();
                var spawnRole  = player.RoleType;
                var cufferRole = RoleType.None;
                var allow      = true;
                var isCuffed   = false;

                //Cuff Check
                var flag = false;
                if (player.Cuffer != null)
                {
                    cufferRole = player.Cuffer.RoleType;
                    isCuffed   = true;

                    if (ConfigFile.ServerConfig.GetBool("cuffed_escapee_change_team", true))
                    {
                        switch (player.RoleType)
                        {
                        case RoleType.Scientist when(cufferRole == RoleType.ChaosInsurgency || cufferRole == RoleType.ClassD):
                        case RoleType.ClassD when(player.Cuffer.Team == Team.MTF || cufferRole == RoleType.Scientist):
                            flag = true;

                            break;
                        }
                    }
                }

                //TeamCheck
                var singleton = Respawning.RespawnTickets.Singleton;
                switch (player.Team)
                {
                case Team.CDP when flag:
                    spawnRole = RoleType.NtfCadet;
                    break;

                case Team.CDP:
                case Team.RSC when flag:
                    spawnRole = RoleType.ChaosInsurgency;
                    break;

                case Team.RSC:
                    spawnRole = RoleType.NtfScientist;
                    break;
                }

                //PlayerEscapeEvent
                SynapseController.Server.Events.Player.InvokePlayerEscapeEvent(player, ref spawnRole, cufferRole, ref allow, isCuffed);

                if (!allow)
                {
                    return(false);
                }

                if (spawnRole == RoleType.None || spawnRole == player.RoleType)
                {
                    return(false);
                }
                player.ClassManager.SetPlayersClass(spawnRole, player.gameObject, false, true);
                switch (player.Team)
                {
                case Team.MTF:
                    RoundSummary.escaped_scientists++;
                    singleton.GrantTickets(Respawning.SpawnableTeamType.NineTailedFox, ConfigFile.ServerConfig.GetInt("respawn_tickets_mtf_classd_cuffed_count", 1));
                    break;

                case Team.CHI:
                    RoundSummary.escaped_ds++;
                    singleton.GrantTickets(Respawning.SpawnableTeamType.ChaosInsurgency, ConfigFile.ServerConfig.GetInt("respawn_tickets_ci_classd_count", 1));
                    break;
                }

                return(false);
            }
            catch (Exception e)
            {
                SynapseController.Server.Logger.Error($"Synapse-Event: PlayerEscape failed!!\n{e}\nStackTrace:\n{e.StackTrace}");
                return(true);
            }
        }
コード例 #6
0
        private static bool Prefix(CharacterClassManager __instance, bool lite, bool escape)
        {
            try
            {
                var player  = __instance.GetPlayer();
                var curRole = __instance.CurRole;
                if (!__instance._wasAnytimeAlive && player.RoleType != RoleType.Spectator && player.RoleType != RoleType.None)
                {
                    __instance._wasAnytimeAlive = true;
                }

                __instance.InitSCPs();
                __instance.AliveTime = 0f;
                if (player.Team - Team.RSC <= 1)
                {
                    __instance.EscapeStartTime = (int)Time.realtimeSinceStartup;
                }
                try
                {
                    __instance._hub.footstepSync.SetLoudness(curRole.team, curRole.roleId.Is939());
                }
                catch
                {
                }
                if (NetworkServer.active)
                {
                    player.Handcuffs.ClearTarget();
                    player.Handcuffs.NetworkCufferId  = -1;
                    player.Handcuffs.NetworkForceCuff = false;
                    if (curRole.roleId != RoleType.Spectator &&
                        Respawning.RespawnManager.CurrentSequence() != Respawning.RespawnManager.RespawnSequencePhase.SpawningSelectedTeam &&
                        Respawning.NamingRules.UnitNamingManager.RolesWithEnforcedDefaultName.TryGetValue(curRole.roleId, out var spawnableTeamType) &&
                        Respawning.RespawnManager.Singleton.NamingManager.TryGetAllNamesFromGroup((byte)spawnableTeamType, out var array) &&
                        array.Length != 0)
                    {
                        __instance.NetworkCurSpawnableTeamType = (byte)spawnableTeamType;
                        __instance.NetworkCurUnitName          = array[0];
                    }
                    else if (__instance.CurSpawnableTeamType != 0)
                    {
                        __instance.NetworkCurSpawnableTeamType = 0;
                        __instance.NetworkCurUnitName          = string.Empty;
                    }
                }
                if (player.Team != Team.RIP)
                {
                    if (NetworkServer.active && !lite)
                    {
                        player.PlayerMovementSync.OnPlayerClassChange(player.spawnPosition, player.spawnRotation);
                        player.PlayerMovementSync.IsAFK = true;
                        if (escape && CharacterClassManager.KeepItemsAfterEscaping)
                        {
                            for (var num = 0; num < 3; num++)
                            {
                                if (player.AmmoBox[num] >= 15)
                                {
                                    var item = new SynapseItem(player.AmmoBox.types[num].inventoryID, player.AmmoBox[num], 0, 0, 0);
                                    item.Drop(player.spawnPosition);
                                }
                            }
                        }
                        player.AmmoBox.ResetAmmo();

                        if (!__instance.SpawnProtected && CharacterClassManager.EnableSP && CharacterClassManager.SProtectedTeam.Contains((int)curRole.team))
                        {
                            __instance.GodMode        = true;
                            __instance.SpawnProtected = true;
                            __instance.ProtectedTime  = Time.time;
                        }
                    }
                    if (!__instance.isLocalPlayer)
                    {
                        player.MaxHealth = curRole.maxHP;
                    }
                }
                return(false);
            }
            catch (Exception e)
            {
                Logger.Get.Error($"Synapse-Event: PlayerSetClass(position) failed!!\n{e}\nStackTrace:\n{e.StackTrace}");
                return(true);
            }
        }
コード例 #7
0
 private static void RemoveArgs(CharacterClassManager __instance) => __instance.GetPlayer().setClassEventArgs = null;
コード例 #8
0
        public static bool Prefix(CharacterClassManager __instance)
        {
            try
            {
                //RateLimit Check
                if (!__instance._interactRateLimit.CanExecute())
                {
                    return(false);
                }

                //Position Check
                if (Vector3.Distance(__instance.transform.position, __instance.GetComponent <Escape>().worldPosition) >=
                    Escape.radius * 2)
                {
                    return(false);
                }

                //Event vars
                var player     = __instance.GetPlayer();
                var spawnRole  = player.Role;
                var cufferRole = RoleType.None;
                var allow      = true;
                var isCuffed   = false;

                //Cuff Check
                var flag      = false;
                var component = __instance.GetComponent <Handcuffs>();
                if (component.CufferId >= 0)
                {
                    var component2 = component.GetCuffer(component.CufferId).GetComponent <CharacterClassManager>();

                    cufferRole = component2.NetworkCurClass;
                    isCuffed   = true;

                    if (ConfigFile.ServerConfig.GetBool("cuffed_escapee_change_team", true))
                    {
                        switch (__instance.CurClass)
                        {
                        case RoleType.Scientist when(component2.CurClass == RoleType.ChaosInsurgency || component2.CurClass == RoleType.ClassD):
                        case RoleType.ClassD when(component2.CurRole.team == Team.MTF || component2.CurClass == RoleType.Scientist):
                            flag = true;

                            break;
                        }
                    }
                }

                //TeamCheck
                var singleton = Respawning.RespawnTickets.Singleton;
                var team      = __instance.CurRole.team;
                switch (team)
                {
                case Team.CDP when flag:
                    spawnRole = RoleType.NtfCadet;
                    break;

                case Team.CDP:
                case Team.RSC when flag:
                    spawnRole = RoleType.ChaosInsurgency;
                    break;

                case Team.RSC:
                    spawnRole = RoleType.NtfScientist;
                    break;
                }

                //PlayerEscapeEvent
                Events.InvokePlayerEscapeEvent(player, ref allow, ref spawnRole, cufferRole, isCuffed);

                if (!allow)
                {
                    return(false);
                }

                if (spawnRole == RoleType.None || spawnRole == __instance.NetworkCurClass)
                {
                    return(false);
                }
                __instance.SetPlayersClass(spawnRole, __instance.gameObject, false, true);
                switch (__instance.CurRole.team)
                {
                case Team.MTF:
                    RoundSummary.escaped_scientists++;
                    singleton.GrantTickets(Respawning.SpawnableTeamType.NineTailedFox, ConfigFile.ServerConfig.GetInt("respawn_tickets_mtf_classd_cuffed_count", 1));
                    break;

                case Team.CHI:
                    RoundSummary.escaped_ds++;
                    singleton.GrantTickets(Respawning.SpawnableTeamType.ChaosInsurgency, ConfigFile.ServerConfig.GetInt("respawn_tickets_ci_classd_count", 1));
                    break;
                }

                return(false);
            }
            catch (Exception e)
            {
                Log.Error($"PlayerEscapeEvent Error: {e}");
                return(true);
            }
        }