diff options
Diffstat (limited to 'src/net/eathena/homunculusrecv.cpp')
-rw-r--r-- | src/net/eathena/homunculusrecv.cpp | 227 |
1 files changed, 0 insertions, 227 deletions
diff --git a/src/net/eathena/homunculusrecv.cpp b/src/net/eathena/homunculusrecv.cpp deleted file mode 100644 index 204b618a7..000000000 --- a/src/net/eathena/homunculusrecv.cpp +++ /dev/null @@ -1,227 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2011-2017 The ManaPlus Developers - * - * This file is part of The ManaPlus Client. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "net/eathena/homunculusrecv.h" - -#include "actormanager.h" -#include "notifymanager.h" - -#include "being/homunculusinfo.h" -#include "being/playerinfo.h" -#include "being/localplayer.h" - -#include "enums/resources/notifytypes.h" - -#include "gui/windows/skilldialog.h" - -#include "resources/iteminfo.h" - -#include "resources/db/itemdb.h" - -#include "net/messagein.h" - -#include "utils/stringutils.h" - -#include "debug.h" - -namespace EAthena -{ - -void HomunculusRecv::processHomunculusSkills(Net::MessageIn &msg) -{ - if (skillDialog != nullptr) - skillDialog->hideSkills(SkillOwner::Homunculus); - - const int count = (msg.readInt16("len") - 4) / 37; - for (int f = 0; f < count; f ++) - { - const int skillId = msg.readInt16("skill id"); - const SkillType::SkillType inf = static_cast<SkillType::SkillType>( - msg.readInt16("inf")); - msg.readInt16("unused"); - const int level = msg.readInt16("skill level"); - const int sp = msg.readInt16("sp"); - const int range = msg.readInt16("range"); - const std::string name = msg.readString(24, "skill name"); - const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable); - PlayerInfo::setSkillLevel(skillId, level); - if (skillDialog != nullptr) - { - if (!skillDialog->updateSkill(skillId, range, up, inf, sp)) - { - skillDialog->addSkill(SkillOwner::Homunculus, - skillId, name, level, range, up, inf, sp); - } - } - } - if (skillDialog != nullptr) - skillDialog->updateModels(); -} - -void HomunculusRecv::processHomunculusData(Net::MessageIn &msg) -{ - msg.readUInt8("unused"); - const int cmd = msg.readUInt8("state"); - const BeingId id = msg.readBeingId("homunculus id"); - Being *const dstBeing = actorManager->findBeing(id); - const int data = msg.readInt32("data"); - if (cmd == 0) // pre init - { - HomunculusInfo *const info = new HomunculusInfo; - info->id = id; - PlayerInfo::setHomunculus(info); - PlayerInfo::setHomunculusBeing(dstBeing); - return; - } - HomunculusInfo *const info = PlayerInfo::getHomunculus(); - if (info == nullptr) - return; - switch (cmd) - { - case 1: // intimacy - info->intimacy = data; - break; - case 2: // hunger - info->hungry = data; - break; - case 3: // accesory - info->equip = data; - break; - default: - break; - } -} - -void HomunculusRecv::processHomunculusInfo(Net::MessageIn &msg) -{ - const std::string name = msg.readString(24, "name"); - msg.readUInt8("flags"); // 0x01 - renamed, 0x02 - vaporize, 0x04 - alive - const int level = msg.readInt16("level"); - PlayerInfo::setStatBase(Attributes::HOMUN_LEVEL, level); - const int hungry = msg.readInt16("hungry"); - const int intimacy = msg.readInt16("intimacy"); - const int equip = msg.readInt16("equip"); - PlayerInfo::setStatBase(Attributes::HOMUN_ATK, - msg.readInt16("atk")); - PlayerInfo::setStatBase(Attributes::HOMUN_MATK, - msg.readInt16("matk")); - PlayerInfo::setStatBase(Attributes::HOMUN_HIT, - msg.readInt16("hit")); - PlayerInfo::setStatBase(Attributes::HOMUN_CRIT, - msg.readInt16("luk/3 or crit/10")); - PlayerInfo::setStatBase(Attributes::HOMUN_DEF, - msg.readInt16("def")); - PlayerInfo::setStatBase(Attributes::HOMUN_MDEF, - msg.readInt16("mdef")); - PlayerInfo::setStatBase(Attributes::HOMUN_FLEE, - msg.readInt16("flee")); - PlayerInfo::setStatBase(Attributes::HOMUN_ATTACK_DELAY, - msg.readInt16("attack speed")); - if (msg.getVersion() >= 20150513) - { - PlayerInfo::setStatBase(Attributes::HOMUN_HP, - msg.readInt32("hp")); - PlayerInfo::setStatBase(Attributes::HOMUN_MAX_HP, - msg.readInt32("max hp")); - } - else - { - PlayerInfo::setStatBase(Attributes::HOMUN_HP, - msg.readInt16("hp")); - PlayerInfo::setStatBase(Attributes::HOMUN_MAX_HP, - msg.readInt16("max hp")); - } - PlayerInfo::setStatBase(Attributes::HOMUN_MP, - msg.readInt16("sp")); - PlayerInfo::setStatBase(Attributes::HOMUN_MAX_MP, - msg.readInt16("max sp")); - PlayerInfo::setStatBase(Attributes::HOMUN_EXP, - msg.readInt32("exp")); - PlayerInfo::setStatBase(Attributes::HOMUN_EXP_NEEDED, - msg.readInt32("next exp")); - PlayerInfo::setStatBase(Attributes::HOMUN_SKILL_POINTS, - msg.readInt16("skill points")); - const int range = msg.readInt16("attack range"); - PlayerInfo::setStatBase(Attributes::HOMUN_ATTACK_RANGE, - range); - - PlayerInfo::updateAttrs(); - HomunculusInfo *const info = PlayerInfo::getHomunculus(); - if (info == nullptr) - return; - Being *const dstBeing = actorManager->findBeing(info->id); - - info->name = name; - info->level = level; - info->range = range; - info->hungry = hungry; - info->intimacy = intimacy; - info->equip = equip; - PlayerInfo::setHomunculusBeing(dstBeing); -} - -void HomunculusRecv::processHomunculusSkillUp(Net::MessageIn &msg) -{ - const int skillId = msg.readInt16("skill id"); - const int level = msg.readInt16("level"); - const int sp = msg.readInt16("sp"); - const int range = msg.readInt16("range"); - const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable); - - if (skillDialog != nullptr && PlayerInfo::getSkillLevel(skillId) != level) - skillDialog->playUpdateEffect(skillId); - PlayerInfo::setSkillLevel(skillId, level); - if (skillDialog != nullptr) - { - if (!skillDialog->updateSkill(skillId, range, - up, SkillType::Unknown, sp)) - { - skillDialog->addSkill(SkillOwner::Homunculus, - skillId, "", level, - range, up, SkillType::Unknown, sp); - } - } -} - -void HomunculusRecv::processHomunculusFood(Net::MessageIn &msg) -{ - const int flag = msg.readUInt8("fail"); - const int itemId = msg.readInt16("food id"); - if (flag != 0) - { - NotifyManager::notify(NotifyTypes::HOMUNCULUS_FEED_OK); - } - else - { - const std::string name = strprintf("[@@%d|%s@@]", itemId, - ItemDB::get(itemId).getName().c_str()); - NotifyManager::notify(NotifyTypes::HOMUNCULUS_FEED_FAIL, name); - } -} - -void HomunculusRecv::processHomunculusExp(Net::MessageIn &msg) -{ - const int exp = msg.readInt32("exp"); - msg.readInt32("unused"); - if (localPlayer != nullptr) - localPlayer->addHomunXpMessage(exp); -} - -} // namespace EAthena |