Implemented NPC_VAMPIREGIFT and NPC_WIDESOULDRAIN.
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14102 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
2c54b30746
commit
2144b13b80
@ -3,6 +3,8 @@ Date Added
|
||||
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
|
||||
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||
|
||||
09/10/26
|
||||
* Implemented NPC_VAMPIREGIFT and NPC_WIDESOULDRAIN. [Inkfish]
|
||||
09/10/25
|
||||
* Rev. 14101 The status SC_INVINCIBLE now reduces all damage to 1. [L0ne_W0lf]
|
||||
- Official behavior, and allows players to cancel NPC_ALLHEAL casts.
|
||||
|
@ -536,7 +536,7 @@
|
||||
1183,BF_Two_Handed_Sword1,Brave Assaulter's Katzbalger,4,,,0,200,,1,0,0x00004082,7,2,34,3,80,1,3,{ bonus bStr,2; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1184,BF_Two_Handed_Sword2,Valorous Assaulter's Katzbalger,4,,,0,200,,1,0,0x00004082,7,2,34,3,80,1,3,{ bonus bCritical,20; bonus2 bAddRace,RC_DemiHuman,55; bonus bCritAtkRate,20; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1185,Violet_Fear,Violet Fear,4,,,2200,275,,1,2,0x00004082,2,2,34,4,80,1,3,{ bonus3 bAutoSpell,"WZ_METEOR",3,30; bonus3 bAutoSpell,"WZ_FROSTNOVA",5,50; autobonus "{ bonus bIgnoreDefRace,RC_NonBoss; }",50,5000; },{},{}
|
||||
1186,Death_Guidance,Death Guidance,4,20,,2000,200,,1,2,0x00004082,2,2,34,4,70,1,3,{ bonus bStr,5; bonus bAgi,2; bonus bFlee2,20; bonus3 bAutoSpell,"NPC_HELLPOWER",1,10; bonus3 bAutoSpell,"NPC_HELLPOWER",1,10; },{},{}
|
||||
1186,Death_Guidance,Death Guidance,4,20,,2000,200,,1,2,0x00004082,2,2,34,4,70,1,3,{ bonus bStr,5; bonus bAgi,2; bonus bFlee2,20; bonus3 bAutoSpell,"NPC_HELLPOWER",1,10; bonus4 bAutoSpell,"NPC_HELLPOWER",1,10,1; if( getrefine() > 8 ) bonus3 bAutoSpell,"NPC_VAMPIRE_GIFT",2,20; else bonus3 bAutoSpell,"NPC_VAMPIRE_GIFT",1,20; },{},{}
|
||||
1187,Krieger_Twohand_Sword1,Glorious Claymore,4,0,,0,220,,1,0,0x00004082,7,2,34,4,80,1,3,{ bonus2 bAddRace,RC_DemiHuman,70; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine() > 5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine() > 8) { bonus3 bAutoSpell,"LK_CONCENTRATION",getskilllv("LK_CONCENTRATION")>1?getskilllv("LK_CONCENTRATION"):1,30; bonus3 bAutoSpell,"LK_AURABLADE",getskilllv("LK_AURABLADE")>1?getskilllv("LK_AURABLADE"):1,30; } },{},{}
|
||||
//1188,Veteran_Sword
|
||||
//1189,Krasnaya
|
||||
@ -872,7 +872,7 @@
|
||||
1634,BF_Staff3,Strong Recovery Wand,4,0,,0,70,,1,0,0x00818314,7,2,2,3,80,1,10,{ bonus bMatkRate,15; bonus bHealPower,14; bonus2 bSPRegenRate,5,10000; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1635,BF_Staff4,Speedy Recovery Wand,4,0,,0,70,,1,0,0x00818314,7,2,2,3,80,1,10,{ bonus bInt,3; bonus bDex,2; bonus bMatkRate,15; bonus bDelayRate,-15; bonus2 bSPRegenRate,5,10000; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1636,Thorn_Staff,Thorn Staff of Darkness,4,20,,700,60,,1,0,0x00018314,2,2,34,4,75,1,10,{ bonus bInt,3; bonus bDex,3; bonus bMatkRate,20; bonus bIgnoreMdefRate,getrefine(); bonus bDelayRate,-(getrefine()*3/2); },{},{}
|
||||
1637,Eraser,Eraser,4,20,,500,80,,1,0,0x00018314,2,2,2,4,70,1,10,{ bonus bMatkRate,20; bonus bInt,3; bonus bDex,2; bonus bSPrecovRate,8; },{},{}
|
||||
1637,Eraser,Eraser,4,20,,500,80,,1,0,0x00018314,2,2,2,4,70,1,10,{ bonus bMatkRate,20; bonus bInt,3; bonus bDex,2; bonus bSPrecovRate,8; if( getrefine() > 9 ) bonus5 bAutoSpell,"NPC_WIDESOULDRAIN",3,5,BF_MAGIC,0; else bonus5 bAutoSpell,"NPC_WIDESOULDRAIN",1,5,BF_MAGIC,0; },{},{}
|
||||
1638,Healing_Staff_C,Recovery Staff,4,20,,400,10,,1,0,0x00008110,7,2,2,3,55,1,10,{ bonus bAtkEle,Ele_Holy; bonus bMatkRate,15; bonus bHealPower,(getrefine()*3/2); },{},{}
|
||||
1639,N_Rod,Novice_Rod,4,1,,0,15,,1,0,0x00818315,7,2,2,1,1,0,10,{ bonus bMatkRate,16; },{},{}
|
||||
1640,Krieger_Onehand_Staff1,Glorious Arc Wand,4,0,,0,70,,1,0,0x00018314,7,2,2,4,80,1,10,{ bonus2 bMagicAddRace,RC_DemiHuman,15; bonus2 bIgnoreMdefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine() > 5) bonus2 bIgnoreMdefRate,RC_DemiHuman,5; if(getrefine() > 8) { bonus bMatkRate,5; bonus bCastrate,-5; bonus bDelayRate,-5; } },{},{}
|
||||
|
@ -4501,7 +4501,7 @@
|
||||
1867,Banshee@NPC_CRITICALWOUND,attack,673,2,500,0,5000,yes,target,always,0,,,,,,
|
||||
1867,Banshee@NPC_DARKSTRIKE,chase,340,9,2000,0,5000,yes,target,always,0,,,,,,
|
||||
1867,Banshee@NPC_DARKSTRIKE,attack,340,9,2000,0,5000,yes,target,always,0,,,,,,
|
||||
//1867,Banshee@NPC_VAMPIRE_GIFT,attack,679,1,500,0,5000,yes,self,always,0,,,,,,
|
||||
1867,Banshee@NPC_VAMPIRE_GIFT,attack,679,1,500,0,5000,yes,self,always,0,,,,,,
|
||||
1867,Banshee@NPC_DARKNESSATTACK,attack,190,3,1000,0,5000,yes,target,always,0,,,,,,21
|
||||
1867,Banshee@NPC_EVILLAND,attack,670,1,500,0,5000,yes,target,always,0,,,,,,
|
||||
1867,Banshee@NPC_EMOTION,chase,197,1,1000,0,5000,yes,self,always,0,7,0x81,,,,
|
||||
@ -4511,7 +4511,7 @@
|
||||
1868,Banshee@NPC_CRITICALWOUND,attack,673,2,500,0,5000,yes,target,always,0,,,,,,
|
||||
1868,Banshee@NPC_DARKSTRIKE,chase,340,9,2000,0,5000,yes,target,always,0,,,,,,
|
||||
1868,Banshee@NPC_DARKSTRIKE,attack,340,9,2000,0,5000,yes,target,always,0,,,,,,
|
||||
//1868,Banshee@NPC_VAMPIRE_GIFT,attack,679,1,500,0,5000,yes,self,always,0,,,,,,
|
||||
1868,Banshee@NPC_VAMPIRE_GIFT,attack,679,1,500,0,5000,yes,self,always,0,,,,,,
|
||||
1868,Banshee@NPC_DARKNESSATTACK,attack,190,3,1000,0,5000,yes,target,always,0,,,,,,21
|
||||
1868,Banshee@NPC_EMOTION,chase,197,1,1000,0,5000,yes,self,always,0,7,0x81,,,,
|
||||
1868,Banshee@NPC_EMOTION,idle,197,1,2000,0,5000,yes,self,always,0,NEED_EMO,0x3095,,,,
|
||||
@ -4567,7 +4567,7 @@
|
||||
1871,Falling Bishop@NPC_GRANDDARKNESS,attack,339,10,500,1300,5000,no,self,always,0,,,,,,
|
||||
1871,Falling Bishop@CR_GRANDCROSS,chase,254,10,500,1000,5000,no,self,always,0,,,,,,
|
||||
1871,Falling Bishop@CR_GRANDCROSS,attack,254,10,500,1000,5000,no,self,always,0,,,,,,
|
||||
//1871,Falling Bishop@NPC_VAMPIRE_GIFT,attack,679,2,500,0,5000,yes,self,always,0,,,,,,
|
||||
1871,Falling Bishop@NPC_VAMPIRE_GIFT,attack,679,2,500,0,5000,yes,self,always,0,,,,,,
|
||||
1871,Falling Bishop@NPC_SLOWCAST,chase,672,5,2000,300,30000,no,self,always,0,,,,,,36
|
||||
1871,Falling Bishop@NPC_SLOWCAST,attack,672,5,2000,800,30000,no,self,always,0,,,,,,36
|
||||
1871,Falling Bishop@NPC_EVILLAND,attack,670,10,10000,1000,600000,no,target,myhpltmaxrate,44,,,,,,
|
||||
@ -4611,7 +4611,7 @@
|
||||
1873,Beelzebub@NPC_HELLJUDGEMENT,attack,662,5,10000,700,15000,no,self,always,0,,,,,,
|
||||
1873,Beelzebub@NPC_HELLJUDGEMENT,chase,662,5,10000,700,15000,no,self,always,0,,,,,,
|
||||
1873,Beelzebub@NPC_EXPULSION,attack,674,1,100,1000,30000,no,target,always,0,,,,,,
|
||||
//1873,Beelzebub@NPC_VAMPIRE_GIFT,attack,679,10,10000,1000,10000,no,self,myhpltmaxrate,70,,,,,,47
|
||||
1873,Beelzebub@NPC_VAMPIRE_GIFT,attack,679,10,10000,1000,10000,no,self,myhpltmaxrate,70,,,,,,47
|
||||
1873,Beelzebub@NPC_AGIUP,attack,350,5,10000,0,30000,yes,self,myhpltmaxrate,60,,,,,,
|
||||
1873,Beelzebub@NPC_AGIUP,chase,350,5,10000,0,30000,yes,self,myhpltmaxrate,60,,,,,,
|
||||
1874,Beelzebub@NPC_RUN,attack,354,1,10000,0,0,yes,self,myhpltmaxrate,1,,,,,,26
|
||||
@ -4643,8 +4643,8 @@
|
||||
1874,Beelzebub@NPC_HELLJUDGEMENT,attack,662,2,2000,500,5000,no,self,always,0,,,,,,
|
||||
1874,Beelzebub@NPC_ACIDBREATH,attack,657,1,2000,1000,5000,no,target,always,0,,,,,,
|
||||
1874,Beelzebub@NPC_ACIDBREATH,chase,657,1,2000,1000,5000,no,target,always,0,,,,,,
|
||||
//1874,Beelzebub@NPC_VAMPIRE_GIFT,attack,679,1,1000,500,5000,no,self,myhpltmaxrate,50,,,,,,47
|
||||
//1874,Beelzebub@NPC_WIDESOULDRAIN,attack,680,7,1000,500,5000,no,self,myhpltmaxrate,50,,,,,,42
|
||||
1874,Beelzebub@NPC_VAMPIRE_GIFT,attack,679,1,1000,500,5000,no,self,myhpltmaxrate,50,,,,,,47
|
||||
1874,Beelzebub@NPC_WIDESOULDRAIN,attack,680,7,1000,500,5000,no,self,myhpltmaxrate,50,,,,,,42
|
||||
1875,Tristan@NPC_BLOODDRAIN,attack,199,1,2000,0,5000,yes,target,always,0,,,,,,
|
||||
|
||||
// Moscovia (12.1)
|
||||
@ -4735,10 +4735,10 @@
|
||||
1916,Satan Morroc@NPC_WIDESTONE,attack,666,5,10000,0,60000,yes,self,myhpltmaxrate,40,,,,,,
|
||||
1916,Satan Morroc@WZ_METEOR,chase,83,5,10000,800,60000,no,target,myhpltmaxrate,40,,,,,,
|
||||
1916,Satan Morroc@WZ_METEOR,attack,83,5,10000,800,60000,no,target,myhpltmaxrate,40,,,,,,
|
||||
//1916,Satan Morroc@NPC_VAMPIRE_GIFT,chase,679,9,10000,1000,50000,no,self,myhpltmaxrate,50,,,,,,
|
||||
//1916,Satan Morroc@NPC_VAMPIRE_GIFT,attack,679,9,10000,1000,50000,no,self,myhpltmaxrate,50,,,,,,
|
||||
//1916,Satan Morroc@NPC_WIDESOULDRAIN,chase,680,10,10000,1000,50000,no,self,myhpltmaxrate,50,,,,,,
|
||||
//1916,Satan Morroc@NPC_WIDESOULDRAIN,attack,680,10,10000,1000,50000,no,self,myhpltmaxrate,50,,,,,,
|
||||
1916,Satan Morroc@NPC_VAMPIRE_GIFT,chase,679,9,10000,1000,50000,no,self,myhpltmaxrate,50,,,,,,
|
||||
1916,Satan Morroc@NPC_VAMPIRE_GIFT,attack,679,9,10000,1000,50000,no,self,myhpltmaxrate,50,,,,,,
|
||||
1916,Satan Morroc@NPC_WIDESOULDRAIN,chase,680,10,10000,1000,50000,no,self,myhpltmaxrate,50,,,,,,
|
||||
1916,Satan Morroc@NPC_WIDESOULDRAIN,attack,680,10,10000,1000,50000,no,self,myhpltmaxrate,50,,,,,,
|
||||
1916,Satan Morroc@NPC_EVILLAND,chase,670,10,10000,1000,50000,no,target,myhpltmaxrate,50,,,,,,
|
||||
1916,Satan Morroc@NPC_EVILLAND,attack,670,10,10000,1000,50000,no,target,myhpltmaxrate,50,,,,,,
|
||||
1916,Satan Morroc@NPC_WIDESLEEP,chase,668,5,10000,700,35000,no,self,myhpltmaxrate,60,,,,,,
|
||||
@ -4784,10 +4784,10 @@
|
||||
1917,Wounded Morroc@NPC_WIDESTONE,attack,666,5,10000,0,60000,yes,self,myhpltmaxrate,40,,,,,,
|
||||
1917,Wounded Morroc@WZ_METEOR,chase,83,5,10000,800,60000,no,target,myhpltmaxrate,40,,,,,,
|
||||
1917,Wounded Morroc@WZ_METEOR,attack,83,5,10000,800,60000,no,target,myhpltmaxrate,40,,,,,,
|
||||
//1917,Wounded Morroc@NPC_VAMPIRE_GIFT,chase,679,9,10000,1000,50000,no,self,myhpltmaxrate,50,,,,,,
|
||||
//1917,Wounded Morroc@NPC_VAMPIRE_GIFT,attack,679,9,10000,1000,50000,no,self,myhpltmaxrate,50,,,,,,
|
||||
//1917,Wounded Morroc@NPC_WIDESOULDRAIN,chase,680,10,10000,1000,50000,no,self,myhpltmaxrate,50,,,,,,
|
||||
//1917,Wounded Morroc@NPC_WIDESOULDRAIN,attack,680,10,10000,1000,50000,no,self,myhpltmaxrate,50,,,,,,
|
||||
1917,Wounded Morroc@NPC_VAMPIRE_GIFT,chase,679,9,10000,1000,50000,no,self,myhpltmaxrate,50,,,,,,
|
||||
1917,Wounded Morroc@NPC_VAMPIRE_GIFT,attack,679,9,10000,1000,50000,no,self,myhpltmaxrate,50,,,,,,
|
||||
1917,Wounded Morroc@NPC_WIDESOULDRAIN,chase,680,10,10000,1000,50000,no,self,myhpltmaxrate,50,,,,,,
|
||||
1917,Wounded Morroc@NPC_WIDESOULDRAIN,attack,680,10,10000,1000,50000,no,self,myhpltmaxrate,50,,,,,,
|
||||
1917,Wounded Morroc@NPC_EVILLAND,chase,670,10,10000,1000,50000,no,target,myhpltmaxrate,50,,,,,,
|
||||
1917,Wounded Morroc@NPC_EVILLAND,attack,670,10,10000,1000,50000,no,target,myhpltmaxrate,50,,,,,,
|
||||
1917,Wounded Morroc@NPC_WIDESLEEP,chase,668,5,10000,700,35000,no,self,myhpltmaxrate,60,,,,,,
|
||||
|
@ -614,8 +614,8 @@
|
||||
676,0,6,4,0,0x1,0,5,1,no,0,0x2,0,magic,0, NPC_ANTIMAGIC,Anti Magic
|
||||
677,0,6,4,0,0x3,2:5:8:11:14,5,1,no,0,0x2,0,none,0, NPC_WIDECURSE,Wide Curse
|
||||
678,0,6,4,0,0x3,2:5:8:11:14,5,1,no,0,0x2,0,none,0, NPC_WIDESTUN,Wide Stun
|
||||
679,0,0,4,0,0x1,0,10,1,no,0,0x2,0,none,0, NPC_VAMPIRE_GIFT,Vampire Gift
|
||||
680,0,0,4,0,0x1,0,10,1,no,0,0x2,0,none,0, NPC_WIDESOULDRAIN,Wide Soul Drain
|
||||
679,0,6,4,0,0x2,5:7:9:11:13:13:13:13:13:13,10,1,no,0,0x2,0,weapon,0, NPC_VAMPIRE_GIFT,Vampire Gift
|
||||
680,0,6,4,0,0x3,5:7:9:11:13:13:13:13:13:13,10,1,no,0,0x2,0,none,0, NPC_WIDESOULDRAIN,Wide Soul Drain
|
||||
|
||||
// Cash Shop Skill
|
||||
681,0,0,0,0,0,0,10,0,no,0,0x1,0,none,0, ALL_INCCARRY,Increase Weight Limit R
|
||||
|
@ -1674,6 +1674,9 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
|
||||
case HFLI_SBR44: //[orn]
|
||||
skillratio += 100 *(skill_lv-1);
|
||||
break;
|
||||
case NPC_VAMPIRE_GIFT:
|
||||
skillratio += ((skill_lv-1)%5+1)*100;
|
||||
break;
|
||||
}
|
||||
|
||||
ATK_RATE(skillratio);
|
||||
|
@ -2786,18 +2786,24 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
|
||||
case NPC_EARTHQUAKE:
|
||||
case NPC_PULSESTRIKE:
|
||||
case NPC_HELLJUDGEMENT:
|
||||
case NPC_VAMPIRE_GIFT:
|
||||
if( flag&1 )
|
||||
{ //Recursive invocation
|
||||
// skill_area_temp[0] holds number of targets in area
|
||||
// skill_area_temp[1] holds the id of the original target
|
||||
// skill_area_temp[2] counts how many targets have already been processed
|
||||
int sflag = skill_area_temp[0] & 0xFFF;
|
||||
int sflag = skill_area_temp[0] & 0xFFF, heal;
|
||||
if( flag&SD_LEVEL )
|
||||
sflag |= SD_LEVEL; // -1 will be used in packets instead of the skill level
|
||||
if( skill_area_temp[1] != bl->id && !(skill_get_inf2(skillid)&INF2_NPC_SKILL) )
|
||||
sflag |= SD_ANIMATION; // original target gets no animation (as well as all NPC skills)
|
||||
|
||||
skill_attack(skill_get_type(skillid), src, src, bl, skillid, skilllv, tick, sflag);
|
||||
heal = skill_attack(skill_get_type(skillid), src, src, bl, skillid, skilllv, tick, sflag);
|
||||
if( skillid == NPC_VAMPIRE_GIFT && heal > 0 )
|
||||
{
|
||||
clif_skill_nodamage(NULL, src, AL_HEAL, heal, 1);
|
||||
status_heal(src,heal,0,0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -3155,7 +3161,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
||||
if(status_isdead(src))
|
||||
return 1;
|
||||
|
||||
if(src!=bl && status_isdead(bl) && skillid != ALL_RESURRECTION && skillid != PR_REDEMPTIO)
|
||||
if( src != bl && status_isdead(bl) && skillid != ALL_RESURRECTION && skillid != PR_REDEMPTIO && skillid != NPC_WIDESOULDRAIN )
|
||||
return 1;
|
||||
|
||||
tstatus = status_get_status_data(bl);
|
||||
@ -3961,6 +3967,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
||||
case GS_SPREADATTACK:
|
||||
case NPC_EARTHQUAKE:
|
||||
clif_skill_nodamage(src,bl,skillid,skilllv,1);
|
||||
case NPC_VAMPIRE_GIFT:
|
||||
case NPC_HELLJUDGEMENT:
|
||||
case NPC_PULSESTRIKE:
|
||||
skill_castend_damage_id(src, src, skillid, skilllv, tick, flag);
|
||||
@ -5663,8 +5670,14 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
||||
case NPC_WIDESTUN:
|
||||
case NPC_SLOWCAST:
|
||||
case NPC_WIDEHELLDIGNITY:
|
||||
case NPC_WIDESOULDRAIN:
|
||||
if (flag&1)
|
||||
{
|
||||
if( skillid == NPC_WIDESOULDRAIN )
|
||||
status_percent_damage(src,bl,0,((skilllv-1)%5+1)*20,false);
|
||||
else
|
||||
sc_start(bl,type,100,skilllv,skill_get_time2(skillid,skilllv));
|
||||
}
|
||||
else {
|
||||
skill_area_temp[2] = 0; //For SD_PREAMBLE
|
||||
clif_skill_nodamage(src,bl,skillid,skilllv,1);
|
||||
|
@ -654,7 +654,7 @@ int status_damage(struct block_list *src,struct block_list *target,int hp, int s
|
||||
|
||||
status = status_get_status_data(target);
|
||||
|
||||
if (status == &dummy_status || !status->hp)
|
||||
if( status == &dummy_status || (!status->hp && hp) )
|
||||
return 0; //Invalid targets: no damage or dead
|
||||
|
||||
// Let through. battle.c/skill.c have the whole logic of when it's possible or
|
||||
|
Loading…
x
Reference in New Issue
Block a user