summaryrefslogtreecommitdiff
path: root/src/map/skill.c
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-02-06 18:38:51 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-02-06 18:38:51 +0000
commite7096ca70629c5fd5f824cec8e2d4307e8578913 (patch)
treeae574e1de73431050206ac7d01f3f04caaec7c41 /src/map/skill.c
parent86914c88410c49b2b84084f2165fc9b581f2986e (diff)
downloadhercules-e7096ca70629c5fd5f824cec8e2d4307e8578913.tar.gz
hercules-e7096ca70629c5fd5f824cec8e2d4307e8578913.tar.bz2
hercules-e7096ca70629c5fd5f824cec8e2d4307e8578913.tar.xz
hercules-e7096ca70629c5fd5f824cec8e2d4307e8578913.zip
- Added define clif_deadsit to send the dead state into player packets if the player is in trick dead state.
- Venom Splasher always hits (but splash damage targets can still avoid it) - Using autoloot with no arguments now toggles it between @autoloot 0 and @autoloot 100% - Falcon Assault now takes Blitz Beat lv5 as base damage. - Fixed pc_makesavestatus not updating status.option correctly. - Corrected Waterball so that higher levels can do insane amount of hits. - Altered slave behaviour. No more random walking, will stay within 2 cells of their master. - Reverted the Summon Slave behaviour to not adjust level based on number of current slaves. - Coma no longer sends SP to 1. - Updated Meteor so that when level 11 or more is casted, the area over which meteors fall is tripled. - Dark elemental characters are now inmune to Curse. - Fixed sc_data saving to sql buffer building method. Thanks to its_sparky. - Changed the map zone reading from using pow to a bit shift. - Experience has now been changed to unsigned int, and is read as such from the dbs. - Increased HT_DETECTING seek range to 7x7 - Added function map_foreachinrange which actually checks distance of nearing objects (unlike for each in area which uses a square area), may come handy for future code. - Corrected Venom Splasher: Being hit does not cancels it, works at 75% or less of target's HP, being hit normally while under the count has a chance of causing poison. Damage is +400% + 50*lv% git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@5204 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/skill.c')
-rw-r--r--src/map/skill.c47
1 files changed, 29 insertions, 18 deletions
diff --git a/src/map/skill.c b/src/map/skill.c
index 2abf2fb76..2b4ab9394 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -901,13 +901,23 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
rand() % 100 < tsc->data[SC_EDP].val2 * sc_def_vit / 100)
status_change_start(bl,SC_DPOISON,sc->data[SC_EDP].val1,0,0,0,skill_get_time2(ASC_EDP,sc->data[SC_EDP].val1),0);
}
- if (tsc->count && tsc->data[SC_KAAHI].timer != -1) {
- if (dstsd && dstsd->status.sp < 5*tsc->data[SC_KAAHI].val1)
- ; //Not enough SP to cast
- else {
- battle_heal(bl, bl, 200*tsc->data[SC_KAAHI].val1, -5*tsc->data[SC_KAAHI].val1, 1);
- if(dstsd && dstsd->fd)
- clif_heal(dstsd->fd,SP_HP,200*tsc->data[SC_KAAHI].val1);
+ if (tsc->count) {
+ if (tsc->data[SC_SPLASHER].timer != -1 &&
+ tsc->data[SC_POISON].timer == -1 &&
+ rand()%100< (2*tsc->data[SC_SPLASHER].val1+10)*sc_def_vit/100
+ ) {
+ status_change_start(bl,SC_POISON,tsc->data[SC_SPLASHER].val1,0,0,0,
+ skill_get_time2(tsc->data[SC_SPLASHER].val2,tsc->data[SC_SPLASHER].val1),0);
+ }
+
+ if(tsc->data[SC_KAAHI].timer != -1) {
+ if (dstsd && dstsd->status.sp < 5*tsc->data[SC_KAAHI].val1)
+ ; //Not enough SP to cast
+ else {
+ battle_heal(bl, bl, 200*tsc->data[SC_KAAHI].val1, -5*tsc->data[SC_KAAHI].val1, 1);
+ if(dstsd && dstsd->fd)
+ clif_heal(dstsd->fd,SP_HP,200*tsc->data[SC_KAAHI].val1);
+ }
}
}
}
@@ -3014,10 +3024,10 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s
case WZ_WATERBALL: /* ƒEƒH?ƒ^?ƒ{?ƒ‹ */
skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
if (skilllv>1) {
- int range = skilllv > 5 ? 2 : skilllv/2;
+ int range = skilllv/2;
//Rain doesn't affect WATERBALL (Rain has been removed at kRO) [Lupus]
//int cnt = (!map[src->m].flag.rain) ? skill_count_water(src,range) - 1 : skill_get_num(skillid,skilllv) - 1;
- int cnt = (src->type==BL_PC)?skill_count_water(src,range) - 1:(skilllv>3?24:8);
+ int cnt = (src->type==BL_PC)?skill_count_water(src,range) - 1:(range*range-1);
if (cnt > 0)
skill_addtimerskill(src,tick+150,bl->id,0,0,
skillid,skilllv,cnt,flag);
@@ -5086,8 +5096,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
break;
case NPC_SUMMONSLAVE: /* Žè‰º?¢Š« */
- if (md) //Only summon remaining slaves
- skilllv = skilllv - mob_countslave(&md->bl);
case NPC_SUMMONMONSTER: /* MOB?¢Š« */
if(md)
mob_summonslave(md,md->db->skill[md->skillidx].val,skilllv,skillid);
@@ -5425,7 +5433,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
break;
case AS_SPLASHER: /* ƒxƒiƒ€ƒXƒvƒ‰ƒbƒVƒƒ? */
- if(status_get_max_hp(bl)*2/3 < status_get_hp(bl)) { //HP‚ª2/3ˆÈ?ã?‚Á‚Ä‚¢‚½‚玸”s
+ if(status_get_max_hp(bl)*3/4 < status_get_hp(bl)) { //HP‚ª2/3ˆÈ?ã?‚Á‚Ä‚¢‚½‚玸”s
map_freeblock_unlock();
return 1;
}
@@ -6227,7 +6235,7 @@ int skill_castend_pos2( struct block_list *src, int x,int y,int skillid,int skil
case HT_DETECTING: /* ƒfƒBƒeƒNƒeƒBƒ“ƒO */
map_foreachinarea( status_change_timer_sub,
- src->m, x-1, y-1, x+1,y+1,BL_CHAR,
+ src->m, x-3, y-3, x+3,y+3,BL_CHAR,
src,status_get_sc(src),SC_SIGHT,tick);
break;
@@ -6279,14 +6287,17 @@ int skill_castend_pos2( struct block_list *src, int x,int y,int skillid,int skil
case WZ_METEOR: //ƒ?ƒeƒIƒXƒg?ƒ€
{
- int flag=0;
+ int flag=0, area = 7;
if (sc && sc->data[SC_MAGICPOWER].timer != -1)
flag = flag|2; //Store the magic power flag for future use. [Skotlex]
+ if (skilllv > skill_get_max(skillid))
+ area = area*3; //Double range area
for(i=0;i<2+(skilllv>>1);i++) {
int j=0;
do {
- tmpx = x + (rand()%7 - 3);
- tmpy = y + (rand()%7 - 3);
+
+ tmpx = x + (rand()%area - area/2);
+ tmpy = y + (rand()%area - area/2);
if(tmpx < 0)
tmpx = 0;
else if(tmpx >= map[src->m].xs)
@@ -6648,11 +6659,11 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
range=2;
break;
case WZ_METEOR:
- if (skilllv > 10) //?L”͈̓?ƒeƒI
+ if (skilllv > skill_get_max(skillid)) //?L”͈̓?ƒeƒI
range = 10;
break;
case WZ_VERMILION:
- if (skilllv > 10) //?L”͈ÍLOV
+ if (skilllv > skill_get_max(skillid)) //?L”͈ÍLOV
range = 25;
break;
case WZ_QUAGMIRE: //The target changes to "all" if used in a gvg map. [Skotlex]