void DropItemHandler::handle(InPacket& recv) const { int8_t mode = recv.readbyte(); int32_t oid = recv.readint(); bool meso = recv.readbool(); int32_t itemid = recv.readint(); int32_t owner = recv.readint(); int8_t pickuptype = recv.readbyte(); Point<int16_t> dropto = recv.readpoint(); recv.skip(4); Point<int16_t> dropfrom; if (mode != 2) { dropfrom = recv.readpoint(); recv.skip(2); } else { dropfrom = dropto; } if (!meso) { recv.skip(8); } bool playerdrop = !recv.readbool(); Stage::get().getdrops().adddrop(oid, itemid, meso, owner, dropfrom, dropto, pickuptype, mode, playerdrop); }
void SpawnMobHandler::handle(InPacket& recv) const { int32_t oid = recv.readint(); bool hascontrol = recv.readbyte() == 5; int32_t id = recv.readint(); recv.skip(22); Point<int16_t> position = recv.readpoint(); int8_t stance = recv.readbyte(); recv.skip(2); uint16_t fh = recv.readshort(); int8_t effect = recv.readbyte(); if (effect > 0) { recv.readbyte(); recv.readshort(); if (effect == 15) { recv.readbyte(); } } int8_t team = recv.readbyte(); recv.skip(4); Stage::get().getmobs().addmob(oid, id, hascontrol, stance, fh, effect == -2, team, position); }
void SpawnPetHandler::handle(InPacket& recv) const { using Character::Char; Optional<Char> character = Stage::get().getcharacter(recv.readint()); if (!character) return; uint8_t petindex = recv.readbyte(); int8_t mode = recv.readbyte(); if (mode == 1) { recv.skip(1); int32_t itemid = recv.readint(); string name = recv.readascii(); int32_t uniqueid = recv.readint(); recv.skip(4); Point<int16_t> pos = recv.readpoint(); uint8_t stance = recv.readbyte(); int32_t fhid = recv.readint(); character->addpet(petindex, itemid, name, uniqueid, pos, stance, fhid); } else if (mode == 0) { bool hunger = recv.readbool(); character->removepet(petindex, hunger); } }
void SpawnNpcHandler::handle(InPacket& recv) const { int32_t oid = recv.readint(); int32_t id = recv.readint(); Point<int16_t> position = recv.readpoint(); bool flip = recv.readbool(); uint16_t fh = recv.readshort(); recv.readshort(); // 'rx' recv.readshort(); // 'ry' Stage::get().getnpcs().addnpc(id, oid, flip, fh, true, position); }
void SpawnMobControllerHandler::handle(InPacket& recv) const { int8_t aggro = recv.readbyte(); if (aggro == 0) return; int32_t oid = recv.readint(); recv.skip(1); int32_t id = recv.readint(); recv.skip(22); Point<int16_t> position = recv.readpoint(); int8_t stance = recv.readbyte(); recv.skip(2); uint16_t fh = recv.readshort(); int8_t effect = recv.readbyte(); if (effect > 0) { recv.readbyte(); recv.readshort(); if (effect == 15) { recv.readbyte(); } } int8_t team = recv.readbyte(); recv.skip(4); Stage::get().getmobs().addmob(oid, id, true, stance, fh, effect == -2, team, position); }
void SpawnNpcControllerHandler::handle(InPacket& recv) const { int8_t mode = recv.readbyte(); int32_t oid = recv.readint(); if (mode == 0) { } else { int32_t id = recv.readint(); Point<int16_t> position = recv.readpoint(); bool f = recv.readbool(); uint16_t fh = recv.readshort(); recv.readshort(); // 'rx' recv.readshort(); // 'ry' recv.readbool(); // 'minimap' Stage::get().getnpcs().addnpc(id, oid, f, fh, true, position); } }
Seat::Seat(InPacket& recv) { pos = recv.readpoint(); }
void SpawnCharHandler::handle(InPacket& recv) const { int32_t cid = recv.readint(); uint8_t level = recv.readbyte(); string name = recv.readascii(); recv.readascii(); // guildname recv.readshort(); // guildlogobg recv.readbyte(); // guildlogobgcolor recv.readshort(); // guildlogo recv.readbyte(); // guildlogocolor recv.skip(8); bool morphed = recv.readint() == 2; int32_t buffmask1 = recv.readint(); int16_t buffvalue = 0; if (buffmask1 != 0) { buffvalue = morphed ? recv.readshort() : recv.readbyte(); } recv.readint(); // buffmask 2 recv.skip(43); recv.readint(); // 'mount' recv.skip(61); int16_t job = recv.readshort(); LookEntry look = Session::get().getlogin().parselook(recv); recv.readint(); //count of 5110000 recv.readint(); // 'itemeffect' recv.readint(); // 'chair' Point<int16_t> position = recv.readpoint(); int8_t stance = recv.readbyte(); recv.skip(3); for (size_t i = 0; i < 3; i++) { int8_t available = recv.readbyte(); if (available == 1) { recv.readbyte(); // 'byte2' recv.readint(); // petid recv.readascii(); // name recv.readint(); // unique id recv.readint(); recv.readpoint(); // pos recv.readbyte(); // stance recv.readint(); // fhid } else { break; } } recv.readint(); // mountlevel recv.readint(); // mountexp recv.readint(); // mounttiredness //shop stuff, TO DO recv.readbyte(); //shop stuff end bool chalkboard = recv.readbool(); string chalktext = chalkboard ? recv.readascii() : ""; recv.skip(3); recv.readbyte(); // team Stage::get().getchars().addchar(cid, look, level, job, name, stance, position); }