From 0d924e8b251d8840e07022900ee83e57c11080ab Mon Sep 17 00:00:00 2001
From: Majesty <32709570+majestyotbr@users.noreply.github.com>
Date: Thu, 29 Aug 2024 08:59:22 -0300
Subject: [PATCH] feat: Nimmersatt's monsters (#2831)
Add Nimmersatt's monsters:
- Dragolisk,
- Wardragon,
- Mega Dragon.
- Step in Teleport.
Co-authored-by: hecmo94 <63259115+hecmo94@users.noreply.github.com>
---
.../monster/dragons/dragolisk.lua | 122 ++++++++++++++++
.../monster/dragons/mega_dragon.lua | 126 +++++++++++++++++
.../monster/dragons/war_dragon.lua | 125 +++++++++++++++++
.../movements/teleport/dragolisk_teleport.lua | 26 ++++
data/items/items.xml | 132 ++++++++++++++++++
5 files changed, 531 insertions(+)
create mode 100644 data-otservbr-global/monster/dragons/dragolisk.lua
create mode 100644 data-otservbr-global/monster/dragons/mega_dragon.lua
create mode 100644 data-otservbr-global/monster/dragons/war_dragon.lua
create mode 100644 data-otservbr-global/scripts/movements/teleport/dragolisk_teleport.lua
diff --git a/data-otservbr-global/monster/dragons/dragolisk.lua b/data-otservbr-global/monster/dragons/dragolisk.lua
new file mode 100644
index 00000000000..26cf05df8ec
--- /dev/null
+++ b/data-otservbr-global/monster/dragons/dragolisk.lua
@@ -0,0 +1,122 @@
+local mType = Game.createMonsterType("Dragolisk")
+local monster = {}
+
+monster.description = "a dragolisk"
+monster.experience = 5050
+monster.outfit = {
+ lookType = 1707,
+ lookHead = 0,
+ lookBody = 0,
+ lookLegs = 0,
+ lookFeet = 0,
+ lookAddons = 0,
+ lookMount = 0,
+}
+
+monster.raceId = 2456
+monster.Bestiary = {
+ class = "Dragon",
+ race = BESTY_RACE_DRAGON,
+ toKill = 2500,
+ FirstUnlock = 100,
+ SecondUnlock = 1000,
+ CharmsPoints = 50,
+ Stars = 5,
+ Occurrence = 0,
+ Locations = "Nimmersatt's Breeding Ground",
+}
+
+monster.health = 6180
+monster.maxHealth = 6180
+monster.race = "blood"
+monster.corpse = 44654
+monster.speed = 165
+monster.manaCost = 0
+
+monster.changeTarget = {
+ interval = 4000,
+ chance = 10,
+}
+
+monster.strategiesTarget = {
+ nearest = 100,
+}
+
+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 = 0,
+ healthHidden = false,
+ isBlockable = false,
+ canWalkOnEnergy = true,
+ canWalkOnFire = true,
+ canWalkOnPoison = true,
+}
+
+monster.light = {
+ level = 0,
+ color = 0,
+}
+
+monster.voices = {
+ interval = 5000,
+ chance = 10,
+ { text = "Just Look at me!", yell = false },
+ { text = "I'll stare you down", yell = false },
+ { text = "Let me have a look", yell = false },
+}
+
+monster.loot = {
+ { name = "Platinum Coin", chance = 52610, minCount = 1, maxCount = 46 },
+ { name = "Dragolisk Poison Gland", chance = 12600 },
+ { name = "Nimmersatt's Seal", chance = 8320 },
+ { id = 282, chance = 7580 },
+ { name = "Dragolisk Eye", chance = 5510 },
+ { name = "Green Gem", chance = 8260 },
+ { name = "Dragon's Tail", chance = 1003 },
+ { name = "Dragon Shield", chance = 400 },
+}
+
+monster.attacks = {
+ { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
+ { name = "combat", interval = 3000, chance = 27, type = COMBAT_PHYSICALDAMAGE, minDamage = -220, maxDamage = -250, length = 7, spread = 0, effect = CONST_ME_EXPLOSIONAREA, target = false },
+ { name = "combat", interval = 2500, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -250, radius = 4, effect = CONST_ME_POFF, target = true },
+ { name = "death chain", interval = 2500, chance = 20, minDamage = -250, maxDamage = -300, range = 7 },
+}
+
+monster.defenses = {
+ defense = 86,
+ armor = 86,
+ mitigation = 2.11,
+}
+
+monster.elements = {
+ { type = COMBAT_PHYSICALDAMAGE, percent = 15 },
+ { type = COMBAT_ENERGYDAMAGE, percent = 0 },
+ { type = COMBAT_EARTHDAMAGE, percent = -10 },
+ { type = COMBAT_FIREDAMAGE, percent = 0 },
+ { type = COMBAT_LIFEDRAIN, percent = 0 },
+ { type = COMBAT_MANADRAIN, percent = 0 },
+ { type = COMBAT_DROWNDAMAGE, percent = 0 },
+ { type = COMBAT_ICEDAMAGE, percent = -5 },
+ { type = COMBAT_HOLYDAMAGE, percent = -15 },
+ { type = COMBAT_DEATHDAMAGE, percent = -10 },
+}
+
+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-otservbr-global/monster/dragons/mega_dragon.lua b/data-otservbr-global/monster/dragons/mega_dragon.lua
new file mode 100644
index 00000000000..66696435486
--- /dev/null
+++ b/data-otservbr-global/monster/dragons/mega_dragon.lua
@@ -0,0 +1,126 @@
+local mType = Game.createMonsterType("Mega Dragon")
+local monster = {}
+
+monster.description = "a mega dragon"
+monster.experience = 7810
+monster.outfit = {
+ lookType = 1712,
+ lookHead = 0,
+ lookBody = 0,
+ lookLegs = 0,
+ lookFeet = 0,
+ lookAddons = 0,
+ lookMount = 0,
+}
+
+monster.raceId = 2459
+monster.Bestiary = {
+ class = "Dragon",
+ race = BESTY_RACE_DRAGON,
+ toKill = 2500,
+ FirstUnlock = 100,
+ SecondUnlock = 1000,
+ CharmsPoints = 50,
+ Stars = 5,
+ Occurrence = 0,
+ Locations = "Nimmersatt's Breeding Ground",
+}
+
+monster.health = 7920
+monster.maxHealth = 7920
+monster.race = "blood"
+monster.corpse = 44663
+monster.speed = 170
+monster.manaCost = 0
+
+monster.changeTarget = {
+ interval = 4000,
+ chance = 10,
+}
+
+monster.strategiesTarget = {
+ nearest = 100,
+}
+
+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 = 0,
+ healthHidden = false,
+ isBlockable = false,
+ canWalkOnEnergy = true,
+ canWalkOnFire = true,
+ canWalkOnPoison = true,
+}
+
+monster.light = {
+ level = 0,
+ color = 0,
+}
+
+monster.voices = {
+ interval = 5000,
+ chance = 10,
+ { text = "Just Look at me!", yell = false },
+ { text = "I'll stare you down", yell = false },
+ { text = "Let me have a look", yell = false },
+}
+
+monster.loot = {
+ { name = "Platinum Coin", chance = 50780, minCount = 1, maxCount = 48 },
+ { name = "Nimmersatt's Seal", chance = 8670 },
+ { id = 3039, chance = 10090 },
+ { name = "Molten Dragon Essence", chance = 4720 },
+ { name = "Prismatic Quartz", chance = 4460 },
+ { name = "Rainbow Quartz", chance = 4430, minCount = 1, maxCount = 2 },
+ { id = 3041, chance = 6790 },
+ { name = "Mega Dragon Heart", chance = 1850 },
+ { name = "Violet Gem", chance = 1470 },
+ { name = "Dragon Slayer", chance = 130 },
+}
+
+monster.attacks = {
+ { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -450 },
+ { name = "combat", interval = 2500, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -250, maxDamage = -350, range = 2, effect = CONST_ME_BIG_SCRATCH, target = true },
+ { name = "combat", interval = 2500, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -250, maxDamage = -300, length = 8, spread = 4, effect = CONST_ME_EXPLOSIONHIT, target = false },
+ { name = "combat", interval = 2500, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -200, maxDamage = -300, range = 7, radius = 4, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
+ { name = "combat", interval = 3000, chance = 5, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -350, radius = 4, effect = CONST_ME_POFF, target = true },
+ { name = "death chain", interval = 2500, chance = 15, minDamage = -200, maxDamage = -350, range = 7 },
+}
+
+monster.defenses = {
+ defense = 76,
+ armor = 76,
+ mitigation = 1.96,
+}
+
+monster.elements = {
+ { type = COMBAT_PHYSICALDAMAGE, percent = 0 },
+ { type = COMBAT_ENERGYDAMAGE, percent = -10 },
+ { type = COMBAT_EARTHDAMAGE, percent = -10 },
+ { type = COMBAT_FIREDAMAGE, percent = 0 },
+ { type = COMBAT_LIFEDRAIN, percent = 0 },
+ { type = COMBAT_MANADRAIN, percent = 0 },
+ { type = COMBAT_DROWNDAMAGE, percent = 0 },
+ { type = COMBAT_ICEDAMAGE, percent = 0 },
+ { 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-otservbr-global/monster/dragons/war_dragon.lua b/data-otservbr-global/monster/dragons/war_dragon.lua
new file mode 100644
index 00000000000..79d04bb2c0c
--- /dev/null
+++ b/data-otservbr-global/monster/dragons/war_dragon.lua
@@ -0,0 +1,125 @@
+local mType = Game.createMonsterType("Wardragon")
+local monster = {}
+
+monster.description = "a wardragon"
+monster.experience = 5810
+monster.outfit = {
+ lookType = 1708,
+ lookHead = 0,
+ lookBody = 0,
+ lookLegs = 0,
+ lookFeet = 0,
+ lookAddons = 0,
+ lookMount = 0,
+}
+
+monster.raceId = 2458
+monster.Bestiary = {
+ class = "Dragon",
+ race = BESTY_RACE_DRAGON,
+ toKill = 2500,
+ FirstUnlock = 100,
+ SecondUnlock = 1000,
+ CharmsPoints = 50,
+ Stars = 5,
+ Occurrence = 0,
+ Locations = "Nimmersatt's Breeding Ground",
+}
+
+monster.health = 6960
+monster.maxHealth = 6960
+monster.race = "blood"
+monster.corpse = 44656
+monster.speed = 165
+monster.manaCost = 0
+
+monster.changeTarget = {
+ interval = 4000,
+ chance = 10,
+}
+
+monster.strategiesTarget = {
+ nearest = 100,
+}
+
+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 = 0,
+ healthHidden = false,
+ isBlockable = false,
+ canWalkOnEnergy = true,
+ canWalkOnFire = true,
+ canWalkOnPoison = true,
+}
+
+monster.light = {
+ level = 0,
+ color = 0,
+}
+
+monster.voices = {
+ interval = 5000,
+ chance = 10,
+ { text = "Just Look at me!", yell = false },
+ { text = "I'll stare you down", yell = false },
+ { text = "Let me have a look", yell = false },
+}
+
+monster.loot = {
+ { name = "Platinum Coin", chance = 52560, minCount = 1, maxCount = 45 },
+ { name = "Wardragon Claw", chance = 14420 },
+ { name = "Nimmersatt's Seal", chance = 10620 },
+ { name = "Dragon Tongue", chance = 8450 },
+ { name = "Wardragon Tooth", chance = 6330 },
+ { name = "Gold Ingot", chance = 6007 },
+ { name = "Onyx Chip", chance = 4650, minCount = 1, maxCount = 2 },
+ { name = "Black Pearl", chance = 4000 },
+ { name = "White Gem", chance = 1000 },
+ { name = "Dragonbone Staff", chance = 740 },
+}
+
+monster.attacks = {
+ { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -450 },
+ { name = "combat", interval = 2500, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -250, maxDamage = -400, radius = 4, effect = CONST_ME_MORTAREA, target = true },
+ { name = "combat", interval = 3000, chance = 25, type = COMBAT_FIREDAMAGE, minDamage = -300, maxDamage = -400, length = 8, spread = 4, effect = CONST_ME_EXPLOSIONHIT, target = false },
+ { name = "combat", interval = 3000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -275, maxDamage = -400, radius = 4, effect = CONST_ME_POFF, target = true },
+ { name = "combat", interval = 3000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -250, maxDamage = -300, range = 2, effect = CONST_ME_BIG_SCRATCH, target = true },
+}
+
+monster.defenses = {
+ defense = 80,
+ armor = 80,
+ mitigation = 2.19,
+}
+
+monster.elements = {
+ { type = COMBAT_PHYSICALDAMAGE, percent = 0 },
+ { type = COMBAT_ENERGYDAMAGE, percent = -5 },
+ { type = COMBAT_EARTHDAMAGE, percent = -10 },
+ { 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 = -5 },
+ { 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-otservbr-global/scripts/movements/teleport/dragolisk_teleport.lua b/data-otservbr-global/scripts/movements/teleport/dragolisk_teleport.lua
new file mode 100644
index 00000000000..2c04c3f2a39
--- /dev/null
+++ b/data-otservbr-global/scripts/movements/teleport/dragolisk_teleport.lua
@@ -0,0 +1,26 @@
+local function teleportToDestination(creature, position)
+ if not creature:isPlayer() then
+ return true
+ end
+
+ if position.x == 33216 and position.y == 31126 and position.z == 14 then
+ creature:teleportTo(Position(33186, 31190, 7))
+ creature:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
+ return true
+ elseif position.x == 33187 and position.y == 31190 and position.z == 7 then
+ creature:teleportTo(Position(33217, 31123, 14))
+ creature:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
+ return true
+ else
+ return false
+ end
+end
+
+local dragoliskTeleport = MoveEvent()
+function dragoliskTeleport.onStepIn(creature, item, position, fromPosition)
+ return teleportToDestination(creature, position)
+end
+
+dragoliskTeleport:position({ x = 33216, y = 31126, z = 14 })
+dragoliskTeleport:position({ x = 33187, y = 31190, z = 7 })
+dragoliskTeleport:register()
diff --git a/data/items/items.xml b/data/items/items.xml
index 4978cf0bdc4..860a148fda2 100644
--- a/data/items/items.xml
+++ b/data/items/items.xml
@@ -76112,5 +76112,137 @@ Granted by TibiaGoals.com"/>
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+ -
+
+
+
+ -
+
+
+
+ -
+
+
+
+ -
+
+
+
+ -
+
+
+
+