summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-08-14 14:54:14 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-08-14 14:54:14 +0000
commitb07e923a07cbb964a93b8f0032a81c75e5058089 (patch)
treefb0fff88a9dd64616e788d2053b7d21b2ed27053
parent1b46141ee53e908cff5337455c7bbc05d1753a03 (diff)
downloadhercules-b07e923a07cbb964a93b8f0032a81c75e5058089.tar.gz
hercules-b07e923a07cbb964a93b8f0032a81c75e5058089.tar.bz2
hercules-b07e923a07cbb964a93b8f0032a81c75e5058089.tar.xz
hercules-b07e923a07cbb964a93b8f0032a81c75e5058089.zip
- Fixed script engine allowing scripts to set a player's zeny to negative values.
- Fixed setting hide_woe_damage making even "miss" attacks seem to connect. - Cleaned up pc_getzeny to not require doubles. - When readjusting the fame-list, the last entry's id is also reset (may fix characters appearing more than once on it?) - Some sign/unsigned comparison warning fixes. - Some 'may be used unitialized' warning fixes. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@8273 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--Changelog-Trunk.txt7
-rw-r--r--src/char/char.c4
-rw-r--r--src/char/int_party.c2
-rw-r--r--src/char_sql/char.c4
-rw-r--r--src/char_sql/int_party.c2
-rw-r--r--src/map/clif.c8
-rw-r--r--src/map/pc.c46
-rw-r--r--src/map/skill.c2
8 files changed, 35 insertions, 40 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 310937112..1d3a68d73 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -3,6 +3,13 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
+2006/08/14
+ * Fixed script engine allowing scripts to set a player's zeny to negative
+ values. [Skotlex]
+ * Fixed setting hide_woe_damage making even "miss" attacks seem to connect.
+ [Skotlex]
+ * When readjusting the fame-list, the last entry's id is also reset (may
+ fix characters appearing more than once on it?) [Skotlex]
2006/08/13
* Removed @itemcheck as it was totally pointless. [Skotlex]
* Corrected states killer/killable being easily dispellable. [Skotlex]
diff --git a/src/char/char.c b/src/char/char.c
index cac227cfa..97771c87a 100644
--- a/src/char/char.c
+++ b/src/char/char.c
@@ -3064,7 +3064,9 @@ int parse_frommap(int fd) {
}
// If the player's already in the list, remove the entry and shift the following ones 1 step up
memmove(list+pos, list+pos+1, (size-pos-1) * sizeof(struct fame_list));
- list[size-1].fame = 0; // At worst, the guy'll end up last (shouldn't happen if fame only goes up)
+ //Clear out last entry.
+ list[size-1].id = 0;
+ list[size-1].fame = 0;
}
// Find the position where the player has to be inserted
for(i = 0; i < size && fame < list[i].fame; i++);
diff --git a/src/char/int_party.c b/src/char/int_party.c
index 7f09095d9..e80a5de63 100644
--- a/src/char/int_party.c
+++ b/src/char/int_party.c
@@ -620,7 +620,7 @@ int mapif_parse_PartyLeave(int fd, int party_id, int account_id, int char_id) {
return 0;
}
-int mapif_parse_PartyChangeMap(int fd, int party_id, int account_id, int char_id, unsigned short map, int online, int lv)
+int mapif_parse_PartyChangeMap(int fd, int party_id, int account_id, int char_id, unsigned short map, int online, unsigned int lv)
{
struct party_data *p;
int i;
diff --git a/src/char_sql/char.c b/src/char_sql/char.c
index 3a42f7556..7c912af8c 100644
--- a/src/char_sql/char.c
+++ b/src/char_sql/char.c
@@ -2918,7 +2918,9 @@ int parse_frommap(int fd) {
}
// If the player's already in the list, remove the entry and shift the following ones 1 step up
memmove(list+pos, list+pos+1, (size-pos-1) * sizeof(struct fame_list));
- list[size-1].fame = 0; // At worst, the guy'll end up last (shouldn't happen if fame only goes up)
+ //Clear out last entry.
+ list[size-1].id = 0;
+ list[size-1].fame = 0;
}
// Find the position where the player has to be inserted
diff --git a/src/char_sql/int_party.c b/src/char_sql/int_party.c
index 1cfc3c74b..897a110d6 100644
--- a/src/char_sql/int_party.c
+++ b/src/char_sql/int_party.c
@@ -708,7 +708,7 @@ int mapif_parse_PartyLeave(int fd, int party_id, int account_id, int char_id)
return 0;
}
// When member goes to other map
-int mapif_parse_PartyChangeMap(int fd, int party_id, int account_id, int char_id, unsigned short map, int online, int lv)
+int mapif_parse_PartyChangeMap(int fd, int party_id, int account_id, int char_id, unsigned short map, int online, unsigned int lv)
{
struct party_data *p;
int i;
diff --git a/src/map/clif.c b/src/map/clif.c
index ada55e050..f41b428f9 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -4019,7 +4019,7 @@ int clif_damage(struct block_list *src,struct block_list *dst,unsigned int tick,
WBUFL(buf,14)=sdelay;
WBUFL(buf,18)=ddelay;
if (battle_config.hide_woe_damage && map_flag_gvg(src->m)) {
- WBUFW(buf,22)=div;
+ WBUFW(buf,22)=damage?div:0;
WBUFW(buf,27)=damage2?div:0;
} else {
WBUFW(buf,22)=(damage > SHRT_MAX)?SHRT_MAX:damage;
@@ -4544,7 +4544,7 @@ int clif_skill_damage(struct block_list *src,struct block_list *dst,
WBUFL(buf,16)=sdelay;
WBUFL(buf,20)=ddelay;
if (battle_config.hide_woe_damage && map_flag_gvg(src->m)) {
- WBUFW(buf,24)=div;
+ WBUFW(buf,24)=damage?div:0;
} else {
WBUFW(buf,24)=damage;
}
@@ -4575,7 +4575,7 @@ int clif_skill_damage(struct block_list *src,struct block_list *dst,
WBUFL(buf,16)=sdelay;
WBUFL(buf,20)=ddelay;
if (battle_config.hide_woe_damage && map_flag_gvg(src->m)) {
- WBUFL(buf,24)=div;
+ WBUFL(buf,24)=damage?div:0;
} else {
WBUFL(buf,24)=damage;
}
@@ -4635,7 +4635,7 @@ int clif_skill_damage2(struct block_list *src,struct block_list *dst,
WBUFW(buf,24)=dst->x;
WBUFW(buf,26)=dst->y;
if (battle_config.hide_woe_damage && map_flag_gvg(src->m)) {
- WBUFW(buf,28)=div;
+ WBUFW(buf,28)=damage?div:0;
} else {
WBUFW(buf,28)=damage;
}
diff --git a/src/map/pc.c b/src/map/pc.c
index 909233ddb..05eb21ee7 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -2548,11 +2548,11 @@ int pc_payzeny(struct map_session_data *sd,int zeny)
if(sd->state.finalsave)
return 1;
- if (zeny > 0 && sd->status.zeny < zeny)
- return 1; //Not enough.
+ if (zeny < 0)
+ return pc_getzeny(sd, -zeny);
- if (zeny < 0 && sd->status.zeny > MAX_ZENY +zeny)
- return 1; //Overflow
+ if (sd->status.zeny < zeny)
+ return 1; //Not enough.
sd->status.zeny-=zeny;
clif_updatestatus(sd,SP_ZENY);
@@ -2566,23 +2566,25 @@ int pc_payzeny(struct map_session_data *sd,int zeny)
*/
int pc_getzeny(struct map_session_data *sd,int zeny)
{
- double z;
-
nullpo_retr(0, sd);
- z = (double)sd->status.zeny;
- if(z + (double)zeny > MAX_ZENY) {
- zeny = 0;
- sd->status.zeny = MAX_ZENY;
- }
+ if(sd->state.finalsave)
+ return 1;
+
+ if(zeny < 0)
+ return pc_payzeny(sd, -zeny);
+
+ if (sd->status.zeny > MAX_ZENY -zeny)
+ return 1; //Overflow
+
sd->status.zeny+=zeny;
clif_updatestatus(sd,SP_ZENY);
+
if(zeny > 0 && sd->state.showzeny){
char output[255];
sprintf(output, "Gained %dz.", zeny);
clif_disp_onlyself(sd,output,strlen(output));
}
-
return 0;
}
@@ -5244,25 +5246,7 @@ int pc_setparam(struct map_session_data *sd,int type,int val)
sd->status.status_point = val;
break;
case SP_ZENY:
- if(val <= MAX_ZENY) {
- // MAX_ZENY 以下なら代入
- sd->status.zeny = val;
- } else {
- sd->status.zeny = MAX_ZENY;
- /* Could someone explain the comments below? I have no idea what they are trying to do...
- * if you want to give someone so much zeny, just set their zeny to the max. [Skotlex]
- if(sd->status.zeny > val) {
- // Zeny が減少しているなら代入
- sd->status.zeny = val;
- } else if(sd->status.zeny <= MAX_ZENY) {
- // Zeny が増加していて、現在の値がMAX_ZENY 以下ならMAX_ZENY
- sd->status.zeny = MAX_ZENY;
- } else {
- // Zeny が増加していて、現在の値がMAX_ZENY より下なら増加分を無視
- ;
- }
- */
- }
+ sd->status.zeny = cap_value(val, 0, MAX_ZENY);
break;
case SP_BASEEXP:
if(pc_nextbaseexp(sd) > 0) {
diff --git a/src/map/skill.c b/src/map/skill.c
index d4fbd4972..8367663ba 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -10038,7 +10038,7 @@ int skill_unit_move_sub (struct block_list *bl, va_list ap)
struct skill_unit_group *group;
struct block_list *target;
unsigned int tick,flag,result;
- int skill_id,unit_id;
+ int skill_id,unit_id=0; //Set to 0 to shut-up compiler warnings.
target=va_arg(ap,struct block_list*);
tick = va_arg(ap,unsigned int);