Exemplo n.º 1
0
        private bool ReFundChatCommand(IcPlayer player, string command, IDATokenClass text, TextMessageEnum chatType, object data)
        {
            // Acronym for a building is specified
            if (text.Size > 0)
            {
                string acronym = text[1];
                MappedBuildingDefinition       mappedDefinition = FindMappedDefinition(acronym);
                ICollection <IDefinitionClass> validatedDefinitions;
                if (mappedDefinition == null || (validatedDefinitions = mappedDefinition.ValidatedDefinitions) == null)
                {
                    DA.PagePlayer(player, $"No building found for acronym '{acronym}'.");

                    return(false);
                }

                IScriptableGameObj destroyedBuilding = FindDestroyedBuilding(validatedDefinitions, player.PlayerType);
                if (destroyedBuilding == null)
                {
                    DA.PagePlayer(player, $"No destroyed building found for acronym '{acronym}'.");

                    return(false);
                }

                if (!buildingFunds.TryGetValue(destroyedBuilding.ID, out BuildingFund fund) || fund.Refund(player) <= 0.0f)
                {
                    DA.PagePlayer(player, $"You haven't funded the {DATranslationManager.Translate(destroyedBuilding)}.");

                    return(false);
                }

                DA.TeamColorMessageWithTeamColor(player.PlayerType, $"{DA.MessagePrefix}{(int)(fund.TotalFunds + 0.5f)} out of {(int)(mappedDefinition.CalculateTotalRestoreCost(Engine.GetTeamPlayerCount(player.PlayerType)) + 0.5f)} credit(s) gathered to restore the {DATranslationManager.Translate(destroyedBuilding)}.");

                return(true);
            }
            else //  Assume they want all their money back
            {
                int playerCount = Engine.GetTeamPlayerCount(player.PlayerType);

                float totalRefundAmount = 0.0f;
                foreach (BuildingFund fund in buildingFunds.Values)
                {
                    float currentRefundAmount = fund.Refund(player);
                    if (currentRefundAmount > 0.0f)
                    {
                        totalRefundAmount += currentRefundAmount;

                        DA.TeamColorMessageWithTeamColor(player.PlayerType, $"{DA.MessagePrefix}{(int)(fund.TotalFunds + 0.5f)} out of {(int)(fund.MappedDefinition.CalculateTotalRestoreCost(playerCount) + 0.5f)} credit(s) gathered to restore the {DATranslationManager.Translate(fund.BuildingObj)}.");
                    }
                }

                if (totalRefundAmount <= 0.0f)
                {
                    DA.PagePlayer(player, "You haven't funded anything.");

                    return(false);
                }

                return(true);
            }
        }
Exemplo n.º 2
0
        private bool TotalFundChatCommand(IcPlayer player, string command, IDATokenClass text, TextMessageEnum chatType, object data)
        {
            if (!BRFEnabled)
            {
                DA.PagePlayer(player, "Building funding is not enabled for this map.");

                return(false);
            }

            string acronym = text[1];
            MappedBuildingDefinition       mappedDefinition = FindMappedDefinition(acronym);
            ICollection <IDefinitionClass> validatedDefinitions;

            if (mappedDefinition == null || (validatedDefinitions = mappedDefinition.ValidatedDefinitions) == null)
            {
                DA.PagePlayer(player, $"No building found for acronym '{acronym}'.");

                return(false);
            }

            IScriptableGameObj destroyedBuilding = FindDestroyedBuilding(validatedDefinitions, player.PlayerType);

            if (destroyedBuilding == null)
            {
                DA.PagePlayer(player, $"No destroyed building found for acronym '{acronym}'.");

                return(false);
            }

            if (mappedDefinition.RestoreCountExceeded)
            {
                DA.PagePlayer(player, $"The maximum amount of restores per map for the {DATranslationManager.Translate(destroyedBuilding)} is exceeded.");

                return(false);
            }

            if (!buildingFunds.TryGetValue(destroyedBuilding.ID, out BuildingFund fund))
            {
                fund = new BuildingFund(mappedDefinition, destroyedBuilding.ID);
                buildingFunds.Add(destroyedBuilding.ID, fund);
            }

            float totalRestoreCost = mappedDefinition.CalculateTotalRestoreCost(Engine.GetTeamPlayerCount(player.PlayerType));

            fund.NotifyPlayerContribution(player);
            DA.TeamColorMessageWithTeamColor(player.PlayerType, $"{DA.MessagePrefix}{(int)(fund.TotalFunds + 0.5f)} out of {(int)(totalRestoreCost + 0.5f)} credit(s) gathered to restore the {DATranslationManager.Translate(destroyedBuilding)}.");

            return(true);
        }
