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); } }
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); }
public override bool ChatCommandEvent(IcPlayer player, TextMessageEnum type, string command, IDATokenClass text, int receiverID) { return(true); }
bool TestChatCommand(IcPlayer player, string command, IDATokenClass text, TextMessageEnum chatType, object data) { Engine.SendMessage(Color.Green, "Hello there!"); return(true); }
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); }
public override void Init(IDATokenClass parameters) { base.Init(parameters); }
// Called right after the 'normal' activate, except it gives you the arguments as a IDATokenClass public override void Activate(IDATokenClass args) { }
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); }
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); }
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); }