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