You could add an event label and then call it when opening the shop.
Let's say you want to create a label named 'OnCashShopOpening' (yeah should think about something else ^^)
src/map/npc.c :
void npc_read_event_script(void)
{
int i;
struct {
char *name;
const char *event_name;
} config[] = {
{"Login Event",script_config.login_event_name},
{"Logout Event",script_config.logout_event_name},
{"Load Map Event",script_config.loadmap_event_name},
{"Base LV Up Event",script_config.baselvup_event_name},
{"Job LV Up Event",script_config.joblvup_event_name},
{"Die Event",script_config.die_event_name},
{"Kill PC Event",script_config.kill_pc_event_name},
{"Kill NPC Event",script_config.kill_mob_event_name},
{"Stat Calc Event",script_config.stat_calc_event_name},
++ {"Cash Shop Event",script_config.cash_shop_event_name},
};
src/map/npc.h :
//Script NPC events.
enum npce_event {
NPCE_LOGIN,
NPCE_LOGOUT,
NPCE_LOADMAP,
NPCE_BASELVUP,
NPCE_JOBLVUP,
NPCE_DIE,
NPCE_KILLPC,
NPCE_KILLNPC,
NPCE_STATCALC,
++ NPCE_CASHSHOP,
NPCE_MAX
};
src/map/script.c :
struct Script_Config script_config = {
1, // warn_func_mismatch_argtypes
1, 65535, 2048, //warn_func_mismatch_paramnum/check_cmdcount/check_gotocount
0, INT_MAX, // input_min_value/input_max_value
"OnPCDieEvent", //die_event_name
"OnPCKillEvent", //kill_pc_event_name
"OnNPCKillEvent", //kill_mob_event_name
"OnPCLoginEvent", //login_event_name
"OnPCLogoutEvent", //logout_event_name
"OnPCLoadMapEvent", //loadmap_event_name
"OnPCBaseLvUpEvent", //baselvup_event_name
"OnPCJobLvUpEvent", //joblvup_event_name
"OnPCStatCalcEvent", //stat_calc_event_name
"OnTouch_", //ontouch_name (runs on first visible char to enter area, picks another char if the first char leaves)
"OnTouch", //ontouch2_name (run whenever a char walks into the OnTouch area)
++ "OnCashShopOpening",
};
src/map/script.h :
extern struct Script_Config {
unsigned warn_func_mismatch_argtypes : 1;
unsigned warn_func_mismatch_paramnum : 1;
int check_cmdcount;
int check_gotocount;
int input_min_value;
int input_max_value;
const char *die_event_name;
const char *kill_pc_event_name;
const char *kill_mob_event_name;
const char *login_event_name;
const char *logout_event_name;
const char *loadmap_event_name;
const char *baselvup_event_name;
const char *joblvup_event_name;
const char *stat_calc_event_name;
const char* ontouch_name;
const char* ontouch2_name;
++ const char* cash_shop_event_name;
} script_config;
src/map/clif.c
void clif_parse_cashshop_open_request( int fd, struct map_session_data* sd ){
sd->npc_shopid = -1; // Set npc_shopid when using cash shop from "cash shop" button [Aelys|Susu] bugreport:96
clif_cashshop_open( sd );
++ npc_script_event(sd, NPCE_CASHSHOP);
}
In any npc:
- script dubnpc -1,{
OnCashShopOpening:
debugmes "it works!!";
end;
}
Tested and working
I don't know if there's a way to call a specific npc event or even to call a script function, sorry but I don't know much about src at all so that's all I've got.