I think there is no way we can trigger on mob drop.
of course it can
#include "common/hercules.h"
#include "map/mob.h"
#include "map/npc.h"
#include "map/mapreg.h"
#include "plugins/HPMHooking.h"
#include "common/HPMDataCheck.h"
HPExport struct hplugin_info pinfo = {
"OnMobDrop",
SERVER_TYPE_MAP,
"x.x",
HPM_VERSION,
};
const char *event_label = "itemdrop::OnMobDrop";
struct item_drop *mob_setdropitem_post( struct item_drop* retVal, int nameid, int qty, struct item_data *data ) {
mapreg->setreg( reference_uid( script->add_variable("$@mobdrop_itemid"), 0), nameid );
npc->event_do(event_label);
return retVal;
}
HPExport void server_online( void ) {
struct event_data *ev = (struct event_data*)strdb_get( npc->ev_db, event_label );
if ( ev == NULL || ev->nd == NULL ) {
ShowWarning( "NPC label "CL_WHITE"%s"CL_RESET" does not found. Unloading "CL_WHITE"OnMobDrop"CL_RESET" Plugin.\n", event_label );
// core->runflag = CORE_ST_STOP;
}
else
addHookPost( mob, setdropitem, mob_setdropitem_post );
}
because it doesn't attach to any player during processing drop, so you can run this as *donpcevent
prontera,155,185,5 script itemdrop 1_F_MARIA,{
end;
OnMobDrop:
announce F_ITEML($@mobdrop_itemid), bc_all;
end;
}
The plugin will trigger
- someone traded you.
- use old card album if card
- get from storage
I was looking for trigger only if picked from mob drop but i think its impossible.
/// obtain log type character for item/zeny logs
static char log_picktype2char(e_log_pick_type type)
{
switch( type ) {
case LOG_TYPE_TRADE: return 'T'; // (T)rade
case LOG_TYPE_VENDING: return 'V'; // (V)ending
case LOG_TYPE_PICKDROP_PLAYER: return 'P'; // (P)player
case LOG_TYPE_PICKDROP_MONSTER: return 'M'; // (M)onster
case LOG_TYPE_NPC: return 'S'; // NPC (S)hop
case LOG_TYPE_SCRIPT: return 'N'; // (N)PC Script
case LOG_TYPE_STEAL: return 'D'; // Steal/Snatcher
case LOG_TYPE_CONSUME: return 'C'; // (C)onsumed
case LOG_TYPE_PRODUCE: return 'O'; // Pr(O)duced/Ingredients
case LOG_TYPE_MVP: return 'U'; // MVP Rewards
case LOG_TYPE_COMMAND: return 'A'; // (A)dmin command
case LOG_TYPE_STORAGE: return 'R'; // Sto(R)age
case LOG_TYPE_GSTORAGE: return 'G'; // (G)uild storage
case LOG_TYPE_MAIL: return 'E'; // (E)mail attachment
case LOG_TYPE_AUCTION: return 'I'; // Auct(I)on
case LOG_TYPE_BUYING_STORE: return 'B'; // (B)uying Store
case LOG_TYPE_LOOT: return 'L'; // (L)oot (consumed monster pick/drop)
case LOG_TYPE_BANK: return 'K'; // Ban(K) Transactions
case LOG_TYPE_DIVORCE: return 'Y'; // Divorce
case LOG_TYPE_ROULETTE: return 'Z'; // Roulette
case LOG_TYPE_RENTAL: return 'W'; // Rental
case LOG_TYPE_CARD: return 'Q'; // Card
case LOG_TYPE_INV_INVALID: return 'J'; // Invalid in inventory
case LOG_TYPE_CART_INVALID: return 'H'; // Invalid in cart
case LOG_TYPE_EGG: return '@'; // Egg
case LOG_TYPE_QUEST: return '0'; // Quest
case LOG_TYPE_SKILL: return '1'; // Skill
case LOG_TYPE_REFINE: return '2'; // Refine
case LOG_TYPE_OTHER: return 'X'; // Other
}
see src\map\log.c for more information
see previous post, make sure only run with @pickup_action == LOG_TYPE_PICKDROP_PLAYER flag