示例#1
0
        public LimitsGUI()
        {
            ErrorGUIStyle.normal.textColor = new Color(255f, 0f, 0f);


            CaptainStyle.alignment        = TextAnchor.MiddleCenter;
            CaptainStyle.normal.textColor = PLPlayer.GetClassColorFromID(0);
            CaptainStyle.fixedWidth       = 100f;
            CaptainStyle.clipping         = TextClipping.Clip;

            PilotStyle.alignment        = TextAnchor.MiddleCenter;
            PilotStyle.normal.textColor = PLPlayer.GetClassColorFromID(1);
            PilotStyle.fixedWidth       = 100f;
            PilotStyle.clipping         = TextClipping.Clip;

            ScienceStyle.alignment        = TextAnchor.MiddleCenter;
            ScienceStyle.normal.textColor = PLPlayer.GetClassColorFromID(2);
            ScienceStyle.fixedWidth       = 100f;
            ScienceStyle.clipping         = TextClipping.Clip;

            WeaponsStyle.alignment        = TextAnchor.MiddleCenter;
            WeaponsStyle.normal.textColor = PLPlayer.GetClassColorFromID(3);
            WeaponsStyle.fixedWidth       = 100f;
            WeaponsStyle.clipping         = TextClipping.Clip;

            EngineerStyle.alignment        = TextAnchor.MiddleCenter;
            EngineerStyle.normal.textColor = PLPlayer.GetClassColorFromID(4);
            EngineerStyle.fixedWidth       = 100f;
            EngineerStyle.clipping         = TextClipping.Clip;
        }
示例#2
0
        IEnumerator TeleportWithWait(PLPlayer player, PlayerPos info, int inID)
        {
            yield return(new WaitForEndOfFrame());

            while (PulsarModLoader.Utilities.HelperMethods.GetPlayerFromPlayerID(inID).GetPawn() == null || PulsarModLoader.Utilities.HelperMethods.GetPlayerFromPlayerID(inID).GetPawn().transform?.position == null)
            {
                yield return(new WaitForEndOfFrame());
            }
            int pause = 0;

            while (pause < 5)
            {
                yield return(new WaitForEndOfFrame());

                pause++;
            }
            player.photonView.RPC("NetworkTeleportToSubHub", PhotonTargets.All, new object[]
            {
                info.hubid,
                info.ttiid
            });
            player.photonView.RPC("RecallPawnToPos", PhotonTargets.All, new object[]
            {
                info.pos
            });
            Plugin.pos.Remove(player.GetClassID());
#if DEBUG
            PulsarPluginLoader.Utilities.Logger.Info($"Apply for {inID}");
#endif
        }
示例#3
0
 public static void Notification(string message, PLPlayer recipient = null, int subjectPlayerId = 0, int durationMs = 6000, bool addToShipLog = false)
 {
     if (recipient == null && PLNetworkManager.Instance != null)
     {
         recipient = PLNetworkManager.Instance.LocalPlayer;
     }
     Notification(message, recipient.GetPhotonPlayer(), subjectPlayerId, durationMs, addToShipLog);
 }
 public static void ChatMessage(PLPlayer recipient, string message, int sendingPlayerId = -1)
 {
     if (sendingPlayerId == -1)
     {
         sendingPlayerId = PLNetworkManager.Instance.LocalPlayerID;
     }
     ChatMessage(recipient.GetPhotonPlayer(), message, sendingPlayerId);
 }
        public override void HandleRPC(object[] arguments, PhotonMessageInfo sender)
        {
            PLPlayer player  = PLServer.GetPlayerForPhotonPlayer(sender.sender);
            string   name    = player.GetPlayerName();
            string   message = (string)arguments[0];

            Messaging.Echo(PLNetworkManager.Instance.LocalPlayer.GetPhotonPlayer(), $"[&%~[C{player.GetClassID()} {name} ]&%~] <color=#a0a0a0>whispers to you: {message}</color>");
        }
示例#6
0
        public static void Echo(PLPlayer recipient, string message)
        {
            if (recipient == null || message == null)
            {
                AntiNullReferenceException($"{(recipient == null ? "recipent: null" : "recipent: PLPlayer")}, {(message == null ? "message: null" : $"message: \"{message}\"")}");
                return;
            }

            Echo(recipient.GetPhotonPlayer(), message);
        }
示例#7
0
        public static void Centerprint(string message, PLPlayer recipient, string tag = "msg", Color color = new Color(), EWarningType type = EWarningType.E_NORMAL)
        {
            if (recipient == null || message == null || tag == null)
            {
                AntiNullReferenceException($"{(recipient == null ? "recipent: null" : "recipent: PLPlayer")}, {(message == null ? "message: null" : $"message: \"{message}\"")}, ..., {(tag == null ? "tag: null" : $"tag: \"{tag}\"")}");
                return;
            }

            Centerprint(message, recipient.GetPhotonPlayer(), tag, color, type);
        }
示例#8
0
        static bool Prefix(ref int classID)
        {
            PLPlayer player = PLServer.Instance.GetCachedFriendlyPlayerOfClass(classID);

            if (Global.ProtectionEnabled && player != null && !player.IsBot)
            {
                Debug.Log("[DragonWarning] Someone is trying to remove remove Player of class " + classID);
                PLServer.Instance.AddNotification("[DragonWarning] Someone is trying to remove Player of class " + classID, PLNetworkManager.Instance.LocalPlayerID, PLServer.Instance.GetEstimatedServerMs() + 6000, true);
                return(false);
            }
            return(true);
        }
示例#9
0
        static bool Prefix(ref int inPlayerID)
        {
            PLPlayer player = PLServer.Instance.GetPlayerFromPlayerID(inPlayerID);

            if (Global.ProtectionEnabled && player != null && !player.IsBot)
            {
                Debug.Log("[DragonWarning] Someone is trying to delete PlayerID " + inPlayerID);
                PLServer.Instance.AddNotification("[DragonWarning] Someone is trying to delete PlayerID " + inPlayerID, PLNetworkManager.Instance.LocalPlayerID, PLServer.Instance.GetEstimatedServerMs() + 6000, true);
                return(false);
            }
            return(true);
        }
示例#10
0
 private static void Postfix(ref List <PLPlayer> ___LocalCachedPlayerByClass)
 {
     for (int i = 0; i < 5; i++)
     {
         int      playerid = Global.roleleads[i];
         PLPlayer RoleLead = PLServer.Instance.GetPlayerFromPlayerID(playerid);
         if (RoleLead != null && RoleLead.GetClassID() == i)
         {
             ___LocalCachedPlayerByClass[i] = RoleLead;
         }
     }
 }
