Removal of OnPCStatCalcEvent (#4831)
* Fixes #4812. * This script event can be replaced with the other various player script events. * The trigger during equipment changing causes headache across other calculation events in source.
This commit is contained in:
parent
4a3dac6c93
commit
b65443d8f5
@ -958,13 +958,6 @@ mapflag for it to work is because, otherwise, it'd be server-wide and trigger
|
||||
every time a player would change maps. Imagine the server load with 1,000 players
|
||||
(oh the pain...)
|
||||
|
||||
OnPCStatCalcEvent:
|
||||
|
||||
This special label triggers when a player's stats are recalculated, such as when
|
||||
changing stats, equipment, or maps, as well as when logging in, leveling up, and
|
||||
mounting a job mount. This can be used to grant additional item bonuses to certain
|
||||
player groups, for instance.
|
||||
|
||||
OnWhisperGlobal:
|
||||
|
||||
This special label triggers when a player whispers the NPC, and will run with the
|
||||
|
@ -4599,8 +4599,6 @@ const char *npc_get_script_event_name(int npce_index)
|
||||
return script_config.kill_pc_event_name;
|
||||
case NPCE_KILLNPC:
|
||||
return script_config.kill_mob_event_name;
|
||||
case NPCE_STATCALC:
|
||||
return script_config.stat_calc_event_name;
|
||||
default:
|
||||
ShowError("npc_get_script_event_name: npce_index is outside the array limits: %d (max: %d).\n", npce_index, NPCE_MAX);
|
||||
return NULL;
|
||||
|
@ -1196,7 +1196,6 @@ enum npce_event : uint8 {
|
||||
NPCE_DIE,
|
||||
NPCE_KILLPC,
|
||||
NPCE_KILLNPC,
|
||||
NPCE_STATCALC,
|
||||
NPCE_MAX
|
||||
};
|
||||
struct view_data* npc_get_viewdata(int class_);
|
||||
|
@ -3577,10 +3577,7 @@ void pc_bonus(struct map_session_data *sd,int type,int val)
|
||||
sd->special_state.no_walk_delay = 1;
|
||||
break;
|
||||
default:
|
||||
if (running_npc_stat_calc_event) {
|
||||
ShowWarning("pc_bonus: unknown bonus type %d %d in OnPCStatCalcEvent!\n", type, val);
|
||||
}
|
||||
else if (current_equip_combo_pos > 0) {
|
||||
if (current_equip_combo_pos > 0) {
|
||||
ShowWarning("pc_bonus: unknown bonus type %d %d in a combo with item #%d\n", type, val, sd->inventory_data[pc_checkequip( sd, current_equip_combo_pos )]->nameid);
|
||||
}
|
||||
else if (current_equip_card_id > 0 || current_equip_item_index > 0) {
|
||||
@ -4164,10 +4161,7 @@ void pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
||||
sd->dropaddclass[type2] += val;
|
||||
break;
|
||||
default:
|
||||
if (running_npc_stat_calc_event) {
|
||||
ShowWarning("pc_bonus2: unknown bonus type %d %d %d in OnPCStatCalcEvent!\n", type, type2, val);
|
||||
}
|
||||
else if (current_equip_combo_pos > 0) {
|
||||
if (current_equip_combo_pos > 0) {
|
||||
ShowWarning("pc_bonus2: unknown bonus type %d %d %d in a combo with item #%d\n", type, type2, val, sd->inventory_data[pc_checkequip( sd, current_equip_combo_pos )]->nameid);
|
||||
}
|
||||
else if (current_equip_card_id > 0 || current_equip_item_index > 0) {
|
||||
@ -4301,10 +4295,7 @@ void pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val)
|
||||
sd->norecover_state_race[type2].tick = val;
|
||||
break;
|
||||
default:
|
||||
if (running_npc_stat_calc_event) {
|
||||
ShowWarning("pc_bonus3: unknown bonus type %d %d %d %d in OnPCStatCalcEvent!\n", type, type2, type3, val);
|
||||
}
|
||||
else if (current_equip_combo_pos > 0) {
|
||||
if (current_equip_combo_pos > 0) {
|
||||
ShowWarning("pc_bonus3: unknown bonus type %d %d %d %d in a combo with item #%d\n", type, type2, type3, val, sd->inventory_data[pc_checkequip( sd, current_equip_combo_pos )]->nameid);
|
||||
}
|
||||
else if (current_equip_card_id > 0 || current_equip_item_index > 0) {
|
||||
@ -4387,10 +4378,7 @@ void pc_bonus4(struct map_session_data *sd,int type,int type2,int type3,int type
|
||||
break;
|
||||
|
||||
default:
|
||||
if (running_npc_stat_calc_event) {
|
||||
ShowWarning("pc_bonus4: unknown bonus type %d %d %d %d %d in OnPCStatCalcEvent!\n", type, type2, type3, type4, val);
|
||||
}
|
||||
else if (current_equip_combo_pos > 0) {
|
||||
if (current_equip_combo_pos > 0) {
|
||||
ShowWarning("pc_bonus4: unknown bonus type %d %d %d %d %d in a combo with item #%d\n", type, type2, type3, type4, val, sd->inventory_data[pc_checkequip( sd, current_equip_combo_pos )]->nameid);
|
||||
}
|
||||
else if (current_equip_card_id > 0 || current_equip_item_index > 0) {
|
||||
@ -4439,10 +4427,7 @@ void pc_bonus5(struct map_session_data *sd,int type,int type2,int type3,int type
|
||||
break;
|
||||
|
||||
default:
|
||||
if (running_npc_stat_calc_event) {
|
||||
ShowWarning("pc_bonus5: unknown bonus type %d %d %d %d %d %d in OnPCStatCalcEvent!\n", type, type2, type3, type4, type5, val);
|
||||
}
|
||||
else if (current_equip_combo_pos > 0) {
|
||||
if (current_equip_combo_pos > 0) {
|
||||
ShowWarning("pc_bonus5: unknown bonus type %d %d %d %d %d %d in a combo with item #%d\n", type, type2, type3, type4, type5, val, sd->inventory_data[pc_checkequip( sd, current_equip_combo_pos )]->nameid);
|
||||
}
|
||||
else if (current_equip_card_id > 0 || current_equip_item_index > 0) {
|
||||
|
@ -266,7 +266,6 @@ struct Script_Config script_config = {
|
||||
"OnPCLoadMapEvent", //loadmap_event_name
|
||||
"OnPCBaseLvUpEvent", //baselvup_event_name
|
||||
"OnPCJobLvUpEvent", //joblvup_event_name
|
||||
"OnPCStatCalcEvent", //stat_calc_event_name
|
||||
// NPC related
|
||||
"OnTouch_", //ontouch_event_name (runs on first visible char to enter area, picks another char if the first char leaves)
|
||||
"OnTouch", //ontouch2_event_name (run whenever a char walks into the OnTouch area)
|
||||
@ -23768,13 +23767,8 @@ BUILDIN_FUNC(achievementadd) {
|
||||
}
|
||||
|
||||
if( !sd->state.pc_loaded ){
|
||||
if( !running_npc_stat_calc_event ){
|
||||
ShowError( "buildin_achievementadd: call was too early. Character %s(CID: '%u') was not loaded yet.\n", sd->status.name, sd->status.char_id );
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}else{
|
||||
// Simply ignore it on the first call, because the status will be recalculated after loading anyway
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
// Simply ignore it on the first call, because the status will be recalculated after loading anyway
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
if (achievement_add(sd, achievement_id))
|
||||
@ -23805,13 +23799,8 @@ BUILDIN_FUNC(achievementremove) {
|
||||
}
|
||||
|
||||
if( !sd->state.pc_loaded ){
|
||||
if( !running_npc_stat_calc_event ){
|
||||
ShowError( "buildin_achievementremove: call was too early. Character %s(CID: '%u') was not loaded yet.\n", sd->status.name, sd->status.char_id );
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}else{
|
||||
// Simply ignore it on the first call, because the status will be recalculated after loading anyway
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
// Simply ignore it on the first call, because the status will be recalculated after loading anyway
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
if (achievement_remove(sd, achievement_id))
|
||||
@ -23842,13 +23831,8 @@ BUILDIN_FUNC(achievementinfo) {
|
||||
|
||||
if( !sd->state.pc_loaded ){
|
||||
script_pushint(st, false);
|
||||
if( !running_npc_stat_calc_event ){
|
||||
ShowError( "buildin_achievementinfo: call was too early. Character %s(CID: '%u') was not loaded yet.\n", sd->status.name, sd->status.char_id );
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}else{
|
||||
// Simply ignore it on the first call, because the status will be recalculated after loading anyway
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
// Simply ignore it on the first call, because the status will be recalculated after loading anyway
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
script_pushint(st, achievement_check_progress(sd, achievement_id, script_getnum(st, 3)));
|
||||
@ -23875,13 +23859,8 @@ BUILDIN_FUNC(achievementcomplete) {
|
||||
}
|
||||
|
||||
if( !sd->state.pc_loaded ){
|
||||
if( !running_npc_stat_calc_event ){
|
||||
ShowError( "buildin_achievementcomplete: call was too early. Character %s(CID: '%u') was not loaded yet.\n", sd->status.name, sd->status.char_id );
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}else{
|
||||
// Simply ignore it on the first call, because the status will be recalculated after loading anyway
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
// Simply ignore it on the first call, because the status will be recalculated after loading anyway
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
ARR_FIND(0, sd->achievement_data.count, i, sd->achievement_data.achievements[i].achievement_id == achievement_id);
|
||||
@ -23913,13 +23892,8 @@ BUILDIN_FUNC(achievementexists) {
|
||||
|
||||
if( !sd->state.pc_loaded ){
|
||||
script_pushint(st, false);
|
||||
if( !running_npc_stat_calc_event ){
|
||||
ShowError( "buildin_achievementexists: call was too early. Character %s(CID: '%u') was not loaded yet.\n", sd->status.name, sd->status.char_id );
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}else{
|
||||
// Simply ignore it on the first call, because the status will be recalculated after loading anyway
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
// Simply ignore it on the first call, because the status will be recalculated after loading anyway
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
ARR_FIND(0, sd->achievement_data.count, i, sd->achievement_data.achievements[i].achievement_id == achievement_id && sd->achievement_data.achievements[i].completed > 0 );
|
||||
@ -23951,13 +23925,8 @@ BUILDIN_FUNC(achievementupdate) {
|
||||
}
|
||||
|
||||
if( !sd->state.pc_loaded ){
|
||||
if( !running_npc_stat_calc_event ){
|
||||
ShowError( "buildin_achievementupdate: call was too early. Character %s(CID: '%u') was not loaded yet.\n", sd->status.name, sd->status.char_id );
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}else{
|
||||
// Simply ignore it on the first call, because the status will be recalculated after loading anyway
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
// Simply ignore it on the first call, because the status will be recalculated after loading anyway
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
ARR_FIND(0, sd->achievement_data.count, i, sd->achievement_data.achievements[i].achievement_id == achievement_id);
|
||||
|
@ -160,7 +160,6 @@ struct Script_Config {
|
||||
const char *loadmap_event_name;
|
||||
const char *baselvup_event_name;
|
||||
const char *joblvup_event_name;
|
||||
const char *stat_calc_event_name;
|
||||
|
||||
// NPC related
|
||||
const char* ontouch_event_name;
|
||||
|
@ -62,7 +62,6 @@ static struct status_data dummy_status;
|
||||
short current_equip_item_index; /// Contains inventory index of an equipped item. To pass it into the EQUP_SCRIPT [Lupus]
|
||||
unsigned int current_equip_combo_pos; /// For combo items we need to save the position of all involved items here
|
||||
int current_equip_card_id; /// To prevent card-stacking (from jA) [Skotlex]
|
||||
bool running_npc_stat_calc_event; /// Indicate if OnPCStatCalcEvent is running.
|
||||
// We need it for new cards 15 Feb 2005, to check if the combo cards are insrerted into the CURRENT weapon only to avoid cards exploits
|
||||
short current_equip_opt_index; /// Contains random option index of an equipped item. [Secret]
|
||||
|
||||
@ -3846,10 +3845,6 @@ int status_calc_pc_sub(struct map_session_data* sd, enum e_status_calc_opt opt)
|
||||
pc_delautobonus(sd, sd->autobonus2, true);
|
||||
pc_delautobonus(sd, sd->autobonus3, true);
|
||||
|
||||
running_npc_stat_calc_event = true;
|
||||
npc_script_event(sd, NPCE_STATCALC);
|
||||
running_npc_stat_calc_event = false;
|
||||
|
||||
// Parse equipment
|
||||
for (i = 0; i < EQI_MAX; i++) {
|
||||
current_equip_item_index = index = sd->equip_index[i]; // We pass INDEX to current_equip_item_index - for EQUIP_SCRIPT (new cards solution) [Lupus]
|
||||
|
@ -2082,7 +2082,6 @@ enum e_joint_break : uint8 {
|
||||
extern short current_equip_item_index;
|
||||
extern unsigned int current_equip_combo_pos;
|
||||
extern int current_equip_card_id;
|
||||
extern bool running_npc_stat_calc_event;
|
||||
extern short current_equip_opt_index;
|
||||
|
||||
//Status change option definitions (options are what makes status changes visible to chars
|
||||
|
Loading…
x
Reference in New Issue
Block a user