` Fixed Guillotine Cross Poisons (bugreport:5275)

-- Paralyze decreases attack speed, flee, and movement speed
-- Death Hurt decreases the effectiveness of recovery
-- Venom Bleed reduces max HP
-- Oblivion Curse blocks natural SP recovery and skill use is denied
` Updated const.txt with the latest (renewal) statuses (SC_) values

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@15539 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
xantara 2012-02-04 05:46:00 +00:00
parent fc400a1838
commit 2daf269fee
4 changed files with 234 additions and 6 deletions

View File

@ -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

View File

@ -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);
}

View File

@ -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;

View File

@ -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] )