summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/map')
-rw-r--r--src/map/battle.c5
-rw-r--r--src/map/mob.c2
-rw-r--r--src/map/status.c25
3 files changed, 16 insertions, 16 deletions
diff --git a/src/map/battle.c b/src/map/battle.c
index 5f014879f..39256a8f2 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -620,7 +620,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
return 0;
//Now damage increasing effects
- if(sc->data[SC_AETERNA].timer!=-1 && skill_num != PA_PRESSURE){
+ if(sc->data[SC_AETERNA].timer!=-1 && skill_num != PA_PRESSURE && skill_num != PF_SOULBURN){
damage<<=1;
if (skill_num != ASC_BREAKER || flag & BF_MAGIC) //Only end it on the second attack of breaker. [Skotlex]
status_change_end( bl,SC_AETERNA,-1 );
@@ -2655,7 +2655,8 @@ struct Damage battle_calc_magic_attack(
MATK_RATE(cardfix);
}
- if (tsd && skill_num != HW_GRAVITATION) { //Card fixes always apply on the target side. [Skotlex]
+ if (tsd && skill_num != HW_GRAVITATION && skill_num != PF_SOULBURN)
+ { //Card fixes always apply on the target side. [Skotlex]
short s_race2=status_get_race2(src);
short s_class= status_get_class(src);
short cardfix=100;
diff --git a/src/map/mob.c b/src/map/mob.c
index a1cbeac41..25806b76b 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -287,7 +287,7 @@ int mob_once_spawn_area(struct map_session_data *sd,char *mapname,
max=(y1-y0+1)*(x1-x0+1)*3;
if(max>1000)max=1000;
- if(m<0 || amount<=0 || mob_db(class_) == mob_dummy) // A summon is stopped if a value is unusual
+ if (m < 0 || amount <= 0 || (class_ >= 0 && class_ <= 1000) || class_ > MAX_MOB_DB + 2*MAX_MOB_DB) // 値が異常なら召喚を止める
return 0;
for(i=0;i<amount;i++){
diff --git a/src/map/status.c b/src/map/status.c
index b6e604979..a85e42715 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -3326,12 +3326,12 @@ int status_get_element(struct block_list *bl)
nullpo_retr(20, bl);
if(sc && sc->count) {
- if( sc->data[SC_BENEDICTIO].timer!=-1 ) // 聖体降福
- return 26;
if( sc->data[SC_FREEZE].timer!=-1 ) // 凍結
return 21;
if( sc->data[SC_STONE].timer!=-1 && sc->data[SC_STONE].val2==0)
return 22;
+ if( sc->data[SC_BENEDICTIO].timer!=-1 ) // 聖体降福
+ return 26;
}
if(bl->type==BL_MOB) // 10の位=Lv*2、1の位=属性
return ((struct mob_data *)bl)->def_ele;
@@ -3689,6 +3689,15 @@ int status_change_start(struct block_list *bl,int type,int val1,int val2,int val
}
}
+ if (sc->opt1)
+ switch (type) {
+ case SC_STONE:
+ case SC_FREEZE:
+ case SC_SLEEP:
+ case SC_STAN:
+ return 0; //Cannot override other opt1 status changes. [Skotlex]
+ }
+
if((type==SC_FREEZE || type==SC_STONE) && undead_flag && !(flag&1))
//I've been informed that undead chars are inmune to stone curse too. [Skotlex]
return 0;
@@ -3732,7 +3741,7 @@ int status_change_start(struct block_list *bl,int type,int val1,int val2,int val
}
if(type==SC_FREEZE || type==SC_STAN || type==SC_SLEEP || type==SC_STOP || type == SC_CONFUSION ||
- type==SC_CLOSECONFINE || type==SC_CLOSECONFINE2)
+ type==SC_CLOSECONFINE || type==SC_CLOSECONFINE2 || type ==SC_TRICKDEAD)
battle_stopwalking(bl,1);
// クアグマイア/私を忘れないで中は無効なスキル
@@ -4628,16 +4637,6 @@ int status_change_start(struct block_list *bl,int type,int val1,int val2,int val
battle_stopattack(bl); /* 攻?停止 */
skill_stop_dancing(bl); /* 演奏/ダンスの中? */
- { /* 同時に掛からないステ?タス異常を解除 */
- int i;
- for(i = SC_STONE; i <= SC_SLEEP; i++){
- if(sc->data[i].timer != -1){
- (sc->count)--;
- delete_timer(sc->data[i].timer, status_change_timer);
- sc->data[i].timer = -1;
- }
- }
- }
if(type == SC_STONE)
sc->opt1 = OPT1_STONEWAIT;
else