Item Updates and New Status Changes (#1539)

* Item Updates
* Added new Status Changes
* Implemented effect for respective items
  * 12874,Frost_Giant_Blood: SC_GVG_GIANT
  * 12875,Golem_Stone: SC_GVG_GOLEM
  * 12876,Elf_Tear_Stun: SC_GVG_STUN
  * 12877,Elf_Tear_Stone_Curse: SC_GVG_STONE
  * 12878,Elf_Tear_Freezing: SC_GVG_FREEZ
  * 12879,Elf_Tear_Sleep: SC_GVG_SLEEP
  * 12880,Elf_Tear_Curse: SC_GVG_CURSE
  * 12881,Elf_Tear_Silence: SC_GVG_SILENCE
  * 12882,Elf_Tear_Blind: SC_GVG_BLIND
* Thanks Divine-Pride.net

Signed-off-by: Cydh Ramdh <cydh@pservero.com>

* Follow up 9267a32d8c4828bde19f2fe80f83aeec7056b18f
* Updated Status Change doc
This commit is contained in:
Cydh Ramdh 2016-09-09 05:54:22 +07:00 committed by GitHub
parent 7d0c7d8b24
commit b46e4332df
6 changed files with 148 additions and 17 deletions

View File

@ -6989,15 +6989,15 @@
12860,Mommy_Day_Cake,Mommy Day Cake,2,0,,200,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 50,50; skilleffect "HP_ASSUMPTIO",0; sc_start SC_ASSUMPTIO,100000,5; },{},{}
12863,Treasure_Chest_Summoned_II,Treasure Chest Summoned II,2,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ monster "this",-1,-1,"--ja--",rand(1324,1363),1,""; },{},{}
12873,TE_Potion_Box,TE Potion Box,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem(11558,10); },{},{}
12874,Frost_Giant_Blood,Frost Giant Blood,2,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12875,Golem_Stone,Golem Stone,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12876,Elf_Tear_Stun,Elf Tear Stun,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12877,Elf_Tear_Stone_Curse,Elf Tear Stone Curse,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12878,Elf_Tear_Freezing,Elf Tear Freezing,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12879,Elf_Tear_Sleep,Elf Tear Sleep,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12880,Elf_Tear_Curse,Elf Tear Curse,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12881,Elf_Tear_Silence,Elf Tear Silence,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12882,Elf_Tear_Blind,Elf Tear Blind,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12874,Frost_Giant_Blood,Frost Giant Blood,2,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_POTION_CON; sc_start4 SC_GVG_GIANT,10000,3000,0,100,100; },{},{}
12875,Golem_Stone,Golem Stone,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_POTION_CON; sc_start4 SC_GVG_GOLEM,10000,0,200,50,50; },{},{}
12876,Elf_Tear_Stun,Elf Tear Stun,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_GVG_STUN,10000,3000,0; },{},{}
12877,Elf_Tear_Stone_Curse,Elf Tear Stone Curse,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_GVG_STONE,10000,3000,0; },{},{}
12878,Elf_Tear_Freezing,Elf Tear Freezing,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_GVG_FREEZ,10000,3000,0; },{},{}
12879,Elf_Tear_Sleep,Elf Tear Sleep,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_GVG_SLEEP,10000,3000,0; },{},{}
12880,Elf_Tear_Curse,Elf Tear Curse,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_GVG_CURSE,10000,3000,0; },{},{}
12881,Elf_Tear_Silence,Elf Tear Silence,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_GVG_SILENCE,10000,3000,0; },{},{}
12882,Elf_Tear_Blind,Elf Tear Blind,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_GVG_BLIND,10000,3000,0; },{},{}
12883,Almighty,Almighty,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_BASH3D; sc_start SC_2011RWC_SCROLL,1800000,10; },{},{}
12884,Infinite_Concentration_Potion,Infinite Concentration Potion,11,10,,0,,,,0,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_ASPDPOTION0,1800000,4; },{},{}
12885,Infinite_Awakening_Potion,Infinite Awakening Potion,11,10,,0,,,,0,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_ASPDPOTION1,1800000,6; },{},{}

View File

