From 5d658f9d7b68c96839baf7932dc8a3cb30adef5f Mon Sep 17 00:00:00 2001 From: skotlex Date: Tue, 8 Jan 2008 13:30:43 +0000 Subject: - Made the pc reg variables receive a const char* as the argument, since they duplicate the value anyway (and they were receiving const char* values from the setd function) - Fixed Wand of Hermod not starting the SC_HERMOD status change (which blocks spells) - Fixed a missing break in the cast cancel code. - Fixed additional def/mdef from vit/int bonuses being lost when a status change that affects def/mdef triggers (for homunculus) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12033 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 4 ++++ src/map/pc.c | 4 ++-- src/map/pc.h | 4 ++-- src/map/script.c | 4 ++-- src/map/skill.c | 1 - src/map/status.c | 6 +++--- src/map/unit.c | 2 +- 7 files changed, 14 insertions(+), 11 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 9505635ba..8aafd0318 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,10 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. 2008/01/08 + * Fixed Wand of Hermod not starting the SC_HERMOD status change (which + blocks spells) + * Fixed additional def/mdef from vit/int bonuses being lost when a status + change that affects def/mdef triggers (for homunculus) [Skotlex] * Added missing code to log main chat messages sent by whispering to main_chat_nick (bugreport:424) [ultramage] 2008/01/07 diff --git a/src/map/pc.c b/src/map/pc.c index 6a7033064..f16f57336 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -5930,7 +5930,7 @@ char* pc_readregstr(struct map_session_data* sd, int reg) /*========================================== * script用文字列??の値を設定 *------------------------------------------*/ -int pc_setregstr(struct map_session_data* sd, int reg, char* str) +int pc_setregstr(struct map_session_data* sd, int reg, const char* str) { int i; @@ -6113,7 +6113,7 @@ int pc_setregistry(struct map_session_data *sd,const char *reg,int val,int type) return 0; } -int pc_setregistry_str(struct map_session_data *sd,char *reg,char *val,int type) +int pc_setregistry_str(struct map_session_data *sd,char *reg,const char *val,int type) { struct global_reg *sd_reg; int i,*max, regmax; diff --git a/src/map/pc.h b/src/map/pc.h index 2b06b5126..85f0d7ee0 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -245,7 +245,7 @@ int pc_setparam(struct map_session_data*,int,int); int pc_readreg(struct map_session_data*,int); int pc_setreg(struct map_session_data*,int,int); char *pc_readregstr(struct map_session_data *sd,int reg); -int pc_setregstr(struct map_session_data *sd,int reg,char *str); +int pc_setregstr(struct map_session_data *sd,int reg,const char *str); #define pc_readglobalreg(sd,reg) pc_readregistry(sd,reg,3) #define pc_setglobalreg(sd,reg,val) pc_setregistry(sd,reg,val,3) @@ -262,7 +262,7 @@ int pc_setregstr(struct map_session_data *sd,int reg,char *str); int pc_readregistry(struct map_session_data*,const char*,int); int pc_setregistry(struct map_session_data*,const char*,int,int); char *pc_readregistry_str(struct map_session_data*,char*,int); -int pc_setregistry_str(struct map_session_data*,char*,char*,int); +int pc_setregistry_str(struct map_session_data*,char*,const char*,int); int pc_addeventtimer(struct map_session_data *sd,int tick,const char *name); int pc_deleventtimer(struct map_session_data *sd,const char *name); diff --git a/src/map/script.c b/src/map/script.c index 90df0f884..ffd40aa68 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -2250,13 +2250,13 @@ void* get_val2(struct script_state* st, int uid, struct linkdb_node** ref) * Stores the value of a script variable * Return value is 0 on fail, 1 on success. *------------------------------------------*/ -static int set_reg(struct script_state* st, TBL_PC* sd, int num, char* name, void* value, struct linkdb_node** ref) +static int set_reg(struct script_state* st, TBL_PC* sd, int num, char* name, const void* value, struct linkdb_node** ref) { char prefix = name[0]; char postfix = name[strlen(name)-1]; if (postfix == '$') { // string variable - char* str = (char*)value; + const char* str = (const char*)value; switch (prefix) { case '@': return pc_setregstr(sd, num, str); diff --git a/src/map/skill.c b/src/map/skill.c index 2360067be..b5f28ba27 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -6545,7 +6545,6 @@ int skill_unit_onplace (struct skill_unit *src, struct block_list *bl, unsigned case UNT_HERMODE: if (sg->src_id!=bl->id && battle_check_target(&src->bl,bl,BCT_PARTY|BCT_GUILD) > 0) status_change_clear_buffs(bl,1); //Should dispell only allies. - break; case UNT_RICHMANKIM: case UNT_ETERNALCHAOS: case UNT_DRUMBATTLEFIELD: diff --git a/src/map/status.c b/src/map/status.c index 574c11fb5..bdcc7a4c2 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2864,13 +2864,13 @@ void status_calc_bl_sub_hom(struct homun_data *hd, unsigned long flag) //[orn] if(status->sp > status->max_sp) status->sp = status->max_sp; } - if(flag&SCB_VIT) + if(flag&(SCB_VIT|SCB_DEF)) { //Since vit affects def, recalculate def. flag|=SCB_DEF; status->def = status_calc_def(&hd->bl, &hd->sc, b_status->def); - status->def+= (status->vit/5 - b_status->vit/5); + status->def+=(status->vit/5 - b_status->vit/5); } - if(flag&SCB_INT) + if(flag&(SCB_INT|SCB_MDEF)) { flag|=SCB_MDEF; status->mdef = status_calc_mdef(&hd->bl, &hd->sc, b_status->mdef); diff --git a/src/map/unit.c b/src/map/unit.c index b1ee72a2f..bdb2935f5 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -878,8 +878,8 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh if(ud->skillid != skill_num){ sd->skillid_old = ud->skillid; sd->skilllv_old = ud->skilllv; - break; } + break; case BD_ENCORE: //Prevent using the dance skill if you no longer have the skill in your tree. if(!sd->skillid_dance || pc_checkskill(sd,sd->skillid_dance)<=0){ -- cgit v1.2.3-60-g2f50