Exemplo n.º 3
0
 public override bool ChatCommandEvent(IcPlayer player, TextMessageEnum type, string command, IDATokenClass text, int receiverID)
 {
     return(true);
 }
Exemplo n.º 4
0
        bool TestChatCommand(IcPlayer player, string command, IDATokenClass text, TextMessageEnum chatType, object data)
        {
            Engine.SendMessage(Color.Green, "Hello there!");

            return(true);
        }
Exemplo n.º 5
0
        public override bool Activate(IcPlayer player, IDATokenClass text, TextMessageEnum chatType)
        {
            DA.HostMessage($"RenSharp {Engine.RenSharpVersion} with Dragonade {DA.Version} and Scripts {Engine.GetTTVersion().ToString("0.0", CultureInfo.InvariantCulture)}");

            return(false);
        }
Exemplo n.º 6
0
 public override void Init(IDATokenClass parameters)
 {
     base.Init(parameters);
 }
Exemplo n.º 7
0
 // Called right after the 'normal' activate, except it gives you the arguments as a IDATokenClass
 public override void Activate(IDATokenClass args)
 {
 }
Exemplo n.º 8
0
        bool JoinSoundsAdminGenericCommand(IcPlayer player, string command, IDATokenClass text, TextMessageEnum chatType, object data)
        {
            int Size = text.Size; //Had to use like that cuz of a RenSharp problem :/P/PP

            if ((int)player.DAPlayer.AccessLevel >= AdminLevel)
            {
                if (text[1].ToLower() == "set" || text[1].ToLower() == "change")
                {
                    if (Size > 2)
                    {
                        if (!DisableList.Contains(text[3].ToLower()))
                        {
                            var Pl = PlayersDatabase.GetPlayer(text[2]);
                            if (Pl != null)
                            {
                                Pl.Sound = text[3];
                                PlayersDatabase.Update(Pl.Name, Pl);
                                Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] {text[2]}'s join sound has been updated with \"{text[3]}\".");
                            }
                            else
                            {
                                Pl       = new PlayerClass();
                                Pl.Name  = player.PlayerName.ToLower();
                                Pl.Sound = text[3];
                                Pl.Delay = MinDelay;
                                PlayersDatabase.Add(Pl);
                                Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] {text[2]}'s join sound has successfully added with \"{text[3]}\" sound. Delay is set to minimum by default.");
                            }
                        }
                        else
                        {
                            Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] This sound is not allowed: {text[3]}.");
                        }
                    }
                    else
                    {
                        DA.PagePlayer(player, $"Usage: {ACmdTriggers.Split('|')[0]} set <player name> <sound filename>");
                    }
                }
                else if (text[1].ToLower() == "delete" || text[1].ToLower() == "del" || text[1].ToLower() == "rem" || text[1].ToLower() == "remove")
                {
                    if (Size > 1)
                    {
                        PlayersDatabase.Remove(player.PlayerName);
                        Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] {text[2]}'s join sound has successfully removed.");
                    }
                    else
                    {
                        DA.PagePlayer(player, $"Usage: {ACmdTriggers.Split('|')[0]} remove <player name>");
                    }
                }
                else if (text[1].ToLower() == "delay")
                {
                    if (Size > 2)
                    {
                        if (Convert.ToDouble(text[3]) <= MaxDelay && Convert.ToDouble(text[3]) >= MinDelay)
                        {
                            var Pl = PlayersDatabase.GetPlayer(player.PlayerName);
                            Pl.Delay = (float)Convert.ToDouble(text[3]);
                            PlayersDatabase.Update(Pl.Name, Pl);
                            Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] {text[2]}'s sound delay has been updated with \"{Convert.ToDouble(text[3])}\".");
                        }
                        else
                        {
                            DA.PagePlayer(player, $"[Join Sounds] Delay value must be between {MinDelay} and {MaxDelay}.");
                        }
                    }
                    else
                    {
                        DA.PagePlayer(player, $"Usage: {ACmdTriggers.Split('|')[0]} delay <player name> <decimal>");
                    }
                }
                else if (text[1].ToLower() == "backup" || text[1].ToLower() == "bkup")
                {
                    string BackupName = $"{Path.GetFileNameWithoutExtension(JoinSounds.DBFile)}-{DateTime.Now.ToString("yyyyMMddHHmmss")}-COMMAND.{Path.GetExtension(JoinSounds.DBFile)}";
                    PlayersDatabase.Backup(BackupName);
                    Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] A backup of current database has been saved as \"{BackupName}\".");
                }
                else if (text[1].ToLower() == "clear")
                {
                    if ((int)player.DAPlayer.AccessLevel >= JoinSounds.ClearLevel)
                    {
                        if (Size < 2)
                        {
                            Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] This command is very sensitive. Please use \"{ACmdTriggers.Split('|')[0]} clear CONFIRM\" to clear database.");
                        }
                        else if (text[2] == "CONFIRM")
                        {
                            string BackupName = $"{Path.GetFileNameWithoutExtension(JoinSounds.DBFile)}-{DateTime.Now.ToString("yyyyMMddHHmmss")}-CLEARBKUP.{Path.GetExtension(JoinSounds.DBFile)}";
                            PlayersDatabase.Backup(BackupName);
                            PlayersDatabase.Clear();
                            PlayersDatabase.Save();
                            Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] Player database is successfully removed. A backup of it saved as \"{BackupName}\".");
                        }
                        else
                        {
                            Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] Invalid text entered. Please use \"{ACmdTriggers.Split('|')[0]} clear CONFIRM\" to clear database.");
                        }
                    }
                    else
                    {
                        DA.PagePlayer(player.GameObj, "You don't have access to use this command.");
                    }
                }
                else if (text[1].ToLower() == "reload")
                {
                    PlayersDatabase.ReloadSettings();
                    Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] Database is successfully reloaded!");
                }
                else if (text[1].ToLower() == "save")
                {
                    PlayersDatabase.Save();
                    Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] Database is successfully saved!");
                }
                else if (text[1].ToLower() == "dlist")
                {
                    DA.PagePlayer(player, "Full list of disabled sounds:");
                    foreach (string s in DisableList)
                    {
                        DA.PagePlayer(player, s);
                    }
                }
                else if (text[1].ToLower() == "show")
                {
                    if (text.Size > 1)
                    {
                        PlayerClass Player = PlayersDatabase.GetPlayer(text[2]);
                        if (Player != null)
                        {
                            Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] Player data of {Player.Name} - Sound: {Player.Sound} | Delay: {Player.Delay}");
                        }
                        else
                        {
                            Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] Failed to find player {text[2]}");
                        }
                    }
                    else
                    {
                        DA.PagePlayer(player, $"Usage: {ACmdTriggers.Split('|')[0]} show <player name>");
                    }
                }
                else if (text[1].ToLower() == "help")
                {
                    Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] {ACmdTriggers.Split('|')[0]} set <player name> <music filename>: Sets or changes players join sound.");
                    Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] {ACmdTriggers.Split('|')[0]} delay <player name> <decimal>: Changes your delay time before join sound will be played.");
                    Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] {ACmdTriggers.Split('|')[0]} remove <player name>: Removes your join sound.");
                    Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] {ACmdTriggers.Split('|')[0]} clear: Clears the player database.");
                    Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] {ACmdTriggers.Split('|')[0]} dlist: Lists all disabled sounds.");
                    Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] {ACmdTriggers.Split('|')[0]} reload: Reloads the player database.");
                    Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] {ACmdTriggers.Split('|')[0]} save: Saves current player datas. This is automatically ran when a value changes.");
                }
            }
            else
            {
                DA.PagePlayer(player.GameObj, "You don't have access to use this command.");
            }
            return(false);
        }
