diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/map/atcommand.c | 7 | ||||
-rw-r--r-- | src/map/battle.c | 9 | ||||
-rw-r--r-- | src/map/skill.c | 29 | ||||
-rw-r--r-- | src/map/status.c | 7 |
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) {
|