summaryrefslogtreecommitdiff
path: root/src/map/status.c
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-06-12 14:55:35 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-06-12 14:55:35 +0000
commit436313b0e5c3bc6f0d04cfdcf9d2c9db5964ce15 (patch)
tree79372d69786dc1ea658d3a37c9d91e9ac045e9e8 /src/map/status.c
parent84dc7608182bb41769841c54b63747d537d9b4da (diff)
downloadhercules-436313b0e5c3bc6f0d04cfdcf9d2c9db5964ce15.tar.gz
hercules-436313b0e5c3bc6f0d04cfdcf9d2c9db5964ce15.tar.bz2
hercules-436313b0e5c3bc6f0d04cfdcf9d2c9db5964ce15.tar.xz
hercules-436313b0e5c3bc6f0d04cfdcf9d2c9db5964ce15.zip
- Made guild member exp an unsigned int.
- Modified npc_click to receive the bl that was clicked directly. Also cleaned it up so it isn't as easy to crash the server with invalid ids <.< - Moved npc_checknear to npc_checknear2 and added npc_checknear. The near version receives a bl, checks it's validity, and returns a TBL_NPC object, near2 does the same but doesn't checks for type NPC. The first returns a pointer, the second returns 1 on fail, 0 success. - Also uncommented various npc_checknear calls in the code, who's idea was to comment them out so you could exploit npcs from afar with custom packets? - Added overflow checks for bonus settings mdef_rate/def_rate. - Added missing update of INT after a buf. - Small cleanup of how SC_BLEEDING works. - Fixed party_foreach_samemap invoking the function on the CASTER instead of on the party members. - Added clif_parse_ActionRequest_sub to handle player commands, is used from npc_click or any other function that needs to "re-route" a player's request. - Modified clif_parse_NpcClicked to handle the different situations with different bl-objects (attack on players/mobs, click on npcs or mobs with npc attached) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@7103 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/status.c')
-rw-r--r--src/map/status.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/map/status.c b/src/map/status.c
index 8bf47c39e..e1e35dcac 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -1874,8 +1874,10 @@ int status_calc_pc(struct map_session_data* sd,int first)
// ----- EQUIPMENT-DEF CALCULATION -----
// Apply relative modifiers from equipment
- if(sd->def_rate != 100)
- status->def = status->def * sd->def_rate/100;
+ if(sd->def_rate != 100) {
+ i = status->def * sd->def_rate/100;
+ status->def = cap_value(i, CHAR_MIN, CHAR_MAX);
+ }
if (!battle_config.weapon_defense_type && status->def > battle_config.max_def)
{
@@ -1891,13 +1893,15 @@ int status_calc_pc(struct map_session_data* sd,int first)
// ----- EQUIPMENT-MDEF CALCULATION -----
// Apply relative modifiers from equipment
- if(sd->mdef_rate != 100)
- status->mdef = status->mdef * sd->mdef_rate/100;
+ if(sd->mdef_rate != 100) {
+ i = status->mdef * sd->mdef_rate/100;
+ status->mdef = cap_value(i, CHAR_MIN, CHAR_MAX);
+ }
if (!battle_config.magic_defense_type && status->mdef > battle_config.max_def)
{
status->mdef2 += battle_config.over_def_bonus*(status->mdef -battle_config.max_def);
- status->mdef = (unsigned char)battle_config.max_def;
+ status->mdef = (signed char)battle_config.max_def;
}
// ----- WALKING SPEED CALCULATION -----
@@ -2396,6 +2400,8 @@ void status_calc_bl_sub_pc(struct map_session_data *sd, unsigned long flag)
clif_updatestatus(sd,SP_AGI);
if(flag&SCB_VIT)
clif_updatestatus(sd,SP_VIT);
+ if(flag&SCB_INT)
+ clif_updatestatus(sd,SP_INT);
if(flag&SCB_DEX)
clif_updatestatus(sd,SP_DEX);
if(flag&SCB_LUK)
@@ -4560,7 +4566,8 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
clif_emotion(bl,1);
break;
case SC_BLEEDING:
- val4 = tick;
+ val4 = tick/10000;
+ if (!val4) val4 = 1;
tick = 10000;
break;
@@ -5883,7 +5890,7 @@ int status_change_timer(int tid, unsigned int tick, int id, int data)
// - 10õ©ª´ªÈªËHPª¬Êõá´
// - õóúìªÎªÞªÞ«µ?«Ðì¹ÔѪä«ê«í«°ª·ªÆªâ?ÍýªÏἪ¨ªÊª¤
// To-do: bleeding effect increases damage taken?
- if ((sc->data[type].val4 -= 10000) >= 0) {
+ if ((--sc->data[type].val4) >= 0) {
status_fix_damage(NULL, bl, rand()%600 + 200, 0);
if (status_isdead(bl))
break;