This commit is contained in:
chaze117 2016-12-03 03:34:14 +00:00 committed by GitHub
commit 500225d212
14 changed files with 256 additions and 23 deletions

View File

@ -1,6 +1,6 @@
{
"name": "POGOServer",
"version": "0.6.1",
"version": "0.6.2",
"description": "",
"repository": {
"type": "git",

View File

@ -1,7 +1,6 @@
import { GAME_MASTER } from "../../../shared";
import ENUM from "../../../enum";
/**
* @class CandyBag
*/
@ -70,9 +69,8 @@ export default class CandyBag {
* @return {Number}
*/
getCandy(dex) {
return (
this.getCandyByDexNumber(dex)
);
let candy = this.getCandyByDexNumber(dex);
return (candy.amount);
}
/**

View File

@ -30,9 +30,9 @@ export default class Info {
this.levelReward = false;
this.kmWalked = 0;
this.pkmnEncountered = 1;
this.uniquePokedexEntries = 1;
this.pkmnCaptured = 1;
this.pkmnEncountered = 151;
this.uniquePokedexEntries = 100;
this.pkmnCaptured = 101;
this.pokeStopVisits = 2;
this.pokeballsThrown = 3;
this.eggsHatched = 0;
@ -41,6 +41,8 @@ export default class Info {
this.maxPkmnStorage = 250;
this.maxItemStorage = 350;
this.LuckyEggExp = 0;
}
@ -48,7 +50,7 @@ export default class Info {
return (this._exp);
}
set exp(value) {
this._exp = value;
this._exp = value;
this.updatePrevNextExp();
}
@ -58,6 +60,7 @@ export default class Info {
set level(value) {
this._level = value;
this.updatePrevNextExp();
}
get team() {
@ -108,6 +111,8 @@ export default class Info {
* @param {Number} exp
*/
upgradeExp(exp) {
if(this.LuckyEggExp !=0 && this.LuckyEggExp > new Date() ){exp = exp*2;}
print(exp);
if (!this.maxLevelReached()) {
let currentLevelExp = this.getLevelExp(this.level);
let nextLevelExp = this.getLevelExp(this.level + 1);

View File

@ -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";
@ -143,7 +145,7 @@ export default class Player extends MapObject {
this.isIOS = sig.device_info.device_brand === "Apple";
this.isAndroid = !this.isIOS;
this.platform = this.isIOS ? "ios" : "android";
print(`${this.email} is playing with an ${this.isIOS ? "Apple" : "Android"} device!`, 36);
print(`${this.username} is playing with an ${this.isIOS ? "Apple" : "Android"} device!`, 36);
}
}
}
@ -199,7 +201,19 @@ 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;
case "USE_ITEM_XP_BOOST":
resolve(this.UseXpBoost(msg));
break;
};
});
}
@ -301,13 +315,22 @@ 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
*/
catchPkmn(pkmn, ball) {
this.info.exp += 100;
let exp=100;
if(this.info.LuckyEggExp !=0 && this.info.LuckyEggExp > new Date() ){exp = exp*2;}
this.info.exp += exp;
this.info.stardust += 100;
this.info.pkmnCaptured += 1;
this.currentEncounter = null;
@ -330,7 +353,7 @@ export default class Player extends MapObject {
captured_pokemon_id: pkmn.uid,
capture_award: {
activity_type: ["ACTIVITY_CATCH_POKEMON"],
xp: [100],
xp: [exp],
candy: [3],
stardust: [100]
}
@ -351,6 +374,8 @@ export default class Player extends MapObject {
});
});
}
/**
* @param {string} codename

View File

@ -0,0 +1,35 @@
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.calcMoves();
pkmn.cp = pkmn.calcCP(pkmn.owner);
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")
);
}

View File

@ -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));
}

View File

@ -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")
);
}

View File

@ -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")
);
}

View File

@ -0,0 +1,25 @@
import POGOProtos from "pokemongo-protobuf";
import print from "../../../print";
/**
* @param {Object} msg
* @return {Buffer}
*/
export default function UseXpBoost(msg) {
let buffer = null;
buffer = { result: "SUCCESS",
applied_items:{item:[
{
item_id: msg.item_id,
item_type: "ITEM_TYPE_XP_BOOST",
expire_ms: +new Date()+1800000 ,
applied_ms:+new Date()
}
]}};
this.removeItems({"301":1});
this.info.LuckyEggExp = +new Date()+1800000;
return (
POGOProtos.serialize(buffer, "POGOProtos.Networking.Responses.UseItemXpBoostResponse")
);
}