@ -2528,6 +2528,55 @@ SC_CHASEWALK2 (SI_CHASEWALK2)
desc: 2nd effect of Chasewalk
val1: +STR
SC_GVG_GIANT (SI_GVG_GIANT)
desc: Instantly consumes HP/SP, increases Physical/Magic damage on player enemies by n%.
val1: Amount of HP that are instantly consumed
val2: Amount of SP that are instantly consumed
val3: Increases % Physical damage
val4: Increases % Magical damage
SC_GVG_GOLEM (SI_GVG_GOLEM)
desc: Instantly consumes HP/SP, decreases n% damage received from other adventurers.
val1: Amount of HP that are instantly consumed
val2: Amount of SP that are instantly consumed
val3: Decreases % damage received of physical attack
val4: Decreases % damage received of magical attack
SC_GVG_STUN (SI_GVG_STUN)
desc: Instantly consumes HP/SP, immunizes you against Stun.
val1: Amount of HP that are instantly consumed
val2: Amount of SP that are instantly consumed
SC_GVG_STONE (SI_GVG_STONE)
desc: Instantly consumes HP/SP, immunizes you against Petrification.
val1: Amount of HP that are instantly consumed
val2: Amount of SP that are instantly consumed
SC_GVG_FREEZ (SI_GVG_FREEZ)
desc: Instantly consumes HP/SP, immunizes you against Frost.
val1: Amount of HP that are instantly consumed
val2: Amount of SP that are instantly consumed
SC_GVG_SLEEP (SI_GVG_SLEEP)
desc: Instantly consumes HP/SP, immunizes you against Sleep.
val1: Amount of HP that are instantly consumed
val2: Amount of SP that are instantly consumed
SC_GVG_CURSE (SI_GVG_CURSE)
desc: Instantly consumes HP/SP, immunizes you against Curse.
val1: Amount of HP that are instantly consumed
val2: Amount of SP that are instantly consumed
SC_GVG_SILENCE (SI_GVG_SILENCE)
desc: Instantly consumes HP/SP, immunizes you against Silence.
val1: Amount of HP that are instantly consumed
val2: Amount of SP that are instantly consumed
SC_GVG_BLIND (SI_GVG_BLIND)
desc: Instantly consumes HP/SP, immunizes you against Blind.
val1: Amount of HP that are instantly consumed
val2: Amount of SP that are instantly consumed
SC_EXTREMITYFIST2 ()
desc:
val1:

View File