Exemplo n.º 9
0
        bool JoinSoundsGenericCommand(IcPlayer player, string command, IDATokenClass text, TextMessageEnum chatType, object data)
        {
            int Size = text.Size; //Had to use like that cuz it is not a RenSharp problem :/P/PP

            if (text[1].ToLower() == "set" || text[1].ToLower() == "change")
            {
                if (Size > 1)
                {
                    if (!DisableList.Contains(text[2].ToLower()))
                    {
                        var Pl = PlayersDatabase.GetPlayer(player.PlayerName);
                        if (Pl != null)
                        {
                            Pl.Sound = text[2];
                            PlayersDatabase.Update(Pl.Name, Pl);
                            Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] Your join sound has been updated with \"{text[2]}\".");
                        }
                        else
                        {
                            Pl       = new PlayerClass();
                            Pl.Name  = player.PlayerName;
                            Pl.Sound = text[2];
                            Pl.Delay = MinDelay;
                            PlayersDatabase.Add(Pl);
                            Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] Your join sound has successfully aded with \"{text[2]}\" sound. You can adjust your play delay with \"{CmdTriggers.Split('|')[0]} delay\" command.");
                        }
                    }
                    else
                    {
                        Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] This sound is not allowed: {text[2]}.");
                    }
                }
                else
                {
                    DA.PagePlayer(player, $"Usage: {CmdTriggers.Split('|')[0]} set <sound filename>");
                }
            }
            else if (text[1].ToLower() == "delete" || text[1].ToLower() == "del" || text[1].ToLower() == "rem" || text[1].ToLower() == "remove")
            {
                PlayersDatabase.Remove(player.PlayerName);
                Engine.SendMessagePlayer(player.GameObj, Color.Cyan, "[Join Sounds] Your join sound has successfully removed.");
            }
            else if (text[1].ToLower() == "delay")
            {
                if (Size > 1)
                {
                    if (Convert.ToDouble(text[2]) <= MaxDelay && Convert.ToDouble(text[2]) >= MinDelay)
                    {
                        var Pl = PlayersDatabase.GetPlayer(player.PlayerName);
                        Pl.Delay = (float)Convert.ToDouble(text[2]);
                        PlayersDatabase.Update(Pl.Name, Pl);
                        Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] Your sound delay has been updated with \"{Convert.ToDouble(text[2].Replace(".", ","))}\".");
                    }
                    else
                    {
                        DA.PagePlayer(player, $"Usage: Your delay value must be between {MinDelay} and {MaxDelay}.");
                    }
                }
                else
                {
                    DA.PagePlayer(player, $"Usage: {CmdTriggers.Split('|')[0]} delay <decimal>");
                }
            }
            else if (text[1].ToLower() == "help")
            {
                Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] {CmdTriggers.Split('|')[0]} set <music filename>: Sets or changes your join sound.");
                Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] {CmdTriggers.Split('|')[0]} delay <decimal>: Changes your delay time before join sound will be played.");
                Engine.SendMessagePlayer(player.GameObj, Color.Cyan, $"[Join Sounds] {CmdTriggers.Split('|')[0]} remove: Removes your join sound.");
            }
            return(true);
        }