示例#11
0
 public static void ChatMessage(PLPlayer recipient, string message, int sendingPlayerId = -1)
 {
     if (recipient == null || message == null)
     {
         AntiNullReferenceException($"{(recipient == null ? "recipent: null" : "recipent: PLPlayer")}, {(message == null ? "message: null" : $"message: \"{message}\"")}, sendingPlayerId: {sendingPlayerId}");
         return;
     }
     if (sendingPlayerId == -1)
     {
         sendingPlayerId = PLNetworkManager.Instance.LocalPlayerID;
     }
     ChatMessage(recipient.GetPhotonPlayer(), message, sendingPlayerId);
 }
示例#12
0
 static void Postfix(PLServer __instance, int inID)
 {
     if (PhotonNetwork.isMasterClient && ChatCommandRouter.Instance.getPublicCommandAliases().Length > 1)
     {
         PLPlayer player = __instance.GetPlayerFromPlayerID(inID);
         if (player != null && player.GetPhotonPlayer() != null)
         {
             Messaging.Echo(player, $"[&%~[C0 Welcome ]&%~] {player.GetPlayerName()}!");
             Messaging.Echo(player, "This game has some commands available.");
             Messaging.Echo(player, "Type [&%~[C2 !help ]&%~] for more information.");
         }
     }
 }
        /// <summary>
        /// Attempts GetPlayerFromPlayerID, GetPlayerFromClassName, then GetPlayerFromPlayerName. Returns the first player found, or null if no player matches.
        /// </summary>
        /// <param name="argument"></param>
        /// <returns></returns>
        public static PLPlayer GetPlayer(string argument)
        {
            PLPlayer player = GetPlayerFromPlayerID(argument);

            if (player != null)
            {
                return(player);
            }
            if (argument.Length == 1)
            {
                player = GetPlayerFromClassName(argument);
            }
            if (player != null)
            {
                return(player);
            }
            player = GetPlayerFromPlayerName(argument);
            return(player);
        }
示例#14
0
 public override void Execute(string arguments, int SenderID)
 {
     if (PhotonNetwork.isMasterClient)
     {
         if (arguments.ToLower() == "scomo")
         {
             Messaging.Echo(PhotonTargets.All, "<color=#ffff00>Scomo <Marketing></color> : I don't hold a teleporter mate.");
         }
         else
         {
             PLPlayer player = HelperMethods.GetPlayerFromPlayerID(SenderID);
             int      hubID  = PLEncounterManager.Instance.PlayerShip.MyTLI.SubHubID;
             player.photonView.RPC("NetworkTeleportToSubHub", PhotonTargets.All, new object[]
             {
                 hubID,
                 0
             });
         }
     }
 }
示例#15
0
 public PlayerRemovedEvent(PLPlayer player) : base(player)
 {
 }
示例#16
0
        private static bool Prefix(PLServer __instance, ref int playerID, ref int classID, PhotonMessageInfo pmi)
        {
            //runs vanilla if client isn't hosting
            if (!PhotonNetwork.isMasterClient)
            {
                return(true);
            }

            //fails if client not trying to be class -1 through 4
            if (classID < -1 || classID > 4)
            {
                return(false);
            }

            //Protect Players from bad actors changing other player's classes.
            PLPlayer playerForPhotonPlayer = PLServer.GetPlayerForPhotonPlayer(pmi.sender);

            if (playerForPhotonPlayer != null && playerForPhotonPlayer.GetPlayerID() != playerID)
            {
                return(false);
            }

            PLPlayer PlayerFromID = __instance.GetPlayerFromPlayerID(playerID);

            if (PlayerFromID != null)
            {
                //stop if player is already in the specified class
                if (PlayerFromID.GetClassID() == classID)
                {
                    return(false);
                }
                Global.Generateplayercount();
                if (CanJoinClass(classID))
                {
                    //sends the classchangemessage, sets the player to the class id
                    PlayerFromID.SetClassID(classID);
                    AccessTools.Method(__instance.GetType(), "ClassChangeMessage", null, null).Invoke(__instance, new object[] { PlayerFromID.GetPlayerName(false), classID });
                }
                else //Couldn't become role, send available options.
                {
                    string options = "";
                    for (int classid = 0; classid < 5; classid++)
                    {
                        if (CanJoinClass(classid))
                        {
                            options += $"{PLPlayer.GetClassNameFromID(classid)}\n";
                        }
                    }
                    if (string.IsNullOrEmpty(options))
                    {
                        Messaging.Centerprint("There are no slots available. Ask the host to change this or leave.", PlayerFromID, "ROL", PLPlayer.GetClassColorFromID(classID), EWarningType.E_NORMAL);
                        Messaging.Notification($"Player {PlayerFromID.GetPlayerName()} Is trying to join as {PLPlayer.GetClassNameFromID(classID)}. There are no Roles available.");
                    }
                    else
                    {
                        Messaging.Centerprint("That slot is full, choose another one. options on the left", PlayerFromID, "ROL", PLPlayer.GetClassColorFromID(classID), EWarningType.E_NORMAL);
                        Messaging.Notification(options, PlayerFromID, playerID, 10000 + PLServer.Instance.GetEstimatedServerMs());
                        Messaging.Notification($"Player {PlayerFromID.GetPlayerName()} Is trying to join as {PLPlayer.GetClassNameFromID(classID)}");
                    }
                }
            }
            return(false);
        }