@ -1357,6 +1357,13 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
status_change_end(bl, SC_STONEHARDSKIN, INVALID_TIMER);
}
if (src->type == BL_PC && sc->data[SC_GVG_GOLEM]) {
if (flag&BF_WEAPON)
damage -= damage * sc->data[SC_GVG_GOLEM]->val3 / 100;
if (flag&BF_MAGIC)
damage -= damage * sc->data[SC_GVG_GOLEM]->val4 / 100;
}
#ifdef RENEWAL
// Renewal: steel body reduces all incoming damage to 1/10 [helvetica]
if( sc->data[SC_STEELBODY] )
@ -1448,6 +1455,9 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
if ((sce = sc->data[SC_BLOODLUST]) && flag&BF_WEAPON && damage > 0 && rnd()%100 < sce->val3)
status_heal(src, damage * sce->val4 / 100, 0, 3);
if (flag&BF_MAGIC && bl->type == BL_PC && sc->data[SC_GVG_GIANT] && sc->data[SC_GVG_GIANT]->val4)
damage += damage * sc->data[SC_GVG_GIANT]->val4 / 100;
// [Epoque]
if (bl->type == BL_MOB) {
if ( (((sce=sc->data[SC_MANU_ATK]) && (flag&BF_WEAPON)) ||
@ -4476,6 +4486,11 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, s
RE_ALLATK_ADDRATE(wd, sc->data[SC_ARCLOUSEDASH]->val4);
}
}
if (sd && wd.flag&BF_WEAPON && sc->data[SC_GVG_GIANT] && sc->data[SC_GVG_GIANT]->val3) {
ATK_ADDRATE(wd.damage, wd.damage2, sc->data[SC_GVG_GIANT]->val3);
RE_ALLATK_ADDRATE(wd, sc->data[SC_GVG_GIANT]->val3);
}
}
if ((wd.flag&(BF_LONG|BF_MAGIC)) == BF_LONG) {

View File

@ -1404,6 +1404,15 @@
export_constant(SC_MAPLE_FALLS);
export_constant(SC_TIME_ACCESSORY);
export_constant(SC_MAGICAL_FEATHER);
export_constant(SC_GVG_GIANT);
export_constant(SC_GVG_GOLEM);
export_constant(SC_GVG_STUN);
export_constant(SC_GVG_STONE);
export_constant(SC_GVG_FREEZ);
export_constant(SC_GVG_SLEEP);
export_constant(SC_GVG_CURSE);
export_constant(SC_GVG_SILENCE);
export_constant(SC_GVG_BLIND);
#ifdef RENEWAL
export_constant(SC_EXTREMITYFIST2);
#endif

View File

@ -1053,6 +1053,15 @@ void initChangeTables(void)
StatusIconChangeTable[SC_MTF_MSP] = SI_MTF_MSP;
StatusIconChangeTable[SC_MTF_PUMPKIN] = SI_MTF_PUMPKIN;
StatusIconChangeTable[SC_NORECOVER_STATE] = SI_HANDICAPSTATE_NORECOVER;
StatusIconChangeTable[SC_GVG_GIANT] = SI_GVG_GIANT;
StatusIconChangeTable[SC_GVG_GOLEM] = SI_GVG_GOLEM;
StatusIconChangeTable[SC_GVG_STUN] = SI_GVG_STUN;
StatusIconChangeTable[SC_GVG_STONE] = SI_GVG_STONE;
StatusIconChangeTable[SC_GVG_FREEZ] = SI_GVG_FREEZ;
StatusIconChangeTable[SC_GVG_SLEEP] = SI_GVG_SLEEP;
StatusIconChangeTable[SC_GVG_CURSE] = SI_GVG_CURSE;
StatusIconChangeTable[SC_GVG_SILENCE] = SI_GVG_SILENCE;
StatusIconChangeTable[SC_GVG_BLIND] = SI_GVG_BLIND;
// Costumes
StatusIconChangeTable[SC_MOONSTAR] = SI_MOONSTAR;
@ -8085,25 +8094,53 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
return 0;
break;
case SC_STONE:
if(sc->data[SC_POWER_OF_GAIA])
return 0;
case SC_FREEZE:
// Undead are immune to Freeze/Stone
// Undead are immune to Stone
if (undead_flag && !(flag&SCSTART_NOAVOID))
return 0;
case SC_DEEPSLEEP:
case SC_SLEEP:
case SC_STUN:
if(sc->data[SC_POWER_OF_GAIA])
return 0;
if (sc->data[SC_GVG_STONE])
return 0;
break;
case SC_FREEZE:
// Undead are immune to Freeze
if (undead_flag && !(flag&SCSTART_NOAVOID))
return 0;
if (sc->data[SC_GVG_FREEZ])
return 0;
case SC_FREEZING:
case SC_CRYSTALIZE:
if (sc->opt1)
return 0; // Cannot override other opt1 status changes. [Skotlex]
if((type == SC_FREEZE || type == SC_FREEZING || type == SC_CRYSTALIZE) && sc->data[SC_WARMER])
if (sc->data[SC_WARMER])
return 0; // Immune to Frozen and Freezing status if under Warmer status. [Jobbie]
break;
case SC_SLEEP:
if (sc->data[SC_GVG_SLEEP])
return 0;
case SC_DEEPSLEEP:
if (sc->opt1)
return 0; // Cannot override other opt1 status changes. [Skotlex]
break;
case SC_STUN:
if (sc->opt1)
return 0; // Cannot override other opt1 status changes. [Skotlex]
if (sc->data[SC_GVG_STUN])
return 0;
break;
case SC_BLIND:
if (sc->data[SC_FEAR])
return 0;
if (sc->data[SC_GVG_BLIND])
return 0;
break;
case SC_CURSE:
if (sc->data[SC_GVG_CURSE])
return 0;
break;
case SC_SILENCE:
if (sc->data[SC_GVG_SILENCE])
return 0;
break;
case SC_ALL_RIDING:
if( !sd || !&sd->sc || sc->option&(OPTION_RIDING|OPTION_DRAGON|OPTION_WUGRIDER|OPTION_MADOGEAR) )
@ -11086,6 +11123,18 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
if (src->type == BL_PC && (sd = map_id2sd(src->id)))
clif_crimson_marker(sd, bl, false);
break;
case SC_GVG_GIANT:
case SC_GVG_GOLEM:
case SC_GVG_STUN:
case SC_GVG_STONE:
case SC_GVG_FREEZ:
case SC_GVG_SLEEP:
case SC_GVG_CURSE:
case SC_GVG_SILENCE:
case SC_GVG_BLIND:
if (val1 || val2)
status_zap(bl, val1 ? val1 : 0, val2 ? val2 : 0);
break;
}
if( opt_flag&2 && sd && sd->touching_id )

View File

@ -769,6 +769,15 @@ typedef enum sc_type {
SC_MAPLE_FALLS,
SC_TIME_ACCESSORY,
SC_MAGICAL_FEATHER,
SC_GVG_GIANT,
SC_GVG_GOLEM,
SC_GVG_STUN,
SC_GVG_STONE,
SC_GVG_FREEZ,
SC_GVG_SLEEP,
SC_GVG_CURSE,
SC_GVG_SILENCE,
SC_GVG_BLIND,
#ifdef RENEWAL
SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled