public static string RenderMessage( PBS.Battle.View.Events.MessageParameterized message, PBS.Battle.View.Model myModel, int myPlayerID = 0, PBS.Battle.View.WifiFriendly.Trainer myTrainer = null, PBS.Battle.View.WifiFriendly.Team myTeamPerspective = null) { GameTextData textData = GameTextDatabase.instance.GetGameTextData(message.messageCode); if (textData == null) { return(""); } string baseString = textData.languageDict[GameSettings.language]; string newString = baseString; PBS.Battle.View.WifiFriendly.Trainer trainerPerspective = (myTrainer == null)? myModel.GetMatchingTrainer(message.playerPerspectiveID) : myTrainer; PBS.Battle.View.WifiFriendly.Team teamPerspective = (myTeamPerspective == null)? myModel.GetMatchingTeam(message.teamPerspectiveID) : myTeamPerspective; // player newString = newString.Replace("{{-player-name-}}", PlayerSave.instance.name); if (!string.IsNullOrEmpty(message.pokemonID)) { PBS.Battle.View.WifiFriendly.Pokemon pokemon = myModel.GetMatchingPokemon(message.pokemonID); PokemonData pokemonData = PokemonDatabase.instance.GetPokemonData(pokemon.pokemonID); newString = newString.Replace("{{-pokemon-}}", pokemon.nickname); newString = newString.Replace("{{-pokemon-form-}}", pokemonData.formName); newString = newString.Replace("{{-pokemon-poss-}}", pokemon.nickname + ((pokemon.nickname.EndsWith("s")) ? "'" : "'s") ); } if (!string.IsNullOrEmpty(message.pokemonUserID)) { PBS.Battle.View.WifiFriendly.Pokemon pokemon = myModel.GetMatchingPokemon(message.pokemonUserID); PokemonData pokemonData = PokemonDatabase.instance.GetPokemonData(pokemon.pokemonID); newString = newString.Replace("{{-user-pokemon-}}", pokemon.nickname); newString = newString.Replace("{{-user-pokemon-form-}}", pokemonData.formName); newString = newString.Replace("{{-user-pokemon-poss-}}", pokemon.nickname + ((pokemon.nickname.EndsWith("s")) ? "'" : "'s") ); } if (!string.IsNullOrEmpty(message.pokemonTargetID)) { PBS.Battle.View.WifiFriendly.Pokemon pokemon = myModel.GetMatchingPokemon(message.pokemonTargetID); PokemonData pokemonData = PokemonDatabase.instance.GetPokemonData(pokemon.pokemonID); newString = newString.Replace("{{-target-pokemon-}}", pokemon.nickname); newString = newString.Replace("{{-target-pokemon-form-}}", pokemonData.formName); newString = newString.Replace("{{-target-pokemon-poss-}}", pokemon.nickname + ((pokemon.nickname.EndsWith("s")) ? "'" : "'s") ); } if (message.pokemonListIDs.Count > 0) { List <PBS.Battle.View.WifiFriendly.Pokemon> pokemonList = new List <Battle.View.WifiFriendly.Pokemon>(); for (int i = 0; i < message.pokemonListIDs.Count; i++) { pokemonList.Add(myModel.GetMatchingPokemon(message.pokemonListIDs[i])); } string pokemonNameList = GetPokemonNames(pokemonList, myModel); newString = newString.Replace("{{-pokemon-list-}}", pokemonNameList); } if (message.trainerID != 0) { newString = RenderMessageTrainer( message.trainerID, myModel, teamPerspective.teamID, newString, myPlayerID: myPlayerID, myTrainer: myTrainer, myTeamPerspective: myTeamPerspective); } if (message.teamID != 0) { newString = RenderMessageTeam( teamID: message.teamID, teamPerspectiveID: teamPerspective.teamID, baseString: newString, myPlayerID: myPlayerID, myTrainer: myTrainer, myTeamPerspective: myTeamPerspective); } if (!string.IsNullOrEmpty(message.typeID)) { TypeData typeData = TypeDatabase.instance.GetTypeData(message.typeID); newString = newString.Replace("{{-type-name-}}", typeData.typeName + "-type"); } if (message.typeIDs.Count > 0) { newString = newString.Replace("{{-type-list-}}", GameTextDatabase.ConvertTypesToString(message.typeIDs.ToArray())); } if (!string.IsNullOrEmpty(message.moveID)) { MoveData moveData = MoveDatabase.instance.GetMoveData(message.moveID); newString = newString.Replace("{{-move-name-}}", moveData.moveName); } if (message.moveIDs.Count > 0) { for (int i = 0; i < message.moveIDs.Count; i++) { MoveData moveXData = MoveDatabase.instance.GetMoveData(message.moveIDs[i]); string partToReplace = "{{-move-name-" + i + "-}}"; newString = newString.Replace(partToReplace, moveXData.moveName); } } if (!string.IsNullOrEmpty(message.abilityID)) { AbilityData abilityData = AbilityDatabase.instance.GetAbilityData(message.abilityID); newString = newString.Replace("{{-ability-name-}}", abilityData.abilityName); } if (message.abilityIDs.Count > 0) { for (int i = 0; i < message.abilityIDs.Count; i++) { AbilityData abilityXData = AbilityDatabase.instance.GetAbilityData(message.abilityIDs[i]); string partToReplace = "{{-ability-name-" + i + "-}}"; newString = newString.Replace(partToReplace, abilityXData.abilityName); } } if (!string.IsNullOrEmpty(message.itemID)) { ItemData itemData = ItemDatabase.instance.GetItemData(message.itemID); newString = newString.Replace("{{-item-name-}}", itemData.itemName); } if (!string.IsNullOrEmpty(message.statusID)) { StatusPKData statusData = StatusPKDatabase.instance.GetStatusData(message.statusID); newString = newString.Replace("{{-status-name-}}", statusData.conditionName); } if (!string.IsNullOrEmpty(message.statusTeamID)) { StatusTEData statusData = StatusTEDatabase.instance.GetStatusData(message.statusTeamID); newString = newString.Replace("{{-team-status-name-}}", statusData.conditionName); } if (!string.IsNullOrEmpty(message.statusEnvironmentID)) { StatusBTLData statusData = StatusBTLDatabase.instance.GetStatusData(message.statusEnvironmentID); newString = newString.Replace("{{-battle-status-name-}}", statusData.conditionName); } // swapping substrings for (int i = 0; i < message.intArgs.Count; i++) { string partToReplace = "{{-int-" + i + "-}}"; newString = newString.Replace(partToReplace, message.intArgs[i].ToString()); } if (message.statList.Count > 0) { newString = newString.Replace("{{-stat-types-}}", ConvertStatsToString(message.statList.ToArray())); if (GameSettings.language == GameLanguages.English) { newString = newString.Replace("{{-stat-types-was-}}", (message.statList.Count == 1)? "was" : "were"); } else { newString = newString.Replace("{{-stat-types-was-}}", ""); } newString = newString.Replace("{{-stat-types-LC-}}", ConvertStatsToString(message.statList.ToArray(), false)); } return(newString); }
public static PBS.Battle.View.Events.Base ReadBattleViewEvent(this NetworkReader reader) { int type = reader.ReadInt32(); switch (type) { case STARTBATTLE: return(new PBS.Battle.View.Events.StartBattle { }); case ENDBATTLE: return(new PBS.Battle.View.Events.EndBattle { winningTeam = reader.ReadInt32() }); case MESSAGE: return(new PBS.Battle.View.Events.Message { message = reader.ReadString() }); case MESSAGEPARAMETERIZED: PBS.Battle.View.Events.MessageParameterized messageParameterized = new PBS.Battle.View.Events.MessageParameterized { messageCode = reader.ReadString(), isQueryResponse = reader.ReadBoolean(), isQuerySuccessful = reader.ReadBoolean(), playerPerspectiveID = reader.ReadInt32(), teamPerspectiveID = reader.ReadInt32(), pokemonID = reader.ReadString(), pokemonUserID = reader.ReadString(), pokemonTargetID = reader.ReadString(), pokemonListIDs = reader.ReadList <string>(), trainerID = reader.ReadInt32(), teamID = reader.ReadInt32(), typeID = reader.ReadString(), typeIDs = reader.ReadList <string>(), moveID = reader.ReadString(), moveIDs = reader.ReadList <string>(), abilityID = reader.ReadString(), abilityIDs = reader.ReadList <string>(), itemID = reader.ReadString(), itemIDs = reader.ReadList <string>(), statusID = reader.ReadString(), statusTeamID = reader.ReadString(), statusEnvironmentID = reader.ReadString(), intArgs = reader.ReadList <int>(), }; List <PokemonStats> messageParameterizedStatList = new List <PokemonStats>(); List <int> messageParameterizedstatInts = reader.ReadList <int>(); for (int i = 0; i < messageParameterizedstatInts.Count; i++) { messageParameterizedStatList.Add((PokemonStats)messageParameterizedstatInts[i]); } messageParameterized.statList.AddRange(messageParameterizedStatList); return(messageParameterized); case MODELUPDATE: return(new PBS.Battle.View.Events.ModelUpdate { loadAssets = reader.ReadBoolean() }); case MODELUPDATEPOKEMON: return(new PBS.Battle.View.Events.ModelUpdatePokemon { loadAsset = reader.ReadBoolean(), pokemon = reader.ReadBattleViewCompactPokemon() }); case MODELUPDATETRAINER: return(new PBS.Battle.View.Events.ModelUpdateTrainer { loadAsset = reader.ReadBoolean(), name = reader.ReadString(), playerID = reader.ReadInt32(), teamID = reader.ReadInt32(), party = reader.ReadList <string>(), items = reader.ReadList <string>(), controlPos = reader.ReadList <int>() }); case MODELUPDATETEAM: return(new PBS.Battle.View.Events.ModelUpdateTeam { loadAsset = reader.ReadBoolean(), teamID = reader.ReadInt32(), teamMode = (TeamMode)reader.ReadInt32(), trainers = reader.ReadList <int>() }); case COMMANDGENERALPROMPT: return(new PBS.Battle.View.Events.CommandGeneralPrompt { playerID = reader.ReadInt32(), multiTargetSelection = reader.ReadBoolean(), canMegaEvolve = reader.ReadBoolean(), canZMove = reader.ReadBoolean(), canDynamax = reader.ReadBoolean(), items = reader.ReadList <string>(), pokemonToCommand = reader.ReadList <PBS.Battle.View.Events.CommandAgent>() }); case COMMANDREPLACEMENTPROMPT: return(new PBS.Battle.View.Events.CommandReplacementPrompt { playerID = reader.ReadInt32(), fillPositions = reader.ReadArray <int>() }); case TRAINERSENDOUT: return(new PBS.Battle.View.Events.TrainerSendOut { playerID = reader.ReadInt32(), pokemonUniqueIDs = reader.ReadList <string>() }); case TRAINERMULTISENDOUT: return(new PBS.Battle.View.Events.TrainerMultiSendOut { sendEvents = reader.ReadList <PBS.Battle.View.Events.TrainerSendOut>() }); case TRAINERWITHDRAW: return(new PBS.Battle.View.Events.TrainerWithdraw { playerID = reader.ReadInt32(), pokemonUniqueIDs = reader.ReadList <string>() }); case TRAINERITEMUSE: return(new PBS.Battle.View.Events.TrainerItemUse { playerID = reader.ReadInt32(), itemID = reader.ReadString() }); case POKEMONCHANGEFORM: return(new PBS.Battle.View.Events.PokemonChangeForm { pokemonUniqueID = reader.ReadString(), preForm = reader.ReadString(), postForm = reader.ReadString() }); case POKEMONSWITCHPOSITION: return(new PBS.Battle.View.Events.PokemonSwitchPosition { pokemonUniqueID1 = reader.ReadString(), pokemonUniqueID2 = reader.ReadString() }); case POKEMONHEALTHDAMAGE: return(new PBS.Battle.View.Events.PokemonHealthDamage { pokemonUniqueID = reader.ReadString(), preHP = reader.ReadInt32(), postHP = reader.ReadInt32(), maxHP = reader.ReadInt32() }); case POKEMONHEALTHHEAL: return(new PBS.Battle.View.Events.PokemonHealthHeal { pokemonUniqueID = reader.ReadString(), preHP = reader.ReadInt32(), postHP = reader.ReadInt32(), maxHP = reader.ReadInt32() }); case POKEMONHEALTHFAINT: return(new PBS.Battle.View.Events.PokemonHealthFaint { pokemonUniqueID = reader.ReadString() }); case POKEMONHEALTHREVIVE: return(new PBS.Battle.View.Events.PokemonHealthRevive { pokemonUniqueID = reader.ReadString() }); case POKEMONMOVEUSE: return(new PBS.Battle.View.Events.PokemonMoveUse { pokemonUniqueID = reader.ReadString(), moveID = reader.ReadString() }); case POKEMONMOVEHIT: return(new PBS.Battle.View.Events.PokemonMoveHit { pokemonUniqueID = reader.ReadString(), moveID = reader.ReadString(), currentHit = reader.ReadInt32(), hitTargets = reader.ReadList <PBS.Battle.View.Events.PokemonMoveHitTarget>() }); case POKEMONABILITYACTIVATE: return(new PBS.Battle.View.Events.PokemonAbilityActivate { pokemonUniqueID = reader.ReadString(), abilityID = reader.ReadString() }); case POKEMONSTATCHANGE: PBS.Battle.View.Events.PokemonStatChange statChange = new PBS.Battle.View.Events.PokemonStatChange { pokemonUniqueID = reader.ReadString(), modValue = reader.ReadInt32(), maximize = reader.ReadBoolean(), minimize = reader.ReadBoolean(), statsToMod = new List <PokemonStats>() }; List <PokemonStats> statsToMod = new List <PokemonStats>(); List <int> statInts = reader.ReadList <int>(); for (int i = 0; i < statInts.Count; i++) { statsToMod.Add((PokemonStats)statInts[i]); } statChange.statsToMod.AddRange(statsToMod); return(statChange); case POKEMONSTATUNCHANGEABLE: PBS.Battle.View.Events.PokemonStatUnchangeable statUnchangeable = new PBS.Battle.View.Events.PokemonStatUnchangeable { pokemonUniqueID = reader.ReadString(), tooHigh = reader.ReadBoolean(), statsToMod = new List <PokemonStats>() }; List <PokemonStats> statsToModUnchangeable = new List <PokemonStats>(); List <int> statIntsUnchangeable = reader.ReadList <int>(); for (int i = 0; i < statIntsUnchangeable.Count; i++) { statsToModUnchangeable.Add((PokemonStats)statIntsUnchangeable[i]); } statUnchangeable.statsToMod.AddRange(statsToModUnchangeable); return(statUnchangeable); default: throw new System.Exception($"Invalid event type {type}"); } }