View File

@ -12,4 +12,8 @@ export GetPlayerProfile from "./GetPlayerProfile";
export SetFavoritePokemon from "./SetFavoritePokemon";
export CheckAwardedBadges from "./CheckAwardedBadges";
export RecycleInventoryItem from "./RecycleInventoryItem";
export ClaimCodename from "./ClaimCodename";
export ClaimCodename from "./ClaimCodename";
export EvolvePokemon from "./EvolvePokemon";
export UsePotion from "./UsePotion";
export UseRevive from "./UseRevive";
export UseXpBoost from "./UseXpBoost";

View File

@ -34,7 +34,7 @@ export function evolve() {
let pkmnTmpl = this.getPkmnTemplate(this.dexNumber);
let ownerPkmnCandies = this.owner.candyBag.getCandy(this.dexNumber);
let candiesToEvolve = this.candiesToEvolve();
if (ownerPkmnCandies < candiesToEvolve()) {
if (ownerPkmnCandies < candiesToEvolve) {
return print(`You have ${ownerPkmnCandies}/${candiesToEvolve} candies to evolve ${this.getPkmnName()}!`, 31);
}
let evolutions = pkmnTmpl.evolution_ids;
@ -57,10 +57,12 @@ export function evolveInto(ev) {
let evName = _toCC(ev);
let evId = pokename.getPokemonIdByName(evName);
if (evId <= 0) {
print(`Failed at retrieving id for pokemon ${ev}`, 31);
print(`Failed at retrieving id for pokemon ${ev}`, 31);
return (false);
}
let evTmpl = this.getPkmnTemplate(evId);
print(`${this.owner.username} successfully evolved ${this.getPkmnName()} into ${evName}`);
this.dexNumber = evId;
return (true);
}

View File

@ -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}

View File

@ -15,11 +15,13 @@ export default function FortSearch(msg) {
this.getFortDataById(msg.fort_id).then((fort) => {
if (!fort) return void 0;
player.consumeFortRewards(fort);
let exp = fort.experience;
// TODO: disable rewarding when on cooldown
let buffer = ({
if(player.info.LuckyEggExp !=0 && player.info.LuckyEggExp > new Date() ){exp = exp*2;}
let buffer = ({
result: "SUCCESS",
items_awarded: fort.serializeRewards(),
experience_awarded: fort.experience,
experience_awarded: exp,
cooldown_complete_timestamp_ms: +new Date() + fort.cooldown,
chain_hack_sequence_number: 2
});

View File

@ -16,6 +16,7 @@ export function parseMessage(req, type) {
let proto = `POGOProtos.Networking.Requests.Messages.${type}Message`;
if (req.request_message) {
try {
return (this.parseProtobuf(req.request_message, proto));
} catch (e) {
print(`Failed to parse ${type}: ${e}`, 31);
@ -53,6 +54,10 @@ export function processResponse(player, req) {
case "CHECK_AWARDED_BADGES":
case "SET_FAVORITE_POKEMON":
case "RECYCLE_INVENTORY_ITEM":
case "EVOLVE_POKEMON":
case "USE_ITEM_POTION":
case "USE_ITEM_REVIVE":
case "USE_ITEM_XP_BOOST":
player.getPacket(req.request_type, msg).then((result) => {
resolve(result);
});