示例#17
0
 static bool Prefix(PLSaveGameIO __instance, ref string inFileName, ref ObscuredInt ___CurrentVersionSaveID, ref ObscuredInt ___CurrentVersionGalaxySaveID)
 {
     if (PLNetworkManager.Instance.VersionString == "28.1")
     {
         return(true);
     }
     if (PLServer.Instance != null && PLEncounterManager.Instance.PlayerShip != null)
     {
         string text = inFileName + "_temp";
         if (File.Exists(text))
         {
             text += "0";
         }
         if (File.Exists(text))
         {
             text += "0";
         }
         FileStream   fileStream   = File.Create(text);
         BinaryWriter binaryWriter = new BinaryWriter(fileStream);
         binaryWriter.Write(___CurrentVersionSaveID);
         binaryWriter.Write(___CurrentVersionGalaxySaveID);
         binaryWriter.Write(DateTime.Now.ToBinary());
         binaryWriter.Write(PLServer.Instance.GalaxySeed);
         binaryWriter.Write(PLNetworkManager.Instance.Stats_GameEndTime);
         binaryWriter.Write(PLServer.Instance.CurrentCrewCredits);
         binaryWriter.Write(PLServer.Instance.CurrentCrewLevel);
         binaryWriter.Write(PLServer.Instance.CurrentCrewXP);
         binaryWriter.Write(PLServer.Instance.GetCurrentHubID());
         binaryWriter.Write(PLServer.Instance.IronmanModeIsActive);
         binaryWriter.Write(PLServer.Instance.PlayerCrew_BiscuitsSold);
         binaryWriter.Write(PLServer.Instance.PlayerCrew_WonFBContest);
         binaryWriter.Write(PLServer.Instance.PlayerCrew_BiscuitsSold_WhenContestEnded);
         binaryWriter.Write(PLServer.Instance.BiscuitBombAvailable);
         binaryWriter.Write(PLServer.Instance.CurrentUpgradeMats);
         binaryWriter.Write(PLEncounterManager.Instance.PlayerShip.WeapUpgrade_PawnItemInLockerHash);
         binaryWriter.Write(PLServer.Instance.RepLevels[0]);
         binaryWriter.Write(PLServer.Instance.RepLevels[1]);
         binaryWriter.Write(PLServer.Instance.RepLevels[2]);
         binaryWriter.Write(PLServer.Instance.RepLevels[3]);
         binaryWriter.Write(PLServer.Instance.RepLevels[4]);
         binaryWriter.Write(PLServer.Instance.BiscuitContestIsOver);
         binaryWriter.Write(PLServer.Instance.ActiveBountyHunter_SectorID);
         binaryWriter.Write(PLServer.Instance.ActiveBountyHunter_SecondsSinceWarp);
         binaryWriter.Write(PLServer.Instance.ActiveBountyHunter_TypeID);
         binaryWriter.Write(PLServer.Instance.ActiveBountyHunter_ProcessedChaosLevel);
         binaryWriter.Write(PLServer.Instance.PacifistRun);
         binaryWriter.Write(PLServer.Instance.CreditsSpent_InRun);
         binaryWriter.Write(PLServer.Instance.PerfectBiscuitStreak);
         binaryWriter.Write(PLServer.Instance.BlindJumpCount);
         binaryWriter.Write(PLServer.Instance.CrewPurchaseLimitsEnabled);
         binaryWriter.Write(PLGlobal.Instance.Galaxy.StormPosition.x);
         binaryWriter.Write(PLGlobal.Instance.Galaxy.StormPosition.y);
         binaryWriter.Write(PLGlobal.Instance.Galaxy.StormPosition.z);
         binaryWriter.Write(PLServer.Instance.RacesWonBitfield);
         binaryWriter.Write(PLServer.Instance.RacesLostBitfield);
         binaryWriter.Write(PLServer.Instance.RacesStartedBitfield);
         binaryWriter.Write(PhotonNetwork.room.name);
         binaryWriter.Write(PLEncounterManager.Instance.PlayerShip.ShipNameValue);
         binaryWriter.Write((int)PLEncounterManager.Instance.PlayerShip.ShipTypeID);
         binaryWriter.Write(PLEncounterManager.Instance.PlayerShip.NumberOfFuelCapsules);
         binaryWriter.Write(PLEncounterManager.Instance.PlayerShip.MyStats.HullCurrent);
         binaryWriter.Write(PLEncounterManager.Instance.PlayerShip.FBCrateSupply);
         binaryWriter.Write(PLEncounterManager.Instance.PlayerShip.ReactorCoolantLevelPercent);
         byte[] additionalDataForSaveIO = PLEncounterManager.Instance.PlayerShip.GetAdditionalDataForSaveIO();
         binaryWriter.Write(additionalDataForSaveIO.Length);
         binaryWriter.Write(additionalDataForSaveIO);
         binaryWriter.Write(PLEncounterManager.Instance.PlayerShip.MyStats.AllComponents.Count);
         for (int i = 0; i < PLEncounterManager.Instance.PlayerShip.MyStats.AllComponents.Count; i++)
         {
             PLShipComponent plshipComponent = PLEncounterManager.Instance.PlayerShip.MyStats.AllComponents[i];
             if (plshipComponent != null)
             {
                 binaryWriter.Write(plshipComponent.getHash());
                 binaryWriter.Write(plshipComponent.SortID);
                 binaryWriter.Write(plshipComponent.SubTypeData);
             }
             else
             {
                 binaryWriter.Write(0U);
                 binaryWriter.Write(-1);
                 binaryWriter.Write(0);
             }
         }
         binaryWriter.Write(PLEncounterManager.Instance.PlayerShip.AllPlayerDroppedItems.Count);
         for (int j = 0; j < PLEncounterManager.Instance.PlayerShip.AllPlayerDroppedItems.Count; j++)
         {
             binaryWriter.Write(PLEncounterManager.Instance.PlayerShip.AllPlayerDroppedItems[j].ItemHash);
             binaryWriter.Write(PLEncounterManager.Instance.PlayerShip.AllPlayerDroppedItems[j].Position.x);
             binaryWriter.Write(PLEncounterManager.Instance.PlayerShip.AllPlayerDroppedItems[j].Position.y);
             binaryWriter.Write(PLEncounterManager.Instance.PlayerShip.AllPlayerDroppedItems[j].Position.z);
         }
         for (int k = 0; k < 5; k++)
         {
             PLPlayer            cachedFriendlyPlayerOfClass = PLServer.Instance.GetCachedFriendlyPlayerOfClass(k);
             PLPawnInventoryBase plpawnInventoryBase         = null;
             PLPawnInventoryBase plpawnInventoryBase2        = null;
             if (cachedFriendlyPlayerOfClass != null)
             {
                 plpawnInventoryBase = cachedFriendlyPlayerOfClass.MyInventory;
             }
             PLServerClassInfo plserverClassInfo = PLServer.Instance.ClassInfos[k];
             if (plserverClassInfo != null)
             {
                 plpawnInventoryBase2 = plserverClassInfo.ClassLockerInventory;
             }
             int num = 0;
             if (plpawnInventoryBase != null)
             {
                 foreach (List <PLPawnItem> list in plpawnInventoryBase.GetAllItems(true))
                 {
                     foreach (PLPawnItem plpawnItem in list)
                     {
                         if (plpawnItem != null)
                         {
                             num++;
                         }
                     }
                 }
             }
             if (plpawnInventoryBase2 != null)
             {
                 foreach (List <PLPawnItem> list2 in plpawnInventoryBase2.GetAllItems(false))
                 {
                     foreach (PLPawnItem plpawnItem2 in list2)
                     {
                         if (plpawnItem2 != null)
                         {
                             num++;
                         }
                     }
                 }
             }
             binaryWriter.Write(num);
             if (plpawnInventoryBase != null)
             {
                 foreach (List <PLPawnItem> list3 in plpawnInventoryBase.GetAllItems(true))
                 {
                     foreach (PLPawnItem plpawnItem3 in list3)
                     {
                         if (plpawnItem3 != null)
                         {
                             binaryWriter.Write((int)plpawnItem3.PawnItemType);
                             binaryWriter.Write(plpawnItem3.SubType);
                             binaryWriter.Write(plpawnItem3.Level);
                         }
                     }
                 }
             }
             if (plpawnInventoryBase2 != null)
             {
                 foreach (List <PLPawnItem> list4 in plpawnInventoryBase2.GetAllItems(false))
                 {
                     foreach (PLPawnItem plpawnItem4 in list4)
                     {
                         if (plpawnItem4 != null)
                         {
                             binaryWriter.Write((int)plpawnItem4.PawnItemType);
                             binaryWriter.Write(plpawnItem4.SubType);
                             binaryWriter.Write(plpawnItem4.Level);
                         }
                     }
                 }
             }
         }
         int num2 = 0;
         foreach (PLFactionInfo plfactionInfo in PLGlobal.Instance.Galaxy.AllFactions)
         {
             if (plfactionInfo != null)
             {
                 num2++;
             }
         }
         binaryWriter.Write(num2);
         foreach (PLFactionInfo plfactionInfo2 in PLGlobal.Instance.Galaxy.AllFactions)
         {
             if (plfactionInfo2 != null)
             {
                 binaryWriter.Write(plfactionInfo2.FactionID);
                 binaryWriter.Write(plfactionInfo2.FactionAI_Continuous_GalaxySpreadLimit);
                 binaryWriter.Write(plfactionInfo2.FactionAI_Continuous_GalaxySpreadFactor);
             }
         }
         binaryWriter.Write(PLServer.Instance.ChaosLevel);
         binaryWriter.Write(PLServer.Instance.ActiveChaosEvents);
         binaryWriter.Write(PLServer.Instance.TalentLockedStatus);
         binaryWriter.Write((int)PLServer.Instance.TalentToResearch);
         binaryWriter.Write(PLServer.Instance.JumpsNeededToResearchTalent);
         binaryWriter.Write(PLServer.Instance.ResearchMaterials[0]);
         binaryWriter.Write(PLServer.Instance.ResearchMaterials[1]);
         binaryWriter.Write(PLServer.Instance.ResearchMaterials[2]);
         binaryWriter.Write(PLServer.Instance.ResearchMaterials[3]);
         binaryWriter.Write(PLServer.Instance.ResearchMaterials[4]);
         binaryWriter.Write(PLServer.Instance.ResearchMaterials[5]);
         int count = PLServer.Instance.ResearchLockerInventory.AllItems.Count;
         binaryWriter.Write(count);
         foreach (PLPawnItem plpawnItem5 in PLServer.Instance.ResearchLockerInventory.AllItems)
         {
             if (plpawnItem5 != null)
             {
                 binaryWriter.Write((int)plpawnItem5.PawnItemType);
                 binaryWriter.Write(plpawnItem5.SubType);
                 binaryWriter.Write(plpawnItem5.Level);
             }
         }
         for (int l = 0; l < 5; l++)
         {
             PLPlayer cachedFriendlyPlayerOfClass2 = PLServer.Instance.GetCachedFriendlyPlayerOfClass(l);
             if (cachedFriendlyPlayerOfClass2 != null)
             {
                 binaryWriter.Write(true);
                 binaryWriter.Write(cachedFriendlyPlayerOfClass2.TalentPointsAvailable);
                 PLServerClassInfo plserverClassInfo2 = PLServer.Instance.ClassInfos[l];
                 if (plserverClassInfo2 != null)
                 {
                     binaryWriter.Write(plserverClassInfo2.SurvivalBonusCounter);
                 }
                 else
                 {
                     binaryWriter.Write(0);
                 }
                 int num3 = cachedFriendlyPlayerOfClass2.Talents.Length;
                 binaryWriter.Write(num3);
                 for (int m = 0; m < num3; m++)
                 {
                     binaryWriter.Write(cachedFriendlyPlayerOfClass2.Talents[m]);
                 }
                 int count2 = cachedFriendlyPlayerOfClass2.MyInventory.AllItems.Count;
                 binaryWriter.Write(count2);
                 for (int n = 0; n < count2; n++)
                 {
                     binaryWriter.Write((int)cachedFriendlyPlayerOfClass2.MyInventory.AllItems[n].PawnItemType);
                     binaryWriter.Write(cachedFriendlyPlayerOfClass2.MyInventory.AllItems[n].SubType);
                     binaryWriter.Write(cachedFriendlyPlayerOfClass2.MyInventory.AllItems[n].Level);
                     binaryWriter.Write(cachedFriendlyPlayerOfClass2.MyInventory.AllItems[n].EquipID);
                 }
             }
             else
             {
                 binaryWriter.Write(false);
             }
         }
         binaryWriter.Write(PLServer.Instance.CrewFactionID);
         binaryWriter.Write(PLEncounterManager.Instance.PlayerShip.IsFlagged);
         binaryWriter.Write(PLServer.Instance.IsCrewRepRevealed);
         binaryWriter.Write(PLServer.Instance.LongRangeCommsDisabled);
         int count3 = PLServer.Instance.AlreadyAttemptedToStartPickupMissionID.Count;
         binaryWriter.Write(count3);
         foreach (ObscuredInt value in PLServer.Instance.AlreadyAttemptedToStartPickupMissionID)
         {
             int value2 = value;
             binaryWriter.Write(value2);
         }
         binaryWriter.Write(PLNetworkManager.Instance.SelectedShipTypeID);
         binaryWriter.Write(PLServer.ServerSpaceTargetIDCounter);
         int num4 = 0;
         foreach (PLPersistantDialogueActor plpersistantDialogueActor in PLServer.Instance.AllPDAs)
         {
             if (plpersistantDialogueActor != null)
             {
                 num4++;
             }
         }
         binaryWriter.Write(num4);
         foreach (PLPersistantDialogueActor plpersistantDialogueActor2 in PLServer.Instance.AllPDAs)
         {
             if (plpersistantDialogueActor2 != null)
             {
                 PLPersistantDialogueActorNPC  plpersistantDialogueActorNPC  = plpersistantDialogueActor2 as PLPersistantDialogueActorNPC;
                 PLPersistantDialogueActorShip plpersistantDialogueActorShip = plpersistantDialogueActor2 as PLPersistantDialogueActorShip;
                 if (plpersistantDialogueActorNPC != null)
                 {
                     binaryWriter.Write(0);
                     binaryWriter.Write(plpersistantDialogueActorNPC.Hostile);
                     binaryWriter.Write(plpersistantDialogueActorNPC.DialogueActorID);
                     try
                     {
                         binaryWriter.Write(plpersistantDialogueActorNPC.NPCName);
                     }
                     catch (ArgumentNullException ex)
                     {
                         Debug.DebugBreak();
                     }
                 }
                 else if (plpersistantDialogueActorShip != null)
                 {
                     binaryWriter.Write(1);
                     binaryWriter.Write(plpersistantDialogueActorShip.Hostile);
                     binaryWriter.Write(plpersistantDialogueActorShip.DialogueActorID);
                     binaryWriter.Write(plpersistantDialogueActorShip.ShipName);
                     binaryWriter.Write(plpersistantDialogueActorShip.SpecialActionCompleted);
                     binaryWriter.Write(plpersistantDialogueActorShip.LinesToShowPercent.Count);
                     foreach (ObscuredInt value3 in plpersistantDialogueActorShip.LinesToShowPercent)
                     {
                         int value4 = value3;
                         binaryWriter.Write(value4);
                     }
                 }
                 else
                 {
                     binaryWriter.Write(2);
                 }
                 int count4 = plpersistantDialogueActor2.LinesAleradyDisplayed.Count;
                 binaryWriter.Write(count4);
                 foreach (ObscuredInt value5 in plpersistantDialogueActor2.LinesAleradyDisplayed)
                 {
                     int value6 = value5;
                     binaryWriter.Write(value6);
                 }
             }
         }
         int num5 = 0;
         foreach (PLPersistantShipInfo plpersistantShipInfo in PLServer.Instance.AllPSIs)
         {
             if (plpersistantShipInfo != null)
             {
                 num5++;
             }
         }
         binaryWriter.Write(num5);
         foreach (PLPersistantShipInfo plpersistantShipInfo2 in PLServer.Instance.AllPSIs)
         {
             if (plpersistantShipInfo2 != null)
             {
                 binaryWriter.Write((int)plpersistantShipInfo2.Type);
                 binaryWriter.Write(plpersistantShipInfo2.FactionID);
                 binaryWriter.Write(plpersistantShipInfo2.IsShipDestroyed);
                 if (plpersistantShipInfo2.MyCurrentSector != null)
                 {
                     binaryWriter.Write(plpersistantShipInfo2.MyCurrentSector.ID);
                 }
                 else
                 {
                     binaryWriter.Write(-1);
                 }
                 binaryWriter.Write(plpersistantShipInfo2.ShipName);
                 binaryWriter.Write(plpersistantShipInfo2.CompOverrides.Count);
                 foreach (ComponentOverrideData componentOverrideData in plpersistantShipInfo2.CompOverrides)
                 {
                     binaryWriter.Write(componentOverrideData.CompLevel);
                     binaryWriter.Write(componentOverrideData.CompTypeToReplace);
                     binaryWriter.Write(componentOverrideData.CompSubType);
                     binaryWriter.Write(componentOverrideData.CompType);
                     binaryWriter.Write(componentOverrideData.ReplaceExistingComp);
                     binaryWriter.Write(componentOverrideData.CompSubTypeToReplace);
                     binaryWriter.Write(componentOverrideData.SlotNumberToReplace);
                     binaryWriter.Write(componentOverrideData.IsCargo);
                 }
                 binaryWriter.Write(plpersistantShipInfo2.HullPercent);
                 binaryWriter.Write(plpersistantShipInfo2.ShldPercent);
                 binaryWriter.Write(plpersistantShipInfo2.Modifiers);
                 binaryWriter.Write(plpersistantShipInfo2.IsFlagged);
                 binaryWriter.Write(plpersistantShipInfo2.ForcedHostile);
                 binaryWriter.Write(plpersistantShipInfo2.ForcedHostileAll);
                 binaryWriter.Write(plpersistantShipInfo2.ForcedHostileName);
                 binaryWriter.Write(plpersistantShipInfo2.SelectedActorID);
                 if (___CurrentVersionSaveID >= 29)
                 {
                     binaryWriter.Write(plpersistantShipInfo2.BiscuitsSold);
                 }
                 if (___CurrentVersionSaveID >= 34)
                 {
                     PLPersistantShipInfo_FBRival plpersistantShipInfo_FBRival = plpersistantShipInfo2 as PLPersistantShipInfo_FBRival;
                     if (plpersistantShipInfo_FBRival != null)
                     {
                         binaryWriter.Write(plpersistantShipInfo_FBRival.WonFBContest);
                     }
                     else
                     {
                         binaryWriter.Write(false);
                     }
                 }
                 if (___CurrentVersionSaveID >= 36)
                 {
                     binaryWriter.Write(plpersistantShipInfo2.EnsureNoCrew);
                 }
             }
         }
         int num6 = 0;
         foreach (PLMissionBase x in PLServer.Instance.AllMissions)
         {
             if (x != null)
             {
                 num6++;
             }
         }
         binaryWriter.Write(num6);
         foreach (PLMissionBase plmissionBase in PLServer.Instance.AllMissions)
         {
             if (plmissionBase != null)
             {
                 binaryWriter.Write(plmissionBase.MissionTypeID);
                 binaryWriter.Write(plmissionBase.Abandoned);
                 binaryWriter.Write(plmissionBase.Ended);
                 int num7 = 0;
                 foreach (PLMissionObjective plmissionObjective in plmissionBase.Objectives)
                 {
                     if (plmissionObjective != null)
                     {
                         num7++;
                     }
                 }
                 binaryWriter.Write(num7);
                 foreach (PLMissionObjective plmissionObjective2 in plmissionBase.Objectives)
                 {
                     if (plmissionObjective2 != null)
                     {
                         binaryWriter.Write(plmissionObjective2.IsCompleted);
                         binaryWriter.Write(plmissionObjective2.AmountCompleted);
                         binaryWriter.Write(plmissionObjective2.AmountNeeded);
                         binaryWriter.Write(plmissionObjective2.HasShownCompletedMessage);
                     }
                 }
                 binaryWriter.Write(plmissionBase.IsPickupMission);
                 PLPickupMissionBase plpickupMissionBase = plmissionBase as PLPickupMissionBase;
                 if (plpickupMissionBase != null)
                 {
                     binaryWriter.Write(plpickupMissionBase.RanStartRewards);
                 }
                 else
                 {
                     binaryWriter.Write(false);
                 }
             }
         }
         int num8 = 0;
         foreach (PLSectorInfo plsectorInfo in PLGlobal.Instance.Galaxy.AllSectorInfos.Values)
         {
             if (plsectorInfo != null)
             {
                 num8++;
             }
         }
         binaryWriter.Write(num8);
         foreach (PLSectorInfo plsectorInfo2 in PLGlobal.Instance.Galaxy.AllSectorInfos.Values)
         {
             if (plsectorInfo2 != null)
             {
                 binaryWriter.Write(plsectorInfo2.ID);
                 binaryWriter.Write((int)plsectorInfo2.VisualIndication);
                 binaryWriter.Write(plsectorInfo2.FactionStrength);
                 binaryWriter.Write(plsectorInfo2.MySPI.Faction);
                 binaryWriter.Write(plsectorInfo2.Position.x);
                 binaryWriter.Write(plsectorInfo2.Position.y);
                 binaryWriter.Write(plsectorInfo2.Position.z);
                 binaryWriter.Write(plsectorInfo2.Name);
                 binaryWriter.Write(plsectorInfo2.MissionSpecificID);
                 binaryWriter.Write(plsectorInfo2.LockedToFaction);
                 binaryWriter.Write(plsectorInfo2.LastCalculatedSectorStength);
                 binaryWriter.Write(plsectorInfo2.IsPartOfLongRangeWarpNetwork);
                 binaryWriter.Write(plsectorInfo2.Visited);
                 binaryWriter.Write(plsectorInfo2.BiscuitsSoldCounter);
                 PLPersistantEncounterInstance persistantEncounterInstanceAtID = PLEncounterManager.Instance.GetPersistantEncounterInstanceAtID(plsectorInfo2.ID);
                 if (persistantEncounterInstanceAtID != null)
                 {
                     binaryWriter.Write(true);
                     __instance.WriteDictionaryIntTPDE(persistantEncounterInstanceAtID.MyPersistantData.GetTraderInfoDictionary(), binaryWriter);
                     __instance.WriteDictionaryIntSENE(persistantEncounterInstanceAtID.MyPersistantData.SpecialNetObjectPersistantData, binaryWriter);
                     __instance.WriteDictionaryIntBool(persistantEncounterInstanceAtID.MyPersistantData.PickupObjectPersistantData, binaryWriter);
                     __instance.WriteDictionaryIntBool(persistantEncounterInstanceAtID.MyPersistantData.PickupComponentPersistantData, binaryWriter);
                     __instance.WriteDictionaryIntBool(persistantEncounterInstanceAtID.MyPersistantData.PickupRandomComponentPersistantData, binaryWriter);
                     __instance.WriteDictionaryIntBool(persistantEncounterInstanceAtID.MyPersistantData.ProbePickupPersistantData, binaryWriter);
                     __instance.WriteDictionaryStringString(persistantEncounterInstanceAtID.MyPersistantData.MiscPersistantData, binaryWriter);
                     __instance.WriteDictionaryStringDPO(persistantEncounterInstanceAtID.MyPersistantData.DPOPersistantData, binaryWriter);
                     __instance.WriteDictionaryStringDSO(persistantEncounterInstanceAtID.MyPersistantData.DSOPersistantData, binaryWriter);
                     binaryWriter.Write(persistantEncounterInstanceAtID.AllPlayerDroppedItems.Count);
                     for (int num9 = 0; num9 < persistantEncounterInstanceAtID.AllPlayerDroppedItems.Count; num9++)
                     {
                         binaryWriter.Write(persistantEncounterInstanceAtID.AllPlayerDroppedItems[num9].ItemHash);
                         binaryWriter.Write(persistantEncounterInstanceAtID.AllPlayerDroppedItems[num9].Position.x);
                         binaryWriter.Write(persistantEncounterInstanceAtID.AllPlayerDroppedItems[num9].Position.y);
                         binaryWriter.Write(persistantEncounterInstanceAtID.AllPlayerDroppedItems[num9].Position.z);
                         binaryWriter.Write(persistantEncounterInstanceAtID.AllPlayerDroppedItems[num9].SubHubID);
                         binaryWriter.Write(persistantEncounterInstanceAtID.AllPlayerDroppedItems[num9].InteriorID);
                     }
                 }
                 else
                 {
                     binaryWriter.Write(false);
                     binaryWriter.Write(0);
                     binaryWriter.Write(0);
                     binaryWriter.Write(0);
                     binaryWriter.Write(0);
                     binaryWriter.Write(0);
                     binaryWriter.Write(0);
                     binaryWriter.Write(0);
                     binaryWriter.Write(0);
                     binaryWriter.Write(0);
                     binaryWriter.Write(0);
                 }
             }
         }
         AIData loadedAIData = PLGlobal.Instance.LoadedAIData;
         PLAIIO.WriteToBinary(loadedAIData, binaryWriter);
         binaryWriter.Close();
         fileStream.Close();
         if (File.Exists(inFileName))
         {
             File.Delete(inFileName);
         }
         File.Move(text, inFileName);
         string relativeSaveFileName = PLNetworkManager.Instance.FileNameToRelative(inFileName);
         string item = "Game has been saved to file: " + relativeSaveFileName;
         PLNetworkManager.Instance.ConsoleText.Insert(0, item);
         bool flag = false;
         if (relativeSaveFileName.StartsWith(__instance.LocalSaveDir))
         {
             flag = true;
         }
         if (!PLServer.Instance.IronmanModeIsActive && !flag)
         {
             PLNetworkManager.Instance.SteamCloud_WriteFileName(relativeSaveFileName, delegate(RemoteStorageFileWriteAsyncComplete_t pCallback, bool bIOFailure)
             {
                 __instance.OnRemoteFileWriteAsyncComplete(pCallback, bIOFailure, relativeSaveFileName);
             });
         }
     }
     return(false);
 }
