diff --git a/proto/RpcEnum.proto b/proto/RpcEnum.proto new file mode 100755 index 0000000000..09fb88ba68 --- /dev/null +++ b/proto/RpcEnum.proto @@ -0,0 +1,766 @@ + +package RpcEnum; + +enum RpcDirection { + UNKNOWN = 0; + RESPONSE = 1; + REQUEST = 2; +} + +enum TeamColor { + NEUTRAL = 0; + BLUE = 1; + RED = 2; + YELLOW = 3; +} + + +enum RequestMethod { + METHOD_UNSET = 0; + PLAYER_UPDATE = 1; + GET_PLAYER = 2; + GET_INVENTORY = 4; + DOWNLOAD_SETTINGS = 5; + DOWNLOAD_ITEM_TEMPLATES = 6; + DOWNLOAD_REMOTE_CONFIG_VERSION = 7; + FORT_SEARCH = 101; + ENCOUNTER = 102; + CATCH_POKEMON = 103; + FORT_DETAILS = 104; + ITEM_USE = 105; + GET_MAP_OBJECTS = 106; + FORT_DEPLOY_POKEMON = 110; + FORT_RECALL_POKEMON = 111; + RELEASE_POKEMON = 112; + USE_ITEM_POTION = 113; + USE_ITEM_CAPTURE = 114; + USE_ITEM_FLEE = 115; + USE_ITEM_REVIVE = 116; + TRADE_SEARCH = 117; + TRADE_OFFER = 118; + TRADE_RESPONSE = 119; + TRADE_RESULT = 120; + GET_PLAYER_PROFILE = 121; + GET_ITEM_PACK = 122; + BUY_ITEM_PACK = 123; + BUY_GEM_PACK = 124; + EVOLVE_POKEMON = 125; + GET_HATCHED_EGGS = 126; + ENCOUNTER_TUTORIAL_COMPLETE = 127; + LEVEL_UP_REWARDS = 128; + CHECK_AWARDED_BADGES = 129; + USE_ITEM_GYM = 133; + GET_GYM_DETAILS = 134; + START_GYM_BATTLE = 135; + ATTACK_GYM = 136; + RECYCLE_INVENTORY_ITEM = 137; + COLLECT_DAILY_BONUS = 138; + USE_ITEM_XP_BOOST = 139; + USE_ITEM_EGG_INCUBATOR = 140; + USE_INCENSE = 141; + GET_INCENSE_POKEMON = 142; + INCENSE_ENCOUNTER = 143; + ADD_FORT_MODIFIER = 144; + DISK_ENCOUNTER = 145; + COLLECT_DAILY_DEFENDER_BONUS = 146; + UPGRADE_POKEMON = 147; + SET_FAVORITE_POKEMON = 148; + NICKNAME_POKEMON = 149; + EQUIP_BADGE = 150; + SET_CONTACT_SETTINGS = 151; + GET_ASSET_DIGEST = 300; + GET_DOWNLOAD_URLS = 301; + GET_SUGGESTED_CODENAMES = 401; + CHECK_CODENAME_AVAILABLE = 402; + CLAIM_CODENAME = 403; + SET_AVATAR = 404; + SET_PLAYER_TEAM = 405; + MARK_TUTORIAL_COMPLETE = 406; + LOAD_SPAWN_POINTS = 500; + ECHO = 666; + DEBUG_UPDATE_INVENTORY = 700; + DEBUG_DELETE_PLAYER = 701; + SFIDA_REGISTRATION = 800; + SFIDA_ACTION_LOG = 801; + SFIDA_CERTIFICATION = 802; + SFIDA_UPDATE = 803; + SFIDA_ACTION = 804; + SFIDA_DOWSER = 805; + SFIDA_CAPTURE = 806; +} + +enum PokemonMove { + MOVE_UNSET = 0; + THUNDER_SHOCK = 1; + QUICK_ATTACK = 2; + SCRATCH = 3; + EMBER = 4; + VINE_WHIP = 5; + TACKLE = 6; + RAZOR_LEAF = 7; + TAKE_DOWN = 8; + WATER_GUN = 9; + BITE = 10; + POUND = 11; + DOUBLE_SLAP = 12; + WRAP = 13; + HYPER_BEAM = 14; + LICK = 15; + DARK_PULSE = 16; + SMOG = 17; + SLUDGE = 18; + METAL_CLAW = 19; + VICE_GRIP = 20; + FLAME_WHEEL = 21; + MEGAHORN = 22; + WING_ATTACK = 23; + FLAMETHROWER = 24; + SUCKER_PUNCH = 25; + DIG = 26; + LOW_KICK = 27; + CROSS_CHOP = 28; + PSYCHO_CUT = 29; + PSYBEAM = 30; + EARTHQUAKE = 31; + STONE_EDGE = 32; + ICE_PUNCH = 33; + HEART_STAMP = 34; + DISCHARGE = 35; + FLASH_CANNON = 36; + PECK = 37; + DRILL_PECK = 38; + ICE_BEAM = 39; + BLIZZARD = 40; + AIR_SLASH = 41; + HEAT_WAVE = 42; + TWINEEDLE = 43; + POISON_JAB = 44; + AERIAL_ACE = 45; + DRILL_RUN = 46; + PETAL_BLIZZARD = 47; + MEGA_DRAIN = 48; + BUG_BUZZ = 49; + POISON_FANG = 50; + NIGHT_SLASH = 51; + SLASH = 52; + BUBBLE_BEAM = 53; + SUBMISSION = 54; + KARATE_CHOP = 55; + LOW_SWEEP = 56; + AQUA_JET = 57; + AQUA_TAIL = 58; + SEED_BOMB = 59; + PSYSHOCK = 60; + ROCK_THROW = 61; + ANCIENT_POWER = 62; + ROCK_TOMB = 63; + ROCK_SLIDE = 64; + POWER_GEM = 65; + SHADOW_SNEAK = 66; + SHADOW_PUNCH = 67; + SHADOW_CLAW = 68; + OMINOUS_WIND = 69; + SHADOW_BALL = 70; + BULLET_PUNCH = 71; + MAGNET_BOMB = 72; + STEEL_WING = 73; + IRON_HEAD = 74; + PARABOLIC_CHARGE = 75; + SPARK = 76; + THUNDER_PUNCH = 77; + THUNDER = 78; + THUNDERBOLT = 79; + TWISTER = 80; + DRAGON_BREATH = 81; + DRAGON_PULSE = 82; + DRAGON_CLAW = 83; + DISARMING_VOICE = 84; + DRAINING_KISS = 85; + DAZZLING_GLEAM = 86; + MOONBLAST = 87; + PLAY_ROUGH = 88; + CROSS_POISON = 89; + SLUDGE_BOMB = 90; + SLUDGE_WAVE = 91; + GUNK_SHOT = 92; + MUD_SHOT = 93; + BONE_CLUB = 94; + BULLDOZE = 95; + MUD_BOMB = 96; + FURY_CUTTER = 97; + BUG_BITE = 98; + SIGNAL_BEAM = 99; + X_SCISSOR = 100; + FLAME_CHARGE = 101; + FLAME_BURST = 102; + FIRE_BLAST = 103; + BRINE = 104; + WATER_PULSE = 105; + SCALD = 106; + HYDRO_PUMP = 107; + PSYCHIC = 108; + PSYSTRIKE = 109; + ICE_SHARD = 110; + ICY_WIND = 111; + FROST_BREATH = 112; + ABSORB = 113; + GIGA_DRAIN = 114; + FIRE_PUNCH = 115; + SOLAR_BEAM = 116; + LEAF_BLADE = 117; + POWER_WHIP = 118; + SPLASH = 119; + ACID = 120; + AIR_CUTTER = 121; + HURRICANE = 122; + BRICK_BREAK = 123; + CUT = 124; + SWIFT = 125; + HORN_ATTACK = 126; + STOMP = 127; + HEADBUTT = 128; + HYPER_FANG = 129; + SLAM = 130; + BODY_SLAM = 131; + REST = 132; + STRUGGLE = 133; + SCALD_BLASTOISE = 134; + HYDRO_PUMP_BLASTOISE = 135; + WRAP_GREEN = 136; + WRAP_PINK = 137; + FURY_CUTTER_FAST = 200; + BUG_BITE_FAST = 201; + BITE_FAST = 202; + SUCKER_PUNCH_FAST = 203; + DRAGON_BREATH_FAST = 204; + THUNDER_SHOCK_FAST = 205; + SPARK_FAST = 206; + LOW_KICK_FAST = 207; + KARATE_CHOP_FAST = 208; + EMBER_FAST = 209; + WING_ATTACK_FAST = 210; + PECK_FAST = 211; + LICK_FAST = 212; + SHADOW_CLAW_FAST = 213; + VINE_WHIP_FAST = 214; + RAZOR_LEAF_FAST = 215; + MUD_SHOT_FAST = 216; + ICE_SHARD_FAST = 217; + FROST_BREATH_FAST = 218; + QUICK_ATTACK_FAST = 219; + SCRATCH_FAST = 220; + TACKLE_FAST = 221; + POUND_FAST = 222; + CUT_FAST = 223; + POISON_JAB_FAST = 224; + ACID_FAST = 225; + PSYCHO_CUT_FAST = 226; + ROCK_THROW_FAST = 227; + METAL_CLAW_FAST = 228; + BULLET_PUNCH_FAST = 229; + WATER_GUN_FAST = 230; + SPLASH_FAST = 231; + WATER_GUN_FAST_BLASTOISE = 232; + MUD_SLAP_FAST = 233; + ZEN_HEADBUTT_FAST = 234; + CONFUSION_FAST = 235; + POISON_STING_FAST = 236; + BUBBLE_FAST = 237; + FEINT_ATTACK_FAST = 238; + STEEL_WING_FAST = 239; + FIRE_FANG_FAST = 240; + ROCK_SMASH_FAST = 241; +} + +enum ItemId { + ITEM_UNKNOWN = 0; + ITEM_POKE_BALL = 1; + ITEM_GREAT_BALL = 2; + ITEM_ULTRA_BALL = 3; + ITEM_MASTER_BALL = 4; + ITEM_POTION = 101; + ITEM_SUPER_POTION = 102; + ITEM_HYPER_POTION = 103; + ITEM_MAX_POTION = 104; + ITEM_REVIVE = 201; + ITEM_MAX_REVIVE = 202; + ITEM_LUCKY_EGG = 301; + ITEM_INCENSE_ORDINARY = 401; + ITEM_INCENSE_SPICY = 402; + ITEM_INCENSE_COOL = 403; + ITEM_INCENSE_FLORAL = 404; + ITEM_TROY_DISK = 501; + ITEM_X_ATTACK = 602; + ITEM_X_DEFENSE = 603; + ITEM_X_MIRACLE = 604; + ITEM_RAZZ_BERRY = 701; + ITEM_BLUK_BERRY = 702; + ITEM_NANAB_BERRY = 703; + ITEM_WEPAR_BERRY = 704; + ITEM_PINAP_BERRY = 705; + ITEM_SPECIAL_CAMERA = 801; + ITEM_INCUBATOR_BASIC_UNLIMITED = 901; + ITEM_INCUBATOR_BASIC = 902; + ITEM_POKEMON_STORAGE_UPGRADE = 1001; + ITEM_ITEM_STORAGE_UPGRADE = 1002; +} + +enum InventoryUpgradeType { + UPGRADE_UNSET = 0; + INCREASE_ITEM_STORAGE = 1; + INCREASE_POKEMON_STORAGE = 2; +} + +enum EggIncubatorType { + INCUBATOR_UNSET = 0; + INCUBATOR_DISTANCE = 1; +} + +enum PokemonFamilyId { + FAMILY_UNSET = 0; + FAMILY_BULBASAUR = 1; + FAMILY_CHARMANDER = 4; + FAMILY_SQUIRTLE = 7; + FAMILY_CATERPIE = 10; + FAMILY_WEEDLE = 13; + FAMILY_PIDGEY = 16; + FAMILY_RATTATA = 19; + FAMILY_SPEAROW = 21; + FAMILY_EKANS = 23; + FAMILY_PIKACHU = 25; + FAMILY_SANDSHREW = 27; + FAMILY_NIDORAN = 29; + FAMILY_NIDORAN2 = 32; + FAMILY_CLEFAIRY = 35; + FAMILY_VULPIX = 37; + FAMILY_JIGGLYPUFF = 39; + FAMILY_ZUBAT = 41; + FAMILY_ODDISH = 43; + FAMILY_PARAS = 46; + FAMILY_VENONAT = 48; + FAMILY_DIGLETT = 50; + FAMILY_MEOWTH = 52; + FAMILY_PSYDUCK = 54; + FAMILY_MANKEY = 56; + FAMILY_GROWLITHE = 58; + FAMILY_POLIWAG = 60; + FAMILY_ABRA = 63; + FAMILY_MACHOP = 66; + FAMILY_BELLSPROUT = 69; + FAMILY_TENTACOOL = 72; + FAMILY_GEODUDE = 74; + FAMILY_PONYTA = 77; + FAMILY_SLOWPOKE = 79; + FAMILY_MAGNEMITE = 81; + FAMILY_FARFETCHD = 83; + FAMILY_DODUO = 84; + FAMILY_SEEL = 86; + FAMILY_GRIMER = 88; + FAMILY_SHELLDER = 90; + FAMILY_GASTLY = 92; + FAMILY_ONIX = 95; + FAMILY_DROWZEE = 96; + FAMILY_KRABBY = 98; + FAMILY_VOLTORB = 100; + FAMILY_EXEGGCUTE = 102; + FAMILY_CUBONE = 104; + FAMILY_HITMONLEE = 106; + FAMILY_HITMONCHAN = 107; + FAMILY_LICKITUNG = 108; + FAMILY_KOFFING = 109; + FAMILY_RHYHORN = 111; + FAMILY_CHANSEY = 113; + FAMILY_TANGELA = 114; + FAMILY_KANGASKHAN = 115; + FAMILY_HORSEA = 116; + FAMILY_GOLDEEN = 118; + FAMILY_STARYU = 120; + FAMILY_MR_MIME = 122; + FAMILY_SCYTHER = 123; + FAMILY_JYNX = 124; + FAMILY_ELECTABUZZ = 125; + FAMILY_MAGMAR = 126; + FAMILY_PINSIR = 127; + FAMILY_TAUROS = 128; + FAMILY_MAGIKARP = 129; + FAMILY_LAPRAS = 131; + FAMILY_DITTO = 132; + FAMILY_EEVEE = 133; + FAMILY_PORYGON = 137; + FAMILY_OMANYTE = 138; + FAMILY_KABUTO = 140; + FAMILY_AERODACTYL = 142; + FAMILY_SNORLAX = 143; + FAMILY_ARTICUNO = 144; + FAMILY_ZAPDOS = 145; + FAMILY_MOLTRES = 146; + FAMILY_DRATINI = 147; + FAMILY_MEWTWO = 150; + FAMILY_MEW = 151; +} + +enum MapObjectsStatus { + UNSET_STATUS = 0; + SUCCESS = 1; + LOCATION_UNSET = 2; +} + +enum FortType { + GYM = 0; + CHECKPOINT = 1; +} + +enum PokemonId { + MISSINGNO = 0; + BULBASAUR = 1; + IVYSAUR = 2; + VENUSAUR = 3; + CHARMENDER = 4; + CHARMELEON = 5; + CHARIZARD = 6; + SQUIRTLE = 7; + WARTORTLE = 8; + BLASTOISE = 9; + CATERPIE = 10; + METAPOD = 11; + BUTTERFREE = 12; + WEEDLE = 13; + KAKUNA = 14; + BEEDRILL = 15; + PIDGEY = 16; + PIDGEOTTO = 17; + PIDGEOT = 18; + RATTATA = 19; + RATICATE = 20; + SPEAROW = 21; + FEAROW = 22; + EKANS = 23; + ARBOK = 24; + PIKACHU = 25; + RAICHU = 26; + SANDSHREW = 27; + SANDLASH = 28; + NIDORAN_FEMALE = 29; + NIDORINA = 30; + NIDOQUEEN = 31; + NIDORAN_MALE = 32; + NIDORINO = 33; + NIDOKING = 34; + CLEFARY = 35; + CLEFABLE = 36; + VULPIX = 37; + NINETALES = 38; + JIGGLYPUFF = 39; + WIGGLYTUFF = 40; + ZUBAT = 41; + GOLBAT = 42; + ODDISH = 43; + GLOOM = 44; + VILEPLUME = 45; + PARAS = 46; + PARASECT = 47; + VENONAT = 48; + VENOMOTH = 49; + DIGLETT = 50; + DUGTRIO = 51; + MEOWTH = 52; + PERSIAN = 53; + PSYDUCK = 54; + GOLDUCK = 55; + MANKEY = 56; + PRIMEAPE = 57; + GROWLITHE = 58; + ARCANINE = 59; + POLIWAG = 60; + POLIWHIRL = 61; + POLIWRATH = 62; + ABRA = 63; + KADABRA = 64; + ALAKHAZAM = 65; + MACHOP = 66; + MACHOKE = 67; + MACHAMP = 68; + BELLSPROUT = 69; + WEEPINBELL = 70; + VICTREEBELL = 71; + TENTACOOL = 72; + TENTACRUEL = 73; + GEODUGE = 74; + GRAVELER = 75; + GOLEM = 76; + PONYTA = 77; + RAPIDASH = 78; + SLOWPOKE = 79; + SLOWBRO = 80; + MAGNEMITE = 81; + MAGNETON = 82; + FARFETCHD = 83; + DODUO = 84; + DODRIO = 85; + SEEL = 86; + DEWGONG = 87; + GRIMER = 88; + MUK = 89; + SHELLDER = 90; + CLOYSTER = 91; + GASTLY = 92; + HAUNTER = 93; + GENGAR = 94; + ONIX = 95; + DROWZEE = 96; + HYPNO = 97; + KRABBY = 98; + KINGLER = 99; + VOLTORB = 100; + ELECTRODE = 101; + EXEGGCUTE = 102; + EXEGGUTOR = 103; + CUBONE = 104; + MAROWAK = 105; + HITMONLEE = 106; + HITMONCHAN = 107; + LICKITUNG = 108; + KOFFING = 109; + WEEZING = 110; + RHYHORN = 111; + RHYDON = 112; + CHANSEY = 113; + TANGELA = 114; + KANGASKHAN = 115; + HORSEA = 116; + SEADRA = 117; + GOLDEEN = 118; + SEAKING = 119; + STARYU = 120; + STARMIE = 121; + MR_MIME = 122; + SCYTHER = 123; + JYNX = 124; + ELECTABUZZ = 125; + MAGMAR = 126; + PINSIR = 127; + TAUROS = 128; + MAGIKARP = 129; + GYARADOS = 130; + LAPRAS = 131; + DITTO = 132; + EEVEE = 133; + VAPOREON = 134; + JOLTEON = 135; + FLAREON = 136; + PORYGON = 137; + OMANYTE = 138; + OMASTAR = 139; + KABUTO = 140; + KABUTOPS = 141; + AERODACTYL = 142; + SNORLAX = 143; + ARTICUNO = 144; + ZAPDOS = 145; + MOLTRES = 146; + DRATINI = 147; + DRAGONAIR = 148; + DRAGONITE = 149; + MEWTWO = 150; + MEW = 151; +} + +enum FortSponsor { + UNSET_SPONSOR = 0; + MCDONALDS = 1; + POKEMON_STORE = 2; +} + +enum FortRenderingType { + DEFAULT = 0; + INTERNAL_TEST = 1; +} + +enum ItemType { + ITEM_TYPE_NONE = 0; + ITEM_TYPE_POKEBALL = 1; + ITEM_TYPE_POTION = 2; + ITEM_TYPE_REVIVE = 3; + ITEM_TYPE_MAP = 4; + ITEM_TYPE_BATTLE = 5; + ITEM_TYPE_FOOD = 6; + ITEM_TYPE_CAMERA = 7; + ITEM_TYPE_DISK = 8; + ITEM_TYPE_INCUBATOR = 9; + ITEM_TYPE_INCENSE = 10; + ITEM_TYPE_XP_BOOST = 11; + ITEM_TYPE_INVENTORY_UPGRADE = 12; +} + +enum ItemCategory { + ITEM_CATEGORY_NONE = 0; + ITEM_CATEGORY_POKEBALL = 1; + ITEM_CATEGORY_FOOD = 2; + ITEM_CATEGORY_MEDICINE = 3; + ITEM_CATEGORY_BOOST = 4; + ITEM_CATEGORY_UTILITES = 5; + ITEM_CATEGORY_CAMERA = 6; + ITEM_CATEGORY_DISK = 7; + ITEM_CATEGORY_INCUBATOR = 8; + ITEM_CATEGORY_INCENSE = 9; + ITEM_CATEGORY_XP_BOOST = 10; + ITEM_CATEGORY_INVENTORY_UPGRADE = 11; +} + +enum ItemEffect { + ITEM_EFFECT_NONE = 0; + ITEM_EFFECT_CAP_NO_FLEE = 1000; + ITEM_EFFECT_CAP_NO_MOVEMENT = 1002; + ITEM_EFFECT_CAP_NO_THREAT = 1003; + ITEM_EFFECT_CAP_TARGET_MAX = 1004; + ITEM_EFFECT_CAP_TARGET_SLOW = 1005; + ITEM_EFFECT_CAP_CHANCE_NIGHT = 1006; + ITEM_EFFECT_CAP_CHANCE_TRAINER = 1007; + ITEM_EFFECT_CAP_CHANCE_FIRST_THROW = 1008; + ITEM_EFFECT_CAP_CHANCE_LEGEND = 1009; + ITEM_EFFECT_CAP_CHANCE_HEAVY = 1010; + ITEM_EFFECT_CAP_CHANCE_REPEAT = 1011; + ITEM_EFFECT_CAP_CHANCE_MULTI_THROW = 1012; + ITEM_EFFECT_CAP_CHANCE_ALWAYS = 1013; + ITEM_EFFECT_CAP_CHANCE_SINGLE_THROW = 1014; +} + +enum ActivityType { + ACTIVITY_UNKNOWN = 0; + ACTIVITY_CATCH_POKEMON = 1; + ACTIVITY_CATCH_LEGEND_POKEMON = 2; + ACTIVITY_FLEE_POKEMON = 3; + ACTIVITY_DEFEAT_FORT = 4; + ACTIVITY_EVOLVE_POKEMON = 5; + ACTIVITY_HATCH_EGG = 6; + ACTIVITY_WALK_KM = 7; + ACTIVITY_POKEDEX_ENTRY_NEW = 8; + ACTIVITY_CATCH_FIRST_THROW = 9; + ACTIVITY_CATCH_NICE_THROW = 10; + ACTIVITY_CATCH_GREAT_THROW = 11; + ACTIVITY_CATCH_EXCELLENT_THROW = 12; + ACTIVITY_CATCH_CURVEBALL = 13; + ACTIVITY_CATCH_FIRST_CATCH_OF_DAY = 14; + ACTIVITY_CATCH_MILESTONE = 15; + ACTIVITY_TRAIN_POKEMON = 16; + ACTIVITY_SEARCH_FORT = 17; + ACTIVITY_RELEASE_POKEMON = 18; + ACTIVITY_HATCH_EGG_SMALL_BONUS = 19; + ACTIVITY_HATCH_EGG_MEDIUM_BONUS = 20; + ACTIVITY_HATCH_EGG_LARGE_BONUS = 21; + ACTIVITY_DEFEAT_GYM_DEFENDER = 22; + ACTIVITY_DEFEAT_GYM_LEADER = 23; +} + +enum BadgeType { + BADGE_UNSET = 0; + BADGE_TRAVEL_KM = 1; + BADGE_POKEDEX_ENTRIES = 2; + BADGE_CAPTURE_TOTAL = 3; + BADGE_DEFEATED_FORT = 4; + BADGE_EVOLVED_TOTAL = 5; + BADGE_HATCHED_TOTAL = 6; + BADGE_ENCOUNTERED_TOTAL = 7; + BADGE_POKESTOPS_VISITED = 8; + BADGE_UNIQUE_POKESTOPS = 9; + BADGE_POKEBALL_THROWN = 10; + BADGE_BIG_MAGIKARP = 11; + BADGE_DEPLOYED_TOTAL = 12; + BADGE_BATTLE_ATTACK_WON = 13; + BADGE_BATTLE_TRAINING_WON = 14; + BADGE_BATTLE_DEFEND_WON = 15; + BADGE_PRESTIGE_RAISED = 16; + BADGE_PRESTIGE_DROPPED = 17; + BADGE_TYPE_NORMAL = 18; + BADGE_TYPE_FIGHTING = 19; + BADGE_TYPE_FLYING = 20; + BADGE_TYPE_POISON = 21; + BADGE_TYPE_GROUND = 22; + BADGE_TYPE_ROCK = 23; + BADGE_TYPE_BUG = 24; + BADGE_TYPE_GHOST = 25; + BADGE_TYPE_STEEL = 26; + BADGE_TYPE_FIRE = 27; + BADGE_TYPE_WATER = 28; + BADGE_TYPE_GRASS = 29; + BADGE_TYPE_ELECTRIC = 30; + BADGE_TYPE_PSYCHIC = 31; + BADGE_TYPE_ICE = 32; + BADGE_TYPE_DRAGON = 33; + BADGE_TYPE_DARK = 34; + BADGE_TYPE_FAIRY = 35; + BADGE_SMALL_RATTATA = 36; + BADGE_PIKACHU = 37; +} + +enum HoloIapItemCategory { + IAP_CATEGORY_NONE = 0; + IAP_CATEGORY_BUNDLE = 1; + IAP_CATEGORY_ITEMS = 2; + IAP_CATEGORY_UPGRADES = 3; + IAP_CATEGORY_POKECOINS = 4; +} + +enum CameraInterpolation { + CAM_INTERP_CUT = 0; + CAM_INTERP_LINEAR = 1; + CAM_INTERP_SMOOTH = 2; + CAM_INTERP_SMOOTH_ROT_LINEAR_MOVE = 3; + CAM_INTERP_DEPENDS = 4; +} + +enum CameraTarget { + CAM_TARGET_ATTACKER = 0; + CAM_TARGET_ATTACKER_EDGE = 1; + CAM_TARGET_ATTACKER_GROUND = 2; + CAM_TARGET_DEFENDER = 3; + CAM_TARGET_DEFENDER_EDGE = 4; + CAM_TARGET_DEFENDER_GROUND = 5; + CAM_TARGET_ATTACKER_DEFENDER = 6; + CAM_TARGET_ATTACKER_DEFENDER_EDGE = 7; + CAM_TARGET_DEFENDER_ATTACKER = 8; + CAM_TARGET_DEFENDER_ATTACKER_EDGE = 9; + CAM_TARGET_ATTACKER_DEFENDER_MIRROR = 11; + CAM_TARGET_SHOULDER_ATTACKER_DEFENDER = 12; + CAM_TARGET_SHOULDER_ATTACKER_DEFENDER_MIRROR = 13; + CAM_TARGET_ATTACKER_DEFENDER_WORLD = 14; +} + +enum PokemonType { + POKEMON_TYPE_NONE = 0; + POKEMON_TYPE_NORMAL = 1; + POKEMON_TYPE_FIGHTING = 2; + POKEMON_TYPE_FLYING = 3; + POKEMON_TYPE_POISON = 4; + POKEMON_TYPE_GROUND = 5; + POKEMON_TYPE_ROCK = 6; + POKEMON_TYPE_BUG = 7; + POKEMON_TYPE_GHOST = 8; + POKEMON_TYPE_STEEL = 9; + POKEMON_TYPE_FIRE = 10; + POKEMON_TYPE_WATER = 11; + POKEMON_TYPE_GRASS = 12; + POKEMON_TYPE_ELECTRIC = 13; + POKEMON_TYPE_PSYCHIC = 14; + POKEMON_TYPE_ICE = 15; + POKEMON_TYPE_DRAGON = 16; + POKEMON_TYPE_DARK = 17; + POKEMON_TYPE_FAIRY = 18; +} + +enum PokemonMovementType { + MOVEMENT_STATIC = 0; + MOVEMENT_JUMP = 1; + MOVEMENT_VERTICAL = 2; + MOVEMENT_PSYCHIC = 3; + MOVEMENT_ELECTRIC = 4; + MOVEMENT_FLYING = 5; + MOVEMENT_HOVERING = 6; +} + +enum PokemonClass { + NORMAL = 0; + LEGENDARY = 1; + MYTHIC = 2; +} + diff --git a/proto/RpcEnvelope.proto b/proto/RpcEnvelope.proto new file mode 100755 index 0000000000..9b86fc95c0 --- /dev/null +++ b/proto/RpcEnvelope.proto @@ -0,0 +1,73 @@ + +import "RpcEnum.proto"; + +message Request { + required RpcEnum.RpcDirection direction = 1; + optional int64 rpc_id = 3; + repeated Requests requests = 4; + optional Unknown6 unknown6 = 6; + optional fixed64 latitude = 7; + optional fixed64 longitude = 8; + optional fixed64 altitude = 9; + optional AuthInfo auth = 10; + optional AuthTicket auth_ticket = 11; + optional int64 unknown12 = 12; + + message Requests { + required RpcEnum.RequestMethod type = 1; + optional bytes parameters = 2; + } + + message AuthInfo { + required string provider = 1; + required JWT token = 2; + + message JWT { + required string contents = 1; + required int32 unknown13 = 2; + } + } + + message Unknown3 { + required string unknown4 = 1; + } + + message Unknown6 { + required int32 unknown1 = 1; + required Unknown2 unknown2 = 2; + + message Unknown2 { + required bytes unknown1 = 1; + } + } +} + +message Response { + required RpcEnum.RpcDirection direction = 1; + optional int64 unknown2 = 2; + optional string api_url = 3; + required Unknown6 unknown6 = 6; + optional AuthTicket auth_ticket = 7; + repeated bytes responses = 100; + + message Unknown6 { + required int32 unknown1 = 1; + required Unknown2 unknown2 = 2; + + message Unknown2 { + required bytes unknown1 = 1; + } + } + + message Unknown7 { + optional bytes unknown71 = 1; + optional int64 unknown72 = 2; + optional bytes unknown73 = 3; + } +} + +message AuthTicket { + optional bytes start = 1; + optional uint64 expire_timestamp_ms = 2; + optional bytes end = 3; +} diff --git a/proto/RpcSub.proto b/proto/RpcSub.proto new file mode 100755 index 0000000000..f53b0442e8 --- /dev/null +++ b/proto/RpcSub.proto @@ -0,0 +1,884 @@ +package RpcSub; + +import "RpcEnum.proto"; + +message GetPlayerResponse { + optional int32 unknown1 = 1; + optional Profile profile = 2; +} + +message Profile { + required int64 creation_time = 1; + optional string username = 2; + optional RpcEnum.TeamColor team = 5; + optional bytes tutorial = 7; + optional AvatarDetails avatar = 8; + optional int32 poke_storage = 9; + optional int32 item_storage = 10; + optional DailyBonus daily_bonus = 11; + optional bytes unknown12 = 12; + optional bytes unknown13 = 13; + repeated Currency currency = 14; +} + +message DailyBonus { + optional int64 NextCollectTimestampMs = 1; + optional int64 NextDefenderBonusCollectTimestampMs = 2; +} + +message Currency { + required string type = 1; + optional int32 amount = 2; +} + +message AvatarDetails { + optional int32 unknown2 = 2; + optional int32 unknown3 = 3; + optional int32 unknown9 = 9; + optional int32 unknown10 = 10; +} + +message DownloadSettingsRequest { + optional string hash = 1; +} + +message GetInventoryResponse { + optional bool success = 1; + optional InventoryDelta inventory_delta = 2; +} + +message InventoryDelta { + optional int64 original_timestamp_ms = 1; + optional int64 new_timestamp_ms = 2; + repeated InventoryItem inventory_items = 3; +} + +message InventoryItem { + optional int64 modified_timestamp_ms = 1; + optional int64 deleted_item_key = 2; + optional InventoryItemData inventory_item_data = 3; +} + +message InventoryItemData { + optional PokemonData pokemon = 1; + optional Item item = 2; + optional PokedexEntry pokedex_entry = 3; + optional PlayerStats player_stats = 4; + optional PlayerCurrency player_currency = 5; + optional PlayerCamera player_camera = 6; + optional InventoryUpgrades inventory_upgrades = 7; + optional AppliedItems applied_items = 8; + optional EggIncubators egg_incubators = 9; + optional PokemonFamily pokemon_family = 10; +} + +message Pokemon { + optional int32 id = 1; + optional RpcEnum.PokemonId pokemon_type = 2; + optional int32 cp = 3; + optional int32 stamina = 4; + optional int32 stamina_max = 5; + optional RpcEnum.PokemonMove move_1 = 6; + optional RpcEnum.PokemonMove move_2 = 7; + optional int32 deployed_fort_id = 8; + optional string owner_name = 9; + optional bool is_egg = 10; + optional int32 egg_km_walked_target = 11; + optional int32 egg_km_walked_start = 12; + optional int32 origin = 14; + optional float height_m = 15; + optional float weight_kg = 16; + optional int32 individual_attack = 17; + optional int32 individual_defense = 18; + optional int32 individual_stamina = 19; + optional int32 cp_multiplier = 20; + optional int32 pokeball = 21; + optional uint64 captured_cell_id = 22; + optional int32 battles_attacked = 23; + optional int32 battles_defended = 24; + optional int32 egg_incubator_id = 25; + optional uint64 creation_time_ms = 26; + optional int32 num_upgrades = 27; + optional int32 additional_cp_multiplier = 28; + optional int32 favorite = 29; + optional string nickname = 30; + optional int32 from_fort = 31; +} + +message Item { + optional RpcEnum.ItemType item = 1; + optional int32 count = 2; + optional bool unseen = 3; +} + +message PokedexEntry { + optional int32 pokedex_entry_number = 1; + optional int32 times_encountered = 2; + optional int32 times_captured = 3; + optional int32 evolution_stone_pieces = 4; + optional int32 evolution_stones = 5; +} + +message PlayerStats { + optional int32 level = 1; + optional int64 experience = 2; + optional int64 prev_level_xp = 3; + optional int64 next_level_xp = 4; + optional float km_walked = 5; + optional int32 pokemons_encountered = 6; + optional int32 unique_pokedex_entries = 7; + optional int32 pokemons_captured = 8; + optional int32 evolutions = 9; + optional int32 poke_stop_visits = 10; + optional int32 pokeballs_thrown = 11; + optional int32 eggs_hatched = 12; + optional int32 big_magikarp_caught = 13; + optional int32 battle_attack_won = 14; + optional int32 battle_attack_total = 15; + optional int32 battle_defended_won = 16; + optional int32 battle_training_won = 17; + optional int32 battle_training_total = 18; + optional int32 prestige_raised_total = 19; + optional int32 prestige_dropped_total = 20; + optional int32 pokemon_deployed = 21; + optional bytes pokemon_caught_by_type = 22; // TODO: repeated PokemonType ?? + optional int32 small_rattata_caught = 23; +} + +message PlayerCurrency { + optional int32 gems = 1; +} + +message PlayerCamera { + optional bool is_default_camera = 1; +} + +message InventoryUpgrades { + repeated InventoryUpgrade inventory_upgrades = 1; +} + +message InventoryUpgrade { + optional RpcEnum.ItemType item = 1; + optional RpcEnum.InventoryUpgradeType upgrade_type = 2; + optional int32 additional_storage = 3; +} + +message AppliedItems { + optional AppliedItem item = 4; +} + +message AppliedItem { + optional RpcEnum.ItemId item_type = 1; + optional RpcEnum.ItemType item_type_category = 2; + optional int64 expire_ms = 3; + optional int64 applied_ms = 4; +} + +message EggIncubators { + optional EggIncubator egg_incubator = 1; +} + +message EggIncubator { + optional string item_id = 1; + optional RpcEnum.ItemType item_type = 2; + optional RpcEnum.EggIncubatorType incubator_type = 3; + optional int32 uses_remaining = 4; + optional int64 pokemon_id = 5; // TODO: Check if is PokemonType + optional double start_km_walked = 6; + optional double target_km_walked = 7; +} + +message PokemonFamily { + optional RpcEnum.PokemonFamilyId family_id = 1; + optional int32 candy = 2; +} + +message GetMapObjectsRequest { + optional bytes cell_id = 1; + optional bytes since_timestamp_ms = 2; + optional double latitude = 3; + optional double longitude = 4; +} + +message GetMapObjectsResponse { + repeated MapCell map_cells = 1; + optional RpcEnum.MapObjectsStatus status = 2; +} + +message MapCell { + // S2 geographic area that the cell covers (http://s2map.com/) (https://code.google.com/archive/p/s2-geometry-library/) + optional uint64 s2_cell_id = 1; + optional int64 current_timestamp_ms = 2; + repeated FortData forts = 3; + repeated SpawnPoint spawn_points = 4; + repeated string deleted_objects = 6; + optional bool is_truncated_list = 7; + repeated FortSummary fort_summaries = 8; + repeated SpawnPoint decimated_spawn_points = 9; + + // Pokemon within 2 steps or less. + repeated WildPokemon wild_pokemons = 5; + // Pokemon within 1 step or none. + repeated MapPokemon catchable_pokemons = 10; + // Pokemon farther away than 2 steps, but still in the area. + repeated NearbyPokemon nearby_pokemons = 11; +} + +message FortData { + optional string id = 1; + optional int64 last_modified_timestamp_ms = 2; + optional double latitude = 3; + optional double longitude = 4; + optional bool enabled = 8; + optional RpcEnum.FortType type = 9; + + //// Fields related to gyms only + + // Team that owns the gym + optional RpcEnum.TeamColor owned_by_team = 5; + + // Highest CP Pokemon at the gym + optional RpcEnum.PokemonId guard_pokemon_id = 6; + optional int32 guard_pokemon_cp = 7; + + // Prestigate / experience of the gym + optional int64 gym_points = 10; + + // Whether someone is battling at the gym currently + optional bool is_in_battle = 11; + + //// Fields related to pokestops only + + // Timestamp when the pokestop can be activated again to get items / xp + optional int64 cooldown_complete_timestamp_ms = 14; + + optional RpcEnum.FortSponsor sponsor = 15; + optional RpcEnum.FortRenderingType rendering_type = 16; + + // Might represent the type of item applied to the pokestop, right now only lures can be applied + optional bytes active_fort_modifier = 12; + optional FortLureInfo lure_info = 13; +} + +message FortLureInfo { + optional string fort_id = 1; + optional double unknown2 = 2; + optional RpcEnum.PokemonId active_pokemon_id = 3; + optional int64 lure_expires_timestamp_ms = 4; +} + +message SpawnPoint { + optional double latitude = 2; + optional double longitude = 3; +} + +message FortSummary { + optional int32 fort_summary_id = 1; + optional int32 last_modified_timestamp_ms = 2; + optional int32 latitude = 3; + optional int32 longitude = 4; +} + +message WildPokemon { + optional fixed64 encounter_id = 1; + optional int64 last_modified_timestamp_ms = 2; + optional double latitude = 3; + optional double longitude = 4; + optional string spawnpoint_id = 5; + optional PokemonData pokemon_data = 7; + optional int32 time_till_hidden_ms = 11; +} + +message PokemonData { + optional fixed64 id = 1; + optional RpcEnum.PokemonId pokemon_id = 2; + optional int32 cp = 3; + optional int32 stamina = 4; + optional int32 stamina_max = 5; + optional RpcEnum.PokemonMove move_1 = 6; + optional RpcEnum.PokemonMove move_2 = 7; + optional int32 deployed_fort_id = 8; + optional string owner_name = 9; + optional bool is_egg = 10; + optional int32 egg_km_walked_target = 11; + optional int32 egg_km_walked_start = 12; + optional int32 origin = 14; + optional float height_m = 15; + optional float weight_kg = 16; + optional int32 individual_attack = 17; + optional int32 individual_defense = 18; + optional int32 individual_stamina = 19; + optional int32 cp_multiplier = 20; + optional int32 pokeball = 21; + optional uint64 captured_cell_id = 22; + optional int32 battles_attacked = 23; + optional int32 battles_defended = 24; + optional int32 egg_incubator_id = 25; + optional uint64 creation_time_ms = 26; + optional int32 num_upgrades = 27; + optional int32 additional_cp_multiplier = 28; + optional int32 favorite = 29; + optional string nickname = 30; + optional int32 from_fort = 31; +} + +message MapPokemon { + optional string spawnpoint_id = 1; + optional fixed64 encounter_id = 2; + optional RpcEnum.PokemonId pokemon_id = 3; + // After this timestamp, the pokemon will be gone. + optional int64 expiration_timestamp_ms = 4; + optional double latitude = 5; + optional double longitude = 6; +} + +message NearbyPokemon { + optional RpcEnum.PokemonId pokemon_id = 1; + optional float distance_in_meters = 2; + optional fixed64 encounter_id = 3; +} + +message DownloadSettingsResponse { + optional string error = 1; + optional string hash = 2; + optional GlobalSettings settings = 3; +} + +message GlobalSettings { + optional FortSettings fort_settings = 2; + optional MapSettings map_settings = 3; + optional LevelSettings level_settings = 4; + optional InventorySettings inventory_settings = 5; + optional string minimum_client_version = 6; +} + +message FortSettings { + optional double interaction_range_meters = 1; + optional int32 max_total_deployed_pokemon = 2; + optional int32 max_player_deployed_pokemon = 3; + optional double deploy_stamina_multiplier = 4; + optional double deploy_attack_multiplier = 5; + optional double far_interaction_range_meters = 6; +} + +message MapSettings { + optional double pokemon_visible_range = 1; + optional double poke_nav_range_meters = 2; + optional double encounter_range_meters = 3; + optional float get_map_objects_min_refresh_seconds = 4; + optional float get_map_objects_max_refresh_seconds = 5; + optional float get_map_objects_min_distance_meters = 6; + optional string google_maps_api_key = 7; +} + +message LevelSettings { + optional double trainer_cp_modifier = 2; + optional double trainer_difficulty_modifier = 3; +} + +message InventorySettings { + optional int32 max_pokemon = 1; + optional int32 max_bag_items = 2; + optional int32 base_pokemon = 3; + optional int32 base_bag_items = 4; + optional int32 base_eggs = 5; +} + +message PlayerUpdateRequest { + optional double latitude = 1; + optional double longitude = 2; +} + +message PlayerUpdateResponse { + repeated WildPokemon wild_pokemons = 1; + repeated FortData forts = 2; + optional int32 forts_nearby = 3; +} + +message DownloadItemTemplatesRequest { + // No message needed. +} + +message DownloadItemTemplatesResponse { + optional bool success = 1; + repeated ItemTemplate item_templates = 2; + optional uint64 timestamp_ms = 3; + + message ItemTemplate { + optional string template_id = 1; + + optional PokemonSettings pokemon_settings = 2; + optional ItemSettings item_settings = 3; + optional MoveSettings move_settings = 4; + optional MoveSequenceSettings move_sequence_settings = 5; + optional TypeEffectiveSettings type_effective = 8; + optional BadgeSettings badge_settings = 10; + optional CameraSettings camera = 11; + optional PlayerLevelSettings player_level = 12; + optional GymLevelSettings gym_level = 13; + optional GymBattleSettings battle_settings = 14; + optional EncounterSettings encounter_settings = 15; + optional IapItemDisplay iap_item_display = 16; + optional IapSettings iap_settings = 17; + optional PokemonUpgradeSettings pokemon_upgrades = 18; + optional EquippedBadgeSettings equipped_badges = 19; + } +} + +message UseItemCaptureRequest { + optional RpcEnum.ItemId item_id = 1; + optional fixed64 encounter_id = 2; + optional string spawn_point_guid = 3; +} + +message UseItemCaptureResponse { + optional bool success = 1; + optional double item_capture_mult = 2; + optional double item_flee_mult = 3; + optional bool stop_movement = 4; + optional bool stop_attack = 5; + optional bool target_max = 6; + optional bool target_slow = 7; +} + +message ReleasePokemonRequest { + optional fixed64 pokemon_id = 1; +} + +message ReleasePokemonResponse { + optional Result result = 1; + optional int32 candy_awarded = 2; + + enum Result { + UNSET = 0; + SUCCESS = 1; + POKEMON_DEPLOYED = 2; + FAILED = 3; + ERROR_POKEMON_IS_EGG = 4; + } +} + +message GetHatchedEggsRequest { + // No message needed. +} + +// Confirm if this is correct, I think that it should be "repeated HatchedEgg hatched_eggs" or something like that. +message GetHatchedEggsResponse { + optional bool success = 1; + repeated uint64 pokemon_id = 2 [packed=true]; // Might be POGOProtos.Enums.Pokemon + repeated int32 experience_awarded = 3; + repeated int32 candy_awarded = 4; + repeated int32 stardust_awarded = 5; +} + +message FortSearchRequest { + optional string fort_id = 1; + optional double player_latitude = 2; + optional double player_longitude = 3; + optional double fort_latitude = 4; + optional double fort_longitude = 5; +} + +message FortSearchResponse { + optional Result result = 1; + repeated ItemAward items_awarded = 2; + optional int32 gems_awarded = 3; + optional PokemonData pokemon_data_egg = 4; + optional int32 experience_awarded = 5; + optional int64 cooldown_complete_timestamp_ms = 6; + optional int32 chain_hack_sequence_number = 7; + + message ItemAward { + optional RpcEnum.ItemId item_id = 1; + optional int32 item_count = 2; + } + + enum Result { + NO_RESULT_SET = 0; + SUCCESS = 1; + OUT_OF_RANGE = 2; + IN_COOLDOWN_PERIOD = 3; + INVENTORY_FULL = 4; + } +} + +message FortDetailsRequest { + optional string fort_id = 1; + optional double latitude = 2; + optional double longitude = 3; +} + +message FortDetailsResponse { + optional string fort_id = 1; + optional RpcEnum.TeamColor team_color = 2; + optional PokemonData pokemon_data = 3; + optional string name = 4; + repeated string image_urls = 5; + optional int32 fp = 6; + optional int32 stamina = 7; + optional int32 max_stamina = 8; + optional RpcEnum.FortType type = 9; + optional double latitude = 10; + optional double longitude = 11; + optional string description = 12; + repeated FortModifier modifiers = 13; +} + +message FortModifier { + optional RpcEnum.ItemId item_id = 1; + optional int64 expiration_timestamp_ms = 2; + optional string deployer_player_codename = 3; +} + +message EncounterRequest { + optional fixed64 encounter_id = 1; + optional string spawnpoint_id = 2; + optional double player_latitude = 3; + optional double player_longitude = 4; +} + +message EncounterResponse { + optional WildPokemon wild_pokemon = 1; + optional Background background = 2; + optional Status status = 3; + optional CaptureProbability capture_probability = 4; + + enum Background { + PARK = 0; + DESERT = 1; + } + + enum Status { + ENCOUNTER_ERROR = 0; + ENCOUNTER_SUCCESS = 1; + ENCOUNTER_NOT_FOUND = 2; + ENCOUNTER_CLOSED = 3; + ENCOUNTER_POKEMON_FLED = 4; + ENCOUNTER_NOT_IN_RANGE = 5; + ENCOUNTER_ALREADY_HAPPENED = 6; + POKEMON_INVENTORY_FULL = 7; + } +} + +message CaptureProbability { + repeated RpcEnum.ItemId pokeball_type = 1; + repeated float capture_probability = 2; + optional double reticle_difficulty_scale = 12; +} + +message DiskEncounterRequest { + optional fixed64 encounter_id = 1; + optional string fort_id = 2; + optional double player_latitude = 3; + optional double player_longitude = 4; +} + +message DiskEncounterResponse { + optional Result result = 1; + optional PokemonData pokemon_data = 2; + optional CaptureProbability capture_probability = 3; + + enum Result { + UNKNOWN = 0; + SUCCESS = 1; + NOT_AVAILABLE = 2; + NOT_IN_RANGE = 3; + ENCOUNTER_ALREADY_FINISHED = 4; + POKEMON_INVENTORY_FULL = 5; + } +} + +message CatchPokemonRequest { + optional fixed64 encounter_id = 1; + optional int32 pokeball = 2; + optional double normalized_reticle_size = 3; + optional string spawn_point_guid = 4; + optional bool hit_pokemon = 5; + optional double spin_modifier = 6; + optional double NormalizedHitPosition = 7; +} + +message CatchPokemonResponse { + optional CatchStatus status = 1; + optional double miss_percent = 2; + optional uint64 captured_pokemon_id = 3; + optional CaptureScore scores = 4; + + enum CatchStatus { + CATCH_ERROR = 0; + CATCH_SUCCESS = 1; + CATCH_ESCAPE = 2; + CATCH_FLEE = 3; + CATCH_MISSED = 4; + } +} + +message CaptureScore { + repeated RpcEnum.ActivityType activity_type = 1; + repeated int32 xp = 2; + repeated int32 candy = 3; + repeated int32 stardust = 4; +} + +message CheckAwardedBadgesRequest { + // No message needed. +} + +// Confirm if this is correct, I think that it should be "repeated AwardedBadge awarded_badges" or something like that. +message CheckAwardedBadgesResponse { + optional bool success = 1; + repeated RpcEnum.BadgeType awarded_badges = 2; + repeated int32 awarded_badge_levels = 3; +} + +message EquippedBadgeSettings { + optional int64 equip_badge_cooldown_ms = 1; + repeated float catch_probability_bonus = 2; + repeated float flee_probability_bonus = 3; +} + +message PokemonUpgradeSettings { + optional int32 upgrades_per_level = 1; + optional int32 allowed_levels_above_player = 2; + repeated int32 candy_cost = 3; + repeated int32 stardust_cost = 4; +} + +message IapSettings { + optional int32 daily_bonus_coins = 1; + repeated int32 daily_defender_bonus_per_pokemon = 2; + optional int32 daily_defender_bonus_max_defenders = 3; + repeated string daily_defender_bonus_currency = 4; + optional int64 min_time_between_claims_ms = 5; + optional bool daily_bonus_enabled = 6; + optional bool daily_defender_bonus_enabled = 7; +} + +message IapItemDisplay { + optional string sku = 1; + optional RpcEnum.HoloIapItemCategory category = 2; + optional int32 sort_order = 3; + repeated RpcEnum.ItemId item_ids = 4; + repeated int32 counts = 5; +} + +message EncounterSettings { + optional float spin_bonus_threshold = 1; + optional float excellent_throw_threshold = 2; + optional float great_throw_threshold = 3; + optional float nice_throw_threshold = 4; + optional int32 milestone_threshold = 5; +} + +message GymBattleSettings { + optional float energy_per_sec = 1; + optional float dodge_energy_cost = 2; + optional float retarget_seconds = 3; + optional float enemy_attack_interval = 4; + optional float attack_server_interval = 5; + optional float round_duration_seconds = 6; + optional float bonus_time_per_ally_seconds = 7; + optional int32 maximum_attackers_per_battle = 8; + optional float same_type_attack_bonus_multiplier = 9; + optional int32 maximum_energy = 10; + optional float energy_delta_per_health_lost = 11; + optional int32 dodge_duration_ms = 12; + optional int32 minimum_player_level = 13; + optional int32 swap_duration_ms = 14; +} + +message GymLevelSettings { + repeated int32 required_experience = 1; + repeated int32 leader_slots = 2; + repeated int32 trainer_slots = 3; + repeated int32 search_roll_bonus = 4; +} + +message PlayerLevelSettings { + repeated int32 rank_num = 1; + repeated int32 required_experience = 2; + repeated float cp_multiplier = 3; + optional int32 max_egg_player_level = 4; + optional int32 max_encounter_player_level = 5; +} + +message CameraSettings { + optional string next_camera = 1; + repeated RpcEnum.CameraInterpolation interpolation = 2; + repeated RpcEnum.CameraTarget target_type = 3; + repeated float ease_in_speed = 4; + repeated float east_out_speed = 5; + repeated float duration_seconds = 6; + repeated float wait_seconds = 7; + repeated float transition_seconds = 8; + repeated float angle_degree = 9; + repeated float angle_offset_degree = 10; + repeated float pitch_degree = 11; + repeated float pitch_offset_degree = 12; + repeated float roll_degree = 13; + repeated float distance_meters = 14; + repeated float height_percent = 15; + repeated float vert_ctr_ratio = 16; +} + +message BadgeSettings { + optional RpcEnum.BadgeType badge_type = 1; + optional int32 badge_rank = 2; + repeated int32 targets = 3; +} + +message TypeEffectiveSettings { + repeated float attack_scalar = 1; + optional RpcEnum.PokemonType attack_type = 2; +} + +message MoveSequenceSettings { + repeated string sequence = 1; +} + +message MoveSettings { + optional RpcEnum.PokemonMovementType movement_id = 1; + optional int32 animation_id = 2; + optional RpcEnum.PokemonType pokemon_type = 3; + optional float power = 4; + optional float accuracy_chance = 5; + optional float critical_chance = 6; + optional float heal_scalar = 7; + optional float stamina_loss_scalar = 8; + optional int32 trainer_level_min = 9; + optional int32 trainer_level_max = 10; + optional string vfx_name = 11; + optional int32 duration_ms = 12; + optional int32 damage_window_start_ms = 13; + optional int32 damage_window_end_ms = 14; + optional int32 energy_delta = 15; +} + +message PokemonSettings { + optional RpcEnum.PokemonId pokemon_id = 1; + optional float model_scale = 3; + optional RpcEnum.PokemonType type = 4; + optional RpcEnum.PokemonType type_2 = 5; + optional CameraAttributes camera = 6; + optional EncounterAttributes encounter = 7; + optional StatsAttributes stats = 8; + repeated RpcEnum.PokemonMove quick_moves = 9; + repeated RpcEnum.PokemonMove cinematic_moves = 10; + repeated float animation_time = 11; + repeated RpcEnum.PokemonId evolution_ids = 12; + optional int32 evolution_pips = 13; + optional RpcEnum.PokemonClass class = 14; + optional float pokedex_height_m = 15; + optional float pokedex_weight_kg = 16; + optional RpcEnum.PokemonId parent_pokemon_id = 17; + optional float height_std_dev = 18; + optional float weight_std_dev = 19; + optional float km_distance_to_hatch = 20; + optional RpcEnum.PokemonFamilyId family_id = 21; + optional int32 candy_to_evolve = 22; +} + +message CameraAttributes { + optional float disk_radius_m = 1; + optional float cylinder_radius_m = 2; + optional float cylinder_height_m = 3; + optional float cylinder_ground_m = 4; + optional float shoulder_mode_scale = 5; +} + +message EncounterAttributes { + optional float base_capture_rate = 1; + optional float base_flee_rate = 2; + optional float collision_radius_m = 3; + optional float collision_height_m = 4; + optional float collision_head_radius_m = 5; + optional RpcEnum.PokemonMovementType movement_type = 6; + optional float movement_timer_s = 7; + optional float jump_time_s = 8; + optional float attack_timer_s = 9; +} + +message StatsAttributes { + optional int32 base_stamina = 1; + optional int32 base_attack = 2; + optional int32 base_defense = 3; + optional int32 dodge_energy_delta = 8; +} + +message ItemSettings { + optional RpcEnum.ItemId item_id = 1; + optional RpcEnum.ItemType item_type = 2; + optional RpcEnum.ItemCategory category = 3; + optional float drop_freq = 4; + optional int32 drop_trainer_level = 5; + + // One of the below attributes will be set in the response, the other will be null. + + optional PokeballAttributes pokeball = 6; + optional PotionAttributes potion = 7; + optional ReviveAttributes revive = 8; + optional BattleAttributes battle = 9; + optional FoodAttributes food = 10; + optional InventoryUpgradeAttributes inventory_upgrade = 11; + optional ExperienceBoostAttributes xp_boost = 12; + optional IncenseAttributes incense = 13; + optional EggIncubatorAttributes egg_incubator = 14; + optional FortModifierAttributes fort_modifier = 15; +} + +message BattleAttributes { + optional float sta_percent = 1; +} + +message EggIncubatorAttributes { + optional RpcEnum.EggIncubatorType incubator_type = 1; + optional int32 uses = 2; + optional float distance_multiplier = 3; +} + +message ExperienceBoostAttributes { + optional float xp_multiplier = 1; + optional int32 boost_duration_ms = 2; +} + +message FoodAttributes { + repeated RpcEnum.ItemEffect item_effect = 1; + repeated float item_effect_percent = 2; + optional float growth_percent = 3; +} + +message FortModifierAttributes { + optional int32 modifier_lifetime_seconds = 1; + optional int32 troy_disk_num_pokemon_spawned = 2; +} + +message IncenseAttributes { + optional int32 incense_lifetime_seconds = 1; + repeated RpcEnum.PokemonType pokemon_type = 2; + optional float pokemon_incense_type_probability = 3; + optional int32 standing_time_between_encounters_seconds = 4; + optional int32 moving_time_between_encounter_seconds = 5; + optional int32 distance_required_for_shorter_interval_meters = 6; + optional int32 pokemon_attracted_length_sec = 7; +} + +message InventoryUpgradeAttributes { + optional int32 additional_storage = 1; + optional RpcEnum.InventoryUpgradeType upgrade_type = 2; +} + +message PokeballAttributes { + optional RpcEnum.ItemEffect item_effect = 1; + optional float capture_multi = 2; + optional float capture_multi_effect = 3; + optional float item_effect_mod = 4; +} + +message PotionAttributes { + optional float sta_percent = 1; + optional int32 sta_amount = 2; +} + +message ReviveAttributes { + optional float sta_percent = 1; +}