Exemplo n.º 10
0
        private bool FundChatCommand(IcPlayer player, string command, IDATokenClass text, TextMessageEnum chatType, object data)
        {
            if (!BRFEnabled)
            {
                DA.PagePlayer(player, "Building funding is not enabled for this map.");

                return(false);
            }

            string acronym = text[1];
            MappedBuildingDefinition       mappedDefinition = FindMappedDefinition(acronym);
            ICollection <IDefinitionClass> validatedDefinitions;

            if (mappedDefinition == null || (validatedDefinitions = mappedDefinition.ValidatedDefinitions) == null)
            {
                DA.PagePlayer(player, $"No building found for acronym '{acronym}'.");

                return(false);
            }

            IScriptableGameObj destroyedBuilding = FindDestroyedBuilding(validatedDefinitions, player.PlayerType);

            if (destroyedBuilding == null)
            {
                DA.PagePlayer(player, $"No destroyed building found for acronym '{acronym}'.");

                return(false);
            }

            if (mappedDefinition.RestoreCountExceeded)
            {
                DA.PagePlayer(player, $"The maximum amount of restores per map for the {DATranslationManager.Translate(destroyedBuilding)} is exceeded.");

                return(false);
            }

            // First check if the player specified an amount
            float offeredFundAmount;

            if (text.Size > 1)
            {
                // Make sure to parse as int so that player can't input some weird decimal stuff
                string newFundsStr = text[2];
                if (newFundsStr == null || !int.TryParse(newFundsStr, out int parsedFundAmount) || parsedFundAmount <= 0)
                {
                    DA.PagePlayer(player, $"Invalid fund amount '{newFundsStr}'.");

                    return(false);
                }

                offeredFundAmount = parsedFundAmount;
                offeredFundAmount = Math.Min(offeredFundAmount, player.Money);
            }
            else // No amount was given, assume they want to donate everything
            {
                offeredFundAmount = player.Money;
                if (offeredFundAmount <= 0.0f)
                {
                    DA.PagePlayer(player, $"You do not have enough money to fund the '{DATranslationManager.Translate(destroyedBuilding)}'.");

                    return(false);
                }
            }

            float totalRestoreCost = mappedDefinition.CalculateTotalRestoreCost(Engine.GetTeamPlayerCount(player.PlayerType));

            // Check if we already have a fund for this building and how much is left until fully funded
            float calculatedFundAmount;

            if (buildingFunds.TryGetValue(destroyedBuilding.ID, out BuildingFund fund))
            {
                float remainingFundAmount = totalRestoreCost - fund.TotalFunds;
                calculatedFundAmount = Math.Min(remainingFundAmount, offeredFundAmount); // Do not exceed the amount required to refund
            }
            else
            {
                calculatedFundAmount = Math.Min(totalRestoreCost, offeredFundAmount); // Do not exceed the amount required to refund

                fund = new BuildingFund(mappedDefinition, destroyedBuilding.ID);
                buildingFunds.Add(destroyedBuilding.ID, fund);
            }

            // Add this player's fund to the total funds
            fund.AddFund(player, calculatedFundAmount);

            DA.TeamColorMessageWithTeamColor(player.PlayerType, $"{player.PlayerName} deposited {(int)(calculatedFundAmount + 0.5f)} credit(s) towards the funding of the {DATranslationManager.Translate(destroyedBuilding)}.");

            // See if we have enough to restore this building
            TryRestoreBuilding(fund);

            return(true);
        }