From 7db29979e423ea00e52c39fa55fa0707ff246cd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nagy=20P=C3=A9ter?= Date: Wed, 30 Nov 2016 13:59:06 +0100 Subject: [PATCH] - 0.6.1 -> 0.6.2 - Evolve pokemon is working - Use potions is working - Use revives is working - Pokemon nicknames saved in MySQL Known issues/bugs: - CP calculation when evolve needs a new calc function - Candies to evolve function don't work - Eevee don't have evolutions (maybe outdated GAMEMASTER file) - potions/revives stamina value is very static maybe needs to use item templates --- package.json | 2 +- src/models/Player/index.js | 26 +++++++++- src/models/Player/packets/EvolvePokemon.js | 36 +++++++++++++ src/models/Player/packets/NicknamePokemon.js | 9 ++-- src/models/Player/packets/UsePotion.js | 53 ++++++++++++++++++++ src/models/Player/packets/UseRevive.js | 40 +++++++++++++++ src/models/Player/packets/index.js | 5 +- src/models/Pokemon/action.js | 5 +- src/models/Pokemon/index.js | 38 ++++++++++++++ 9 files changed, 204 insertions(+), 10 deletions(-) create mode 100644 src/models/Player/packets/EvolvePokemon.js create mode 100644 src/models/Player/packets/UsePotion.js create mode 100644 src/models/Player/packets/UseRevive.js diff --git a/package.json b/package.json index c385bc9..ddc0b9f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "POGOServer", - "version": "0.6.1", + "version": "0.6.2", "description": "", "repository": { "type": "git", diff --git a/src/models/Player/index.js b/src/models/Player/index.js index 5150dc7..7b5b93d 100644 --- a/src/models/Player/index.js +++ b/src/models/Player/index.js @@ -9,6 +9,8 @@ import Contact from "./Contact"; import CandyBag from "./CandyBag"; import Tutorial from "./Tutorial"; import Currency from "./Currency"; +import addEntry from "./PokeDex"; + import MapObject from "../World/MapObject"; @@ -199,7 +201,16 @@ export default class Player extends MapObject { case "CLAIM_CODENAME": resolve(this.ClaimCodename(msg)); break; - }; + case "EVOLVE_POKEMON": + resolve(this.EvolvePokemon(msg)); + break; + case "USE_ITEM_POTION": + resolve(this.UsePotion(msg)); + break; + case "USE_ITEM_REVIVE": + resolve(this.UseRevive(msg)); + break; + }; }); } @@ -301,7 +312,14 @@ export default class Player extends MapObject { } }; } - + removeItems(rewards) { + for (let key in rewards) { + let name = ENUM.getNameById(ENUM.ITEMS, key << 0).replace("ITEM_", "").toLowerCase(); + if (this.bag.hasOwnProperty(name)) { + this.bag[name] -= rewards[key] << 0; + } + }; + } /** * @param {WildPokemon} pkmn * @param {String} ball @@ -313,6 +331,8 @@ export default class Player extends MapObject { this.currentEncounter = null; pkmn.caughtBy(this); pkmn.pokeball = ball; + try{this.pokeDex.addEntry(pkmn.dexNumber,1,1);} + catch(e){print(e,31);} return new Promise((resolve) => { pkmn.owner = this; pkmn.insertIntoDatabase().then((insertId) => { @@ -351,6 +371,8 @@ export default class Player extends MapObject { }); }); } + + /** * @param {string} codename diff --git a/src/models/Player/packets/EvolvePokemon.js b/src/models/Player/packets/EvolvePokemon.js new file mode 100644 index 0000000..6ffa6c3 --- /dev/null +++ b/src/models/Player/packets/EvolvePokemon.js @@ -0,0 +1,36 @@ +import POGOProtos from "pokemongo-protobuf"; +import print from "../../../print"; +import * as _calc from "../../Pokemon/calc"; +/** + * @param {Object} msg + * @return {Buffer} + */ +export default function EvolvePokemon(msg) { + + + let buffer = null; + + let pkmn = this.party.getPkmnById(msg.pokemon_id); + + if (pkmn) { + if (pkmn.evolve()) { + buffer = { result: "SUCCESS" }; + } else { + buffer = { result: "FAILED_INSUFFICIENT_RESOURCES" }; + } + pkmn.calcStats(pkmn.owner); + pkmn.calcMoves(); + buffer.evolved_pokemon_data = pkmn.serialize(); + pkmn.updateDatabase(); + buffer.experience_awarded = 500; + buffer.candy_awarded = 0; + } + else { + buffer = { result: "FAILED_POKEMON_MISSING" }; + } + + return ( + POGOProtos.serialize(buffer, "POGOProtos.Networking.Responses.EvolvePokemonResponse") + ); + +} \ No newline at end of file diff --git a/src/models/Player/packets/NicknamePokemon.js b/src/models/Player/packets/NicknamePokemon.js index c787868..c77246c 100644 --- a/src/models/Player/packets/NicknamePokemon.js +++ b/src/models/Player/packets/NicknamePokemon.js @@ -10,12 +10,13 @@ export default function NicknamePokemon(msg) { let schema = "POGOProtos.Networking.Responses.NicknamePokemonResponse"; let pkmn = this.party.getPkmnById(msg.pokemon_id); - buffer = { result: null }; - if (pkmn) pkmn.setNickname(String(msg.nickname)); - buffer.result = pkmn ? "SUCCESS" : "ERROR_INVALID_NICKNAME"; - + //if (pkmn) {pkmn.setNickname(String(msg.nickname)); + pkmn.nickname = msg.nickname; + pkmn.updateDatabase(); + buffer.result = "SUCCESS"; //: "ERROR_INVALID_NICKNAME"; + // } return (POGOProtos.serialize(buffer, schema)); } \ No newline at end of file diff --git a/src/models/Player/packets/UsePotion.js b/src/models/Player/packets/UsePotion.js new file mode 100644 index 0000000..d4937f3 --- /dev/null +++ b/src/models/Player/packets/UsePotion.js @@ -0,0 +1,53 @@ +import POGOProtos from "pokemongo-protobuf"; +import print from "../../../print"; +import * as _calc from "../../Pokemon/calc"; +/** + * @param {Object} msg + * @return {Buffer} + */ +export default function UsePotion(msg) { + + + let buffer = null; + buffer = { result: "SUCCESS"}; + let pkmn = this.party.getPkmnById(msg.pokemon_id); + let stamina; + let items; + switch(msg.item_id){ + case "ITEM_POTION": + stamina =20; + buffer.stamina=20; + items = {"101":1}; + break; + case "ITEM_SUPER_POTION": + stamina =50; + buffer.stamina=50; + items = {"102":1}; + break; + case "ITEM_HYPER_POTION": + stamina =200; + buffer.stamina=200; + items = {"103":1}; + break; + case "ITEM_MAX_POTION": + stamina =pkmn.staminaMax; + buffer.stamina=pkmn.staminaMax; + items = {"104":1}; + break; + +} + if((pkmn.stamina+stamina)<= pkmn.staminaMax){ + pkmn.stamina = pkmn.stamina+stamina; + pkmn.updateDatabase(); + this.removeItems(items); + } else { + pkmn.stamina = pkmn.staminaMax; + pkmn.updateDatabase(); + this.removeItems(items); + } + + return ( + POGOProtos.serialize(buffer, "POGOProtos.Networking.Responses.UseItemPotionResponse") + ); + +} \ No newline at end of file diff --git a/src/models/Player/packets/UseRevive.js b/src/models/Player/packets/UseRevive.js new file mode 100644 index 0000000..27e2aab --- /dev/null +++ b/src/models/Player/packets/UseRevive.js @@ -0,0 +1,40 @@ +import POGOProtos from "pokemongo-protobuf"; +import print from "../../../print"; +import * as _calc from "../../Pokemon/calc"; +/** + * @param {Object} msg + * @return {Buffer} + */ +export default function UseRevive(msg) { + + + let buffer = null; + buffer = { result: "SUCCESS"}; + let pkmn = this.party.getPkmnById(msg.pokemon_id); + let stamina; + let items; + switch(msg.item_id){ + case "ITEM_REVIVE": + stamina =0.5; + buffer.stamina=20; + items = {"201":1}; + break; + case "ITEM_MAX_REVIVE": + stamina =1; + buffer.stamina=50; + items = {"202":1}; + break; + + +} + + pkmn.stamina = pkmn.staminaMax*stamina; + pkmn.updateDatabase(); + this.removeItems(items); + + + return ( + POGOProtos.serialize(buffer, "POGOProtos.Networking.Responses.UseItemReviveResponse") + ); + +} \ No newline at end of file diff --git a/src/models/Player/packets/index.js b/src/models/Player/packets/index.js index 5a1fefc..485adf7 100644 --- a/src/models/Player/packets/index.js +++ b/src/models/Player/packets/index.js @@ -12,4 +12,7 @@ export GetPlayerProfile from "./GetPlayerProfile"; export SetFavoritePokemon from "./SetFavoritePokemon"; export CheckAwardedBadges from "./CheckAwardedBadges"; export RecycleInventoryItem from "./RecycleInventoryItem"; -export ClaimCodename from "./ClaimCodename"; \ No newline at end of file +export ClaimCodename from "./ClaimCodename"; +export EvolvePokemon from "./EvolvePokemon"; +export UsePotion from "./UsePotion"; +export UseRevive from "./UseRevive"; \ No newline at end of file diff --git a/src/models/Pokemon/action.js b/src/models/Pokemon/action.js index b4d6b5f..df4cb35 100644 --- a/src/models/Pokemon/action.js +++ b/src/models/Pokemon/action.js @@ -33,8 +33,8 @@ export function powerUp() { export function evolve() { let pkmnTmpl = this.getPkmnTemplate(this.dexNumber); let ownerPkmnCandies = this.owner.candyBag.getCandy(this.dexNumber); - let candiesToEvolve = this.candiesToEvolve(); - if (ownerPkmnCandies < candiesToEvolve()) { + let candiesToEvolve = 1;//this.candiesToEvolve(); + if (ownerPkmnCandies < 1/*candiesToEvolve()*/) { return print(`You have ${ownerPkmnCandies}/${candiesToEvolve} candies to evolve ${this.getPkmnName()}!`, 31); } let evolutions = pkmnTmpl.evolution_ids; @@ -62,5 +62,6 @@ export function evolveInto(ev) { } let evTmpl = this.getPkmnTemplate(evId); print(`${this.owner.username} successfully evolved ${this.getPkmnName()} into ${evName}`); + this.dexNumber = evId; return (true); } \ No newline at end of file diff --git a/src/models/Pokemon/index.js b/src/models/Pokemon/index.js index e9fb321..e8451b1 100644 --- a/src/models/Pokemon/index.js +++ b/src/models/Pokemon/index.js @@ -256,6 +256,44 @@ export default class Pokemon extends MapObject { }); }); } + updateDatabase() { + let query = ` + UPDATE ${CFG.MYSQL_OWNED_PKMN_TABLE} SET + owner_id=?, + dex_number=?, + cp=?, + stamina=?, + stamina_max=?, + move_1=?, + move_2=?, + height_m=?, + weight_kg=?, + individual_attack=?, + individual_defense=?, + individual_stamina=?, + cp_multiplier=?, + pokeball=?, + favorite=?, + nickname=? + WHERE + id=? + `; + let data = [ + this.owner.uid, this.dexNumber, this.cp, + this.stamina, this.staminaMax, + this.move1, this.move2, + this.height, this.weight, + this.ivAttack, this.ivDefense, this.ivStamina, + this.cpMultiplier, this.pokeball, this.favorite, this.nickname,this.uid || "" + ]; + return new Promise((resolve) => { + this.owner.world.db.query(query, data, (e, res) => { + if (e) return print(e, 31); + resolve(res); + }); + }); + } + /** * @return {Object}