示例#18
0
        public override void Execute(string arguments)
        {
            string[] args = new string[2];
            args = arguments.Split(' ');
            int[]  CommandArg        = new int[2];
            bool[] ArgConvertSuccess = new bool[2];
            string LowerCaseArg      = args[0].ToLower();

            if (PhotonNetwork.isMasterClient)
            {
                if (args.Length >= 1 && !string.IsNullOrEmpty(LowerCaseArg))
                {
                    if (args.Length >= 2)
                    {
                        ArgConvertSuccess[0] = int.TryParse(args[1], out CommandArg[0]);
                        if (args.Length >= 3)
                        {
                            ArgConvertSuccess[1] = int.TryParse(args[2], out CommandArg[1]);
                        }
                    }
                    PLPlayer player = null;
                    switch (LowerCaseArg)
                    {
                    default:
                        Messaging.Notification("Not a valid subcommand. Subcommands: SetPlayerLimit, SetSlotLimit, kit, SetRoleLead ; The short versions of the commands are their capital letters, ie: SetPlayerLimit = spl");
                        break;

                    case "spl":
                    case "setplayerlimit":
                        if (ArgConvertSuccess[0])
                        {
                            if (CommandArg[0] > byte.MaxValue)
                            {
                                Messaging.Notification("Cannot input a value higher than 255");
                                break;
                            }
                            Global.MaxPlayers = (byte)CommandArg[0];
                            PLXMLOptionsIO.Instance.CurrentOptions.SetStringValue("MaxPlayerLimit", $"{Global.MaxPlayers}");
                            PhotonNetwork.room.MaxPlayers = CommandArg[0];
                            Messaging.Notification($"set room player limit to {CommandArg[0]}");
                        }
                        else
                        {
                            Messaging.Notification("Use a number. example: /setplayerlimit 2");
                        }
                        break;

                    case "ssl":
                    case "setslotlimit":
                        if (ArgConvertSuccess[1])
                        {
                            int classid = CommandArg[0];
                            if (!ArgConvertSuccess[0])
                            {
                                classid = HelperMethods.GetClassIDFromClassName(args[1], out ArgConvertSuccess[0]);
                            }
                            if (ArgConvertSuccess[0])
                            {
                                Global.rolelimits[classid] = CommandArg[1];

                                //Protect against rolelimits.sum being greater than 255
                                int num = Global.rolelimits.Sum();
                                if (num > 255)
                                {
                                    Global.MaxPlayers = 255;
                                }
                                else
                                {
                                    Global.MaxPlayers = (byte)num;
                                }

                                PhotonNetwork.room.MaxPlayers = Global.MaxPlayers;
                                Messaging.Notification($"{PLPlayer.GetClassNameFromID(classid)} player limit set to {CommandArg[1]}. Player limit is now {Global.MaxPlayers}");
                                SetSavedPlayerLimits();
                            }
                        }
                        else
                        {
                            Global.Generateplayercount();
                            Messaging.Notification($"current count : Capacity: \nCap {Global.playercount[1]} : {Global.rolelimits[0]} Pil {Global.playercount[2]} : {Global.rolelimits[1]} \nSci {Global.playercount[3]} : {Global.rolelimits[2]} Wep {Global.playercount[4]} : {Global.rolelimits[3]} Eng {Global.playercount[5]} : {Global.rolelimits[4]}");
                        }
                        break;

                    case "kit":
                    {
                        player = PLServer.Instance.GetPlayerFromPlayerID(CommandArg[0]);
                        if (!ArgConvertSuccess[0] && args.Length >= 2)
                        {
                            player = PLServer.Instance.GetPlayerFromPlayerID(HelperMethods.GetClassIDFromClassName(args[1], out ArgConvertSuccess[0]));
                        }
                        if (ArgConvertSuccess[0])
                        {
                            int level = 0;
                            if (ArgConvertSuccess[1])
                            {
                                level = CommandArg[1];
                            }

                            if (player != null)
                            {
                                player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 2, 0, level, 1);
                                if (PLServer.Instance.CrewFactionID == 4)
                                {
                                    player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 24, 0, level, 2);
                                }
                                else
                                {
                                    player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 3, 0, level, 2);
                                }
                                player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 4, 0, level, 3);
                            }
                        }

                        else
                        {
                            Messaging.Notification("Cannot find specified player. Try using a player id or class letter. Set item levels with a 2nd number. usage: /mp kit p 0");
                        }
                        break;
                    }

                    case "kit1":
                    {
                        player = PLServer.Instance.GetPlayerFromPlayerID(CommandArg[0]);
                        if (!ArgConvertSuccess[0] && args.Length >= 2)
                        {
                            player = PLServer.Instance.GetPlayerFromPlayerID(HelperMethods.GetClassIDFromClassName(args[1], out ArgConvertSuccess[0]));
                        }
                        if (ArgConvertSuccess[0])
                        {
                            int level = 0;
                            if (ArgConvertSuccess[1])
                            {
                                level = CommandArg[1];
                            }

                            if (player != null)
                            {
                                player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 10, 0, level, 1);
                                player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 12, 0, level, 2);
                                player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 16, 0, level, 3);
                                if (PLServer.Instance.CrewFactionID == 4)
                                {
                                    player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 24, 0, level, 4);
                                }
                                else
                                {
                                    player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 3, 0, level, 4);
                                }
                                player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 4, 0, level, 5);
                            }
                        }
                        else
                        {
                            Messaging.Notification("Cannot find specified player. Try using a player id or class letter. Set item levels with a 2nd number. usage: /mp kit p 0");
                        }
                        break;
                    }

                    case "kit2":
                        player = PLServer.Instance.GetPlayerFromPlayerID(CommandArg[0]);
                        if (!ArgConvertSuccess[0] && args.Length >= 2)
                        {
                            player = PLServer.Instance.GetPlayerFromPlayerID(HelperMethods.GetClassIDFromClassName(args[1], out ArgConvertSuccess[0]));
                        }
                        if (ArgConvertSuccess[0])
                        {
                            int level = 0;
                            if (ArgConvertSuccess[1])
                            {
                                level = CommandArg[1];
                            }

                            if (player != null)
                            {
                                player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 9, 0, level, 1);
                                player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 7, 0, level, 2);
                                player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 26, 0, level, 3);
                                if (PLServer.Instance.CrewFactionID == 4)
                                {
                                    player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 24, 0, level, 4);
                                }
                                else
                                {
                                    player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 3, 0, level, 4);
                                }
                                player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 4, 0, level, 5);
                            }
                        }
                        else
                        {
                            Messaging.Notification("Cannot find specified player. Try using a player id or class letter. Set item levels with a 2nd number. usage: /mp kit p 0");
                        }
                        break;

                    case "kit3":
                        player = PLServer.Instance.GetPlayerFromPlayerID(CommandArg[0]);
                        if (!ArgConvertSuccess[0] && args.Length >= 2)
                        {
                            player = PLServer.Instance.GetPlayerFromPlayerID(HelperMethods.GetClassIDFromClassName(args[1], out ArgConvertSuccess[0]));
                        }
                        if (ArgConvertSuccess[0])
                        {
                            int level = 0;
                            if (ArgConvertSuccess[1])
                            {
                                level = CommandArg[1];
                            }

                            if (player != null)
                            {
                                player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 2, 0, level, 1);
                                player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 19, 0, level, 2);
                                player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 33, 0, level, 3);
                                if (PLServer.Instance.CrewFactionID == 4)
                                {
                                    player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 24, 0, level, 4);
                                }
                                else
                                {
                                    player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 3, 0, level, 4);
                                }
                                player.MyInventory.UpdateItem(PLServer.Instance.PawnInvItemIDCounter++, 4, 0, level, 5);
                            }
                        }
                        else
                        {
                            Messaging.Notification("Cannot find specified player. Try using a player id or class letter. Set item levels with a 2nd number. usage: /mp kit p 0");
                        }
                        break;

                    case "setrolelead":
                    case "srl":
                        if (ArgConvertSuccess[1])
                        {
                            int classid = CommandArg[0];
                            if (!ArgConvertSuccess[0])
                            {
                                classid = HelperMethods.GetClassIDFromClassName(args[1], out ArgConvertSuccess[0]);
                            }
                            if (ArgConvertSuccess[0])
                            {
                                if (classid > -1 && classid < 5)
                                {
                                    Global.roleleads[classid] = CommandArg[1];
                                    foreach (PhotonPlayer photonPlayer in ModMessageHelper.Instance.PlayersWithMods.Keys)
                                    {
                                        if (ModMessageHelper.Instance.GetPlayerMods(photonPlayer).Contains(ModMessageHelper.Instance.GetModName("Max_Players")))
                                        {
                                            ModMessage.SendRPC("Dragon.Max_Players", "Max_Players.SendRoleLeads", photonPlayer, new object[] { Global.roleleads });
                                        }
                                    }
                                    Messaging.Notification($"Player of ID {CommandArg[1]} is now the role lead of {PLPlayer.GetClassNameFromID(classid)}");
                                }
                                else     //classid is not in bounds
                                {
                                    Messaging.Notification("Received a number not equal to a number between 0-4");
                                }
                            }
                            else     //Second arg conversion was successfull, first was not.
                            {
                                Messaging.Notification("Could not find classID, set it to the first letter of the player's class or their class ID (class names in displayed order 0-4)");
                            }
                        }
                        else     //Second arg conversion was unsuccessfull
                        {
                            Messaging.Notification("Did not detect a second argument! Try using a number");
                        }
                        break;
                    }
                }
                else
                {
                    Messaging.Notification("Use a Subcommand. Subcommands: SetPlayerLimit, SetSlotLimit, kit, SetRoleLead ; The short versions of the commands are their capital letters, ie: SetPlayerLimit = spl");
                }
            }
            else
            {
                Messaging.Notification("Must be host to perform this action.");
            }
        }
