diff options
author | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-06-12 14:55:35 +0000 |
---|---|---|
committer | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-06-12 14:55:35 +0000 |
commit | 436313b0e5c3bc6f0d04cfdcf9d2c9db5964ce15 (patch) | |
tree | 79372d69786dc1ea658d3a37c9d91e9ac045e9e8 /src/map/status.c | |
parent | 84dc7608182bb41769841c54b63747d537d9b4da (diff) | |
download | hercules-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.c | 21 |
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; |