summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db/const.txt199
-rw-r--r--src/map/pc.c6
-rw-r--r--src/map/skill.c18
-rw-r--r--src/map/status.c17
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] )