示例#19
0
 public static void Echo(PLPlayer recipient, string message)
 {
     Echo(recipient.GetPhotonPlayer(), message);
 }
示例#20
0
        public override void Execute(string arguments, int SenderID)
        {
            if (PLNetworkManager.Instance.LocalPlayer.GetPhotonPlayer().IsMasterClient)
            {
                IOrderedEnumerable <Tuple <PublicCommand, PulsarPlugin> > publicCommands = ChatCommandRouter.Instance.GetPublicCommands();

                if (publicCommands.Count() <= 1)
                {
                    return;
                }

                PLPlayer sender = PLServer.Instance.GetPlayerFromPlayerID(SenderID);
                int      page   = 1;
                if (!string.IsNullOrWhiteSpace(arguments))
                {
                    if (!int.TryParse(arguments, out page))
                    {
                        if (arguments[0] == '!')
                        {
                            arguments = arguments.Substring(1);
                        }
                        Tuple <PublicCommand, PulsarPlugin> t = ChatCommandRouter.Instance.GetPublicCommand(arguments);
                        if (t != null)
                        {
                            PublicCommand cmd  = t.Item1;
                            string        name = t.Item2 != null ? t.Item2.Name : "Pulsar Plugin Loader";

                            Messaging.Echo(sender, $"[&%~[C3 !{cmd.CommandAliases()[0]} ]&%~] - {cmd.Description()} <color=#ff6600ff>[{name}]</color>");
                            Messaging.Echo(sender, $"Aliases: !{string.Join($", !", cmd.CommandAliases())}");
                            Messaging.Echo(sender, $"Usage: {cmd.UsageExamples()[0]}");
                            for (int i = 1; i < cmd.UsageExamples().Length; i++)
                            {
                                Messaging.Echo(sender, $"       {cmd.UsageExamples()[i]}");
                            }
                        }
                        else
                        {
                            Messaging.Echo(sender, $"Command !{arguments} not found");
                        }
                        return;
                    }
                }

                int commandsPerPage = 13 /*(PLXMLOptionsIO.Instance.CurrentOptions.GetStringValueAsInt("ChatNumLines") * 5 + 10) - 2*/; //Minimum value
                int pages           = Mathf.CeilToInt(publicCommands.Count() / (float)commandsPerPage);

                page--; //Pages start from 1
                if (page < 0)
                {
                    page = 0;
                }

                string header = pages == 1 && page == 0 ? $"[&%~[C3 Available Commands: ]&%~]" : $"[&%~[C3 Available Commands: ]&%~] Page {page + 1} : {pages}";
                Messaging.Echo(sender, header);
                for (int i = 0; i < commandsPerPage; i++)
                {
                    int index = i + page * commandsPerPage;
                    if (i + page * commandsPerPage >= publicCommands.Count())
                    {
                        break;
                    }
                    PublicCommand command = publicCommands.ElementAt(index).Item1;
                    Messaging.Echo(sender, $"!{command.CommandAliases()[0]} - {command.Description()}");
                }
                Messaging.Echo(sender, "Use [&%~[C2 !help <command> ]&%~] for details about a specific command");
            }
        }
