diff --git a/data-global/lib/core/storages.lua b/data-global/lib/core/storages.lua index 4529c64f..ba71dfed 100644 --- a/data-global/lib/core/storages.lua +++ b/data-global/lib/core/storages.lua @@ -923,6 +923,7 @@ Storage = { NoblemanSecondAddon = 41308, FormorgarMinesHoistSkeleton = 41309, FormorgarMinesHoistChest = 41310, + PickAmount = 41311, }, }, U8_1 = { -- update 8.1 - Reserved Storages 41351 - 41650 @@ -2843,6 +2844,11 @@ Storage = { }, }, }, + U13_20 = { -- update 13.20 - Reserved Storages 47952 - 47970 + RottenBlood = { + AccessDoor = 47952, + }, + }, }, -- Reserved storage from 63951 - 63999 ThaisExhibition = { diff --git a/data-global/monster/quests/rotten_bood/bosses/bakragore.lua b/data-global/monster/bosses/bakragore.lua similarity index 50% rename from data-global/monster/quests/rotten_bood/bosses/bakragore.lua rename to data-global/monster/bosses/bakragore.lua index 62573a3d..c13592e7 100644 --- a/data-global/monster/quests/rotten_bood/bosses/bakragore.lua +++ b/data-global/monster/bosses/bakragore.lua @@ -1,7 +1,7 @@ local mType = Game.createMonsterType("Bakragore") local monster = {} -monster.description = "bakragore" +monster.description = "Bakragore" monster.experience = 15000000 monster.outfit = { lookType = 1671, @@ -14,24 +14,24 @@ monster.outfit = { } monster.events = { - "RottenBloodBossOutFitDeath", + "RottenBloodBakragoreDeath", +} + +monster.bosstiary = { + bossRaceId = 2367, + bossRace = RARITY_NEMESIS, } monster.health = 660000 monster.maxHealth = 660000 monster.race = "undead" monster.corpse = 44012 -monster.speed = 195 +monster.speed = 250 monster.manaCost = 0 monster.changeTarget = { - interval = 2000, - chance = 10, -} - -monster.bosstiary = { - bossRaceId = 2367, - bossRace = RARITY_NEMESIS, + interval = 10000, + chance = 20, } monster.strategiesTarget = { @@ -51,7 +51,7 @@ monster.flags = { illusionable = false, canPushItems = true, canPushCreatures = true, - staticAttackChance = 95, + staticAttackChance = 98, targetDistance = 1, runHealth = 0, healthHidden = false, @@ -66,80 +66,48 @@ monster.light = { color = 0, } -monster.summon = {} +monster.summon = { + maxSummons = 2, + summons = { + { name = "Elder Bloodjaw", chance = 20, interval = 2000, count = 2 }, + }, +} monster.voices = { interval = 5000, chance = 10, + { text = "Light ... darkens!", yell = false }, + { text = "Light .. the ... darkness!", yell = false }, + { text = "Darkness ... is ... light!", yell = false }, + { text = "WILL ... PUNISH ... YOU!", yell = false }, + { text = "RAAAR!", yell = false }, } monster.loot = { - { id = 3043, chance = 100000, maxCount = 30 }, - { id = 7643, chance = 40000, maxCount = 20 }, - { id = 238, chance = 40000, maxCount = 20 }, - { id = 7642, chance = 40000, maxCount = 20 }, - { name = "white gem", chance = 30000, maxCount = 1 }, - { name = "giant sapphire", chance = 3000, maxCount = 1 }, - { id = 44008, chance = 10000, maxCount = 2 }, - { name = "fireborn giant armor", chance = 18000 }, - { name = "royal crossbow", chance = 18000 }, - { name = "stomper", chance = 13000 }, - { name = "blue gem", chance = 9000 }, - { name = "gold ring", chance = 9000 }, - { name = "steel boots", chance = 9000 }, - { name = "thunder hammer", chance = 9000 }, - { id = 43855, chance = 4500, maxCount = 2 }, - { id = 43854, chance = 29500, maxCount = 2 }, - { id = 43853, chance = 44500, maxCount = 3 }, - { id = 43901, chance = 4000 }, - { id = 43927, chance = 24500 }, - { id = 32003, chance = 8000, maxCount = 2 }, - { id = 32005, chance = 8000, maxCount = 6 }, - { id = 32007, chance = 4000 }, - { id = 31991, chance = 1000 }, - { id = 31992, chance = 1000 }, - { id = 31993, chance = 1000 }, - { id = 31994, chance = 1000 }, - { id = 31995, chance = 1000 }, - { id = 32005, chance = 4000, maxCount = 6 }, - { id = 23267, chance = 10000, maxCount = 3 }, - { id = 32014, chance = 3000 }, - { id = 23234, chance = 3000, maxCount = 2 }, - { id = 23236, chance = 3000, maxCount = 3 }, - { id = 23238, chance = 3000, maxCount = 3 }, - { id = 31996, chance = 1000 }, - { id = 31997, chance = 1000 }, - { id = 44048, chance = 3000 }, -- Spirit Horseshoe ( Spirit of Purity Mount x4 ) - { id = 3278, chance = 50 }, -- Magic Longsword Ultra Rare - { id = 43963, chance = 1000 }, -- figurine bakragore - { id = 43968, chance = 1000 }, -- bakragore's amalgamation - { id = 9058, chance = 800 }, -- gold ingot - { id = 43860, chance = 600 }, -- Bag you covet - { id = 43864, chance = 310 }, -- Sanguine Items ( not grand ) - { id = 43866, chance = 320 }, - { id = 43868, chance = 330 }, - { id = 43870, chance = 340 }, - { id = 43872, chance = 350 }, - { id = 43874, chance = 360 }, - { id = 43876, chance = 370 }, - { id = 43877, chance = 380 }, - { id = 43879, chance = 390 }, - { id = 43881, chance = 400 }, - { id = 31965, chance = 15000, maxCount = 2 }, - { id = 43882, chance = 410 }, - { id = 43884, chance = 420 }, - { id = 43885, chance = 430 }, - { id = 43887, chance = 440 }, - { id = 36478, chance = 450 }, + { name = "crystal coin", chance = 8938, maxCount = 165 }, + { name = "ultimate mana potion", chance = 11433, maxCount = 198 }, + { name = "giant amethyst", chance = 10570, maxCount = 4 }, + { name = "giant topaz", chance = 10570, maxCount = 6 }, + { name = "ultimate spirit potion", chance = 11433, maxCount = 45 }, + { name = "giant ruby", chance = 10570, maxCount = 1 }, + { name = "giant sapphire", chance = 10570, maxCount = 1 }, + { name = "mastermind potion", chance = 10938, maxCount = 23 }, + { id = 3039, chance = 10570, maxCount = 3 }, -- red gem + { name = "violet gem", chance = 10970, maxCount = 8 }, + { name = "yellow gem", chance = 10970, maxCount = 9 }, + -- { name = "figurine of bakragore", chance = 10970 }, + -- { name = "bakragore's amalgamation", chance = 570 }, + { name = "spiritual horseshoe", chance = 470 }, + { id = 43895, chance = 360 }, -- Bag you covet } monster.attacks = { { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -3000 }, { name = "combat", interval = 3000, chance = 35, type = COMBAT_ICEDAMAGE, minDamage = -900, maxDamage = -1100, range = 7, radius = 7, shootEffect = CONST_ANI_ICE, effect = 243, target = true }, - { name = "combat", interval = 2000, chance = 13, type = COMBAT_DEATHDAMAGE, minDamage = -100, maxDamage = -1000, length = 8, spread = 3, effect = 252, target = false }, - { name = "combat", interval = 3000, chance = 30, type = COMBAT_FIREDAMAGE, minDamage = -1000, maxDamage = -2000, length = 8, spread = 3, effect = 249, target = false }, + { name = "combat", interval = 2000, chance = 13, type = COMBAT_DEATHDAMAGE, minDamage = -100, maxDamage = -1000, length = 8, spread = 0, effect = 252, target = false }, + { name = "combat", interval = 3000, chance = 30, type = COMBAT_FIREDAMAGE, minDamage = -1000, maxDamage = -2000, length = 8, spread = 0, effect = 249, target = false }, { name = "combat", interval = 2000, chance = 30, type = COMBAT_ICEDAMAGE, minDamage = -950, maxDamage = -2400, range = 7, radius = 3, shootEffect = 37, effect = 240, target = true }, - { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -1000, maxDamage = -2500, length = 8, spread = 3, effect = 244, target = false }, + { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -1000, maxDamage = -2500, length = 8, spread = 0, effect = 244, target = false }, } monster.defenses = { @@ -150,16 +118,16 @@ monster.defenses = { } monster.elements = { - { type = COMBAT_PHYSICALDAMAGE, percent = 0 }, - { type = COMBAT_ENERGYDAMAGE, percent = 0 }, - { type = COMBAT_EARTHDAMAGE, percent = 0 }, - { type = COMBAT_FIREDAMAGE, percent = 0 }, + { type = COMBAT_PHYSICALDAMAGE, percent = 15 }, + { type = COMBAT_ENERGYDAMAGE, percent = 15 }, + { type = COMBAT_EARTHDAMAGE, percent = 15 }, + { type = COMBAT_FIREDAMAGE, percent = 15 }, { type = COMBAT_LIFEDRAIN, percent = 0 }, { type = COMBAT_MANADRAIN, percent = 0 }, { type = COMBAT_DROWNDAMAGE, percent = 0 }, - { type = COMBAT_ICEDAMAGE, percent = 0 }, - { type = COMBAT_HOLYDAMAGE, percent = 0 }, - { type = COMBAT_DEATHDAMAGE, percent = 0 }, + { type = COMBAT_ICEDAMAGE, percent = 15 }, + { type = COMBAT_HOLYDAMAGE, percent = 15 }, + { type = COMBAT_DEATHDAMAGE, percent = 15 }, } monster.immunities = { diff --git a/data-global/monster/quests/rotten_bood/bosses/chagorz.lua b/data-global/monster/bosses/chagorz.lua similarity index 55% rename from data-global/monster/quests/rotten_bood/bosses/chagorz.lua rename to data-global/monster/bosses/chagorz.lua index 92f26711..bec5b74e 100644 --- a/data-global/monster/quests/rotten_bood/bosses/chagorz.lua +++ b/data-global/monster/bosses/chagorz.lua @@ -4,7 +4,7 @@ local monster = {} monster.description = "Chagorz" monster.experience = 3250000 monster.outfit = { - lookType = 1666, + lookType = 1665, lookHead = 0, lookBody = 0, lookLegs = 0, @@ -17,21 +17,21 @@ monster.events = { "RottenBloodBossDeath", } +monster.bosstiary = { + bossRaceId = 2366, + bossRace = RARITY_ARCHFOE, +} + monster.health = 350000 monster.maxHealth = 350000 monster.race = "undead" -monster.corpse = 44021 -monster.speed = 195 +monster.corpse = 44024 +monster.speed = 250 monster.manaCost = 0 monster.changeTarget = { - interval = 2000, - chance = 10, -} - -monster.bosstiary = { - bossRaceId = 2366, - bossRace = RARITY_NEMESIS, + interval = 10000, + chance = 20, } monster.strategiesTarget = { @@ -51,7 +51,7 @@ monster.flags = { illusionable = false, canPushItems = true, canPushCreatures = true, - staticAttackChance = 95, + staticAttackChance = 98, targetDistance = 1, runHealth = 0, healthHidden = false, @@ -59,7 +59,6 @@ monster.flags = { canWalkOnEnergy = true, canWalkOnFire = true, canWalkOnPoison = true, - pet = false, } monster.light = { @@ -72,38 +71,36 @@ monster.summon = {} monster.voices = { interval = 5000, chance = 10, + { text = "The light... that... drains!", yell = false }, + { text = "RAAAR!", yell = false }, + { text = "WILL ... PUNISH ... YOU!", yell = false }, + { text = "Darkness ... devours!", yell = false }, } monster.loot = { - { id = 43895, chance = 4996 }, -- bag you covet, - { name = "berserk potion", chance = 2758, minCount = 0, maxCount = 40 }, - { id = 3041, chance = 4702, minCount = 0, maxCount = 1 }, -- blue gem, - { name = "bullseye potion", chance = 3972, minCount = 0, maxCount = 31 }, - { name = "crystal coin", chance = 4018, minCount = 0, maxCount = 100 }, - { name = "darklight figurine", chance = 3164 }, - { name = "giant topaz", chance = 3744, minCount = 0, maxCount = 1 }, - { name = "giant sapphire", chance = 4917, minCount = 0, maxCount = 1 }, - { name = "gold ingot", chance = 2250, minCount = 0, maxCount = 1 }, - { name = "green gem", chance = 4373, minCount = 0, maxCount = 1 }, - { name = "mastermind potion", chance = 3945, minCount = 0, maxCount = 27 }, - { name = "raw watermelon tourmaline", chance = 1876, minCount = 0, maxCount = 1 }, - { id = 3039, chance = 2121, minCount = 0, maxCount = 1 }, -- red gem, - { name = "supreme health potion", chance = 2303, minCount = 0, maxCount = 164 }, - { name = "the essence of chagorz", chance = 4820 }, - { name = "unicorn figurine", chance = 3030 }, - { name = "ultimate mana potion", chance = 2519, minCount = 0, maxCount = 98 }, - { name = "ultimate spirit potion", chance = 2047, minCount = 0, maxCount = 127 }, - { name = "violet gem", chance = 4963, minCount = 0, maxCount = 1 }, - { name = "white gem", chance = 4927, minCount = 0, maxCount = 3 }, - { name = "yellow gem", chance = 1940, minCount = 0, maxCount = 1 }, + { name = "crystal coin", chance = 5441, maxCount = 108 }, + { name = "mastermind potion", chance = 5530, maxCount = 28 }, + { name = "supreme health potion", chance = 5044, maxCount = 154 }, + { name = "giant sapphire", chance = 10546, maxCount = 1 }, + { name = "ultimate mana potion", chance = 5752, maxCount = 107 }, + { name = "violet gem", chance = 13217, maxCount = 4 }, + { id = 3039, chance = 13465, maxCount = 1 }, -- red gem + { name = "yellow gem", chance = 14071, maxCount = 1 }, + { name = "blue gem", chance = 11156, maxCount = 3 }, + { name = "bullseye potion", chance = 6792, maxCount = 21 }, + { name = "giant amethyst", chance = 11603, maxCount = 1 }, + { name = "giant topaz", chance = 12280, maxCount = 1 }, + { name = "green gem", chance = 8348, maxCount = 1 }, + { name = "ultimate spirit potion", chance = 10934, maxCount = 18 }, + { name = "white gem", chance = 9600, maxCount = 3 }, } monster.attacks = { { name = "melee", interval = 2000, chance = 100, minDamage = -1300, maxDamage = -2250 }, { name = "combat", interval = 2000, chance = 20, type = COMBAT_EARTHDAMAGE, minDamage = -500, maxDamage = -900, radius = 4, effect = CONST_ME_GREEN_RINGS, target = false }, { name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -500, maxDamage = -900, range = 4, radius = 4, effect = 241, target = true }, - { name = "combat", interval = 2000, chance = 20, type = COMBAT_EARTHDAMAGE, minDamage = -1000, maxDamage = -1200, length = 10, spread = 3, effect = CONST_ME_POFF, target = false }, - { name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -1500, maxDamage = -1900, length = 10, spread = 3, effect = 225, target = false }, + { name = "combat", interval = 2000, chance = 20, type = COMBAT_EARTHDAMAGE, minDamage = -1000, maxDamage = -1200, length = 10, spread = 0, effect = CONST_ME_POFF, target = false }, + { name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -1500, maxDamage = -1900, length = 10, spread = 0, effect = 225, target = false }, { name = "speed", interval = 2000, chance = 20, speedChange = -600, radius = 7, effect = CONST_ME_MAGIC_GREEN, target = false, duration = 20000 }, } @@ -114,16 +111,16 @@ monster.defenses = { } monster.elements = { - { type = "COMBAT_PHYSICALDAMAGE", percent = 0 }, - { type = "COMBAT_DEATHDAMAGE", percent = 0 }, - { type = "COMBAT_HOLYDAMAGE", percent = 0 }, - { type = "COMBAT_ICEDAMAGE", percent = 0 }, - { type = "COMBAT_FIREDAMAGE", percent = 0 }, - { type = "COMBAT_ENERGYDAMAGE", percent = 0 }, - { type = "COMBAT_EARTHDAMAGE", percent = 10 }, - { type = "COMBAT_LIFEDRAIN", percent = 0 }, - { type = "COMBAT_MANADRAIN", percent = 0 }, - { type = "COMBAT_DROWNDAMAGE", percent = 0 }, + { type = COMBAT_PHYSICALDAMAGE, percent = 15 }, + { type = COMBAT_ENERGYDAMAGE, percent = 15 }, + { type = COMBAT_EARTHDAMAGE, percent = 15 }, + { type = COMBAT_FIREDAMAGE, percent = 15 }, + { type = COMBAT_LIFEDRAIN, percent = 0 }, + { type = COMBAT_MANADRAIN, percent = 0 }, + { type = COMBAT_DROWNDAMAGE, percent = 0 }, + { type = COMBAT_ICEDAMAGE, percent = 15 }, + { type = COMBAT_HOLYDAMAGE, percent = 15 }, + { type = COMBAT_DEATHDAMAGE, percent = 15 }, } monster.immunities = { diff --git a/data-global/monster/quests/rotten_bood/bosses/ichgahal.lua b/data-global/monster/bosses/ichgahal.lua similarity index 53% rename from data-global/monster/quests/rotten_bood/bosses/ichgahal.lua rename to data-global/monster/bosses/ichgahal.lua index e97f315c..7d0d2192 100644 --- a/data-global/monster/quests/rotten_bood/bosses/ichgahal.lua +++ b/data-global/monster/bosses/ichgahal.lua @@ -17,21 +17,21 @@ monster.events = { "RottenBloodBossDeath", } -monster.health = 1000000 -monster.maxHealth = 1000000 +monster.bosstiary = { + bossRaceId = 2364, + bossRace = RARITY_NEMESIS, +} + +monster.health = 350000 +monster.maxHealth = 350000 monster.race = "undead" monster.corpse = 44018 -monster.speed = 195 +monster.speed = 250 monster.manaCost = 0 monster.changeTarget = { - interval = 2000, - chance = 10, -} - -monster.bosstiary = { - bossRaceId = 2364, - bossRace = RARITY_NEMESIS, + interval = 10000, + chance = 20, } monster.strategiesTarget = { @@ -51,7 +51,7 @@ monster.flags = { illusionable = false, canPushItems = true, canPushCreatures = true, - staticAttackChance = 95, + staticAttackChance = 98, targetDistance = 1, runHealth = 0, healthHidden = false, @@ -59,7 +59,6 @@ monster.flags = { canWalkOnEnergy = true, canWalkOnFire = true, canWalkOnPoison = true, - pet = false, } monster.light = { @@ -68,50 +67,47 @@ monster.light = { } monster.summon = { - maxSummons = 6, + maxSummons = 8, summons = { - { name = "Mushroom", chance = 40, interval = 1000, count = 6 }, + { name = "Mushroom", chance = 30, interval = 5000, count = 8 }, }, } monster.voices = { interval = 5000, chance = 10, + { text = "Rott!!", yell = false }, + { text = "Putrefy!", yell = false }, + { text = "Decay!", yell = false }, } monster.loot = { - { name = "crystal coin", chance = 4872, minCount = 1, maxCount = 124 }, - { name = "green gem", chance = 2152, minCount = 1, maxCount = 5 }, - { name = "yellow gem", chance = 4094, minCount = 1, maxCount = 5 }, - { name = "violet gem", chance = 2278, minCount = 1, maxCount = 4 }, - { id = 3039, chance = 2066, minCount = 1, maxCount = 3 }, -- red gem, - { id = 3041, chance = 4181, minCount = 1, maxCount = 4 }, -- blue gem, - { name = "white gem", chance = 2254, minCount = 1, maxCount = 3 }, - { name = "gold ingot", chance = 4814 }, - { name = "raw watermelon tourmaline", chance = 2852, minCount = 1, maxCount = 2 }, - { name = "amber with a dragonfly", chance = 3322 }, - { name = "amber with a bug", chance = 2521, minCount = 1, maxCount = 2 }, - { name = "berserk potion", chance = 4443, minCount = 1, maxCount = 45 }, - { name = "bullseye potion", chance = 4149, minCount = 1, maxCount = 45 }, - { name = "mastermind potion", chance = 3393, minCount = 1, maxCount = 45 }, - { name = "supreme health potion", chance = 2239, minCount = 1, maxCount = 181 }, - { name = "ultimate spirit potion", chance = 2726, minCount = 1, maxCount = 153 }, - { name = "ultimate mana potion", chance = 1899, minCount = 1, maxCount = 179 }, - { name = "the essence of ichgahal", chance = 3703 }, - { name = "unicorn figurine", chance = 3446 }, - { name = "ichgahal's fungal infestation", chance = 4352 }, - { name = "putrefactive figurine", chance = 2632 }, - { name = "spiritual horseshoe", chance = 2248 }, - { name = "cursed wood", chance = 4739 }, - { id = 43895, chance = 3403 }, -- bag you covet, - { name = "royal almandine", chance = 2268 }, + { name = "crystal coin", chance = 14615, maxCount = 115 }, + { name = "ultimate spirit potion", chance = 7169, maxCount = 153 }, + { name = "mastermind potion", chance = 14651, maxCount = 45 }, + { name = "yellow gem", chance = 9243, maxCount = 5 }, + { name = "amber with a bug", chance = 7224, maxCount = 2 }, + { name = "ultimate mana potion", chance = 13137, maxCount = 179 }, + { name = "violet gem", chance = 14447, maxCount = 4 }, + { name = "raw watermelon tourmaline", chance = 6788, maxCount = 2 }, + { id = 3039, chance = 9047, maxCount = 1 }, -- red gem + { name = "supreme health potion", chance = 14635, maxCount = 37 }, + { name = "berserk potion", chance = 14973, maxCount = 45 }, + { name = "amber with a dragonfly", chance = 6470, maxCount = 1 }, + { name = "gold ingot", chance = 11421, maxCount = 1 }, + { name = "blue gem", chance = 8394, maxCount = 1 }, + { name = "bullseye potion", chance = 13783, maxCount = 36 }, + { name = "putrefactive figurine", chance = 11416, maxCount = 1 }, + { name = "ichgahal's fungal infestation", chance = 7902, maxCount = 1 }, + { name = "white gem", chance = 13559, maxCount = 3 }, + { id = 43895, chance = 360 }, -- Bag you covet } monster.attacks = { { name = "melee", interval = 3000, chance = 100, minDamage = -1500, maxDamage = -2300 }, - { name = "combat", interval = 1000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = -700, maxDamage = -1000, length = 12, spread = 3, effect = 249, target = false }, - { name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -2600, maxDamage = -2300, length = 12, spread = 3, effect = 193, target = false }, - { name = "combat", interval = 2000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -900, maxDamage = -1500, length = 6, spread = 2, effect = CONST_ME_FIREAREA, target = false }, + { name = "combat", interval = 1000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = -700, maxDamage = -1000, length = 12, spread = 0, effect = 249, target = false }, + { name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -2600, maxDamage = -2300, length = 12, spread = 0, effect = 193, target = false }, + { name = "combat", interval = 2000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -900, maxDamage = -1500, length = 6, spread = 0, effect = CONST_ME_FIREAREA, target = false }, { name = "speed", interval = 2000, chance = 35, speedChange = -600, radius = 8, effect = CONST_ME_MAGIC_RED, target = false, duration = 15000 }, } @@ -122,16 +118,16 @@ monster.defenses = { } monster.elements = { - { type = COMBAT_PHYSICALDAMAGE, percent = 0 }, - { type = COMBAT_ENERGYDAMAGE, percent = 0 }, - { type = COMBAT_EARTHDAMAGE, percent = 0 }, - { type = COMBAT_FIREDAMAGE, percent = 0 }, + { type = COMBAT_PHYSICALDAMAGE, percent = 15 }, + { type = COMBAT_ENERGYDAMAGE, percent = 15 }, + { type = COMBAT_EARTHDAMAGE, percent = 15 }, + { type = COMBAT_FIREDAMAGE, percent = 15 }, { type = COMBAT_LIFEDRAIN, percent = 0 }, { type = COMBAT_MANADRAIN, percent = 0 }, { type = COMBAT_DROWNDAMAGE, percent = 0 }, - { type = COMBAT_ICEDAMAGE, percent = 0 }, - { type = COMBAT_HOLYDAMAGE, percent = 0 }, - { type = COMBAT_DEATHDAMAGE, percent = 0 }, + { type = COMBAT_ICEDAMAGE, percent = 15 }, + { type = COMBAT_HOLYDAMAGE, percent = 15 }, + { type = COMBAT_DEATHDAMAGE, percent = 15 }, } monster.immunities = { diff --git a/data-global/monster/quests/rotten_bood/bosses/murcion.lua b/data-global/monster/bosses/murcion.lua similarity index 67% rename from data-global/monster/quests/rotten_bood/bosses/murcion.lua rename to data-global/monster/bosses/murcion.lua index 84b37849..ad091f74 100644 --- a/data-global/monster/quests/rotten_bood/bosses/murcion.lua +++ b/data-global/monster/bosses/murcion.lua @@ -17,21 +17,21 @@ monster.events = { "RottenBloodBossDeath", } +monster.bosstiary = { + bossRaceId = 2362, + bossRace = RARITY_NEMESIS, +} + monster.health = 350000 monster.maxHealth = 350000 monster.race = "undead" monster.corpse = 44015 -monster.speed = 195 +monster.speed = 250 monster.manaCost = 0 monster.changeTarget = { - interval = 2000, - chance = 10, -} - -monster.bosstiary = { - bossRaceId = 2362, - bossRace = RARITY_NEMESIS, + interval = 10000, + chance = 20, } monster.strategiesTarget = { @@ -51,7 +51,7 @@ monster.flags = { illusionable = false, canPushItems = true, canPushCreatures = true, - staticAttackChance = 95, + staticAttackChance = 98, targetDistance = 1, runHealth = 0, healthHidden = false, @@ -59,7 +59,6 @@ monster.flags = { canWalkOnEnergy = true, canWalkOnFire = true, canWalkOnPoison = true, - pet = false, } monster.light = { @@ -67,37 +66,34 @@ monster.light = { color = 0, } -monster.summon = {} - -monster.voices = { - interval = 5000, - chance = 10, +monster.summon = { + maxSummons = 8, + summons = { + { name = "Mushroom", chance = 30, interval = 5000, count = 8 }, + }, } +monster.voices = {} + monster.loot = { - { name = "crystal coin", chance = 8000, maxCount = 78 }, - { name = "supreme health potion", chance = 12500, maxCount = 156 }, - { name = "ultimate mana potion", chance = 12500, maxCount = 18 }, - { name = "ultimate spirit potion", chance = 2500, maxCount = 87 }, - { name = "berserk potion", chance = 5500, maxCount = 16 }, - { name = "blue gem", chance = 2500 }, - { name = "green gem", chance = 2500, maxCount = 2 }, - { id = 36706, chance = 2500, maxCount = 4 }, -- red gem - { name = "mastermind potion", chance = 2500, maxCount = 19 }, - { name = "gold ingot", chance = 2500 }, - { name = "white gem", chance = 2500 }, - { name = "amber with a dragonfly", chance = 1250 }, - { name = "giant emerald", chance = 1250 }, - { name = "spiritual horseshoe", chance = 312 }, - { id = 43895, chance = 20 }, -- bag you covet + { name = "crystal coin", chance = 12317, maxCount = 91 }, + { id = 3039, chance = 10896, maxCount = 2 }, -- red gem + { name = "amber with a bug", chance = 14590, maxCount = 1 }, + { name = "amber with a dragonfly", chance = 5405, maxCount = 1 }, + { name = "bullseye potion", chance = 10821, maxCount = 44 }, + { name = "green gem", chance = 7763, maxCount = 4 }, + { name = "mastermind potion", chance = 9534, maxCount = 15 }, + { name = "supreme health potion", chance = 6212, maxCount = 102 }, + { name = "ultimate mana potion", chance = 8785, maxCount = 29 }, + { name = "ultimate spirit potion", chance = 8783, maxCount = 161 }, } monster.attacks = { { name = "melee", interval = 2000, chance = 100, minDamage = -1400, maxDamage = -2300 }, { name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -500, maxDamage = -900, radius = 4, effect = CONST_ME_SMALLCLOUDS, target = false }, { name = "combat", interval = 2000, chance = 20, type = COMBAT_HOLYDAMAGE, minDamage = -500, maxDamage = -900, range = 4, radius = 4, shootEffect = 31, effect = 248, target = true }, - { name = "combat", interval = 2000, chance = 20, type = COMBAT_ICEDAMAGE, minDamage = -1000, maxDamage = -1200, length = 10, spread = 3, effect = 53, target = false }, - { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -1500, maxDamage = -1900, length = 10, spread = 3, effect = 158, target = false }, + { name = "combat", interval = 2000, chance = 20, type = COMBAT_ICEDAMAGE, minDamage = -1000, maxDamage = -1200, length = 10, spread = 0, effect = 53, target = false }, + { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -1500, maxDamage = -1900, length = 10, spread = 0, effect = 158, target = false }, { name = "speed", interval = 2000, chance = 20, speedChange = -600, radius = 7, effect = CONST_ME_POFF, target = false, duration = 20000 }, } @@ -108,16 +104,16 @@ monster.defenses = { } monster.elements = { - { type = COMBAT_PHYSICALDAMAGE, percent = 0 }, - { type = COMBAT_ENERGYDAMAGE, percent = 0 }, - { type = COMBAT_EARTHDAMAGE, percent = 0 }, - { type = COMBAT_FIREDAMAGE, percent = 0 }, + { type = COMBAT_PHYSICALDAMAGE, percent = 15 }, + { type = COMBAT_ENERGYDAMAGE, percent = 15 }, + { type = COMBAT_EARTHDAMAGE, percent = 15 }, + { type = COMBAT_FIREDAMAGE, percent = 15 }, { type = COMBAT_LIFEDRAIN, percent = 0 }, { type = COMBAT_MANADRAIN, percent = 0 }, { type = COMBAT_DROWNDAMAGE, percent = 0 }, - { type = COMBAT_ICEDAMAGE, percent = 0 }, - { type = COMBAT_HOLYDAMAGE, percent = 0 }, - { type = COMBAT_DEATHDAMAGE, percent = 0 }, + { type = COMBAT_ICEDAMAGE, percent = 15 }, + { type = COMBAT_HOLYDAMAGE, percent = 15 }, + { type = COMBAT_DEATHDAMAGE, percent = 15 }, } monster.immunities = { diff --git a/data-global/monster/quests/rotten_bood/bosses/vemiath.lua b/data-global/monster/bosses/vemiath.lua similarity index 58% rename from data-global/monster/quests/rotten_bood/bosses/vemiath.lua rename to data-global/monster/bosses/vemiath.lua index 54752edf..97be142a 100644 --- a/data-global/monster/quests/rotten_bood/bosses/vemiath.lua +++ b/data-global/monster/bosses/vemiath.lua @@ -4,7 +4,7 @@ local monster = {} monster.description = "Vemiath" monster.experience = 3250000 monster.outfit = { - lookType = 1668, + lookType = 1665, lookHead = 0, lookBody = 0, lookLegs = 0, @@ -17,21 +17,21 @@ monster.events = { "RottenBloodBossDeath", } +monster.bosstiary = { + bossRaceId = 2365, + bossRace = RARITY_ARCHFOE, +} + monster.health = 350000 monster.maxHealth = 350000 monster.race = "undead" monster.corpse = 44021 -monster.speed = 195 +monster.speed = 250 monster.manaCost = 0 monster.changeTarget = { - interval = 2000, - chance = 10, -} - -monster.bosstiary = { - bossRaceId = 2365, - bossRace = RARITY_NEMESIS, + interval = 10000, + chance = 20, } monster.strategiesTarget = { @@ -51,7 +51,7 @@ monster.flags = { illusionable = false, canPushItems = true, canPushCreatures = true, - staticAttackChance = 95, + staticAttackChance = 98, targetDistance = 1, runHealth = 0, healthHidden = false, @@ -59,7 +59,6 @@ monster.flags = { canWalkOnEnergy = true, canWalkOnFire = true, canWalkOnPoison = true, - pet = false, } monster.light = { @@ -67,39 +66,37 @@ monster.light = { color = 0, } -monster.summon = { - maxSummons = 8, - summons = { - { name = "Pillar of Dark Energy", chance = 38, interval = 1713, count = 7 }, - }, -} +monster.summon = {} -monster.voices = {} +monster.voices = { + interval = 5000, + chance = 10, + { text = "The light... that... drains!", yell = false }, + { text = "RAAAR!", yell = false }, + { text = "WILL ... PUNISH ... YOU!", yell = false }, + { text = "Darkness ... devours!", yell = false }, +} monster.loot = { - { name = "crystal coin", chance = 2832, minCount = 1, maxCount = 125 }, - { name = "ultimate mana potion", chance = 3676, minCount = 1, maxCount = 211 }, - { name = "ultimate spirit potion", chance = 4373, minCount = 1, maxCount = 35 }, - { name = "supreme health potion", chance = 3446, minCount = 1, maxCount = 179 }, - { name = "bullseye potion", chance = 3542, minCount = 1, maxCount = 42 }, - { name = "berserk potion", chance = 4060, minCount = 1, maxCount = 45 }, - { name = "mastermind potion", chance = 2891, minCount = 1, maxCount = 44 }, - { id = 3041, chance = 3992, minCount = 0, maxCount = 5 }, -- blue gem, - { name = "green gem", chance = 1989, minCount = 0, maxCount = 5 }, - { id = 3039, chance = 2491, minCount = 0, maxCount = 5 }, -- red gem, - { name = "yellow gem", chance = 3194, minCount = 0, maxCount = 5 }, - { name = "violet gem", chance = 2163, minCount = 0, maxCount = 5 }, - { name = "gold ingot", chance = 2249 }, - { name = "giant emerald", chance = 2434 }, - { name = "giant topaz", chance = 1850 }, - { name = "giant amethyst", chance = 1698 }, - { name = "raw watermelon tourmaline", chance = 4768 }, - { name = "vemiath's infused basalt", chance = 3249, minCount = 0, maxCount = 1 }, - { name = "dragon figurine", chance = 3595 }, - { name = "darklight figurine", chance = 4829 }, - { name = "the essence of vemiath", chance = 4167 }, - { name = "spiritual horseshoe", chance = 1813 }, - { id = 43895, chance = 2280 }, -- bag you covet + { name = "crystal coin", chance = 8852, maxCount = 125 }, + { name = "ultimate mana potion", chance = 11337, maxCount = 211 }, + { name = "giant emerald", chance = 6423, maxCount = 1 }, + { name = "supreme health potion", chance = 8385, maxCount = 179 }, + { name = "yellow gem", chance = 8604, maxCount = 5 }, + { name = "berserk potion", chance = 9395, maxCount = 45 }, + { name = "blue gem", chance = 14144, maxCount = 5 }, + { name = "green gem", chance = 6221, maxCount = 4 }, + { name = "bullseye potion", chance = 6530, maxCount = 26 }, + { name = "mastermind potion", chance = 5700, maxCount = 44 }, + { name = "ultimate spirit potion", chance = 9216, maxCount = 25 }, + { name = "giant topaz", chance = 11191, maxCount = 1 }, + { name = "giant amethyst", chance = 8527, maxCount = 1 }, + { name = "gold ingot", chance = 10866, maxCount = 1 }, + { id = 3039, chance = 8945, maxCount = 1 }, -- red gem + { name = "dragon figurine", chance = 11502, maxCount = 1 }, + { name = "raw watermelon tourmaline", chance = 9302, maxCount = 1 }, + { name = "vemiath's infused basalt", chance = 7914, maxCount = 1 }, + { name = "violet gem", chance = 7210, maxCount = 1 }, } monster.attacks = { @@ -118,16 +115,16 @@ monster.defenses = { } monster.elements = { - { type = COMBAT_PHYSICALDAMAGE, percent = 0 }, - { type = COMBAT_ENERGYDAMAGE, percent = 0 }, - { type = COMBAT_EARTHDAMAGE, percent = 0 }, - { type = COMBAT_FIREDAMAGE, percent = 0 }, + { type = COMBAT_PHYSICALDAMAGE, percent = 15 }, + { type = COMBAT_ENERGYDAMAGE, percent = 15 }, + { type = COMBAT_EARTHDAMAGE, percent = 15 }, + { type = COMBAT_FIREDAMAGE, percent = 15 }, { type = COMBAT_LIFEDRAIN, percent = 0 }, { type = COMBAT_MANADRAIN, percent = 0 }, { type = COMBAT_DROWNDAMAGE, percent = 0 }, - { type = COMBAT_ICEDAMAGE, percent = 0 }, - { type = COMBAT_HOLYDAMAGE, percent = 0 }, - { type = COMBAT_DEATHDAMAGE, percent = 0 }, + { type = COMBAT_ICEDAMAGE, percent = 15 }, + { type = COMBAT_HOLYDAMAGE, percent = 15 }, + { type = COMBAT_DEATHDAMAGE, percent = 15 }, } monster.immunities = { diff --git a/data-global/monster/quests/rotten_bood/bloated_man-maggot.lua b/data-global/monster/quests/rotten_bood/bloated_man-maggot.lua index ee98d242..76c2ecb9 100644 --- a/data-global/monster/quests/rotten_bood/bloated_man-maggot.lua +++ b/data-global/monster/quests/rotten_bood/bloated_man-maggot.lua @@ -16,25 +16,25 @@ monster.outfit = { monster.raceId = 2392 monster.Bestiary = { class = "Vermin", - race = BESTY_RACE_HUMANOID, + race = BESTY_RACE_VERMIN, toKill = 5000, FirstUnlock = 200, SecondUnlock = 2000, CharmsPoints = 100, Stars = 5, - Occurrence = 2, + Occurrence = 0, Locations = "Jaded Roots", } monster.health = 31700 monster.maxHealth = 31700 -monster.race = "venom" +monster.race = "undead" monster.corpse = 43816 monster.speed = 195 -monster.manaCost = 0 +monster.manaCost = 305 monster.changeTarget = { - interval = 4000, + interval = 5000, chance = 10, } @@ -49,14 +49,14 @@ monster.flags = { summonable = false, attackable = true, hostile = true, - convinceable = false, + convinceable = true, pushable = false, rewardBoss = false, illusionable = false, canPushItems = true, canPushCreatures = true, - staticAttackChance = 80, - targetDistance = 4, + staticAttackChance = 90, + targetDistance = 1, runHealth = 0, healthHidden = false, isBlockable = false, @@ -70,10 +70,7 @@ monster.light = { color = 0, } -monster.voices = { - interval = 5000, - chance = 30, -} +monster.voices = {} monster.loot = { { name = "crystal coin", chance = 12961, maxCount = 1 }, @@ -97,16 +94,16 @@ monster.attacks = { } monster.defenses = { - defense = 60, + defense = 104, armor = 104, mitigation = 3.16, } monster.elements = { - { type = COMBAT_PHYSICALDAMAGE, percent = 55 }, + { type = COMBAT_PHYSICALDAMAGE, percent = 45 }, { type = COMBAT_ENERGYDAMAGE, percent = -15 }, - { type = COMBAT_EARTHDAMAGE, percent = 60 }, - { type = COMBAT_FIREDAMAGE, percent = 85 }, + { type = COMBAT_EARTHDAMAGE, percent = 40 }, + { type = COMBAT_FIREDAMAGE, percent = 15 }, { type = COMBAT_LIFEDRAIN, percent = 0 }, { type = COMBAT_MANADRAIN, percent = 0 }, { type = COMBAT_DROWNDAMAGE, percent = 0 }, @@ -116,7 +113,7 @@ monster.elements = { } monster.immunities = { - { type = "paralyze", condition = true }, + { type = "paralyze", condition = false }, { type = "outfit", condition = false }, { type = "invisible", condition = true }, { type = "bleed", condition = false }, diff --git a/data-global/monster/quests/rotten_bood/bosses/pillar of dark energy.lua b/data-global/monster/quests/rotten_bood/bosses/pillar of dark energy.lua deleted file mode 100644 index a74a685f..00000000 --- a/data-global/monster/quests/rotten_bood/bosses/pillar of dark energy.lua +++ /dev/null @@ -1,100 +0,0 @@ -local mType = Game.createMonsterType("Pillar of Dark Energy") -local monster = {} - -monster.description = "a pillar of dark energy" -monster.experience = 20600 -monster.outfit = { - lookTypeEx = 43588, - lookHead = 0, - lookBody = 0, - lookLegs = 0, - lookFeet = 0, - lookAddons = 0, - lookMount = 0, -} - -monster.health = 37500 -monster.maxHealth = 37500 -monster.race = "venom" ---monster.corpse = -monster.speed = 0 -monster.manaCost = 0 - -monster.changeTarget = { - interval = 4000, - chance = 10, -} - -monster.strategiesTarget = { - nearest = 70, - health = 10, - damage = 60, - random = 10, -} - -monster.flags = { - summonable = false, - attackable = true, - hostile = true, - convinceable = false, - pushable = false, - rewardBoss = false, - illusionable = false, - canPushItems = true, - canPushCreatures = true, - staticAttackChance = 80, - targetDistance = 1, - runHealth = 0, - healthHidden = false, - isBlockable = false, - canWalkOnEnergy = true, - canWalkOnFire = true, - canWalkOnPoison = true, -} - -monster.light = { - level = 0, - color = 0, -} - -monster.voices = { - interval = 5000, - chance = 30, -} - -monster.loot = {} - -monster.attacks = { - { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -1450 }, - { name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -1150, maxDamage = -1400, range = 7, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = false }, - { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -800, maxDamage = -1250, length = 8, effect = CONST_ME_EXPLOSIONHIT, target = false }, - { name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -1000, maxDamage = -1350, radius = 4, effect = CONST_ME_MORTAREA, target = false }, - { name = "death chain", interval = 2000, chance = 20, minDamage = -1100, maxDamage = -1380, target = true }, -} -monster.defenses = { - defense = 60, - armor = 104, - mitigation = 3.16, -} - -monster.elements = { - { type = COMBAT_PHYSICALDAMAGE, percent = -30 }, - { type = COMBAT_ENERGYDAMAGE, percent = 25 }, - { type = COMBAT_EARTHDAMAGE, percent = -40 }, - { type = COMBAT_FIREDAMAGE, percent = -25 }, - { type = COMBAT_LIFEDRAIN, percent = 0 }, - { type = COMBAT_MANADRAIN, percent = 0 }, - { type = COMBAT_DROWNDAMAGE, percent = 0 }, - { type = COMBAT_ICEDAMAGE, percent = 10 }, - { type = COMBAT_HOLYDAMAGE, percent = 10 }, - { type = COMBAT_DEATHDAMAGE, percent = 0 }, -} - -monster.immunities = { - { type = "paralyze", condition = true }, - { type = "outfit", condition = false }, - { type = "invisible", condition = true }, - { type = "bleed", condition = false }, -} - -mType:register(monster) diff --git a/data-global/monster/quests/rotten_bood/bosses/tamru_the_black.lua b/data-global/monster/quests/rotten_bood/bosses/tamru_the_black.lua deleted file mode 100644 index 4b0f041d..00000000 --- a/data-global/monster/quests/rotten_bood/bosses/tamru_the_black.lua +++ /dev/null @@ -1,118 +0,0 @@ -local mType = Game.createMonsterType("Tamru the Black") -local monster = {} - -monster.description = "a Tamru the Black" -monster.experience = 11200 -monster.outfit = { - lookType = 1646, - lookHead = 95, - lookBody = 132, - lookLegs = 76, - lookFeet = 76, - lookAddons = 3, - lookMount = 0, -} - -monster.health = 15500 -monster.maxHealth = 15500 -monster.race = "undead" -monster.corpse = 44043 -monster.speed = 180 -monster.manaCost = 0 - -monster.bosstiary = { - bossRaceId = 2405, - bossRace = RARITY_NEMESIS, -} - -monster.changeTarget = { - interval = 4000, - chance = 10, -} - -monster.strategiesTarget = { - nearest = 80, - health = 10, - damage = 10, -} - -monster.flags = { - summonable = false, - attackable = true, - hostile = true, - convinceable = false, - pushable = false, - rewardBoss = false, - illusionable = false, - canPushItems = true, - canPushCreatures = true, - staticAttackChance = 90, - targetDistance = 1, - runHealth = 800, - healthHidden = false, - isBlockable = false, - canWalkOnEnergy = true, - canWalkOnFire = true, - canWalkOnPoison = true, -} - -monster.light = { - level = 0, - color = 0, -} - -monster.voices = {} - -monster.loot = { - { name = "platinum coin", chance = 11576, maxCount = 32 }, - { name = "small diamond", chance = 12440, maxCount = 3 }, - { name = "lightning pendant", chance = 10722, maxCount = 1 }, - { name = "moonlight crystals", chance = 12403, maxCount = 8 }, - { name = "silver moon coin", chance = 9617, maxCount = 1 }, - { name = "weretiger tooth", chance = 5986, maxCount = 1 }, - { name = "yellow gem", chance = 13110, maxCount = 1 }, - --{ name = "moon compass", chance = 10045, maxCount = 1 }, - { name = "moon pin", chance = 7275, maxCount = 1 }, - { name = "noble axe", chance = 6154, maxCount = 1 }, - { name = "white gem", chance = 6291, maxCount = 1 }, - { name = "crystal mace", chance = 11375, maxCount = 1 }, - { name = "blue gem", chance = 12692, maxCount = 1 }, - { name = "blue robe", chance = 5027, maxCount = 1 }, - { name = "giant sapphire", chance = 5011, maxCount = 1 }, -} - -monster.attacks = { - { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -400 }, - { name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = 0, maxDamage = -615, range = 7, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = false }, - { name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -100, maxDamage = -400, radius = 4, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = true }, - { name = "speed", interval = 4000, chance = 20, speedChange = -350, range = 7, shootEffect = CONST_ANI_POISON, target = true, duration = 12000 }, - { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = 0, maxDamage = -574, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = false }, - { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -646, radius = 3, effect = CONST_ME_POFF, target = false }, -} - -monster.defenses = { - defense = 83, - armor = 83, -} - -monster.elements = { - { type = COMBAT_PHYSICALDAMAGE, percent = -5 }, - { type = COMBAT_ENERGYDAMAGE, percent = 60 }, - { type = COMBAT_EARTHDAMAGE, percent = 20 }, - { type = COMBAT_FIREDAMAGE, percent = -5 }, - { type = COMBAT_LIFEDRAIN, percent = 0 }, - { type = COMBAT_MANADRAIN, percent = 0 }, - { type = COMBAT_DROWNDAMAGE, percent = 0 }, - { type = COMBAT_ICEDAMAGE, percent = 50 }, - { type = COMBAT_HOLYDAMAGE, percent = 25 }, - { type = COMBAT_DEATHDAMAGE, percent = 0 }, -} - -monster.immunities = { - { type = "paralyze", condition = true }, - { type = "outfit", condition = false }, - { type = "invisible", condition = true }, - { type = "bleed", condition = false }, -} - -mType:register(monster) diff --git a/data-global/monster/quests/rotten_bood/converter.lua b/data-global/monster/quests/rotten_bood/converter.lua index 7b6eccb0..65ebab91 100644 --- a/data-global/monster/quests/rotten_bood/converter.lua +++ b/data-global/monster/quests/rotten_bood/converter.lua @@ -22,15 +22,15 @@ monster.Bestiary = { SecondUnlock = 2000, CharmsPoints = 100, Stars = 5, - Occurrence = 2, - Locations = "Gloom Pillars", + Occurrence = 0, + Locations = "Gloom Pillars.", } monster.health = 29600 monster.maxHealth = 29600 -monster.race = "venom" +monster.race = "undead" monster.corpse = 43567 -monster.speed = 210 +monster.speed = 250 monster.manaCost = 0 monster.changeTarget = { @@ -41,7 +41,7 @@ monster.changeTarget = { monster.strategiesTarget = { nearest = 70, health = 10, - damage = 60, + damage = 10, random = 10, } @@ -52,16 +52,16 @@ monster.flags = { convinceable = false, pushable = false, rewardBoss = false, - illusionable = false, + illusionable = true, canPushItems = true, - canPushCreatures = true, + canPushCreatures = false, staticAttackChance = 80, - targetDistance = 4, + targetDistance = 1, runHealth = 0, healthHidden = false, isBlockable = false, canWalkOnEnergy = true, - canWalkOnFire = true, + canWalkOnFire = false, canWalkOnPoison = true, } @@ -70,14 +70,10 @@ monster.light = { color = 0, } -monster.voices = { - interval = 5000, - chance = 30, -} - monster.loot = { { name = "crystal coin", chance = 5230, maxCount = 1 }, { name = "darklight obsidian axe", chance = 6963, maxCount = 1 }, + { name = "darklight matter", chance = 6927, maxCount = 1 }, { name = "darklight core", chance = 10715, maxCount = 1 }, { name = "wand of starstorm", chance = 8797, maxCount = 1 }, { name = "blue gem", chance = 9372, maxCount = 1 }, @@ -95,22 +91,22 @@ monster.attacks = { } monster.defenses = { - defense = 60, - armor = 112, - mitigation = 3.25, + defense = 100, + armor = 100, + mitigation = 3.31, } monster.elements = { - { type = COMBAT_PHYSICALDAMAGE, percent = 45 }, - { type = COMBAT_ENERGYDAMAGE, percent = -15 }, - { type = COMBAT_EARTHDAMAGE, percent = 40 }, - { type = COMBAT_FIREDAMAGE, percent = 15 }, + { type = COMBAT_PHYSICALDAMAGE, percent = -20 }, + { type = COMBAT_ENERGYDAMAGE, percent = -10 }, + { type = COMBAT_EARTHDAMAGE, percent = 10 }, + { type = COMBAT_FIREDAMAGE, percent = 25 }, { type = COMBAT_LIFEDRAIN, percent = 0 }, { type = COMBAT_MANADRAIN, percent = 0 }, { type = COMBAT_DROWNDAMAGE, percent = 0 }, - { type = COMBAT_ICEDAMAGE, percent = -15 }, - { type = COMBAT_HOLYDAMAGE, percent = -5 }, - { type = COMBAT_DEATHDAMAGE, percent = 5 }, + { type = COMBAT_ICEDAMAGE, percent = 0 }, + { type = COMBAT_HOLYDAMAGE, percent = 35 }, + { type = COMBAT_DEATHDAMAGE, percent = -15 }, } monster.immunities = { diff --git a/data-global/monster/quests/rotten_bood/darklight_construct.lua b/data-global/monster/quests/rotten_bood/darklight_construct.lua index e5362dd6..c4b2c5e8 100644 --- a/data-global/monster/quests/rotten_bood/darklight_construct.lua +++ b/data-global/monster/quests/rotten_bood/darklight_construct.lua @@ -2,9 +2,9 @@ local mType = Game.createMonsterType("Darklight Construct") local monster = {} monster.description = "a darklight construct" -monster.experience = 22465 +monster.experience = 22050 monster.outfit = { - lookType = 1660, + lookType = 1622, lookHead = 0, lookBody = 0, lookLegs = 0, @@ -22,13 +22,13 @@ monster.Bestiary = { SecondUnlock = 2000, CharmsPoints = 100, Stars = 5, - Occurrence = 2, - Locations = "Gloom Pillars", + Occurrence = 0, + Locations = "Darklight Core", } monster.health = 32200 monster.maxHealth = 32200 -monster.race = "venom" +monster.race = "undead" monster.corpse = 43840 monster.speed = 220 monster.manaCost = 0 @@ -55,8 +55,8 @@ monster.flags = { illusionable = false, canPushItems = true, canPushCreatures = true, - staticAttackChance = 80, - targetDistance = 4, + staticAttackChance = 90, + targetDistance = 0, runHealth = 0, healthHidden = false, isBlockable = false, @@ -70,11 +70,6 @@ monster.light = { color = 0, } -monster.voices = { - interval = 5000, - chance = 30, -} - monster.loot = { { name = "crystal coin", chance = 11290, maxCount = 1 }, { name = "dark obsidian splinter", chance = 12735, maxCount = 1 }, @@ -97,9 +92,9 @@ monster.attacks = { } monster.defenses = { - defense = 60, - armor = 104, - mitigation = 3.16, + defense = 117, + armor = 117, + mitigation = 2.98, } monster.elements = { diff --git a/data-global/monster/quests/rotten_bood/darklight_emitter.lua b/data-global/monster/quests/rotten_bood/darklight_emitter.lua index 990d11dd..dc211745 100644 --- a/data-global/monster/quests/rotten_bood/darklight_emitter.lua +++ b/data-global/monster/quests/rotten_bood/darklight_emitter.lua @@ -22,14 +22,14 @@ monster.Bestiary = { SecondUnlock = 2000, CharmsPoints = 100, Stars = 5, - Occurrence = 2, - Locations = "Gloom Pillars", + Occurrence = 0, + Locations = "Darklight Core", } monster.health = 27500 monster.maxHealth = 27500 -monster.race = "venom" -monster.corpse = 43844 +monster.race = "undead" +monster.corpse = 43583 monster.speed = 210 monster.manaCost = 0 @@ -41,7 +41,7 @@ monster.changeTarget = { monster.strategiesTarget = { nearest = 70, health = 10, - damage = 60, + damage = 10, random = 10, } @@ -55,8 +55,8 @@ monster.flags = { illusionable = false, canPushItems = true, canPushCreatures = true, - staticAttackChance = 80, - targetDistance = 1, + staticAttackChance = 90, + targetDistance = 0, runHealth = 0, healthHidden = false, isBlockable = false, @@ -70,11 +70,6 @@ monster.light = { color = 0, } -monster.voices = { - interval = 5000, - chance = 30, -} - monster.loot = { { name = "crystal coin", chance = 12516, maxCount = 2 }, { name = "darklight core", chance = 13367, maxCount = 1 }, @@ -95,9 +90,9 @@ monster.attacks = { } monster.defenses = { - defense = 60, - armor = 104, - mitigation = 3.16, + defense = 120, + armor = 120, + mitigation = 3.04, } monster.elements = { diff --git a/data-global/monster/quests/rotten_bood/darklight_matter.lua b/data-global/monster/quests/rotten_bood/darklight_matter.lua index 92509349..fa2fae08 100644 --- a/data-global/monster/quests/rotten_bood/darklight_matter.lua +++ b/data-global/monster/quests/rotten_bood/darklight_matter.lua @@ -82,7 +82,8 @@ monster.loot = { { name = "unstable darklight matter", chance = 9060, maxCount = 1 }, { name = "darklight core", chance = 12887, maxCount = 1 }, { name = "ultimate health potion", chance = 6553, maxCount = 6 }, - { id = 3039, chance = 5852, maxCount = 1 }, -- red gem + { id = 3039, chance = 1430 }, -- red gem + { name = "darklight matter", chance = 8849, maxCount = 1 }, { name = "rubber cap", chance = 7180, maxCount = 1 }, { id = 23544, chance = 3500, maxCount = 1 }, -- collar of red plasma { name = "green gem", chance = 3500, maxCount = 1 }, diff --git a/data-global/monster/quests/rotten_bood/darklight_source.lua b/data-global/monster/quests/rotten_bood/darklight_source.lua index da649280..b6e9c065 100644 --- a/data-global/monster/quests/rotten_bood/darklight_source.lua +++ b/data-global/monster/quests/rotten_bood/darklight_source.lua @@ -15,20 +15,20 @@ monster.outfit = { monster.raceId = 2398 monster.Bestiary = { - class = "Undead", - race = BESTY_RACE_HUMANOID, + class = "Magical", + race = BESTY_RACE_MAGICAL, toKill = 5000, FirstUnlock = 200, SecondUnlock = 2000, CharmsPoints = 100, Stars = 5, - Occurrence = 2, - Locations = "Jaded Roots", + Occurrence = 0, + Locations = "Darklight Core", } monster.health = 31550 monster.maxHealth = 31550 -monster.race = "venom" +monster.race = "undead" monster.corpse = 43840 monster.speed = 220 monster.manaCost = 0 @@ -55,8 +55,8 @@ monster.flags = { illusionable = false, canPushItems = true, canPushCreatures = true, - staticAttackChance = 80, - targetDistance = 4, + staticAttackChance = 90, + targetDistance = 1, runHealth = 0, healthHidden = false, isBlockable = false, @@ -70,11 +70,6 @@ monster.light = { color = 0, } -monster.voices = { - interval = 5000, - chance = 30, -} - monster.loot = { { name = "crystal coin", chance = 5214, maxCount = 1 }, { name = "yellow darklight matter", chance = 9397, maxCount = 1 }, @@ -94,13 +89,13 @@ monster.attacks = { } monster.defenses = { - defense = 60, - armor = 104, - mitigation = 3.16, + defense = 115, + armor = 115, + mitigation = 3.19, } monster.elements = { - { type = COMBAT_PHYSICALDAMAGE, percent = -10 }, + { type = COMBAT_PHYSICALDAMAGE, percent = -15 }, { type = COMBAT_ENERGYDAMAGE, percent = 55 }, { type = COMBAT_EARTHDAMAGE, percent = -10 }, { type = COMBAT_FIREDAMAGE, percent = -15 }, diff --git a/data-global/monster/quests/rotten_bood/darklight_striker.lua b/data-global/monster/quests/rotten_bood/darklight_striker.lua index 9fbedae7..4d6a19d6 100644 --- a/data-global/monster/quests/rotten_bood/darklight_striker.lua +++ b/data-global/monster/quests/rotten_bood/darklight_striker.lua @@ -15,20 +15,20 @@ monster.outfit = { monster.raceId = 2399 monster.Bestiary = { - class = "Undead", - race = BESTY_RACE_HUMANOID, + class = "Magical", + race = BESTY_RACE_MAGICAL, toKill = 5000, FirstUnlock = 200, SecondUnlock = 2000, CharmsPoints = 100, Stars = 5, - Occurrence = 2, + Occurrence = 0, Locations = "Darklight Core", } monster.health = 29700 monster.maxHealth = 29700 -monster.race = "venom" +monster.race = "undead" monster.corpse = 43844 monster.speed = 210 monster.manaCost = 0 @@ -41,7 +41,7 @@ monster.changeTarget = { monster.strategiesTarget = { nearest = 70, health = 10, - damage = 60, + damage = 10, random = 10, } @@ -55,7 +55,7 @@ monster.flags = { illusionable = false, canPushItems = true, canPushCreatures = true, - staticAttackChance = 80, + staticAttackChance = 90, targetDistance = 1, runHealth = 0, healthHidden = false, @@ -70,11 +70,6 @@ monster.light = { color = 0, } -monster.voices = { - interval = 5000, - chance = 30, -} - monster.loot = { { name = "crystal coin", chance = 14380, maxCount = 1 }, { name = "unstable darklight matter", chance = 14492, maxCount = 1 }, @@ -97,9 +92,9 @@ monster.attacks = { } monster.defenses = { - defense = 60, - armor = 104, - mitigation = 3.16, + defense = 112, + armor = 112, + mitigation = 3.10, } monster.elements = { diff --git a/data-global/monster/quests/rotten_bood/bosses/echo_of_chagorz.lua b/data-global/monster/quests/rotten_bood/echo_of_chagorz.lua similarity index 98% rename from data-global/monster/quests/rotten_bood/bosses/echo_of_chagorz.lua rename to data-global/monster/quests/rotten_bood/echo_of_chagorz.lua index e0e23405..3627ffe7 100644 --- a/data-global/monster/quests/rotten_bood/bosses/echo_of_chagorz.lua +++ b/data-global/monster/quests/rotten_bood/echo_of_chagorz.lua @@ -1,7 +1,7 @@ local mType = Game.createMonsterType("Echo Of Chagorz") local monster = {} -monster.description = "an echo Of Chagorz" +monster.description = "an echo of Chagorz" monster.experience = 0 monster.outfit = { lookType = 1670, diff --git a/data-global/monster/quests/rotten_bood/bosses/echo_of_ichgahal.lua b/data-global/monster/quests/rotten_bood/echo_of_ichgahal.lua similarity index 100% rename from data-global/monster/quests/rotten_bood/bosses/echo_of_ichgahal.lua rename to data-global/monster/quests/rotten_bood/echo_of_ichgahal.lua diff --git a/data-global/monster/quests/rotten_bood/bosses/echo_of_murcion.lua b/data-global/monster/quests/rotten_bood/echo_of_murcion.lua similarity index 100% rename from data-global/monster/quests/rotten_bood/bosses/echo_of_murcion.lua rename to data-global/monster/quests/rotten_bood/echo_of_murcion.lua diff --git a/data-global/monster/quests/rotten_bood/bosses/echo_of_vemiath.lua b/data-global/monster/quests/rotten_bood/echo_of_vemiath.lua similarity index 100% rename from data-global/monster/quests/rotten_bood/bosses/echo_of_vemiath.lua rename to data-global/monster/quests/rotten_bood/echo_of_vemiath.lua diff --git a/data-global/monster/quests/rotten_bood/bosses/elder_bloodjaw.lua b/data-global/monster/quests/rotten_bood/elder_bloodjaw.lua similarity index 96% rename from data-global/monster/quests/rotten_bood/bosses/elder_bloodjaw.lua rename to data-global/monster/quests/rotten_bood/elder_bloodjaw.lua index 3693a89a..37b63816 100644 --- a/data-global/monster/quests/rotten_bood/bosses/elder_bloodjaw.lua +++ b/data-global/monster/quests/rotten_bood/elder_bloodjaw.lua @@ -15,7 +15,7 @@ monster.outfit = { monster.health = 86000 monster.maxHealth = 86000 -monster.race = "venom" +monster.race = "undead" monster.corpse = 43669 monster.speed = 210 monster.manaCost = 0 @@ -59,7 +59,8 @@ monster.light = { monster.voices = { interval = 5000, chance = 10, - { text = "SHWAARR!", yell = true }, + { text = "SHWAARR!", yell = false }, + { text = "SHWAARP!", yell = false }, } monster.loot = {} diff --git a/data-global/monster/quests/rotten_bood/meandering_mushroom.lua b/data-global/monster/quests/rotten_bood/meandering_mushroom.lua index e9150ebb..7dc04b95 100644 --- a/data-global/monster/quests/rotten_bood/meandering_mushroom.lua +++ b/data-global/monster/quests/rotten_bood/meandering_mushroom.lua @@ -15,33 +15,33 @@ monster.outfit = { monster.raceId = 2376 monster.Bestiary = { - class = "Vermin", - race = BESTY_RACE_VERMIN, + class = "Slime", + race = BESTY_RACE_SLIME, toKill = 5000, FirstUnlock = 200, SecondUnlock = 2000, CharmsPoints = 100, Stars = 5, - Occurrence = 2, - Locations = "Jaded Roots", + Occurrence = 0, + Locations = "Putrefactory.", } monster.health = 29100 monster.maxHealth = 29100 -monster.race = "venom" +monster.race = "undead" monster.corpse = 43559 monster.speed = 205 monster.manaCost = 0 monster.changeTarget = { - interval = 4000, - chance = 10, + interval = 5000, + chance = 0, } monster.strategiesTarget = { nearest = 70, health = 10, - damage = 60, + damage = 10, random = 10, } @@ -54,14 +54,14 @@ monster.flags = { rewardBoss = false, illusionable = false, canPushItems = true, - canPushCreatures = true, - staticAttackChance = 80, - targetDistance = 1, + canPushCreatures = false, + staticAttackChance = 85, + targetDistance = 0, runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = true, - canWalkOnFire = true, + canWalkOnEnergy = false, + canWalkOnFire = false, canWalkOnPoison = true, } @@ -70,11 +70,6 @@ monster.light = { color = 0, } -monster.voices = { - interval = 5000, - chance = 30, -} - monster.loot = { { name = "crystal coin", chance = 11755, maxCount = 1 }, { name = "lichen gobbler", chance = 9121, maxCount = 1 }, @@ -82,6 +77,7 @@ monster.loot = { { name = "rotten roots", chance = 9791, maxCount = 1 }, { name = "wand of decay", chance = 14668, maxCount = 1 }, { id = 3039, chance = 10406, maxCount = 1 }, -- red gem + { name = "worm sponge", chance = 10697, maxCount = 1 }, { name = "dark mushroom", chance = 12313, maxCount = 3 }, { name = "yellow gem", chance = 13520, maxCount = 1 }, { name = "brown mushroom", chance = 6422, maxCount = 3 }, @@ -97,9 +93,9 @@ monster.attacks = { } monster.defenses = { - defense = 60, - armor = 104, - mitigation = 3.16, + defense = 115, + armor = 115, + mitigation = 3.19, } monster.elements = { @@ -116,9 +112,9 @@ monster.elements = { } monster.immunities = { - { type = "paralyze", condition = true }, + { type = "paralyze", condition = false }, { type = "outfit", condition = false }, - { type = "invisible", condition = true }, + { type = "invisible", condition = false }, { type = "bleed", condition = false }, } diff --git a/data-global/monster/quests/rotten_bood/bosses/mushroom.lua b/data-global/monster/quests/rotten_bood/mushroom.lua similarity index 62% rename from data-global/monster/quests/rotten_bood/bosses/mushroom.lua rename to data-global/monster/quests/rotten_bood/mushroom.lua index 13d98616..d5611b8e 100644 --- a/data-global/monster/quests/rotten_bood/bosses/mushroom.lua +++ b/data-global/monster/quests/rotten_bood/mushroom.lua @@ -1,10 +1,10 @@ local mType = Game.createMonsterType("Mushroom") local monster = {} -monster.description = "a mushroom" -monster.experience = 20600 +monster.description = "a Mushroom" +monster.experience = 0 monster.outfit = { - lookTypeEx = 43587, + lookType = 1669, --todo get correct lookType lookHead = 0, lookBody = 0, lookLegs = 0, @@ -13,25 +13,22 @@ monster.outfit = { lookMount = 0, } -monster.raceId = 61772 -monster.Bestiary = {} - monster.health = 10000 monster.maxHealth = 10000 -monster.race = "venom" ---monster.corpse = +monster.race = "undead" +monster.corpse = 0 monster.speed = 0 monster.manaCost = 0 monster.changeTarget = { - interval = 4000, - chance = 10, + interval = 2500, + chance = 40, } monster.strategiesTarget = { nearest = 70, health = 10, - damage = 60, + damage = 10, random = 10, } @@ -45,7 +42,7 @@ monster.flags = { illusionable = false, canPushItems = true, canPushCreatures = true, - staticAttackChance = 80, + staticAttackChance = 98, targetDistance = 1, runHealth = 0, healthHidden = false, @@ -60,10 +57,7 @@ monster.light = { color = 0, } -monster.voices = { - interval = 5000, - chance = 30, -} +monster.voices = {} monster.loot = {} @@ -73,30 +67,28 @@ monster.attacks = { } monster.defenses = { - defense = 60, - armor = 104, - mitigation = 3.16, - { name = "combat", interval = 2000, chance = 15, type = COMBAT_HEALING, minDamage = 2550, maxDamage = 3000, radius = 4, effect = CONST_ME_GREEN_RINGS, target = false }, + defense = 65, + armor = 0, } monster.elements = { - { type = COMBAT_PHYSICALDAMAGE, percent = -30 }, - { type = COMBAT_ENERGYDAMAGE, percent = 25 }, - { type = COMBAT_EARTHDAMAGE, percent = -40 }, - { type = COMBAT_FIREDAMAGE, percent = -25 }, + { type = COMBAT_PHYSICALDAMAGE, percent = 0 }, + { type = COMBAT_ENERGYDAMAGE, percent = 0 }, + { type = COMBAT_EARTHDAMAGE, percent = 0 }, + { type = COMBAT_FIREDAMAGE, percent = 0 }, { type = COMBAT_LIFEDRAIN, percent = 0 }, { type = COMBAT_MANADRAIN, percent = 0 }, { type = COMBAT_DROWNDAMAGE, percent = 0 }, - { type = COMBAT_ICEDAMAGE, percent = 10 }, - { type = COMBAT_HOLYDAMAGE, percent = 10 }, + { type = COMBAT_ICEDAMAGE, percent = 0 }, + { type = COMBAT_HOLYDAMAGE, percent = 0 }, { type = COMBAT_DEATHDAMAGE, percent = 0 }, } monster.immunities = { { type = "paralyze", condition = true }, - { type = "outfit", condition = false }, + { type = "outfit", condition = true }, { type = "invisible", condition = true }, - { type = "bleed", condition = false }, + { type = "bleed", condition = true }, } mType:register(monster) diff --git a/data-global/monster/quests/rotten_bood/mycobiontic_beetle.lua b/data-global/monster/quests/rotten_bood/mycobiontic_beetle.lua index 1c2336af..6a8267c9 100644 --- a/data-global/monster/quests/rotten_bood/mycobiontic_beetle.lua +++ b/data-global/monster/quests/rotten_bood/mycobiontic_beetle.lua @@ -22,26 +22,26 @@ monster.Bestiary = { SecondUnlock = 2000, CharmsPoints = 100, Stars = 5, - Occurrence = 2, - Locations = "Jaded Roots", + Occurrence = 0, + Locations = "Jaded roots", } monster.health = 30200 monster.maxHealth = 30200 -monster.race = "venom" +monster.race = "undead" monster.corpse = 43555 monster.speed = 230 monster.manaCost = 0 monster.changeTarget = { - interval = 4000, + interval = 5000, chance = 10, } monster.strategiesTarget = { nearest = 70, health = 10, - damage = 60, + damage = 10, random = 10, } @@ -55,8 +55,8 @@ monster.flags = { illusionable = false, canPushItems = true, canPushCreatures = true, - staticAttackChance = 80, - targetDistance = 1, + staticAttackChance = 90, + targetDistance = 0, runHealth = 0, healthHidden = false, isBlockable = false, @@ -72,7 +72,7 @@ monster.light = { monster.voices = { interval = 5000, - chance = 30, + chance = 10, } monster.loot = { @@ -85,6 +85,7 @@ monster.loot = { { name = "rotten roots", chance = 25920, maxCount = 1 }, { name = "scarab coin", chance = 22920, maxCount = 3 }, { name = "buckle", chance = 22920, maxCount = 1 }, + { name = "rotten vermin ichor", chance = 22920, maxCount = 1 }, { name = "violet gem", chance = 18920 }, { name = "blue gem", chance = 15920 }, { name = "small ruby", chance = 24560, maxCount = 3 }, @@ -100,9 +101,9 @@ monster.attacks = { } monster.defenses = { - defense = 60, - armor = 104, - mitigation = 3.16, + defense = 116, + armor = 116, + mitigation = 2.92, } monster.elements = { @@ -119,7 +120,7 @@ monster.elements = { } monster.immunities = { - { type = "paralyze", condition = true }, + { type = "paralyze", condition = false }, { type = "outfit", condition = false }, { type = "invisible", condition = true }, { type = "bleed", condition = false }, diff --git a/data-global/monster/quests/rotten_bood/oozing_carcass.lua b/data-global/monster/quests/rotten_bood/oozing_carcass.lua index 73d91fc3..bc44ba19 100644 --- a/data-global/monster/quests/rotten_bood/oozing_carcass.lua +++ b/data-global/monster/quests/rotten_bood/oozing_carcass.lua @@ -22,26 +22,26 @@ monster.Bestiary = { SecondUnlock = 2000, CharmsPoints = 100, Stars = 5, - Occurrence = 2, - Locations = "Putrefactory", + Occurrence = 0, + Locations = "Putrefactory.", } monster.health = 27500 monster.maxHealth = 27500 -monster.race = "venom" +monster.race = "undead" monster.corpse = 43579 -monster.speed = 220 +monster.speed = 215 monster.manaCost = 0 monster.changeTarget = { interval = 4000, - chance = 10, + chance = 0, } monster.strategiesTarget = { nearest = 70, health = 10, - damage = 60, + damage = 10, random = 10, } @@ -54,8 +54,8 @@ monster.flags = { rewardBoss = false, illusionable = false, canPushItems = true, - canPushCreatures = true, - staticAttackChance = 80, + canPushCreatures = false, + staticAttackChance = 90, targetDistance = 1, runHealth = 0, healthHidden = false, @@ -66,13 +66,8 @@ monster.flags = { } monster.light = { - level = 0, - color = 0, -} - -monster.voices = { - interval = 5000, - chance = 30, + level = 4, + color = 143, } monster.loot = { @@ -100,9 +95,9 @@ monster.attacks = { } monster.defenses = { - defense = 60, - armor = 104, - mitigation = 3.16, + defense = 102, + armor = 102, + mitigation = 3.10, } monster.elements = { @@ -120,7 +115,7 @@ monster.elements = { monster.immunities = { { type = "paralyze", condition = true }, - { type = "outfit", condition = false }, + { type = "outfit", condition = true }, { type = "invisible", condition = true }, { type = "bleed", condition = false }, } diff --git a/data-global/monster/quests/rotten_bood/oozing_corpus.lua b/data-global/monster/quests/rotten_bood/oozing_corpus.lua index 069f0df6..7408ed46 100644 --- a/data-global/monster/quests/rotten_bood/oozing_corpus.lua +++ b/data-global/monster/quests/rotten_bood/oozing_corpus.lua @@ -16,32 +16,32 @@ monster.outfit = { monster.raceId = 2381 monster.Bestiary = { class = "Undead", - race = BESTY_RACE_HUMANOID, + race = BESTY_RACE_UNDEAD, toKill = 5000, FirstUnlock = 200, SecondUnlock = 2000, CharmsPoints = 100, Stars = 5, - Occurrence = 2, - Locations = "Jaded Roots", + Occurrence = 0, + Locations = "Jaded Roots.", } monster.health = 28700 monster.maxHealth = 28700 -monster.race = "venom" +monster.race = "undead" monster.corpse = 43575 monster.speed = 220 monster.manaCost = 0 monster.changeTarget = { interval = 4000, - chance = 10, + chance = 0, } monster.strategiesTarget = { nearest = 70, health = 10, - damage = 60, + damage = 10, random = 10, } @@ -54,9 +54,9 @@ monster.flags = { rewardBoss = false, illusionable = false, canPushItems = true, - canPushCreatures = true, - staticAttackChance = 80, - targetDistance = 1, + canPushCreatures = false, + staticAttackChance = 90, + targetDistance = 0, runHealth = 0, healthHidden = false, isBlockable = false, @@ -66,13 +66,8 @@ monster.flags = { } monster.light = { - level = 0, - color = 0, -} - -monster.voices = { - interval = 5000, - chance = 30, + level = 4, + color = 143, } monster.loot = { @@ -83,6 +78,7 @@ monster.loot = { { name = "rotten roots", chance = 13133, maxCount = 1 }, { name = "blue gem", chance = 9808, maxCount = 1 }, { name = "dragonbone staff", chance = 6964, maxCount = 1 }, + { name = "worm sponge", chance = 7270, maxCount = 1 }, { name = "violet gem", chance = 5084, maxCount = 1 }, { name = "jade hammer", chance = 3073, maxCount = 1 }, } @@ -96,9 +92,9 @@ monster.attacks = { } monster.defenses = { - defense = 60, - armor = 104, - mitigation = 3.16, + defense = 100, + armor = 107, + mitigation = 3.25, } monster.elements = { @@ -116,7 +112,7 @@ monster.elements = { monster.immunities = { { type = "paralyze", condition = true }, - { type = "outfit", condition = false }, + { type = "outfit", condition = true }, { type = "invisible", condition = true }, { type = "bleed", condition = false }, } diff --git a/data-global/monster/quests/rotten_bood/rotten_man-maggot.lua b/data-global/monster/quests/rotten_bood/rotten_man-maggot.lua index c3bb6767..19eb6d03 100644 --- a/data-global/monster/quests/rotten_bood/rotten_man-maggot.lua +++ b/data-global/monster/quests/rotten_bood/rotten_man-maggot.lua @@ -22,19 +22,19 @@ monster.Bestiary = { SecondUnlock = 2000, CharmsPoints = 100, Stars = 5, - Occurrence = 2, - Locations = "Putrefactory", + Occurrence = 0, + Locations = "Putrefactory.", } monster.health = 31100 monster.maxHealth = 31100 -monster.race = "venom" +monster.race = "undead" monster.corpse = 43820 -monster.speed = 110 +monster.speed = 195 monster.manaCost = 0 monster.changeTarget = { - interval = 4000, + interval = 5000, chance = 10, } @@ -49,14 +49,14 @@ monster.flags = { summonable = false, attackable = true, hostile = true, - convinceable = false, + convinceable = true, pushable = false, rewardBoss = false, illusionable = false, canPushItems = true, canPushCreatures = true, - staticAttackChance = 80, - targetDistance = 4, + staticAttackChance = 90, + targetDistance = 0, runHealth = 0, healthHidden = false, isBlockable = false, @@ -72,7 +72,7 @@ monster.light = { monster.voices = { interval = 5000, - chance = 30, + chance = 10, } monster.loot = { @@ -96,9 +96,9 @@ monster.attacks = { } monster.defenses = { - defense = 60, - armor = 104, - mitigation = 3.16, + defense = 110, + armor = 110, + mitigation = 2.75, } monster.elements = { @@ -115,7 +115,7 @@ monster.elements = { } monster.immunities = { - { type = "paralyze", condition = true }, + { type = "paralyze", condition = false }, { type = "outfit", condition = false }, { type = "invisible", condition = true }, { type = "bleed", condition = false }, diff --git a/data-global/monster/quests/rotten_bood/sopping_carcass.lua b/data-global/monster/quests/rotten_bood/sopping_carcass.lua index 61e6e608..26458dfe 100644 --- a/data-global/monster/quests/rotten_bood/sopping_carcass.lua +++ b/data-global/monster/quests/rotten_bood/sopping_carcass.lua @@ -22,26 +22,26 @@ monster.Bestiary = { SecondUnlock = 2000, CharmsPoints = 100, Stars = 5, - Occurrence = 2, - Locations = "Putrefactory", + Occurrence = 0, + Locations = "Putrefactory.", } monster.health = 32700 monster.maxHealth = 32700 -monster.race = "venom" +monster.race = "undead" monster.corpse = 43832 monster.speed = 210 monster.manaCost = 0 monster.changeTarget = { interval = 4000, - chance = 10, + chance = 0, } monster.strategiesTarget = { nearest = 70, health = 10, - damage = 60, + damage = 10, random = 10, } @@ -54,9 +54,9 @@ monster.flags = { rewardBoss = false, illusionable = false, canPushItems = true, - canPushCreatures = true, - staticAttackChance = 80, - targetDistance = 4, + canPushCreatures = false, + staticAttackChance = 90, + targetDistance = 0, runHealth = 0, healthHidden = false, isBlockable = false, @@ -70,22 +70,7 @@ monster.light = { color = 0, } -monster.voices = { - interval = 5000, - chance = 30, -} - -monster.loot = { - { name = "crystal coin", chance = 90305 }, - { name = "soul orb", chance = 27927, minCount = 1, maxCount = 3 }, - { name = "lichen gobbler", chance = 15243 }, - { name = "decayed finger bone", chance = 25798 }, - { name = "rotten roots", chance = 9031 }, - { name = "yellow gem", chance = 3836 }, - { name = "underworld rod", chance = 1525 }, - { id = 3039, chance = 3537 }, -- red gem, - { name = "ripper lance", chance = 4752 }, -} +monster.loot = {} monster.attacks = { { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -1100 }, @@ -97,9 +82,9 @@ monster.attacks = { } monster.defenses = { - defense = 60, - armor = 112, - mitigation = 3.25, + defense = 109, + armor = 109, + mitigation = 3.28, } monster.elements = { @@ -117,7 +102,7 @@ monster.elements = { monster.immunities = { { type = "paralyze", condition = true }, - { type = "outfit", condition = false }, + { type = "outfit", condition = true }, { type = "invisible", condition = true }, { type = "bleed", condition = false }, } diff --git a/data-global/monster/quests/rotten_bood/sopping_corpus.lua b/data-global/monster/quests/rotten_bood/sopping_corpus.lua index 5b58663a..16cc74d3 100644 --- a/data-global/monster/quests/rotten_bood/sopping_corpus.lua +++ b/data-global/monster/quests/rotten_bood/sopping_corpus.lua @@ -16,32 +16,32 @@ monster.outfit = { monster.raceId = 2397 monster.Bestiary = { class = "Undead", - race = BESTY_RACE_HUMANOID, + race = BESTY_RACE_UNDEAD, toKill = 5000, FirstUnlock = 200, SecondUnlock = 2000, CharmsPoints = 100, Stars = 5, - Occurrence = 2, - Locations = "Jaded Roots", + Occurrence = 0, + Locations = "Jaded Roots.", } monster.health = 33400 monster.maxHealth = 33400 -monster.race = "venom" +monster.race = "undead" monster.corpse = 43836 monster.speed = 210 monster.manaCost = 0 monster.changeTarget = { interval = 4000, - chance = 10, + chance = 0, } monster.strategiesTarget = { nearest = 70, health = 10, - damage = 60, + damage = 10, random = 10, } @@ -54,9 +54,9 @@ monster.flags = { rewardBoss = false, illusionable = false, canPushItems = true, - canPushCreatures = true, - staticAttackChance = 80, - targetDistance = 4, + canPushCreatures = false, + staticAttackChance = 90, + targetDistance = 0, runHealth = 0, healthHidden = false, isBlockable = false, @@ -72,13 +72,15 @@ monster.light = { monster.voices = { interval = 5000, - chance = 30, + chance = 10, + { text = "*Lessshhh!*", yell = false }, } monster.loot = { - { name = "crystal coin", chance = 6961, maxCount = 1 }, - { name = "ultimate mana potion", chance = 10285, maxCount = 2 }, - { name = "ultimate health potion", chance = 10285, maxCount = 2 }, + { name = "crystal coin", chance = 42860 }, + { name = "ultimate mana potion", chance = 42860, minCount = 2, maxCount = 3 }, + { id = 7385, chance = 14290 }, -- crimson sword + { name = "ultimate health potion", chance = 14290, maxCount = 2 }, { name = "organic acid", chance = 7678, maxCount = 1 }, { name = "rotten roots", chance = 13133, maxCount = 1 }, { name = "emerald bangle", chance = 8558, maxCount = 1 }, @@ -87,6 +89,7 @@ monster.loot = { { name = "blue gem", chance = 9808, maxCount = 1 }, { name = "relic sword", chance = 6964, maxCount = 1 }, { name = "skullcracker armor", chance = 7270, maxCount = 1 }, + { id = 23531, chance = 3073, maxCount = 1 }, -- ring of green plasma } monster.attacks = { @@ -99,7 +102,7 @@ monster.attacks = { } monster.defenses = { - defense = 60, + defense = 112, armor = 112, mitigation = 3.25, } @@ -119,7 +122,7 @@ monster.elements = { monster.immunities = { { type = "paralyze", condition = true }, - { type = "outfit", condition = false }, + { type = "outfit", condition = true }, { type = "invisible", condition = true }, { type = "bleed", condition = false }, } diff --git a/data-global/monster/quests/rotten_bood/walking_pillar.lua b/data-global/monster/quests/rotten_bood/walking_pillar.lua index af425033..89e1e62a 100644 --- a/data-global/monster/quests/rotten_bood/walking_pillar.lua +++ b/data-global/monster/quests/rotten_bood/walking_pillar.lua @@ -15,22 +15,22 @@ monster.outfit = { monster.raceId = 2394 monster.Bestiary = { - class = "Undead", - race = BESTY_RACE_HUMANOID, + class = "Construct", + race = BESTY_RACE_CONSTRUCT, toKill = 5000, FirstUnlock = 200, SecondUnlock = 2000, CharmsPoints = 100, Stars = 5, - Occurrence = 2, - Locations = "Jaded Roots", + Occurrence = 0, + Locations = "Darklight Core", } monster.health = 38000 monster.maxHealth = 38000 -monster.race = "venom" +monster.race = "undead" monster.corpse = 43824 -monster.speed = 210 +monster.speed = 190 monster.manaCost = 0 monster.changeTarget = { @@ -41,7 +41,7 @@ monster.changeTarget = { monster.strategiesTarget = { nearest = 70, health = 10, - damage = 60, + damage = 10, random = 10, } @@ -52,16 +52,16 @@ monster.flags = { convinceable = false, pushable = false, rewardBoss = false, - illusionable = false, + illusionable = true, canPushItems = true, canPushCreatures = true, - staticAttackChance = 80, - targetDistance = 4, - runHealth = 0, + staticAttackChance = 90, + targetDistance = 1, + runHealth = 50, healthHidden = false, isBlockable = false, canWalkOnEnergy = true, - canWalkOnFire = true, + canWalkOnFire = false, canWalkOnPoison = true, } @@ -72,7 +72,8 @@ monster.light = { monster.voices = { interval = 5000, - chance = 30, + chance = 10, + { text = "TREEMBLE", yell = false }, } monster.loot = { @@ -101,9 +102,9 @@ monster.attacks = { } monster.defenses = { - defense = 60, - armor = 112, - mitigation = 3.25, + defense = 120, + armor = 120, + mitigation = 2.75, } monster.elements = { diff --git a/data-global/monster/quests/rotten_bood/wandering_pillar.lua b/data-global/monster/quests/rotten_bood/wandering_pillar.lua index 9cb3795a..e6cfb42a 100644 --- a/data-global/monster/quests/rotten_bood/wandering_pillar.lua +++ b/data-global/monster/quests/rotten_bood/wandering_pillar.lua @@ -15,22 +15,22 @@ monster.outfit = { monster.raceId = 2395 monster.Bestiary = { - class = "Undead", - race = BESTY_RACE_HUMANOID, + class = "Construct", + race = BESTY_RACE_CONSTRUCT, toKill = 5000, - FirstUnlock = 50, - SecondUnlock = 5000, + FirstUnlock = 200, + SecondUnlock = 2000, CharmsPoints = 100, - Stars = 3, - Occurrence = 2, - Locations = "Gloom Pillars", + Stars = 5, + Occurrence = 0, + Locations = "Darklight Core", } monster.health = 37000 monster.maxHealth = 37000 -monster.race = "venom" +monster.race = "undead" monster.corpse = 43828 -monster.speed = 220 +monster.speed = 190 monster.manaCost = 0 monster.changeTarget = { @@ -41,7 +41,7 @@ monster.changeTarget = { monster.strategiesTarget = { nearest = 70, health = 10, - damage = 60, + damage = 10, random = 10, } @@ -52,16 +52,16 @@ monster.flags = { convinceable = false, pushable = false, rewardBoss = false, - illusionable = false, + illusionable = true, canPushItems = true, canPushCreatures = true, - staticAttackChance = 80, + staticAttackChance = 90, targetDistance = 1, - runHealth = 0, + runHealth = 50, healthHidden = false, isBlockable = false, canWalkOnEnergy = true, - canWalkOnFire = true, + canWalkOnFire = false, canWalkOnPoison = true, } @@ -72,7 +72,10 @@ monster.light = { monster.voices = { interval = 5000, - chance = 30, + chance = 10, + { text = "POWERRR!!", yell = false }, + { text = "DARKNESS. DEATH. ENERGIES.", yell = false }, + { text = "TREMMMBLE!", yell = false }, } monster.loot = { @@ -102,22 +105,22 @@ monster.attacks = { } monster.defenses = { - defense = 60, - armor = 104, - mitigation = 3.16, + defense = 120, + armor = 120, + mitigation = 2.75, } monster.elements = { - { type = COMBAT_PHYSICALDAMAGE, percent = -30 }, - { type = COMBAT_ENERGYDAMAGE, percent = 25 }, - { type = COMBAT_EARTHDAMAGE, percent = -40 }, - { type = COMBAT_FIREDAMAGE, percent = -25 }, + { type = COMBAT_PHYSICALDAMAGE, percent = -10 }, + { type = COMBAT_ENERGYDAMAGE, percent = 60 }, + { type = COMBAT_EARTHDAMAGE, percent = -15 }, + { type = COMBAT_FIREDAMAGE, percent = -15 }, { type = COMBAT_LIFEDRAIN, percent = 0 }, { type = COMBAT_MANADRAIN, percent = 0 }, { type = COMBAT_DROWNDAMAGE, percent = 0 }, - { type = COMBAT_ICEDAMAGE, percent = 10 }, - { type = COMBAT_HOLYDAMAGE, percent = 10 }, - { type = COMBAT_DEATHDAMAGE, percent = 0 }, + { type = COMBAT_ICEDAMAGE, percent = 45 }, + { type = COMBAT_HOLYDAMAGE, percent = 0 }, + { type = COMBAT_DEATHDAMAGE, percent = 10 }, } monster.immunities = { diff --git a/data-global/npc/bloodshade_rotten.lua b/data-global/npc/bloodshade_rotten.lua new file mode 100644 index 00000000..5d46776a --- /dev/null +++ b/data-global/npc/bloodshade_rotten.lua @@ -0,0 +1,79 @@ +local npcType = Game.createNpcType("Bloodshade Rotten") +local npcConfig = {} + +local npcName = "A Bloodshade" +npcConfig.name = npcName +npcConfig.description = npcName + +npcConfig.health = 100 +npcConfig.maxHealth = npcConfig.health +npcConfig.walkInterval = 0 +npcConfig.walkRadius = 0 + +npcConfig.outfit = { + lookType = 1414, +} + +npcConfig.flags = { + floorchange = false, +} + +local keywordHandler = KeywordHandler:new() +local npcHandler = NpcHandler:new(keywordHandler) + +npcType.onThink = function(npc, interval) + npcHandler:onThink(npc, interval) +end + +npcType.onAppear = function(npc, creature) + npcHandler:onAppear(npc, creature) +end + +npcType.onDisappear = function(npc, creature) + npcHandler:onDisappear(npc, creature) +end + +npcType.onMove = function(npc, creature, fromPosition, toPosition) + npcHandler:onMove(npc, creature, fromPosition, toPosition) +end + +npcType.onSay = function(npc, creature, type, message) + npcHandler:onSay(npc, creature, type, message) +end + +local function creatureSayCallback(npc, creature, type, message) + local player = Player(creature) + local playerId = player:getId() + + if not npcHandler:checkInteraction(npc, creature) then + return false + end + + local access = player:kv():scoped("rotten-blood-quest"):get("access") or 0 + if access == 5 then + npcHandler:say("You already have started this quest.", npc, creature) + npcHandler:setTopic(playerId, 0) + return true + end + + message = message:lower() + if MsgContains(message, "quest") then + npcHandler:say({ + "First you must fight the two pairs of evil twins that lurk in the realm beyond here. ...", + "Only when you are victorious over all four of them, your path to the source of vileness, the path to Bakragore will be opened. ...", + "And even this victory will only be the beginning.", + }, npc, creature) + player:kv():scoped("rotten-blood-quest"):set("access", 5) + end + + return true +end + +npcHandler:setMessage(MESSAGE_GREET, "Mortal! If you are on a {quest} to serve the blood god, my master - be greeted!") +npcHandler:setMessage(MESSAGE_WALKAWAY, "Bye.") +npcHandler:setMessage(MESSAGE_FAREWELL, "Bye, |PLAYERNAME|.") + +npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) +npcHandler:addModule(FocusModule:new(), npcConfig.name, true, true, true) + +npcType:register(npcConfig) diff --git a/data-global/npc/bloodshade_sacrifice.lua b/data-global/npc/bloodshade_sacrifice.lua new file mode 100644 index 00000000..37e1cf0f --- /dev/null +++ b/data-global/npc/bloodshade_sacrifice.lua @@ -0,0 +1,100 @@ +local npcType = Game.createNpcType("Bloodshade Sacrifice") +local npcConfig = {} + +local npcName = "A Bloodshade" +npcConfig.name = npcName +npcConfig.description = npcName + +npcConfig.health = 100 +npcConfig.maxHealth = npcConfig.health +npcConfig.walkInterval = 0 +npcConfig.walkRadius = 0 + +npcConfig.outfit = { + lookType = 1414, +} + +npcConfig.flags = { + floorchange = false, +} + +local keywordHandler = KeywordHandler:new() +local npcHandler = NpcHandler:new(keywordHandler) + +npcType.onThink = function(npc, interval) + npcHandler:onThink(npc, interval) +end + +npcType.onAppear = function(npc, creature) + npcHandler:onAppear(npc, creature) +end + +npcType.onDisappear = function(npc, creature) + npcHandler:onDisappear(npc, creature) +end + +npcType.onMove = function(npc, creature, fromPosition, toPosition) + npcHandler:onMove(npc, creature, fromPosition, toPosition) +end + +npcType.onSay = function(npc, creature, type, message) + npcHandler:onSay(npc, creature, type, message) +end + +local function creatureSayCallback(npc, creature, type, message) + local player = Player(creature) + local playerId = player:getId() + + if not npcHandler:checkInteraction(npc, creature) then + return false + end + + local access = player:kv():scoped("rotten-blood-quest"):get("access") or 0 + if access > 2 then + npcHandler:say("You already have access.", npc, creature) + npcHandler:setTopic(playerId, 0) + return true + end + + message = message:lower() + if MsgContains(message, "quest") then + npcHandler:say({ + "To enter the realm of the sanguine master and destroy its spawn, a sufficient sacrifice is imperative. ...", + "Find and slay the keeper of blooded tears and bring the nectar of his eyes before the blood god. Present your gift on the sacrificial altar. ...", + "After - and under no circumstances before - you have completed this procedure, you can enter the sacred fluid. You can, of course also take a slightly faster... {detour}.", + }, npc, creature) + npcHandler:setTopic(playerId, 1) + elseif MsgContains(message, "detour") and npcHandler:getTopic(playerId) == 1 then + npcHandler:say({ + "Hm. I see. Well, I will be frank. Every blood sacrifice has its price. Blood money will please the blood god... just as well. ...", + "The sum would be five million gold pieces and I... my master will be pleased. Are you prepared for a sacrifice such as this?", + }, npc, creature) + npcHandler:setTopic(playerId, 2) + elseif MsgContains(message, "yes") and npcHandler:getTopic(playerId) == 2 then + npcHandler:say("You are willing to pay 5000000 gold pieces, then? There is no turning back after our... transaction is complete. Are you sure?", npc, creature) + npcHandler:setTopic(playerId, 3) + elseif MsgContains(message, "yes") and npcHandler:getTopic(playerId) == 3 then + if not player:removeMoneyBank(5000000) then + npcHandler:say("Sorry, you don't have enough gold.", npc, creature) + npcHandler:setTopic(playerId, 0) + return true + end + npcHandler:say("The bargain has been made, the business is done.", npc, creature) + npcHandler:setTopic(playerId, 0) + player:kv():scoped("rotten-blood-quest"):set("access", 4) + elseif MsgContains(message, "no") and npcHandler:getTopic(playerId) == 1 then + npcHandler:setTopic(playerId, 0) + npcHandler:say("Ok then not.", npc, creature) + end + + return true +end + +npcHandler:setMessage(MESSAGE_GREET, "Mortal! If you are on a {quest} to serve the blood god, my master - be greeted!") +npcHandler:setMessage(MESSAGE_WALKAWAY, "Bye.") +npcHandler:setMessage(MESSAGE_FAREWELL, "Bye, |PLAYERNAME|.") + +npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) +npcHandler:addModule(FocusModule:new(), npcConfig.name, true, true, true) + +npcType:register(npcConfig) diff --git a/data-global/npc/torkada.lua b/data-global/npc/torkada.lua new file mode 100644 index 00000000..ddbe4d03 --- /dev/null +++ b/data-global/npc/torkada.lua @@ -0,0 +1,103 @@ +local internalNpcName = "Torkada" +local npcType = Game.createNpcType(internalNpcName) +local npcConfig = {} + +npcConfig.name = internalNpcName +npcConfig.description = internalNpcName + +npcConfig.health = 100 +npcConfig.maxHealth = npcConfig.health +npcConfig.walkInterval = 0 +npcConfig.walkRadius = 0 + +npcConfig.outfit = { + lookType = 1243, + lookHead = 59, + lookBody = 78, + lookLegs = 78, + lookFeet = 57, + lookAddons = 0, +} + +npcConfig.flags = { + floorchange = false, +} + +local keywordHandler = KeywordHandler:new() +local npcHandler = NpcHandler:new(keywordHandler) + +npcType.onThink = function(npc, interval) + npcHandler:onThink(npc, interval) +end + +npcType.onAppear = function(npc, creature) + npcHandler:onAppear(npc, creature) +end + +npcType.onDisappear = function(npc, creature) + npcHandler:onDisappear(npc, creature) +end + +npcType.onMove = function(npc, creature, fromPosition, toPosition) + npcHandler:onMove(npc, creature, fromPosition, toPosition) +end + +npcType.onSay = function(npc, creature, type, message) + npcHandler:onSay(npc, creature, type, message) +end + +local function creatureSayCallback(npc, creature, type, message) + local player = Player(creature) + local playerId = player:getId() + + if not npcHandler:checkInteraction(npc, creature) then + return false + end + + if player:getLevel() < 250 then + npcHandler:say("You need at least level 250 to start our mission.", npc, creature) + return false + end + + local access = player:kv():scoped("rotten-blood-quest"):get("access") or 0 + if access > 0 then + if player:getStorageValue(Storage.Quest.U13_20.RottenBlood.AccessDoor) ~= 1 then + player:setStorageValue(Storage.Quest.U13_20.RottenBlood.AccessDoor, 1) + end + npcHandler:say("You already have accepted this mission.", npc, creature) + npcHandler:setTopic(playerId, 0) + return true + end + + message = message:lower() + if MsgContains(message, "time") then + npcHandler:say("This expedition is here on an important {mission} for the inquisition", npc, creature) + npcHandler:setTopic(playerId, 1) + elseif MsgContains(message, "mission") and npcHandler:getTopic(playerId) == 1 then + npcHandler:say("Are you willing, to bring the fury of the inquisition to that foul place and eradicate all evil you find? Speak, {yes} or {no}?", npc, creature) + npcHandler:setTopic(playerId, 2) + elseif MsgContains(message, "yes") and npcHandler:getTopic(playerId) == 2 then + npcHandler:setTopic(playerId, 0) + npcHandler:say({ + "So hereby receive the blessings of the gods, provided by me as the voice of the inquisition! ...", + "Go now and search the ancient temple in the north-west part of the drefian ruins. Slay the evil that lurks there and cleanse the foul place from its taint!", + }, npc, creature) + player:kv():scoped("rotten-blood-quest"):set("access", 1) + player:setStorageValue(Storage.Quest.U13_20.RottenBlood.AccessDoor, 1) + player:getPosition():sendMagicEffect(CONST_ME_HOLYAREA) + elseif MsgContains(message, "no") and npcHandler:getTopic(playerId) == 1 then + npcHandler:setTopic(playerId, 0) + npcHandler:say("Ok then not.", npc, creature) + end + + return true +end + +npcHandler:setMessage(MESSAGE_GREET, "Greetings! This isn't the {time} to chitchat though.") +npcHandler:setMessage(MESSAGE_WALKAWAY, "Bye.") +npcHandler:setMessage(MESSAGE_FAREWELL, "Bye, |PLAYERNAME|.") + +npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) +npcHandler:addModule(FocusModule:new(), npcConfig.name, true, true, true) + +npcType:register(npcConfig) diff --git a/data-global/scripts/actions/bosses_levers/rotten_bakragore.lua b/data-global/scripts/actions/bosses_levers/rotten_bakragore.lua new file mode 100644 index 00000000..09cf6f78 --- /dev/null +++ b/data-global/scripts/actions/bosses_levers/rotten_bakragore.lua @@ -0,0 +1,24 @@ +local config = { + boss = { + name = "Bakragore", + position = Position(33044, 32394, 15), + }, + requiredLevel = 250, + timeToFightAgain = ParseDuration("68h") / ParseDuration("1s"), + playerPositions = { + { pos = Position(33078, 32398, 15), teleport = Position(33044, 32407, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(33077, 32398, 15), teleport = Position(33044, 32407, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(33076, 32398, 15), teleport = Position(33044, 32407, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(33075, 32398, 15), teleport = Position(33044, 32407, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(33074, 32398, 15), teleport = Position(33044, 32407, 15), effect = CONST_ME_TELEPORT }, + }, + specPos = { + from = Position(33034, 32389, 15), + to = Position(33053, 32410, 15), + }, + exit = Position(33044, 32409, 15), +} + +local lever = BossLever(config) +lever:position(Position(33079, 32398, 15)) +lever:register() diff --git a/data-global/scripts/actions/bosses_levers/rotten_chagorz.lua b/data-global/scripts/actions/bosses_levers/rotten_chagorz.lua new file mode 100644 index 00000000..2e21f18f --- /dev/null +++ b/data-global/scripts/actions/bosses_levers/rotten_chagorz.lua @@ -0,0 +1,23 @@ +local config = { + boss = { + name = "Chagorz", + position = Position(33044, 32361, 15), + }, + requiredLevel = 250, + playerPositions = { + { pos = Position(33078, 32367, 15), teleport = Position(33044, 32373, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(33077, 32367, 15), teleport = Position(33044, 32373, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(33076, 32367, 15), teleport = Position(33044, 32373, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(33075, 32367, 15), teleport = Position(33044, 32373, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(33074, 32367, 15), teleport = Position(33044, 32373, 15), effect = CONST_ME_TELEPORT }, + }, + specPos = { + from = Position(33035, 32327, 15), + to = Position(33053, 32345, 15), + }, + exit = Position(33043, 32344, 15), +} + +local lever = BossLever(config) +lever:position(Position(33079, 32367, 15)) +lever:register() diff --git a/data-global/scripts/actions/bosses_levers/rotten_ichgahal.lua b/data-global/scripts/actions/bosses_levers/rotten_ichgahal.lua new file mode 100644 index 00000000..32f44d9a --- /dev/null +++ b/data-global/scripts/actions/bosses_levers/rotten_ichgahal.lua @@ -0,0 +1,23 @@ +local config = { + boss = { + name = "Ichgahal", + position = Position(33008, 32333, 15), + }, + requiredLevel = 250, + playerPositions = { + { pos = Position(32978, 32333, 15), teleport = Position(33004, 32341, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(32977, 32333, 15), teleport = Position(33004, 32341, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(32976, 32333, 15), teleport = Position(33004, 32341, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(32975, 32333, 15), teleport = Position(33004, 32341, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(32974, 32333, 15), teleport = Position(33004, 32341, 15), effect = CONST_ME_TELEPORT }, + }, + specPos = { + from = Position(32998, 32326, 15), + to = Position(33018, 32343, 15), + }, + exit = Position(33004, 32343, 15), +} + +local lever = BossLever(config) +lever:position(Position(32979, 32333, 15)) +lever:register() diff --git a/data-global/scripts/actions/bosses_levers/rotten_murcion.lua b/data-global/scripts/actions/bosses_levers/rotten_murcion.lua new file mode 100644 index 00000000..0c163f8d --- /dev/null +++ b/data-global/scripts/actions/bosses_levers/rotten_murcion.lua @@ -0,0 +1,23 @@ +local config = { + boss = { + name = "Murcion", + position = Position(33009, 32362, 15), + }, + requiredLevel = 250, + playerPositions = { + { pos = Position(32978, 32365, 15), teleport = Position(33009, 32371, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(32977, 32365, 15), teleport = Position(33009, 32371, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(32976, 32365, 15), teleport = Position(33009, 32371, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(32975, 32365, 15), teleport = Position(33009, 32371, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(32974, 32365, 15), teleport = Position(33009, 32371, 15), effect = CONST_ME_TELEPORT }, + }, + specPos = { + from = Position(32999, 32359, 15), + to = Position(33019, 32376, 15), + }, + exit = Position(33009, 32374, 15), +} + +local lever = BossLever(config) +lever:position(Position(32979, 32365, 15)) +lever:register() diff --git a/data-global/scripts/actions/bosses_levers/rotten_vemiath.lua b/data-global/scripts/actions/bosses_levers/rotten_vemiath.lua new file mode 100644 index 00000000..a018c622 --- /dev/null +++ b/data-global/scripts/actions/bosses_levers/rotten_vemiath.lua @@ -0,0 +1,23 @@ +local config = { + boss = { + name = "Vemiath", + position = Position(33044, 32332, 15), + }, + requiredLevel = 250, + playerPositions = { + { pos = Position(33078, 32333, 15), teleport = Position(33043, 32341, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(33077, 32333, 15), teleport = Position(33043, 32341, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(33076, 32333, 15), teleport = Position(33043, 32341, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(33075, 32333, 15), teleport = Position(33043, 32341, 15), effect = CONST_ME_TELEPORT }, + { pos = Position(33074, 32333, 15), teleport = Position(33043, 32341, 15), effect = CONST_ME_TELEPORT }, + }, + specPos = { + from = Position(33034, 32357, 15), + to = Position(33052, 32376, 15), + }, + exit = Position(33043, 32344, 15), +} + +local lever = BossLever(config) +lever:position(Position(33079, 32333, 15)) +lever:register() diff --git a/data-global/scripts/actions/quests/rotten_blood/blood_entrance.lua b/data-global/scripts/actions/quests/rotten_blood/blood_entrance.lua new file mode 100644 index 00000000..4830adfa --- /dev/null +++ b/data-global/scripts/actions/quests/rotten_blood/blood_entrance.lua @@ -0,0 +1,61 @@ +local config = { + entrance = Position(32953, 32398, 9), + noAccess = Position(32955, 32398, 9), + destination = Position(34070, 31975, 14), +} + +local function getDamage(currentHealth) + local damage = math.max(math.floor(currentHealth * 0.20), 1) + local newHealth = currentHealth - damage + return newHealth > 10 and damage or 0 +end + +local accessBlood = MoveEvent() +function accessBlood.onStepIn(creature, item, position, fromPosition) + local player = creature:getPlayer() + if not player then + return false + end + + if player:getLevel() < 250 then + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You need at least level 250 to enter.") + player:teleportTo(fromPosition, true) + return false + end + + local access = player:kv():scoped("rotten-blood-quest"):get("access") or 0 + if access < 4 then + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You offerings to this sanguine master of this realm have been insufficient. You can not pass.") + player:teleportTo(config.noAccess, true) + player:addHealth(-getDamage(player:getHealth()), COMBAT_PHYSICALDAMAGE) + return false + end + + if config.entrance == position then + player:teleportTo(config.destination) + player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) + end + + return true +end + +accessBlood:type("stepin") +accessBlood:position(config.entrance) +accessBlood:register() + +----------- Leave from Rotten ----------- +local leaveBlood = MoveEvent() +function leaveBlood.onStepIn(creature, item, position, fromPosition) + local player = creature:getPlayer() + if not player then + return false + end + + player:teleportTo(Position(32955, 32398, 9)) + player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) + return true +end + +leaveBlood:type("stepin") +leaveBlood:position(Position(34070, 31974, 14)) +leaveBlood:register() diff --git a/data-global/scripts/actions/quests/rotten_blood/bosses_killed.lua b/data-global/scripts/actions/quests/rotten_blood/bosses_killed.lua new file mode 100644 index 00000000..2bb1fa3d --- /dev/null +++ b/data-global/scripts/actions/quests/rotten_blood/bosses_killed.lua @@ -0,0 +1,50 @@ +local bossesRottenBlood = CreatureEvent("RottenBloodBossDeath") +function bossesRottenBlood.onDeath(creature) + local bossName = creature:getName():lower() + if not table.contains({ "murcion", "chagorz", "ichgahal", "vemiath" }, bossName) then + return false + end + + onDeathForDamagingPlayers(creature, function(creature, player) + local now = os.time() + local kv = player:kv():scoped("rotten-blood-quest") + local cooldown = kv:scoped(bossName):get("cooldown") or 0 + if cooldown <= now then + kv:scoped(bossName):set("cooldown", now + 20 * 60 * 60) + kv:set("taints", math.min(((kv:get("taints") or 0) + 1), 4)) + logger.info("taints: {}", kv:get("taints")) + end + end) + + return true +end + +bossesRottenBlood:register() + +-------------- Bakragore OnDeath -------------- +local bakragoreOnDeath = CreatureEvent("RottenBloodBakragoreDeath") +function bakragoreOnDeath.onDeath(creature) + local bossName = creature:getName():lower() + if bossName ~= "bakragore" then + return false + end + + onDeathForDamagingPlayers(creature, function(creature, player) + local kv = player:kv():scoped("rotten-blood-quest") + local checkBoss = kv:get(bossName) or false + if not checkBoss then + kv:set(bossName, true) + if not player:hasOutfit("1663") or not player:hasOutfit("1662") then + player:addOutfitAddon("1663", 1) + player:addOutfitAddon("1662", 1) + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Congratulations! You have won a Decaying Defender Outfit.") + end + end + kv:set("taints", 0) + logger.info("taints after: {}", kv:get("taints")) + end) + + return true +end + +bakragoreOnDeath:register() diff --git a/data-global/scripts/actions/quests/rotten_blood/entrances.lua b/data-global/scripts/actions/quests/rotten_blood/entrances.lua new file mode 100644 index 00000000..8434c3fd --- /dev/null +++ b/data-global/scripts/actions/quests/rotten_blood/entrances.lua @@ -0,0 +1,104 @@ +local entrances = { + { position = Position(34092, 31978, 14), destination = Position(33842, 31651, 13) }, -- Murcion hunt area + { position = Position(33842, 31650, 13), destination = Position(34092, 31979, 14) }, -- leave Murcion hunt area + { position = Position(33905, 31693, 15), destination = Position(32971, 32368, 15) }, -- Murcion lever room + + { position = Position(34093, 32009, 14), destination = Position(33809, 31815, 13) }, -- Chagorz hunt area + { position = Position(33809, 31814, 13), destination = Position(34092, 32009, 14) }, -- leave Chagorz hunt area + { position = Position(33902, 31881, 15), destination = Position(33071, 32370, 15) }, -- Chagorz lever room + + { position = Position(34120, 31978, 14), destination = Position(34101, 31678, 13) }, -- Ichgahal hunt area + { position = Position(34101, 31677, 13), destination = Position(34119, 31979, 14) }, -- leave Ichgahal hunt area + { position = Position(34065, 31716, 15), destination = Position(32971, 32336, 15) }, -- Ichgahal lever room + + { position = Position(34117, 32010, 15), destination = Position(34119, 31876, 14) }, -- Vemiath hunt area + { position = Position(34119, 31875, 14), destination = Position(34118, 32010, 15) }, -- leave Vemiath hunt area + { position = Position(34002, 31820, 15), destination = Position(33071, 32336, 15) }, -- Vemiath lever room + + { position = Position(33069, 32405, 15), destination = Position(34106, 32052, 13) }, -- Bakragore leave room +} + +local teleportEvent = MoveEvent() + +function teleportEvent.onStepIn(creature, item, position, fromPosition) + local player = creature:getPlayer() + if not player then + return false + end + + local access = player:kv():scoped("rotten-blood-quest"):get("access") or 0 + if access < 5 then + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You should pay respect to the Bloodshade guarding this realm before entering.") + player:teleportTo(fromPosition, true) + return false + end + + for _, entrance in pairs(entrances) do + if entrance.position == position then + player:teleportTo(entrance.destination) + player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) + break + end + end + + return true +end + +teleportEvent:type("stepin") +for _, entrance in pairs(entrances) do + teleportEvent:position(entrance.position) +end +teleportEvent:register() + +----------- Bakragore Entrance Check ----------- +local entrance = { + position = Position(34106, 32054, 13), + destination = Position(33071, 32403, 15), -- Bakragore lever room +} + +local bakragoreEntrance = MoveEvent() + +function bakragoreEntrance.onStepIn(creature, item, position, fromPosition) + local player = creature:getPlayer() + if not player then + return false + end + + if player:getLevel() < 250 then + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You need at least level 250 to enter.") + player:teleportTo(fromPosition, true) + return false + end + + local now, text = os.time(), "" + for _, bossName in pairs({ "murcion", "chagorz", "ichgahal", "vemiath" }) do + local cooldown = player:kv():scoped("rotten-blood-quest"):scoped(bossName):get("cooldown") or 0 + if cooldown <= now then + text = text .. "\n" .. bossName:titleCase() + end + end + + if text ~= "" then + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You still need to defeat: " .. text) + player:teleportTo(fromPosition, true) + return false + end + + local taints = player:kv():scoped("rotten-blood-quest"):get("taints") or 0 + if taints < 4 then + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, string.format("You have %i taints.", taints)) + player:teleportTo(fromPosition, true) + return false + end + + if entrance.position == position then + player:teleportTo(entrance.destination) + player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) + end + + return true +end + +bakragoreEntrance:type("stepin") +bakragoreEntrance:position(entrance.position) +bakragoreEntrance:register() diff --git a/data-global/scripts/actions/quests/rotten_blood/sacrifice.lua b/data-global/scripts/actions/quests/rotten_blood/sacrifice.lua new file mode 100644 index 00000000..dcb1cfef --- /dev/null +++ b/data-global/scripts/actions/quests/rotten_blood/sacrifice.lua @@ -0,0 +1,34 @@ +local sacrificialPlate = Action() + +function sacrificialPlate.onUse(player, item, fromPosition, target, toPosition, isHotkey) + local access = player:kv():scoped("rotten-blood-quest"):get("access") or 0 + if access > 3 then + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You already have access.") + return true + end + + if player:getItemCount(32594) < 1 then + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Find the keeper of the sanguine tears and offer his life fluids to the sanguine master of this realm.") + return false + end + + if access == 1 then + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Reinforce your sacrifice for a blooded tear to the sanguine master of this realm to seal this trade.") + player:kv():scoped("rotten-blood-quest"):set("access", 2) + return true + end + + if player:removeItem(32594, 1) then + if access == 2 then + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Your sacrifice has been accepted by the sanguine master of this realm.") + elseif access == 3 then + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Your sacrifices have been accepted by the sanguine master of this realm. Go forth and bedew your root with the waters of life.") + end + player:kv():scoped("rotten-blood-quest"):set("access", access + 1) + end + + return true +end + +sacrificialPlate:id(43891) +sacrificialPlate:register() diff --git a/data-global/scripts/creaturescripts/customs/freequests.lua b/data-global/scripts/creaturescripts/customs/freequests.lua index bfeac7ac..9c318264 100644 --- a/data-global/scripts/creaturescripts/customs/freequests.lua +++ b/data-global/scripts/creaturescripts/customs/freequests.lua @@ -173,6 +173,7 @@ local questTable = { { storageName = "TheIceIslands.Mission10", storage = Storage.Quest.U8_0.TheIceIslands.Mission10, storageValue = 2 }, { storageName = "TheIceIslands.Mission11", storage = Storage.Quest.U8_0.TheIceIslands.Mission11, storageValue = 2 }, { storageName = "TheIceIslands.Mission12", storage = Storage.Quest.U8_0.TheIceIslands.Mission12, storageValue = 6 }, + { storageName = "TheIceIslands.PickAmount", storage = Storage.Quest.U8_0.TheIceIslands.PickAmount, storageValue = 3 }, { storageName = "TheIceIslands.yakchalDoor", storage = Storage.Quest.U8_0.TheIceIslands.yakchalDoor, storageValue = 1 }, { storageName = "TheInquisitionQuest.Questline", storage = Storage.Quest.U8_2.TheInquisitionQuest.Questline, storageValue = 25 }, { storageName = "TheInquisitionQuest.Mission01", storage = Storage.Quest.U8_2.TheInquisitionQuest.Mission01, storageValue = 7 }, diff --git a/data-global/scripts/spells/monster/time_guardiann.lua b/data-global/scripts/spells/monster/time_guardiann.lua index 26e90ad7..9e4ffe6a 100644 --- a/data-global/scripts/spells/monster/time_guardiann.lua +++ b/data-global/scripts/spells/monster/time_guardiann.lua @@ -9,7 +9,7 @@ local function functionBack(pos, oldPos) return end - local tile = TIle(position) + local tile = Tile(position) if not tile then return end @@ -70,7 +70,7 @@ function spell.onCastSpell(creature, var) local index = math.random(1, 2) local position = monsters[index].pos if position then - local tile = TIle(position) + local tile = Tile(position) if not tile then return true end diff --git a/data-global/world/world-monster.xml b/data-global/world/world-monster.xml index de518270..2eb0dcff 100644 --- a/data-global/world/world-monster.xml +++ b/data-global/world/world-monster.xml @@ -153000,6 +153000,12 @@ + + + + + + @@ -153008,12 +153014,27 @@ + + + + + + + + + + + + + + + @@ -153031,6 +153052,18 @@ + + + + + + + + + + + + @@ -153041,13 +153074,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -153055,12 +153127,30 @@ + + + + + + + + + + + + + + + + + + @@ -153068,6 +153158,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -153078,13 +153198,34 @@ + + + + + + + + + + + + + + + + + + + + + @@ -153094,6 +153235,18 @@ + + + + + + + + + + + + @@ -153102,12 +153255,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -153121,9 +153316,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -153162,12 +153390,30 @@ + + + + + + + + + + + + + + + + + + @@ -153180,9 +153426,15 @@ + + + + + + @@ -153206,16 +153458,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -153241,9 +153526,27 @@ + + + + + + + + + + + + + + + + + + @@ -153255,6 +153558,9 @@ + + + @@ -153275,9 +153581,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -153288,9 +153645,21 @@ + + + + + + + + + + + + @@ -153303,6 +153672,18 @@ + + + + + + + + + + + + @@ -153315,12 +153696,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -153337,12 +153751,18 @@ + + + + + + @@ -153351,6 +153771,12 @@ + + + + + + @@ -153361,6 +153787,12 @@ + + + + + + @@ -153368,9 +153800,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -153429,9 +153888,24 @@ + + + + + + + + + + + + + + + @@ -163501,6 +163975,9 @@ + + + @@ -163526,6 +164003,15 @@ + + + + + + + + + @@ -163541,6 +164027,18 @@ + + + + + + + + + + + + @@ -163557,6 +164055,21 @@ + + + + + + + + + + + + + + + @@ -163573,6 +164086,15 @@ + + + + + + + + + @@ -163592,12 +164114,27 @@ + + + + + + + + + + + + + + + @@ -163613,9 +164150,30 @@ + + + + + + + + + + + + + + + + + + + + + @@ -163629,6 +164187,18 @@ + + + + + + + + + + + + @@ -163642,6 +164212,24 @@ + + + + + + + + + + + + + + + + + + @@ -163667,11 +164255,26 @@ + + + + + + + + + + + + + + + @@ -163698,6 +164301,15 @@ + + + + + + + + + @@ -163723,6 +164335,21 @@ + + + + + + + + + + + + + + + @@ -163743,6 +164370,18 @@ + + + + + + + + + + + + @@ -163755,19 +164394,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -163786,15 +164464,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -163806,6 +164517,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -163815,40 +164553,202 @@ - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -163856,6 +164756,27 @@ + + + + + + + + + + + + + + + + + + + + + @@ -163870,6 +164791,15 @@ + + + + + + + + + @@ -163879,30 +164809,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -163915,6 +164971,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -163924,6 +165010,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -163936,10 +165046,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -163947,6 +165183,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -163956,15 +165216,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -163979,15 +165290,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -163999,6 +165379,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164009,6 +165458,21 @@ + + + + + + + + + + + + + + + @@ -164271,10 +165735,28 @@ + + + + + + + + + + + + + + + + + + @@ -164302,6 +165784,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -164309,12 +165815,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164341,6 +165877,27 @@ + + + + + + + + + + + + + + + + + + + + + @@ -164348,9 +165905,27 @@ + + + + + + + + + + + + + + + + + + @@ -164365,18 +165940,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164407,11 +166036,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164421,9 +166092,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164448,6 +166146,21 @@ + + + + + + + + + + + + + + + @@ -164457,14 +166170,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164503,15 +166246,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164536,12 +166309,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164551,15 +166354,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164569,6 +166405,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164580,12 +166464,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164600,12 +166613,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164621,12 +166670,24 @@ + + + + + + + + + + + + @@ -164636,18 +166697,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164655,6 +166761,12 @@ + + + + + + @@ -164666,6 +166778,18 @@ + + + + + + + + + + + + @@ -164678,24 +166802,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164705,6 +166874,24 @@ + + + + + + + + + + + + + + + + + + @@ -164719,6 +166906,15 @@ + + + + + + + + + @@ -164728,9 +166924,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164741,6 +166982,18 @@ + + + + + + + + + + + + @@ -164751,15 +167004,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164771,6 +167060,15 @@ + + + + + + + + + @@ -164780,12 +167078,30 @@ + + + + + + + + + + + + + + + + + + @@ -164827,6 +167143,12 @@ + + + + + + @@ -164843,6 +167165,9 @@ + + + @@ -164863,6 +167188,9 @@ + + + @@ -174632,6 +176960,9 @@ + + + @@ -174650,9 +176981,18 @@ + + + + + + + + + @@ -174679,18 +177019,33 @@ + + + + + + + + + + + + + + + @@ -174721,6 +177076,15 @@ + + + + + + + + + @@ -174737,6 +177101,12 @@ + + + + + + @@ -174768,10 +177138,16 @@ + + + + + + @@ -174794,10 +177170,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -174806,6 +177212,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -174822,6 +177261,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -174834,9 +177345,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -174860,14 +177398,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -174878,6 +177449,9 @@ + + + @@ -174890,15 +177464,33 @@ + + + + + + + + + + + + + + + + + + @@ -174914,6 +177506,9 @@ + + + @@ -174921,6 +177516,9 @@ + + + @@ -174938,6 +177536,12 @@ + + + + + + @@ -174963,6 +177567,12 @@ + + + + + + @@ -174981,12 +177591,21 @@ + + + + + + + + + @@ -175000,6 +177619,15 @@ + + + + + + + + + @@ -175490,6 +178118,9 @@ + + + @@ -175517,9 +178148,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -175555,9 +178210,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -175597,6 +178282,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -175641,9 +178350,15 @@ + + + + + + @@ -175653,6 +178368,12 @@ + + + + + + @@ -175717,9 +178438,15 @@ + + + + + + @@ -175770,6 +178497,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -175809,6 +178563,18 @@ + + + + + + + + + + + + @@ -175838,6 +178604,18 @@ + + + + + + + + + + + + @@ -175876,12 +178654,27 @@ + + + + + + + + + + + + + + + @@ -175898,6 +178691,9 @@ + + + @@ -175909,6 +178705,12 @@ + + + + + + @@ -175957,6 +178759,18 @@ + + + + + + + + + + + + @@ -175967,18 +178781,27 @@ + + + + + + + + + @@ -175991,13 +178814,28 @@ + + + + + + + + + + + + + + + @@ -176053,9 +178891,18 @@ + + + + + + + + + @@ -176091,9 +178938,18 @@ + + + + + + + + + @@ -176103,9 +178959,18 @@ + + + + + + + + + @@ -176130,18 +178995,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -176169,13 +179073,28 @@ + + + + + + + + + + + + + + + @@ -176195,12 +179114,18 @@ + + + + + + @@ -176208,6 +179133,9 @@ + + + @@ -176219,6 +179147,9 @@ + + + @@ -176232,6 +179163,9 @@ + + + diff --git a/data-global/world/world-npc.xml b/data-global/world/world-npc.xml index 5c53601a..e40ac40d 100644 --- a/data-global/world/world-npc.xml +++ b/data-global/world/world-npc.xml @@ -1893,6 +1893,9 @@ + + + @@ -2451,6 +2454,9 @@ + + + @@ -2863,6 +2869,9 @@ + + + diff --git a/data-global/world/world.7z b/data-global/world/world.7z index 52348628..ca992950 100644 Binary files a/data-global/world/world.7z and b/data-global/world/world.7z differ diff --git a/data/items/items.xml b/data/items/items.xml index 1b4ec721..dd615d64 100644 --- a/data/items/items.xml +++ b/data/items/items.xml @@ -74883,21 +74883,12 @@ Granted by TibiaGoals.com"/> - - - - - - - - - - - + + + - - - + + @@ -74917,6 +74908,22 @@ Granted by TibiaGoals.com"/> + + + + + + + + + + + + + + + + @@ -75468,6 +75475,11 @@ Granted by TibiaGoals.com"/> + + + + + @@ -76211,6 +76223,9 @@ Granted by TibiaGoals.com"/> + + + diff --git a/data/modules/scripts/gamestore/init.lua b/data/modules/scripts/gamestore/init.lua index 433abf34..1e593fde 100644 --- a/data/modules/scripts/gamestore/init.lua +++ b/data/modules/scripts/gamestore/init.lua @@ -1487,63 +1487,69 @@ GameStore.canChangeToName = function(name) local result = { ability = false, } - if name:len() < 3 or name:len() > 18 then - result.reason = "The length of your new name must be between 3 and 18 characters." + + if name:len() < 3 or name:len() > 29 then + result.reason = "The length of your new name must be between 3 and 29 characters." return result end local match = name:gmatch("%s+") local count = 0 - for v in match do + for _ in match do count = count + 1 end local matchtwo = name:match("^%s+") if matchtwo then - result.reason = "Your new name can't have whitespace at begin." + result.reason = "Your new name can't have whitespace at the beginning." return result end - if count > 1 then - result.reason = "Your new name have more than 1 whitespace." + if count > 2 then + result.reason = "Your new name can't have more than 2 spaces." + return result + end + + if name:match("%s%s") then + result.reason = "Your new name can't have consecutive spaces." return result end -- just copied from znote aac. local words = { "owner", "gamemaster", "hoster", "admin", "staff", "tibia", "account", "god", "anal", "ass", "fuck", "sex", "hitler", "pussy", "dick", "rape", "adm", "cm", "gm", "tutor", "counsellor" } local split = name:split(" ") - for k, word in ipairs(words) do - for k, nameWord in ipairs(split) do + for _, word in ipairs(words) do + for _, nameWord in ipairs(split) do if nameWord:lower() == word then - result.reason = "You can't use word \"" .. word .. '" in your new name.' + result.reason = "You can't use the word '" .. word .. "' in your new name." return result end end end local tmpName = name:gsub("%s+", "") - for i = 1, #words do - if tmpName:lower():find(words[i]) then - result.reason = "You can't use word \"" .. words[i] .. '" with whitespace in your new name.' + for _, word in ipairs(words) do + if tmpName:lower():find(word) then + result.reason = "You can't use the word '" .. word .. "' even with spaces in your new name." return result end end if MonsterType(name) then - result.reason = 'Your new name "' .. name .. "\" can't be a monster's name." + result.reason = "Your new name '" .. name .. "' can't be a monster's name." return result elseif Npc(name) then - result.reason = 'Your new name "' .. name .. "\" can't be a npc's name." + result.reason = "Your new name '" .. name .. "' can't be an NPC's name." return result end local letters = "{}|_*+-=<>0123456789@#%^&()/*'\\.,:;~!\"$" for i = 1, letters:len() do local c = letters:sub(i, i) - for i = 1, name:len() do - local m = name:sub(i, i) + for j = 1, name:len() do + local m = name:sub(j, j) if m == c then - result.reason = "You can't use this letter \"" .. c .. '" in your new name.' + result.reason = "You can't use this character '" .. c .. "' in your new name." return result end end diff --git a/src/game/game.cpp b/src/game/game.cpp index 4f7d8d33..674d8c61 100644 --- a/src/game/game.cpp +++ b/src/game/game.cpp @@ -1100,7 +1100,7 @@ std::string Game::getPlayerNameByGUID(const uint32_t &guid) { ReturnValue Game::getPlayerByNameWildcard(const std::string &s, std::shared_ptr &player) { size_t strlen = s.length(); - if (strlen == 0 || strlen > 20) { + if (strlen == 0 || strlen > 29) { return RETURNVALUE_PLAYERWITHTHISNAMEISNOTONLINE; }