summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/atcommand.c7
-rw-r--r--src/map/battle.c9
-rw-r--r--src/map/skill.c29
-rw-r--r--src/map/status.c7
4 files changed, 29 insertions, 23 deletions
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 57a439885..10b226257 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -9828,8 +9828,6 @@ static int atshowmobs_sub(struct block_list *bl,va_list ap)
static int number=0;
struct mob_data *md;
- nullpo_retr(0, bl);
-
if(!ap){
number=0;
return 0;
@@ -9840,7 +9838,10 @@ static int atshowmobs_sub(struct block_list *bl,va_list ap)
md = (struct mob_data *)bl;
- if(md && fd && (mob_id==-1 || (md->class_==mob_id))){
+ if(md->special_state.ai || md->master_id)
+ return 0; //Hide slaves and player summoned mobs. [Skotlex]
+
+ if(fd && (mob_id==-1 || (md->class_==mob_id))){
clif_viewpoint(sd, 1, 1, bl->x, bl->y, ++number, 0xFFFFFF);
add_timer(gettick()+5000, atshowmobs_timer, fd, number);
}
diff --git a/src/map/battle.c b/src/map/battle.c
index 2f254bc30..bce72d52e 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -201,6 +201,8 @@ int battle_attr_fix(struct block_list *src, struct block_list *target, int damag
ratio += enchant_eff[sc->data[SC_VIOLENTGALE].val1-1];
if(sc->data[SC_DELUGE].timer!=-1 && atk_elem == ELE_WATER)
ratio += enchant_eff[sc->data[SC_DELUGE].val1-1];
+ if(sc->data[SC_SPIDERWEB].timer!=-1 && atk_elem == ELE_FIRE) // [Celest]
+ damage *= 2; //FIXME: Double damage instead of double ratio?
}
if (tsc && tsc->count)
{
@@ -335,13 +337,6 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
status_change_end( bl,SC_AETERNA,-1 );
}
- if(sc->data[SC_SPIDERWEB].timer!=-1) // [Celest]
- if ((flag&BF_SKILL && skill_get_pl(skill_num)==ELE_FIRE) ||
- (!flag&BF_SKILL && status_get_attack_element(src)==ELE_FIRE)) {
- damage<<=1;
- status_change_end(bl, SC_SPIDERWEB, -1);
- }
-
//Finally damage reductions....
if(sc->data[SC_ASSUMPTIO].timer != -1){
if(map_flag_vs(bl->m))
diff --git a/src/map/skill.c b/src/map/skill.c
index aa5df9d19..92ad67ecd 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -1386,8 +1386,11 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
}
//Reports say that autospell effects get triggered on skills and pretty much everything including splash attacks. [Skotlex]
- if(sd && !status_isdead(bl) && src != bl &&
- !(skillid && skill_get_nk(skillid)&NK_NO_DAMAGE)) {
+ //But Gravity Patched this silently, and it now seems to trigger only on
+ //weapon attacks.
+ if(sd && !status_isdead(bl) && src != bl && attack_type&BF_WEAPON
+// !(skillid && skill_get_nk(skillid)&NK_NO_DAMAGE)
+ ) {
struct block_list *tbl;
struct unit_data *ud;
int i, skilllv;
@@ -3283,14 +3286,18 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
) { //Bounce back heal
if (--tsc->data[SC_KAITE].val2 <= 0)
status_change_end(bl, SC_KAITE, -1);
- if (src == bl) heal=0; //When you try to heal yourself and you are under Kaite, the heal is voided.
- clif_skill_nodamage (src, src, skillid, heal, 1);
- heal_get_jobexp = status_heal(src,heal,0,0);
- } else {
- clif_skill_nodamage (src, bl, skillid, heal, 1);
- heal_get_jobexp = status_heal(bl,heal,0,0);
+ if (src == bl)
+ heal=0; //When you try to heal yourself under Kaite, the heal is voided.
+ else {
+ bl = src;
+ dstsd = sd;
+ }
}
+ heal_get_jobexp = status_heal(bl,heal,0,0);
+ //All or nothing check for LK_BERSERK.
+ clif_skill_nodamage (src, bl, skillid, heal_get_jobexp?heal:0, 1);
+
if(sd && dstsd && heal > 0 && sd != dstsd && battle_config.heal_exp > 0){
heal_get_jobexp = heal_get_jobexp * battle_config.heal_exp / 100;
if (heal_get_jobexp <= 0)
@@ -8524,11 +8531,7 @@ int skill_castfix_sc (struct block_list *bl, int time)
time -= time * (sc->data[SC_SUFFRAGIUM].val1 * 15) / 100;
status_change_end(bl, SC_SUFFRAGIUM, -1);
}
-
- if (time <= 0)
- return 0; //Only Suffragium gets consumed even if time is 0
-
- if (sc->data[SC_MEMORIZE].timer != -1 && time > 0) {
+ if (sc->data[SC_MEMORIZE].timer != -1) {
time>>=1;
if ((--sc->data[SC_MEMORIZE].val2) <= 0)
status_change_end(bl, SC_MEMORIZE, -1);
diff --git a/src/map/status.c b/src/map/status.c
index 069e02f64..7cf7109b2 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -655,6 +655,9 @@ int status_damage(struct block_list *src,struct block_list *target,int hp, int s
(sc->data[SC_PROVOKE].timer==-1 || !sc->data[SC_PROVOKE].val2) &&
status->hp < status->max_hp>>2)
sc_start4(target,SC_PROVOKE,100,10,1,0,0,0);
+ if (sc->data[SC_BERSERK].timer != -1 &&
+ status->hp <= 100)
+ status_change_end(target, SC_BERSERK, -1);
}
switch (target->type)
@@ -5601,6 +5604,10 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
if (!val3)
return 0;
break;
+ case SC_GUILDAURA:
+ //Compatibility Upgrade due to Guild Aura code rewrite
+ //(older saved SC versions would load up with huge bonuses)
+ return 0;
}
//Those that make you stop attacking/walking....
switch (type) {