summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt1
-rw-r--r--src/map/battle.c7
-rw-r--r--src/map/battle.h14
-rw-r--r--src/map/skill.c1
-rw-r--r--src/map/status.c29
5 files changed, 15 insertions, 37 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 2c32b2e3e..a280c72f3 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -4,6 +4,7 @@ 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.
2006/08/07
+ * Reflected damage will now also have a chance of draining hp/sp. [Skotlex]
* Adjusted the order in which option/sc change packets are sent to match
Aegis's [Skotlex]
* Added script command getpartyleader through which you can retrieve
diff --git a/src/map/battle.c b/src/map/battle.c
index 34ff61ad2..9b846e82c 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -25,8 +25,6 @@
#include "guild.h"
#include "party.h"
-#define is_boss(bl) status_get_mexp(bl) // Can refine later [Aru]
-
int attr_fix_table[4][ELE_MAX][ELE_MAX];
struct Battle_Config battle_config;
@@ -3061,8 +3059,11 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target,
battle_drain(sd, target, wd.damage, wd.damage2, tstatus->race, is_boss(target));
}
}
- if (rdamage > 0) //By sending attack type "none" skill_additional_effect won't be invoked. [Skotlex]
+ if (rdamage > 0) { //By sending attack type "none" skill_additional_effect won't be invoked. [Skotlex]
+
+ battle_drain(tsd, src, rdamage, rdamage, sstatus->race, is_boss(src));
battle_delay_damage(tick+wd.amotion, target, src, 0, 0, 0, rdamage, ATK_DEF, rdelay);
+ }
if (tsc) {
if (tsc->data[SC_POISONREACT].timer != -1 &&
diff --git a/src/map/battle.h b/src/map/battle.h
index 43f20c4e0..d410e7a12 100644
--- a/src/map/battle.h
+++ b/src/map/battle.h
@@ -73,17 +73,9 @@ int battle_getcurrentskill(struct block_list *bl);
#define BCT_NOONE 0x000000
#define BCT_SELF 0x010000
#define BCT_NEUTRAL 0x100000
-/*
-enum {
- BCT_NOENEMY =0x00000,
- BCT_PARTY =0x10000,
- BCT_ENEMY =0x40000,
- BCT_NOPARTY =0x50000,
- BCT_ALL =0x20000,
- BCT_NOONE =0x60000,
- BCT_SELF =0x60000,
-};
-*/
+
+#define is_boss(bl) status_get_mexp(bl) // Can refine later [Aru]
+
int battle_check_undead(int race,int element);
int battle_check_target(struct block_list *src, struct block_list *target,int flag);
int battle_check_range(struct block_list *src,struct block_list *bl,int range);
diff --git a/src/map/skill.c b/src/map/skill.c
index 3de357f22..60802d79a 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -2112,6 +2112,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
status_fix_damage(bl,src,rdamage,0);
clif_damage(src,src,tick, dmg.amotion,0,rdamage,1,4,0);
//Use Reflect Shield to signal this kind of skill trigger. [Skotlex]
+ battle_drain(tsd, src, rdamage, rdamage, sstatus->race, is_boss(src));
skill_additional_effect(bl,src,CR_REFLECTSHIELD, 1,BF_WEAPON,tick);
}
diff --git a/src/map/status.c b/src/map/status.c
index a762da8de..48560f17c 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -1992,7 +1992,7 @@ int status_calc_pc(struct map_session_data* sd,int first)
status->aspd_rate -= 30*skill;
if((skill=pc_checkskill(sd,GS_SINGLEACTION))>0 &&
(sd->status.weapon >= W_REVOLVER && sd->status.weapon <= W_GRENADE))
- status->aspd_rate -= (int)((skill+1)/2) * 10;
+ status->aspd_rate -= ((skill+1)/2) * 10;
if(pc_isriding(sd))
status->aspd_rate += 500-100*pc_checkskill(sd,KN_CAVALIERMASTERY);
@@ -3842,16 +3842,8 @@ int status_get_party_id(struct block_list *bl)
}
return 0; //No party.
}
- if(bl->type==BL_HOM){ //[orn]
- struct homun_data *hd=(struct homun_data *)bl;
- if( hd->master->bl.id>0 )
- {
- if ( hd->master != NULL)
- return hd->master->status.party_id;
- return -1;
- }
- return 0; //No party.
- }
+ if(bl->type==BL_HOM && ((TBL_HOM*)bl)->master)
+ return ((TBL_HOM*)bl)->master->status.party_id;
if(bl->type==BL_SKILL)
return ((struct skill_unit *)bl)->group->party_id;
return 0;
@@ -3874,16 +3866,8 @@ int status_get_guild_id(struct block_list *bl)
return msd->status.guild_id; //Alchemist's mobs [Skotlex]
return 0; //No guild.
}
- if(bl->type==BL_HOM){ //[orn]
- struct homun_data *hd=(struct homun_data *)bl;
- if( hd->master->bl.id>0 )
- {
- if ( hd->master != NULL)
- return hd->master->status.guild_id;
- return -1;
- }
- return 0; //No guild.
- }
+ if(bl->type==BL_HOM && ((TBL_HOM*)bl)->master)
+ return ((TBL_HOM*)bl)->master->status.guild_id;
if (bl->type == BL_NPC && bl->subtype == SCRIPT)
return ((TBL_NPC*)bl)->u.scr.guild_id;
if(bl->type==BL_SKILL)
@@ -3940,7 +3924,7 @@ struct view_data *status_get_viewdata(struct block_list *bl)
case BL_NPC:
return ((TBL_NPC*)bl)->vd;
case BL_HOM: //[blackhole89]
- return ((struct homun_data*)bl)->vd;
+ return ((TBL_HOM*)bl)->vd;
}
return NULL;
}
@@ -5604,7 +5588,6 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
sc->data[type].timer = add_timer(
gettick() + tick, status_change_timer, bl->id, type);
-
if (calc_flag)
status_calc_bl(bl,calc_flag);