summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
authorrud0lp20 <rud0lp20@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-12-16 15:43:32 +0000
committerrud0lp20 <rud0lp20@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-12-16 15:43:32 +0000
commit44582e9466bd8160a3156d5e77b7b7b778f2c999 (patch)
tree49487229a8250ebf23b966c062d248b83c4275dc /src/map
parent3baf38b0d93ff29a902de61e9f2eb665dad444c1 (diff)
downloadhercules-44582e9466bd8160a3156d5e77b7b7b778f2c999.tar.gz
hercules-44582e9466bd8160a3156d5e77b7b7b778f2c999.tar.bz2
hercules-44582e9466bd8160a3156d5e77b7b7b778f2c999.tar.xz
hercules-44582e9466bd8160a3156d5e77b7b7b778f2c999.zip
Fixed bugreport:7010 where r17014 missing status_change check that may cause map server crash.
Fixed bugreport:6953 where RK_WINDCUTTER don't have skill effect. Fixed bugreport:6701 change RK_CRUSHTRIKE to self target skill. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@17026 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map')
-rw-r--r--src/map/battle.c8
-rw-r--r--src/map/skill.c51
-rw-r--r--src/map/status.c1
3 files changed, 37 insertions, 23 deletions
diff --git a/src/map/battle.c b/src/map/battle.c
index 3dd2c847e..22a3ba948 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -4775,7 +4775,13 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
skill_get_time(MO_CALLSPIRITS, tsc->data[SC_GT_ENERGYGAIN]->val1),
tsc->data[SC_GT_ENERGYGAIN]->val1);
}
-
+ if( sc && sc->data[SC_CRUSHSTRIKE] ){
+ int skilllv = sc->data[SC_CRUSHSTRIKE]->val1;
+ status_change_end(src, SC_CRUSHSTRIKE, INVALID_TIMER);
+ if( skill_attack(BF_WEAPON,src,src,target,RK_CRUSHSTRIKE,skilllv,tick,0) )
+ return ATK_DEF;
+ return ATK_MISS;
+ }
}
if(tsc && tsc->data[SC_KAAHI] && tsc->data[SC_KAAHI]->val4 == INVALID_TIMER && tstatus->hp < tstatus->max_hp)
diff --git a/src/map/skill.c b/src/map/skill.c
index bf7bee83a..c2a92cb73 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -1473,7 +1473,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
if( sc->data[SC_WILD_STORM_OPTION] )
skill = sc->data[SC_WILD_STORM_OPTION]->val2;
else if( sc->data[SC_UPHEAVAL_OPTION] )
- skill = sc->data[SC_WILD_STORM_OPTION]->val2;
+ skill = sc->data[SC_UPHEAVAL_OPTION]->val2;
else if( sc->data[SC_TROPIC_OPTION] )
skill = sc->data[SC_TROPIC_OPTION]->val3;
else if( sc->data[SC_CHILLY_AIR_OPTION] )
@@ -7518,6 +7518,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case RK_GIANTGROWTH:
case RK_VITALITYACTIVATION:
case RK_ABUNDANCE:
+ case RK_CRUSHSTRIKE:
if( sd )
{
int lv = 1; // RK_GIANTGROWTH
@@ -7525,6 +7526,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
lv = 2;
else if( skillid == RK_ABUNDANCE )
lv = 6;
+ else if( skillid == RK_CRUSHSTRIKE )
+ lv = 7;
if( pc_checkskill(sd,RK_RUNEMASTERY) >= lv )
clif_skill_nodamage(src,bl,skillid,skilllv,sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
}
@@ -10004,11 +10007,12 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
}
}
break;
-
+
+ case RK_WINDCUTTER:
+ clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skillid, skilllv, 6);
case NC_COLDSLOWER:
case NC_ARMSCANNON:
case RK_DRAGONBREATH:
- case RK_WINDCUTTER:
case WM_LULLABY_DEEPSLEEP:
i = skill_get_splash(skillid,skilllv);
map_foreachinarea(skill_area_sub,src->m,x-i,y-i,x+i,y+i,splash_target(src),
@@ -13380,6 +13384,28 @@ int skill_consume_requirement( struct map_session_data *sd, short skill, short l
if( itemid_isgemstone(req.itemid[i]) && skill != HW_GANBANTEIN && sc && sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_WIZARD )
continue; //Gemstones are checked, but not substracted from inventory.
+ switch( skill ){
+ case SA_SEISMICWEAPON:
+ if( sc && sc->data[SC_UPHEAVAL_OPTION] && rnd()%100 < 50 )
+ continue;
+ break;
+ case SA_FLAMELAUNCHER:
+ case SA_VOLCANO:
+ if( sc && sc->data[SC_TROPIC_OPTION] && rnd()%100 < 50 )
+ continue;
+ break;
+ case SA_FROSTWEAPON:
+ case SA_DELUGE:
+ if( sc && sc->data[SC_CHILLY_AIR_OPTION] && rnd()%100 < 50 )
+ continue;
+ break;
+ case SA_LIGHTNINGLOADER:
+ case SA_VIOLENTGALE:
+ if( sc && sc->data[SC_WILD_STORM_OPTION] && rnd()%100 < 50 )
+ continue;
+ break;
+ }
+
if( (n = pc_search_inventory(sd,req.itemid[i])) >= 0 )
pc_delitem(sd,n,req.amount[i],0,1,LOG_TYPE_CONSUME);
}
@@ -13524,25 +13550,6 @@ struct skill_condition skill_get_requirement(struct map_session_data* sd, short
if( i < 3 )
continue;
break;
- case SA_SEISMICWEAPON:
- if( sc->data[SC_UPHEAVAL_OPTION] && rnd()%100 < 50 )
- continue;
- break;
- case SA_FLAMELAUNCHER:
- case SA_VOLCANO:
- if( sc->data[SC_TROPIC_OPTION] && rnd()%100 < 50 )
- continue;
- break;
- case SA_FROSTWEAPON:
- case SA_DELUGE:
- if( sc->data[SC_CHILLY_AIR_OPTION] && rnd()%100 < 50 )
- continue;
- break;
- case SA_LIGHTNINGLOADER:
- case SA_VIOLENTGALE:
- if( sc && sc->data[SC_WILD_STORM_OPTION] && rnd()%100 < 50 )
- continue;
- break;
}
req.itemid[i] = skill_db[j].itemid[i];
diff --git a/src/map/status.c b/src/map/status.c
index 62cef4fc4..f73bd237e 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -557,6 +557,7 @@ void initChangeTables(void) {
set_sc( RK_VITALITYACTIVATION, SC_VITALITYACTIVATION, SI_VITALITYACTIVATION, SCB_REGEN );
set_sc( RK_FIGHTINGSPIRIT , SC_FIGHTINGSPIRIT , SI_FIGHTINGSPIRIT , SCB_WATK|SCB_ASPD );
set_sc( RK_ABUNDANCE , SC_ABUNDANCE , SI_ABUNDANCE , SCB_NONE );
+ set_sc( RK_CRUSHSTRIKE , SC_CRUSHSTRIKE , SI_CRUSHSTRIKE , SCB_NONE );
/**
* GC Guillotine Cross
**/