예제 #1
0
        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);
        }
예제 #2
0
        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}");
            }
        }