示例#21
0
 public static void Centerprint(string message, PLPlayer recipient, string tag = "msg", Color color = new Color(), EWarningType type = EWarningType.E_NORMAL)
 {
     Centerprint(message, recipient.GetPhotonPlayer(), tag, color, type);
 }
示例#22
0
 public PlayerAddedEvent(PLPlayer player) : base(player)
 {
 }
示例#23
0
 public static void OnPlayerRemoved(PLPlayer player)
 {
     PostEvent(typeof(PlayerAddedEvent), new object[] { new PlayerRemovedEvent(player) });
 }
示例#24
0
        public override void Execute(string arguments)
        {
            string   arg1    = arguments.Split(' ')[0].ToLower();
            string   message = arguments.Substring(arg1.Length);
            PLPlayer player  = null;

            switch (arg1)
            {
            case "c":
            case "captain":
                player = PLServer.Instance.GetCachedFriendlyPlayerOfClass(0);
                break;

            case "p":
            case "pilot":
                player = PLServer.Instance.GetCachedFriendlyPlayerOfClass(1);
                break;

            case "s":
            case "scientist":
                player = PLServer.Instance.GetCachedFriendlyPlayerOfClass(2);
                break;

            case "w":
            case "weapons":
                player = PLServer.Instance.GetCachedFriendlyPlayerOfClass(3);
                break;

            case "e":
            case "engineer":
                player = PLServer.Instance.GetCachedFriendlyPlayerOfClass(4);
                break;

            default:
                foreach (PLPlayer p in PLServer.Instance.AllPlayers)
                {
                    if (p != null && p.GetPlayerName().ToLower().StartsWith(arg1))
                    {
                        player = p;
                        break;
                    }
                }
                break;
            }

            if (player != null)
            {
                if (!player.IsBot)
                {
                    Messaging.Echo(PLNetworkManager.Instance.LocalPlayer.GetPhotonPlayer(), $"<color=#a0a0a0>You whisper to</color> [&%~[C{player.GetClassID()} {player.GetPlayerName()} ]&%~]<color=#a0a0a0>: {message}</color>");
                    PrivateMessage.SendMessage(player.GetPhotonPlayer(), message);
                }
                else
                {
                    Messaging.Notification("Can't send messages to bots");
                }
            }
            else
            {
                Messaging.Notification("Could not find the specified player");
            }
        }
示例#25
0
 public PlayerEvent(PLPlayer player)
 {
     Player = player;
 }