From 3fefab81425004d67c61fb911a417ddfdd089693 Mon Sep 17 00:00:00 2001 From: skotlex Date: Fri, 5 May 2006 23:22:16 +0000 Subject: - Added a npc-script-event cache to avoid looking up event-scripts every time they need to be executed. Events cached are all those defined in script_config. - Since the cache holds direct pointers to the npcs/events, do NOT unload the related NPCs or you'll get dangling pointers. However, @reloadscript will work fine. - Set the etc_log to on to see a summary of npcs/events loaded for script execution on startup. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@6494 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/pc.c | 61 ++++++------------------------------------------------------ 1 file changed, 6 insertions(+), 55 deletions(-) (limited to 'src/map/pc.c') diff --git a/src/map/pc.c b/src/map/pc.c index ddf9a244e..c1bab8617 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -877,17 +877,7 @@ int pc_reg_received(struct map_session_data *sd) sd->state.event_kill_mob = 1; } - if (script_config.event_script_type == 0) { - struct npc_data *npc; - if ((npc = npc_name2id(script_config.login_event_name))) { - run_script(npc->u.scr.script,0,sd->bl.id,npc->bl.id); // PCLoginNPC - ShowStatus("Event '"CL_WHITE"%s"CL_RESET"' executed.\n", script_config.login_event_name); - } - } else { - ShowStatus("%d '"CL_WHITE"%s"CL_RESET"' events executed.\n", - npc_event_doall_id(script_config.login_event_name, sd->bl.id), script_config.login_event_name); - } - + npc_script_event(sd, NPCE_LOGIN); return 0; } @@ -3786,17 +3776,7 @@ int pc_checkbaselevelup(struct map_session_data *sd) } clif_misceffect(&sd->bl,0); //LORDALFA - LVLUPEVENT - if (script_config.event_script_type == 0) { - struct npc_data *npc; - if ((npc = npc_name2id(script_config.baselvup_event_name))) { - run_script(npc->u.scr.script,0,sd->bl.id,npc->bl.id); // PCLvlUPNPC - ShowStatus("Event '"CL_WHITE"%s"CL_RESET"' executed.\n",script_config.baselvup_event_name); - } - } else { - ShowStatus("%d '"CL_WHITE"%s"CL_RESET"' events executed.\n", - npc_event_doall_id(script_config.baselvup_event_name, sd->bl.id), script_config.baselvup_event_name); - } - + npc_script_event(sd, NPCE_BASELVUP); return 1; } @@ -3827,17 +3807,7 @@ int pc_checkjoblevelup(struct map_session_data *sd) if (pc_checkskill(sd, SG_DEVIL) && !pc_nextjobexp(sd)) clif_status_change(&sd->bl,SI_DEVIL, 1); //Permanent blind effect from SG_DEVIL. - if (script_config.event_script_type == 0) { - struct npc_data *npc; - if ((npc = npc_name2id(script_config.joblvup_event_name))) { - run_script(npc->u.scr.script,0,sd->bl.id,npc->bl.id); // PCLvlUPNPC - ShowStatus("Event '"CL_WHITE"%s"CL_RESET"' executed.\n",script_config.joblvup_event_name); - } - } else { - ShowStatus("%d '"CL_WHITE"%s"CL_RESET"' events executed.\n", - npc_event_doall_id(script_config.joblvup_event_name, sd->bl.id), script_config.joblvup_event_name); - } - + npc_script_event(sd, NPCE_JOBLVUP); return 1; } @@ -4569,16 +4539,7 @@ int pc_damage(struct block_list *src,struct map_session_data *sd,int damage) pc_setglobalreg(sd,"killerrid",(ssd->status.account_id)); if (ssd->state.event_kill_pc) { pc_setglobalreg(ssd, "killedrid", sd->bl.id); - if (script_config.event_script_type == 0) { - struct npc_data *npc; - if ((npc = npc_name2id(script_config.kill_pc_event_name))) { - run_script(npc->u.scr.script,0,ssd->bl.id,npc->bl.id); // PCKillPC [Lance] - ShowStatus("Event '"CL_WHITE"%s"CL_RESET"' executed.\n", script_config.kill_pc_event_name); - } - } else { - ShowStatus("%d '"CL_WHITE"%s"CL_RESET"' events executed.\n", - npc_event_doall_id(script_config.kill_pc_event_name, ssd->bl.id), script_config.kill_pc_event_name); - } + npc_script_event(ssd, NPCE_KILLPC); } if (battle_config.pk_mode && ssd->status.manner >= 0 && battle_config.manner_system) { ssd->status.manner -= 5; @@ -4608,18 +4569,8 @@ int pc_damage(struct block_list *src,struct map_session_data *sd,int damage) pc_setglobalreg(sd, "killerrid", 0); } - if (sd->state.event_death) { - if (script_config.event_script_type == 0) { - struct npc_data *npc; - if ((npc = npc_name2id(script_config.die_event_name))) { - run_script(npc->u.scr.script,0,sd->bl.id,npc->bl.id); // PCDeathNPC - ShowStatus("Event '"CL_WHITE"%s"CL_RESET"' executed.\n", script_config.die_event_name); - } - } else { - ShowStatus("%d '"CL_WHITE"%s"CL_RESET"' events executed.\n", - npc_event_doall_id(script_config.die_event_name, sd->bl.id), script_config.die_event_name); - } - } + if (sd->state.event_death) + npc_script_event(sd,NPCE_DIE); // PK/Karma system code (not enabled yet) [celest] /*if(sd->status.karma > 0) { -- cgit v1.2.3-70-g09d2