summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/net/eathena/homunculushandler.cpp29
-rw-r--r--src/net/eathena/homunculushandler.h2
-rw-r--r--src/net/eathena/packets.h2
-rw-r--r--src/net/eathena/protocol.h1
-rw-r--r--src/resources/notifications.h10
-rw-r--r--src/resources/notifytypes.h2
6 files changed, 44 insertions, 2 deletions
diff --git a/src/net/eathena/homunculushandler.cpp b/src/net/eathena/homunculushandler.cpp
index 6f7aaaa40..f96ad006b 100644
--- a/src/net/eathena/homunculushandler.cpp
+++ b/src/net/eathena/homunculushandler.cpp
@@ -22,6 +22,7 @@
#include "actormanager.h"
#include "logger.h"
+#include "notifymanager.h"
#include "being/homunculusinfo.h"
#include "being/playerinfo.h"
@@ -33,6 +34,13 @@
#include "net/eathena/messageout.h"
#include "net/eathena/protocol.h"
+#include "resources/iteminfo.h"
+#include "resources/notifytypes.h"
+
+#include "resources/db/itemdb.h"
+
+#include "utils/stringutils.h"
+
#include "debug.h"
extern Net::HomunculusHandler *homunculusHandler;
@@ -49,6 +57,7 @@ HomunculusHandler::HomunculusHandler() :
SMSG_HOMUNCULUS_DATA,
SMSG_HOMUNCULUS_INFO,
SMSG_HOMUNCULUS_SKILL_UP,
+ SMSG_HOMUNCULUS_FOOD,
0
};
handledMessages = _messages;
@@ -75,6 +84,10 @@ void HomunculusHandler::handleMessage(Net::MessageIn &msg)
processHomunculusSkillUp(msg);
break;
+ case SMSG_HOMUNCULUS_FOOD:
+ processHomunculusFood(msg);
+ break;
+
default:
break;
}
@@ -207,6 +220,22 @@ void HomunculusHandler::processHomunculusSkillUp(Net::MessageIn &msg)
}
}
+void HomunculusHandler::processHomunculusFood(Net::MessageIn &msg)
+{
+ const int flag = msg.readUInt8("fail");
+ const int itemId = msg.readInt16("food id");
+ if (flag)
+ {
+ 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 HomunculusHandler::setName(const std::string &name) const
{
createOutPacket(CMSG_HOMUNCULUS_SET_NAME);
diff --git a/src/net/eathena/homunculushandler.h b/src/net/eathena/homunculushandler.h
index c86dfb58e..94e3807f0 100644
--- a/src/net/eathena/homunculushandler.h
+++ b/src/net/eathena/homunculushandler.h
@@ -59,6 +59,8 @@ class HomunculusHandler final : public MessageHandler,
void processHomunculusInfo(Net::MessageIn &msg);
void processHomunculusSkillUp(Net::MessageIn &msg);
+
+ void processHomunculusFood(Net::MessageIn &msg);
};
} // namespace EAthena
diff --git a/src/net/eathena/packets.h b/src/net/eathena/packets.h
index f9a917418..b42712d2b 100644
--- a/src/net/eathena/packets.h
+++ b/src/net/eathena/packets.h
@@ -85,7 +85,7 @@ int16_t packet_lengths[] =
// #0x0200
26, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 19, 10, 0, 0, 0,
22, -1, 16, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- -1, 122, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 19, 71, 0,
+ -1, 122, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 19, 71, 5,
12, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// #0x0240
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
diff --git a/src/net/eathena/protocol.h b/src/net/eathena/protocol.h
index d36a0fa8f..562489397 100644
--- a/src/net/eathena/protocol.h
+++ b/src/net/eathena/protocol.h
@@ -263,6 +263,7 @@
#define SMSG_HOMUNCULUS_DATA 0x0230
#define SMSG_HOMUNCULUS_INFO 0x022e
#define SMSG_HOMUNCULUS_SKILL_UP 0x0239
+#define SMSG_HOMUNCULUS_FOOD 0x022f
/**********************************
* Packets from client to server *
diff --git a/src/resources/notifications.h b/src/resources/notifications.h
index b4439ada8..dec091468 100644
--- a/src/resources/notifications.h
+++ b/src/resources/notifications.h
@@ -353,7 +353,15 @@ namespace NotifyManager
{"mercenary unknown",
// TRANSLATORS: notification message
N_("Mercenary unknown state."),
- NotifyFlags::EMPTY}
+ NotifyFlags::EMPTY},
+ {"homunculus feed ok",
+ // TRANSLATORS: notification message
+ N_("Your feed your homunculus."),
+ NotifyFlags::EMPTY},
+ {"homunculus feed failed",
+ // TRANSLATORS: notification message
+ N_("You cant feed homunculus, because not have %s."),
+ NotifyFlags::STRING}
};
} // namespace NotifyManager
#endif // RESOURCES_NOTIFICATIONS_H
diff --git a/src/resources/notifytypes.h b/src/resources/notifytypes.h
index 14ff47265..c1de1d201 100644
--- a/src/resources/notifytypes.h
+++ b/src/resources/notifytypes.h
@@ -108,6 +108,8 @@ namespace NotifyTypes
MERCENARY_FIRED,
MERCENARY_RUN,
MERCENARY_UNKNOWN,
+ HOMUNCULUS_FEED_OK,
+ HOMUNCULUS_FEED_FAIL,
TYPE_END
};