Index: map/clif.c
===================================================================
--- map/clif.c (revision 14824)
+++ map/clif.c (working copy)
@@ -9531,6 +9531,9 @@
sprintf(output, "[ Kill Steal Protection Disabled. KS is allowed in this map ]");
clif->broadcast(&sd->bl, output, strlen(output) + 1, BC_BLUE, SELF);
}
+
+ //mocha//
+ status_calc_pc(sd,0); // run OnPCStatCalcEvent
map->iwall_get(sd); // Updates Walls Info on this Map to Client
status_calc_pc(sd, SCO_NONE);/* some conditions are map-dependent so we must recalculate */
Index: map/npc.c
===================================================================
--- map/npc.c (revision 14824)
+++ map/npc.c (working copy)
@@ -4263,6 +4263,9 @@
{"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},
+
+ //mocha
+ {"Stat Calc Event",script->config.stat_calc_event_name},
};
for (i = 0; i < NPCE_MAX; i++)
Index: map/npc.h
===================================================================
--- map/npc.h (revision 14824)
+++ map/npc.h (working copy)
@@ -137,6 +137,7 @@
NPCE_DIE,
NPCE_KILLPC,
NPCE_KILLNPC,
+ NPCE_STATCALC,
NPCE_MAX
};
Index: map/script.c
===================================================================
--- map/script.c (revision 14824)
+++ map/script.c (working copy)
@@ -9163,6 +9163,20 @@
return true;
}
+//mocha//
+BUILDIN(stat_recalc) {
+ TBL_PC* sd;
+ if ( script_hasdata( st, 2 ) ) {
+ if ( data_isstring( script_getdata( st, 2 ) ) )
+ sd = map->nick2sd( script_getstr( st, 2 ) );
+ else
+ sd = map->id2sd( script_getnum( st, 2 ) );
+ } else
+ sd = script_rid2sd(st);
+ if ( sd )
+ status_calc_pc( sd, 0 );
+ return true;
+}
/*==========================================
* Gain guild exp [Celest]
@@ -19215,6 +19229,7 @@
BUILDIN_DEF(getitemslots,"i"),
BUILDIN_DEF(makepet,"i"),
BUILDIN_DEF(getexp,"ii"),
+ BUILDIN_DEF(stat_recalc, "?"),
BUILDIN_DEF(getinventorylist,""),
BUILDIN_DEF(getskilllist,""),
BUILDIN_DEF(clearitem,""),
@@ -19511,6 +19526,7 @@
BUILDIN_DEF(tradertype,"i"),
BUILDIN_DEF(purchaseok,""),
BUILDIN_DEF(shopcount, "i"),
+
};
int i, len = ARRAYLENGTH(BUILDIN);
RECREATE(script->buildin, char *, script->buildin_count + len); // Pre-alloc to speed up
@@ -19840,6 +19856,8 @@
script->config.loadmap_event_name = "OnPCLoadMapEvent";
script->config.baselvup_event_name = "OnPCBaseLvUpEvent";
script->config.joblvup_event_name = "OnPCJobLvUpEvent";
+ //mocha//
+ script->config.stat_calc_event_name = "OnPCStatCalcEvent"; //stat_calc_event_name
script->config.ontouch_name = "OnTouch_";//ontouch_name (runs on first visible char to enter area, picks another char if the first char leaves)
script->config.ontouch2_name = "OnTouch";//ontouch2_name (run whenever a char walks into the OnTouch area)
Index: map/script.h
===================================================================
--- map/script.h (revision 14824)
+++ map/script.h (working copy)
@@ -340,6 +340,9 @@
const char *loadmap_event_name;
const char *baselvup_event_name;
const char *joblvup_event_name;
+
+ //mocha//
+ const char *stat_calc_event_name;
const char* ontouch_name;
const char* ontouch2_name;
Index: map/status.c
===================================================================
--- map/status.c (revision 14824)
+++ map/status.c (working copy)
@@ -2536,6 +2536,9 @@
pc->delautobonus(sd,sd->autobonus,ARRAYLENGTH(sd->autobonus),true);
pc->delautobonus(sd,sd->autobonus2,ARRAYLENGTH(sd->autobonus2),true);
pc->delautobonus(sd,sd->autobonus3,ARRAYLENGTH(sd->autobonus3),true);
+
+ //mocha//
+ npc->script_event(sd, NPCE_STATCALC);
// Parse equipment.
for(i=0;i<EQI_MAX;i++) {