diff options
Diffstat (limited to 'src/map/status.c')
-rw-r--r-- | src/map/status.c | 116 |
1 files changed, 54 insertions, 62 deletions
diff --git a/src/map/status.c b/src/map/status.c index f4fd04467..9f7465da0 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -860,6 +860,12 @@ void initChangeTables(void) { status->dbs->IconChangeTable[SC_GEFFEN_MAGIC3] = SI_GEFFEN_MAGIC3; status->dbs->IconChangeTable[SC_FENRIR_CARD] = SI_FENRIR_CARD; + // MVP Scrolls + status->dbs->IconChangeTable[SC_MVPCARD_TAOGUNKA] = SI_MVPCARD_TAOGUNKA; + status->dbs->IconChangeTable[SC_MVPCARD_MISTRESS] = SI_MVPCARD_MISTRESS; + status->dbs->IconChangeTable[SC_MVPCARD_ORCHERO] = SI_MVPCARD_ORCHERO; + status->dbs->IconChangeTable[SC_MVPCARD_ORCLORD] = SI_MVPCARD_ORCLORD; + // Mercenary Bonus Effects status->dbs->IconChangeTable[SC_MER_FLEE] = SI_MER_FLEE; status->dbs->IconChangeTable[SC_MER_ATK] = SI_MER_ATK; @@ -953,13 +959,23 @@ void initChangeTables(void) { status->dbs->IconChangeTable[SC_REBOUND] = SI_REBOUND; status->dbs->IconChangeTable[SC_ALL_RIDING] = SI_ALL_RIDING; status->dbs->IconChangeTable[SC_MONSTER_TRANSFORM] = SI_MONSTER_TRANSFORM; + + // Costumes status->dbs->IconChangeTable[SC_MOONSTAR] = SI_MOONSTAR; status->dbs->IconChangeTable[SC_SUPER_STAR] = SI_SUPER_STAR; status->dbs->IconChangeTable[SC_STRANGELIGHTS] = SI_STRANGELIGHTS; status->dbs->IconChangeTable[SC_DECORATION_OF_MUSIC] = SI_DECORATION_OF_MUSIC; status->dbs->IconChangeTable[SC_LJOSALFAR] = SI_LJOSALFAR; status->dbs->IconChangeTable[SC_MERMAID_LONGING] = SI_MERMAID_LONGING; - + status->dbs->IconChangeTable[SC_HAT_EFFECT] = SI_HAT_EFFECT; + status->dbs->IconChangeTable[SC_FLOWERSMOKE] = SI_FLOWERSMOKE; + status->dbs->IconChangeTable[SC_FSTONE] = SI_FSTONE; + status->dbs->IconChangeTable[SC_HAPPINESS_STAR] = SI_HAPPINESS_STAR; + status->dbs->IconChangeTable[SC_MAPLE_FALLS] = SI_MAPLE_FALLS; + status->dbs->IconChangeTable[SC_TIME_ACCESSORY] = SI_TIME_ACCESSORY; + status->dbs->IconChangeTable[SC_MAGICAL_FEATHER] = SI_MAGICAL_FEATHER; + status->dbs->IconChangeTable[SC_BLOSSOM_FLUTTERING] = SI_BLOSSOM_FLUTTERING; + // Other SC which are not necessarily associated to skills. status->dbs->ChangeFlagTable[SC_ATTHASTE_POTION1] = SCB_ASPD; status->dbs->ChangeFlagTable[SC_ATTHASTE_POTION2] = SCB_ASPD; @@ -1008,7 +1024,6 @@ void initChangeTables(void) { status->dbs->ChangeFlagTable[SC_ARMOR_RESIST] |= SCB_ALL; status->dbs->ChangeFlagTable[SC_ATKER_BLOOD] |= SCB_ALL; status->dbs->ChangeFlagTable[SC_WALKSPEED] |= SCB_SPEED; - status->dbs->ChangeFlagTable[SC_ITEMSCRIPT] |= SCB_ALL; status->dbs->ChangeFlagTable[SC_TARGET_BLOOD] |= SCB_ALL; status->dbs->ChangeFlagTable[SC_TARGET_ASPD] |= SCB_MAXSP; status->dbs->ChangeFlagTable[SC_ATKER_ASPD] |= SCB_MAXHP | SCB_ALL; @@ -1096,13 +1111,27 @@ void initChangeTables(void) { status->dbs->ChangeFlagTable[SC_GEFFEN_MAGIC3] |= SCB_ALL; status->dbs->ChangeFlagTable[SC_FENRIR_CARD] |= SCB_MATK | SCB_ALL; - // Costume + // MVP Scrolls + status->dbs->ChangeFlagTable[SC_MVPCARD_TAOGUNKA] |= SCB_MAXHP | SCB_DEF | SCB_MDEF; + status->dbs->ChangeFlagTable[SC_MVPCARD_MISTRESS] |= SCB_ALL; + status->dbs->ChangeFlagTable[SC_MVPCARD_ORCHERO] |= SCB_ALL; + status->dbs->ChangeFlagTable[SC_MVPCARD_ORCLORD] |= SCB_ALL; + + // Costumes status->dbs->ChangeFlagTable[SC_MOONSTAR] |= SCB_NONE; status->dbs->ChangeFlagTable[SC_SUPER_STAR] |= SCB_NONE; status->dbs->ChangeFlagTable[SC_STRANGELIGHTS] |= SCB_NONE; status->dbs->ChangeFlagTable[SC_DECORATION_OF_MUSIC] |= SCB_NONE; status->dbs->ChangeFlagTable[SC_LJOSALFAR] |= SCB_NONE; status->dbs->ChangeFlagTable[SC_MERMAID_LONGING] |= SCB_NONE; + status->dbs->ChangeFlagTable[SC_HAT_EFFECT] |= SCB_NONE; + status->dbs->ChangeFlagTable[SC_FLOWERSMOKE] |= SCB_NONE; + status->dbs->ChangeFlagTable[SC_FSTONE] |= SCB_NONE; + status->dbs->ChangeFlagTable[SC_HAPPINESS_STAR] |= SCB_NONE; + status->dbs->ChangeFlagTable[SC_MAPLE_FALLS] |= SCB_NONE; + status->dbs->ChangeFlagTable[SC_TIME_ACCESSORY] |= SCB_NONE; + status->dbs->ChangeFlagTable[SC_MAGICAL_FEATHER] |= SCB_NONE; + status->dbs->ChangeFlagTable[SC_BLOSSOM_FLUTTERING] |= SCB_NONE; /* status->dbs->DisplayType Table [Ind/Hercules] */ status->dbs->DisplayType[SC_ALL_RIDING] = true; @@ -1127,12 +1156,22 @@ void initChangeTables(void) { status->dbs->DisplayType[SC_BLOOD_SUCKER] = true; status->dbs->DisplayType[SC__SHADOWFORM] = true; status->dbs->DisplayType[SC_MONSTER_TRANSFORM] = true; + + // Costumes status->dbs->DisplayType[SC_MOONSTAR] = true; status->dbs->DisplayType[SC_SUPER_STAR] = true; status->dbs->DisplayType[SC_STRANGELIGHTS] = true; status->dbs->DisplayType[SC_DECORATION_OF_MUSIC] = true; status->dbs->DisplayType[SC_LJOSALFAR] = true; status->dbs->DisplayType[SC_MERMAID_LONGING] = true; + status->dbs->DisplayType[SC_HAT_EFFECT] = true; + status->dbs->DisplayType[SC_FLOWERSMOKE] = true; + status->dbs->DisplayType[SC_FSTONE] = true; + status->dbs->DisplayType[SC_HAPPINESS_STAR] = true; + status->dbs->DisplayType[SC_MAPLE_FALLS] = true; + status->dbs->DisplayType[SC_TIME_ACCESSORY] = true; + status->dbs->DisplayType[SC_MAGICAL_FEATHER] = true; + status->dbs->DisplayType[SC_BLOSSOM_FLUTTERING] = true; if( !battle_config.display_hallucination ) //Disable Hallucination. status->dbs->IconChangeTable[SC_ILLUSION] = SI_BLANK; @@ -2530,12 +2569,6 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) { } } - if( sc->count && sc->data[SC_ITEMSCRIPT] ) { - struct item_data *data = itemdb->exists(sc->data[SC_ITEMSCRIPT]->val1); - if( data && data->script ) - script->run_use_script(sd, data, 0); - } - status->calc_pc_additional(sd, opt); if( sd->pd ) { // Pet Bonus @@ -5149,14 +5182,16 @@ defType status_calc_def(struct block_list *bl, struct status_change *sc, int def def += sc->data[SC_SHIELDSPELL_REF]->val2; if (sc->data[SC_PRESTIGE]) def += sc->data[SC_PRESTIGE]->val1; - if (sc->data[SC_VOLCANIC_ASH] && (bl->type==BL_MOB)) { - if (status_get_race(bl)==RC_PLANT) + if (sc->data[SC_VOLCANIC_ASH] && (bl->type == BL_MOB)) { + if (status_get_race(bl) == RC_PLANT) def /= 2; } if (sc->data[SC_UNLIMIT]) return 1; if (sc->data[SC_ARMORSCROLL]) def += sc->data[SC_ARMORSCROLL]->val1; + if (sc->data[SC_MVPCARD_TAOGUNKA]) + def -= sc->data[SC_MVPCARD_TAOGUNKA]->val2; return (defType)cap_value(def,DEFTYPE_MIN,DEFTYPE_MAX); } @@ -5287,6 +5322,8 @@ defType status_calc_mdef(struct block_list *bl, struct status_change *sc, int md return 1; if (sc->data[SC_FREYJASCROLL]) mdef += sc->data[SC_FREYJASCROLL]->val1; + if (sc->data[SC_MVPCARD_TAOGUNKA]) + mdef -= sc->data[SC_MVPCARD_TAOGUNKA]->val3; return (defType)cap_value(mdef,DEFTYPE_MIN,DEFTYPE_MAX); } @@ -5891,6 +5928,8 @@ unsigned int status_calc_maxhp(struct block_list *bl, struct status_change *sc, maxhp += maxhp * sc->data[SC_SOULSCROLL]->val1 / 100; if (sc->data[SC_ATKER_ASPD]) maxhp += maxhp * sc->data[SC_ATKER_ASPD]->val1 / 100; + if (sc->data[SC_MVPCARD_TAOGUNKA]) + maxhp += maxhp * sc->data[SC_MVPCARD_TAOGUNKA]->val1 / 100; return (unsigned int)cap_value(maxhp,1,UINT_MAX); } @@ -6754,9 +6793,11 @@ int status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_typ if (sc) { if (sc->data[SC_SCRESIST]) - sc_def += sc->data[SC_SCRESIST]->val1*100; //Status resist + sc_def += sc->data[SC_SCRESIST]->val1 * 100; //Status resist else if (sc->data[SC_SIEGFRIED]) - sc_def += sc->data[SC_SIEGFRIED]->val3*100; //Status resistance. + sc_def += sc->data[SC_SIEGFRIED]->val3 * 100; //Status resistance. + if (sc && sc->data[SC_MVPCARD_ORCHERO]) + sc_def += sc->data[SC_MVPCARD_ORCHERO]->val1 * 100; } //When tick def not set, reduction is the same for both. @@ -9474,31 +9515,6 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t if (battle_config.sc_castcancel&bl->type) unit->skillcastcancel(bl, 0); break; - /* */ - case SC_ITEMSCRIPT: - if( sd ) { - switch( val1 ) { - case ITEMID_PHREEONI_CARD: - clif->status_change(bl, SI_FOOD_BASICHIT, 1, tick, 0, 0, 0); - break; - case ITEMID_GHOSTRING_CARD: - clif->status_change(bl,SI_ARMOR_PROPERTY,1,tick,0,0,0); - break; - case ITEMID_TAO_GUNKA_CARD: - clif->status_change(bl,SI_MVPCARD_TAOGUNKA,1,tick,0,0,0); - break; - case ITEMID_MISTRESS_CARD: - clif->status_change(bl,SI_MVPCARD_MISTRESS,1,tick,0,0,0); - break; - case ITEMID_ORC_HERO_CARD: - clif->status_change(bl,SI_MVPCARD_ORCHERO,1,tick,0,0,0); - break; - case ITEMID_ORC_LOAD_CARD: - clif->status_change(bl,SI_MVPCARD_ORCLORD,1,tick,0,0,0); - break; - } - } - break; } // Set option as needed. @@ -10365,30 +10381,6 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const if( sce->val2 ) status_change_end(bl, (sc_type)sce->val2, INVALID_TIMER); break; - case SC_ITEMSCRIPT: - if( sd ) { - switch( sce->val1 ) { - case ITEMID_PHREEONI_CARD: - clif->sc_end(&sd->bl, sd->bl.id, SELF, SI_FOOD_BASICHIT); - break; - case ITEMID_GHOSTRING_CARD: - clif->sc_end(&sd->bl, sd->bl.id, SELF, SI_ARMOR_PROPERTY); - break; - case ITEMID_TAO_GUNKA_CARD: - clif->sc_end(&sd->bl, sd->bl.id, SELF, SI_MVPCARD_TAOGUNKA); - break; - case ITEMID_MISTRESS_CARD: - clif->sc_end(&sd->bl, sd->bl.id, SELF, SI_MVPCARD_MISTRESS); - break; - case ITEMID_ORC_HERO_CARD: - clif->sc_end(&sd->bl, sd->bl.id, SELF, SI_MVPCARD_ORCHERO); - break; - case ITEMID_ORC_LOAD_CARD: - clif->sc_end(&sd->bl, sd->bl.id, SELF, SI_MVPCARD_ORCLORD); - break; - } - } - break; case SC_OVERED_BOOST: switch( bl->type ){ case BL_HOM: |