diff options
-rw-r--r-- | db/const.txt | 199 | ||||
-rw-r--r-- | src/map/pc.c | 6 | ||||
-rw-r--r-- | src/map/skill.c | 18 | ||||
-rw-r--r-- | src/map/status.c | 17 |
4 files changed, 234 insertions, 6 deletions
diff --git a/db/const.txt b/db/const.txt index 60f183c04..0529ca6e4 100644 --- a/db/const.txt +++ b/db/const.txt @@ -986,6 +986,205 @@ SC_FOOD_VIT_CASH 305 SC_FOOD_DEX_CASH 306 SC_FOOD_INT_CASH 307 SC_FOOD_LUK_CASH 308 +SC_FEAR 309 +SC_BURNING 310 +SC_FREEZING 311 +SC_ENCHANTBLADE 312 +SC_DEATHBOUND 313 +SC_MILLENNIUMSHIELD 314 +SC_CRUSHSTRIKE 315 +SC_REFRESH 316 +SC_REUSE_REFRESH 317 +SC_GIANTGROWTH 318 +SC_STONEHARDSKIN 319 +SC_VITALITYACTIVATION 320 +SC_STORMBLAST 321 +SC_FIGHTINGSPIRIT 322 +SC_ABUNDANCE 323 +SC_ADORAMUS 324 +SC_EPICLESIS 325 +SC_ORATIO 326 +SC_LAUDAAGNUS 327 +SC_LAUDARAMUS 328 +SC_RENOVATIO 329 +SC_EXPIATIO 330 +SC_DUPLELIGHT 331 +SC_SECRAMENT 332 +SC_WHITEIMPRISON 333 +SC_MARSHOFABYSS 334 +SC_RECOGNIZEDSPELL 335 +SC_STASIS 336 +SC_SPHERE_1 337 +SC_SPHERE_2 338 +SC_SPHERE_3 339 +SC_SPHERE_4 340 +SC_SPHERE_5 341 +SC_READING_SB 342 +SC_FREEZINGSPELL 343 +SC_FEARBREEZE 344 +SC_ELECTRICSHOCKER 345 +SC_WUGDASH 346 +SC_BITE 347 +SC_CAMOUFLAGE 348 +SC_ACCELERATION 349 +SC_HOVERING 350 +SC_SHAPESHIFT 351 +SC_INFRAREDSCAN 352 +SC_ANALYZE 353 +SC_MAGNETICFIELD 354 +SC_NEUTRALBARRIER 355 +SC_NEUTRALBARRIER_MASTER 356 +SC_STEALTHFIELD 357 +SC_STEALTHFIELD_MASTER 358 +SC_OVERHEAT 359 +SC_OVERHEAT_LIMITPOINT 360 +SC_VENOMIMPRESS 361 +SC_POISONINGWEAPON 362 +SC_WEAPONBLOCKING 363 +SC_CLOAKINGEXCEED 364 +SC_HALLUCINATIONWALK 365 +SC_HALLUCINATIONWALK_POSTDELAY 366 +SC_ROLLINGCUTTER 367 +SC_TOXIN 368 +SC_PARALYSE 369 +SC_VENOMBLEED 370 +SC_MAGICMUSHROOM 371 +SC_DEATHHURT 372 +SC_PYREXIA 373 +SC_OBLIVIONCURSE 374 +SC_LEECHESEND 375 +SC_REFLECTDAMAGE 376 +SC_FORCEOFVANGUARD 377 +SC_SHIELDSPELL_DEF 378 +SC_SHIELDSPELL_MDEF 379 +SC_SHIELDSPELL_REF 380 +SC_EXEEDBREAK 381 +SC_PRESTIGE 382 +SC_BANDING 383 +SC_BANDING_DEFENCE 384 +SC_EARTHDRIVE 385 +SC_INSPIRATION 386 +SC_SPELLFIST 387 +SC_CRYSTALIZE 388 +SC_STRIKING 389 +SC_WARMER 390 +SC_VACUUM_EXTREME 391 +SC_PROPERTYWALK 392 +SC_SWINGDANCE 393 +SC_SYMPHONYOFLOVER 394 +SC_MOONLITSERENADE 395 +SC_RUSHWINDMILL 396 +SC_ECHOSONG 397 +SC_HARMONIZE 398 +SC_VOICEOFSIREN 399 +SC_DEEPSLEEP 400 +SC_SIRCLEOFNATURE 401 +SC_GLOOMYDAY 402 +SC_GLOOMYDAY_SK 403 +SC_SONGOFMANA 404 +SC_DANCEWITHWUG 405 +SC_SATURDAYNIGHTFEVER 406 +SC_LERADSDEW 407 +SC_MELODYOFSINK 408 +SC_BEYONDOFWARCRY 409 +SC_UNLIMITEDHUMMINGVOICE 410 +SC_SITDOWN_FORCE 411 +SC_CRESCENTELBOW 412 +SC_CURSEDCIRCLE_ATKER 413 +SC_CURSEDCIRCLE_TARGET 414 +SC_LIGHTNINGWALK 415 +SC_RAISINGDRAGON 416 +SC_GT_ENERGYGAIN 417 +SC_GT_CHANGE 418 +SC_GT_REVITALIZE 419 +SC_GN_CARTBOOST 420 +SC_THORNSTRAP 421 +SC_BLOODSUCKER 422 +SC_SMOKEPOWDER 423 +SC_TEARGAS 424 +SC_MANDRAGORA 425 +SC_STOMACHACHE 426 +SC_MYSTERIOUS_POWDER 427 +SC_MELON_BOMB 428 +SC_BANANA_BOMB 429 +SC_BANANA_BOMB_SITDOWN 430 +SC_SAVAGE_STEAK 431 +SC_COCKTAIL_WARG_BLOOD 432 +SC_MINOR_BBQ 433 +SC_SIROMA_ICE_TEA 434 +SC_DROCERA_HERB_STEAMED 435 +SC_PUTTI_TAILS_NOODLES 436 +SC_BOOST500 437 +SC_FULL_SWING_K 438 +SC_MANA_PLUS 439 +SC_MUSTLE_M 440 +SC_LIFE_FORCE_F 441 +SC_EXTRACT_WHITE_POTION_Z 442 +SC_VITATA_500 443 +SC_EXTRACT_SALAMINE_JUICE 444 +SC__REPRODUCE 445 +SC__AUTOSHADOWSPELL 446 +SC__SHADOWFORM 447 +SC__BODYPAINT 448 +SC__INVISIBILITY 449 +SC__DEADLYINFECT 450 +SC__ENERVATION 451 +SC__GROOMY 452 +SC__IGNORANCE 453 +SC__LAZINESS 454 +SC__UNLUCKY 455 +SC__WEAKNESS 456 +SC__STRIPACCESSORY 457 +SC__MANHOLE 458 +SC_CHAOS 459 +SC__BLOODYLUST 460 +SC_CIRCLE_OF_FIRE 461 +SC_CIRCLE_OF_FIRE_OPTION 462 +SC_FIRE_CLOAK 463 +SC_FIRE_CLOAK_OPTION 464 +SC_WATER_SCREEN 465 +SC_WATER_SCREEN_OPTION 466 +SC_WATER_DROP 467 +SC_WATER_DROP_OPTION 468 +SC_WATER_BARRIER 469 +SC_WIND_STEP 470 +SC_WIND_STEP_OPTION 471 +SC_WIND_CURTAIN 472 +SC_WIND_CURTAIN_OPTION 473 +SC_ZEPHYR 474 +SC_SOLID_SKIN 475 +SC_SOLID_SKIN_OPTION 476 +SC_STONE_SHIELD 477 +SC_STONE_SHIELD_OPTION 478 +SC_POWER_OF_GAIA 479 +SC_PYROTECHNIC 480 +SC_PYROTECHNIC_OPTION 481 +SC_HEATER 482 +SC_HEATER_OPTION 483 +SC_TROPIC 484 +SC_TROPIC_OPTION 485 +SC_AQUAPLAY 486 +SC_AQUAPLAY_OPTION 487 +SC_COOLER 488 +SC_COOLER_OPTION 489 +SC_CHILLY_AIR 490 +SC_CHILLY_AIR_OPTION 491 +SC_GUST 492 +SC_GUST_OPTION 493 +SC_BLAST 494 +SC_BLAST_OPTION 495 +SC_WILD_STORM 496 +SC_WILD_STORM_OPTION 497 +SC_PETROLOGY 498 +SC_PETROLOGY_OPTION 499 +SC_CURSED_SOIL 500 +SC_CURSED_SOIL_OPTION 501 +SC_UPHEAVAL 502 +SC_UPHEAVAL_OPTION 503 +SC_TIDAL_WEAPON 504 +SC_TIDAL_WEAPON_OPTION 505 +SC_ROCK_CRUSHER 506 +SC_ROCK_CRUSHER_ATK 507 e_gasp 0 e_what 1 diff --git a/src/map/pc.c b/src/map/pc.c index abdaf6671..bbd6c3da9 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -6570,6 +6570,12 @@ int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp) hp -= hp * sd->sc.data[SC_CRITICALWOUND]->val2 / 100; sp -= sp * sd->sc.data[SC_CRITICALWOUND]->val2 / 100; } + + if (sd->sc.data[SC_DEATHHURT]) + { + hp -= hp * 20 / 100; + sp -= sp * 20 / 100; + } return status_heal(&sd->bl, hp, sp, 1); } diff --git a/src/map/skill.c b/src/map/skill.c index cacb29e04..f7abeb1ca 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -391,6 +391,8 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, int skill { if( sc->data[SC_CRITICALWOUND] && heal ) // Critical Wound has no effect on offensive heal. [Inkfish] hp -= hp * sc->data[SC_CRITICALWOUND]->val2/100; + if( sc->data[SC_DEATHHURT] && heal ) + hp -= hp * 20/100; if( sc->data[SC_INCHEALRATE] && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN ) hp += hp * sc->data[SC_INCHEALRATE]->val1/100; // Only affects Heal, Sanctuary and PotionPitcher.(like bHealPower) [Inkfish] } @@ -5633,6 +5635,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in hp -= hp * tsc->data[SC_CRITICALWOUND]->val2 / 100; sp -= sp * tsc->data[SC_CRITICALWOUND]->val2 / 100; } + if( tsc && tsc->data[SC_DEATHHURT] ) + { + hp -= hp * 20 / 100; + sp -= sp * 20 / 100; + } clif_skill_nodamage(src,bl,skillid,skilllv,1); if( hp > 0 || (skillid == AM_POTIONPITCHER && sp <= 0) ) clif_skill_nodamage(NULL,bl,AL_HEAL,hp,1); @@ -6296,6 +6303,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in hp -= hp * tsc->data[SC_CRITICALWOUND]->val2 / 100; sp -= sp * tsc->data[SC_CRITICALWOUND]->val2 / 100; } + if (tsc && tsc->data[SC_DEATHHURT]) + { + hp -= hp * 20 / 100; + sp -= sp * 20 / 100; + } if(hp > 0) clif_skill_nodamage(NULL,bl,AL_HEAL,hp,1); if(sp > 0) @@ -8597,7 +8609,11 @@ int skill_castend_map (struct map_session_data *sd, short skill_num, const char * Warlock **/ sd->sc.data[SC_WHITEIMPRISON] || - (sd->sc.data[SC_STASIS] && skill_stasis_check(&sd->bl, sd->sc.data[SC_STASIS]->val2, skill_num)) + (sd->sc.data[SC_STASIS] && skill_stasis_check(&sd->bl, sd->sc.data[SC_STASIS]->val2, skill_num)) || + /** + * Guillotine Cross + **/ + sd->sc.data[SC_OBLIVIONCURSE] )) { skill_failed(sd); return 0; diff --git a/src/map/status.c b/src/map/status.c index d15343d91..44fdb3401 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -812,6 +812,11 @@ void initChangeTables(void) StatusChangeFlagTable[SC_MERC_HPUP] |= SCB_MAXHP; StatusChangeFlagTable[SC_MERC_SPUP] |= SCB_MAXSP; StatusChangeFlagTable[SC_MERC_HITUP] |= SCB_HIT; + // Guillotine Cross Poison Effects + StatusChangeFlagTable[SC_PARALYSE] |= SCB_ASPD|SCB_FLEE|SCB_SPEED; + StatusChangeFlagTable[SC_DEATHHURT] |= SCB_REGEN; + StatusChangeFlagTable[SC_VENOMBLEED] |= SCB_MAXHP; + StatusChangeFlagTable[SC_OBLIVIONCURSE] |= SCB_REGEN; #if RE_EDP /** * In RE EDP increases your atk and weapon atk @@ -1399,7 +1404,8 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, int (sc->data[SC_MARIONETTE] && skill_num != CG_MARIONETTE) || //Only skill you can use is marionette again to cancel it (sc->data[SC_MARIONETTE2] && skill_num == CG_MARIONETTE) || //Cannot use marionette if you are being buffed by another sc->data[SC_STEELBODY] || - sc->data[SC_BERSERK] + sc->data[SC_BERSERK] || + sc->data[SC_OBLIVIONCURSE] )) return 0; @@ -3074,12 +3080,11 @@ void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, str regen->flag = 0; if ( - sc->data[SC_DANCING] + sc->data[SC_DANCING] || sc->data[SC_OBLIVIONCURSE] || sc->data[SC_MAXIMIZEPOWER] || ( (bl->type == BL_PC && ((TBL_PC*)bl)->class_&MAPID_UPPERMASK) == MAPID_MONK && (sc->data[SC_EXTREMITYFIST] || (sc->data[SC_EXPLOSIONSPIRITS] && (!sc->data[SC_SPIRIT] || sc->data[SC_SPIRIT]->val2 != SL_MONK))) ) - || sc->data[SC_MAXIMIZEPOWER] ) //No natural SP regen regen->flag &=~RGN_SP; @@ -4075,7 +4080,7 @@ static signed short status_calc_flee(struct block_list *bl, struct status_change if(sc->data[SC_FEAR]) flee -= flee * 20 / 100; if(sc->data[SC_PARALYSE]) - flee -= flee / 10; // 10% Flee reduction + flee -= flee * 10 / 100; // 10% Flee reduction if(sc->data[SC_INFRAREDSCAN]) flee -= flee * 30 / 100; if( sc->data[SC__LAZINESS] ) @@ -4448,6 +4453,8 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha { if( sd && pc_iscarton(sd) ) speed += speed * (50 - 5 * pc_checkskill(sd,MC_PUSHCART)) / 100; + if( sc->data[SC_PARALYSE] ) + speed += speed * 50 / 100; if( speed_rate != 100 ) speed = speed * speed_rate / 100; if( sc->data[SC_STEELBODY] ) @@ -4576,7 +4583,7 @@ static short status_calc_aspd_rate(struct block_list *bl, struct status_change * if( sc->data[SC_FIGHTINGSPIRIT] && sc->data[SC_FIGHTINGSPIRIT]->val2 ) aspd_rate -= sc->data[SC_FIGHTINGSPIRIT]->val2; if( sc->data[SC_PARALYSE] ) - aspd_rate += 100; + aspd_rate += aspd_rate * 10 / 100; if( sc->data[SC__BODYPAINT] ) aspd_rate += aspd_rate * (20 + 5 * sc->data[SC__BODYPAINT]->val1) / 100; if( sc->data[SC__INVISIBILITY] ) |