summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt8
-rw-r--r--conf-tmpl/battle/skill.conf446
-rw-r--r--src/map/battle.c15
-rw-r--r--src/map/battle.h3
-rw-r--r--src/map/mob.c4
-rw-r--r--src/map/pc.c7
-rw-r--r--src/map/skill.c13
-rw-r--r--src/map/status.c2
-rw-r--r--src/map/status.h1
9 files changed, 271 insertions, 228 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 9e24f6711..5695ddb4a 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -5,6 +5,14 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. EV
GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS
2006/02/18
+ * Implemented SG_MIRACLE (Miracle of the Sun, Moon and Stars) [Komurka]
+ - duration is stored in battle_config.sg_miracle_skill_duration (currently
+ it's set to 10 minutes)
+ - ratio is stored in battle_config.sg_miracle_skill_ratio (currently it's set
+ to 0.01% chance per character move)
+ - this skill enables you usage of all Warmth skills, Comfort skills, and also
+ all mobs will be target of the Stars regardless of the day and map
+ - you'll see message "[Miracle of the Sun, Moon and Stars]" when skill kicks in
* Added upgrade file upgrade_svn5322.sql because apparently not everyone
has the guild table with autoincremental guild_id defined. [Skotlex]
- If you can't create guilds, chances are you need to apply this ugprade.
diff --git a/conf-tmpl/battle/skill.conf b/conf-tmpl/battle/skill.conf
index 9c61ab6d2..6b163af3c 100644
--- a/conf-tmpl/battle/skill.conf
+++ b/conf-tmpl/battle/skill.conf
@@ -1,220 +1,226 @@
-// ______ __ __
-// /\ _ \/\ \__/\ \
-// __\ \ \L\ \ \ ,_\ \ \___ __ ___ __
-// /'__`\ \ __ \ \ \/\ \ _ `\ /'__`\/' _ `\ /'__`\
-///\ __/\ \ \/\ \ \ \_\ \ \ \ \/\ __//\ \/\ \/\ \L\.\_
-//\ \____\\ \_\ \_\ \__\\ \_\ \_\ \____\ \_\ \_\ \__/.\_\
-// \/____/ \/_/\/_/\/__/ \/_/\/_/\/____/\/_/\/_/\/__/\/_/
-// _ _ _ _ _ _ _ _ _ _ _ _ _
-// / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
-//( e | n | g | l | i | s | h ) ( A | t | h | e | n | a )
-// \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
-//
-//--------------------------------------------------------------
-// eAthena Battle Configuration File
-// Originally Translated by Peter Kieser <pfak@telus.net>
-// Made in to plainer English by Ancyker
-//--------------------------------------------------------------
-//Note 1: Directives can be set using on/off, yes/no or 1/0.
-//Note 2: All rates are in percents, 100 would mean 100%, 200
-// would mean 200%, etc
-//Note 3: Value is not limited to 60K (see below)
-// Other Information:
-// All options are limited to a max of 60K (aprox) which is 600%
-// or 60secs as appropiate.
-// 1000 miliseconds is 1 second.
-// Unless otherwise specified, the minimum value is 0 for all
-// features.
-//--------------------------------------------------------------
-
-// The rate of time it takes to cast a spell (Note 2, 0 = No casting time)
-casting_rate: 100
-
-// Delay time after casting (Note 2)
-delay_rate: 100
-
-// Is the delay time is dependent on the caster's DEX? (Note 1)
-// Note: On Official servers Dex does NOT affect delay time
-delay_dependon_dex: no
-
-// Minimum allowed delay for ANY skills after casting (in miliseconds) (Note 1)
-// Note: Setting this to anything above 0 can stop speedhacks.
-min_skill_delay_limit: 100
-
-// At what dex does the cast time become zero (instacast)
-castrate_dex_scale: 150
-
-// Will normal attacks be able to ignore the delay after skills? (Note 1)
-skill_delay_attack_enable: no
-
-// Range added to player skills after their cast time finishes.
-// Decides how far away the target can walk away after the skill began casting before the skill fails.
-player_skill_add_range: 15
-
-// If the target moves out of range while casting, do we take the items and SP for the skill anyway? (Note 1)
-skill_out_range_consume: no
-
-// Range added to mob skills after their cast time finishes.
-// Decides how far away the target can walk away after the skill began casting before the skill fails.
-monster_skill_add_range: 15
-
-// Does the distance between caster and target define if the skill is a ranged skill?
-// If set, when the distance between caster and target is greater than 3 the skill is considered long-range, otherwise it's a melee range.
-// If not set, then the range is determined by the skill (eg: Double Strafe is always long-ranged).
-// Mask values (add as necessary):
-// 1: Players
-// 2: Mobs
-// 4: Pets
-// Default 6 (mobs + pets)
-skillrange_by_distance: 6
-
-// Should the equipped weapon's range override the skill's range defined in the skill_db for most weapon-based skills? (Note 1)
-// NOTE: Skills affected by this option are those whose range in the skill_db are negative.
-skillrange_from_weapon: no
-
-// Should a check on the caster's status be performed in all skill attacks?
-// When set to yes, meteors, storm gust and any other ground skills will have
-// no effect while the caster is unable to fight (eg: stunned).
-skill_caster_check: yes
-
-// Should skill casting be cancelled when inflicted by curse/stun/sleep/etc?
-status_cast_cancel: no
-
-//Setting this to YES will override the target mode of ground-based skills with the flag 0x01 to "No Enemies"
-//The two skills affected by default are Pneuma and Safety Wall (if set to yes, those two skills will not protect everyone, but only allies)
-//See db/skill_unit_db.txt for more info.
-defunit_not_enemy: no
-
-// Do skills do at least 'hits' damage when they don't miss/are blocked?
-//(for example, will firebolts always do "number of bolts" damage versus plants?)
-//Values (add as appropiate): 1 for weapon-based attacks, 2 for magic attacks, 4 for misc attacks.
-skill_min_damage: 6
-
-// The delay rate of monk's combo (Note 2)
-combo_delay_rate: 100
-
-// Counter Attack Skill Type
-// 0 = 100% critical
-// 1 = disregard DEF and HIT+20, CRI*2
-// Players
-player_auto_counter_type: 0
-// Monsters
-monster_auto_counter_type: 0
-
-// Whether or not, ground skills of the players' will stack. (Note 1)
-player_skill_reiteration: no
-
-//Whether or not, ground skills of the monsters' will pile up. (Note 1)
-monster_skill_reiteration: no
-
-// Whether players are not allowed to cast ground based skills of a certain type such
-// as traps straight onto or nearby other players/monsters. (Note 1)
-player_skill_nofootset: yes
-
-// Whether monsters are not allowed to cast ground based skills of a certain type such
-// as traps straight onto or nearby other players. (Note 1)
-monster_skill_nofootset: no
-
-// Whether placed down skills will check walls (Note 1)
-// (Makes it so that Storm Gust/Lord of Vermillion/etc when casted next to a wall, won't hit on the other side)
-// NOTE: It may degrade performance to enable this.
-skill_wall_check: no
-
-// When a player is cloaking, Whether the wall is checked or not. (Note 1)
-// Note: When set to no players can always cloak away from walls and move around
-// freely even if the skill level is below 3.
-// no or 0 = doesn't check for walls (you can cloak without walls)
-// 1 = it checks for walls
-// 2 = it doesn't checks for walls + your cloaking lasts forever
-// 3 = it checks for walls + your cloaking lasts forever (it is not cancelled on attack)
-player_cloak_check_type: 1
-
-// When a monster is cloaking, Whether the wall is checked or not. (Note 1)
-monster_cloak_check_type: no
-
-// Will Player Skills Stay Within Land Limit or not? (Note 1)
-player_land_skill_limit: yes
-
-// Will Monster Skills Stay Within Land Limit or not? (Note 1)
-monster_land_skill_limit: yes
-
-// If skill fails by delay, should it display or not. (Note 1)
-display_delay_skill_fail: yes
-
-// Display Snatcher skill failures
-display_snatcher_skill_fail: yes
-
-// Can a player in chat room (in-game), be warped by a warp portal? (Note 1)
-chat_warpportal: no
-
-// Can a monster be warped by a warp portal? (Note 1)
-mob_warpportal: no
-
-// What should the wizard's "Sense" skill display on the defense fields?
-// 0: Do not show defense
-// 1: Base defense
-// 2: Vit/Int defense
-// 3: Both (the addition of both) [default]
-sense_type: 3
-
-// Which finger offensive style can be used?
-// 0 = Aegis style
-// 1 = Athena style
-finger_offensive_type: 0
-
-// Number of hits at a time that undead/fire elemental enemies receive from firewall.
-// NOTE: Officially, it is one hit at a time on a very fast rate, however eA's timer system
-// doesn't triggers enough "hits" to exhaust the firewall before the mob walks through it.
-// A value of 5 would suffice for a vertical firewall to take full effect on undead.
-firewall_hits_on_undead: 1
-
-// Grandcross Settings (Dont mess with these)
-// If set to no, hit interval is increased based on the amount of mobs standing on the same cell
-// (means that when there's stacked mobs in the same cell, they won't receive all hits)
-gx_allhit: no
-
-// Grandcross display type (Default 1)
-// 0: Yellow character
-// 1: White character
-gx_disptype: 1
-
-// Max Level Difference for Devotion
-devotion_level_difference: 10
-
-// If no than you can use the ensemble skills alone. (Note 1)
-player_skill_partner_check: yes
-
-// Remove trap type
-// 0 - Aegis system : Returns 1 'Trap' item
-// 1 - Athena system : Allows the returned item and amount to be defined
-skill_removetrap_type: 0
-
-// Does using bow to do a backstab give a 50% damage penalty? (Note 1)
-backstab_bow_penalty: yes
-
-// Use kRO new steal formula?
-skill_steal_type: yes
-
-// Can Rogues plagiarize advanced job skills
-// 0 = no restriction
-// 1 = only stalker may plagiarize advanced skills
-// 2 = advanced skills cannot be plagiarized by anyone
-// Official servers setting: 2
-copyskill_restrict: 2
-
-// Does Berserk/Frenzy cancel other self-buffs when used?
-berserk_cancels_buffs: no
-
-// Max Possible Level of Monster skills
-// Note: If your MVPs are too tough, reduce it to 10.
-mob_max_skilllvl: 100
-
-// Allows players to skip menu when casting Teleport level 1
-// Menu contains two options. "Random" and "Cancel"
-skip_teleport_lv1_menu: no
-
-// Allow use of SG skills without proper day (Sun/Moon/Star) ?
-allow_skill_without_day: no
-
-// Allow use of ES-type magic on players?
-allow_es_magic_player: no
+// ______ __ __
+// /\ _ \/\ \__/\ \
+// __\ \ \L\ \ \ ,_\ \ \___ __ ___ __
+// /'__`\ \ __ \ \ \/\ \ _ `\ /'__`\/' _ `\ /'__`\
+///\ __/\ \ \/\ \ \ \_\ \ \ \ \/\ __//\ \/\ \/\ \L\.\_
+//\ \____\\ \_\ \_\ \__\\ \_\ \_\ \____\ \_\ \_\ \__/.\_\
+// \/____/ \/_/\/_/\/__/ \/_/\/_/\/____/\/_/\/_/\/__/\/_/
+// _ _ _ _ _ _ _ _ _ _ _ _ _
+// / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+//( e | n | g | l | i | s | h ) ( A | t | h | e | n | a )
+// \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+//
+//--------------------------------------------------------------
+// eAthena Battle Configuration File
+// Originally Translated by Peter Kieser <pfak@telus.net>
+// Made in to plainer English by Ancyker
+//--------------------------------------------------------------
+//Note 1: Directives can be set using on/off, yes/no or 1/0.
+//Note 2: All rates are in percents, 100 would mean 100%, 200
+// would mean 200%, etc
+//Note 3: Value is not limited to 60K (see below)
+// Other Information:
+// All options are limited to a max of 60K (aprox) which is 600%
+// or 60secs as appropiate.
+// 1000 miliseconds is 1 second.
+// Unless otherwise specified, the minimum value is 0 for all
+// features.
+//--------------------------------------------------------------
+
+// The rate of time it takes to cast a spell (Note 2, 0 = No casting time)
+casting_rate: 100
+
+// Delay time after casting (Note 2)
+delay_rate: 100
+
+// Is the delay time is dependent on the caster's DEX? (Note 1)
+// Note: On Official servers Dex does NOT affect delay time
+delay_dependon_dex: no
+
+// Minimum allowed delay for ANY skills after casting (in miliseconds) (Note 1)
+// Note: Setting this to anything above 0 can stop speedhacks.
+min_skill_delay_limit: 100
+
+// At what dex does the cast time become zero (instacast)
+castrate_dex_scale: 150
+
+// Will normal attacks be able to ignore the delay after skills? (Note 1)
+skill_delay_attack_enable: no
+
+// Range added to player skills after their cast time finishes.
+// Decides how far away the target can walk away after the skill began casting before the skill fails.
+player_skill_add_range: 15
+
+// If the target moves out of range while casting, do we take the items and SP for the skill anyway? (Note 1)
+skill_out_range_consume: no
+
+// Range added to mob skills after their cast time finishes.
+// Decides how far away the target can walk away after the skill began casting before the skill fails.
+monster_skill_add_range: 15
+
+// Does the distance between caster and target define if the skill is a ranged skill?
+// If set, when the distance between caster and target is greater than 3 the skill is considered long-range, otherwise it's a melee range.
+// If not set, then the range is determined by the skill (eg: Double Strafe is always long-ranged).
+// Mask values (add as necessary):
+// 1: Players
+// 2: Mobs
+// 4: Pets
+// Default 6 (mobs + pets)
+skillrange_by_distance: 6
+
+// Should the equipped weapon's range override the skill's range defined in the skill_db for most weapon-based skills? (Note 1)
+// NOTE: Skills affected by this option are those whose range in the skill_db are negative.
+skillrange_from_weapon: no
+
+// Should a check on the caster's status be performed in all skill attacks?
+// When set to yes, meteors, storm gust and any other ground skills will have
+// no effect while the caster is unable to fight (eg: stunned).
+skill_caster_check: yes
+
+// Should skill casting be cancelled when inflicted by curse/stun/sleep/etc?
+status_cast_cancel: no
+
+//Setting this to YES will override the target mode of ground-based skills with the flag 0x01 to "No Enemies"
+//The two skills affected by default are Pneuma and Safety Wall (if set to yes, those two skills will not protect everyone, but only allies)
+//See db/skill_unit_db.txt for more info.
+defunit_not_enemy: no
+
+// Do skills do at least 'hits' damage when they don't miss/are blocked?
+//(for example, will firebolts always do "number of bolts" damage versus plants?)
+//Values (add as appropiate): 1 for weapon-based attacks, 2 for magic attacks, 4 for misc attacks.
+skill_min_damage: 6
+
+// The delay rate of monk's combo (Note 2)
+combo_delay_rate: 100
+
+// Counter Attack Skill Type
+// 0 = 100% critical
+// 1 = disregard DEF and HIT+20, CRI*2
+// Players
+player_auto_counter_type: 0
+// Monsters
+monster_auto_counter_type: 0
+
+// Whether or not, ground skills of the players' will stack. (Note 1)
+player_skill_reiteration: no
+
+//Whether or not, ground skills of the monsters' will pile up. (Note 1)
+monster_skill_reiteration: no
+
+// Whether players are not allowed to cast ground based skills of a certain type such
+// as traps straight onto or nearby other players/monsters. (Note 1)
+player_skill_nofootset: yes
+
+// Whether monsters are not allowed to cast ground based skills of a certain type such
+// as traps straight onto or nearby other players. (Note 1)
+monster_skill_nofootset: no
+
+// Whether placed down skills will check walls (Note 1)
+// (Makes it so that Storm Gust/Lord of Vermillion/etc when casted next to a wall, won't hit on the other side)
+// NOTE: It may degrade performance to enable this.
+skill_wall_check: no
+
+// When a player is cloaking, Whether the wall is checked or not. (Note 1)
+// Note: When set to no players can always cloak away from walls and move around
+// freely even if the skill level is below 3.
+// no or 0 = doesn't check for walls (you can cloak without walls)
+// 1 = it checks for walls
+// 2 = it doesn't checks for walls + your cloaking lasts forever
+// 3 = it checks for walls + your cloaking lasts forever (it is not cancelled on attack)
+player_cloak_check_type: 1
+
+// When a monster is cloaking, Whether the wall is checked or not. (Note 1)
+monster_cloak_check_type: no
+
+// Will Player Skills Stay Within Land Limit or not? (Note 1)
+player_land_skill_limit: yes
+
+// Will Monster Skills Stay Within Land Limit or not? (Note 1)
+monster_land_skill_limit: yes
+
+// If skill fails by delay, should it display or not. (Note 1)
+display_delay_skill_fail: yes
+
+// Display Snatcher skill failures
+display_snatcher_skill_fail: yes
+
+// Can a player in chat room (in-game), be warped by a warp portal? (Note 1)
+chat_warpportal: no
+
+// Can a monster be warped by a warp portal? (Note 1)
+mob_warpportal: no
+
+// What should the wizard's "Sense" skill display on the defense fields?
+// 0: Do not show defense
+// 1: Base defense
+// 2: Vit/Int defense
+// 3: Both (the addition of both) [default]
+sense_type: 3
+
+// Which finger offensive style can be used?
+// 0 = Aegis style
+// 1 = Athena style
+finger_offensive_type: 0
+
+// Number of hits at a time that undead/fire elemental enemies receive from firewall.
+// NOTE: Officially, it is one hit at a time on a very fast rate, however eA's timer system
+// doesn't triggers enough "hits" to exhaust the firewall before the mob walks through it.
+// A value of 5 would suffice for a vertical firewall to take full effect on undead.
+firewall_hits_on_undead: 1
+
+// Grandcross Settings (Dont mess with these)
+// If set to no, hit interval is increased based on the amount of mobs standing on the same cell
+// (means that when there's stacked mobs in the same cell, they won't receive all hits)
+gx_allhit: no
+
+// Grandcross display type (Default 1)
+// 0: Yellow character
+// 1: White character
+gx_disptype: 1
+
+// Max Level Difference for Devotion
+devotion_level_difference: 10
+
+// If no than you can use the ensemble skills alone. (Note 1)
+player_skill_partner_check: yes
+
+// Remove trap type
+// 0 - Aegis system : Returns 1 'Trap' item
+// 1 - Athena system : Allows the returned item and amount to be defined
+skill_removetrap_type: 0
+
+// Does using bow to do a backstab give a 50% damage penalty? (Note 1)
+backstab_bow_penalty: yes
+
+// Use kRO new steal formula?
+skill_steal_type: yes
+
+// Can Rogues plagiarize advanced job skills
+// 0 = no restriction
+// 1 = only stalker may plagiarize advanced skills
+// 2 = advanced skills cannot be plagiarized by anyone
+// Official servers setting: 2
+copyskill_restrict: 2
+
+// Does Berserk/Frenzy cancel other self-buffs when used?
+berserk_cancels_buffs: no
+
+// Max Possible Level of Monster skills
+// Note: If your MVPs are too tough, reduce it to 10.
+mob_max_skilllvl: 100
+
+// Allows players to skip menu when casting Teleport level 1
+// Menu contains two options. "Random" and "Cancel"
+skip_teleport_lv1_menu: no
+
+// Allow use of SG skills without proper day (Sun/Moon/Star) ?
+allow_skill_without_day: no
+
+// Allow use of ES-type magic on players?
+allow_es_magic_player: no
+
+//Miracle of the Sun, Moon and Stars skill ratio (100% = 10000)
+sg_miracle_skill_ratio: 1
+
+//Miracle of the Sun, Moon and Stars skill duration in milisecons
+sg_miracle_skill_duration: 600000
diff --git a/src/map/battle.c b/src/map/battle.c
index f7965a5b7..7439760b5 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -1995,7 +1995,12 @@ static struct Damage battle_calc_weapon_attack(
{ //SG Anger bonus - ATK_ADDRATE [Komurka]
static int type[] = { SG_SUN_ANGER, SG_MOON_ANGER, SG_STAR_ANGER };
short t_class = status_get_class(target);
- for (i = 0; i < 3; i++)
+ if (sc->data && sc->data[SC_MIRACLE].timer!=-1 && (skill = pc_checkskill(sd,type[2])))
+ {
+ skillratio = (sd->status.base_level + status_get_str(src) + status_get_dex(src)+ status_get_luk(src))/(skill<4?12-3*skill:1);
+ ATK_ADDRATE(skillratio);
+ }
+ else for (i = 0; i < 3; i++)
{
if (t_class == sd->hate_mob[i] && (skill = pc_checkskill(sd,type[i])))
{
@@ -3826,6 +3831,7 @@ static const struct battle_data_short {
{ "mob_status_def_rate", &battle_config.mob_sc_def_rate },
{ "pc_max_status_def", &battle_config.pc_max_sc_def },
{ "mob_max_status_def", &battle_config.mob_max_sc_def },
+ { "sg_miracle_skill_ratio", &battle_config.sg_miracle_skill_ratio },
};
static const struct battle_data_int {
@@ -3861,6 +3867,8 @@ static const struct battle_data_int {
{ "day_duration", &battle_config.day_duration }, // added by [Yor]
{ "night_duration", &battle_config.night_duration }, // added by [Yor]
{ "mob_remove_delay", &battle_config.mob_remove_delay },
+ { "sg_miracle_skill_duration", &battle_config.sg_miracle_skill_duration },
+
};
int battle_set_value(char *w1, char *w2) {
@@ -4221,6 +4229,8 @@ void battle_set_defaults() {
battle_config.mob_sc_def_rate = 100;
battle_config.pc_max_sc_def = 10000;
battle_config.mob_max_sc_def = 5000;
+ battle_config.sg_miracle_skill_ratio=1;
+ battle_config.sg_miracle_skill_duration=600000;
}
void battle_validate_conf() {
@@ -4413,6 +4423,9 @@ void battle_validate_conf() {
battle_config.pc_max_sc_def = 10000;
if (battle_config.mob_max_sc_def > 10000)
battle_config.mob_max_sc_def = 10000;
+ if (battle_config.sg_miracle_skill_ratio > 10000)
+ battle_config.sg_miracle_skill_ratio = 10000;
+
#ifdef CELL_NOSTACK
if (battle_config.cell_stack_limit < 1)
battle_config.cell_stack_limit = 1;
diff --git a/src/map/battle.h b/src/map/battle.h
index 92828223e..09eddf294 100644
--- a/src/map/battle.h
+++ b/src/map/battle.h
@@ -427,6 +427,9 @@ extern struct Battle_Config {
unsigned short pc_max_sc_def;
unsigned short mob_max_sc_def;
+ unsigned short sg_miracle_skill_ratio;
+ int sg_miracle_skill_duration;
+
} battle_config;
void do_init_battle(void);
diff --git a/src/map/mob.c b/src/map/mob.c
index 6be660c9e..af8cb9dea 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -2474,7 +2474,9 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
per *= 1.15; // pk_mode additional exp if monster >20 levels [Valaris]
//SG additional exp from Blessings [Komurka] - probably can be optimalized ^^;;
- if(md->class_ == tmpsd[i]->hate_mob[0] && (battle_config.allow_skill_without_day || is_day_of_sun()))
+ if (tmpsd[i]->sc.data[SC_MIRACLE].timer!=-1)
+ per += per*20*pc_checkskill(tmpsd[i],SG_STAR_BLESS)/100.;
+ else if(md->class_ == tmpsd[i]->hate_mob[0] && (battle_config.allow_skill_without_day || is_day_of_sun()))
per += per*10*pc_checkskill(tmpsd[i],SG_SUN_BLESS)/100.;
else if(md->class_ == tmpsd[i]->hate_mob[1] && (battle_config.allow_skill_without_day || is_day_of_moon()))
per += per*10*pc_checkskill(tmpsd[i],SG_MOON_BLESS)/100.;
diff --git a/src/map/pc.c b/src/map/pc.c
index 0d10dfc69..216d9cfd2 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -3728,6 +3728,13 @@ int pc_walktoxy (struct map_session_data *sd, int x, int y)
map_foreachinrange(skill_guildaura_sub, &sd->bl,2, BL_PC,
sd->bl.id, sd->status.guild_id, &guildflag);
}
+ //SG_MIRACLE [Komurka]
+ if (sd->sc.data && sd->sc.data[SC_MIRACLE].timer==-1 && ((sd->status.class_==JOB_STAR_GLADIATOR) || (sd->status.class_==JOB_STAR_GLADIATOR2)) && (rand()%10000 < battle_config.sg_miracle_skill_ratio) )
+ {
+ clif_displaymessage(sd->fd,"[Miracle of the Sun, Moon and Stars]");
+ status_change_start(&sd->bl,SC_MIRACLE,100,
+ 1,0,0,0,battle_config.sg_miracle_skill_duration,0);
+ }
return 0;
}
diff --git a/src/map/skill.c b/src/map/skill.c
index d18b87c22..405e5a109 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -7968,36 +7968,37 @@ int skill_check_condition(struct map_session_data *sd,int type)
clif_skill_fail(sd,skill,0,0);
return 0;
}
+ //SHOULD BE OPTIMALIZED [Komurka]
case SG_SUN_WARM:
- if(sd->bl.m == sd->feel_map[0].m)
+ if ((sd->bl.m == sd->feel_map[0].m) || (sd->sc.data[SC_MIRACLE].timer!=-1))
break;
clif_skill_fail(sd,skill,0,0);
return 0;
break;
case SG_MOON_WARM:
- if(sd->bl.m == sd->feel_map[1].m)
+ if ((sd->bl.m == sd->feel_map[1].m) || (sd->sc.data[SC_MIRACLE].timer!=-1))
break;
clif_skill_fail(sd,skill,0,0);
return 0;
break;
case SG_STAR_WARM:
- if(sd->bl.m == sd->feel_map[2].m)
+ if ((sd->bl.m == sd->feel_map[2].m) || (sd->sc.data[SC_MIRACLE].timer!=-1))
break;
clif_skill_fail(sd,skill,0,0);
return 0;
break;
case SG_SUN_COMFORT:
- if(sd->bl.m == sd->feel_map[0].m && (battle_config.allow_skill_without_day || is_day_of_sun()))
+ if ((sd->bl.m == sd->feel_map[0].m && (battle_config.allow_skill_without_day || is_day_of_sun())) || (sd->sc.data[SC_MIRACLE].timer!=-1))
break;
clif_skill_fail(sd,skill,0,0);
return 0;
case SG_MOON_COMFORT:
- if(sd->bl.m == sd->feel_map[1].m && (battle_config.allow_skill_without_day || is_day_of_moon()))
+ if ((sd->bl.m == sd->feel_map[1].m && (battle_config.allow_skill_without_day || is_day_of_moon())) || (sd->sc.data[SC_MIRACLE].timer!=-1))
break;
clif_skill_fail(sd,skill,0,0);
return 0;
case SG_STAR_COMFORT:
- if(sd->bl.m == sd->feel_map[2].m && (battle_config.allow_skill_without_day || is_day_of_star()))
+ if ((sd->bl.m == sd->feel_map[2].m && (battle_config.allow_skill_without_day || is_day_of_star())) || (sd->sc.data[SC_MIRACLE].timer!=-1))
break;
clif_skill_fail(sd,skill,0,0);
return 0;
diff --git a/src/map/status.c b/src/map/status.c
index 1dc45a26f..6c1350a0f 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -302,6 +302,7 @@ void initChangeTables(void) {
StatusIconChangeTable[SC_ASPDPOTION3] = SI_ASPDPOTION;
StatusIconChangeTable[SC_SPEEDUP0] = SI_SPEEDPOTION;
StatusIconChangeTable[SC_SPEEDUP1] = SI_SPEEDPOTION;
+ StatusIconChangeTable[SC_MIRACLE] = SI_SPIRIT;
//Guild skills don't fit due to their range being beyond MAX_SKILL
StatusIconChangeTable[SC_GUILDAURA] = SI_GUILDAURA;
@@ -4366,6 +4367,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
case SC_STEELBODY: //
case SC_SKA:
case SC_TWOHANDQUICKEN: /* 2HQ */
+ case SC_MIRACLE:
calc_flag = 1;
break;
diff --git a/src/map/status.h b/src/map/status.h
index 2ad97bf9b..13989080f 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -229,6 +229,7 @@ enum {
SC_SWOO, // [marquis007]
SC_SKA, // [marquis007]
SC_TKDORI, // [marquis007]
+ SC_MIRACLE, //SG 'hidden' skill [Komurka]
//
SC_MAX, //Automatically updated max, used in for's and at startup to check we are within bounds. [Skotlex]
};