diff --git a/.github/workflows/analysis-reviewdog-cppcheck.yml b/.github/workflows/analysis-reviewdog-cppcheck.yml
index 4098ccbdcda..bca1d0578bb 100644
--- a/.github/workflows/analysis-reviewdog-cppcheck.yml
+++ b/.github/workflows/analysis-reviewdog-cppcheck.yml
@@ -4,13 +4,12 @@ name: Analysis - Review Dog
on:
pull_request:
paths:
- - 'src/**'
+ - "src/**"
push:
paths:
- - 'src/**'
+ - "src/**"
jobs:
-
cppcheck:
runs-on: ubuntu-latest
steps:
@@ -18,7 +17,7 @@ jobs:
if: github.ref != 'refs/heads/main'
uses: fkirc/skip-duplicate-actions@master
with:
- concurrent_skipping: 'same_content'
+ concurrent_skipping: "same_content"
cancel_others: true
- name: Check out code.
diff --git a/.github/workflows/analysis-reviewdog.yml b/.github/workflows/analysis-reviewdog.yml
index b3bf0b562e6..a7d6eddac7b 100644
--- a/.github/workflows/analysis-reviewdog.yml
+++ b/.github/workflows/analysis-reviewdog.yml
@@ -12,7 +12,7 @@ jobs:
if: github.ref != 'refs/heads/main'
uses: fkirc/skip-duplicate-actions@master
with:
- concurrent_skipping: 'same_content'
+ concurrent_skipping: "same_content"
cancel_others: true
- name: Check out code.
@@ -32,11 +32,9 @@ jobs:
luac -v
reviewdog -reporter=github-pr-check -runners=luac
-
luacheck:
runs-on: ubuntu-latest
steps:
-
- name: Check out code.
uses: actions/checkout@main
@@ -54,11 +52,9 @@ jobs:
cd "$GITHUB_WORKSPACE"
reviewdog -reporter=github-pr-check -runners=luacheck
-
shellcheck:
runs-on: ubuntu-latest
steps:
-
- name: Check out code.
uses: actions/checkout@main
@@ -67,14 +63,12 @@ jobs:
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-check
- pattern: '*.sh'
- exclude: './.git/*'
-
+ pattern: "*.sh"
+ exclude: "./.git/*"
xmllint:
runs-on: ubuntu-latest
steps:
-
- name: Check out code.
uses: actions/checkout@main
@@ -92,11 +86,9 @@ jobs:
xmllint --version
reviewdog -reporter=github-pr-check -runners=xmllint
-
yamllint:
runs-on: ubuntu-latest
steps:
-
- name: Check out code.
uses: actions/checkout@main
@@ -106,11 +98,9 @@ jobs:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-check
-
hadolint:
runs-on: ubuntu-latest
steps:
-
- name: Check out code
uses: actions/checkout@main
@@ -122,7 +112,6 @@ jobs:
actionlint:
runs-on: ubuntu-latest
steps:
-
- name: Check out code
uses: actions/checkout@main
diff --git a/.github/workflows/analysis-sonarcloud.yml b/.github/workflows/analysis-sonarcloud.yml
index a929886f291..71b910fa995 100644
--- a/.github/workflows/analysis-sonarcloud.yml
+++ b/.github/workflows/analysis-sonarcloud.yml
@@ -3,19 +3,14 @@ name: Analysis - SonarCloud
on:
pull_request_target:
- types: [opened, synchronize, reopened]
+ types: [opened, synchronize, reopened, ready_for_review]
paths:
- - 'src/**'
- push:
- paths:
- - 'src/**'
- branches:
- - main
+ - "src/**"
env:
VCPKG_BUILD_TYPE: debug
CMAKE_BUILD_PARALLEL_LEVEL: 2
- MAKEFLAGS: '-j 2'
+ MAKEFLAGS: "-j 2"
VCPKG_BINARY_SOURCES: clear;default,readwrite
jobs:
diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml
index f4366e8fe65..c1a4a77af7b 100644
--- a/.github/workflows/build-docker.yml
+++ b/.github/workflows/build-docker.yml
@@ -6,10 +6,11 @@ on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
paths:
- - 'src/**'
+ - "src/**"
+ merge_group:
push:
paths:
- - 'src/**'
+ - "src/**"
branches:
- main
@@ -18,10 +19,10 @@ jobs:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- - name: Cancel Previous Runs
- uses: styfle/cancel-workflow-action@0.9.1
- with:
- access_token: ${{ github.token }}
+ - name: Cancel Previous Runs
+ uses: styfle/cancel-workflow-action@0.9.1
+ with:
+ access_token: ${{ github.token }}
build_docker_x86:
if: ${{ github.event_name == 'push' || !github.event.pull_request.draft }}
@@ -35,7 +36,7 @@ jobs:
- name: Install GitVersion
uses: gittools/actions/gitversion/setup@v0.9.15
with:
- versionSpec: '5.x'
+ versionSpec: "5.x"
- name: Determine Version
id: gitversion
@@ -93,7 +94,7 @@ jobs:
if: github.ref != 'refs/heads/main'
uses: fkirc/skip-duplicate-actions@master
with:
- concurrent_skipping: 'same_content'
+ concurrent_skipping: "same_content"
cancel_others: true
- name: Checkout
@@ -104,7 +105,7 @@ jobs:
- name: Install GitVersion
uses: gittools/actions/gitversion/setup@v0.9.15
with:
- versionSpec: '5.x'
+ versionSpec: "5.x"
- name: Determine Version
id: gitversion
diff --git a/.github/workflows/build-ubuntu.yml b/.github/workflows/build-ubuntu.yml
index 7d2543a59bf..e0ea11220fb 100644
--- a/.github/workflows/build-ubuntu.yml
+++ b/.github/workflows/build-ubuntu.yml
@@ -6,26 +6,27 @@ on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
paths:
- - 'src/**'
+ - "src/**"
+ merge_group:
push:
paths:
- - 'src/**'
+ - "src/**"
branches:
- main
env:
CMAKE_BUILD_PARALLEL_LEVEL: 2
- MAKEFLAGS: '-j 2'
+ MAKEFLAGS: "-j 2"
jobs:
cancel-runs:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- - name: Cancel Previous Runs
- uses: styfle/cancel-workflow-action@0.9.1
- with:
- access_token: ${{ github.token }}
+ - name: Cancel Previous Runs
+ uses: styfle/cancel-workflow-action@0.9.1
+ with:
+ access_token: ${{ github.token }}
job:
if: ${{ github.event_name == 'push' || !github.event.pull_request.draft }}
diff --git a/.github/workflows/build-windows-cmake.yml b/.github/workflows/build-windows-cmake.yml
index a59041dffd2..caba8a0aa90 100644
--- a/.github/workflows/build-windows-cmake.yml
+++ b/.github/workflows/build-windows-cmake.yml
@@ -5,24 +5,25 @@ on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
paths:
- - 'src/**'
+ - "src/**"
+ merge_group:
push:
paths:
- - 'src/**'
+ - "src/**"
branches:
- main
env:
CMAKE_BUILD_PARALLEL_LEVEL: 2
- MAKEFLAGS: '-j 2'
+ MAKEFLAGS: "-j 2"
jobs:
cancel-runs:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- - name: Cancel Previous Runs
- uses: styfle/cancel-workflow-action@0.9.1
- with:
- access_token: ${{ github.token }}
+ - name: Cancel Previous Runs
+ uses: styfle/cancel-workflow-action@0.9.1
+ with:
+ access_token: ${{ github.token }}
job:
if: ${{ github.event_name == 'push' || !github.event.pull_request.draft }}
diff --git a/.github/workflows/build-windows-solution.yml b/.github/workflows/build-windows-solution.yml
index 1189acec818..9e3addb6e74 100644
--- a/.github/workflows/build-windows-solution.yml
+++ b/.github/workflows/build-windows-solution.yml
@@ -6,26 +6,27 @@ on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
paths:
- - 'src/**'
+ - "src/**"
+ merge_group:
push:
paths:
- - 'src/**'
+ - "src/**"
branches:
- main
env:
CMAKE_BUILD_PARALLEL_LEVEL: 2
- MAKEFLAGS: '-j 2'
+ MAKEFLAGS: "-j 2"
jobs:
cancel-runs:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- - name: Cancel Previous Runs
- uses: styfle/cancel-workflow-action@0.9.1
- with:
- access_token: ${{ github.token }}
+ - name: Cancel Previous Runs
+ uses: styfle/cancel-workflow-action@0.9.1
+ with:
+ access_token: ${{ github.token }}
job:
if: ${{ github.event_name == 'push' || !github.event.pull_request.draft }}
diff --git a/.github/workflows/clang-lint.yml b/.github/workflows/clang-lint.yml
index 2fe9166c4f5..85699e408c9 100644
--- a/.github/workflows/clang-lint.yml
+++ b/.github/workflows/clang-lint.yml
@@ -3,19 +3,20 @@ name: Clang-format
on:
pull_request:
paths:
- - 'src/**'
+ - "src/**"
+ merge_group:
push:
paths:
- - 'src/**'
+ - "src/**"
jobs:
cancel-runs:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- - name: Cancel Previous Runs
- uses: styfle/cancel-workflow-action@0.9.1
- with:
- access_token: ${{ github.token }}
+ - name: Cancel Previous Runs
+ uses: styfle/cancel-workflow-action@0.9.1
+ with:
+ access_token: ${{ github.token }}
build:
runs-on: ubuntu-latest
diff --git a/.github/workflows/cron-stale.yml b/.github/workflows/cron-stale.yml
index 03d1868c449..b4231144943 100644
--- a/.github/workflows/cron-stale.yml
+++ b/.github/workflows/cron-stale.yml
@@ -1,18 +1,18 @@
---
-name: 'Cron - Stale issues and PRs'
+name: "Cron - Stale issues and PRs"
on:
schedule:
- - cron: '30 1 * * *'
+ - cron: "30 1 * * *"
jobs:
cancel-runs:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- - name: Cancel Previous Runs
- uses: styfle/cancel-workflow-action@0.9.1
- with:
- access_token: ${{ github.token }}
+ - name: Cancel Previous Runs
+ uses: styfle/cancel-workflow-action@0.9.1
+ with:
+ access_token: ${{ github.token }}
stale:
runs-on: ubuntu-latest
@@ -20,8 +20,8 @@ jobs:
- uses: actions/stale@v6
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- stale-issue-message: 'This issue is stale because it has been open 120 days with no activity.'
- stale-pr-message: 'This PR is stale because it has been open 45 days with no activity.'
+ stale-issue-message: "This issue is stale because it has been open 120 days with no activity."
+ stale-pr-message: "This PR is stale because it has been open 45 days with no activity."
days-before-issue-stale: 90
days-before-pr-stale: 30
days-before-issue-close: -1
diff --git a/.github/workflows/lua-format.yml b/.github/workflows/lua-format.yml
index 57caa336668..5a9a644e7aa 100644
--- a/.github/workflows/lua-format.yml
+++ b/.github/workflows/lua-format.yml
@@ -3,10 +3,11 @@ name: Lua-format
on:
pull_request:
paths:
- - 'data*/**'
+ - "data*/**"
+ merge_group:
push:
paths:
- - 'data*/**'
+ - "data*/**"
jobs:
lua-formatter:
runs-on: ubuntu-latest
diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml
index 066aaa23595..345a0e6f089 100644
--- a/.github/workflows/pr-labeler.yml
+++ b/.github/workflows/pr-labeler.yml
@@ -1,5 +1,5 @@
---
-name: 'PR - Labeler'
+name: "PR - Labeler"
on:
- pull_request_target
@@ -9,4 +9,4 @@ jobs:
steps:
- uses: actions/labeler@main
with:
- repo-token: '${{ secrets.GITHUB_TOKEN }}'
+ repo-token: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/.github/workflows/tests-lua.yml b/.github/workflows/tests-lua.yml
index ebc52323ad2..6455c5705de 100644
--- a/.github/workflows/tests-lua.yml
+++ b/.github/workflows/tests-lua.yml
@@ -3,6 +3,7 @@ name: Tests - Lua
on:
pull_request:
+ merge_group:
push:
branches:
- main
diff --git a/config.lua.dist b/config.lua.dist
index da087334e12..5b2d941360b 100644
--- a/config.lua.dist
+++ b/config.lua.dist
@@ -62,12 +62,13 @@ statusProtocolPort = 7171
maxPlayers = 0
serverName = "OTServBR-Global"
serverMotd = "Welcome to the OTServBR-Global!"
-onePlayerOnlinePerAccount = true
statusTimeout = 5 * 1000
replaceKickOnLogin = true
maxPacketsPerSecond = 25
maxItem = 2000
maxContainer = 100
+maxPlayersOnlinePerAccount = 1
+maxPlayersOutsidePZPerAccount = 1
-- Packet Compression
-- Minimize network bandwith and reduce ping
diff --git a/data-canary/monster/demons/fury.lua b/data-canary/monster/demons/fury.lua
index f12b4ba628f..7c1946d7991 100644
--- a/data-canary/monster/demons/fury.lua
+++ b/data-canary/monster/demons/fury.lua
@@ -108,7 +108,7 @@ monster.attacks = {
-- {name ="fury skill reducer", interval = 2000, chance = 5, target = false},
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -120, maxDamage = -300, radius = 3, effect = CONST_ME_HITAREA, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -125, maxDamage = -250, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_SMALLCLOUDS, target = false },
- { name = "speed", interval = 2000, chance = 15, speedChange = -800, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_SMALLCLOUDS, target = false, duration = 30000 },
+ { name = "speed", interval = 2000, chance = 15, speedChange = -100, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_SMALLCLOUDS, target = false, duration = 30000 },
}
monster.defenses = {
diff --git a/data-canary/monster/magicals/guzzlemaw.lua b/data-canary/monster/magicals/guzzlemaw.lua
index 8d3902203d1..8e38d459779 100644
--- a/data-canary/monster/magicals/guzzlemaw.lua
+++ b/data-canary/monster/magicals/guzzlemaw.lua
@@ -114,7 +114,7 @@ monster.attacks = {
{ name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 10, minDamage = -500, maxDamage = -1000, radius = 3, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -900, length = 8, spread = 3, effect = CONST_ME_EXPLOSIONAREA, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -500, radius = 2, shootEffect = CONST_ANI_LARGEROCK, effect = CONST_ME_STONES, target = true },
- { name = "speed", interval = 2000, chance = 15, speedChange = -800, radius = 6, effect = CONST_ME_MAGIC_RED, target = false, duration = 15000 },
+ { name = "speed", interval = 2000, chance = 15, speedChange = -100, radius = 6, effect = CONST_ME_MAGIC_RED, target = false, duration = 15000 },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -800, length = 8, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
}
diff --git a/data-canary/scripts/spells/support/sharpshooter.lua b/data-canary/scripts/spells/support/sharpshooter.lua
index 0a419b6b07e..595c1e6db80 100644
--- a/data-canary/scripts/spells/support/sharpshooter.lua
+++ b/data-canary/scripts/spells/support/sharpshooter.lua
@@ -10,9 +10,9 @@ skill:setParameter(CONDITION_PARAM_DISABLE_DEFENSE, true)
skill:setParameter(CONDITION_PARAM_BUFF_SPELL, true)
combat:addCondition(skill)
-local speed = Condition(CONDITION_PARALYZE)
+local speed = Condition(CONDITION_HASTE)
speed:setParameter(CONDITION_PARAM_TICKS, 10000)
-speed:setFormula(-0.73, 0, -0.73, 0)
+speed:setFormula(0.7, 0, 0.7, 0)
combat:addCondition(speed)
local exhaustHealGroup = Condition(CONDITION_SPELLGROUPCOOLDOWN)
diff --git a/data-canary/scripts/spells/support/swift_foot.lua b/data-canary/scripts/spells/support/swift_foot.lua
index 803f6980cd8..249494f38ca 100644
--- a/data-canary/scripts/spells/support/swift_foot.lua
+++ b/data-canary/scripts/spells/support/swift_foot.lua
@@ -8,7 +8,7 @@ combat:addCondition(exhaust)
local condition = Condition(CONDITION_HASTE)
condition:setParameter(CONDITION_PARAM_TICKS, 10000)
-condition:setFormula(0.8, -72, 0.8, -72)
+condition:setFormula(1.8, 72, 1.8, 72)
combat:addCondition(condition)
local exhaustAttackGroup = Condition(CONDITION_SPELLGROUPCOOLDOWN)
diff --git a/data-otservbr-global/lib/compat/compat.lua b/data-otservbr-global/lib/compat/compat.lua
index 1de91b5ab8a..f62945e6b26 100644
--- a/data-otservbr-global/lib/compat/compat.lua
+++ b/data-otservbr-global/lib/compat/compat.lua
@@ -573,16 +573,6 @@ function getOnlinePlayers()
return result
end
-function getPlayersByAccountNumber(accountNumber)
- local result = {}
- for _, player in ipairs(Game.getPlayers()) do
- if player:getAccountId() == accountNumber then
- result[#result + 1] = player:getId()
- end
- end
- return result
-end
-
function getPlayerGUIDByName(name)
local player = Player(name)
if player then
@@ -788,18 +778,6 @@ function doSendAnimatedText()
return true
end
-function doPlayerAddExp(cid, exp, useMult, ...)
- local player = Player(cid)
- if player == nil then
- return false
- end
-
- if useMult then
- exp = exp * getRateFromTable(experienceStages, player:getLevel(), configManager.getNumber(configKeys.RATE_EXPERIENCE))
- end
- return player:addExperience(exp, ...)
-end
-
function doPlayerAddManaSpent(cid, mana)
local p = Player(cid)
return p and p:addManaSpent(mana) or false
diff --git a/data-otservbr-global/lib/core/storages.lua b/data-otservbr-global/lib/core/storages.lua
index 34928957379..12a7cdd33d1 100644
--- a/data-otservbr-global/lib/core/storages.lua
+++ b/data-otservbr-global/lib/core/storages.lua
@@ -2957,6 +2957,7 @@ GlobalStorage = {
ZamuloshSummon = 60030,
FerumbrasEssence = 60031,
DesperateSoul = 60032,
+ FlowerPuzzleTimer = 60033,
Crystals = {
Crystal1 = 60040,
Crystal2 = 60041,
diff --git a/data-otservbr-global/lib/quests/the_primal_ordeal.lua b/data-otservbr-global/lib/quests/the_primal_ordeal.lua
index 4b1dfdae2e3..de708ee4de2 100644
--- a/data-otservbr-global/lib/quests/the_primal_ordeal.lua
+++ b/data-otservbr-global/lib/quests/the_primal_ordeal.lua
@@ -7,8 +7,11 @@ function RegisterPrimalPackBeast(template)
primalMonster.name = "Primal Pack Beast"
primalMonster.description = "a primal pack beast"
+ primalMonster.health = primalMonster.health
+ primalMonster.maxHealth = primalMonster.maxHealth
primalMonster.raceId = nil
primalMonster.Bestiary = nil
+ primalMonster.corpse = 0
primal:register(primalMonster)
end
diff --git a/data-otservbr-global/monster/aquatics/deathling_spellsinger.lua b/data-otservbr-global/monster/aquatics/deathling_spellsinger.lua
index d28ad9e1d5f..68d5df39ea4 100644
--- a/data-otservbr-global/monster/aquatics/deathling_spellsinger.lua
+++ b/data-otservbr-global/monster/aquatics/deathling_spellsinger.lua
@@ -102,7 +102,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -300, effect = CONST_ME_DRAWBLOOD },
{ name = "combat", interval = 4000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -400, range = 5, shootEffect = CONST_ANI_HUNTINGSPEAR, target = false },
{ name = "combat", interval = 4000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -150, maxDamage = -300, range = 5, shootEffect = CONST_ANI_LARGEROCK, target = false },
- { name = "combat", interval = 2000, chance = 14, type = COMBAT_HOLYDAMAGE, minDamage = -400, maxDamage = -700, length = 8, spread = 3, effect = CONST_ME_BLOCKHIT, target = false },
+ { name = "combat", interval = 2000, chance = 14, type = COMBAT_HOLYDAMAGE, minDamage = -400, maxDamage = -700, length = 8, spread = 0, effect = CONST_ME_HOLYAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/aquatics/manta_ray.lua b/data-otservbr-global/monster/aquatics/manta_ray.lua
index 9dace51e40a..d7d3e301b3a 100644
--- a/data-otservbr-global/monster/aquatics/manta_ray.lua
+++ b/data-otservbr-global/monster/aquatics/manta_ray.lua
@@ -80,7 +80,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -110, effect = CONST_ME_DRAWBLOOD, condition = { type = CONDITION_POISON, totalDamage = 120, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -75, maxDamage = -90, range = 7, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_ENERGYHIT, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -50, maxDamage = -110, length = 4, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -50, maxDamage = -110, length = 4, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/aquatics/quara_hydromancer.lua b/data-otservbr-global/monster/aquatics/quara_hydromancer.lua
index 83d0b76ca8e..4129dcfe81c 100644
--- a/data-otservbr-global/monster/aquatics/quara_hydromancer.lua
+++ b/data-otservbr-global/monster/aquatics/quara_hydromancer.lua
@@ -95,9 +95,9 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -80, effect = CONST_ME_DRAWBLOOD, condition = { type = CONDITION_POISON, totalDamage = 100, interval = 4000 } },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -100, maxDamage = -180, length = 8, spread = 3, effect = CONST_ME_BUBBLES, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -100, maxDamage = -180, length = 8, spread = 0, effect = CONST_ME_BUBBLES, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -90, maxDamage = -150, radius = 3, effect = CONST_ME_BUBBLES, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -170, maxDamage = -240, length = 8, spread = 3, effect = CONST_ME_HITBYPOISON, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -170, maxDamage = -240, length = 8, spread = 0, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -170, range = 7, effect = CONST_ME_MAGIC_RED, target = true },
{ name = "speed", interval = 2000, chance = 15, speedChange = -600, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 15000 },
}
diff --git a/data-otservbr-global/monster/aquatics/quara_hydromancer_scout.lua b/data-otservbr-global/monster/aquatics/quara_hydromancer_scout.lua
index 7e67e0bab45..ad555715555 100644
--- a/data-otservbr-global/monster/aquatics/quara_hydromancer_scout.lua
+++ b/data-otservbr-global/monster/aquatics/quara_hydromancer_scout.lua
@@ -96,9 +96,9 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -80, effect = CONST_ME_DRAWBLOOD, condition = { type = CONDITION_POISON, totalDamage = 100, interval = 4000 } },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -100, maxDamage = -180, length = 8, spread = 3, effect = CONST_ME_HITBYPOISON, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -100, maxDamage = -180, length = 8, spread = 0, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -90, maxDamage = -150, radius = 3, effect = CONST_ME_BUBBLES, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -170, maxDamage = -240, length = 8, spread = 3, effect = CONST_ME_BUBBLES, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -170, maxDamage = -240, length = 8, spread = 0, effect = CONST_ME_BUBBLES, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -170, range = 7, effect = CONST_ME_MAGIC_RED, target = true },
{ name = "speed", interval = 2000, chance = 15, speedChange = -600, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 15000 },
}
diff --git a/data-otservbr-global/monster/birds/demon_parrot.lua b/data-otservbr-global/monster/birds/demon_parrot.lua
index a606e4efe18..e1112294753 100644
--- a/data-otservbr-global/monster/birds/demon_parrot.lua
+++ b/data-otservbr-global/monster/birds/demon_parrot.lua
@@ -83,7 +83,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 1200, chance = 100, minDamage = 0, maxDamage = -100 },
- { name = "drunk", interval = 1000, chance = 30, length = 5, spread = 3, effect = CONST_ME_SOUND_RED, target = false },
+ { name = "drunk", interval = 1000, chance = 30, length = 5, spread = 0, effect = CONST_ME_SOUND_RED, target = false },
{ name = "combat", interval = 1000, chance = 30, type = COMBAT_LIFEDRAIN, minDamage = -25, maxDamage = -45, range = 5, shootEffect = CONST_ANI_SUDDENDEATH, target = false },
{ name = "combat", interval = 1000, chance = 30, type = COMBAT_LIFEDRAIN, minDamage = -15, maxDamage = -45, range = 1, target = false },
}
diff --git a/data-otservbr-global/monster/bosses/alchemist_container.lua b/data-otservbr-global/monster/bosses/alchemist_container.lua
new file mode 100644
index 00000000000..62905d5975e
--- /dev/null
+++ b/data-otservbr-global/monster/bosses/alchemist_container.lua
@@ -0,0 +1,96 @@
+local mType = Game.createMonsterType("Alchemist Container")
+local monster = {}
+
+monster.description = "Alchemist Container"
+monster.experience = 0
+monster.outfit = {
+ lookTypeEx = 39952,
+}
+
+monster.health = 1200
+monster.maxHealth = 1200
+monster.race = "undead"
+monster.corpse = 39949
+monster.speed = 0
+monster.manaCost = 0
+
+monster.changeTarget = {
+ interval = 4000,
+ chance = 15,
+}
+
+monster.strategiesTarget = {
+ nearest = 60,
+ health = 30,
+ damage = 10,
+}
+
+monster.flags = {
+ summonable = false,
+ attackable = true,
+ hostile = true,
+ convinceable = false,
+ pushable = false,
+ rewardBoss = false,
+ illusionable = false,
+ canPushItems = true,
+ canPushCreatures = true,
+ critChance = 10,
+ staticAttackChance = 90,
+ targetDistance = 1,
+ runHealth = 0,
+ healthHidden = false,
+ isBlockable = false,
+ canWalkOnEnergy = true,
+ canWalkOnFire = true,
+ canWalkOnPoison = true,
+}
+
+monster.light = {
+ level = 0,
+ color = 0,
+}
+
+monster.attacks = {}
+
+monster.defenses = {
+ defense = 54,
+ armor = 59,
+ mitigation = 3.7,
+}
+
+monster.elements = {
+ { 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 = 0 },
+ { type = COMBAT_HOLYDAMAGE, percent = 0 },
+ { type = COMBAT_DEATHDAMAGE, percent = 0 },
+}
+
+monster.immunities = {
+ { type = "paralyze", condition = true },
+ { type = "outfit", condition = false },
+ { type = "invisible", condition = true },
+ { type = "bleed", condition = false },
+}
+
+mType.onThink = function(monster, interval) end
+
+mType.onAppear = function(monster, creature)
+ if monster:getType():isRewardBoss() then
+ monster:setReward(true)
+ end
+end
+
+mType.onDisappear = function(monster, creature) end
+
+mType.onMove = function(monster, creature, fromPosition, toPosition) end
+
+mType.onSay = function(monster, creature, type, message) end
+
+mType:register(monster)
diff --git a/data-otservbr-global/monster/bosses/apocalypse.lua b/data-otservbr-global/monster/bosses/apocalypse.lua
index 77ad2d660c4..3e60fe75e34 100644
--- a/data-otservbr-global/monster/bosses/apocalypse.lua
+++ b/data-otservbr-global/monster/bosses/apocalypse.lua
@@ -110,7 +110,7 @@ monster.attacks = {
{ name = "strength", interval = 1000, chance = 10, minDamage = -600, maxDamage = -1450, radius = 5, effect = CONST_ME_HITAREA, target = false },
{ name = "combat", interval = 3000, chance = 13, type = COMBAT_FIREDAMAGE, minDamage = -300, maxDamage = -800, range = 7, radius = 7, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
{ name = "combat", interval = 3000, chance = 8, type = COMBAT_MANADRAIN, minDamage = -600, maxDamage = -700, radius = 10, effect = CONST_ME_ENERGYAREA, target = false },
- { name = "combat", interval = 2000, chance = 9, type = COMBAT_ENERGYDAMAGE, minDamage = -400, maxDamage = -800, length = 8, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 9, type = COMBAT_ENERGYDAMAGE, minDamage = -400, maxDamage = -800, length = 8, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 5000, chance = 18, minDamage = -800, maxDamage = -1000, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "combat", interval = 2000, chance = 6, type = COMBAT_LIFEDRAIN, minDamage = -600, maxDamage = -1200, radius = 14, effect = CONST_ME_MAGIC_GREEN, target = false },
diff --git a/data-otservbr-global/monster/bosses/bazir.lua b/data-otservbr-global/monster/bosses/bazir.lua
index 5fc46367c42..e9abbed723c 100644
--- a/data-otservbr-global/monster/bosses/bazir.lua
+++ b/data-otservbr-global/monster/bosses/bazir.lua
@@ -145,7 +145,7 @@ monster.attacks = {
{ name = "outfit", interval = 1000, chance = 2, radius = 8, effect = CONST_ME_LOSEENERGY, target = false, duration = 5000, outfitMonster = "demon" },
{ name = "outfit", interval = 1000, chance = 2, radius = 8, effect = CONST_ME_LOSEENERGY, target = false, duration = 5000, outfitItem = 3058 },
{ name = "combat", interval = 1000, chance = 34, type = COMBAT_FIREDAMAGE, minDamage = -100, maxDamage = -900, range = 7, radius = 7, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
- { name = "combat", interval = 1000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -500, maxDamage = -850, length = 8, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 1000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -500, maxDamage = -850, length = 8, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/bosses/brain_head.lua b/data-otservbr-global/monster/bosses/brain_head.lua
new file mode 100644
index 00000000000..c67524c5411
--- /dev/null
+++ b/data-otservbr-global/monster/bosses/brain_head.lua
@@ -0,0 +1,119 @@
+local mType = Game.createMonsterType("Brain Head")
+local monster = {}
+
+monster.description = "Brain Head"
+monster.experience = 0
+monster.outfit = {
+ lookTypeEx = 32418,
+}
+
+monster.health = 75000
+monster.maxHealth = monster.health
+monster.race = "undead"
+monster.corpse = 32272
+monster.speed = 0
+
+monster.changeTarget = {
+ interval = 4000,
+ chance = 10,
+}
+
+monster.bosstiary = {
+ bossRaceId = 1862,
+ bossRace = RARITY_ARCHFOE,
+}
+
+monster.flags = {
+ summonable = false,
+ attackable = true,
+ hostile = true,
+ convinceable = false,
+ pushable = false,
+ rewardBoss = true,
+ illusionable = false,
+ canPushItems = true,
+ canPushCreatures = true,
+ staticAttackChance = 90,
+ targetDistance = 1,
+ runHealth = 0,
+ healthHidden = false,
+ canWalkOnEnergy = true,
+ canWalkOnFire = true,
+ canWalkOnPoison = true,
+}
+
+monster.loot = {
+ { name = "crystal coin", chance = 96300, maxCount = 3 },
+ { name = "diamond", chance = 55560, maxCount = 2 },
+ { name = "ultimate mana potion", chance = 51850, maxCount = 6 },
+ { name = "white gem", chance = 51850, maxCount = 2 },
+ { name = "supreme health potion", chance = 29630 },
+ { name = "mastermind potion", chance = 22220 },
+ { name = "cursed bone", chance = 22220 },
+ { name = "berserk potion", chance = 18520 },
+ { name = "death toll", chance = 18520, maxCount = 2 },
+ { name = "ivory comb", chance = 18520 },
+ { name = "bullseye potion", chance = 14810, maxCount = 10 },
+ { name = "ultimate spirit potion", chance = 14810, maxCount = 6 },
+ { name = "moonstone", chance = 14810 },
+ { name = "spooky hood", chance = 8520 },
+ { name = "silver hand mirror", chance = 7410 },
+ { name = "amber with a dragonfly", chance = 7410 },
+ { name = "phantasmal axe", chance = 3700 },
+ { name = "ghost claw", chance = 3700 },
+ { name = "giant amethyst", chance = 3700 },
+ { id = 32621, chance = 3200 }, -- ring of souls
+}
+
+monster.attacks = {
+ { name = "combat", type = COMBAT_DEATHDAMAGE, interval = 2000, chance = 80, minDamage = -700, maxDamage = -1200, effect = CONST_ME_MORTAREA, shootEffect = CONST_ANI_SUDDENDEATH, target = true, range = 7 },
+ { name = "combat", type = COMBAT_LIFEDRAIN, interval = 2000, chance = 20, length = 8, spread = 0, minDamage = -900, maxDamage = -1300, effect = CONST_ME_ELECTRICALSPARK },
+}
+
+monster.defenses = {
+ defense = 78,
+ armor = 78,
+ mitigation = 3.27,
+}
+
+monster.elements = {
+ { 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 = -30 },
+ { type = COMBAT_HOLYDAMAGE, percent = 0 },
+ { type = COMBAT_DEATHDAMAGE, percent = 0 },
+}
+
+monster.immunities = {
+ { type = "paralyze", condition = true },
+ { type = "invisible", condition = true },
+}
+
+monster.voices = {
+ interval = 5000,
+ chance = 10,
+ { text = "Feel the power of death unleashed!", yell = false },
+ { text = "I will rule again and my realm of death will span the world!", yell = false },
+ { text = "My lich-knights will conquer this world for me!", yell = false },
+}
+
+mType.onThink = function(monster, interval) end
+
+mType.onAppear = function(monster, creature)
+ if monster:getType():isRewardBoss() then
+ monster:setReward(true)
+ end
+end
+
+mType.onDisappear = function(monster, creature) end
+
+mType.onMove = function(monster, creature, fromPosition, toPosition) end
+
+mType.onSay = function(monster, creature, type, message) end
+
+mType:register(monster)
diff --git a/data-otservbr-global/monster/bosses/diseased_bill.lua b/data-otservbr-global/monster/bosses/diseased_bill.lua
index c2524dd8267..42df3b5c771 100644
--- a/data-otservbr-global/monster/bosses/diseased_bill.lua
+++ b/data-otservbr-global/monster/bosses/diseased_bill.lua
@@ -82,7 +82,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -207, condition = { type = CONDITION_POISON, totalDamage = 4, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 100, type = COMBAT_LIFEDRAIN, minDamage = -90, maxDamage = -140, effect = CONST_ME_MAGIC_RED, target = true },
- { name = "combat", interval = 1000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -175, radius = 2, shootEffect = CONST_ANI_SMALLEARTH, target = false },
+ { name = "combat", interval = 1000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -175, radius = 2, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "speed", interval = 3000, chance = 40, speedChange = -900, effect = CONST_ME_MAGIC_RED, target = true, duration = 20000 },
}
diff --git a/data-otservbr-global/monster/bosses/diseased_dan.lua b/data-otservbr-global/monster/bosses/diseased_dan.lua
index 7ee84a080a1..c44f9bc9702 100644
--- a/data-otservbr-global/monster/bosses/diseased_dan.lua
+++ b/data-otservbr-global/monster/bosses/diseased_dan.lua
@@ -82,7 +82,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -207, condition = { type = CONDITION_POISON, totalDamage = 4, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 100, type = COMBAT_LIFEDRAIN, minDamage = -90, maxDamage = -140, effect = CONST_ME_MAGIC_RED, target = true },
- { name = "combat", interval = 1000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -175, radius = 2, shootEffect = CONST_ANI_SMALLEARTH, target = false },
+ { name = "combat", interval = 1000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -175, radius = 2, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "speed", interval = 3000, chance = 40, speedChange = -900, effect = CONST_ME_MAGIC_RED, target = true, duration = 20000 },
}
diff --git a/data-otservbr-global/monster/bosses/diseased_fred.lua b/data-otservbr-global/monster/bosses/diseased_fred.lua
index d2ab31a5578..59304042e5c 100644
--- a/data-otservbr-global/monster/bosses/diseased_fred.lua
+++ b/data-otservbr-global/monster/bosses/diseased_fred.lua
@@ -82,7 +82,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -207, condition = { type = CONDITION_POISON, totalDamage = 4, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 100, type = COMBAT_LIFEDRAIN, minDamage = -90, maxDamage = -140, effect = CONST_ME_MAGIC_RED, target = true },
- { name = "combat", interval = 1000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -175, radius = 2, shootEffect = CONST_ANI_SMALLEARTH, target = false },
+ { name = "combat", interval = 1000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -175, radius = 2, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "speed", interval = 3000, chance = 40, speedChange = -900, effect = CONST_ME_MAGIC_RED, target = true, duration = 20000 },
}
diff --git a/data-otservbr-global/monster/bosses/gaffir.lua b/data-otservbr-global/monster/bosses/gaffir.lua
index 3370cb9b08b..a3e2feb16a6 100644
--- a/data-otservbr-global/monster/bosses/gaffir.lua
+++ b/data-otservbr-global/monster/bosses/gaffir.lua
@@ -109,7 +109,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -550 },
{ name = "combat", interval = 2000, chance = 8, type = COMBAT_PHYSICALDAMAGE, minDamage = -450, maxDamage = -650, radius = 3, effect = CONST_ME_GROUNDSHAKER, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -400, maxDamage = -580, length = 5, spread = 3, effect = CONST_ME_EXPLOSIONHIT, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -400, maxDamage = -580, length = 5, spread = 0, effect = CONST_ME_EXPLOSIONHIT, target = false },
{ name = "combat", interval = 3000, chance = 14, type = COMBAT_FIREDAMAGE, minDamage = -500, maxDamage = -750, shootEffect = CONST_ANI_FIRE, target = true },
{ name = "combat", interval = 2000, chance = 16, type = COMBAT_EARTHDAMAGE, minDamage = -500, maxDamage = -620, radius = 4, shootEffect = CONST_ANI_EARTH, effect = CONST_ME_GREEN_RINGS, target = true },
{ name = "combat", interval = 3000, chance = 12, type = COMBAT_EARTHDAMAGE, minDamage = -320, maxDamage = -500, radius = 2, effect = CONST_ME_GREEN_RINGS, target = false },
diff --git a/data-otservbr-global/monster/bosses/gravelord_oshuran.lua b/data-otservbr-global/monster/bosses/gravelord_oshuran.lua
index fd5abe25a3f..442c014dcbb 100644
--- a/data-otservbr-global/monster/bosses/gravelord_oshuran.lua
+++ b/data-otservbr-global/monster/bosses/gravelord_oshuran.lua
@@ -90,8 +90,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -250 },
{ name = "speed", interval = 2000, chance = 25, speedChange = -300, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 30000 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -180, maxDamage = -300, length = 7, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -100, maxDamage = -350, length = 7, spread = 3, effect = CONST_ME_HITBYPOISON, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -180, maxDamage = -300, length = 7, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -100, maxDamage = -350, length = 7, spread = 0, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -200, maxDamage = -245, range = 1, effect = CONST_ME_MAGIC_RED, target = true },
}
diff --git a/data-otservbr-global/monster/bosses/guard_captain_quaid.lua b/data-otservbr-global/monster/bosses/guard_captain_quaid.lua
index e712117a732..479757ca620 100644
--- a/data-otservbr-global/monster/bosses/guard_captain_quaid.lua
+++ b/data-otservbr-global/monster/bosses/guard_captain_quaid.lua
@@ -94,9 +94,9 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -580 },
{ name = "combat", interval = 2000, chance = 18, type = COMBAT_EARTHDAMAGE, minDamage = -500, maxDamage = -620, radius = 4, shootEffect = CONST_ANI_EARTH, effect = CONST_ME_GREEN_RINGS, target = true },
{ name = "combat", interval = 2000, chance = 22, type = COMBAT_PHYSICALDAMAGE, minDamage = -450, maxDamage = -700, shootEffect = CONST_ANI_THROWINGKNIFE, target = true },
- { name = "combat", interval = 2000, chance = 14, type = COMBAT_PHYSICALDAMAGE, minDamage = -350, maxDamage = -550, length = 5, spread = 3, effect = CONST_ME_EXPLOSIONHIT, target = false },
+ { name = "combat", interval = 2000, chance = 14, type = COMBAT_PHYSICALDAMAGE, minDamage = -350, maxDamage = -550, length = 5, spread = 0, effect = CONST_ME_EXPLOSIONHIT, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -400, maxDamage = -550, radius = 1, shootEffect = CONST_ANI_BURSTARROW, effect = CONST_ME_FIREAREA, target = true },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -480, length = 5, spread = 3, effect = CONST_ME_EXPLOSIONHIT, target = false },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -480, length = 5, spread = 0, effect = CONST_ME_EXPLOSIONHIT, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -450, radius = 3, effect = CONST_ME_GREEN_RINGS, target = false },
}
diff --git a/data-otservbr-global/monster/bosses/koshei_the_deathless.lua b/data-otservbr-global/monster/bosses/koshei_the_deathless.lua
index 5ad88a01c71..e0b1c5e1ecc 100644
--- a/data-otservbr-global/monster/bosses/koshei_the_deathless.lua
+++ b/data-otservbr-global/monster/bosses/koshei_the_deathless.lua
@@ -83,7 +83,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -170, condition = { type = CONDITION_POISON, totalDamage = 300, interval = 4000 } },
{ name = "combat", interval = 3000, chance = 9, type = COMBAT_LIFEDRAIN, minDamage = -60, maxDamage = -250, range = 1, effect = CONST_ME_MAGIC_BLUE, target = false },
{ name = "combat", interval = 1000, chance = 11, type = COMBAT_LIFEDRAIN, minDamage = -70, maxDamage = -135, radius = 3, effect = CONST_ME_MAGIC_RED, target = false },
- { name = "combat", interval = 2000, chance = 9, type = COMBAT_DEATHDAMAGE, minDamage = -50, maxDamage = -140, length = 8, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 9, type = COMBAT_DEATHDAMAGE, minDamage = -50, maxDamage = -140, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = false },
-- curse
{ name = "condition", type = CONDITION_CURSED, interval = 3000, chance = 15, minDamage = -54, maxDamage = -54, range = 1, target = false },
{ name = "speed", interval = 2000, chance = 15, speedChange = -900, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 30000 },
diff --git a/data-otservbr-global/monster/bosses/kroazur.lua b/data-otservbr-global/monster/bosses/kroazur.lua
index 14740f8f522..1664c14347a 100644
--- a/data-otservbr-global/monster/bosses/kroazur.lua
+++ b/data-otservbr-global/monster/bosses/kroazur.lua
@@ -95,7 +95,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 200, chance = 20, minDamage = 0, maxDamage = -650 },
{ name = "combat", interval = 200, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -500, target = false },
- { name = "combat", interval = 500, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -200, maxDamage = -300, length = 8, spread = 3, effect = CONST_ME_MORTAREA, target = true },
+ { name = "combat", interval = 500, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -200, maxDamage = -300, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = true },
{ name = "combat", interval = 500, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -250, maxDamage = -300, radius = 8, effect = CONST_ME_MORTAREA, target = false },
}
diff --git a/data-otservbr-global/monster/bosses/morshabaal.lua b/data-otservbr-global/monster/bosses/morshabaal.lua
index b177e932c65..4273977e2eb 100644
--- a/data-otservbr-global/monster/bosses/morshabaal.lua
+++ b/data-otservbr-global/monster/bosses/morshabaal.lua
@@ -97,7 +97,7 @@ monster.loot = {
}
monster.attacks = {
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -5500, length = 8, spread = 0, effect = CONST_ME_GREYCHAIN },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -5500, length = 8, spread = 0, effect = CONST_ME_WHITE_ENERGY_SPARK },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_ICEDAMAGE, minDamage = -4000, maxDamage = -30000, effect = CONST_ME_ICEATTACK },
{ name = "melee", interval = 2000, chance = 100, skill = 200, attack = 250 },
{ name = "combat", interval = 1000, chance = 7, type = COMBAT_MANADRAIN, minDamage = -100, maxDamage = -1000, range = 7, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_POFF, target = false },
@@ -110,7 +110,7 @@ monster.attacks = {
{ name = "outfit", interval = 1000, chance = 2, radius = 8, effect = CONST_ME_LOSEENERGY, target = false, duration = 5000, outfitMonster = "demon" },
{ name = "outfit", interval = 1000, chance = 2, radius = 8, effect = CONST_ME_LOSEENERGY, target = false, duration = 5000, outfitItem = 3058 },
{ name = "combat", interval = 1000, chance = 34, type = COMBAT_FIREDAMAGE, minDamage = -100, maxDamage = -900, range = 7, radius = 7, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
- { name = "combat", interval = 1000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -500, maxDamage = -850, length = 8, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 1000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -500, maxDamage = -850, length = 8, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/bosses/pythius_the_rotten.lua b/data-otservbr-global/monster/bosses/pythius_the_rotten.lua
index b635ea69133..80f694af6bc 100644
--- a/data-otservbr-global/monster/bosses/pythius_the_rotten.lua
+++ b/data-otservbr-global/monster/bosses/pythius_the_rotten.lua
@@ -81,10 +81,10 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -475 },
- { name = "combat", interval = 2000, chance = 16, type = COMBAT_PHYSICALDAMAGE, minDamage = -165, maxDamage = -200, range = 7, radius = 4, shootEffect = CONST_ANI_FIRE, target = true },
+ { name = "combat", interval = 2000, chance = 16, type = COMBAT_PHYSICALDAMAGE, minDamage = -165, maxDamage = -200, range = 7, radius = 4, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
{ name = "combat", interval = 2000, chance = 17, type = COMBAT_EARTHDAMAGE, minDamage = -55, maxDamage = -155, range = 7, radius = 4, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = true },
{ name = "combat", interval = 2500, chance = 14, type = COMBAT_EARTHDAMAGE, minDamage = -333, maxDamage = -413, length = 8, spread = 3, effect = CONST_ME_POISONAREA, target = false },
- { name = "combat", interval = 2500, chance = 22, type = COMBAT_MANADRAIN, minDamage = -85, maxDamage = -110, range = 7, radius = 4, shootEffect = CONST_ANI_ICE, target = true },
+ { name = "combat", interval = 2500, chance = 22, type = COMBAT_MANADRAIN, minDamage = -85, maxDamage = -110, range = 7, radius = 4, shootEffect = CONST_ANI_ICE, effect = CONST_ME_LOSEENERGY, target = true },
{ name = "speed", interval = 2000, chance = 20, speedChange = -300, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = true, duration = 30000 },
-- curse
{ name = "condition", type = CONDITION_CURSED, interval = 2000, chance = 15, range = 7, shootEffect = CONST_ANI_ICE, effect = CONST_ME_ICEATTACK, target = true },
diff --git a/data-otservbr-global/monster/bosses/splasher.lua b/data-otservbr-global/monster/bosses/splasher.lua
index b579d921327..60b89710c4f 100644
--- a/data-otservbr-global/monster/bosses/splasher.lua
+++ b/data-otservbr-global/monster/bosses/splasher.lua
@@ -77,8 +77,8 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -109, condition = { type = CONDITION_POISON, totalDamage = 5, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 8, type = COMBAT_LIFEDRAIN, minDamage = -106, maxDamage = -169, range = 7, effect = CONST_ME_MAGIC_RED, target = true },
- { name = "combat", interval = 2000, chance = 7, type = COMBAT_LIFEDRAIN, minDamage = -162, maxDamage = -228, length = 8, spread = 3, effect = CONST_ME_HITBYPOISON, target = false },
- { name = "combat", interval = 2000, chance = 9, type = COMBAT_ICEDAMAGE, minDamage = -134, maxDamage = -148, length = 8, spread = 3, effect = CONST_ME_BUBBLES, target = false },
+ { name = "combat", interval = 2000, chance = 7, type = COMBAT_LIFEDRAIN, minDamage = -162, maxDamage = -228, length = 8, spread = 0, effect = CONST_ME_HITBYPOISON, target = false },
+ { name = "combat", interval = 2000, chance = 9, type = COMBAT_ICEDAMAGE, minDamage = -134, maxDamage = -148, length = 8, spread = 0, effect = CONST_ME_BUBBLES, target = false },
{ name = "combat", interval = 2000, chance = 12, type = COMBAT_ICEDAMAGE, minDamage = -101, maxDamage = -149, radius = 3, effect = CONST_ME_BUBBLES, target = false },
{ name = "speed", interval = 2000, chance = 20, speedChange = -300, range = 1, effect = CONST_ME_MAGIC_RED, target = false, duration = 3000 },
}
diff --git a/data-otservbr-global/monster/bosses/the_abomination.lua b/data-otservbr-global/monster/bosses/the_abomination.lua
index 54df2943528..5d0c02c4b14 100644
--- a/data-otservbr-global/monster/bosses/the_abomination.lua
+++ b/data-otservbr-global/monster/bosses/the_abomination.lua
@@ -92,10 +92,10 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 90, attack = 120 },
- { name = "speed", interval = 1000, chance = 12, speedChange = -800, radius = 6, effect = CONST_ME_POISONAREA, target = false, duration = 10000 },
+ { name = "speed", interval = 1000, chance = 12, speedChange = -100, radius = 6, effect = CONST_ME_POISONAREA, target = false, duration = 10000 },
{ name = "combat", interval = 1000, chance = 9, type = COMBAT_EARTHDAMAGE, minDamage = -200, maxDamage = -650, radius = 4, effect = CONST_ME_POISONAREA, target = false },
{ name = "combat", interval = 1000, chance = 11, type = COMBAT_LIFEDRAIN, minDamage = -400, maxDamage = -900, radius = 4, shootEffect = CONST_ANI_POISON, effect = CONST_ME_SOUND_GREEN, target = true },
- { name = "combat", interval = 2000, chance = 19, type = COMBAT_PHYSICALDAMAGE, minDamage = -350, maxDamage = -850, length = 7, spread = 3, shootEffect = CONST_ANI_POISON, target = false },
+ { name = "combat", interval = 2000, chance = 19, type = COMBAT_PHYSICALDAMAGE, minDamage = -350, maxDamage = -850, length = 7, spread = 0, shootEffect = CONST_ANI_POISON, effect = CONST_ME_HITBYPOISON, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/bosses/the_astral_source.lua b/data-otservbr-global/monster/bosses/the_astral_source.lua
index 6be4ef6fba7..abc46bfc1d4 100644
--- a/data-otservbr-global/monster/bosses/the_astral_source.lua
+++ b/data-otservbr-global/monster/bosses/the_astral_source.lua
@@ -66,7 +66,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -330 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -500, range = 7, radius = 6, shootEffect = CONST_ANI_ENERGYBALL, effect = CONST_ME_PURPLEENERGY, target = true },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -500, range = 7, radius = 6, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_ENERGYHIT, target = true },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -400, length = 5, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -400, length = 5, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_MANADRAIN, minDamage = -200, maxDamage = -400, radius = 5, effect = CONST_ME_MAGIC_BLUE, target = false },
}
diff --git a/data-otservbr-global/monster/bosses/the_book_of_death.lua b/data-otservbr-global/monster/bosses/the_book_of_death.lua
index c6445b9f45c..6cea3d844aa 100644
--- a/data-otservbr-global/monster/bosses/the_book_of_death.lua
+++ b/data-otservbr-global/monster/bosses/the_book_of_death.lua
@@ -67,7 +67,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/bosses/the_collector.lua b/data-otservbr-global/monster/bosses/the_collector.lua
index 3dd239b3ed0..b63f6c8ace3 100644
--- a/data-otservbr-global/monster/bosses/the_collector.lua
+++ b/data-otservbr-global/monster/bosses/the_collector.lua
@@ -67,7 +67,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 100, attack = 40 },
- { name = "speed", interval = 1000, chance = 13, speedChange = -800, length = 8, spread = 3, effect = CONST_ME_ENERGYHIT, target = false, duration = 20000 },
+ { name = "speed", interval = 1000, chance = 13, speedChange = -100, length = 8, spread = 0, effect = CONST_ME_ENERGYHIT, target = false, duration = 20000 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -85, range = 7, shootEffect = CONST_ANI_LARGEROCK, target = false },
{ name = "melee", interval = 2000, chance = 15, minDamage = -10, maxDamage = -80 },
}
diff --git a/data-otservbr-global/monster/bosses/visco.lua b/data-otservbr-global/monster/bosses/visco.lua
index 6b4d0adb1a0..96223ee28c0 100644
--- a/data-otservbr-global/monster/bosses/visco.lua
+++ b/data-otservbr-global/monster/bosses/visco.lua
@@ -92,7 +92,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 200, attack = 200 },
- { name = "combat", interval = 2000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -500, maxDamage = -1500, length = 8, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -500, maxDamage = -1500, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 2000, chance = 30, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -1300, radius = 3, effect = CONST_ME_POISONAREA, target = false },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_MANADRAIN, minDamage = -50, maxDamage = -130, range = 7, effect = CONST_ME_MAGIC_GREEN, target = true },
{ name = "speed", interval = 2000, chance = 20, speedChange = -500, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 20000 },
diff --git a/data-otservbr-global/monster/bosses/weakened_shlorg.lua b/data-otservbr-global/monster/bosses/weakened_shlorg.lua
index af96e3d5389..615bd45f158 100644
--- a/data-otservbr-global/monster/bosses/weakened_shlorg.lua
+++ b/data-otservbr-global/monster/bosses/weakened_shlorg.lua
@@ -89,7 +89,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 150, attack = 50, condition = { type = CONDITION_POISON, totalDamage = 180, interval = 4000 } },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -90, maxDamage = -180, length = 4, spread = 3, effect = CONST_ME_MAGIC_GREEN, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -90, maxDamage = -180, length = 4, spread = 0, effect = CONST_ME_MAGIC_GREEN, target = false },
{ name = "combat", interval = 2000, chance = 14, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -150, radius = 5, effect = CONST_ME_GREEN_RINGS, target = false },
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 2000, chance = 13, minDamage = -360, maxDamage = -440, radius = 5, effect = CONST_ME_GREEN_RINGS, target = false },
diff --git a/data-otservbr-global/monster/bosses/zarabustor.lua b/data-otservbr-global/monster/bosses/zarabustor.lua
index a9e7f9b3fc8..8bb36a5e904 100644
--- a/data-otservbr-global/monster/bosses/zarabustor.lua
+++ b/data-otservbr-global/monster/bosses/zarabustor.lua
@@ -95,7 +95,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = 0, maxDamage = -250, range = 7, radius = 3, shootEffect = CONST_ANI_BURSTARROW, effect = CONST_ME_FIREAREA, target = true },
{ name = "firefield", interval = 2000, chance = 10, range = 7, radius = 2, shootEffect = CONST_ANI_FIRE, target = true },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -250, range = 7, shootEffect = CONST_ANI_ENERGY, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -130, maxDamage = -350, length = 8, spread = 3, effect = CONST_ME_BIGCLOUDS, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -130, maxDamage = -350, length = 8, spread = 0, effect = CONST_ME_BIGCLOUDS, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = 0, maxDamage = -250, range = 7, target = false },
{ name = "speed", interval = 2000, chance = 15, speedChange = -330, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 20000 },
{ name = "warlock skill reducer", interval = 2000, chance = 5, range = 5, target = false },
diff --git a/data-otservbr-global/monster/bosses/zushuka.lua b/data-otservbr-global/monster/bosses/zushuka.lua
index 968e0c3c2dc..2491261be7b 100644
--- a/data-otservbr-global/monster/bosses/zushuka.lua
+++ b/data-otservbr-global/monster/bosses/zushuka.lua
@@ -110,9 +110,9 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -560 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = 0, maxDamage = -100, length = 8, spread = 3, effect = CONST_ME_ICEATTACK, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = 0, maxDamage = -100, length = 8, spread = 0, effect = CONST_ME_ICEATTACK, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_ICEDAMAGE, minDamage = 0, maxDamage = -110, range = 7, shootEffect = CONST_ANI_SNOWBALL, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -300, maxDamage = -750, length = 8, spread = 3, effect = CONST_ME_ICEAREA, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -300, maxDamage = -750, length = 8, spread = 0, effect = CONST_ME_ICEAREA, target = false },
{ name = "outfit", interval = 2000, chance = 10, range = 7, effect = CONST_ME_MAGIC_BLUE, target = false, duration = 4000, outfitItem = 7172 },
{ name = "speed", interval = 2000, chance = 15, speedChange = -330, range = 7, effect = CONST_ME_ICETORNADO, target = false, duration = 20000 },
}
diff --git a/data-otservbr-global/monster/constructs/golden_servant_replica.lua b/data-otservbr-global/monster/constructs/golden_servant_replica.lua
index 4a93d0d9635..c5539f6d2d4 100644
--- a/data-otservbr-global/monster/constructs/golden_servant_replica.lua
+++ b/data-otservbr-global/monster/constructs/golden_servant_replica.lua
@@ -93,7 +93,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 40, attack = 40 },
- { name = "combat", interval = 2000, chance = 11, type = COMBAT_FIREDAMAGE, minDamage = -80, maxDamage = -110, length = 5, spread = 1, effect = CONST_ME_YELLOWENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 11, type = COMBAT_FIREDAMAGE, minDamage = -80, maxDamage = -110, length = 5, spread = 0, effect = CONST_ME_YELLOWENERGY, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -70, maxDamage = -110, range = 7, radius = 4, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_PURPLEENERGY, target = true },
}
diff --git a/data-otservbr-global/monster/constructs/ice_golem.lua b/data-otservbr-global/monster/constructs/ice_golem.lua
index 7e7d42d0643..0ab245558c1 100644
--- a/data-otservbr-global/monster/constructs/ice_golem.lua
+++ b/data-otservbr-global/monster/constructs/ice_golem.lua
@@ -94,7 +94,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -220 },
- { name = "speed", interval = 1000, chance = 13, speedChange = -800, length = 8, spread = 3, effect = CONST_ME_ENERGYHIT, target = false, duration = 20000 },
+ { name = "speed", interval = 1000, chance = 13, speedChange = -100, length = 8, spread = 0, effect = CONST_ME_ENERGYHIT, target = false, duration = 20000 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_ICEDAMAGE, minDamage = -50, maxDamage = -85, range = 7, shootEffect = CONST_ANI_SMALLICE, effect = CONST_ME_ICEATTACK, target = false },
{ name = "ice golem skill reducer", interval = 2000, chance = 10, target = false },
}
diff --git a/data-otservbr-global/monster/constructs/infected_weeper.lua b/data-otservbr-global/monster/constructs/infected_weeper.lua
index e302618f3eb..4bcccd5b9fa 100644
--- a/data-otservbr-global/monster/constructs/infected_weeper.lua
+++ b/data-otservbr-global/monster/constructs/infected_weeper.lua
@@ -91,7 +91,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -280 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -250, maxDamage = -700, length = 5, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "combat", interval = 2000, chance = 30, type = COMBAT_FIREDAMAGE, minDamage = -80, maxDamage = -250, radius = 3, effect = CONST_ME_HITBYFIRE, target = false },
- { name = "speed", interval = 2000, chance = 10, speedChange = -800, length = 5, spread = 3, effect = CONST_ME_BLOCKHIT, target = false, duration = 30000 },
+ { name = "speed", interval = 2000, chance = 10, speedChange = -100, length = 5, spread = 3, effect = CONST_ME_BLOCKHIT, target = false, duration = 30000 },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/constructs/lava_golem.lua b/data-otservbr-global/monster/constructs/lava_golem.lua
index 0aa0548574e..38db564d494 100644
--- a/data-otservbr-global/monster/constructs/lava_golem.lua
+++ b/data-otservbr-global/monster/constructs/lava_golem.lua
@@ -108,11 +108,11 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -400 },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -350, maxDamage = -700, length = 8, spread = 3, effect = CONST_ME_FIREATTACK, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -350, maxDamage = -700, length = 8, spread = 0, effect = CONST_ME_FIREATTACK, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -600, maxDamage = -1300, length = 8, spread = 3, effect = CONST_ME_MORTAREA, target = false },
{ name = "lava golem soulfire", interval = 2000, chance = 15, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -220, maxDamage = -350, radius = 4, effect = CONST_ME_FIREAREA, target = true },
- { name = "speed", interval = 2000, chance = 10, speedChange = -800, length = 5, spread = 3, effect = CONST_ME_BLOCKHIT, target = false, duration = 30000 },
+ { name = "speed", interval = 2000, chance = 10, speedChange = -100, length = 5, spread = 3, effect = CONST_ME_BLOCKHIT, target = false, duration = 30000 },
{ name = "combat", interval = 2000, chance = 30, type = COMBAT_FIREDAMAGE, minDamage = -280, maxDamage = -350, radius = 3, effect = CONST_ME_HITBYFIRE, target = false },
}
diff --git a/data-otservbr-global/monster/constructs/magma_crawler.lua b/data-otservbr-global/monster/constructs/magma_crawler.lua
index d9c5c44080b..84ad15af13b 100644
--- a/data-otservbr-global/monster/constructs/magma_crawler.lua
+++ b/data-otservbr-global/monster/constructs/magma_crawler.lua
@@ -106,12 +106,12 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -203 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -1100, length = 8, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -1100, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = false },
{ name = "magma crawler wave", interval = 2000, chance = 15, minDamage = -290, maxDamage = -800, target = false },
{ name = "magma crawler soulfire", interval = 2000, chance = 20, target = false },
{ name = "soulfire rune", interval = 2000, chance = 10, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -140, maxDamage = -180, radius = 3, effect = CONST_ME_HITBYFIRE, target = false },
- { name = "speed", interval = 2000, chance = 10, speedChange = -800, radius = 2, effect = CONST_ME_MAGIC_RED, target = false, duration = 20000 },
+ { name = "speed", interval = 2000, chance = 10, speedChange = -100, radius = 2, effect = CONST_ME_MAGIC_RED, target = false, duration = 20000 },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/constructs/metal_gargoyle.lua b/data-otservbr-global/monster/constructs/metal_gargoyle.lua
index 206346bf4f2..1cea2d7d8ac 100644
--- a/data-otservbr-global/monster/constructs/metal_gargoyle.lua
+++ b/data-otservbr-global/monster/constructs/metal_gargoyle.lua
@@ -97,7 +97,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 84, attack = 50 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -125, maxDamage = -230, length = 8, spread = 3, effect = CONST_ME_YELLOWENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -125, maxDamage = -230, length = 8, spread = 0, effect = CONST_ME_YELLOWENERGY, target = false },
{ name = "combat", interval = 2000, chance = 9, type = COMBAT_LIFEDRAIN, minDamage = -85, maxDamage = -150, range = 7, radius = 3, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = true },
{ name = "metal gargoyle curse", interval = 2000, chance = 13, target = false },
}
diff --git a/data-otservbr-global/monster/constructs/orewalker.lua b/data-otservbr-global/monster/constructs/orewalker.lua
index 767b8a049ae..0ebf08181ff 100644
--- a/data-otservbr-global/monster/constructs/orewalker.lua
+++ b/data-otservbr-global/monster/constructs/orewalker.lua
@@ -113,7 +113,7 @@ monster.attacks = {
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -800, maxDamage = -1080, radius = 3, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_SMALLPLANTS, target = true },
{ name = "drunk", interval = 2000, chance = 15, radius = 4, effect = CONST_ME_SOUND_PURPLE, target = false, duration = 6000 },
- { name = "speed", interval = 2000, chance = 15, speedChange = -800, radius = 2, effect = CONST_ME_MAGIC_RED, target = false, duration = 20000 },
+ { name = "speed", interval = 2000, chance = 15, speedChange = -100, radius = 2, effect = CONST_ME_MAGIC_RED, target = false, duration = 20000 },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/constructs/stone_devourer.lua b/data-otservbr-global/monster/constructs/stone_devourer.lua
index 4af345b23d7..5a9174c3129 100644
--- a/data-otservbr-global/monster/constructs/stone_devourer.lua
+++ b/data-otservbr-global/monster/constructs/stone_devourer.lua
@@ -105,7 +105,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -990 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -230, maxDamage = -460, range = 7, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_STONES, target = true },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -650, range = 7, shootEffect = CONST_ANI_LARGEROCK, target = true },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -150, maxDamage = -260, length = 5, spread = 3, effect = CONST_ME_STONES, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -150, maxDamage = -260, length = 5, spread = 0, effect = CONST_ME_STONES, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/constructs/walker.lua b/data-otservbr-global/monster/constructs/walker.lua
index 3ebcd2cc468..354f8fc2e6e 100644
--- a/data-otservbr-global/monster/constructs/walker.lua
+++ b/data-otservbr-global/monster/constructs/walker.lua
@@ -94,7 +94,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 70, attack = 50 },
{ name = "walker skill reducer", interval = 2000, chance = 21, target = false },
- { name = "combat", interval = 2000, chance = 17, type = COMBAT_FIREDAMAGE, minDamage = -125, maxDamage = -245, length = 8, spread = 3, effect = CONST_ME_EXPLOSIONHIT, target = false },
+ { name = "combat", interval = 2000, chance = 17, type = COMBAT_FIREDAMAGE, minDamage = -125, maxDamage = -245, length = 8, spread = 0, effect = CONST_ME_EXPLOSIONHIT, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/constructs/weeper.lua b/data-otservbr-global/monster/constructs/weeper.lua
index 29633af26e2..63dfa572727 100644
--- a/data-otservbr-global/monster/constructs/weeper.lua
+++ b/data-otservbr-global/monster/constructs/weeper.lua
@@ -99,9 +99,9 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -450 },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -400, maxDamage = -1000, length = 8, spread = 3, effect = CONST_ME_FIREATTACK, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -400, maxDamage = -1000, length = 8, spread = 0, effect = CONST_ME_FIREATTACK, target = false },
{ name = "combat", interval = 3000, chance = 100, type = COMBAT_FIREDAMAGE, minDamage = -80, maxDamage = -250, radius = 3, effect = CONST_ME_HITBYFIRE, target = false },
- { name = "speed", interval = 2000, chance = 10, speedChange = -800, length = 5, spread = 3, effect = CONST_ME_BLOCKHIT, target = false, duration = 30000 },
+ { name = "speed", interval = 2000, chance = 10, speedChange = -100, length = 5, spread = 0, effect = CONST_ME_BLOCKHIT, target = false, duration = 30000 },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/demons/dawnfire_asura.lua b/data-otservbr-global/monster/demons/dawnfire_asura.lua
index 30fa645b924..a3b50cfef84 100644
--- a/data-otservbr-global/monster/demons/dawnfire_asura.lua
+++ b/data-otservbr-global/monster/demons/dawnfire_asura.lua
@@ -107,11 +107,10 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -269 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = 0, maxDamage = -70, range = 7, target = false },
- { name = "firefield", interval = 2000, chance = 10, range = 7, radius = 1, shootEffect = CONST_ANI_FIRE, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -50, maxDamage = -200, length = 8, spread = 3, effect = CONST_ME_PURPLEENERGY, target = false },
- { name = "energy strike", interval = 2000, chance = 10, minDamage = -10, maxDamage = -100, range = 1, target = false },
- { name = "speed", interval = 2000, chance = 15, speedChange = -100, radius = 1, effect = CONST_ME_MAGIC_RED, target = true, duration = 30000 },
+ { name = "combat", interval = 3700, chance = 17, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -300, length = 8, spread = 0, effect = CONST_ME_PURPLEENERGY, target = false },
+ { name = "combat", interval = 3200, chance = 25, type = COMBAT_DEATHDAMAGE, minDamage = -100, maxDamage = -350, radius = 4, range = 5, target = true, effect = CONST_ME_MORTAREA },
+ { name = "combat", interval = 2700, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -95, maxDamage = -180, range = 3, shootEffect = CONST_ANI_FIRE, target = true },
+ { name = "speed", interval = 2000, chance = 20, speedChange = -100, radius = 1, shootEffect = CONST_ANI_EXPLOSION, effect = CONST_ME_SLEEP, target = true, duration = 15000 },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/demons/demon_outcast.lua b/data-otservbr-global/monster/demons/demon_outcast.lua
index 10827c7d5a4..93c643d53dc 100644
--- a/data-otservbr-global/monster/demons/demon_outcast.lua
+++ b/data-otservbr-global/monster/demons/demon_outcast.lua
@@ -115,8 +115,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -400 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -250, maxDamage = -450, length = 6, spread = 3, effect = CONST_ME_PURPLEENERGY, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -350, maxDamage = -550, length = 8, spread = 3, effect = CONST_ME_YELLOWENERGY, target = true },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -250, maxDamage = -450, length = 6, spread = 0, effect = CONST_ME_PURPLEENERGY, target = true },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -350, maxDamage = -550, length = 8, spread = 0, effect = CONST_ME_YELLOWENERGY, target = true },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -100, maxDamage = -250, radius = 3, effect = CONST_ME_ENERGYHIT, target = true },
{ name = "demon outcast skill reducer", interval = 2000, chance = 10, range = 5, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -80, maxDamage = -150, radius = 4, effect = CONST_ME_MAGIC_GREEN, target = false },
diff --git a/data-otservbr-global/monster/demons/duskbringer.lua b/data-otservbr-global/monster/demons/duskbringer.lua
index 91a8230c84c..4d7c435f5ca 100644
--- a/data-otservbr-global/monster/demons/duskbringer.lua
+++ b/data-otservbr-global/monster/demons/duskbringer.lua
@@ -82,9 +82,9 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -350 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -165, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -350, maxDamage = -720, length = 8, spread = 3, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -300, length = 7, spread = 3, effect = CONST_ME_EXPLOSIONAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -225, maxDamage = -275, radius = 4, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -350, maxDamage = -720, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -300, length = 7, spread = 0, effect = CONST_ME_EXPLOSIONAREA, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -225, maxDamage = -275, radius = 4, effect = CONST_ME_MORTAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/demons/floating_savant.lua b/data-otservbr-global/monster/demons/floating_savant.lua
index 0e63eb84602..dbe874c9c5f 100644
--- a/data-otservbr-global/monster/demons/floating_savant.lua
+++ b/data-otservbr-global/monster/demons/floating_savant.lua
@@ -97,7 +97,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -390, maxDamage = -480, range = 7, shootEffect = CONST_ANI_FIRE, target = false },
{ name = "combat", interval = 2000, chance = 14, type = COMBAT_ENERGYDAMAGE, minDamage = -390, maxDamage = -480, range = 7, shootEffect = CONST_ANI_ENERGY, target = false },
{ name = "combat", interval = 2000, chance = 12, type = COMBAT_FIREDAMAGE, minDamage = -300, maxDamage = -400, radius = 3, effect = CONST_ME_EXPLOSIONAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -490, maxDamage = -630, length = 4, spread = 3, effect = CONST_ME_HITBYFIRE, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -490, maxDamage = -630, length = 4, spread = 0, effect = CONST_ME_HITBYFIRE, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/demons/frost_flower_asura.lua b/data-otservbr-global/monster/demons/frost_flower_asura.lua
index 6013179e970..0f73f178e59 100644
--- a/data-otservbr-global/monster/demons/frost_flower_asura.lua
+++ b/data-otservbr-global/monster/demons/frost_flower_asura.lua
@@ -107,7 +107,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -110, maxDamage = -400 },
- { name = "combat", interval = 1300, chance = 14, type = COMBAT_HOLYDAMAGE, minDamage = -185, maxDamage = -210, length = 8, spread = 3, effect = CONST_ME_ICETORNADO, target = false },
+ { name = "combat", interval = 1300, chance = 14, type = COMBAT_HOLYDAMAGE, minDamage = -185, maxDamage = -210, length = 8, spread = 0, effect = CONST_ME_ICETORNADO, target = false },
{ name = "combat", interval = 1000, chance = 9, type = COMBAT_ICEDAMAGE, minDamage = -120, maxDamage = -200, range = 7, shootEffect = CONST_ANI_SMALLICE, effect = CONST_ME_ICEATTACK, target = true },
}
diff --git a/data-otservbr-global/monster/demons/fury.lua b/data-otservbr-global/monster/demons/fury.lua
index 7c990c16b5e..cfa187717a8 100644
--- a/data-otservbr-global/monster/demons/fury.lua
+++ b/data-otservbr-global/monster/demons/fury.lua
@@ -102,12 +102,12 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -510 },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -200, maxDamage = -300, length = 8, spread = 3, effect = CONST_ME_EXPLOSIONAREA, target = false },
- { name = "combat", interval = 2000, chance = 5, type = COMBAT_DEATHDAMAGE, minDamage = -120, maxDamage = -700, length = 8, spread = 3, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -120, maxDamage = -300, radius = 4, target = false },
+ { name = "combat", interval = 2000, chance = 5, type = COMBAT_DEATHDAMAGE, minDamage = -120, maxDamage = -700, length = 8, spread = 3, effect = CONST_ME_DRAWBLOOD, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -120, maxDamage = -300, radius = 4, effect = CONST_ME_DRAWBLOOD, target = false },
{ name = "fury skill reducer", interval = 2000, chance = 5, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -120, maxDamage = -300, radius = 3, effect = CONST_ME_HITAREA, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -125, maxDamage = -250, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_SMALLCLOUDS, target = false },
- { name = "speed", interval = 2000, chance = 15, speedChange = -800, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_SMALLCLOUDS, target = false, duration = 30000 },
+ { name = "speed", interval = 2000, chance = 15, speedChange = -100, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_SMALLCLOUDS, target = false, duration = 30000 },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/demons/grimeleech.lua b/data-otservbr-global/monster/demons/grimeleech.lua
index 8ef43ffadcc..8db5e5d7069 100644
--- a/data-otservbr-global/monster/demons/grimeleech.lua
+++ b/data-otservbr-global/monster/demons/grimeleech.lua
@@ -113,10 +113,10 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 70, attack = 80 },
{ name = "melee", interval = 2000, chance = 2, skill = 153, attack = 100 },
- { name = "combat", interval = 2000, chance = 14, type = COMBAT_PHYSICALDAMAGE, minDamage = 100, maxDamage = -565, range = 7, shootEffect = CONST_ANI_DEATH, effect = CONST_ME_MORTAREA, target = true },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_DEATHDAMAGE, minDamage = -150, maxDamage = -220, length = 8, spread = 3, target = false },
- { name = "combat", interval = 2000, chance = 13, type = COMBAT_DEATHDAMAGE, minDamage = -225, maxDamage = -375, radius = 4, target = false },
- { name = "combat", interval = 2000, chance = 9, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -300, length = 8, spread = 3, effect = CONST_ME_EXPLOSIONAREA, target = false },
+ { name = "combat", interval = 2000, chance = 14, type = COMBAT_LIFEDRAINDAMAGE, minDamage = 100, maxDamage = -565, range = 7, shootEffect = CONST_ANI_DEATH, effect = CONST_ME_MORTAREA, target = true },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_LIFEDRAINDAMAGE, minDamage = -150, maxDamage = -220, length = 8, spread = 0, effect = CONST_ME_MAGIC_GREEN, target = false },
+ { name = "combat", interval = 2000, chance = 13, type = COMBAT_DEATHDAMAGE, minDamage = -225, maxDamage = -375, radius = 4, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 9, type = COMBAT_MANADRAINDAMAGE, minDamage = 0, maxDamage = -300, length = 8, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/demons/hellfire_fighter.lua b/data-otservbr-global/monster/demons/hellfire_fighter.lua
index 1d6610844b5..446234df576 100644
--- a/data-otservbr-global/monster/demons/hellfire_fighter.lua
+++ b/data-otservbr-global/monster/demons/hellfire_fighter.lua
@@ -98,7 +98,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -520 },
{ name = "firefield", interval = 2000, chance = 10, range = 7, radius = 3, shootEffect = CONST_ANI_FIRE, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -392, maxDamage = -1500, length = 8, spread = 3, effect = CONST_ME_FIREATTACK, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -392, maxDamage = -1500, length = 8, spread = 0, effect = CONST_ME_FIREATTACK, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -60, maxDamage = -330, range = 7, radius = 3, effect = CONST_ME_HITBYFIRE, target = false },
{ name = "hellfire fighter soulfire", interval = 2000, chance = 15, target = false },
}
diff --git a/data-otservbr-global/monster/demons/hellflayer.lua b/data-otservbr-global/monster/demons/hellflayer.lua
index f0b8b29df5c..93e9db81e1e 100644
--- a/data-otservbr-global/monster/demons/hellflayer.lua
+++ b/data-otservbr-global/monster/demons/hellflayer.lua
@@ -114,7 +114,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -170, maxDamage = -300, range = 7, shootEffect = CONST_ANI_POISON, target = false },
{ name = "choking fear drown", interval = 2000, chance = 20, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -250, maxDamage = -500, radius = 4, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -50, maxDamage = -200, length = 8, spread = 3, effect = CONST_ME_PURPLEENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -50, maxDamage = -200, length = 8, spread = 0, effect = CONST_ME_PURPLEENERGY, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -300, maxDamage = -550, radius = 1, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREATTACK, target = true },
{ name = "warlock skill reducer", interval = 2000, chance = 5, range = 5, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 300, maxDamage = -500, radius = 1, shootEffect = CONST_ANI_EXPLOSION, effect = CONST_ME_SLEEP, target = true },
diff --git a/data-otservbr-global/monster/demons/midnight_asura.lua b/data-otservbr-global/monster/demons/midnight_asura.lua
index 6eb53ae84a1..f73ceb8e519 100644
--- a/data-otservbr-global/monster/demons/midnight_asura.lua
+++ b/data-otservbr-global/monster/demons/midnight_asura.lua
@@ -112,12 +112,13 @@ monster.loot = {
}
monster.attacks = {
- { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -269 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = 0, maxDamage = -70, range = 7, target = false },
- { name = "firefield", interval = 2000, chance = 10, range = 7, radius = 1, shootEffect = CONST_ANI_FIRE, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -50, maxDamage = -200, length = 8, spread = 3, effect = CONST_ME_PURPLEENERGY, target = false },
- { name = "energy strike", interval = 2000, chance = 10, minDamage = -10, maxDamage = -100, range = 1, target = false },
- { name = "speed", interval = 2000, chance = 15, speedChange = -100, radius = 1, effect = CONST_ME_MAGIC_RED, target = true, duration = 30000 },
+ { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -387 },
+ { name = "combat", interval = 3300, chance = 10, type = COMBAT_MANADRAIN, minDamage = 0, maxDamage = -70, range = 7, target = true },
+ { name = "combat", interval = 3700, chance = 17, type = COMBAT_ENERGYDAMAGE, minDamage = -150, maxDamage = -200, length = 5, spread = 0, effect = CONST_ME_PURPLEENERGY, target = false },
+ { name = "combat", interval = 4100, chance = 27, type = COMBAT_DEATHDAMAGE, minDamage = -150, maxDamage = -300, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2700, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = -50, maxDamage = -200, range = 5, shootEffect = CONST_ANI_SUDDENDEATH, target = true },
+ { name = "combat", interval = 3100, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -50, maxDamage = -100, range = 1, shootEffect = CONST_ANI_ENERGY, target = true },
+ { name = "speed", interval = 2000, chance = 20, speedChange = -100, radius = 1, shootEffect = CONST_ANI_EXPLOSION, effect = CONST_ME_SLEEP, target = true, duration = 15000 },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/demons/plaguesmith.lua b/data-otservbr-global/monster/demons/plaguesmith.lua
index 6fbc96b533d..28470a0500a 100644
--- a/data-otservbr-global/monster/demons/plaguesmith.lua
+++ b/data-otservbr-global/monster/demons/plaguesmith.lua
@@ -115,7 +115,7 @@ monster.attacks = {
{ name = "melee", interval = 1500, chance = 100, minDamage = 0, maxDamage = -539, condition = { type = CONDITION_POISON, totalDamage = 200, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -60, maxDamage = -114, radius = 4, effect = CONST_ME_POISONAREA, target = false },
{ name = "plaguesmith wave", interval = 2000, chance = 10, minDamage = -100, maxDamage = -350, target = false },
- { name = "speed", interval = 2000, chance = 15, speedChange = -800, radius = 4, effect = CONST_ME_POISONAREA, target = false, duration = 30000 },
+ { name = "speed", interval = 2000, chance = 15, speedChange = -100, radius = 4, effect = CONST_ME_POISONAREA, target = false, duration = 30000 },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/demons/true_frost_flower_asura.lua b/data-otservbr-global/monster/demons/true_frost_flower_asura.lua
index 7a5a6998cf1..cd1b3bd8dda 100644
--- a/data-otservbr-global/monster/demons/true_frost_flower_asura.lua
+++ b/data-otservbr-global/monster/demons/true_frost_flower_asura.lua
@@ -110,8 +110,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -500, condition = { type = CONDITION_FREEZING, totalDamage = 400, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = 0, maxDamage = -250, range = 7, target = false },
- { name = "combat", interval = 1000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -550, maxDamage = -780, length = 8, spread = 3, effect = CONST_ME_ICETORNADO, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -300, length = 8, spread = 3, effect = CONST_ME_PURPLEENERGY, target = false },
+ { name = "combat", interval = 1000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -550, maxDamage = -780, length = 8, spread = 0, effect = CONST_ME_ICETORNADO, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -300, length = 8, spread = 0, effect = CONST_ME_PURPLEENERGY, target = false },
{ name = "speed", interval = 2000, chance = 15, speedChange = -100, radius = 1, effect = CONST_ME_MAGIC_RED, target = true, duration = 30000 },
}
diff --git a/data-otservbr-global/monster/demons/true_midnight_asura.lua b/data-otservbr-global/monster/demons/true_midnight_asura.lua
index 1327b384f97..ebdac293ea6 100644
--- a/data-otservbr-global/monster/demons/true_midnight_asura.lua
+++ b/data-otservbr-global/monster/demons/true_midnight_asura.lua
@@ -112,8 +112,8 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -450 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -500, maxDamage = -650, range = 5, effect = CONST_ME_MORTAREA, target = true }, --Death Missile
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -50, maxDamage = -280, range = 7, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -240, length = 8, spread = 3, effect = CONST_ME_PURPLEENERGY, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -500, maxDamage = -700, length = 8, spread = 3, effect = CONST_ME_BLACKSMOKE, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -240, length = 8, spread = 0, effect = CONST_ME_PURPLEENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -500, maxDamage = -700, length = 8, spread = 0, effect = CONST_ME_BLACKSMOKE, target = false },
{ name = "speed", interval = 2000, chance = 15, speedChange = -100, radius = 1, effect = CONST_ME_MAGIC_RED, target = true, duration = 30000 },
}
diff --git a/data-otservbr-global/monster/demons/vexclaw.lua b/data-otservbr-global/monster/demons/vexclaw.lua
index d13f5a5087d..d31045eacc8 100644
--- a/data-otservbr-global/monster/demons/vexclaw.lua
+++ b/data-otservbr-global/monster/demons/vexclaw.lua
@@ -121,9 +121,9 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -150, maxDamage = -250, range = 7, radius = 7, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
{ name = "choking fear drown", interval = 2000, chance = 20, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -150, maxDamage = -400, radius = 4, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -50, maxDamage = -200, length = 8, spread = 3, effect = CONST_ME_PURPLEENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -50, maxDamage = -200, length = 8, spread = 0, effect = CONST_ME_PURPLEENERGY, target = false },
{ name = "firefield", interval = 2000, chance = 10, range = 7, radius = 1, shootEffect = CONST_ANI_FIRE, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -300, maxDamage = -490, length = 8, spread = 3, effect = CONST_ME_PURPLEENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -300, maxDamage = -490, length = 8, spread = 0, effect = CONST_ME_PURPLEENERGY, target = false },
{ name = "energy strike", interval = 2000, chance = 10, minDamage = -210, maxDamage = -300, range = 1, target = false },
{ name = "speed", interval = 2000, chance = 15, speedChange = -300, radius = 1, effect = CONST_ME_MAGIC_RED, target = true, duration = 30000 },
}
diff --git a/data-otservbr-global/monster/dragons/frost_dragon.lua b/data-otservbr-global/monster/dragons/frost_dragon.lua
index 34814c4f569..0456307325a 100644
--- a/data-otservbr-global/monster/dragons/frost_dragon.lua
+++ b/data-otservbr-global/monster/dragons/frost_dragon.lua
@@ -107,7 +107,7 @@ monster.attacks = {
{ name = "speed", interval = 2000, chance = 15, speedChange = -850, length = 7, spread = 3, effect = CONST_ME_ICEATTACK, target = false, duration = 18000 },
{ name = "combat", interval = 2000, chance = 5, type = COMBAT_ICEDAMAGE, minDamage = -60, maxDamage = -120, radius = 3, effect = CONST_ME_ICETORNADO, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -100, maxDamage = -240, radius = 4, effect = CONST_ME_ICEAREA, target = true },
- { name = "combat", interval = 2000, chance = 5, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -220, length = 1, spread = 0, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 2000, chance = 5, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -220, length = 1, spread = 3, effect = CONST_ME_POFF, target = false },
{ name = "speed", interval = 2000, chance = 20, speedChange = -600, radius = 4, effect = CONST_ME_ICEAREA, target = true, duration = 12000 },
}
diff --git a/data-otservbr-global/monster/dragons/ghastly_dragon.lua b/data-otservbr-global/monster/dragons/ghastly_dragon.lua
index a4e989ea21f..11ade52fea9 100644
--- a/data-otservbr-global/monster/dragons/ghastly_dragon.lua
+++ b/data-otservbr-global/monster/dragons/ghastly_dragon.lua
@@ -115,7 +115,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -80, maxDamage = -230, range = 7, effect = CONST_ME_MAGIC_RED, target = true },
{ name = "ghastly dragon wave", interval = 2000, chance = 10, minDamage = -120, maxDamage = -250, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = -110, maxDamage = -180, radius = 4, effect = CONST_ME_MORTAREA, target = false },
- { name = "speed", interval = 2000, chance = 20, speedChange = -800, range = 7, effect = CONST_ME_SMALLCLOUDS, target = true, duration = 30000 },
+ { name = "speed", interval = 2000, chance = 20, speedChange = -100, range = 7, effect = CONST_ME_SMALLCLOUDS, target = true, duration = 30000 },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/elementals/cliff_strider.lua b/data-otservbr-global/monster/elementals/cliff_strider.lua
index b03a7f25932..2690f356f23 100644
--- a/data-otservbr-global/monster/elementals/cliff_strider.lua
+++ b/data-otservbr-global/monster/elementals/cliff_strider.lua
@@ -118,7 +118,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -800, radius = 4, shootEffect = CONST_ANI_LARGEROCK, effect = CONST_ME_STONES, target = true },
{ name = "cliff strider skill reducer", interval = 2000, chance = 10, target = false },
{ name = "cliff strider electrify", interval = 2000, chance = 15, range = 1, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -1000, length = 6, spread = 3, effect = CONST_ME_GROUNDSHAKER, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -1000, length = 6, spread = 0, effect = CONST_ME_GROUNDSHAKER, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_MANADRAIN, minDamage = -100, maxDamage = -300, radius = 4, effect = CONST_ME_YELLOWENERGY, target = false },
}
diff --git a/data-otservbr-global/monster/elementals/earth_elemental.lua b/data-otservbr-global/monster/elementals/earth_elemental.lua
index 84ab9418e29..f71d6a7964d 100644
--- a/data-otservbr-global/monster/elementals/earth_elemental.lua
+++ b/data-otservbr-global/monster/elementals/earth_elemental.lua
@@ -96,7 +96,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -72, maxDamage = -105, range = 7, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_GREEN_RINGS, target = true },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -100, range = 7, radius = 2, shootEffect = CONST_ANI_LARGEROCK, effect = CONST_ME_POFF, target = true },
-- poison
- { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 20, minDamage = -200, maxDamage = -260, length = 6, spread = 3, effect = CONST_ME_BIGPLANTS, target = false },
+ { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 20, minDamage = -200, maxDamage = -260, length = 6, spread = 0, effect = CONST_ME_BIGPLANTS, target = false },
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -100, maxDamage = -140, radius = 5, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = false },
{ name = "speed", interval = 2000, chance = 10, speedChange = -330, range = 5, effect = CONST_ME_SMALLPLANTS, target = true, duration = 5000 },
diff --git a/data-otservbr-global/monster/elementals/ironblight.lua b/data-otservbr-global/monster/elementals/ironblight.lua
index f6391182c10..a7fba4ab036 100644
--- a/data-otservbr-global/monster/elementals/ironblight.lua
+++ b/data-otservbr-global/monster/elementals/ironblight.lua
@@ -108,9 +108,9 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -300 },
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -460, maxDamage = -480, radius = 6, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_ICEDAMAGE, minDamage = -260, maxDamage = -350, length = 7, spread = 3, shootEffect = CONST_ANI_ICE, effect = CONST_ME_ICEATTACK, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_ICEDAMAGE, minDamage = -260, maxDamage = -350, length = 7, spread = 0, shootEffect = CONST_ANI_ICE, effect = CONST_ME_ICEATTACK, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_EARTHDAMAGE, minDamage = -180, maxDamage = -250, radius = 2, shootEffect = CONST_ANI_GREENSTAR, effect = CONST_ME_BIGPLANTS, target = true },
- { name = "speed", interval = 2000, chance = 10, speedChange = -800, length = 5, spread = 3, effect = CONST_ME_BLOCKHIT, target = false, duration = 30000 },
+ { name = "speed", interval = 2000, chance = 10, speedChange = -100, length = 5, spread = 0, effect = CONST_ME_BLOCKHIT, target = false, duration = 30000 },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/elementals/lava_lurker.lua b/data-otservbr-global/monster/elementals/lava_lurker.lua
index 675d807fa9e..6a6e236f8c8 100644
--- a/data-otservbr-global/monster/elementals/lava_lurker.lua
+++ b/data-otservbr-global/monster/elementals/lava_lurker.lua
@@ -81,8 +81,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
- { name = "combat", interval = 1000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -70, maxDamage = -300, range = 7, length = 3, spread = 3, effect = CONST_ME_HITBYFIRE, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_FIREDAMAGE, minDamage = 0, maxDamage = -100, range = 7, length = 6, spread = 3, effect = CONST_ME_HITBYFIRE, target = false },
+ { name = "combat", interval = 1000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -70, maxDamage = -300, range = 7, length = 3, spread = 0, effect = CONST_ME_HITBYFIRE, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_FIREDAMAGE, minDamage = 0, maxDamage = -100, range = 7, length = 6, spread = 0, effect = CONST_ME_HITBYFIRE, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/elementals/massive_earth_elemental.lua b/data-otservbr-global/monster/elementals/massive_earth_elemental.lua
index 674a26d553e..e894319b6ec 100644
--- a/data-otservbr-global/monster/elementals/massive_earth_elemental.lua
+++ b/data-otservbr-global/monster/elementals/massive_earth_elemental.lua
@@ -98,7 +98,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -99, maxDamage = -145, range = 7, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_GREEN_RINGS, target = true },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = -95, maxDamage = -169, range = 7, radius = 2, shootEffect = CONST_ANI_LARGEROCK, effect = CONST_ME_POFF, target = true },
-- poison
- { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 15, minDamage = -300, maxDamage = -320, length = 6, spread = 3, effect = CONST_ME_BIGPLANTS, target = false },
+ { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 15, minDamage = -300, maxDamage = -320, length = 6, spread = 0, effect = CONST_ME_BIGPLANTS, target = false },
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -200, maxDamage = -220, radius = 5, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = false },
{ name = "speed", interval = 2000, chance = 20, speedChange = -330, range = 5, effect = CONST_ME_SMALLPLANTS, target = true, duration = 5000 },
diff --git a/data-otservbr-global/monster/elementals/massive_fire_elemental.lua b/data-otservbr-global/monster/elementals/massive_fire_elemental.lua
index ab29c321263..e21cd8204dc 100644
--- a/data-otservbr-global/monster/elementals/massive_fire_elemental.lua
+++ b/data-otservbr-global/monster/elementals/massive_fire_elemental.lua
@@ -90,7 +90,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -300 },
{ name = "firefield", interval = 2000, chance = 10, range = 7, radius = 3, shootEffect = CONST_ANI_FIRE, target = false },
{ name = "firefield", interval = 2000, chance = 10, range = 7, radius = 3, shootEffect = CONST_ANI_FIRE, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -200, maxDamage = -700, length = 7, spread = 3, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -200, maxDamage = -700, length = 7, spread = 0, effect = CONST_ME_FIREAREA, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -60, maxDamage = -250, radius = 3, effect = CONST_ME_EXPLOSIONHIT, target = false },
{ name = "massive fire elemental soulfire", interval = 2000, chance = 15, target = false },
}
diff --git a/data-otservbr-global/monster/elementals/raging_fire.lua b/data-otservbr-global/monster/elementals/raging_fire.lua
index a5da1da9fe1..d83a26c3f81 100644
--- a/data-otservbr-global/monster/elementals/raging_fire.lua
+++ b/data-otservbr-global/monster/elementals/raging_fire.lua
@@ -77,7 +77,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 60, attack = 100 },
- { name = "combat", interval = 2000, chance = 9, type = COMBAT_FIREDAMAGE, minDamage = -65, maxDamage = -605, length = 7, spread = 3, target = false },
+ { name = "combat", interval = 2000, chance = 9, type = COMBAT_FIREDAMAGE, minDamage = -65, maxDamage = -605, length = 7, spread = 0, effect = CONST_ME_FIREAREA, target = false },
{ name = "massive fire elemental soulfire", interval = 2000, chance = 12, target = false },
{ name = "firefield", interval = 2000, chance = 11, range = 7, radius = 3, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_EXPLOSIONHIT, target = true },
{ name = "firefield", interval = 2000, chance = 11, radius = 3, effect = CONST_ME_HITBYFIRE, target = false },
diff --git a/data-otservbr-global/monster/event_creatures/memory_creatures/memory_of_a_frazzlemaw.lua b/data-otservbr-global/monster/event_creatures/memory_creatures/memory_of_a_frazzlemaw.lua
index c8181abc4e0..2c10fd67059 100644
--- a/data-otservbr-global/monster/event_creatures/memory_creatures/memory_of_a_frazzlemaw.lua
+++ b/data-otservbr-global/monster/event_creatures/memory_creatures/memory_of_a_frazzlemaw.lua
@@ -79,8 +79,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -100 },
-- bleed
- { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 10, minDamage = -50, maxDamage = -120, radius = 3, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -110, length = 5, spread = 3, effect = CONST_ME_EXPLOSIONAREA, target = false },
+ { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 10, minDamage = -50, maxDamage = -120, radius = 3, effect = CONST_ME_DRAWBLOOD, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -110, length = 5, spread = 0, effect = CONST_ME_EXPLOSIONAREA, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -100, radius = 2, shootEffect = CONST_ANI_LARGEROCK, effect = CONST_ME_STONES, target = true },
{ name = "speed", interval = 2000, chance = 15, speedChange = -600, radius = 5, effect = CONST_ME_MAGIC_RED, target = false, duration = 15000 },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -80, maxDamage = -150, radius = 4, effect = CONST_ME_MAGIC_RED, target = false },
diff --git a/data-otservbr-global/monster/event_creatures/memory_creatures/memory_of_a_fungus.lua b/data-otservbr-global/monster/event_creatures/memory_creatures/memory_of_a_fungus.lua
index 781372f05bc..0860ca7a275 100644
--- a/data-otservbr-global/monster/event_creatures/memory_creatures/memory_of_a_fungus.lua
+++ b/data-otservbr-global/monster/event_creatures/memory_creatures/memory_of_a_fungus.lua
@@ -77,8 +77,8 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -50, maxDamage = -150, range = 7, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_SMALLPLANTS, target = false },
{ name = "poisonfield", interval = 2000, chance = 20, radius = 4, target = false },
-- poison
- { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -30, maxDamage = -150, length = 8, spread = 3, effect = CONST_ME_GREEN_RINGS, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -80, maxDamage = -130, length = 5, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -30, maxDamage = -150, length = 8, spread = 0, effect = CONST_ME_GREEN_RINGS, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -80, maxDamage = -130, length = 5, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -50, maxDamage = -180, range = 7, radius = 3, effect = CONST_ME_HITBYPOISON, target = false },
}
diff --git a/data-otservbr-global/monster/event_creatures/memory_creatures/memory_of_a_manticore.lua b/data-otservbr-global/monster/event_creatures/memory_creatures/memory_of_a_manticore.lua
index 83811f94d61..15bd40073bd 100644
--- a/data-otservbr-global/monster/event_creatures/memory_creatures/memory_of_a_manticore.lua
+++ b/data-otservbr-global/monster/event_creatures/memory_creatures/memory_of_a_manticore.lua
@@ -70,7 +70,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -100 },
- { name = "combat", interval = 2000, chance = 13, type = COMBAT_FIREDAMAGE, minDamage = -50, maxDamage = -150, length = 8, spread = 3, effect = CONST_ME_HITBYFIRE, target = false },
+ { name = "combat", interval = 2000, chance = 13, type = COMBAT_FIREDAMAGE, minDamage = -50, maxDamage = -150, length = 8, spread = 0, effect = CONST_ME_HITBYFIRE, target = false },
{ name = "combat", interval = 4000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -50, maxDamage = -150, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, effect = CONST_ME_GREEN_RINGS, target = true },
{ name = "combat", interval = 2000, chance = 22, type = COMBAT_FIREDAMAGE, minDamage = -10, maxDamage = -100, range = 4, shootEffect = CONST_ANI_BURSTARROW, target = true },
}
diff --git a/data-otservbr-global/monster/event_creatures/memory_creatures/memory_of_a_shaper.lua b/data-otservbr-global/monster/event_creatures/memory_creatures/memory_of_a_shaper.lua
index ba877ecbfe6..25ef89c48b4 100644
--- a/data-otservbr-global/monster/event_creatures/memory_creatures/memory_of_a_shaper.lua
+++ b/data-otservbr-global/monster/event_creatures/memory_creatures/memory_of_a_shaper.lua
@@ -76,7 +76,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = -50, maxDamage = -100, range = 7, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_ENERGYHIT, target = true },
- { name = "combat", interval = 2000, chance = 35, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -100, length = 5, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 35, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -100, length = 5, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -50, maxDamage = -100, radius = 7, effect = CONST_ME_MAGIC_BLUE, target = false },
{ name = "speed", interval = 2000, chance = 9, speedChange = -440, effect = CONST_ME_GIANTICE, target = true, duration = 7000 },
}
diff --git a/data-otservbr-global/monster/extra_dimensional/courage_leech.lua b/data-otservbr-global/monster/extra_dimensional/courage_leech.lua
index 4942741341e..d8ad3147a8e 100644
--- a/data-otservbr-global/monster/extra_dimensional/courage_leech.lua
+++ b/data-otservbr-global/monster/extra_dimensional/courage_leech.lua
@@ -99,7 +99,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -700 },
{ name = "combat", interval = 2000, chance = 17, type = COMBAT_ENERGYDAMAGE, minDamage = -1100, maxDamage = -1400, radius = 4, shootEffect = CONST_ANI_ETHEREALSPEAR, effect = CONST_ME_ENERGYAREA, target = true },
{ name = "combat", interval = 3000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -1100, maxDamage = -1400, radius = 4, effect = CONST_ME_ENERGYHIT, target = false },
- { name = "combat", interval = 3000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -900, maxDamage = -1100, length = 7, spread = 1, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 3000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -900, maxDamage = -1100, length = 7, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_HOLYDAMAGE, minDamage = -1100, maxDamage = -1300, range = 7, shootEffect = CONST_ANI_SMALLHOLY, effect = CONST_ME_HOLYDAMAGE, target = true },
{ name = "energy chain", interval = 2000, chance = 20, minDamage = -900, maxDamage = -1000, range = 3, target = true },
}
diff --git a/data-otservbr-global/monster/extra_dimensional/instable_sparkion.lua b/data-otservbr-global/monster/extra_dimensional/instable_sparkion.lua
index 9ad49260b0d..f3e677200a6 100644
--- a/data-otservbr-global/monster/extra_dimensional/instable_sparkion.lua
+++ b/data-otservbr-global/monster/extra_dimensional/instable_sparkion.lua
@@ -95,7 +95,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -250 },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -250, maxDamage = -350, length = 6, spread = 3, effect = CONST_ME_GROUNDSHAKER, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -250, maxDamage = -350, length = 6, spread = 0, effect = CONST_ME_GROUNDSHAKER, target = false },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -150, maxDamage = -200, range = 5, shootEffect = CONST_ANI_ENERGYBALL, effect = CONST_ME_ENERGYHIT, target = true },
-- energy damage
{ name = "condition", type = CONDITION_ENERGY, interval = 2000, chance = 20, minDamage = -300, maxDamage = -600, range = 6, radius = 4, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_PURPLEENERGY, target = true },
diff --git a/data-otservbr-global/monster/extra_dimensional/sparkion.lua b/data-otservbr-global/monster/extra_dimensional/sparkion.lua
index f11b76bce6b..94933e33f5b 100644
--- a/data-otservbr-global/monster/extra_dimensional/sparkion.lua
+++ b/data-otservbr-global/monster/extra_dimensional/sparkion.lua
@@ -105,7 +105,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -400 },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -250, maxDamage = -400, length = 6, spread = 3, effect = CONST_ME_GROUNDSHAKER, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -250, maxDamage = -400, length = 6, spread = 0, effect = CONST_ME_GROUNDSHAKER, target = false },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -200, maxDamage = -400, range = 5, shootEffect = CONST_ANI_ENERGYBALL, effect = CONST_ME_ENERGYHIT, target = true },
-- energy damage
{ name = "condition", type = CONDITION_ENERGY, interval = 2000, chance = 20, minDamage = -300, maxDamage = -600, range = 6, radius = 4, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_PURPLEENERGY, target = true },
diff --git a/data-otservbr-global/monster/extra_dimensional/yielothax.lua b/data-otservbr-global/monster/extra_dimensional/yielothax.lua
index 487a8d5c30d..bfde638d1a8 100644
--- a/data-otservbr-global/monster/extra_dimensional/yielothax.lua
+++ b/data-otservbr-global/monster/extra_dimensional/yielothax.lua
@@ -104,10 +104,10 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 1000, chance = 100, minDamage = 0, maxDamage = -203 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -130, length = 4, spread = 3, effect = CONST_ME_ENERGYAREA, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -130, length = 4, spread = 0, effect = CONST_ME_ENERGYAREA, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -150, maxDamage = -250, radius = 3, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -70, maxDamage = -120, radius = 3, effect = CONST_ME_HITBYPOISON, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -50, maxDamage = -150, length = 4, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -50, maxDamage = -150, length = 4, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/familiars/sorcerer_familiar.lua b/data-otservbr-global/monster/familiars/sorcerer_familiar.lua
index b4685c8763c..31d61dfbf28 100644
--- a/data-otservbr-global/monster/familiars/sorcerer_familiar.lua
+++ b/data-otservbr-global/monster/familiars/sorcerer_familiar.lua
@@ -67,7 +67,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -280 },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_LIFEDRAIN, minDamage = -90, maxDamage = -150, length = 2, spread = 0, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_LIFEDRAIN, minDamage = -90, maxDamage = -150, length = 2, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -190, maxDamage = -210, length = 2, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "summon challenge", interval = 2000, chance = 40, target = false },
}
diff --git a/data-otservbr-global/monster/fey/arctic_faun.lua b/data-otservbr-global/monster/fey/arctic_faun.lua
index 89eb567738c..d3ab41582dd 100644
--- a/data-otservbr-global/monster/fey/arctic_faun.lua
+++ b/data-otservbr-global/monster/fey/arctic_faun.lua
@@ -101,7 +101,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/fey/boogy.lua b/data-otservbr-global/monster/fey/boogy.lua
index 997d476acec..681428a2713 100644
--- a/data-otservbr-global/monster/fey/boogy.lua
+++ b/data-otservbr-global/monster/fey/boogy.lua
@@ -99,7 +99,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -450 },
-- bleed
- { name = "condition", type = CONDITION_BLEEDING, interval = 3000, chance = 11, minDamage = -100, maxDamage = -300, radius = 6, shootEffect = CONST_ANI_WHIRLWINDCLUB, target = true },
+ { name = "condition", type = CONDITION_BLEEDING, interval = 3000, chance = 11, minDamage = -100, maxDamage = -300, radius = 6, shootEffect = CONST_ANI_WHIRLWINDCLUB, effect = CONST_ME_DRAWBLOOD, target = true },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -60, maxDamage = -115, range = 7, shootEffect = CONST_ANI_LARGEROCK, effect = CONST_ME_EXPLOSIONAREA, target = true },
}
diff --git a/data-otservbr-global/monster/giants/ogre_shaman.lua b/data-otservbr-global/monster/giants/ogre_shaman.lua
index 332230e478f..6e3dd2c2586 100644
--- a/data-otservbr-global/monster/giants/ogre_shaman.lua
+++ b/data-otservbr-global/monster/giants/ogre_shaman.lua
@@ -114,7 +114,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -269, condition = { type = CONDITION_FIRE, totalDamage = 6, interval = 9000 } },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -70, maxDamage = -180, range = 7, shootEffect = CONST_ANI_POISON, target = false },
{ name = "outfit", interval = 2000, chance = 8, range = 7, effect = CONST_ME_MAGIC_BLUE, target = false, duration = 4000, outfitMonster = "chicken" },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_EARTHDAMAGE, minDamage = -15, maxDamage = -120, length = 8, spread = 3, effect = CONST_ME_CARNIPHILA, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_EARTHDAMAGE, minDamage = -15, maxDamage = -120, length = 8, spread = 0, effect = CONST_ME_CARNIPHILA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/humanoids/broken_shaper.lua b/data-otservbr-global/monster/humanoids/broken_shaper.lua
index a829ba02969..9ed950bbc70 100644
--- a/data-otservbr-global/monster/humanoids/broken_shaper.lua
+++ b/data-otservbr-global/monster/humanoids/broken_shaper.lua
@@ -105,7 +105,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 2000, chance = 35, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -150, range = 7, shootEffect = CONST_ANI_SMALLSTONE, target = true },
- { name = "combat", interval = 2000, chance = 35, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -100, length = 5, spread = 3, effect = CONST_ME_SOUND_RED, target = false },
+ { name = "combat", interval = 2000, chance = 35, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -100, length = 5, spread = 0, effect = CONST_ME_SOUND_RED, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/humanoids/chakoya_toolshaper.lua b/data-otservbr-global/monster/humanoids/chakoya_toolshaper.lua
index e7a68a152a3..010c4cf0603 100644
--- a/data-otservbr-global/monster/humanoids/chakoya_toolshaper.lua
+++ b/data-otservbr-global/monster/humanoids/chakoya_toolshaper.lua
@@ -92,7 +92,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -35 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -45, range = 7, radius = 3, shootEffect = CONST_ANI_SMALLSTONE, target = true },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -45, range = 7, radius = 1, shootEffect = CONST_ANI_SMALLSTONE, target = true },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/humanoids/crazed_summer_vanguard.lua b/data-otservbr-global/monster/humanoids/crazed_summer_vanguard.lua
index 8c9e3f361fc..38fe860c679 100644
--- a/data-otservbr-global/monster/humanoids/crazed_summer_vanguard.lua
+++ b/data-otservbr-global/monster/humanoids/crazed_summer_vanguard.lua
@@ -96,11 +96,12 @@ monster.loot = {
}
monster.attacks = {
- { name = "melee", interval = 2000, chance = 100, minDamage = -160, maxDamage = -530 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -270, maxDamage = -710, length = 3, spread = 0, effect = CONST_ME_FIREAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -250, maxDamage = -300, range = 7, shootEffect = CONST_ANI_FIRE, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -350, maxDamage = -380, radius = 5, effect = CONST_ME_EXPLOSIONHIT, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -200, maxDamage = -350, radius = 5, effect = CONST_ME_EXPLOSIONAREA, target = true },
+ { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -450 },
+ { name = "combat", interval = 2500, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -100, maxDamage = -300, length = 3, spread = 0, effect = CONST_ME_FIREAREA, target = false },
+ { name = "combat", interval = 3000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -100, maxDamage = -300, radius = 1, effect = CONST_ME_FIREAREA, target = false },
+ { name = "combat", interval = 3500, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -250, maxDamage = -300, range = 7, shootEffect = CONST_ANI_FIRE, target = false },
+ { name = "combat", interval = 4000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -300, radius = 3, effect = CONST_ME_EXPLOSIONHIT, target = true },
+ { name = "sparks chain", interval = 4500, chance = 20, minDamage = -100, maxDamage = -250, range = 3, target = true },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/humanoids/crazed_winter_rearguard.lua b/data-otservbr-global/monster/humanoids/crazed_winter_rearguard.lua
index 17fce82c98e..d7d54c49c01 100644
--- a/data-otservbr-global/monster/humanoids/crazed_winter_rearguard.lua
+++ b/data-otservbr-global/monster/humanoids/crazed_winter_rearguard.lua
@@ -99,9 +99,10 @@ monster.loot = {
}
monster.attacks = {
- { name = "melee", interval = 2000, chance = 100, minDamage = -110, maxDamage = -400 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -200, maxDamage = -300, radius = 3, effect = CONST_ME_ICEAREA, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -250, maxDamage = -300, range = 7, shootEffect = CONST_ANI_ICE, target = false },
+ { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -400 },
+ { name = "combat", interval = 2500, chance = 20, type = COMBAT_ICEDAMAGE, minDamage = -100, maxDamage = -300, range = 5, radius = 1, effect = CONST_ME_ICEAREA, target = true },
+ { name = "combat", interval = 3000, chance = 25, type = COMBAT_ICEDAMAGE, minDamage = -100, maxDamage = -300, length = 4, spread = 0, effect = CONST_ME_GIANTICE, target = false },
+ { name = "combat", interval = 3500, chance = 25, type = COMBAT_ICEDAMAGE, minDamage = -250, maxDamage = -300, radius = 3, effect = CONST_ME_ICEAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/humanoids/crazed_winter_vanguard.lua b/data-otservbr-global/monster/humanoids/crazed_winter_vanguard.lua
index b324bd32223..22cac33bccb 100644
--- a/data-otservbr-global/monster/humanoids/crazed_winter_vanguard.lua
+++ b/data-otservbr-global/monster/humanoids/crazed_winter_vanguard.lua
@@ -95,10 +95,10 @@ monster.loot = {
}
monster.attacks = {
- { name = "melee", interval = 2000, chance = 100, minDamage = -150, maxDamage = -400 },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_ICEDAMAGE, minDamage = -200, maxDamage = -300, radius = 5, effect = CONST_ME_ICEAREA, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -240, maxDamage = -300, length = 4, spread = 3, effect = CONST_ME_GIANTICE, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_ICEDAMAGE, minDamage = -250, maxDamage = -300, range = 7, shootEffect = CONST_ANI_ICE, target = false },
+ { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -400 },
+ { name = "combat", interval = 2500, chance = 30, type = COMBAT_ICEDAMAGE, minDamage = -100, maxDamage = -300, range = 5, radius = 1, effect = CONST_ME_ICEAREA, target = true },
+ { name = "combat", interval = 3000, chance = 20, type = COMBAT_ICEDAMAGE, minDamage = -100, maxDamage = -300, length = 4, spread = 0, effect = CONST_ME_GIANTICE, target = false },
+ { name = "combat", interval = 3500, chance = 20, type = COMBAT_ICEDAMAGE, minDamage = -250, maxDamage = -300, radius = 3, effect = CONST_ME_ICEAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/humanoids/dworc_voodoomaster.lua b/data-otservbr-global/monster/humanoids/dworc_voodoomaster.lua
index 9a9770186f3..c614fc2cbbc 100644
--- a/data-otservbr-global/monster/humanoids/dworc_voodoomaster.lua
+++ b/data-otservbr-global/monster/humanoids/dworc_voodoomaster.lua
@@ -93,7 +93,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -20 },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -40, range = 1, effect = CONST_ME_MAGIC_RED, target = false },
- { name = "speed", interval = 2000, chance = 10, speedChange = -800, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 5000 },
+ { name = "speed", interval = 2000, chance = 10, speedChange = -100, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 5000 },
{ name = "drunk", interval = 2000, chance = 10, range = 7, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_TELEPORT, target = false },
{ name = "outfit", interval = 2000, chance = 10, range = 7, effect = CONST_ME_MAGIC_BLUE, target = false, duration = 5000, outfitMonster = "chicken" },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -6, maxDamage = -18, radius = 6, effect = CONST_ME_GREEN_RINGS, target = false },
diff --git a/data-otservbr-global/monster/humanoids/execowtioner.lua b/data-otservbr-global/monster/humanoids/execowtioner.lua
index 77b37dcd9c8..7de794d5cf3 100644
--- a/data-otservbr-global/monster/humanoids/execowtioner.lua
+++ b/data-otservbr-global/monster/humanoids/execowtioner.lua
@@ -102,7 +102,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 90, attack = 80 },
- { name = "combat", interval = 2000, chance = 8, type = COMBAT_LIFEDRAIN, minDamage = -135, maxDamage = -280, range = 7, radius = 5, shootEffect = CONST_ANI_WHIRLWINDAXE, target = true },
+ { name = "combat", interval = 2000, chance = 8, type = COMBAT_LIFEDRAIN, minDamage = -135, maxDamage = -280, range = 7, radius = 5, shootEffect = CONST_ANI_WHIRLWINDAXE, effect = CONST_ME_DRAWBLOOD, target = true },
{ name = "combat", interval = 2000, chance = 8, type = COMBAT_PHYSICALDAMAGE, minDamage = -90, maxDamage = -200, range = 7, shootEffect = CONST_ANI_WHIRLWINDAXE, effect = CONST_ME_EXPLOSIONAREA, target = true },
}
diff --git a/data-otservbr-global/monster/humanoids/insane_siren.lua b/data-otservbr-global/monster/humanoids/insane_siren.lua
index 1ded28143d0..b5a6d3acddd 100644
--- a/data-otservbr-global/monster/humanoids/insane_siren.lua
+++ b/data-otservbr-global/monster/humanoids/insane_siren.lua
@@ -94,11 +94,14 @@ monster.loot = {
}
monster.attacks = {
- { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -530 },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -270, maxDamage = -710, length = 3, spread = 0, effect = CONST_ME_FIREAREA, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -250, maxDamage = -300, range = 7, shootEffect = CONST_ANI_FIRE, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -350, maxDamage = -380, radius = 5, effect = CONST_ME_EXPLOSIONHIT, target = true },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -200, maxDamage = -350, radius = 5, effect = CONST_ME_EXPLOSIONAREA, target = true },
+ { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -450 },
+ { name = "combat", interval = 2300, chance = 17, type = COMBAT_FIREDAMAGE, minDamage = -100, maxDamage = -300, length = 3, spread = 0, effect = CONST_ME_FIREAREA, target = false },
+ { name = "combat", interval = 2600, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -100, maxDamage = -300, radius = 1, effect = CONST_ME_FIREAREA, target = false },
+ { name = "combat", interval = 2900, chance = 17, type = COMBAT_FIREDAMAGE, minDamage = -250, maxDamage = -300, range = 7, shootEffect = CONST_ANI_FIRE, target = false },
+ { name = "combat", interval = 3200, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -300, radius = 3, effect = CONST_ME_EXPLOSIONHIT, target = true },
+ { name = "combat", interval = 3500, chance = 17, type = COMBAT_FIREDAMAGE, minDamage = -150, maxDamage = -300, range = 6, effect = CONST_ME_FIREATTACK, target = true },
+ { name = "combat", interval = 3800, chance = 17, type = COMBAT_FIREDAMAGE, minDamage = -100, maxDamage = -300, range = 6, radius = 2, effect = CONST_ME_FIREAREA, target = true },
+ { name = "sparks chain", interval = 4100, chance = 17, minDamage = -100, maxDamage = -200, range = 3, target = true },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/humanoids/lost_berserker.lua b/data-otservbr-global/monster/humanoids/lost_berserker.lua
index cd48787df95..fb161e8cd63 100644
--- a/data-otservbr-global/monster/humanoids/lost_berserker.lua
+++ b/data-otservbr-global/monster/humanoids/lost_berserker.lua
@@ -112,7 +112,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -300, range = 7, shootEffect = CONST_ANI_WHIRLWINDAXE, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -250, range = 7, radius = 3, shootEffect = CONST_ANI_EXPLOSION, effect = CONST_ME_EXPLOSIONAREA, target = true },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -150, maxDamage = -250, radius = 5, effect = CONST_ME_MAGIC_RED, target = false },
- { name = "speed", interval = 2000, chance = 10, speedChange = -800, radius = 2, effect = CONST_ME_MAGIC_RED, target = false, duration = 20000 },
+ { name = "speed", interval = 2000, chance = 10, speedChange = -100, radius = 2, effect = CONST_ME_MAGIC_RED, target = false, duration = 20000 },
{ name = "drunk", interval = 2000, chance = 10, radius = 4, effect = CONST_ME_STUN, target = true, duration = 6000 },
}
diff --git a/data-otservbr-global/monster/humanoids/lost_exile.lua b/data-otservbr-global/monster/humanoids/lost_exile.lua
index d1bb52aaa09..0acd587804b 100644
--- a/data-otservbr-global/monster/humanoids/lost_exile.lua
+++ b/data-otservbr-global/monster/humanoids/lost_exile.lua
@@ -114,7 +114,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -120 },
- { name = "sudden death rune", interval = 2000, chance = 15, minDamage = -150, maxDamage = -350, range = 3, length = 6, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "sudden death rune", interval = 2000, chance = 15, minDamage = -150, maxDamage = -350, range = 3, length = 6, spread = 0, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_MANADRAIN, minDamage = -150, maxDamage = -250, range = 3, length = 5, spread = 5, effect = CONST_ME_SMOKE, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -150, maxDamage = -290, range = 3, length = 5, spread = 5, shootEffect = CONST_ANI_LARGEROCK, effect = CONST_ME_POISONAREA, target = false },
{ name = "sudden death rune", interval = 2000, chance = 15, minDamage = -70, maxDamage = -250, range = 7, target = false },
diff --git a/data-otservbr-global/monster/humanoids/lost_husher.lua b/data-otservbr-global/monster/humanoids/lost_husher.lua
index 6961a18cde7..d8167f9710d 100644
--- a/data-otservbr-global/monster/humanoids/lost_husher.lua
+++ b/data-otservbr-global/monster/humanoids/lost_husher.lua
@@ -102,7 +102,7 @@ monster.loot = {
}
monster.attacks = {
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -150, maxDamage = -300, length = 6, spread = 3, effect = CONST_ME_BLACKSMOKE, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -150, maxDamage = -300, length = 6, spread = 0, effect = CONST_ME_BLACKSMOKE, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -150, maxDamage = -250, radius = 5, effect = CONST_ME_BLACKSMOKE, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -150, maxDamage = -200, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -150, maxDamage = -250, range = 7, radius = 2, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_MAGIC_GREEN, target = true },
diff --git a/data-otservbr-global/monster/humanoids/minotaur_amazon.lua b/data-otservbr-global/monster/humanoids/minotaur_amazon.lua
index 2eb8043163f..7139b2bc776 100644
--- a/data-otservbr-global/monster/humanoids/minotaur_amazon.lua
+++ b/data-otservbr-global/monster/humanoids/minotaur_amazon.lua
@@ -104,11 +104,11 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 50, attack = 50 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -50, maxDamage = -305, length = 8, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -50, maxDamage = -305, length = 8, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "combat", interval = 2000, chance = 16, type = COMBAT_LIFEDRAIN, minDamage = -50, maxDamage = -150, radius = 4, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "combat", interval = 2000, chance = 22, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -150, range = 7, shootEffect = CONST_ANI_HUNTINGSPEAR, effect = CONST_ME_EXPLOSIONAREA, target = false },
-- bleed
- { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 40, minDamage = -300, maxDamage = -400, radius = 4, shootEffect = CONST_ANI_THROWINGKNIFE, target = true },
+ { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 40, minDamage = -300, maxDamage = -400, radius = 4, effect = CONST_ME_DRAWBLOOD, shootEffect = CONST_ANI_THROWINGKNIFE, target = true },
{ name = "minotaur amazon paralyze", interval = 2000, chance = 15, target = false },
}
diff --git a/data-otservbr-global/monster/humanoids/mooh'tah_warrior.lua b/data-otservbr-global/monster/humanoids/mooh'tah_warrior.lua
index ada61e26268..d163ac881f2 100644
--- a/data-otservbr-global/monster/humanoids/mooh'tah_warrior.lua
+++ b/data-otservbr-global/monster/humanoids/mooh'tah_warrior.lua
@@ -99,7 +99,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 45, attack = 80 },
- { name = "combat", interval = 2000, chance = 14, type = COMBAT_ENERGYDAMAGE, minDamage = -150, maxDamage = -200, length = 4, spread = 3, effect = CONST_ME_YELLOWENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 14, type = COMBAT_ENERGYDAMAGE, minDamage = -150, maxDamage = -200, length = 4, spread = 0, effect = CONST_ME_YELLOWENERGY, target = false },
{ name = "combat", interval = 2000, chance = 11, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -135, range = 7, shootEffect = CONST_ANI_LARGEROCK, effect = CONST_ME_EXPLOSIONAREA, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -50, maxDamage = -150, radius = 3, effect = CONST_ME_HITAREA, target = false },
{ name = "mooh'tah master skill reducer", interval = 2000, chance = 19, range = 7, target = false },
diff --git a/data-otservbr-global/monster/humanoids/soul-broken_harbinger.lua b/data-otservbr-global/monster/humanoids/soul-broken_harbinger.lua
index d07eae7ff16..d4d36d4733c 100644
--- a/data-otservbr-global/monster/humanoids/soul-broken_harbinger.lua
+++ b/data-otservbr-global/monster/humanoids/soul-broken_harbinger.lua
@@ -93,8 +93,10 @@ monster.loot = {
}
monster.attacks = {
- { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -240 },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -120, range = 7, shootEffect = CONST_ANI_ARROW, target = false },
+ { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -400 },
+ { name = "combat", interval = 2100, chance = 40, type = COMBAT_ICEDAMAGE, minDamage = -100, maxDamage = -300, range = 5, radius = 1, effect = CONST_ME_ICEAREA, target = true },
+ { name = "combat", interval = 2600, chance = 30, type = COMBAT_ICEDAMAGE, minDamage = -100, maxDamage = -300, length = 4, spread = 0, effect = CONST_ME_GIANTICE, target = false },
+ { name = "combat", interval = 3100, chance = 20, type = COMBAT_ICEDAMAGE, minDamage = -250, maxDamage = -300, radius = 3, effect = CONST_ME_ICEAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/humanoids/twisted_shaper.lua b/data-otservbr-global/monster/humanoids/twisted_shaper.lua
index 63540262085..564d71cb077 100644
--- a/data-otservbr-global/monster/humanoids/twisted_shaper.lua
+++ b/data-otservbr-global/monster/humanoids/twisted_shaper.lua
@@ -98,7 +98,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = -50, maxDamage = -100, range = 7, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_ENERGYHIT, target = true },
- { name = "combat", interval = 2000, chance = 35, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -100, length = 5, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 35, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -100, length = 5, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -50, maxDamage = -100, radius = 7, effect = CONST_ME_MAGIC_BLUE, target = false },
{ name = "speed", interval = 2000, chance = 9, speedChange = -440, effect = CONST_ME_GIANTICE, target = true, duration = 7000 },
}
diff --git a/data-otservbr-global/monster/humans/blood_priest.lua b/data-otservbr-global/monster/humans/blood_priest.lua
index 26aec7facee..ecf8642d4f3 100644
--- a/data-otservbr-global/monster/humans/blood_priest.lua
+++ b/data-otservbr-global/monster/humans/blood_priest.lua
@@ -100,7 +100,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -80, condition = { type = CONDITION_POISON, totalDamage = 100, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -60, maxDamage = -100, range = 7, shootEffect = CONST_ANI_DEATH, effect = CONST_ME_SMALLCLOUDS, target = true },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -40, maxDamage = -60, radius = 4, effect = CONST_ME_MAGIC_RED, target = false },
- { name = "combat", interval = 3000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -80, maxDamage = -130, range = 1, length = 7, spread = 3, effect = CONST_ME_HITAREA, target = true },
+ { name = "combat", interval = 3000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -80, maxDamage = -130, range = 1, length = 7, spread = 0, effect = CONST_ME_HITAREA, target = true },
-- bleed
{ name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 5, minDamage = -160, maxDamage = -290, range = 1, radius = 1, target = true },
}
diff --git a/data-otservbr-global/monster/humans/cobra_assassin.lua b/data-otservbr-global/monster/humans/cobra_assassin.lua
index d5616e5e0b0..a2206a77ad5 100644
--- a/data-otservbr-global/monster/humans/cobra_assassin.lua
+++ b/data-otservbr-global/monster/humans/cobra_assassin.lua
@@ -91,8 +91,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -450 },
{ name = "wave t", interval = 2000, chance = 10, minDamage = -300, maxDamage = -380, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -280, maxDamage = -400, radius = 4, effect = CONST_ME_EXPLOSIONHIT, target = false },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_PHYSICALDAMAGE, minDamage = -250, maxDamage = -400, length = 5, spread = 3, effect = CONST_ME_BLOCKHIT, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -500, radius = 4, effect = CONST_ME_EXPLOSIONHIT, target = false },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -500, length = 5, spread = 0, effect = CONST_ME_BLOCKHIT, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/humans/cobra_vizier.lua b/data-otservbr-global/monster/humans/cobra_vizier.lua
index c510c4f4385..c6052ab7829 100644
--- a/data-otservbr-global/monster/humans/cobra_vizier.lua
+++ b/data-otservbr-global/monster/humans/cobra_vizier.lua
@@ -99,6 +99,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -480 },
{ name = "explosion wave", interval = 2000, chance = 15, minDamage = -280, maxDamage = -400, target = false },
{ name = "combat", interval = 2000, chance = 12, type = COMBAT_EARTHDAMAGE, minDamage = -350, maxDamage = -520, radius = 4, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_GREEN_RINGS, target = true },
+ { name = "death chain", interval = 4000, chance = 30, minDamage = -550, maxDamage = -800, range = 3, target = true },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/humans/infernalist.lua b/data-otservbr-global/monster/humans/infernalist.lua
index d662f5fa270..7a7931e86db 100644
--- a/data-otservbr-global/monster/humans/infernalist.lua
+++ b/data-otservbr-global/monster/humans/infernalist.lua
@@ -110,7 +110,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -90, maxDamage = -180, range = 7, radius = 3, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -53, maxDamage = -120, range = 7, radius = 3, shootEffect = CONST_ANI_ENERGYBALL, effect = CONST_ME_TELEPORT, target = true },
{ name = "firefield", interval = 2000, chance = 15, range = 7, radius = 3, shootEffect = CONST_ANI_FIRE, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -150, maxDamage = -250, length = 8, spread = 3, effect = CONST_ME_FIREATTACK, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -150, maxDamage = -250, length = 8, spread = 0, effect = CONST_ME_FIREATTACK, target = false },
{ name = "combat", interval = 2000, chance = 5, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -150, radius = 2, effect = CONST_ME_EXPLOSIONAREA, target = false },
}
diff --git a/data-otservbr-global/monster/humans/vile_grandmaster.lua b/data-otservbr-global/monster/humans/vile_grandmaster.lua
index f04f5361b8a..8fe45841071 100644
--- a/data-otservbr-global/monster/humans/vile_grandmaster.lua
+++ b/data-otservbr-global/monster/humans/vile_grandmaster.lua
@@ -108,7 +108,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 10, maxDamage = -260 },
-- bleed
- { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 20, minDamage = -150, maxDamage = -225, radius = 4, shootEffect = CONST_ANI_THROWINGKNIFE, target = true },
+ { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 20, minDamage = -150, maxDamage = -225, radius = 4, shootEffect = CONST_ANI_THROWINGKNIFE, effect = CONST_ME_DRAWBLOOD, target = true },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/humans/warlock.lua b/data-otservbr-global/monster/humans/warlock.lua
index 6e09184297b..027399c07a6 100644
--- a/data-otservbr-global/monster/humans/warlock.lua
+++ b/data-otservbr-global/monster/humans/warlock.lua
@@ -118,7 +118,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = 0, maxDamage = -120, range = 7, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -50, maxDamage = -180, range = 7, radius = 3, shootEffect = CONST_ANI_BURSTARROW, effect = CONST_ME_FIREAREA, target = true },
{ name = "firefield", interval = 2000, chance = 10, range = 7, radius = 2, shootEffect = CONST_ANI_FIRE, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -150, maxDamage = -230, length = 8, spread = 3, effect = CONST_ME_BIGCLOUDS, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -150, maxDamage = -230, length = 8, spread = 0, effect = CONST_ME_BIGCLOUDS, target = false },
{ name = "speed", interval = 2000, chance = 15, speedChange = -600, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 20000 },
}
diff --git a/data-otservbr-global/monster/lycanthropes/werebadger.lua b/data-otservbr-global/monster/lycanthropes/werebadger.lua
index 1f8243b9520..3ae7a6b8c0e 100644
--- a/data-otservbr-global/monster/lycanthropes/werebadger.lua
+++ b/data-otservbr-global/monster/lycanthropes/werebadger.lua
@@ -101,7 +101,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 50, attack = 60, condition = { type = CONDITION_POISON, totalDamage = 140, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -21, maxDamage = -150, range = 7, shootEffect = CONST_ANI_EARTH, effect = CONST_ME_CARNIPHILA, target = true },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -10, maxDamage = -100, length = 8, spread = 3, effect = CONST_ME_CARNIPHILA, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -10, maxDamage = -100, length = 8, spread = 0, effect = CONST_ME_CARNIPHILA, target = false },
{ name = "speed", interval = 4000, chance = 20, radius = 7, effect = CONST_ME_POFF, target = true },
}
diff --git a/data-otservbr-global/monster/lycanthropes/werefox.lua b/data-otservbr-global/monster/lycanthropes/werefox.lua
index 81905188e30..5a6f1f256c1 100644
--- a/data-otservbr-global/monster/lycanthropes/werefox.lua
+++ b/data-otservbr-global/monster/lycanthropes/werefox.lua
@@ -107,7 +107,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -290 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -200, shootEffect = CONST_ANI_GREENSTAR, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -225, range = 7, radius = 4, effect = CONST_ME_MAGIC_RED, target = true },
- { name = "combat", interval = 2000, chance = 14, type = COMBAT_DEATHDAMAGE, minDamage = -100, maxDamage = -700, length = 5, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 14, type = COMBAT_DEATHDAMAGE, minDamage = -100, maxDamage = -700, length = 5, spread = 0, effect = CONST_ME_MORTAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/lycanthropes/werelioness.lua b/data-otservbr-global/monster/lycanthropes/werelioness.lua
index 302ecc81a61..d7cf7fac4a2 100644
--- a/data-otservbr-global/monster/lycanthropes/werelioness.lua
+++ b/data-otservbr-global/monster/lycanthropes/werelioness.lua
@@ -96,7 +96,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -300 },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_HOLYDAMAGE, minDamage = -300, maxDamage = -410, range = 3, effect = CONST_ME_HOLYAREA, target = true },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_HOLYDAMAGE, minDamage = -170, maxDamage = -350, range = 3, shootEffect = CONST_ANI_HOLY, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -250, maxDamage = -300, length = 4, spread = 1, effect = CONST_ME_FIREAREA, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -250, maxDamage = -300, length = 4, spread = 0, effect = CONST_ME_FIREAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/magicals/burning_book.lua b/data-otservbr-global/monster/magicals/burning_book.lua
index ce7ceac08f7..f12bbab7a25 100644
--- a/data-otservbr-global/monster/magicals/burning_book.lua
+++ b/data-otservbr-global/monster/magicals/burning_book.lua
@@ -94,7 +94,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -200, maxDamage = -700 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -500, maxDamage = -780, range = 7, shootEffect = CONST_ANI_FLAMMINGARROW, effect = CONST_ME_HITBYFIRE, target = false },
{ name = "combat", interval = 1500, chance = 12, type = COMBAT_PHYSICALDAMAGE, minDamage = -500, maxDamage = -900, radius = 3, effect = CONST_ME_EXPLOSIONAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -400, maxDamage = -850, length = 5, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -400, maxDamage = -850, length = 5, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "combat", interval = 2000, chance = 12, type = COMBAT_FIREDAMAGE, minDamage = -400, maxDamage = -775, radius = 3, effect = CONST_ME_HITBYFIRE, target = false },
}
diff --git a/data-otservbr-global/monster/magicals/choking_fear.lua b/data-otservbr-global/monster/magicals/choking_fear.lua
index 4cfa9bb0b37..9e95ff23aa9 100644
--- a/data-otservbr-global/monster/magicals/choking_fear.lua
+++ b/data-otservbr-global/monster/magicals/choking_fear.lua
@@ -107,9 +107,9 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -499, condition = { type = CONDITION_POISON, totalDamage = 600, interval = 4000 } },
-- poison
- { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -700, maxDamage = -900, length = 5, spread = 3, effect = CONST_ME_HITBYPOISON, target = false },
+ { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -700, maxDamage = -900, length = 5, spread = 0, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -300, radius = 1, shootEffect = CONST_ANI_EXPLOSION, effect = CONST_ME_SLEEP, target = true },
- { name = "speed", interval = 2000, chance = 20, speedChange = -800, radius = 1, shootEffect = CONST_ANI_EXPLOSION, effect = CONST_ME_SLEEP, target = true, duration = 15000 },
+ { name = "speed", interval = 2000, chance = 20, speedChange = -100, radius = 1, shootEffect = CONST_ANI_EXPLOSION, effect = CONST_ME_SLEEP, target = true, duration = 15000 },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -130, maxDamage = -300, radius = 4, effect = CONST_ME_SOUND_RED, target = false },
{ name = "choking fear drown", interval = 2000, chance = 20, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -250, maxDamage = -500, radius = 4, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = true },
diff --git a/data-otservbr-global/monster/magicals/crypt_warden.lua b/data-otservbr-global/monster/magicals/crypt_warden.lua
index 1b5fd2a9adb..e5a2db7ec77 100644
--- a/data-otservbr-global/monster/magicals/crypt_warden.lua
+++ b/data-otservbr-global/monster/magicals/crypt_warden.lua
@@ -95,7 +95,7 @@ monster.attacks = {
{ name = "warden x", interval = 2000, chance = 15, minDamage = -250, maxDamage = -430, target = false },
{ name = "warden ring", interval = 2000, chance = 8, minDamage = -250, maxDamage = -380, target = false },
{ name = "combat", interval = 2000, chance = 12, type = COMBAT_EARTHDAMAGE, minDamage = -200, maxDamage = -480, radius = 2, effect = CONST_ME_GROUNDSHAKER, target = false },
- { name = "combat", interval = 2000, chance = 13, type = COMBAT_HOLYDAMAGE, minDamage = -300, maxDamage = -450, length = 5, spread = 3, effect = CONST_ME_HOLYAREA, target = false },
+ { name = "combat", interval = 2000, chance = 13, type = COMBAT_HOLYDAMAGE, minDamage = -300, maxDamage = -450, length = 5, spread = 0, effect = CONST_ME_HOLYAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/magicals/cursed_book.lua b/data-otservbr-global/monster/magicals/cursed_book.lua
index 3066f09a9d6..329a841b7ba 100644
--- a/data-otservbr-global/monster/magicals/cursed_book.lua
+++ b/data-otservbr-global/monster/magicals/cursed_book.lua
@@ -95,7 +95,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -400, maxDamage = -680, range = 7, shootEffect = CONST_ANI_EARTHARROW, target = false },
- { name = "combat", interval = 1000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -400, maxDamage = -575, length = 5, spread = 3, effect = CONST_ME_POISONAREA, target = false },
+ { name = "combat", interval = 1000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -400, maxDamage = -575, length = 5, spread = 0, effect = CONST_ME_POISONAREA, target = false },
{ name = "combat", interval = 1000, chance = 12, type = COMBAT_PHYSICALDAMAGE, minDamage = -230, maxDamage = -880, range = 7, radius = 3, effect = CONST_ME_GROUNDSHAKER, target = false },
}
diff --git a/data-otservbr-global/monster/magicals/energetic_book.lua b/data-otservbr-global/monster/magicals/energetic_book.lua
index 1412e998bd2..70270f968cf 100644
--- a/data-otservbr-global/monster/magicals/energetic_book.lua
+++ b/data-otservbr-global/monster/magicals/energetic_book.lua
@@ -96,7 +96,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -200 },
{ name = "combat", interval = 2000, chance = 14, type = COMBAT_ENERGYDAMAGE, minDamage = -200, maxDamage = -680, range = 7, shootEffect = CONST_ANI_ENERGY, target = false },
{ name = "combat", interval = 2000, chance = 40, type = COMBAT_ENERGYDAMAGE, minDamage = -200, maxDamage = -505, radius = 3, effect = CONST_ME_ENERGYAREA, target = false },
- { name = "combat", interval = 1500, chance = 30, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -700, length = 8, spread = 3, effect = CONST_ME_STUN, target = false },
+ { name = "combat", interval = 1500, chance = 30, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -700, length = 8, spread = 0, effect = CONST_ME_STUN, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/magicals/feral_sphinx.lua b/data-otservbr-global/monster/magicals/feral_sphinx.lua
index bbcafcf1d9c..481057d5654 100644
--- a/data-otservbr-global/monster/magicals/feral_sphinx.lua
+++ b/data-otservbr-global/monster/magicals/feral_sphinx.lua
@@ -89,10 +89,10 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -450 },
- { name = "fire wave", interval = 2000, chance = 15, minDamage = -350, maxDamage = -500, length = 1, spread = 0, target = true },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -500, radius = 4, effect = CONST_ME_ENERGYAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -350, maxDamage = -550, range = 1, shootEffect = CONST_ANI_FIRE, target = false },
- { name = "combat", interval = 2000, chance = 8, type = COMBAT_HOLYDAMAGE, minDamage = -400, maxDamage = -580, length = 6, spread = 3, effect = CONST_ME_HOLYAREA, target = false },
+ { name = "fire wave", interval = 2000, chance = 15, minDamage = -350, maxDamage = -500, length = 1, spread = 1, effect = CONST_ME_FIREAREA, target = true },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -500, radius = 4, effect = CONST_ME_ENERGYAREA, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -350, maxDamage = -550, range = 1, shootEffect = CONST_ANI_FIRE, target = false },
+ { name = "combat", interval = 2000, chance = 18, type = COMBAT_HOLYDAMAGE, minDamage = -400, maxDamage = -580, length = 6, spread = 3, effect = CONST_ME_HOLYAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/magicals/feversleep.lua b/data-otservbr-global/monster/magicals/feversleep.lua
index c99daf92382..dae681d08d6 100644
--- a/data-otservbr-global/monster/magicals/feversleep.lua
+++ b/data-otservbr-global/monster/magicals/feversleep.lua
@@ -97,7 +97,7 @@ monster.attacks = {
{ name = "condition", type = CONDITION_POISON, interval = 2000, chance = 20, minDamage = -800, maxDamage = -1000, radius = 7, effect = CONST_ME_YELLOW_RINGS, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -70, maxDamage = -100, radius = 5, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "feversleep skill reducer", interval = 2000, chance = 10, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -250, maxDamage = -300, length = 6, spread = 3, effect = CONST_ME_YELLOWENERGY, target = true },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -250, maxDamage = -300, length = 6, spread = 0, effect = CONST_ME_YELLOWENERGY, target = true },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = -150, maxDamage = -300, radius = 1, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = true },
}
diff --git a/data-otservbr-global/monster/magicals/frazzlemaw.lua b/data-otservbr-global/monster/magicals/frazzlemaw.lua
index 32a053b1dcc..09df1f13008 100644
--- a/data-otservbr-global/monster/magicals/frazzlemaw.lua
+++ b/data-otservbr-global/monster/magicals/frazzlemaw.lua
@@ -118,8 +118,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -400 },
-- bleed
- { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 10, minDamage = -300, maxDamage = -400, radius = 3, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -700, length = 5, spread = 3, effect = CONST_ME_EXPLOSIONAREA, target = false },
+ { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 10, minDamage = -300, maxDamage = -400, radius = 3, effect = CONST_ME_DRAWBLOOD, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -700, length = 5, spread = 0, effect = CONST_ME_EXPLOSIONAREA, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -400, radius = 2, shootEffect = CONST_ANI_LARGEROCK, effect = CONST_ME_STONES, target = true },
{ name = "speed", interval = 2000, chance = 15, speedChange = -600, radius = 5, effect = CONST_ME_MAGIC_RED, target = false, duration = 15000 },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -80, maxDamage = -150, radius = 4, effect = CONST_ME_MAGIC_RED, target = false },
diff --git a/data-otservbr-global/monster/magicals/guardian_of_tales.lua b/data-otservbr-global/monster/magicals/guardian_of_tales.lua
index e34153ea79e..01ee4a29711 100644
--- a/data-otservbr-global/monster/magicals/guardian_of_tales.lua
+++ b/data-otservbr-global/monster/magicals/guardian_of_tales.lua
@@ -92,7 +92,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -200, maxDamage = -550 },
{ name = "combat", interval = 2000, chance = 13, type = COMBAT_ENERGYDAMAGE, minDamage = -200, maxDamage = -605, radius = 3, effect = CONST_ME_ENERGYAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -375, maxDamage = -500, length = 5, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -375, maxDamage = -500, length = 5, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "combat", interval = 2000, chance = 12, type = COMBAT_FIREDAMAGE, minDamage = -400, maxDamage = -775, radius = 3, effect = CONST_ME_HITBYFIRE, target = false },
}
diff --git a/data-otservbr-global/monster/magicals/guzzlemaw.lua b/data-otservbr-global/monster/magicals/guzzlemaw.lua
index 5f5aad15c41..9ea1f726827 100644
--- a/data-otservbr-global/monster/magicals/guzzlemaw.lua
+++ b/data-otservbr-global/monster/magicals/guzzlemaw.lua
@@ -110,11 +110,11 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -499 },
-- bleed
- { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 10, minDamage = -500, maxDamage = -1000, radius = 3, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -900, length = 8, spread = 3, effect = CONST_ME_EXPLOSIONAREA, target = false },
+ { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 10, minDamage = -500, maxDamage = -1000, radius = 3, effect = CONST_ME_DRAWBLOOD, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -900, length = 8, spread = 0, effect = CONST_ME_EXPLOSIONAREA, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -500, radius = 2, shootEffect = CONST_ANI_LARGEROCK, effect = CONST_ME_STONES, target = true },
- { name = "speed", interval = 2000, chance = 15, speedChange = -800, radius = 6, effect = CONST_ME_MAGIC_RED, target = false, duration = 15000 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -800, length = 8, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "speed", interval = 2000, chance = 15, speedChange = -100, radius = 6, effect = CONST_ME_MAGIC_RED, target = false, duration = 15000 },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -800, length = 8, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/magicals/icecold_book.lua b/data-otservbr-global/monster/magicals/icecold_book.lua
index 789cc58b3c2..42c058a8a43 100644
--- a/data-otservbr-global/monster/magicals/icecold_book.lua
+++ b/data-otservbr-global/monster/magicals/icecold_book.lua
@@ -100,7 +100,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -700, maxDamage = -850, range = 7, shootEffect = CONST_ANI_SMALLICE, effect = CONST_ME_ICEATTACK, target = false },
{ name = "combat", interval = 1000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -100, maxDamage = -380, range = 7, shootEffect = CONST_ANI_SMALLICE, effect = CONST_ME_ICEATTACK, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_ICEDAMAGE, minDamage = -350, maxDamage = -980, length = 5, spread = 3, shootEffect = CONST_ANI_SMALLICE, effect = CONST_ME_ICEATTACK, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_ICEDAMAGE, minDamage = -350, maxDamage = -980, length = 5, spread = 0, shootEffect = CONST_ANI_SMALLICE, effect = CONST_ME_ICEATTACK, target = false },
{ name = "combat", interval = 1000, chance = 12, type = COMBAT_ICEDAMAGE, minDamage = -230, maxDamage = -880, range = 7, radius = 3, shootEffect = CONST_ANI_SMALLICE, effect = CONST_ME_ICETORNADO, target = false },
}
diff --git a/data-otservbr-global/monster/magicals/manticore.lua b/data-otservbr-global/monster/magicals/manticore.lua
index 97eba9ff118..fba35b6318d 100644
--- a/data-otservbr-global/monster/magicals/manticore.lua
+++ b/data-otservbr-global/monster/magicals/manticore.lua
@@ -75,17 +75,22 @@ monster.voices = {
monster.loot = {
{ name = "platinum coin", chance = 100000, maxCount = 3 },
- { name = "flaming arrow", chance = 4090, maxCount = 11 },
- { name = "royal star", chance = 1120, maxCount = 4 },
- { name = "manticore tail", chance = 8550 },
- { name = "manticore ear", chance = 6690 },
- { name = "magma legs", chance = 740 },
- { name = "magma monocle", chance = 1860 },
- { name = "magma boots", chance = 370 },
- { name = "magma coat", chance = 2970 },
- { name = "wand of everblazing", chance = 1120 },
- { name = "wand of dragonbreath", chance = 740 },
- { name = "wand of draconia", chance = 370 },
+ { name = "manticore tail", chance = 10250 },
+ { name = "manticore ear", chance = 7390 },
+ { name = "small emerald", chance = 5880 },
+ { name = "green crystal fragment", chance = 5710 },
+ { name = "flaming arrow", chance = 4870, maxCount = 9 },
+ { name = "prismatic quartz", chance = 4370 },
+ { name = "rainbow quartz", chance = 3700, maxCount = 3 },
+ { name = "magma coat", chance = 3190 },
+ { name = "violet gem", chance = 3030 },
+ { name = "magma boots", chance = 2860 },
+ { name = "magma monocle", chance = 2020 },
+ { name = "wand of dragonbreath", chance = 1680 },
+ { name = "wand of draconia", chance = 1180 },
+ { name = "royal star", chance = 1010, maxCount = 3 },
+ { name = "wand of everblazing", chance = 1010 },
+ { name = "magma legs", chance = 340 },
}
monster.attacks = {
diff --git a/data-otservbr-global/monster/magicals/medusa.lua b/data-otservbr-global/monster/magicals/medusa.lua
index a828ace46eb..e945b600fd0 100644
--- a/data-otservbr-global/monster/magicals/medusa.lua
+++ b/data-otservbr-global/monster/magicals/medusa.lua
@@ -99,7 +99,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -450, condition = { type = CONDITION_POISON, totalDamage = 840, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -21, maxDamage = -350, range = 7, shootEffect = CONST_ANI_EARTH, effect = CONST_ME_CARNIPHILA, target = true },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -250, maxDamage = -500, length = 8, spread = 3, effect = CONST_ME_CARNIPHILA, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -250, maxDamage = -500, length = 8, spread = 0, effect = CONST_ME_CARNIPHILA, target = false },
{ name = "speed", interval = 2000, chance = 25, radius = 7, effect = CONST_ME_POFF, target = true },
{ name = "outfit", interval = 2000, chance = 1, range = 7, target = true, duration = 3000, outfitMonster = "clay guardian" },
}
diff --git a/data-otservbr-global/monster/magicals/menacing_carnivor.lua b/data-otservbr-global/monster/magicals/menacing_carnivor.lua
index 91a1772c42a..fa314084b33 100644
--- a/data-otservbr-global/monster/magicals/menacing_carnivor.lua
+++ b/data-otservbr-global/monster/magicals/menacing_carnivor.lua
@@ -102,8 +102,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -300, maxDamage = -450 },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -180, length = 4, spread = 3, effect = CONST_ME_SMOKE, target = false },
- { name = "combat", interval = 2000, chance = 14, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -200, length = 4, spread = 3, effect = CONST_ME_POISONAREA, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -180, length = 4, spread = 0, effect = CONST_ME_SMOKE, target = false },
+ { name = "combat", interval = 2000, chance = 14, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -200, length = 4, spread = 0, effect = CONST_ME_POISONAREA, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -150, maxDamage = -330, radius = 4, effect = CONST_ME_GROUNDSHAKER, target = false },
}
diff --git a/data-otservbr-global/monster/magicals/rage_squid.lua b/data-otservbr-global/monster/magicals/rage_squid.lua
index 8fcba91d567..0bbd087da45 100644
--- a/data-otservbr-global/monster/magicals/rage_squid.lua
+++ b/data-otservbr-global/monster/magicals/rage_squid.lua
@@ -107,7 +107,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -500 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -200, maxDamage = -280, range = 7, shootEffect = CONST_ANI_FLAMMINGARROW, effect = CONST_ME_HITBYFIRE, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -200, maxDamage = -380, range = 7, shootEffect = CONST_ANI_FIRE, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -175, maxDamage = -200, length = 5, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -175, maxDamage = -200, length = 5, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "combat", interval = 2000, chance = 12, type = COMBAT_FIREDAMAGE, minDamage = -200, maxDamage = -475, radius = 3, effect = CONST_ME_HITBYFIRE, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -200, maxDamage = -475, radius = 2, effect = CONST_ME_FIREAREA, target = false },
}
diff --git a/data-otservbr-global/monster/magicals/retching_horror.lua b/data-otservbr-global/monster/magicals/retching_horror.lua
index 7646ddfa8a3..a6814343eaf 100644
--- a/data-otservbr-global/monster/magicals/retching_horror.lua
+++ b/data-otservbr-global/monster/magicals/retching_horror.lua
@@ -99,7 +99,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -400 },
- { name = "drunk", interval = 2000, chance = 10, length = 4, spread = 3, effect = CONST_ME_MAGIC_GREEN, target = true, duration = 5000 },
+ { name = "drunk", interval = 2000, chance = 10, length = 4, spread = 0, effect = CONST_ME_MAGIC_GREEN, target = true, duration = 5000 },
{ name = "speed", interval = 2000, chance = 15, speedChange = -700, radius = 4, shootEffect = CONST_ANI_WHIRLWINDCLUB, effect = CONST_ME_STUN, target = true, duration = 15000 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -110, radius = 4, effect = CONST_ME_HITAREA, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -200, radius = 1, shootEffect = CONST_ANI_SNIPERARROW, target = true },
diff --git a/data-otservbr-global/monster/magicals/shiversleep.lua b/data-otservbr-global/monster/magicals/shiversleep.lua
index dbfb4942830..c81c741eddc 100644
--- a/data-otservbr-global/monster/magicals/shiversleep.lua
+++ b/data-otservbr-global/monster/magicals/shiversleep.lua
@@ -66,7 +66,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -450 },
- { name = "combat", interval = 1800, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -685, length = 7, spread = 3, effect = CONST_ME_STONES, target = false },
+ { name = "combat", interval = 1800, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -685, length = 7, spread = 0, effect = CONST_ME_STONES, target = false },
{ name = "combat", interval = 2000, chance = 9, type = COMBAT_EARTHDAMAGE, minDamage = -250, maxDamage = -590, radius = 6, effect = CONST_ME_BIGPLANTS, target = false },
}
diff --git a/data-otservbr-global/monster/magicals/shock_head.lua b/data-otservbr-global/monster/magicals/shock_head.lua
index 8b621dd6f4f..0394008118d 100644
--- a/data-otservbr-global/monster/magicals/shock_head.lua
+++ b/data-otservbr-global/monster/magicals/shock_head.lua
@@ -86,7 +86,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -798 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = -200, maxDamage = -300, length = 5, spread = 2, effect = CONST_ME_BLACKSMOKE, target = false },
- { name = "speed", interval = 2000, chance = 15, speedChange = -800, length = 8, spread = 3, effect = CONST_ME_PURPLEENERGY, target = false, duration = 7500 },
+ { name = "speed", interval = 2000, chance = 15, speedChange = -100, length = 8, spread = 0, effect = CONST_ME_PURPLEENERGY, target = false, duration = 7500 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -350, radius = 4, shootEffect = CONST_ANI_EARTH, effect = CONST_ME_STONES, target = true },
{ name = "shock head skill reducer 1", interval = 2000, chance = 5, range = 5, target = false },
{ name = "shock head skill reducer 2", interval = 2000, chance = 5, target = false },
diff --git a/data-otservbr-global/monster/magicals/sight_of_surrender.lua b/data-otservbr-global/monster/magicals/sight_of_surrender.lua
index 2db33a6e802..d98c86153b5 100644
--- a/data-otservbr-global/monster/magicals/sight_of_surrender.lua
+++ b/data-otservbr-global/monster/magicals/sight_of_surrender.lua
@@ -110,7 +110,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -1100 },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -500, maxDamage = -800, length = 8, spread = 3, effect = CONST_ME_YELLOWENERGY, target = true },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -500, maxDamage = -800, length = 8, spread = 0, effect = CONST_ME_YELLOWENERGY, target = true },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -500, radius = 1, shootEffect = CONST_ANI_LARGEROCK, target = true },
}
diff --git a/data-otservbr-global/monster/magicals/sphinx.lua b/data-otservbr-global/monster/magicals/sphinx.lua
index f6d42943ee7..2ca6c8f4dba 100644
--- a/data-otservbr-global/monster/magicals/sphinx.lua
+++ b/data-otservbr-global/monster/magicals/sphinx.lua
@@ -91,9 +91,9 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -400 },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -200, maxDamage = -500, length = 6, spread = 3, effect = CONST_ME_FIREAREA, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_HOLYDAMAGE, minDamage = -100, maxDamage = -350, range = 5, radius = 3, shootEffect = CONST_ANI_SMALLHOLY, effect = CONST_ME_HOLYAREA, target = true },
- { name = "combat", interval = 2000, chance = 18, type = COMBAT_ENERGYDAMAGE, minDamage = -200, maxDamage = -400, radius = 3, effect = CONST_ME_ENERGYAREA, target = false },
+ { name = "combat", interval = 2000, chance = 30, type = COMBAT_FIREDAMAGE, minDamage = -200, maxDamage = -500, length = 6, spread = 0, effect = CONST_ME_FIREAREA, target = false },
+ { name = "combat", interval = 2000, chance = 35, type = COMBAT_HOLYDAMAGE, minDamage = -100, maxDamage = -350, range = 5, radius = 3, shootEffect = CONST_ANI_SMALLHOLY, effect = CONST_ME_HOLYAREA, target = true },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -200, maxDamage = -400, radius = 3, effect = CONST_ME_ENERGYAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/magicals/terrorsleep.lua b/data-otservbr-global/monster/magicals/terrorsleep.lua
index f4bca2b0395..531081d1cdd 100644
--- a/data-otservbr-global/monster/magicals/terrorsleep.lua
+++ b/data-otservbr-global/monster/magicals/terrorsleep.lua
@@ -106,7 +106,7 @@ monster.attacks = {
{ name = "condition", type = CONDITION_POISON, interval = 2000, chance = 20, minDamage = -1000, maxDamage = -1500, radius = 7, effect = CONST_ME_YELLOW_RINGS, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -100, maxDamage = -300, radius = 5, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "feversleep skill reducer", interval = 2000, chance = 10, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -350, maxDamage = -500, length = 6, spread = 3, effect = CONST_ME_YELLOWENERGY, target = true },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -350, maxDamage = -500, length = 6, spread = 0, effect = CONST_ME_YELLOWENERGY, target = true },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -200, maxDamage = -450, radius = 1, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = true },
}
diff --git a/data-otservbr-global/monster/magicals/thanatursus.lua b/data-otservbr-global/monster/magicals/thanatursus.lua
index cda3e1ed7e7..eb4217bc4cb 100644
--- a/data-otservbr-global/monster/magicals/thanatursus.lua
+++ b/data-otservbr-global/monster/magicals/thanatursus.lua
@@ -103,7 +103,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -200, maxDamage = -450 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_HOLYDAMAGE, minDamage = -250, maxDamage = -400, radius = 3, effect = CONST_ME_HOLYAREA, target = true },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -280, maxDamage = -450, length = 4, spread = 3, effect = CONST_ME_ENERGYAREA, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -280, maxDamage = -450, length = 4, spread = 0, effect = CONST_ME_ENERGYAREA, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -250, maxDamage = -400, radius = 6, effect = CONST_ME_BLOCKHIT, target = true },
}
diff --git a/data-otservbr-global/monster/magicals/venerable_girtablilu.lua b/data-otservbr-global/monster/magicals/venerable_girtablilu.lua
index 558aaffee4a..00da4d9320d 100644
--- a/data-otservbr-global/monster/magicals/venerable_girtablilu.lua
+++ b/data-otservbr-global/monster/magicals/venerable_girtablilu.lua
@@ -103,7 +103,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -550, effect = CONST_ME_DRAWBLOOD },
{ name = "combat", interval = 2750, chance = 30, type = COMBAT_DEATHDAMAGE, minDamage = -200, maxDamage = -500, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = true },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_EARTHDAMAGE, minDamage = -200, maxDamage = -400, length = 4, spread = 3, effect = CONST_ME_HITBYPOISON, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_EARTHDAMAGE, minDamage = -200, maxDamage = -400, length = 4, spread = 0, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "combat", interval = 2000, chance = 40, type = COMBAT_EARTHDAMAGE, minDamage = -200, maxDamage = -400, radius = 3, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "girtablilu poison wave", interval = 2000, chance = 30, minDamage = -200, maxDamage = -400 },
}
diff --git a/data-otservbr-global/monster/magicals/weakened_frazzlemaw.lua b/data-otservbr-global/monster/magicals/weakened_frazzlemaw.lua
index d7e8eba093f..b496e017346 100644
--- a/data-otservbr-global/monster/magicals/weakened_frazzlemaw.lua
+++ b/data-otservbr-global/monster/magicals/weakened_frazzlemaw.lua
@@ -107,8 +107,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 90, attack = 80 },
-- bleed
- { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 10, minDamage = -80, maxDamage = -200, radius = 3, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -200, length = 5, spread = 3, effect = CONST_ME_EXPLOSIONAREA, target = false },
+ { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 10, minDamage = -80, maxDamage = -200, radius = 3, effect = CONST_ME_DRAWBLOOD, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -200, length = 5, spread = 0, effect = CONST_ME_EXPLOSIONAREA, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -100, radius = 2, shootEffect = CONST_ANI_LARGEROCK, effect = CONST_ME_STONES, target = true },
{ name = "speed", interval = 2000, chance = 15, speedChange = -600, radius = 5, effect = CONST_ME_MAGIC_RED, target = false, duration = 15000 },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -80, maxDamage = -50, radius = 4, effect = CONST_ME_MAGIC_RED, target = false },
diff --git a/data-otservbr-global/monster/mammals/doom_deer.lua b/data-otservbr-global/monster/mammals/doom_deer.lua
index 02dfda0bcd8..126f18cdac4 100644
--- a/data-otservbr-global/monster/mammals/doom_deer.lua
+++ b/data-otservbr-global/monster/mammals/doom_deer.lua
@@ -79,7 +79,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -100 },
- { name = "combat", interval = 4000, chance = 30, type = COMBAT_ENERGYDAMAGE, minDamage = -35, maxDamage = -55, length = 5, spread = 3, effect = CONST_ME_BIGCLOUDS, target = false },
+ { name = "combat", interval = 4000, chance = 30, type = COMBAT_ENERGYDAMAGE, minDamage = -35, maxDamage = -55, length = 5, spread = 0, effect = CONST_ME_BIGCLOUDS, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/mammals/vulcongra.lua b/data-otservbr-global/monster/mammals/vulcongra.lua
index 04218b3e464..3c728dd8da6 100644
--- a/data-otservbr-global/monster/mammals/vulcongra.lua
+++ b/data-otservbr-global/monster/mammals/vulcongra.lua
@@ -100,7 +100,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -235 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -195, maxDamage = -340, length = 8, spread = 3, effect = CONST_ME_EXPLOSIONHIT, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -195, maxDamage = -340, length = 8, spread = 0, effect = CONST_ME_EXPLOSIONHIT, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -100, maxDamage = -200, range = 7, shootEffect = CONST_ANI_FIRE, target = true },
{ name = "vulcongra soulfire", interval = 3000, chance = 100, target = false },
}
diff --git a/data-otservbr-global/monster/mammals/yeti.lua b/data-otservbr-global/monster/mammals/yeti.lua
index 33447765d34..7ef601194dc 100644
--- a/data-otservbr-global/monster/mammals/yeti.lua
+++ b/data-otservbr-global/monster/mammals/yeti.lua
@@ -87,7 +87,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/plants/carniphila.lua b/data-otservbr-global/monster/plants/carniphila.lua
index 4251cde140a..ab52039d6a9 100644
--- a/data-otservbr-global/monster/plants/carniphila.lua
+++ b/data-otservbr-global/monster/plants/carniphila.lua
@@ -88,7 +88,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -100, condition = { type = CONDITION_POISON, totalDamage = 100, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -60, maxDamage = -95, range = 7, shootEffect = CONST_ANI_POISON, effect = CONST_ME_GREEN_RINGS, target = false },
- { name = "speed", interval = 2000, chance = 15, speedChange = -800, range = 7, shootEffect = CONST_ANI_POISON, effect = CONST_ME_GREEN_RINGS, target = false, duration = 30000 },
+ { name = "speed", interval = 2000, chance = 15, speedChange = -100, range = 7, shootEffect = CONST_ANI_POISON, effect = CONST_ME_GREEN_RINGS, target = false, duration = 30000 },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -40, maxDamage = -130, radius = 3, effect = CONST_ME_POISONAREA, target = false },
}
diff --git a/data-otservbr-global/monster/plants/haunted_treeling.lua b/data-otservbr-global/monster/plants/haunted_treeling.lua
index 15bf394b1b0..c8b13f61553 100644
--- a/data-otservbr-global/monster/plants/haunted_treeling.lua
+++ b/data-otservbr-global/monster/plants/haunted_treeling.lua
@@ -96,7 +96,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -150 },
{ name = "combat", interval = 2000, chance = 5, type = COMBAT_MANADRAIN, minDamage = -30, maxDamage = -100, radius = 4, effect = CONST_ME_GREEN_RINGS, target = false },
- { name = "speed", interval = 2000, chance = 15, speedChange = -700, length = 5, spread = 3, effect = CONST_ME_SMALLPLANTS, target = false, duration = 15000 },
+ { name = "speed", interval = 2000, chance = 15, speedChange = -700, length = 5, spread = 0, effect = CONST_ME_SMALLPLANTS, target = false, duration = 15000 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -100, range = 7, radius = 1, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_CARNIPHILA, target = true },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -55, maxDamage = -100, radius = 4, effect = CONST_ME_HITBYPOISON, target = true },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, radius = 1, effect = CONST_ME_POISONAREA, target = false },
diff --git a/data-otservbr-global/monster/plants/hideous_fungus.lua b/data-otservbr-global/monster/plants/hideous_fungus.lua
index a4938bcf765..a80ba080fd7 100644
--- a/data-otservbr-global/monster/plants/hideous_fungus.lua
+++ b/data-otservbr-global/monster/plants/hideous_fungus.lua
@@ -109,7 +109,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -450 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -250, maxDamage = -430, range = 7, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_SMALLPLANTS, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_ICEDAMAGE, minDamage = -250, maxDamage = -550, length = 8, spread = 3, shootEffect = CONST_ANI_SNOWBALL, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_ICEDAMAGE, minDamage = -250, maxDamage = -550, length = 8, spread = 0, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_ICEAREA, target = false },
{ name = "speed", interval = 2000, chance = 10, speedChange = -600, radius = 1, effect = CONST_ME_MAGIC_RED, target = true, duration = 60000 },
{ name = "drunk", interval = 2000, chance = 10, range = 7, radius = 5, shootEffect = CONST_ANI_SMALLSTONE, effect = CONST_ME_STUN, target = true, duration = 4000 },
-- poison
diff --git a/data-otservbr-global/monster/plants/humongous_fungus.lua b/data-otservbr-global/monster/plants/humongous_fungus.lua
index e80d2c162e6..942684e732c 100644
--- a/data-otservbr-global/monster/plants/humongous_fungus.lua
+++ b/data-otservbr-global/monster/plants/humongous_fungus.lua
@@ -106,8 +106,8 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -180, maxDamage = -350, range = 7, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_SMALLPLANTS, target = false },
{ name = "poisonfield", interval = 2000, chance = 20, radius = 4, target = false },
-- poison
- { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -500, maxDamage = -1000, length = 8, spread = 3, effect = CONST_ME_GREEN_RINGS, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -130, maxDamage = -260, length = 5, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -500, maxDamage = -1000, length = 8, spread = 0, effect = CONST_ME_GREEN_RINGS, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -130, maxDamage = -260, length = 5, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -400, maxDamage = -640, range = 7, radius = 3, effect = CONST_ME_HITBYPOISON, target = false },
}
diff --git a/data-otservbr-global/monster/plants/omnivora.lua b/data-otservbr-global/monster/plants/omnivora.lua
index 7bd18d7d981..0136d014a19 100644
--- a/data-otservbr-global/monster/plants/omnivora.lua
+++ b/data-otservbr-global/monster/plants/omnivora.lua
@@ -96,7 +96,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -150 },
{ name = "speed", interval = 4000, chance = 20, speedChange = -350, range = 7, shootEffect = CONST_ANI_POISON, target = true, duration = 12000 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_EARTHDAMAGE, minDamage = -80, maxDamage = -100, range = 7, shootEffect = CONST_ANI_POISON, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -50, maxDamage = -100, length = 8, spread = 3, effect = CONST_ME_POISONAREA, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -50, maxDamage = -100, length = 8, spread = 0, effect = CONST_ME_POISONAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/ancient_feud/yirkas_blue_scales.lua b/data-otservbr-global/monster/quests/ancient_feud/yirkas_blue_scales.lua
index 588610e04c0..e469fa36986 100644
--- a/data-otservbr-global/monster/quests/ancient_feud/yirkas_blue_scales.lua
+++ b/data-otservbr-global/monster/quests/ancient_feud/yirkas_blue_scales.lua
@@ -96,7 +96,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -100, condition = { type = CONDITION_POISON, totalDamage = 15, interval = 4000 } },
- { name = "combat", interval = 2000, chance = 30, type = COMBAT_EARTHDAMAGE, minDamage = -400, maxDamage = -500, length = 3, spread = 1, effect = CONST_ME_POISONAREA, target = false },
+ { name = "combat", interval = 2000, chance = 30, type = COMBAT_EARTHDAMAGE, minDamage = -400, maxDamage = -500, length = 3, spread = 0, effect = CONST_ME_POISONAREA, target = false },
{ name = "combat", interval = 2000, chance = 30, type = COMBAT_ENERGYDAMAGE, minDamage = -250, maxDamage = -350, range = 3, radius = 3, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_ENERGYHIT, target = true },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -400, maxDamage = -500, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_ENERGYAREA, target = true },
{ name = "combat", interval = 2000, chance = 30, type = COMBAT_ENERGYDAMAGE, minDamage = -200, maxDamage = -300, radius = 4, effect = CONST_ME_ENERGYAREA, target = false },
diff --git a/data-otservbr-global/monster/quests/ancient_tombs/horestis.lua b/data-otservbr-global/monster/quests/ancient_tombs/horestis.lua
index 10a677505e8..1fb41b7b2dc 100644
--- a/data-otservbr-global/monster/quests/ancient_tombs/horestis.lua
+++ b/data-otservbr-global/monster/quests/ancient_tombs/horestis.lua
@@ -98,7 +98,7 @@ monster.attacks = {
{ name = "drunk", interval = 3000, chance = 11, radius = 6, effect = CONST_ME_POISONAREA, target = false, duration = 25000 },
{ name = "speed", interval = 1000, chance = 25, speedChange = -350, length = 7, spread = 3, effect = CONST_ME_POISONAREA, target = false, duration = 30000 },
-- poison
- { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 30, minDamage = -35, maxDamage = -35, radius = 5, target = false },
+ { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 30, minDamage = -35, maxDamage = -35, radius = 5, effect = CONST_ME_HITBYPOISON, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/ancient_tombs/thalas.lua b/data-otservbr-global/monster/quests/ancient_tombs/thalas.lua
index d6ad2f68864..6f27b9f17f2 100644
--- a/data-otservbr-global/monster/quests/ancient_tombs/thalas.lua
+++ b/data-otservbr-global/monster/quests/ancient_tombs/thalas.lua
@@ -92,7 +92,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -900 },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_EARTHDAMAGE, minDamage = -150, maxDamage = -650, range = 7, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = false },
{ name = "melee", interval = 3000, chance = 20, minDamage = -150, maxDamage = -650 },
- { name = "speed", interval = 1000, chance = 6, speedChange = -800, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 20000 },
+ { name = "speed", interval = 1000, chance = 6, speedChange = -100, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 20000 },
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 1000, chance = 15, minDamage = -34, maxDamage = -35, radius = 5, effect = CONST_ME_POISONAREA, target = false },
{ name = "combat", interval = 3000, chance = 17, type = COMBAT_EARTHDAMAGE, minDamage = -55, maxDamage = -550, length = 8, spread = 3, effect = CONST_ME_POISONAREA, target = false },
diff --git a/data-otservbr-global/monster/quests/annihilator/angry_demon.lua b/data-otservbr-global/monster/quests/annihilator/angry_demon.lua
index 3d9d9a4fe80..043bd12affe 100644
--- a/data-otservbr-global/monster/quests/annihilator/angry_demon.lua
+++ b/data-otservbr-global/monster/quests/annihilator/angry_demon.lua
@@ -108,12 +108,19 @@ monster.loot = {
}
monster.attacks = {
- { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -520 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = 0, maxDamage = -120, range = 7, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -150, maxDamage = -250, range = 7, radius = 7, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
+ -- {name ="melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -520},
+ -- {name ="combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = 0, maxDamage = -120, range = 7, target = false},
+ -- {name ="combat", interval = 2000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -150, maxDamage = -250, range = 7, radius = 7, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true},
+ -- {name ="firefield", interval = 2000, chance = 10, range = 7, radius = 1, shootEffect = CONST_ANI_FIRE, target = true},
+ -- {name ="combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -300, maxDamage = -490, length = 8,spread = 03, effect = CONST_ME_PURPLEENERGY, target = false},
+ -- {name ="combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -210, maxDamage = -300, range = 1, shootEffect = CONST_ANI_ENERGY, target = false},
+ -- {name ="speed", interval = 2000, chance = 15, speedChange = -700, radius = 1, effect = CONST_ME_MAGIC_RED, target = true, duration = 30000}
+ { name = "melee", interval = 2000, chance = 500, minDamage = 0, maxDamage = -1940 },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = 0, maxDamage = -150, range = 7, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -650, maxDamage = -900, range = 7, radius = 7, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
{ name = "firefield", interval = 2000, chance = 10, range = 7, radius = 1, shootEffect = CONST_ANI_FIRE, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -300, maxDamage = -490, length = 8, spread = 3, effect = CONST_ME_PURPLEENERGY, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -210, maxDamage = -300, range = 1, shootEffect = CONST_ANI_ENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -300, maxDamage = -800, length = 8, spread = 0, effect = CONST_ME_PURPLEENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -1050, maxDamage = -1500, range = 1, shootEffect = CONST_ANI_ENERGY, target = true },
{ name = "speed", interval = 2000, chance = 15, speedChange = -700, radius = 1, effect = CONST_ME_MAGIC_RED, target = true, duration = 30000 },
}
diff --git a/data-otservbr-global/monster/quests/bigfoots_burden/minion_of_versperoth.lua b/data-otservbr-global/monster/quests/bigfoots_burden/minion_of_versperoth.lua
index 380939429e9..bc1cb2539f2 100644
--- a/data-otservbr-global/monster/quests/bigfoots_burden/minion_of_versperoth.lua
+++ b/data-otservbr-global/monster/quests/bigfoots_burden/minion_of_versperoth.lua
@@ -65,8 +65,8 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -390 },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -350, maxDamage = -700, length = 8, spread = 3, effect = CONST_ME_FIREATTACK, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -600, maxDamage = -1300, length = 8, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -350, maxDamage = -700, length = 8, spread = 0, effect = CONST_ME_FIREATTACK, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -600, maxDamage = -1300, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = false },
{ name = "lava golem soulfire", interval = 2000, chance = 15, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -220, maxDamage = -350, radius = 4, effect = CONST_ME_FIREAREA, target = true },
{ name = "speed", interval = 2000, chance = 10, speedChange = -300, length = 5, spread = 3, effect = CONST_ME_BLOCKHIT, target = false, duration = 10000 },
diff --git a/data-otservbr-global/monster/quests/cults_of_tibia/animated_guzzlemaw.lua b/data-otservbr-global/monster/quests/cults_of_tibia/animated_guzzlemaw.lua
index 66088ce9f07..6d723c594ea 100644
--- a/data-otservbr-global/monster/quests/cults_of_tibia/animated_guzzlemaw.lua
+++ b/data-otservbr-global/monster/quests/cults_of_tibia/animated_guzzlemaw.lua
@@ -96,11 +96,11 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -499 },
-- bleed
- { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 10, minDamage = -500, maxDamage = -1000, radius = 3, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -900, length = 8, spread = 3, effect = CONST_ME_EXPLOSIONAREA, target = true },
+ { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 10, minDamage = -500, maxDamage = -1000, radius = 3, effect = CONST_ME_DRAWBLOOD, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -900, length = 8, spread = 0, effect = CONST_ME_EXPLOSIONAREA, target = true },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -500, radius = 2, shootEffect = CONST_ANI_LARGEROCK, effect = CONST_ME_STONES, target = true },
- { name = "speed", interval = 2000, chance = 15, speedChange = -800, radius = 6, effect = CONST_ME_MAGIC_RED, target = false, duration = 15000 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -800, length = 8, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "speed", interval = 2000, chance = 15, speedChange = -100, radius = 6, effect = CONST_ME_MAGIC_RED, target = false, duration = 15000 },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -800, length = 8, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/cults_of_tibia/bosses/eliz_the_unyielding.lua b/data-otservbr-global/monster/quests/cults_of_tibia/bosses/eliz_the_unyielding.lua
index 41c7815e73c..27e60f9562f 100644
--- a/data-otservbr-global/monster/quests/cults_of_tibia/bosses/eliz_the_unyielding.lua
+++ b/data-otservbr-global/monster/quests/cults_of_tibia/bosses/eliz_the_unyielding.lua
@@ -76,7 +76,7 @@ monster.defenses = {
defense = 50,
armor = 35,
-- mitigation = ???,
- { name = "cults of tibia armor buff", interval = 2000, chance = 40, radius = 8, target = false },
+ { name = "cults of tibia armor buff", interval = 2000, chance = 40, radius = 8, effect = CONST_ME_MAGIC_GREEN, target = false },
}
monster.elements = {
diff --git a/data-otservbr-global/monster/quests/cults_of_tibia/bosses/eliz_the_unyielding_stop.lua b/data-otservbr-global/monster/quests/cults_of_tibia/bosses/eliz_the_unyielding_stop.lua
index d740224c443..68fbd743163 100644
--- a/data-otservbr-global/monster/quests/cults_of_tibia/bosses/eliz_the_unyielding_stop.lua
+++ b/data-otservbr-global/monster/quests/cults_of_tibia/bosses/eliz_the_unyielding_stop.lua
@@ -72,7 +72,7 @@ monster.attacks = {
monster.defenses = {
defense = 50,
armor = 35,
- { name = "cults of tibia armor buff", interval = 2000, chance = 40, radius = 9, target = false },
+ { name = "cults of tibia armor buff", interval = 2000, chance = 40, radius = 9, effect = CONST_ME_MAGIC_GREEN, target = false },
}
monster.elements = {
diff --git a/data-otservbr-global/monster/quests/cults_of_tibia/bosses/essence_of_malice.lua b/data-otservbr-global/monster/quests/cults_of_tibia/bosses/essence_of_malice.lua
index ef49131374d..3c9b9b0bba4 100644
--- a/data-otservbr-global/monster/quests/cults_of_tibia/bosses/essence_of_malice.lua
+++ b/data-otservbr-global/monster/quests/cults_of_tibia/bosses/essence_of_malice.lua
@@ -99,9 +99,9 @@ monster.attacks = {
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -520, maxDamage = -780, range = 5, effect = CONST_ME_SMALLCLOUDS, target = true },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -80, maxDamage = -230, range = 7, effect = CONST_ME_MAGIC_RED, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -120, maxDamage = -250, length = 8, spread = 3, effect = CONST_ME_LOSEENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -120, maxDamage = -250, length = 8, spread = 0, effect = CONST_ME_LOSEENERGY, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = -110, maxDamage = -180, radius = 4, effect = CONST_ME_MORTAREA, target = false },
- { name = "speed", interval = 2000, chance = 20, speedChange = -800, range = 7, effect = CONST_ME_SMALLCLOUDS, target = true, duration = 30000 },
+ { name = "speed", interval = 2000, chance = 20, speedChange = -100, range = 7, effect = CONST_ME_SMALLCLOUDS, target = true, duration = 30000 },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_armored_voidborn.lua b/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_armored_voidborn.lua
index d9996962a2f..ca74cf1da8f 100644
--- a/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_armored_voidborn.lua
+++ b/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_armored_voidborn.lua
@@ -73,7 +73,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -550 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = 0, maxDamage = -400, length = 7, spread = 5, effect = CONST_ME_SMALLCLOUDS, target = false },
- { name = "combat", interval = 2000, chance = 30, type = COMBAT_ENERGYDAMAGE, minDamage = -250, maxDamage = -440, radius = 5, target = false },
+ { name = "combat", interval = 2000, chance = 30, type = COMBAT_ENERGYDAMAGE, minDamage = -250, maxDamage = -440, radius = 5, effect = CONST_ME_ENERGYHIT, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_corruptor_of_souls.lua b/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_corruptor_of_souls.lua
index adc1b89d393..97191072a25 100644
--- a/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_corruptor_of_souls.lua
+++ b/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_corruptor_of_souls.lua
@@ -73,8 +73,8 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_DEATHDAMAGE, minDamage = 0, maxDamage = -500, length = 9, spread = 7, effect = CONST_ME_SMALLCLOUDS, target = false },
{ name = "remorseless wave", interval = 2000, chance = 25, target = false },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -500, radius = 7, effect = CONST_ME_HITAREA, target = false },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -500, length = 9, spread = 3, effect = CONST_ME_STUN, target = false },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_DEATHDAMAGE, minDamage = 0, maxDamage = -500, length = 9, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -500, length = 9, spread = 0, effect = CONST_ME_STUN, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_DEATHDAMAGE, minDamage = 0, maxDamage = -500, length = 9, spread = 0, effect = CONST_ME_MORTAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_remorseless_corruptor.lua b/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_remorseless_corruptor.lua
index ed10d546780..76087b32c2a 100644
--- a/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_remorseless_corruptor.lua
+++ b/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_remorseless_corruptor.lua
@@ -66,11 +66,11 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -150, maxDamage = -500 },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -500, length = 9, spread = 3, effect = CONST_ME_LOSEENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -500, length = 9, spread = 0, effect = CONST_ME_LOSEENERGY, target = false },
{ name = "remorseless wave", interval = 2000, chance = 25, target = false },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -500, radius = 7, effect = CONST_ME_HITAREA, target = false },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -500, length = 9, spread = 3, effect = CONST_ME_STUN, target = false },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_DEATHDAMAGE, minDamage = 0, maxDamage = -500, length = 9, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -500, length = 9, spread = 0, effect = CONST_ME_STUN, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_DEATHDAMAGE, minDamage = 0, maxDamage = -500, length = 9, spread = 0, effect = CONST_ME_MORTAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_souldespoiler.lua b/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_souldespoiler.lua
index 35878eae9bf..976fe5fe317 100644
--- a/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_souldespoiler.lua
+++ b/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_souldespoiler.lua
@@ -125,7 +125,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -783 },
{ name = "combat", interval = 2000, chance = 60, type = COMBAT_DEATHDAMAGE, minDamage = -30, maxDamage = -181, range = 7, radius = 3, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_SMALLCLOUDS, target = true },
{ name = "combat", interval = 2000, chance = 50, type = COMBAT_ENERGYDAMAGE, minDamage = -210, maxDamage = -538, length = 7, spread = 2, effect = CONST_ME_PURPLEENERGY, target = false },
- { name = "combat", interval = 3000, chance = 30, type = COMBAT_DROWNDAMAGE, minDamage = -125, maxDamage = -640, length = 9, spread = 3, effect = CONST_ME_LOSEENERGY, target = false },
+ { name = "combat", interval = 3000, chance = 30, type = COMBAT_DROWNDAMAGE, minDamage = -125, maxDamage = -640, length = 9, spread = 0, effect = CONST_ME_LOSEENERGY, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_unarmored_voidborn.lua b/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_unarmored_voidborn.lua
index 0dbf6743e2d..04df78685ac 100644
--- a/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_unarmored_voidborn.lua
+++ b/data-otservbr-global/monster/quests/cults_of_tibia/bosses/the_unarmored_voidborn.lua
@@ -107,7 +107,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -550 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = 0, maxDamage = -400, length = 7, spread = 5, effect = CONST_ME_SMALLCLOUDS, target = false },
- { name = "combat", interval = 2000, chance = 30, type = COMBAT_ENERGYDAMAGE, minDamage = -250, maxDamage = -440, radius = 5, target = false },
+ { name = "combat", interval = 2000, chance = 30, type = COMBAT_ENERGYDAMAGE, minDamage = -250, maxDamage = -440, radius = 5, effect = CONST_ME_ENERGYHIT, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/cults_of_tibia/goldhanded_cultist.lua b/data-otservbr-global/monster/quests/cults_of_tibia/goldhanded_cultist.lua
index 285d72caac0..428924ad140 100644
--- a/data-otservbr-global/monster/quests/cults_of_tibia/goldhanded_cultist.lua
+++ b/data-otservbr-global/monster/quests/cults_of_tibia/goldhanded_cultist.lua
@@ -91,9 +91,9 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -250 },
- { name = "combat", interval = 3000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -150, radius = 5, target = false },
+ { name = "combat", interval = 3000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -150, radius = 5, effect = CONST_ME_DRAWBLOOD, target = false },
{ name = "combat", interval = 3000, chance = 10, type = COMBAT_MANADRAIN, minDamage = 0, maxDamage = -200, effect = CONST_ME_LOSEENERGY, target = true },
- { name = "combat", interval = 1000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -250, range = 5, radius = 2, target = true },
+ { name = "combat", interval = 1000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -250, range = 5, radius = 2, effect = CONST_ME_DRAWBLOOD, target = true },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/dangerous_depth/aggressive_matter.lua b/data-otservbr-global/monster/quests/dangerous_depth/aggressive_matter.lua
index 2ac350a7e0d..8d97c0d010e 100644
--- a/data-otservbr-global/monster/quests/dangerous_depth/aggressive_matter.lua
+++ b/data-otservbr-global/monster/quests/dangerous_depth/aggressive_matter.lua
@@ -67,7 +67,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 58, attack = 50, condition = { type = CONDITION_POISON, totalDamage = 280, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 13, type = COMBAT_EARTHDAMAGE, minDamage = -150, maxDamage = -250, range = 7, radius = 3, shootEffect = CONST_ANI_GLOOTHSPEAR, effect = CONST_ME_POISONAREA, target = true },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -150, maxDamage = -230, length = 6, spread = 3, effect = CONST_ME_POISONAREA, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -150, maxDamage = -230, length = 6, spread = 0, effect = CONST_ME_POISONAREA, target = false },
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -200, maxDamage = -300, range = 7, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = true },
{ name = "rot elemental paralyze", interval = 2000, chance = 11, target = false },
diff --git a/data-otservbr-global/monster/quests/dangerous_depth/bosses/ancient_spawn_of_morgathla.lua b/data-otservbr-global/monster/quests/dangerous_depth/bosses/ancient_spawn_of_morgathla.lua
index 5d505317891..07b4e43819e 100644
--- a/data-otservbr-global/monster/quests/dangerous_depth/bosses/ancient_spawn_of_morgathla.lua
+++ b/data-otservbr-global/monster/quests/dangerous_depth/bosses/ancient_spawn_of_morgathla.lua
@@ -90,7 +90,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 90, attack = 80 },
- { name = "combat", interval = 2000, chance = 8, type = COMBAT_LIFEDRAIN, minDamage = -135, maxDamage = -280, range = 7, radius = 5, shootEffect = CONST_ANI_WHIRLWINDAXE, target = true },
+ { name = "combat", interval = 2000, chance = 8, type = COMBAT_LIFEDRAIN, minDamage = -135, maxDamage = -280, range = 7, radius = 5, shootEffect = CONST_ANI_WHIRLWINDAXE, effect = CONST_ME_HITAREA, target = true },
{ name = "combat", interval = 2000, chance = 8, type = COMBAT_PHYSICALDAMAGE, minDamage = -90, maxDamage = -200, range = 7, shootEffect = CONST_ANI_WHIRLWINDAXE, effect = CONST_ME_EXPLOSIONAREA, target = true },
}
diff --git a/data-otservbr-global/monster/quests/dangerous_depth/bosses/the_count_of_the_core.lua b/data-otservbr-global/monster/quests/dangerous_depth/bosses/the_count_of_the_core.lua
index 80878aaa360..d611e78d84b 100644
--- a/data-otservbr-global/monster/quests/dangerous_depth/bosses/the_count_of_the_core.lua
+++ b/data-otservbr-global/monster/quests/dangerous_depth/bosses/the_count_of_the_core.lua
@@ -119,11 +119,11 @@ monster.loot = {
}
monster.attacks = {
- { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -1500 },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = 0, maxDamage = -1500, range = 3, length = 9, spread = 3, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = 0, maxDamage = -1500, range = 3, length = 9, spread = 4, effect = CONST_ME_SMALLCLOUDS, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -1500, radius = 8, effect = CONST_ME_HITAREA, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = 0, maxDamage = -1500, radius = 8, effect = CONST_ME_BLACKSMOKE, target = false },
+ { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -900 },
+ { name = "combat", interval = 6000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = 0, maxDamage = -1500, range = 3, length = 9, spread = 0, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 4000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = 0, maxDamage = -1500, range = 3, length = 9, spread = 4, effect = CONST_ME_SMALLCLOUDS, target = false },
+ { name = "combat", interval = 4000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -1500, radius = 8, effect = CONST_ME_HITAREA, target = false },
+ { name = "combat", interval = 4000, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = 0, maxDamage = -1500, radius = 8, effect = CONST_ME_BLACKSMOKE, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/feaster_of_souls/irgix_the_flimsy.lua b/data-otservbr-global/monster/quests/feaster_of_souls/irgix_the_flimsy.lua
index ff5de342507..307f1b27380 100644
--- a/data-otservbr-global/monster/quests/feaster_of_souls/irgix_the_flimsy.lua
+++ b/data-otservbr-global/monster/quests/feaster_of_souls/irgix_the_flimsy.lua
@@ -82,8 +82,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -500 },
- { name = "combat", interval = 1500, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -500, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, target = true },
- { name = "combat", interval = 1500, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -650, length = 4, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 1500, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -500, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, effect = CONST_ME_HITBYPOISON, target = true },
+ { name = "combat", interval = 1500, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -650, length = 4, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 1500, chance = 35, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -650, radius = 4, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 1500, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -650, radius = 4, effect = CONST_ME_ENERGYAREA, target = false },
}
diff --git a/data-otservbr-global/monster/quests/feaster_of_souls/the_fear_feaster.lua b/data-otservbr-global/monster/quests/feaster_of_souls/the_fear_feaster.lua
index b5f69b05e3f..85a6444085b 100644
--- a/data-otservbr-global/monster/quests/feaster_of_souls/the_fear_feaster.lua
+++ b/data-otservbr-global/monster/quests/feaster_of_souls/the_fear_feaster.lua
@@ -100,7 +100,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 600, maxDamage = -1050, condition = { type = CONDITION_POISON, totalDamage = 4, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 100, type = COMBAT_LIFEDRAIN, minDamage = -900, maxDamage = -1400, effect = CONST_ME_MAGIC_RED, target = true },
- { name = "combat", interval = 1000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -1000, maxDamage = -1750, radius = 2, shootEffect = CONST_ANI_SMALLEARTH, target = false },
+ { name = "combat", interval = 1000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -1000, maxDamage = -1750, radius = 2, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "drunk", interval = 1000, chance = 70, range = 7, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_ENERGYAREA, target = false },
{ name = "strength", interval = 1000, chance = 60, range = 7, shootEffect = CONST_ANI_LARGEROCK, effect = CONST_ME_ENERGYAREA, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -900, length = 5, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
diff --git a/data-otservbr-global/monster/quests/feaster_of_souls/the_pale_worm.lua b/data-otservbr-global/monster/quests/feaster_of_souls/the_pale_worm.lua
index a2d99ab1f13..ab309d2f583 100644
--- a/data-otservbr-global/monster/quests/feaster_of_souls/the_pale_worm.lua
+++ b/data-otservbr-global/monster/quests/feaster_of_souls/the_pale_worm.lua
@@ -108,7 +108,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 600, maxDamage = -1050, condition = { type = CONDITION_POISON, totalDamage = 4, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 100, type = COMBAT_LIFEDRAIN, minDamage = -900, maxDamage = -1400, effect = CONST_ME_MAGIC_RED, target = true },
- { name = "combat", interval = 1000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -1000, maxDamage = -1750, radius = 2, shootEffect = CONST_ANI_SMALLEARTH, target = false },
+ { name = "combat", interval = 1000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -1000, maxDamage = -1750, radius = 2, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "drunk", interval = 1000, chance = 70, range = 7, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_ENERGYAREA, target = false },
{ name = "strength", interval = 1000, chance = 60, range = 7, shootEffect = CONST_ANI_LARGEROCK, effect = CONST_ME_ENERGYAREA, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -900, length = 5, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
diff --git a/data-otservbr-global/monster/quests/feaster_of_souls/the_unwelcome.lua b/data-otservbr-global/monster/quests/feaster_of_souls/the_unwelcome.lua
index 7c0cd052961..e4abf230b1d 100644
--- a/data-otservbr-global/monster/quests/feaster_of_souls/the_unwelcome.lua
+++ b/data-otservbr-global/monster/quests/feaster_of_souls/the_unwelcome.lua
@@ -102,7 +102,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 600, maxDamage = -1050, condition = { type = CONDITION_POISON, totalDamage = 4, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 100, type = COMBAT_LIFEDRAIN, minDamage = -900, maxDamage = -1400, effect = CONST_ME_MAGIC_RED, target = true },
- { name = "combat", interval = 1000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -1000, maxDamage = -1750, radius = 2, shootEffect = CONST_ANI_SMALLEARTH, target = false },
+ { name = "combat", interval = 1000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -1000, maxDamage = -1750, radius = 2, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "drunk", interval = 1000, chance = 70, range = 7, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_ENERGYAREA, target = false },
{ name = "strength", interval = 1000, chance = 60, range = 7, shootEffect = CONST_ANI_LARGEROCK, effect = CONST_ME_ENERGYAREA, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -900, length = 5, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
diff --git a/data-otservbr-global/monster/quests/feaster_of_souls/unaz_the_mean.lua b/data-otservbr-global/monster/quests/feaster_of_souls/unaz_the_mean.lua
index 3788bd28778..fb871252bea 100644
--- a/data-otservbr-global/monster/quests/feaster_of_souls/unaz_the_mean.lua
+++ b/data-otservbr-global/monster/quests/feaster_of_souls/unaz_the_mean.lua
@@ -81,8 +81,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -500 },
- { name = "combat", interval = 1500, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -500, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, target = true },
- { name = "combat", interval = 1500, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -650, length = 4, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 1500, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -500, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, effect = CONST_ME_HITBYPOISON, target = true },
+ { name = "combat", interval = 1500, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -650, length = 4, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 1500, chance = 35, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -650, radius = 4, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 1500, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -650, radius = 4, effect = CONST_ME_ENERGYAREA, target = false },
}
diff --git a/data-otservbr-global/monster/quests/feaster_of_souls/vok_the_freakish.lua b/data-otservbr-global/monster/quests/feaster_of_souls/vok_the_freakish.lua
index b6790c3f47a..4efff07d202 100644
--- a/data-otservbr-global/monster/quests/feaster_of_souls/vok_the_freakish.lua
+++ b/data-otservbr-global/monster/quests/feaster_of_souls/vok_the_freakish.lua
@@ -79,8 +79,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -500 },
- { name = "combat", interval = 1500, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -500, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, target = true },
- { name = "combat", interval = 1500, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -650, length = 4, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 1500, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -500, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, effect = CONST_ME_HITBYPOISON, target = true },
+ { name = "combat", interval = 1500, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -650, length = 4, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 1500, chance = 35, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -650, radius = 4, effect = CONST_ME_MORTAREA, target = true },
{ name = "combat", interval = 1500, chance = 20, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -650, radius = 4, effect = CONST_ME_GREEN_RINGS, target = true },
}
diff --git a/data-otservbr-global/monster/quests/ferumbras_ascendant/bosses/death_dragon.lua b/data-otservbr-global/monster/quests/ferumbras_ascendant/bosses/death_dragon.lua
index 9d96b8a2845..09c0bd382be 100644
--- a/data-otservbr-global/monster/quests/ferumbras_ascendant/bosses/death_dragon.lua
+++ b/data-otservbr-global/monster/quests/ferumbras_ascendant/bosses/death_dragon.lua
@@ -96,7 +96,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 150, attack = 60 },
{ name = "combat", interval = 2000, chance = 9, type = COMBAT_EARTHDAMAGE, minDamage = -100, maxDamage = -400, range = 7, radius = 4, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = true },
- { name = "combat", interval = 2000, chance = 9, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -400, range = 7, radius = 4, shootEffect = CONST_ANI_DEATH, target = true },
+ { name = "combat", interval = 2000, chance = 9, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -400, range = 7, radius = 4, shootEffect = CONST_ANI_DEATH, effect = CONST_ME_MORTAREA, target = true },
{ name = "combat", interval = 2000, chance = 11, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -615, range = 7, shootEffect = CONST_ANI_DEATH, effect = CONST_ME_MORTAREA, target = false },
{ name = "undead dragon curse", interval = 2000, chance = 9, target = false },
{ name = "combat", interval = 2000, chance = 9, type = COMBAT_LIFEDRAIN, minDamage = -200, maxDamage = -700, length = 8, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
diff --git a/data-otservbr-global/monster/quests/ferumbras_ascendant/bosses/destabilized_ferumbras.lua b/data-otservbr-global/monster/quests/ferumbras_ascendant/bosses/destabilized_ferumbras.lua
index 83b60ad84fb..2f67c54e633 100644
--- a/data-otservbr-global/monster/quests/ferumbras_ascendant/bosses/destabilized_ferumbras.lua
+++ b/data-otservbr-global/monster/quests/ferumbras_ascendant/bosses/destabilized_ferumbras.lua
@@ -83,7 +83,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 16, type = COMBAT_MANADRAIN, minDamage = -225, maxDamage = -410, radius = 6, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "combat", interval = 2000, chance = 21, type = COMBAT_LIFEDRAIN, minDamage = -200, maxDamage = -450, radius = 6, effect = CONST_ME_POFF, target = false },
{ name = "ferumbras soulfire", interval = 2000, chance = 20, range = 7, target = false },
- { name = "combat", interval = 2000, chance = 17, type = COMBAT_LIFEDRAIN, minDamage = -590, maxDamage = -1050, length = 8, spread = 3, effect = CONST_ME_HITBYPOISON, target = false },
+ { name = "combat", interval = 2000, chance = 17, type = COMBAT_LIFEDRAIN, minDamage = -590, maxDamage = -1050, length = 8, spread = 0, effect = CONST_ME_HITBYPOISON, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/ferumbras_ascendant/bosses/ferumbras_mortal_shell.lua b/data-otservbr-global/monster/quests/ferumbras_ascendant/bosses/ferumbras_mortal_shell.lua
index 27160109571..ca11ccb542a 100644
--- a/data-otservbr-global/monster/quests/ferumbras_ascendant/bosses/ferumbras_mortal_shell.lua
+++ b/data-otservbr-global/monster/quests/ferumbras_ascendant/bosses/ferumbras_mortal_shell.lua
@@ -153,7 +153,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 21, type = COMBAT_ENERGYDAMAGE, minDamage = -400, maxDamage = -650, radius = 9, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 2000, chance = 21, type = COMBAT_LIFEDRAIN, minDamage = -200, maxDamage = -450, radius = 6, effect = CONST_ME_POFF, target = false },
{ name = "ferumbras soulfire", interval = 2000, chance = 20, range = 7, target = false },
- { name = "combat", interval = 2000, chance = 17, type = COMBAT_LIFEDRAIN, minDamage = -590, maxDamage = -1050, length = 8, spread = 3, effect = CONST_ME_HITBYPOISON, target = false },
+ { name = "combat", interval = 2000, chance = 17, type = COMBAT_LIFEDRAIN, minDamage = -590, maxDamage = -1050, length = 8, spread = 0, effect = CONST_ME_HITBYPOISON, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/ferumbras_ascendant/bosses/ferumbras_soul_splinter.lua b/data-otservbr-global/monster/quests/ferumbras_ascendant/bosses/ferumbras_soul_splinter.lua
index 91b329140a0..c712c874376 100644
--- a/data-otservbr-global/monster/quests/ferumbras_ascendant/bosses/ferumbras_soul_splinter.lua
+++ b/data-otservbr-global/monster/quests/ferumbras_ascendant/bosses/ferumbras_soul_splinter.lua
@@ -83,7 +83,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 16, type = COMBAT_MANADRAIN, minDamage = -225, maxDamage = -410, radius = 6, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "combat", interval = 2000, chance = 21, type = COMBAT_LIFEDRAIN, minDamage = -200, maxDamage = -450, radius = 6, effect = CONST_ME_POFF, target = false },
{ name = "ferumbras soulfire", interval = 2000, chance = 20, range = 7, target = false },
- { name = "combat", interval = 2000, chance = 17, type = COMBAT_LIFEDRAIN, minDamage = -590, maxDamage = -1050, length = 8, spread = 3, effect = CONST_ME_HITBYPOISON, target = false },
+ { name = "combat", interval = 2000, chance = 17, type = COMBAT_LIFEDRAIN, minDamage = -590, maxDamage = -1050, length = 8, spread = 0, effect = CONST_ME_HITBYPOISON, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/ferumbras_ascendant/disgusting_ooze.lua b/data-otservbr-global/monster/quests/ferumbras_ascendant/disgusting_ooze.lua
index cd72c70e9fb..1f3ab4fe550 100644
--- a/data-otservbr-global/monster/quests/ferumbras_ascendant/disgusting_ooze.lua
+++ b/data-otservbr-global/monster/quests/ferumbras_ascendant/disgusting_ooze.lua
@@ -93,7 +93,7 @@ monster.attacks = {
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -300, maxDamage = -500, radius = 8, effect = CONST_ME_HITBYPOISON, target = false },
-- poison
- { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -400, maxDamage = -725, length = 8, spread = 3, effect = CONST_ME_SMALLPLANTS, target = false },
+ { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -400, maxDamage = -725, length = 8, spread = 0, effect = CONST_ME_SMALLPLANTS, target = false },
{ name = "combat", interval = 2000, chance = 14, type = COMBAT_EARTHDAMAGE, minDamage = -120, maxDamage = -170, radius = 3, effect = CONST_ME_POISONAREA, target = false },
}
diff --git a/data-otservbr-global/monster/quests/ferumbras_ascendant/lovely/lovely_frazzlemaw.lua b/data-otservbr-global/monster/quests/ferumbras_ascendant/lovely/lovely_frazzlemaw.lua
index 769b0695956..41745ffb925 100644
--- a/data-otservbr-global/monster/quests/ferumbras_ascendant/lovely/lovely_frazzlemaw.lua
+++ b/data-otservbr-global/monster/quests/ferumbras_ascendant/lovely/lovely_frazzlemaw.lua
@@ -100,8 +100,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 90, attack = 80 },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -400, radius = 3, target = false },
- { name = "combat", interval = 2000, chance = 13, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -700, length = 5, spread = 3, effect = CONST_ME_EXPLOSIONAREA, target = true },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -400, radius = 3, effect = CONST_ME_HITAREA, target = false },
+ { name = "combat", interval = 2000, chance = 13, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -700, length = 5, spread = 0, effect = CONST_ME_EXPLOSIONAREA, target = true },
-- bleed
{ name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 16, minDamage = -400, maxDamage = -600, radius = 2, shootEffect = CONST_ANI_LARGEROCK, effect = CONST_ME_STONES, target = true },
{ name = "frazzlemaw paralyze", interval = 2000, chance = 15, target = false },
diff --git a/data-otservbr-global/monster/quests/ferumbras_ascendant/lovely/lovely_yielothax.lua b/data-otservbr-global/monster/quests/ferumbras_ascendant/lovely/lovely_yielothax.lua
index 7e3b599fb98..58eb5cac0ec 100644
--- a/data-otservbr-global/monster/quests/ferumbras_ascendant/lovely/lovely_yielothax.lua
+++ b/data-otservbr-global/monster/quests/ferumbras_ascendant/lovely/lovely_yielothax.lua
@@ -86,8 +86,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 70, attack = 50 },
- { name = "combat", interval = 2000, chance = 18, type = COMBAT_LIFEDRAIN, minDamage = -70, maxDamage = -130, length = 4, spread = 3, effect = CONST_ME_ENERGYAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -50, maxDamage = -150, length = 5, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 18, type = COMBAT_LIFEDRAIN, minDamage = -70, maxDamage = -130, length = 4, spread = 0, effect = CONST_ME_ENERGYAREA, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -50, maxDamage = -150, length = 5, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -75, maxDamage = -120, radius = 3, shootEffect = CONST_ANI_EARTH, effect = CONST_ME_HITBYPOISON, target = true },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -120, maxDamage = -215, radius = 3, effect = CONST_ME_HITBYPOISON, target = false },
-- poison
diff --git a/data-otservbr-global/monster/quests/ferumbras_ascendant/summons/enthralled_demon.lua b/data-otservbr-global/monster/quests/ferumbras_ascendant/summons/enthralled_demon.lua
index e170b7f0b0d..bc6f8460708 100644
--- a/data-otservbr-global/monster/quests/ferumbras_ascendant/summons/enthralled_demon.lua
+++ b/data-otservbr-global/monster/quests/ferumbras_ascendant/summons/enthralled_demon.lua
@@ -68,11 +68,11 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 70, attack = 130 },
{ name = "combat", interval = 2000, chance = 13, type = COMBAT_MANADRAIN, minDamage = -60, maxDamage = -120, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_SMALLCLOUDS, target = false },
{ name = "combat", interval = 2000, chance = 33, type = COMBAT_FIREDAMAGE, minDamage = -150, maxDamage = -250, range = 7, radius = 7, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_DROWNDAMAGE, minDamage = -350, maxDamage = -450, radius = 7, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_DROWNDAMAGE, minDamage = -350, maxDamage = -450, radius = 7, effect = CONST_ME_LOSEENERGY, target = false },
{ name = "combat", interval = 2000, chance = 7, type = COMBAT_ENERGYDAMAGE, minDamage = -210, maxDamage = -300, range = 1, radius = 1, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_ENERGYHIT, target = true },
{ name = "firefield", interval = 2000, chance = 14, range = 7, radius = 1, shootEffect = CONST_ANI_FIRE, target = true },
{ name = "demon paralyze", interval = 2000, chance = 10, range = 7, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -300, maxDamage = -480, length = 8, spread = 3, effect = CONST_ME_PURPLEENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -300, maxDamage = -480, length = 8, spread = 0, effect = CONST_ME_PURPLEENERGY, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/forgotten_knowledge/animated_sword.lua b/data-otservbr-global/monster/quests/forgotten_knowledge/animated_sword.lua
index 60c60ee20e8..3c5063742b9 100644
--- a/data-otservbr-global/monster/quests/forgotten_knowledge/animated_sword.lua
+++ b/data-otservbr-global/monster/quests/forgotten_knowledge/animated_sword.lua
@@ -62,7 +62,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 50, attack = 50 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -40, maxDamage = -160, radius = 6, effect = CONST_ME_MAGIC_BLUE, target = false },
{ name = "berserk", interval = 2000, chance = 15, minDamage = -40, maxDamage = -160, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -40, maxDamage = -100, length = 4, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -40, maxDamage = -100, length = 4, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/lady_tenebris.lua b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/lady_tenebris.lua
index c7087a421ba..17d68ca6994 100644
--- a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/lady_tenebris.lua
+++ b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/lady_tenebris.lua
@@ -115,7 +115,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -800, maxDamage = -1800 },
- { name = "combat", interval = 6000, chance = 13, type = COMBAT_DEATHDAMAGE, minDamage = -1200, maxDamage = -1500, length = 8, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 6000, chance = 13, type = COMBAT_DEATHDAMAGE, minDamage = -1200, maxDamage = -1500, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 2000, chance = 13, type = COMBAT_DEATHDAMAGE, minDamage = -400, maxDamage = -600, radius = 4, shootEffect = CONST_ANI_DEATH, effect = CONST_ME_SMALLCLOUDS, target = true },
{ name = "tenebris summon", interval = 2000, chance = 14, target = false },
{ name = "tenebris ultimate", interval = 15000, chance = 30, target = false },
diff --git a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/lloyd.lua b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/lloyd.lua
index 2cd9bdcd5b0..5d5f729e749 100644
--- a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/lloyd.lua
+++ b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/lloyd.lua
@@ -113,7 +113,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -200, maxDamage = -1400 },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = -330, maxDamage = -660, length = 6, spread = 3, effect = CONST_ME_PURPLEENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = -330, maxDamage = -660, length = 6, spread = 0, effect = CONST_ME_PURPLEENERGY, target = false },
{ name = "lloyd wave", interval = 2000, chance = 12, minDamage = -430, maxDamage = -560, target = false },
{ name = "lloyd wave2", interval = 2000, chance = 12, minDamage = -230, maxDamage = -460, target = false },
{ name = "lloyd wave3", interval = 2000, chance = 12, minDamage = -430, maxDamage = -660, target = false },
diff --git a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/mounted_thorn_knight.lua b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/mounted_thorn_knight.lua
index f46efa303a8..8d68b77c1e1 100644
--- a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/mounted_thorn_knight.lua
+++ b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/mounted_thorn_knight.lua
@@ -72,9 +72,9 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -600, maxDamage = -1000 },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_LIFEDRAIN, minDamage = -400, maxDamage = -700, length = 4, spread = 3, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_MANADRAIN, minDamage = -1400, maxDamage = -1700, length = 9, spread = 3, effect = CONST_ME_CARNIPHILA, target = false },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_DEATHDAMAGE, minDamage = -400, maxDamage = -700, length = 9, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_LIFEDRAIN, minDamage = -400, maxDamage = -700, length = 4, spread = 0, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_MANADRAIN, minDamage = -1400, maxDamage = -1700, length = 9, spread = 0, effect = CONST_ME_CARNIPHILA, target = false },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_DEATHDAMAGE, minDamage = -400, maxDamage = -700, length = 9, spread = 0, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -250, radius = 10, effect = CONST_ME_BLOCKHIT, target = false },
}
diff --git a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_blazing_time_guardian.lua b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_blazing_time_guardian.lua
index dd4144c4aad..fef77ab81cf 100644
--- a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_blazing_time_guardian.lua
+++ b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_blazing_time_guardian.lua
@@ -92,12 +92,12 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 190, attack = 300 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = -600, maxDamage = -780, range = 7, radius = 4, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_ENERGYHIT, target = true },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -600, maxDamage = -780, length = 9, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -600, maxDamage = -780, length = 9, spread = 3, effect = CONST_ME_ENERGYAREA, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -600, maxDamage = -780, length = 9, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -600, maxDamage = -780, length = 9, spread = 0, effect = CONST_ME_ENERGYAREA, target = false },
-- energy damage
{ name = "condition", type = CONDITION_ENERGY, interval = 2000, chance = 20, minDamage = -2000, maxDamage = -2000, radius = 7, effect = CONST_ME_BLOCKHIT, target = false },
-- bleed
- { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 20, minDamage = -2000, maxDamage = -2000, length = 9, spread = 3, effect = CONST_ME_BLOCKHIT, target = false },
+ { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 20, minDamage = -2000, maxDamage = -2000, length = 9, spread = 0, effect = CONST_ME_BLOCKHIT, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_enraged_thorn_knight.lua b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_enraged_thorn_knight.lua
index 38d27e009af..c664a5e21d2 100644
--- a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_enraged_thorn_knight.lua
+++ b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_enraged_thorn_knight.lua
@@ -114,9 +114,9 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -600, maxDamage = -1000 },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_LIFEDRAIN, minDamage = -400, maxDamage = -700, length = 4, spread = 3, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_MANADRAIN, minDamage = -1400, maxDamage = -1700, length = 9, spread = 3, effect = CONST_ME_CARNIPHILA, target = false },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_DEATHDAMAGE, minDamage = -400, maxDamage = -700, length = 9, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_LIFEDRAIN, minDamage = -400, maxDamage = -700, length = 4, spread = 0, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_MANADRAIN, minDamage = -1400, maxDamage = -1700, length = 9, spread = 0, effect = CONST_ME_CARNIPHILA, target = false },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_DEATHDAMAGE, minDamage = -400, maxDamage = -700, length = 9, spread = 0, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -250, radius = 10, effect = CONST_ME_BLOCKHIT, target = false },
}
diff --git a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_freezing_time_guardian.lua b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_freezing_time_guardian.lua
index ec4aac0f9fa..8fcbd1ddbab 100644
--- a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_freezing_time_guardian.lua
+++ b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_freezing_time_guardian.lua
@@ -93,12 +93,12 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 190, attack = 300 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = -600, maxDamage = -780, range = 7, radius = 4, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_ENERGYHIT, target = true },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -600, maxDamage = -780, length = 9, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -600, maxDamage = -780, length = 9, spread = 3, effect = CONST_ME_ENERGYAREA, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -600, maxDamage = -780, length = 9, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -600, maxDamage = -780, length = 9, spread = 0, effect = CONST_ME_ENERGYAREA, target = false },
-- energy damage
{ name = "condition", type = CONDITION_ENERGY, interval = 2000, chance = 20, minDamage = -2000, maxDamage = -2000, radius = 7, effect = CONST_ME_BLOCKHIT, target = false },
-- bleed
- { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 20, minDamage = -2000, maxDamage = -2000, length = 9, spread = 3, effect = CONST_ME_BLOCKHIT, target = false },
+ { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 20, minDamage = -2000, maxDamage = -2000, length = 9, spread = 0, effect = CONST_ME_BLOCKHIT, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_last_lore_keeper.lua b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_last_lore_keeper.lua
index a875379d558..f1d96fe25bc 100644
--- a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_last_lore_keeper.lua
+++ b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_last_lore_keeper.lua
@@ -130,10 +130,10 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 140, attack = 80 },
- { name = "combat", interval = 2000, chance = 7, type = COMBAT_PHYSICALDAMAGE, minDamage = -650, maxDamage = -900, length = 8, spread = 3, effect = CONST_ME_EXPLOSIONAREA, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -850, maxDamage = -2260, length = 10, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 7, type = COMBAT_PHYSICALDAMAGE, minDamage = -650, maxDamage = -900, length = 8, spread = 0, effect = CONST_ME_EXPLOSIONAREA, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -850, maxDamage = -2260, length = 10, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -640, maxDamage = -800, radius = 5, effect = CONST_ME_SMALLCLOUDS, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -420, maxDamage = -954, length = 8, spread = 3, effect = CONST_ME_PURPLEENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -420, maxDamage = -954, length = 8, spread = 0, effect = CONST_ME_PURPLEENERGY, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_EARTHDAMAGE, minDamage = -640, maxDamage = -800, radius = 5, effect = CONST_ME_STONES, target = true },
{ name = "medusa paralyze", interval = 2000, chance = 20, target = false },
}
diff --git a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_shielded_thorn_knight.lua b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_shielded_thorn_knight.lua
index f3539476809..161f2150690 100644
--- a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_shielded_thorn_knight.lua
+++ b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_shielded_thorn_knight.lua
@@ -73,9 +73,9 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -600, maxDamage = -1000 },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_LIFEDRAIN, minDamage = -400, maxDamage = -700, length = 4, spread = 3, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_MANADRAIN, minDamage = -1400, maxDamage = -1700, length = 9, spread = 3, effect = CONST_ME_CARNIPHILA, target = false },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_DEATHDAMAGE, minDamage = -400, maxDamage = -700, length = 9, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_LIFEDRAIN, minDamage = -400, maxDamage = -700, length = 4, spread = 0, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_MANADRAIN, minDamage = -1400, maxDamage = -1700, length = 9, spread = 0, effect = CONST_ME_CARNIPHILA, target = false },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_DEATHDAMAGE, minDamage = -400, maxDamage = -700, length = 9, spread = 0, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -250, radius = 10, effect = CONST_ME_BLOCKHIT, target = false },
}
diff --git a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_time_guardian.lua b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_time_guardian.lua
index 53d7eee517a..7bf8e0c82ad 100644
--- a/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_time_guardian.lua
+++ b/data-otservbr-global/monster/quests/forgotten_knowledge/bosses/the_time_guardian.lua
@@ -114,12 +114,12 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 190, attack = 300 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = -600, maxDamage = -780, range = 7, radius = 4, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_ENERGYHIT, target = true },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -600, maxDamage = -780, length = 9, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -600, maxDamage = -780, length = 9, spread = 3, effect = CONST_ME_ENERGYAREA, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -600, maxDamage = -780, length = 9, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -600, maxDamage = -780, length = 9, spread = 0, effect = CONST_ME_ENERGYAREA, target = false },
-- energy damage
{ name = "condition", type = CONDITION_ENERGY, interval = 2000, chance = 20, minDamage = -2000, maxDamage = -2000, radius = 7, effect = CONST_ME_BLOCKHIT, target = false },
-- bleed
- { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 20, minDamage = -2000, maxDamage = -2000, length = 9, spread = 3, effect = CONST_ME_BLOCKHIT, target = false },
+ { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 20, minDamage = -2000, maxDamage = -2000, length = 9, spread = 0, effect = CONST_ME_BLOCKHIT, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/forgotten_knowledge/sword_of_vengeance.lua b/data-otservbr-global/monster/quests/forgotten_knowledge/sword_of_vengeance.lua
index 4bcd71b8769..e46c2d9bb36 100644
--- a/data-otservbr-global/monster/quests/forgotten_knowledge/sword_of_vengeance.lua
+++ b/data-otservbr-global/monster/quests/forgotten_knowledge/sword_of_vengeance.lua
@@ -62,7 +62,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -0, maxDamage = -242 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -40, maxDamage = -160, radius = 6, effect = CONST_ME_MAGIC_BLUE, target = false },
{ name = "berserk", interval = 2000, chance = 15, minDamage = -40, maxDamage = -160, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -40, maxDamage = -100, length = 4, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -40, maxDamage = -100, length = 4, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/forgotten_knowledge/the_distorted_astral_source.lua b/data-otservbr-global/monster/quests/forgotten_knowledge/the_distorted_astral_source.lua
index bf4cd796088..6c094f6b098 100644
--- a/data-otservbr-global/monster/quests/forgotten_knowledge/the_distorted_astral_source.lua
+++ b/data-otservbr-global/monster/quests/forgotten_knowledge/the_distorted_astral_source.lua
@@ -66,7 +66,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -330 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -500, range = 7, radius = 6, shootEffect = CONST_ANI_ENERGYBALL, effect = CONST_ME_PURPLEENERGY, target = true },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -500, range = 7, radius = 6, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_ENERGYHIT, target = true },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -400, length = 5, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -400, length = 5, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_MANADRAIN, minDamage = -200, maxDamage = -400, radius = 5, effect = CONST_ME_MAGIC_BLUE, target = false },
}
diff --git a/data-otservbr-global/monster/quests/forgotten_knowledge/thorn_minion.lua b/data-otservbr-global/monster/quests/forgotten_knowledge/thorn_minion.lua
index 84c22d0cea8..abfc779efc1 100644
--- a/data-otservbr-global/monster/quests/forgotten_knowledge/thorn_minion.lua
+++ b/data-otservbr-global/monster/quests/forgotten_knowledge/thorn_minion.lua
@@ -67,9 +67,9 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -0, maxDamage = -264 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -100, maxDamage = -195, range = 7, shootEffect = CONST_ANI_POISON, effect = CONST_ME_GREEN_RINGS, target = false },
- { name = "speed", interval = 2000, chance = 15, speedChange = -800, range = 7, shootEffect = CONST_ANI_POISON, effect = CONST_ME_GREEN_RINGS, target = false, duration = 30000 },
+ { name = "speed", interval = 2000, chance = 15, speedChange = -100, range = 7, shootEffect = CONST_ANI_POISON, effect = CONST_ME_GREEN_RINGS, target = false, duration = 30000 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -280, radius = 4, effect = CONST_ME_GROUNDSHAKER, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -200, maxDamage = -400, length = 4, spread = 3, effect = CONST_ME_CARNIPHILA, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -200, maxDamage = -400, length = 4, spread = 0, effect = CONST_ME_CARNIPHILA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/forgotten_knowledge/unbound_demon_outcast.lua b/data-otservbr-global/monster/quests/forgotten_knowledge/unbound_demon_outcast.lua
index 3bd48a8d070..5900c593b28 100644
--- a/data-otservbr-global/monster/quests/forgotten_knowledge/unbound_demon_outcast.lua
+++ b/data-otservbr-global/monster/quests/forgotten_knowledge/unbound_demon_outcast.lua
@@ -70,8 +70,8 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -400 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -250, maxDamage = -450, length = 6, spread = 3, effect = CONST_ME_PURPLEENERGY, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -350, maxDamage = -550, length = 8, spread = 3, effect = CONST_ME_YELLOWENERGY, target = true },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -250, maxDamage = -450, length = 6, spread = 0, effect = CONST_ME_PURPLEENERGY, target = true },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -350, maxDamage = -550, length = 8, spread = 0, effect = CONST_ME_YELLOWENERGY, target = true },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -100, maxDamage = -250, radius = 3, effect = CONST_ME_ENERGYHIT, target = true },
{ name = "demon outcast skill reducer", interval = 2000, chance = 10, range = 5, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -80, maxDamage = -150, radius = 4, effect = CONST_ME_MAGIC_GREEN, target = false },
diff --git a/data-otservbr-global/monster/quests/grave_danger/bosses/count_vlarkorth.lua b/data-otservbr-global/monster/quests/grave_danger/bosses/count_vlarkorth.lua
index ebe04c8ec92..ced550fbc84 100644
--- a/data-otservbr-global/monster/quests/grave_danger/bosses/count_vlarkorth.lua
+++ b/data-otservbr-global/monster/quests/grave_danger/bosses/count_vlarkorth.lua
@@ -111,7 +111,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -800, effect = CONST_ME_DRAWBLOOD },
{ name = "combat", interval = 2300, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -250, maxDamage = -350, range = 1, effect = CONST_ME_MAGIC_RED, target = true },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -1, maxDamage = -250, length = 7, spread = 3, effect = CONST_ME_SMALLCLOUDS, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -1, maxDamage = -250, length = 7, spread = 0, effect = CONST_ME_SMALLCLOUDS, target = false },
{ name = "combat", interval = 2500, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -500, maxDamage = -1500, length = 7, spread = 0, effect = CONST_ME_HITBYFIRE, target = false },
}
diff --git a/data-otservbr-global/monster/quests/grave_danger/bosses/duke_krule.lua b/data-otservbr-global/monster/quests/grave_danger/bosses/duke_krule.lua
index 0760491d1bc..518eda46ac2 100644
--- a/data-otservbr-global/monster/quests/grave_danger/bosses/duke_krule.lua
+++ b/data-otservbr-global/monster/quests/grave_danger/bosses/duke_krule.lua
@@ -103,7 +103,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -900 },
- { name = "combat", interval = 3500, chance = 37, type = COMBAT_PHYSICALDAMAGE, minDamage = -700, maxDamage = -1200, length = 7, spread = 3, effect = CONST_ME_BLOCKHIT, target = false },
+ { name = "combat", interval = 3500, chance = 37, type = COMBAT_PHYSICALDAMAGE, minDamage = -700, maxDamage = -1200, length = 7, spread = 0, effect = CONST_ME_BLOCKHIT, target = false },
{ name = "combat", interval = 2500, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -400, maxDamage = -1000, length = 7, spread = 0, effect = CONST_ME_BLOCKHIT, target = false },
{ name = "combat", interval = 4200, chance = 40, type = COMBAT_FIREDAMAGE, minDamage = -300, maxDamage = -500, radius = 9, effect = CONST_ME_HITBYFIRE, target = false },
}
diff --git a/data-otservbr-global/monster/quests/grave_danger/bosses/king_zelos.lua b/data-otservbr-global/monster/quests/grave_danger/bosses/king_zelos.lua
index 0201e821448..cafd09f34a7 100644
--- a/data-otservbr-global/monster/quests/grave_danger/bosses/king_zelos.lua
+++ b/data-otservbr-global/monster/quests/grave_danger/bosses/king_zelos.lua
@@ -85,7 +85,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", type = COMBAT_PHYSICALDAMAGE, interval = 2000, minDamage = -900, maxDamage = -2700 },
{ name = "combat", type = COMBAT_FIREDAMAGE, interval = 2000, chance = 15, length = 8, spread = 0, minDamage = -1200, maxDamage = -3200, effect = CONST_ME_HITBYFIRE },
- { name = "combat", type = COMBAT_LIFEDRAIN, interval = 2000, chance = 10, length = 8, spread = 3, minDamage = -600, maxDamage = -1600, effect = CONST_ME_SMALLCLOUDS },
+ { name = "combat", type = COMBAT_LIFEDRAIN, interval = 2000, chance = 10, length = 8, spread = 0, minDamage = -600, maxDamage = -1600, effect = CONST_ME_SMALLCLOUDS },
{ name = "combat", type = COMBAT_DEATHDAMAGE, interval = 2000, chance = 30, radius = 6, minDamage = -1200, maxDamage = -1500, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", type = COMBAT_DEATHDAMAGE, interval = 2000, chance = 20, length = 8, minDamage = -1700, maxDamage = -2000, effect = CONST_ME_MORTAREA, target = false },
}
diff --git a/data-otservbr-global/monster/quests/grave_danger/shard_of_magnor.lua b/data-otservbr-global/monster/quests/grave_danger/shard_of_magnor.lua
index fb284fb52d1..8f0671ebe21 100644
--- a/data-otservbr-global/monster/quests/grave_danger/shard_of_magnor.lua
+++ b/data-otservbr-global/monster/quests/grave_danger/shard_of_magnor.lua
@@ -63,8 +63,8 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -200, maxDamage = -600 },
- { name = "combat", interval = 2000, chance = 50, type = COMBAT_MANADRAIN, minDamage = -400, maxDamage = -1000, length = 7, spread = 3, effect = CONST_ME_STONES, target = false },
- { name = "combat", interval = 2000, chance = 70, type = COMBAT_PHYSICALDAMAGE, minDamage = -400, maxDamage = -1000, length = 7, spread = 3, effect = CONST_ME_POISONAREA, target = false },
+ { name = "combat", interval = 2000, chance = 50, type = COMBAT_MANADRAIN, minDamage = -400, maxDamage = -1000, length = 7, spread = 0, effect = CONST_ME_STONES, target = false },
+ { name = "combat", interval = 2000, chance = 70, type = COMBAT_PHYSICALDAMAGE, minDamage = -400, maxDamage = -1000, length = 7, spread = 0, effect = CONST_ME_POISONAREA, target = false },
{ name = "combat", interval = 2000, chance = 0, type = COMBAT_ENERGYDAMAGE, minDamage = -400, maxDamage = -650, radius = 3, effect = CONST_ME_GREEN_ENERGY_SPARK, target = true },
}
diff --git a/data-otservbr-global/monster/quests/grave_danger/vampiric_blood.lua b/data-otservbr-global/monster/quests/grave_danger/vampiric_blood.lua
index 72c91a71ce4..bcae0d3c763 100644
--- a/data-otservbr-global/monster/quests/grave_danger/vampiric_blood.lua
+++ b/data-otservbr-global/monster/quests/grave_danger/vampiric_blood.lua
@@ -63,8 +63,8 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
- { name = "combat", interval = 1000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -250, maxDamage = -300, range = 7, length = 3, spread = 3, effect = CONST_ME_HITBYFIRE, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_FIREDAMAGE, minDamage = 0, maxDamage = -100, range = 7, length = 6, spread = 3, effect = CONST_ME_HITBYFIRE, target = false },
+ { name = "combat", interval = 1000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -250, maxDamage = -300, range = 7, length = 3, spread = 0, effect = CONST_ME_HITBYFIRE, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_FIREDAMAGE, minDamage = 0, maxDamage = -100, range = 7, length = 6, spread = 0, effect = CONST_ME_HITBYFIRE, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/aftershock.lua b/data-otservbr-global/monster/quests/heart_of_destruction/aftershock.lua
index 2a23f77dc87..04c1b3a2589 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/aftershock.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/aftershock.lua
@@ -70,7 +70,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -800 },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -350, maxDamage = -900, length = 10, spread = 3, effect = CONST_ME_BIGCLOUDS, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -350, maxDamage = -900, length = 10, spread = 0, effect = CONST_ME_BIGCLOUDS, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -250, maxDamage = -500, radius = 4, effect = CONST_ME_SMALLCLOUDS, target = true },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -250, maxDamage = -750, radius = 8, effect = CONST_ME_BLOCKHIT, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -150, maxDamage = -400, radius = 5, effect = CONST_ME_MAGIC_BLUE, target = true },
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/anomaly.lua b/data-otservbr-global/monster/quests/heart_of_destruction/anomaly.lua
index 0eb67d63fe6..2d6c0e44405 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/anomaly.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/anomaly.lua
@@ -113,8 +113,8 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -300, maxDamage = -1400 },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -600, radius = 4, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = true },
{ name = "anomaly wave", interval = 2000, chance = 25, minDamage = -500, maxDamage = -900, target = false },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = -600, maxDamage = -1000, length = 9, spread = 3, effect = CONST_ME_EXPLOSIONHIT, target = false },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_LIFEDRAIN, minDamage = -300, maxDamage = -600, length = 9, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = -600, maxDamage = -1000, length = 9, spread = 0, effect = CONST_ME_EXPLOSIONHIT, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_LIFEDRAIN, minDamage = -300, maxDamage = -600, length = 9, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "anomaly break", interval = 2000, chance = 40, target = false },
}
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/charged_anomaly.lua b/data-otservbr-global/monster/quests/heart_of_destruction/charged_anomaly.lua
index 7b36447eb3a..075c308d7df 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/charged_anomaly.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/charged_anomaly.lua
@@ -70,8 +70,8 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -900, maxDamage = -2100 },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -500, maxDamage = -900, radius = 3, effect = CONST_ME_BIGCLOUDS, target = false },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -350, maxDamage = -700, length = 7, spread = 3, effect = CONST_ME_ENERGYAREA, target = false },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -500, maxDamage = -800, length = 7, spread = 3, effect = CONST_ME_YELLOWENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -350, maxDamage = -700, length = 7, spread = 0, effect = CONST_ME_ENERGYAREA, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -500, maxDamage = -800, length = 7, spread = 0, effect = CONST_ME_YELLOWENERGY, target = false },
{ name = "anomaly break", interval = 2000, chance = 40, target = false },
{ name = "charge vortex", interval = 9000, chance = 100, target = false },
}
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/charging_outburst.lua b/data-otservbr-global/monster/quests/heart_of_destruction/charging_outburst.lua
index f003c75459a..273ab8f579e 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/charging_outburst.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/charging_outburst.lua
@@ -72,7 +72,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -300, maxDamage = -1800 },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -500, radius = 3, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = -450, maxDamage = -900, radius = 8, effect = CONST_ME_BLOCKHIT, target = false },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = -600, maxDamage = -1000, length = 8, spread = 3, effect = CONST_ME_BLOCKHIT, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = -600, maxDamage = -1000, length = 8, spread = 0, effect = CONST_ME_BLOCKHIT, target = false },
{ name = "anomaly break", interval = 2000, chance = 40, target = false },
{ name = "outburst explode", interval = 10000, chance = 100, minDamage = -1500, maxDamage = -2000, target = false },
}
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/depolarized_crackler.lua b/data-otservbr-global/monster/quests/heart_of_destruction/depolarized_crackler.lua
index 2387233e8b7..e99796bbbdd 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/depolarized_crackler.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/depolarized_crackler.lua
@@ -72,7 +72,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -400 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -180, maxDamage = -500, radius = 6, shootEffect = CONST_ANI_ENERGYBALL, effect = CONST_ME_LOSEENERGY, target = true },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -700, length = 10, spread = 3, effect = CONST_ME_TELEPORT, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -700, length = 10, spread = 0, effect = CONST_ME_TELEPORT, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -180, maxDamage = -350, radius = 8, effect = CONST_ME_POFF, target = false },
}
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/eradicator.lua b/data-otservbr-global/monster/quests/heart_of_destruction/eradicator.lua
index e6d203eac47..d81c9b4faf1 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/eradicator.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/eradicator.lua
@@ -103,8 +103,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -300, maxDamage = -1800 },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -600, maxDamage = -1000, length = 8, spread = 3, effect = CONST_ME_BLOCKHIT, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -600, maxDamage = -1000, length = 8, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -600, maxDamage = -1000, length = 8, spread = 0, effect = CONST_ME_BLOCKHIT, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -600, maxDamage = -1000, length = 8, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -450, maxDamage = -900, radius = 8, effect = CONST_ME_BLOCKHIT, target = false },
{ name = "big energy wave", interval = 2000, chance = 20, minDamage = -700, maxDamage = -1000, target = false },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -600, radius = 4, effect = CONST_ME_ENERGYHIT, target = true },
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/eradicator2.lua b/data-otservbr-global/monster/quests/heart_of_destruction/eradicator2.lua
index ed8e9279e68..14b92badfbe 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/eradicator2.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/eradicator2.lua
@@ -103,7 +103,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -300, maxDamage = -1800 },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -600, maxDamage = -1000, length = 8, spread = 3, effect = CONST_ME_BLOCKHIT, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -600, maxDamage = -1000, length = 8, spread = 0, effect = CONST_ME_BLOCKHIT, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -450, maxDamage = -900, radius = 8, effect = CONST_ME_BLOCKHIT, target = false },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_HOLYDAMAGE, minDamage = -300, maxDamage = -600, radius = 4, shootEffect = CONST_ANI_SMALLHOLY, effect = CONST_ME_HOLYDAMAGE, target = true },
{ name = "big lifedrain wave", interval = 2000, chance = 20, minDamage = -700, maxDamage = -1000, target = false },
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/foreshock.lua b/data-otservbr-global/monster/quests/heart_of_destruction/foreshock.lua
index 65283626c77..99f5be41e19 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/foreshock.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/foreshock.lua
@@ -71,9 +71,9 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -400, maxDamage = -1000 },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -350, maxDamage = -800, length = 10, spread = 3, effect = CONST_ME_LOSEENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -350, maxDamage = -800, length = 10, spread = 0, effect = CONST_ME_LOSEENERGY, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -400, maxDamage = -1000, radius = 8, effect = CONST_ME_HITAREA, target = false },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = -350, maxDamage = -600, length = 10, spread = 3, effect = CONST_ME_BLOCKHIT, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = -350, maxDamage = -600, length = 10, spread = 0, effect = CONST_ME_BLOCKHIT, target = false },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_HOLYDAMAGE, minDamage = -350, maxDamage = -800, radius = 4, effect = CONST_ME_HOLYDAMAGE, target = true },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = -150, maxDamage = -300, length = 2, spread = 0, effect = CONST_ME_HITAREA, target = false },
{ name = "anomaly break", interval = 2000, chance = 40, target = false },
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/greed.lua b/data-otservbr-global/monster/quests/heart_of_destruction/greed.lua
index 5dce33bf083..31d99df683f 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/greed.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/greed.lua
@@ -67,7 +67,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -940 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -600, radius = 6, shootEffect = CONST_ANI_ENERGYBALL, effect = CONST_ME_LOSEENERGY, target = true },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -700, length = 9, spread = 3, effect = CONST_ME_TELEPORT, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -700, length = 9, spread = 0, effect = CONST_ME_TELEPORT, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, radius = 7, effect = CONST_ME_POFF, target = false },
{ name = "anomaly break", interval = 2000, chance = 40, target = false },
}
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/outburst.lua b/data-otservbr-global/monster/quests/heart_of_destruction/outburst.lua
index 936f58ad1c9..c40159545ed 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/outburst.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/outburst.lua
@@ -96,8 +96,8 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -300, maxDamage = -1800 },
{ name = "big energy purple wave", interval = 2000, chance = 25, minDamage = -700, maxDamage = -1300, target = false },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -600, radius = 4, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_ENERGYAREA, target = true },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = -800, maxDamage = -1300, length = 8, spread = 3, effect = CONST_ME_HITAREA, target = false },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_LIFEDRAIN, minDamage = -600, maxDamage = -900, length = 8, spread = 3, effect = CONST_ME_MAGIC_BLUE, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = -800, maxDamage = -1300, length = 8, spread = 0, effect = CONST_ME_HITAREA, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_LIFEDRAIN, minDamage = -600, maxDamage = -900, length = 8, spread = 0, effect = CONST_ME_MAGIC_BLUE, target = false },
{ name = "big skill reducer", interval = 2000, chance = 25, target = false },
{ name = "anomaly break", interval = 2000, chance = 40, target = false },
}
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/overcharge.lua b/data-otservbr-global/monster/quests/heart_of_destruction/overcharge.lua
index dc29e89451b..0a22923ae94 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/overcharge.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/overcharge.lua
@@ -72,7 +72,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -500 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -500, radius = 5, shootEffect = CONST_ANI_ENERGYBALL, effect = CONST_ME_LOSEENERGY, target = true },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -400, radius = 7, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -670, length = 9, spread = 3, effect = CONST_ME_TELEPORT, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -670, length = 9, spread = 0, effect = CONST_ME_TELEPORT, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/realityquake.lua b/data-otservbr-global/monster/quests/heart_of_destruction/realityquake.lua
index afd0226424d..c9d7601584f 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/realityquake.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/realityquake.lua
@@ -91,8 +91,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -400, maxDamage = -1000 },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -350, maxDamage = -800, length = 10, spread = 3, effect = CONST_ME_ENERGYAREA, target = false },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = -350, maxDamage = -800, length = 10, spread = 3, effect = CONST_ME_BLOCKHIT, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -350, maxDamage = -800, length = 10, spread = 0, effect = CONST_ME_ENERGYAREA, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = -350, maxDamage = -800, length = 10, spread = 0, effect = CONST_ME_BLOCKHIT, target = false },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = -240, maxDamage = -600, radius = 5, effect = CONST_ME_POFF, target = true },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_HOLYDAMAGE, minDamage = -240, maxDamage = -600, radius = 5, shootEffect = CONST_ANI_HOLY, effect = CONST_ME_HOLYDAMAGE, target = true },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_EARTHDAMAGE, minDamage = -200, maxDamage = -450, length = 4, spread = 2, effect = CONST_ME_MAGIC_RED, target = false },
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/rupture.lua b/data-otservbr-global/monster/quests/heart_of_destruction/rupture.lua
index c49d49d5d30..5d68108bba4 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/rupture.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/rupture.lua
@@ -97,10 +97,10 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -250, maxDamage = -1000 },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -350, maxDamage = -800, length = 10, spread = 3, effect = CONST_ME_LOSEENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -350, maxDamage = -800, length = 10, spread = 0, effect = CONST_ME_LOSEENERGY, target = false },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_DEATHDAMAGE, minDamage = -150, maxDamage = -300, radius = 4, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_SMALLCLOUDS, target = true },
{ name = "rupture wave", interval = 2000, chance = 20, minDamage = -700, maxDamage = -1100, target = false },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_LIFEDRAIN, minDamage = -300, maxDamage = -600, length = 9, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_LIFEDRAIN, minDamage = -300, maxDamage = -600, length = 9, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "anomaly break", interval = 2000, chance = 40, target = false },
}
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/the_destruction.lua b/data-otservbr-global/monster/quests/heart_of_destruction/the_destruction.lua
index 9695be76048..b80789846b5 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/the_destruction.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/the_destruction.lua
@@ -72,10 +72,10 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -1393 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -600, radius = 4, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_YELLOWENERGY, target = true },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -400, maxDamage = -800, radius = 4, shootEffect = CONST_ANI_ENERGYBALL, effect = CONST_ME_EXPLOSIONAREA, target = true },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -200, maxDamage = -400, length = 10, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -200, maxDamage = -400, length = 10, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, radius = 8, effect = CONST_ME_MAGIC_RED, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -500, maxDamage = -900, length = 10, spread = 3, effect = CONST_ME_BLOCKHIT, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -500, maxDamage = -900, length = 10, spread = 3, effect = CONST_ME_EXPLOSIONHIT, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -500, maxDamage = -900, length = 10, spread = 0, effect = CONST_ME_BLOCKHIT, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -500, maxDamage = -900, length = 10, spread = 0, effect = CONST_ME_EXPLOSIONHIT, target = false },
{ name = "anomaly break", interval = 2000, chance = 40, target = false },
{ name = "destruction summon", interval = 2000, chance = 20, target = false },
}
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/the_hunger.lua b/data-otservbr-global/monster/quests/heart_of_destruction/the_hunger.lua
index 2a8db03fc42..e796dbcd2a8 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/the_hunger.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/the_hunger.lua
@@ -72,8 +72,8 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -962 },
{ name = "practise fire wave", interval = 2000, chance = 20, minDamage = -600, maxDamage = -900, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, radius = 8, effect = CONST_ME_MAGIC_RED, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -700, maxDamage = -1100, length = 10, spread = 3, effect = CONST_ME_EXPLOSIONHIT, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -200, maxDamage = -400, length = 10, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -700, maxDamage = -1100, length = 10, spread = 0, effect = CONST_ME_EXPLOSIONHIT, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -200, maxDamage = -400, length = 10, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "anomaly break", interval = 2000, chance = 40, target = false },
{ name = "hunger summon", interval = 2000, chance = 20, target = false },
}
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/the_rage.lua b/data-otservbr-global/monster/quests/heart_of_destruction/the_rage.lua
index f648df139f4..9a5c3dc1124 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/the_rage.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/the_rage.lua
@@ -71,11 +71,11 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -740 },
{ name = "big death wave", interval = 2000, chance = 20, minDamage = -600, maxDamage = -900, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -200, maxDamage = -400, length = 10, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -200, maxDamage = -400, length = 10, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -600, radius = 4, effect = CONST_ME_SMALLCLOUDS, target = true },
{ name = "big explosion wave", interval = 2000, chance = 20, minDamage = -600, maxDamage = -900, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, radius = 8, effect = CONST_ME_MAGIC_RED, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -600, length = 10, spread = 3, effect = CONST_ME_YELLOW_RINGS, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -600, length = 10, spread = 0, effect = CONST_ME_YELLOW_RINGS, target = false },
{ name = "anomaly break", interval = 2000, chance = 40, target = false },
{ name = "rage summon", interval = 2000, chance = 20, target = false },
}
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/unstable_spark.lua b/data-otservbr-global/monster/quests/heart_of_destruction/unstable_spark.lua
index bbfb1938a3c..4896767a0e0 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/unstable_spark.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/unstable_spark.lua
@@ -71,7 +71,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -500 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -180, maxDamage = -500, radius = 6, shootEffect = CONST_ANI_ENERGYBALL, effect = CONST_ME_LOSEENERGY, target = true },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -700, length = 10, spread = 3, effect = CONST_ME_TELEPORT, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -700, length = 10, spread = 0, effect = CONST_ME_TELEPORT, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -180, maxDamage = -350, radius = 8, effect = CONST_ME_POFF, target = false },
}
diff --git a/data-otservbr-global/monster/quests/heart_of_destruction/world_devourer.lua b/data-otservbr-global/monster/quests/heart_of_destruction/world_devourer.lua
index 5718a22de83..c8e7198a2e1 100644
--- a/data-otservbr-global/monster/quests/heart_of_destruction/world_devourer.lua
+++ b/data-otservbr-global/monster/quests/heart_of_destruction/world_devourer.lua
@@ -100,10 +100,10 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -1600 },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -400, maxDamage = -800, length = 10, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -400, maxDamage = -800, length = 10, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -400, maxDamage = -800, radius = 4, effect = CONST_ME_SMALLCLOUDS, target = true },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -400, maxDamage = -800, radius = 4, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_YELLOWENERGY, target = true },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -600, maxDamage = -1200, length = 10, spread = 3, effect = CONST_ME_LOSEENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -600, maxDamage = -1200, length = 10, spread = 0, effect = CONST_ME_LOSEENERGY, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, radius = 8, effect = CONST_ME_MAGIC_RED, target = false },
{ name = "anomaly break", interval = 2000, chance = 40, target = false },
{ name = "devourer summon", interval = 2000, chance = 25, target = false },
diff --git a/data-otservbr-global/monster/quests/hero_of_rathleton/deep_terror.lua b/data-otservbr-global/monster/quests/hero_of_rathleton/deep_terror.lua
index 534175a881a..debd09c9bb9 100644
--- a/data-otservbr-global/monster/quests/hero_of_rathleton/deep_terror.lua
+++ b/data-otservbr-global/monster/quests/hero_of_rathleton/deep_terror.lua
@@ -79,7 +79,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 130, attack = 100 },
{ name = "combat", interval = 2000, chance = 32, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -400, radius = 8, effect = CONST_ME_CARNIPHILA, target = false },
{ name = "combat", interval = 2000, chance = 19, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -700, range = 7, radius = 3, shootEffect = CONST_ANI_POISON, effect = CONST_ME_CARNIPHILA, target = true },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = -500, maxDamage = -1000, length = 7, spread = 3, effect = CONST_ME_GROUNDSHAKER, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_PHYSICALDAMAGE, minDamage = -500, maxDamage = -1000, length = 7, spread = 0, effect = CONST_ME_GROUNDSHAKER, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/hero_of_rathleton/glooth_horror.lua b/data-otservbr-global/monster/quests/hero_of_rathleton/glooth_horror.lua
index eec6132974e..caee3d06233 100644
--- a/data-otservbr-global/monster/quests/hero_of_rathleton/glooth_horror.lua
+++ b/data-otservbr-global/monster/quests/hero_of_rathleton/glooth_horror.lua
@@ -70,7 +70,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 110, attack = 100 },
- { name = "combat", interval = 2000, chance = 9, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -700, length = 8, spread = 3, target = false },
+ { name = "combat", interval = 2000, chance = 9, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -700, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = false },
{ name = "drunk", interval = 2000, chance = 8, radius = 8, effect = CONST_ME_HITBYPOISON, target = false, duration = 15000 },
}
diff --git a/data-otservbr-global/monster/quests/hero_of_rathleton/professor_maxxen.lua b/data-otservbr-global/monster/quests/hero_of_rathleton/professor_maxxen.lua
index 8a1ec35e913..947a56a0187 100644
--- a/data-otservbr-global/monster/quests/hero_of_rathleton/professor_maxxen.lua
+++ b/data-otservbr-global/monster/quests/hero_of_rathleton/professor_maxxen.lua
@@ -89,8 +89,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 180, attack = 200 },
{ name = "combat", interval = 2000, chance = 11, type = COMBAT_ENERGYDAMAGE, minDamage = -250, maxDamage = -500, radius = 8, effect = CONST_ME_ENERGYHIT, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -450, maxDamage = -1500, length = 8, spread = 3, effect = CONST_ME_TELEPORT, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -450, maxDamage = -500, length = 8, spread = 3, effect = CONST_ME_FIREATTACK, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -450, maxDamage = -1500, length = 8, spread = 0, effect = CONST_ME_TELEPORT, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -450, maxDamage = -500, length = 8, spread = 0, effect = CONST_ME_FIREATTACK, target = false },
{ name = "war golem skill reducer", interval = 2000, chance = 22, target = false },
{ name = "war golem electrify", interval = 2000, chance = 16, range = 2, target = false },
{ name = "glooth fairy skill reducer", interval = 2000, chance = 20, target = false },
diff --git a/data-otservbr-global/monster/quests/hero_of_rathleton/weakened_glooth_horror.lua b/data-otservbr-global/monster/quests/hero_of_rathleton/weakened_glooth_horror.lua
index b3df6a5785d..511ea483b3d 100644
--- a/data-otservbr-global/monster/quests/hero_of_rathleton/weakened_glooth_horror.lua
+++ b/data-otservbr-global/monster/quests/hero_of_rathleton/weakened_glooth_horror.lua
@@ -70,7 +70,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 90, attack = 100 },
- { name = "combat", interval = 2000, chance = 17, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -600, length = 8, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 17, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -600, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 2000, chance = 11, type = COMBAT_DEATHDAMAGE, minDamage = -200, maxDamage = -400, range = 1, shootEffect = CONST_ANI_POISON, target = true },
}
diff --git a/data-otservbr-global/monster/quests/in_service_of_yalahar/azerus.lua b/data-otservbr-global/monster/quests/in_service_of_yalahar/azerus.lua
index 87329f07738..19dc3668ab3 100644
--- a/data-otservbr-global/monster/quests/in_service_of_yalahar/azerus.lua
+++ b/data-otservbr-global/monster/quests/in_service_of_yalahar/azerus.lua
@@ -97,7 +97,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -900 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_MANADRAIN, minDamage = 0, maxDamage = -3800, range = 7, radius = 4, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_BIGCLOUDS, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = 0, maxDamage = -524, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -300, maxDamage = -1050, length = 8, spread = 3, effect = CONST_ME_FIREATTACK, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -300, maxDamage = -1050, length = 8, spread = 0, effect = CONST_ME_FIREATTACK, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/in_service_of_yalahar/azerus2.lua b/data-otservbr-global/monster/quests/in_service_of_yalahar/azerus2.lua
index 19f074c17eb..e5c88468ca0 100644
--- a/data-otservbr-global/monster/quests/in_service_of_yalahar/azerus2.lua
+++ b/data-otservbr-global/monster/quests/in_service_of_yalahar/azerus2.lua
@@ -93,7 +93,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -900 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_MANADRAIN, minDamage = 0, maxDamage = -3800, range = 7, radius = 4, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_BIGCLOUDS, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = 0, maxDamage = -524, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -300, maxDamage = -1050, length = 8, spread = 3, effect = CONST_ME_FIREATTACK, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -300, maxDamage = -1050, length = 8, spread = 0, effect = CONST_ME_FIREATTACK, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/in_service_of_yalahar/inky.lua b/data-otservbr-global/monster/quests/in_service_of_yalahar/inky.lua
index bcb266254fe..49025f4c6c4 100644
--- a/data-otservbr-global/monster/quests/in_service_of_yalahar/inky.lua
+++ b/data-otservbr-global/monster/quests/in_service_of_yalahar/inky.lua
@@ -77,7 +77,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -156, condition = { type = CONDITION_POISON, totalDamage = 2, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -87, radius = 3, effect = CONST_ME_HITAREA, target = false },
- { name = "combat", interval = 2000, chance = 19, type = COMBAT_ICEDAMAGE, minDamage = 0, maxDamage = -80, radius = 3, shootEffect = CONST_ANI_POISON, target = false },
+ { name = "combat", interval = 2000, chance = 19, type = COMBAT_ICEDAMAGE, minDamage = 0, maxDamage = -80, radius = 3, shootEffect = CONST_ANI_POISON, effect = CONST_ME_ICEAREA, target = false },
{ name = "combat", interval = 2000, chance = 7, type = COMBAT_ICEDAMAGE, minDamage = -56, maxDamage = -87, radius = 4, effect = CONST_ME_ICEAREA, target = false },
{ name = "quara constrictor electrify", interval = 2000, chance = 10, range = 1, target = false },
}
diff --git a/data-otservbr-global/monster/quests/in_service_of_yalahar/rift_scythe.lua b/data-otservbr-global/monster/quests/in_service_of_yalahar/rift_scythe.lua
index 25246da0ef3..ede090ca26d 100644
--- a/data-otservbr-global/monster/quests/in_service_of_yalahar/rift_scythe.lua
+++ b/data-otservbr-global/monster/quests/in_service_of_yalahar/rift_scythe.lua
@@ -67,9 +67,9 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -979 },
{ name = "combat", interval = 2000, chance = 60, type = COMBAT_DEATHDAMAGE, minDamage = 0, maxDamage = -200, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = true },
- { name = "combat", interval = 2000, chance = 50, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -600, length = 7, spread = 3, target = false },
- { name = "combat", interval = 2000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -395, radius = 4, target = false },
- { name = "combat", interval = 3000, chance = 60, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -300, length = 7, spread = 3, effect = CONST_ME_EXPLOSIONAREA, target = false },
+ { name = "combat", interval = 2000, chance = 50, type = COMBAT_LIFEDRAIN, minDamage = 0, maxDamage = -600, length = 7, spread = 0, effect = CONST_ME_DRAWBLOOD, target = false },
+ { name = "combat", interval = 2000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -395, radius = 4, effect = CONST_ME_DRAWBLOOD, target = false },
+ { name = "combat", interval = 3000, chance = 60, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -300, length = 7, spread = 0, effect = CONST_ME_EXPLOSIONAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/isle_of_evil/boogey.lua b/data-otservbr-global/monster/quests/isle_of_evil/boogey.lua
index 56fa3d79415..fcb5a02388b 100644
--- a/data-otservbr-global/monster/quests/isle_of_evil/boogey.lua
+++ b/data-otservbr-global/monster/quests/isle_of_evil/boogey.lua
@@ -89,7 +89,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 1200, chance = 100, minDamage = 0, maxDamage = -120 },
{ name = "combat", interval = 1500, chance = 30, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -30, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 1500, chance = 30, type = COMBAT_DEATHDAMAGE, minDamage = -12, maxDamage = -20, range = 7, radius = 4, shootEffect = CONST_ANI_FIRE, target = true },
+ { name = "combat", interval = 1500, chance = 30, type = COMBAT_DEATHDAMAGE, minDamage = -12, maxDamage = -20, range = 7, radius = 4, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
{ name = "combat", interval = 1500, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -20, maxDamage = -30, effect = CONST_ME_MORTAREA, target = false },
}
diff --git a/data-otservbr-global/monster/quests/killing_in_the_name_of/bruise_payne.lua b/data-otservbr-global/monster/quests/killing_in_the_name_of/bruise_payne.lua
index b86b5a75873..4c1a300527c 100644
--- a/data-otservbr-global/monster/quests/killing_in_the_name_of/bruise_payne.lua
+++ b/data-otservbr-global/monster/quests/killing_in_the_name_of/bruise_payne.lua
@@ -81,7 +81,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_DROWNDAMAGE, minDamage = -130, maxDamage = -237, radius = 6, effect = CONST_ME_SOUND_WHITE, target = false },
{ name = "mutated bat curse", interval = 2000, chance = 10, target = false },
-- poison
- { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 15, minDamage = -12, maxDamage = -12, length = 4, spread = 3, effect = CONST_ME_POISONAREA, target = false },
+ { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 15, minDamage = -12, maxDamage = -12, length = 4, spread = 0, effect = CONST_ME_POISONAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/killing_in_the_name_of/zanakeph.lua b/data-otservbr-global/monster/quests/killing_in_the_name_of/zanakeph.lua
index 35354843ab4..3c05a33fc1d 100644
--- a/data-otservbr-global/monster/quests/killing_in_the_name_of/zanakeph.lua
+++ b/data-otservbr-global/monster/quests/killing_in_the_name_of/zanakeph.lua
@@ -92,7 +92,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -0, maxDamage = -480 },
- { name = "combat", interval = 2000, chance = 5, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -400, range = 7, radius = 4, target = true },
+ { name = "combat", interval = 2000, chance = 5, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -400, range = 7, radius = 4, effect = CONST_ME_HITAREA, target = true },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -125, maxDamage = -600, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_SMALLCLOUDS, target = false },
{ name = "combat", interval = 2000, chance = 5, type = COMBAT_EARTHDAMAGE, minDamage = -100, maxDamage = -390, range = 7, radius = 4, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = true },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = true },
diff --git a/data-otservbr-global/monster/quests/mysterious_ornate_chest/reflection_of_mawhawk.lua b/data-otservbr-global/monster/quests/mysterious_ornate_chest/reflection_of_mawhawk.lua
index a2806343a65..707cb6cb5c4 100644
--- a/data-otservbr-global/monster/quests/mysterious_ornate_chest/reflection_of_mawhawk.lua
+++ b/data-otservbr-global/monster/quests/mysterious_ornate_chest/reflection_of_mawhawk.lua
@@ -86,9 +86,9 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -1000 },
{ name = "melee", interval = 2000, chance = 100, skill = 90, attack = 80 },
- { name = "combat", interval = 2000, chance = 8, type = COMBAT_LIFEDRAIN, minDamage = -135, maxDamage = -280, range = 7, radius = 5, shootEffect = CONST_ANI_WHIRLWINDAXE, target = true },
+ { name = "combat", interval = 2000, chance = 8, type = COMBAT_LIFEDRAIN, minDamage = -135, maxDamage = -280, range = 7, radius = 5, shootEffect = CONST_ANI_WHIRLWINDAXE, effect = CONST_ME_DRAWBLOOD, target = true },
{ name = "combat", interval = 2000, chance = 8, type = COMBAT_PHYSICALDAMAGE, minDamage = -90, maxDamage = -500, range = 7, shootEffect = CONST_ANI_WHIRLWINDAXE, effect = CONST_ME_EXPLOSIONAREA, target = true },
- { name = "combat", interval = 1800, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -685, length = 7, spread = 3, effect = CONST_ME_STONES, target = false },
+ { name = "combat", interval = 1800, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -685, length = 7, spread = 0, effect = CONST_ME_STONES, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/pits_of_inferno/dracola.lua b/data-otservbr-global/monster/quests/pits_of_inferno/dracola.lua
index 44a5b38720d..c33ea29f3b9 100644
--- a/data-otservbr-global/monster/quests/pits_of_inferno/dracola.lua
+++ b/data-otservbr-global/monster/quests/pits_of_inferno/dracola.lua
@@ -94,7 +94,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_EARTHDAMAGE, minDamage = -120, maxDamage = -750, range = 7, radius = 4, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = true },
-- drown
{ name = "condition", type = CONDITION_DROWN, interval = 1000, chance = 20, length = 8, spread = 3, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -870, range = 7, radius = 4, shootEffect = CONST_ANI_FIRE, target = true },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -870, range = 7, radius = 4, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_HITAREA, target = true },
{ name = "combat", interval = 3000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -750, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 1000, chance = 23, type = COMBAT_EARTHDAMAGE, minDamage = -50, maxDamage = -175, range = 7, radius = 4, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = true },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -100, maxDamage = -200, range = 7, target = false },
diff --git a/data-otservbr-global/monster/quests/pits_of_inferno/the_plasmother.lua b/data-otservbr-global/monster/quests/pits_of_inferno/the_plasmother.lua
index b530d1e96c1..fd98f95e5b0 100644
--- a/data-otservbr-global/monster/quests/pits_of_inferno/the_plasmother.lua
+++ b/data-otservbr-global/monster/quests/pits_of_inferno/the_plasmother.lua
@@ -89,7 +89,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 30, attack = 50 },
- { name = "speed", interval = 1000, chance = 8, speedChange = -800, radius = 6, effect = CONST_ME_POISONAREA, target = false, duration = 10000 },
+ { name = "speed", interval = 1000, chance = 8, speedChange = -100, radius = 6, effect = CONST_ME_POISONAREA, target = false, duration = 10000 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -200, maxDamage = -350, radius = 4, effect = CONST_ME_POISONAREA, target = false },
{ name = "combat", interval = 3000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -200, maxDamage = -530, radius = 4, shootEffect = CONST_ANI_POISON, effect = CONST_ME_HITBYPOISON, target = true },
}
diff --git a/data-otservbr-global/monster/quests/roshamuul/horadron.lua b/data-otservbr-global/monster/quests/roshamuul/horadron.lua
index 17f6a3652bb..b25a8891c13 100644
--- a/data-otservbr-global/monster/quests/roshamuul/horadron.lua
+++ b/data-otservbr-global/monster/quests/roshamuul/horadron.lua
@@ -108,8 +108,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 110, attack = 100 },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_EARTHDAMAGE, minDamage = -600, maxDamage = -1000, length = 8, spread = 3, effect = CONST_ME_HITBYPOISON, target = false },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_EARTHDAMAGE, minDamage = -600, maxDamage = -1000, length = 8, spread = 3, effect = CONST_ME_HITBYPOISON, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_EARTHDAMAGE, minDamage = -600, maxDamage = -1000, length = 8, spread = 0, effect = CONST_ME_HITBYPOISON, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_EARTHDAMAGE, minDamage = -600, maxDamage = -1000, length = 8, spread = 0, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "combat", interval = 2000, chance = 30, type = COMBAT_EARTHDAMAGE, minDamage = -100, maxDamage = -235, range = 7, shootEffect = CONST_ANI_POISON, effect = CONST_ME_HITBYPOISON, target = true },
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_EARTHDAMAGE, minDamage = -100, maxDamage = -250, radius = 3, effect = CONST_ME_POISONAREA, target = false },
-- poison
diff --git a/data-otservbr-global/monster/quests/roshamuul/terofar.lua b/data-otservbr-global/monster/quests/roshamuul/terofar.lua
index 0f26e7697f2..efd6a2486a8 100644
--- a/data-otservbr-global/monster/quests/roshamuul/terofar.lua
+++ b/data-otservbr-global/monster/quests/roshamuul/terofar.lua
@@ -104,7 +104,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 180, attack = 100 },
- { name = "combat", interval = 2000, chance = 30, type = COMBAT_DEATHDAMAGE, minDamage = -700, maxDamage = -1500, length = 8, spread = 3, effect = CONST_ME_SMALLCLOUDS, target = false },
+ { name = "combat", interval = 2000, chance = 30, type = COMBAT_DEATHDAMAGE, minDamage = -700, maxDamage = -1500, length = 8, spread = 0, effect = CONST_ME_SMALLCLOUDS, target = false },
{ name = "combat", interval = 2000, chance = 18, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -750, range = 7, radius = 1, shootEffect = CONST_ANI_WHIRLWINDAXE, target = true },
}
@@ -112,7 +112,7 @@ monster.defenses = {
defense = 65,
armor = 55,
-- mitigation = ???,
- { name = "combat", interval = 2000, chance = 30, type = COMBAT_HEALING, minDamage = 300, maxDamage = 500, radius = 8, target = false },
+ { name = "combat", interval = 2000, chance = 30, type = COMBAT_HEALING, minDamage = 300, maxDamage = 500, radius = 8, effect = CONST_ME_MAGIC_BLUE, target = false },
{ name = "speed", interval = 2000, chance = 18, speedChange = 784, effect = CONST_ME_MAGIC_GREEN, target = false, duration = 7000 },
}
diff --git a/data-otservbr-global/monster/quests/soul_war/aspect_of_power.lua b/data-otservbr-global/monster/quests/soul_war/aspect_of_power.lua
index dfc6049e3f1..8ff012c96ef 100644
--- a/data-otservbr-global/monster/quests/soul_war/aspect_of_power.lua
+++ b/data-otservbr-global/monster/quests/soul_war/aspect_of_power.lua
@@ -61,8 +61,8 @@ monster.voices = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -800 },
- { name = "combat", interval = 1700, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -400, maxDamage = -950, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, target = true },
- { name = "combat", interval = 1700, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -850, length = 4, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 1700, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -400, maxDamage = -950, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, effect = CONST_ME_HITBYPOISON, target = true },
+ { name = "combat", interval = 1700, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -850, length = 4, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 1700, chance = 35, type = COMBAT_DEATHDAMAGE, minDamage = -700, maxDamage = -1550, radius = 3, effect = CONST_ME_MORTAREA, target = false },
{ name = "outfit", interval = 1000, chance = 5, radius = 8, effect = CONST_ME_LOSEENERGY, target = false, duration = 5000, outfitMonster = "goshnar's hatred" },
{ name = "outfit", interval = 1000, chance = 5, radius = 8, effect = CONST_ME_LOSEENERGY, target = false, duration = 5000, outfitMonster = "goshnar's greed" },
diff --git a/data-otservbr-global/monster/quests/soul_war/dreadful_harvester.lua b/data-otservbr-global/monster/quests/soul_war/dreadful_harvester.lua
index 6a6108cf535..64bd8a98008 100644
--- a/data-otservbr-global/monster/quests/soul_war/dreadful_harvester.lua
+++ b/data-otservbr-global/monster/quests/soul_war/dreadful_harvester.lua
@@ -67,9 +67,9 @@ monster.voices = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -320 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -165, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -350, maxDamage = -720, length = 8, spread = 3, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -300, length = 7, spread = 3, effect = CONST_ME_EXPLOSIONAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -225, maxDamage = -275, radius = 4, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -350, maxDamage = -720, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -300, length = 7, spread = 0, effect = CONST_ME_EXPLOSIONAREA, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -225, maxDamage = -275, radius = 4, effect = CONST_ME_MORTAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/soul_war/goshnars_greed.lua b/data-otservbr-global/monster/quests/soul_war/goshnars_greed.lua
index 0c8ddbbac42..171f963f5ff 100644
--- a/data-otservbr-global/monster/quests/soul_war/goshnars_greed.lua
+++ b/data-otservbr-global/monster/quests/soul_war/goshnars_greed.lua
@@ -107,7 +107,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -5000 },
{ name = "combat", interval = 2000, chance = 30, type = COMBAT_DEATHDAMAGE, minDamage = -1500, maxDamage = -2000, range = 7, radius = 5, shootEffect = CONST_ANI_DEATH, effect = CONST_ME_GROUNDSHAKER, target = true },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -1200, maxDamage = -2200, length = 8, spread = 1, effect = CONST_ME_FIREAREA, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -1200, maxDamage = -2200, length = 8, spread = 0, effect = CONST_ME_FIREAREA, target = false },
{ name = "singlecloudchain", interval = 6000, chance = 40, minDamage = -1300, maxDamage = -1700, range = 6, effect = CONST_ME_ENERGYHIT, target = true },
}
diff --git a/data-otservbr-global/monster/quests/soul_war/goshnars_hatred.lua b/data-otservbr-global/monster/quests/soul_war/goshnars_hatred.lua
index 2dcfed2e9ec..fa5ccf36984 100644
--- a/data-otservbr-global/monster/quests/soul_war/goshnars_hatred.lua
+++ b/data-otservbr-global/monster/quests/soul_war/goshnars_hatred.lua
@@ -109,7 +109,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -5000 },
{ name = "combat", interval = 2000, chance = 30, type = COMBAT_DEATHDAMAGE, minDamage = -1350, maxDamage = -1700, range = 7, radius = 5, shootEffect = CONST_ANI_DEATH, effect = CONST_ME_GROUNDSHAKER, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -1400, maxDamage = -2200, length = 8, spread = 3, effect = CONST_ME_GROUNDSHAKER, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -1400, maxDamage = -2200, length = 8, spread = 0, effect = CONST_ME_GROUNDSHAKER, target = false },
{ name = "singlecloudchain", interval = 6000, chance = 40, minDamage = -1700, maxDamage = -2500, range = 6, effect = CONST_ME_ENERGYHIT, target = true },
}
diff --git a/data-otservbr-global/monster/quests/soul_war/goshnars_megalomania.lua b/data-otservbr-global/monster/quests/soul_war/goshnars_megalomania.lua
index 18cfdeacd90..7346e628cfc 100644
--- a/data-otservbr-global/monster/quests/soul_war/goshnars_megalomania.lua
+++ b/data-otservbr-global/monster/quests/soul_war/goshnars_megalomania.lua
@@ -112,7 +112,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -8000 },
{ name = "combat", interval = 2000, chance = 30, type = COMBAT_PHYSICALDAMAGE, minDamage = -2950, maxDamage = -4400, range = 7, radius = 3, shootEffect = CONST_ANI_DEATH, effect = CONST_ME_MORTAREA, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -3000, maxDamage = -5500, length = 8, spread = 3, effect = CONST_ME_INSECTS, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -3000, maxDamage = -5500, length = 8, spread = 0, effect = CONST_ME_INSECTS, target = false },
{ name = "singlecloudchain", interval = 6000, chance = 40, minDamage = -3300, maxDamage = -5500, range = 6, effect = CONST_ME_ENERGYHIT, target = true },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -3300, maxDamage = -5200, length = 10, spread = 0, effect = CONST_ME_BLUE_GHOST, target = false },
}
diff --git a/data-otservbr-global/monster/quests/soul_war/goshnars_spite.lua b/data-otservbr-global/monster/quests/soul_war/goshnars_spite.lua
index cf46b89a76d..19d35cd1af7 100644
--- a/data-otservbr-global/monster/quests/soul_war/goshnars_spite.lua
+++ b/data-otservbr-global/monster/quests/soul_war/goshnars_spite.lua
@@ -107,7 +107,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -5000 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -1400, maxDamage = -2200, length = 8, spread = 3, effect = CONST_ME_GREEN_RINGS, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -1400, maxDamage = -2200, length = 8, spread = 0, effect = CONST_ME_GREEN_RINGS, target = false },
{ name = "singlecloudchain", interval = 6000, chance = 40, minDamage = -1700, maxDamage = -1900, range = 6, effect = CONST_ME_ENERGYHIT, target = true },
{ name = "combat", interval = 2000, chance = 30, type = COMBAT_EARTHDAMAGE, minDamage = -1200, maxDamage = -3500, range = 7, radius = 4, shootEffect = CONST_ANI_POISON, effect = CONST_ME_GREEN_RINGS, target = true },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -1400, maxDamage = -2200, length = 8, spread = 0, effect = CONST_ME_GREEN_RINGS, target = false },
diff --git a/data-otservbr-global/monster/quests/soul_war/hateful_soul.lua b/data-otservbr-global/monster/quests/soul_war/hateful_soul.lua
index 08ea90eece7..4aad05f3f33 100644
--- a/data-otservbr-global/monster/quests/soul_war/hateful_soul.lua
+++ b/data-otservbr-global/monster/quests/soul_war/hateful_soul.lua
@@ -61,8 +61,8 @@ monster.voices = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -800 },
- { name = "combat", interval = 1700, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -400, maxDamage = -950, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, target = true },
- { name = "combat", interval = 1700, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -850, length = 4, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 1700, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -400, maxDamage = -950, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, effect = CONST_ME_HITBYPOISON, target = true },
+ { name = "combat", interval = 1700, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -850, length = 4, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 1700, chance = 35, type = COMBAT_DEATHDAMAGE, minDamage = -700, maxDamage = -1550, radius = 3, effect = CONST_ME_MORTAREA, target = false },
}
diff --git a/data-otservbr-global/monster/quests/soul_war/malicious_soul.lua b/data-otservbr-global/monster/quests/soul_war/malicious_soul.lua
index c540bb4b0e3..c07b8106ce7 100644
--- a/data-otservbr-global/monster/quests/soul_war/malicious_soul.lua
+++ b/data-otservbr-global/monster/quests/soul_war/malicious_soul.lua
@@ -61,8 +61,8 @@ monster.voices = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -500 },
- { name = "combat", interval = 1700, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -150, maxDamage = -550, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, target = true },
- { name = "combat", interval = 1700, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -150, maxDamage = -550, length = 4, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 1700, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -150, maxDamage = -550, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, effect = CONST_ME_HITBYPOISON, target = true },
+ { name = "combat", interval = 1700, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -150, maxDamage = -550, length = 4, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 1700, chance = 35, type = COMBAT_DEATHDAMAGE, minDamage = -150, maxDamage = -550, radius = 3, effect = CONST_ME_MORTAREA, target = false },
}
diff --git a/data-otservbr-global/monster/quests/svargrond_arena/warlord/deathbringer.lua b/data-otservbr-global/monster/quests/svargrond_arena/warlord/deathbringer.lua
index b6fa6be8396..c99f27f48aa 100644
--- a/data-otservbr-global/monster/quests/svargrond_arena/warlord/deathbringer.lua
+++ b/data-otservbr-global/monster/quests/svargrond_arena/warlord/deathbringer.lua
@@ -70,7 +70,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -465 },
- { name = "combat", interval = 1000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -80, maxDamage = -120, range = 7, radius = 4, shootEffect = CONST_ANI_FIRE, target = true },
+ { name = "combat", interval = 1000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -80, maxDamage = -120, range = 7, radius = 4, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
{ name = "combat", interval = 3000, chance = 17, type = COMBAT_FIREDAMAGE, minDamage = -300, maxDamage = -450, length = 8, spread = 3, effect = CONST_ME_FIREAREA, target = false },
{ name = "combat", interval = 2000, chance = 12, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -450, length = 8, spread = 3, effect = CONST_ME_POISONAREA, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -80, maxDamage = -100, radius = 6, effect = CONST_ME_POFF, target = false },
diff --git a/data-otservbr-global/monster/quests/svargrond_arena/warlord/fallen_mooh'tah_master_ghar.lua b/data-otservbr-global/monster/quests/svargrond_arena/warlord/fallen_mooh'tah_master_ghar.lua
index 676dda2eab9..3544b13dab0 100644
--- a/data-otservbr-global/monster/quests/svargrond_arena/warlord/fallen_mooh'tah_master_ghar.lua
+++ b/data-otservbr-global/monster/quests/svargrond_arena/warlord/fallen_mooh'tah_master_ghar.lua
@@ -69,12 +69,12 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -525, condition = { type = CONDITION_POISON, totalDamage = 18, interval = 4000 } },
- { name = "combat", interval = 6000, chance = 30, type = COMBAT_FIREDAMAGE, minDamage = -80, maxDamage = -300, length = 8, spread = 3, effect = CONST_ME_FIREAREA, target = false },
- { name = "combat", interval = 3000, chance = 45, type = COMBAT_FIREDAMAGE, minDamage = -80, maxDamage = -400, radius = 5, shootEffect = CONST_ANI_FIRE, target = true },
+ { name = "combat", interval = 6000, chance = 30, type = COMBAT_FIREDAMAGE, minDamage = -80, maxDamage = -300, length = 8, spread = 0, effect = CONST_ME_FIREAREA, target = false },
+ { name = "combat", interval = 3000, chance = 45, type = COMBAT_FIREDAMAGE, minDamage = -80, maxDamage = -400, radius = 5, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
{ name = "combat", interval = 4000, chance = 30, type = COMBAT_DEATHDAMAGE, minDamage = -80, maxDamage = -270, shootEffect = CONST_ANI_DEATH, effect = CONST_ME_MORTAREA, target = false },
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 4500, chance = 40, minDamage = -10, maxDamage = -200, range = 10, shootEffect = CONST_ANI_POISON, target = false },
- { name = "combat", interval = 5000, chance = 30, type = COMBAT_EARTHDAMAGE, minDamage = -60, maxDamage = -300, length = 8, spread = 3, effect = CONST_ME_POISONAREA, target = false },
+ { name = "combat", interval = 5000, chance = 30, type = COMBAT_EARTHDAMAGE, minDamage = -60, maxDamage = -300, length = 8, spread = 0, effect = CONST_ME_POISONAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/svargrond_arena/warlord/the_obliverator.lua b/data-otservbr-global/monster/quests/svargrond_arena/warlord/the_obliverator.lua
index ad6f8fa8db0..d154022d367 100644
--- a/data-otservbr-global/monster/quests/svargrond_arena/warlord/the_obliverator.lua
+++ b/data-otservbr-global/monster/quests/svargrond_arena/warlord/the_obliverator.lua
@@ -76,7 +76,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -700 },
{ name = "combat", interval = 1000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -100, maxDamage = -250, range = 5, radius = 7, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
- { name = "combat", interval = 3000, chance = 30, type = COMBAT_ENERGYDAMAGE, minDamage = -200, maxDamage = -500, length = 8, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 3000, chance = 30, type = COMBAT_ENERGYDAMAGE, minDamage = -200, maxDamage = -500, length = 8, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_curse_spreads/black_vixen.lua b/data-otservbr-global/monster/quests/the_curse_spreads/black_vixen.lua
index 3f676c6e9a5..214b8c6f2ce 100644
--- a/data-otservbr-global/monster/quests/the_curse_spreads/black_vixen.lua
+++ b/data-otservbr-global/monster/quests/the_curse_spreads/black_vixen.lua
@@ -107,7 +107,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -290 },
{ name = "combat", interval = 1000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = 100, maxDamage = 720, range = 7, shootEffect = CONST_ANI_THROWINGSTAR, target = false },
{ name = "speed", interval = 2000, chance = 15, speedChange = -600, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 20000 },
- { name = "combat", interval = 1000, chance = 14, type = COMBAT_DEATHDAMAGE, minDamage = -100, maxDamage = -700, length = 5, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 1000, chance = 14, type = COMBAT_DEATHDAMAGE, minDamage = -100, maxDamage = -700, length = 5, spread = 0, effect = CONST_ME_MORTAREA, target = false },
{ name = "outfit", interval = 1000, chance = 1, radius = 1, target = true, duration = 2000, outfitMonster = "werewolf" },
}
diff --git a/data-otservbr-global/monster/quests/the_curse_spreads/bloodback.lua b/data-otservbr-global/monster/quests/the_curse_spreads/bloodback.lua
index 7f8c4a86cf3..3b9dd8e0eea 100644
--- a/data-otservbr-global/monster/quests/the_curse_spreads/bloodback.lua
+++ b/data-otservbr-global/monster/quests/the_curse_spreads/bloodback.lua
@@ -101,7 +101,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -290 },
{ name = "combat", interval = 1000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -420, range = 7, target = false },
{ name = "speed", interval = 2000, chance = 15, speedChange = -600, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 20000 },
- { name = "combat", interval = 1000, chance = 14, type = COMBAT_DEATHDAMAGE, minDamage = -100, maxDamage = -200, length = 5, spread = 3, target = false },
+ { name = "combat", interval = 1000, chance = 14, type = COMBAT_DEATHDAMAGE, minDamage = -100, maxDamage = -200, length = 5, spread = 0, effect = CONST_ME_MORTAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_curse_spreads/feroxa2.lua b/data-otservbr-global/monster/quests/the_curse_spreads/feroxa2.lua
index a40b803565d..4c66688dbd4 100644
--- a/data-otservbr-global/monster/quests/the_curse_spreads/feroxa2.lua
+++ b/data-otservbr-global/monster/quests/the_curse_spreads/feroxa2.lua
@@ -72,7 +72,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -1400, maxDamage = -1800 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -700, maxDamage = -1050, radius = 6, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -700, maxDamage = -1250, length = 9, spread = 1, effect = CONST_ME_MAGIC_BLUE, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -700, maxDamage = -1250, length = 9, spread = 0, effect = CONST_ME_MAGIC_BLUE, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -450, maxDamage = -700, radius = 7, effect = CONST_ME_BLOCKHIT, target = false },
}
diff --git a/data-otservbr-global/monster/quests/the_curse_spreads/feroxa3.lua b/data-otservbr-global/monster/quests/the_curse_spreads/feroxa3.lua
index f702b93764a..8020a2664cc 100644
--- a/data-otservbr-global/monster/quests/the_curse_spreads/feroxa3.lua
+++ b/data-otservbr-global/monster/quests/the_curse_spreads/feroxa3.lua
@@ -72,7 +72,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -1400, maxDamage = -1800 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -700, maxDamage = -1250, radius = 6, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -700, maxDamage = -1250, length = 9, spread = 1, effect = CONST_ME_MAGIC_BLUE, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -700, maxDamage = -1250, length = 9, spread = 0, effect = CONST_ME_MAGIC_BLUE, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -700, maxDamage = -1250, range = 6, shootEffect = CONST_ANI_ARROW, effect = CONST_ME_EXPLOSIONAREA, target = true },
}
diff --git a/data-otservbr-global/monster/quests/the_curse_spreads/feroxa4.lua b/data-otservbr-global/monster/quests/the_curse_spreads/feroxa4.lua
index 3f2ac989154..478aa779ddd 100644
--- a/data-otservbr-global/monster/quests/the_curse_spreads/feroxa4.lua
+++ b/data-otservbr-global/monster/quests/the_curse_spreads/feroxa4.lua
@@ -72,7 +72,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -1400, maxDamage = -1800 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -700, maxDamage = -1250, radius = 6, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -700, maxDamage = -1250, length = 9, spread = 1, effect = CONST_ME_MAGIC_BLUE, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -700, maxDamage = -1250, length = 9, spread = 0, effect = CONST_ME_MAGIC_BLUE, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -700, maxDamage = -1250, range = 6, shootEffect = CONST_ANI_ARROW, effect = CONST_ME_EXPLOSIONAREA, target = true },
}
diff --git a/data-otservbr-global/monster/quests/the_curse_spreads/feroxa5.lua b/data-otservbr-global/monster/quests/the_curse_spreads/feroxa5.lua
index a469ad757b7..39fed1dc78c 100644
--- a/data-otservbr-global/monster/quests/the_curse_spreads/feroxa5.lua
+++ b/data-otservbr-global/monster/quests/the_curse_spreads/feroxa5.lua
@@ -87,7 +87,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -1400, maxDamage = -1800 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -700, maxDamage = -1050, radius = 6, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -700, maxDamage = -1250, length = 9, spread = 1, effect = CONST_ME_MAGIC_BLUE, target = false },
+ { name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -700, maxDamage = -1250, length = 9, spread = 0, effect = CONST_ME_MAGIC_BLUE, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -450, maxDamage = -700, radius = 7, effect = CONST_ME_BLOCKHIT, target = false },
}
diff --git a/data-otservbr-global/monster/quests/the_curse_spreads/sharpclaw.lua b/data-otservbr-global/monster/quests/the_curse_spreads/sharpclaw.lua
index 570f501efd1..50ad689b7c7 100644
--- a/data-otservbr-global/monster/quests/the_curse_spreads/sharpclaw.lua
+++ b/data-otservbr-global/monster/quests/the_curse_spreads/sharpclaw.lua
@@ -100,7 +100,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -290 },
{ name = "combat", interval = 1000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = 100, maxDamage = 720, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, target = false },
{ name = "speed", interval = 2000, chance = 15, speedChange = -600, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 20000 },
- { name = "combat", interval = 1000, chance = 14, type = COMBAT_DEATHDAMAGE, minDamage = -100, maxDamage = -700, length = 5, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 1000, chance = 14, type = COMBAT_DEATHDAMAGE, minDamage = -100, maxDamage = -700, length = 5, spread = 0, effect = CONST_ME_MORTAREA, target = false },
{ name = "outfit", interval = 1000, chance = 1, radius = 1, target = true, duration = 2000, outfitMonster = "Werebadger" },
{ name = "ghastly dragon curse", interval = 2000, chance = 5, range = 1, target = false },
}
diff --git a/data-otservbr-global/monster/quests/the_dream_courts/bosses/alptramun.lua b/data-otservbr-global/monster/quests/the_dream_courts/bosses/alptramun.lua
index 76275c2cd0f..46b5cf6c91d 100644
--- a/data-otservbr-global/monster/quests/the_dream_courts/bosses/alptramun.lua
+++ b/data-otservbr-global/monster/quests/the_dream_courts/bosses/alptramun.lua
@@ -118,9 +118,9 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -200, maxDamage = -1000 },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = -700, maxDamage = -2000, range = 7, length = 6, spread = 3, shootEffect = CONST_ANI_POISON, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = -400, maxDamage = -700, range = 3, length = 6, spread = 3, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -200, maxDamage = -500, range = 3, length = 6, spread = 3, effect = CONST_ME_HITBYFIRE, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = -700, maxDamage = -2000, range = 7, length = 6, spread = 0, shootEffect = CONST_ANI_POISON, effect = CONST_ME_HITBYPOISON, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = -400, maxDamage = -700, range = 3, length = 6, spread = 0, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -200, maxDamage = -500, range = 3, length = 6, spread = 0, effect = CONST_ME_HITBYFIRE, target = false },
{ name = "stone shower rune", interval = 2000, chance = 10, minDamage = -230, maxDamage = -450, range = 7, target = false },
}
diff --git a/data-otservbr-global/monster/quests/the_dream_courts/bosses/plagueroot.lua b/data-otservbr-global/monster/quests/the_dream_courts/bosses/plagueroot.lua
index 3d436e2b83d..5888f8e18a2 100644
--- a/data-otservbr-global/monster/quests/the_dream_courts/bosses/plagueroot.lua
+++ b/data-otservbr-global/monster/quests/the_dream_courts/bosses/plagueroot.lua
@@ -141,8 +141,8 @@ monster.attacks = {
{ name = "combat", interval = 1000, chance = 50, type = COMBAT_FIREDAMAGE, minDamage = -20, maxDamage = -100, radius = 5, effect = CONST_ME_BLOCKHIT, target = false },
{ name = "firefield", interval = 1000, chance = 4, radius = 8, effect = CONST_ME_EXPLOSIONHIT, target = false },
{ name = "combat", interval = 1000, chance = 34, type = COMBAT_FIREDAMAGE, minDamage = -350, maxDamage = -650, range = 7, radius = 7, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
- { name = "combat", interval = 1000, chance = 13, type = COMBAT_FIREDAMAGE, minDamage = -250, maxDamage = -600, length = 8, spread = 3, effect = CONST_ME_EXPLOSIONHIT, target = false },
- { name = "combat", interval = 1000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -350, maxDamage = -600, length = 8, spread = 3, effect = CONST_ME_FIREAREA, target = false },
+ { name = "combat", interval = 1000, chance = 13, type = COMBAT_FIREDAMAGE, minDamage = -250, maxDamage = -600, length = 8, spread = 0, effect = CONST_ME_EXPLOSIONHIT, target = false },
+ { name = "combat", interval = 1000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -350, maxDamage = -600, length = 8, spread = 0, effect = CONST_ME_FIREAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_dream_courts/lucifuga_aranea.lua b/data-otservbr-global/monster/quests/the_dream_courts/lucifuga_aranea.lua
index 717a1fe0814..5fbd324c0fd 100644
--- a/data-otservbr-global/monster/quests/the_dream_courts/lucifuga_aranea.lua
+++ b/data-otservbr-global/monster/quests/the_dream_courts/lucifuga_aranea.lua
@@ -73,7 +73,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -250, condition = { type = CONDITION_POISON, totalDamage = 160, interval = 4000 } },
- { name = "speed", interval = 2000, chance = 15, speedChange = -800, range = 7, radius = 6, effect = CONST_ME_POFF, target = false, duration = 15000 },
+ { name = "speed", interval = 2000, chance = 15, speedChange = -100, range = 7, radius = 6, effect = CONST_ME_POFF, target = false, duration = 15000 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_ICEDAMAGE, minDamage = -50, maxDamage = -100, range = 7, shootEffect = CONST_ANI_ICE, effect = CONST_ME_ICEAREA, target = true },
{ name = "speed", interval = 2000, chance = 20, speedChange = -600, range = 7, shootEffect = CONST_ANI_SNOWBALL, target = true, duration = 10000 },
}
diff --git a/data-otservbr-global/monster/quests/the_dream_courts/mind-wrecking_dream.lua b/data-otservbr-global/monster/quests/the_dream_courts/mind-wrecking_dream.lua
index 4554534149b..64c2f952995 100644
--- a/data-otservbr-global/monster/quests/the_dream_courts/mind-wrecking_dream.lua
+++ b/data-otservbr-global/monster/quests/the_dream_courts/mind-wrecking_dream.lua
@@ -67,9 +67,9 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -320 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -165, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -350, maxDamage = -720, length = 8, spread = 3, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -300, length = 7, spread = 3, effect = CONST_ME_EXPLOSIONAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -225, maxDamage = -275, radius = 4, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -350, maxDamage = -720, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -300, length = 7, spread = 0, effect = CONST_ME_EXPLOSIONAREA, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -225, maxDamage = -275, radius = 4, effect = CONST_ME_MORTAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_dream_courts/plant_abomination.lua b/data-otservbr-global/monster/quests/the_dream_courts/plant_abomination.lua
index 41517061f49..fefb9dc4ce3 100644
--- a/data-otservbr-global/monster/quests/the_dream_courts/plant_abomination.lua
+++ b/data-otservbr-global/monster/quests/the_dream_courts/plant_abomination.lua
@@ -67,7 +67,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -150 },
{ name = "combat", interval = 2000, chance = 5, type = COMBAT_MANADRAIN, minDamage = -30, maxDamage = -100, radius = 4, effect = CONST_ME_GREEN_RINGS, target = false },
- { name = "speed", interval = 2000, chance = 15, speedChange = -700, length = 5, spread = 3, effect = CONST_ME_SMALLPLANTS, target = false, duration = 15000 },
+ { name = "speed", interval = 2000, chance = 15, speedChange = -700, length = 5, spread = 0, effect = CONST_ME_SMALLPLANTS, target = false, duration = 15000 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -100, range = 7, radius = 1, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_CARNIPHILA, target = true },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -55, maxDamage = -100, radius = 4, effect = CONST_ME_HITBYPOISON, target = true },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, radius = 1, effect = CONST_ME_POISONAREA, target = false },
diff --git a/data-otservbr-global/monster/quests/the_elemental_spheres/blistering_fire_elemental.lua b/data-otservbr-global/monster/quests/the_elemental_spheres/blistering_fire_elemental.lua
index 3991aa6ae98..fc58dbba787 100644
--- a/data-otservbr-global/monster/quests/the_elemental_spheres/blistering_fire_elemental.lua
+++ b/data-otservbr-global/monster/quests/the_elemental_spheres/blistering_fire_elemental.lua
@@ -71,7 +71,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -350 },
- { name = "combat", interval = 1000, chance = 11, type = COMBAT_FIREDAMAGE, minDamage = -65, maxDamage = -510, length = 7, spread = 3, target = false },
+ { name = "combat", interval = 1000, chance = 11, type = COMBAT_FIREDAMAGE, minDamage = -65, maxDamage = -510, length = 7, spread = 0, effect = CONST_ME_FIREAREA, target = false },
-- fire
{ name = "condition", type = CONDITION_FIRE, interval = 1000, chance = 12, minDamage = -50, maxDamage = -200, radius = 6, effect = CONST_ME_FIREAREA, target = false },
{ name = "firefield", interval = 1000, chance = 15, range = 7, radius = 3, shootEffect = CONST_ANI_FIRE, target = true },
diff --git a/data-otservbr-global/monster/quests/the_elemental_spheres/earth_overlord.lua b/data-otservbr-global/monster/quests/the_elemental_spheres/earth_overlord.lua
index 33251b292d5..e35e69c701e 100644
--- a/data-otservbr-global/monster/quests/the_elemental_spheres/earth_overlord.lua
+++ b/data-otservbr-global/monster/quests/the_elemental_spheres/earth_overlord.lua
@@ -79,7 +79,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -400 },
- { name = "combat", interval = 1000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = 0, maxDamage = -800, length = 7, spread = 3, effect = CONST_ME_STONES, target = false },
+ { name = "combat", interval = 1000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = 0, maxDamage = -800, length = 7, spread = 0, effect = CONST_ME_STONES, target = false },
{ name = "combat", interval = 1000, chance = 9, type = COMBAT_EARTHDAMAGE, minDamage = 0, maxDamage = -490, radius = 6, effect = CONST_ME_BIGPLANTS, target = false },
{ name = "speed", interval = 2000, chance = 20, speedChange = -750, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 4000 },
}
diff --git a/data-otservbr-global/monster/quests/the_elemental_spheres/energy_overlord.lua b/data-otservbr-global/monster/quests/the_elemental_spheres/energy_overlord.lua
index 844a6504d33..f7c0a4002a0 100644
--- a/data-otservbr-global/monster/quests/the_elemental_spheres/energy_overlord.lua
+++ b/data-otservbr-global/monster/quests/the_elemental_spheres/energy_overlord.lua
@@ -74,7 +74,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -800, length = 7, spread = 3, effect = CONST_ME_PURPLEENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -800, length = 7, spread = 0, effect = CONST_ME_PURPLEENERGY, target = false },
{ name = "combat", interval = 1000, chance = 11, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -200, range = 3, effect = CONST_ME_PURPLEENERGY, target = true },
{ name = "combat", interval = 1000, chance = 9, type = COMBAT_EARTHDAMAGE, minDamage = -50, maxDamage = -200, radius = 5, effect = CONST_ME_BIGPLANTS, target = false },
}
diff --git a/data-otservbr-global/monster/quests/the_elemental_spheres/ice_overlord.lua b/data-otservbr-global/monster/quests/the_elemental_spheres/ice_overlord.lua
index 9a65a1c8ef2..44bf1a162e1 100644
--- a/data-otservbr-global/monster/quests/the_elemental_spheres/ice_overlord.lua
+++ b/data-otservbr-global/monster/quests/the_elemental_spheres/ice_overlord.lua
@@ -74,7 +74,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -400 },
- { name = "speed", interval = 2000, chance = 18, speedChange = -800, radius = 6, effect = CONST_ME_ICETORNADO, target = false, duration = 5000 },
+ { name = "speed", interval = 2000, chance = 18, speedChange = -100, radius = 6, effect = CONST_ME_ICETORNADO, target = false, duration = 5000 },
{ name = "combat", interval = 1000, chance = 9, type = COMBAT_ICEDAMAGE, minDamage = -50, maxDamage = -400, range = 7, shootEffect = CONST_ANI_SMALLICE, effect = CONST_ME_ICEATTACK, target = true },
}
diff --git a/data-otservbr-global/monster/quests/the_elemental_spheres/jagged_earth_elemental.lua b/data-otservbr-global/monster/quests/the_elemental_spheres/jagged_earth_elemental.lua
index 15cd6582e71..df44ccaac8f 100644
--- a/data-otservbr-global/monster/quests/the_elemental_spheres/jagged_earth_elemental.lua
+++ b/data-otservbr-global/monster/quests/the_elemental_spheres/jagged_earth_elemental.lua
@@ -76,7 +76,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -300 },
- { name = "combat", interval = 1000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -100, maxDamage = -250, length = 6, spread = 3, effect = CONST_ME_STONES, target = false },
+ { name = "combat", interval = 1000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -100, maxDamage = -250, length = 6, spread = 0, effect = CONST_ME_STONES, target = false },
{ name = "combat", interval = 1000, chance = 11, type = COMBAT_EARTHDAMAGE, minDamage = 0, maxDamage = -200, range = 7, radius = 6, shootEffect = CONST_ANI_SMALLEARTH, effect = CONST_ME_POISONAREA, target = true },
}
diff --git a/data-otservbr-global/monster/quests/the_elemental_spheres/muddy_earth_elemental.lua b/data-otservbr-global/monster/quests/the_elemental_spheres/muddy_earth_elemental.lua
index 8970e739266..5a74924dd2f 100644
--- a/data-otservbr-global/monster/quests/the_elemental_spheres/muddy_earth_elemental.lua
+++ b/data-otservbr-global/monster/quests/the_elemental_spheres/muddy_earth_elemental.lua
@@ -74,7 +74,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -160 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -25, maxDamage = -155, range = 7, radius = 2, effect = CONST_ME_STONES, target = true },
-- poison
- { name = "condition", type = CONDITION_POISON, interval = 1000, chance = 10, minDamage = 0, maxDamage = -26, length = 6, spread = 3, effect = CONST_ME_GROUNDSHAKER, target = false },
+ { name = "condition", type = CONDITION_POISON, interval = 1000, chance = 10, minDamage = 0, maxDamage = -26, length = 6, spread = 0, effect = CONST_ME_GROUNDSHAKER, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_first_dragon/haunted_dragon.lua b/data-otservbr-global/monster/quests/the_first_dragon/haunted_dragon.lua
index 9f1f11a2cdf..9e261a34ddb 100644
--- a/data-otservbr-global/monster/quests/the_first_dragon/haunted_dragon.lua
+++ b/data-otservbr-global/monster/quests/the_first_dragon/haunted_dragon.lua
@@ -98,7 +98,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -480 },
- { name = "combat", interval = 2000, chance = 5, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -400, range = 7, radius = 4, target = true },
+ { name = "combat", interval = 2000, chance = 5, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -400, range = 7, radius = 4, effect = CONST_ME_HITAREA, target = true },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -125, maxDamage = -600, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_SMALLCLOUDS, target = false },
{ name = "combat", interval = 2000, chance = 5, type = COMBAT_EARTHDAMAGE, minDamage = -100, maxDamage = -390, range = 7, radius = 4, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = true },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = true },
diff --git a/data-otservbr-global/monster/quests/the_inquisition/ungreez.lua b/data-otservbr-global/monster/quests/the_inquisition/ungreez.lua
index c19b2199920..f2308c8c9a3 100644
--- a/data-otservbr-global/monster/quests/the_inquisition/ungreez.lua
+++ b/data-otservbr-global/monster/quests/the_inquisition/ungreez.lua
@@ -80,7 +80,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 13, type = COMBAT_MANADRAIN, minDamage = 0, maxDamage = -110, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, target = false },
{ name = "combat", interval = 1000, chance = 14, type = COMBAT_FIREDAMAGE, minDamage = -150, maxDamage = -250, range = 7, radius = 7, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
{ name = "combat", interval = 2000, chance = 18, type = COMBAT_ENERGYDAMAGE, minDamage = -200, maxDamage = -400, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_PURPLEENERGY, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -380, length = 8, spread = 3, effect = CONST_ME_PURPLEENERGY, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -380, length = 8, spread = 0, effect = CONST_ME_PURPLEENERGY, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_new_frontier/doomhowl.lua b/data-otservbr-global/monster/quests/the_new_frontier/doomhowl.lua
index ee20fda8469..5aa858960ba 100644
--- a/data-otservbr-global/monster/quests/the_new_frontier/doomhowl.lua
+++ b/data-otservbr-global/monster/quests/the_new_frontier/doomhowl.lua
@@ -66,7 +66,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -150 },
- { name = "combat", interval = 2000, chance = 50, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -645, radius = 3, target = false },
+ { name = "combat", interval = 2000, chance = 50, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -645, radius = 3, effect = CONST_ME_BLOCKHIT, target = false },
{ name = "combat", interval = 4000, chance = 20, type = COMBAT_PHYSICALDAMAGE, effect = CONST_ME_SOUND_GREEN, target = false },
}
diff --git a/data-otservbr-global/monster/quests/the_new_frontier/tirecz.lua b/data-otservbr-global/monster/quests/the_new_frontier/tirecz.lua
index 42cbd1f2b9f..2370a208b1b 100644
--- a/data-otservbr-global/monster/quests/the_new_frontier/tirecz.lua
+++ b/data-otservbr-global/monster/quests/the_new_frontier/tirecz.lua
@@ -75,7 +75,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 25, type = COMBAT_FIREDAMAGE, minDamage = -120, maxDamage = -460, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -290, radius = 3, effect = CONST_ME_BLOCKHIT, target = false },
{ name = "combat", interval = 3000, chance = 30, type = COMBAT_ENERGYDAMAGE, minDamage = -80, maxDamage = -345, length = 8, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -370, radius = 7, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -370, radius = 7, effect = CONST_ME_BLOCKHIT, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_order_of_lion/bosses/ancient_lion_knight.lua b/data-otservbr-global/monster/quests/the_order_of_lion/bosses/ancient_lion_knight.lua
index 9118397f72b..820931f81c0 100644
--- a/data-otservbr-global/monster/quests/the_order_of_lion/bosses/ancient_lion_knight.lua
+++ b/data-otservbr-global/monster/quests/the_order_of_lion/bosses/ancient_lion_knight.lua
@@ -97,7 +97,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -750, effect = CONST_ME_DRAWBLOOD },
- { name = "combat", interval = 6000, chance = 30, type = COMBAT_HOLYDAMAGE, minDamage = -450, maxDamage = -750, length = 8, spread = 3, effect = CONST_ME_HOLYAREA, target = false },
+ { name = "combat", interval = 6000, chance = 30, type = COMBAT_HOLYDAMAGE, minDamage = -450, maxDamage = -750, length = 8, spread = 0, effect = CONST_ME_HOLYAREA, target = false },
{ name = "combat", interval = 2750, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -400, maxDamage = -800, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 2500, chance = 22, type = COMBAT_DEATHDAMAGE, minDamage = -400, maxDamage = -500, radius = 3, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 3300, chance = 24, type = COMBAT_ICEDAMAGE, minDamage = -250, maxDamage = -350, length = 4, spread = 0, effect = CONST_ME_ICEATTACK, target = false },
diff --git a/data-otservbr-global/monster/quests/the_order_of_lion/bosses/drume.lua b/data-otservbr-global/monster/quests/the_order_of_lion/bosses/drume.lua
index 646a665c4b4..9d86b77cd48 100644
--- a/data-otservbr-global/monster/quests/the_order_of_lion/bosses/drume.lua
+++ b/data-otservbr-global/monster/quests/the_order_of_lion/bosses/drume.lua
@@ -127,11 +127,11 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -1100, effect = CONST_ME_DRAWBLOOD },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_HOLYDAMAGE, minDamage = -850, maxDamage = -1150, length = 8, spread = 3, effect = CONST_ME_HOLYAREA, target = false },
- { name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -800, maxDamage = -1200, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 2000, chance = 22, type = COMBAT_DEATHDAMAGE, minDamage = -800, maxDamage = -1000, radius = 3, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 2000, chance = 24, type = COMBAT_ICEDAMAGE, minDamage = -700, maxDamage = -900, length = 4, spread = 0, effect = CONST_ME_ICEATTACK, target = false },
- { name = "singlecloudchain", interval = 2000, chance = 34, minDamage = -600, maxDamage = -1100, range = 4, effect = CONST_ME_ENERGYHIT, target = true },
+ { name = "combat", interval = 2700, chance = 25, type = COMBAT_HOLYDAMAGE, minDamage = -850, maxDamage = -1150, length = 8, spread = 0, effect = CONST_ME_HOLYAREA, target = false },
+ { name = "combat", interval = 3100, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -800, maxDamage = -1200, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 3300, chance = 22, type = COMBAT_DEATHDAMAGE, minDamage = -800, maxDamage = -1000, radius = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 3700, chance = 24, type = COMBAT_ICEDAMAGE, minDamage = -700, maxDamage = -900, length = 4, spread = 0, effect = CONST_ME_ICEATTACK, target = false },
+ { name = "singlecloudchain", interval = 2100, chance = 34, minDamage = -600, maxDamage = -1100, range = 4, effect = CONST_ME_ENERGYHIT, target = true },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_order_of_lion/bosses/kesar.lua b/data-otservbr-global/monster/quests/the_order_of_lion/bosses/kesar.lua
index a3db694f72c..b60503900c1 100644
--- a/data-otservbr-global/monster/quests/the_order_of_lion/bosses/kesar.lua
+++ b/data-otservbr-global/monster/quests/the_order_of_lion/bosses/kesar.lua
@@ -70,7 +70,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -750, effect = CONST_ME_DRAWBLOOD },
- { name = "combat", interval = 4000, chance = 15, type = COMBAT_HOLYDAMAGE, minDamage = -450, maxDamage = -750, length = 8, spread = 3, effect = CONST_ME_HOLYAREA, target = false },
+ { name = "combat", interval = 4000, chance = 15, type = COMBAT_HOLYDAMAGE, minDamage = -450, maxDamage = -750, length = 8, spread = 0, effect = CONST_ME_HOLYAREA, target = false },
{ name = "combat", interval = 2750, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -400, maxDamage = -800, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = false },
{ name = "singledeathchain", interval = 4000, chance = 15, minDamage = -250, maxDamage = -530, range = 5, effect = CONST_ME_MORTAREA, target = true },
{ name = "singleicechain", interval = 4000, chance = 18, minDamage = -150, maxDamage = -450, range = 5, effect = CONST_ME_ICEATTACK, target = true },
diff --git a/data-otservbr-global/monster/quests/the_percht_queens_island/baleful_bunny.lua b/data-otservbr-global/monster/quests/the_percht_queens_island/baleful_bunny.lua
index d35db5b1c6c..851ab767f4e 100644
--- a/data-otservbr-global/monster/quests/the_percht_queens_island/baleful_bunny.lua
+++ b/data-otservbr-global/monster/quests/the_percht_queens_island/baleful_bunny.lua
@@ -88,7 +88,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -200 },
{ name = "combat", interval = 2000, chance = 1, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -150, radius = 4, effect = CONST_ME_POFF, target = true },
{ name = "combat", interval = 2000, chance = 1, type = COMBAT_FIREDAMAGE, minDamage = -100, maxDamage = -150, radius = 1, effect = CONST_ME_ENERGYAREA, target = false },
- { name = "combat", interval = 2000, chance = 111, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -150, radius = 4, target = true },
+ { name = "combat", interval = 2000, chance = 111, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -150, radius = 4, effect = CONST_ME_DRAWBLOOD, target = true },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_percht_queens_island/bonny_bunny.lua b/data-otservbr-global/monster/quests/the_percht_queens_island/bonny_bunny.lua
index 31f0973a229..a9e044fc00d 100644
--- a/data-otservbr-global/monster/quests/the_percht_queens_island/bonny_bunny.lua
+++ b/data-otservbr-global/monster/quests/the_percht_queens_island/bonny_bunny.lua
@@ -63,7 +63,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -200 },
- { name = "combat", interval = 2000, chance = 50, type = COMBAT_FIREDAMAGE, minDamage = -90, maxDamage = -150, length = 4, spread = 3, effect = CONST_ME_HEARTS, target = false },
+ { name = "combat", interval = 2000, chance = 50, type = COMBAT_FIREDAMAGE, minDamage = -90, maxDamage = -150, length = 4, spread = 0, effect = CONST_ME_HEARTS, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/biting_cold.lua b/data-otservbr-global/monster/quests/the_secret_library/biting_cold.lua
index 188854deca0..163e005b41a 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/biting_cold.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/biting_cold.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -450 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/bone_jaw.lua b/data-otservbr-global/monster/quests/the_secret_library/bone_jaw.lua
index 9d4d97cd3e8..5c8a41c3e66 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/bone_jaw.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/bone_jaw.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/bosses/ghulosh.lua b/data-otservbr-global/monster/quests/the_secret_library/bosses/ghulosh.lua
index 4324a573ec4..bd3a786b365 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/bosses/ghulosh.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/bosses/ghulosh.lua
@@ -105,11 +105,10 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 1000, chance = 100, skill = 150, attack = 280 },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_DEATHDAMAGE, minDamage = -900, maxDamage = -1500, length = 8, spread = 3, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_DEATHDAMAGE, minDamage = -210, maxDamage = -600, length = 8, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_DEATHDAMAGE, minDamage = -900, maxDamage = -1500, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_DEATHDAMAGE, minDamage = -210, maxDamage = -600, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 2000, chance = 12, type = COMBAT_DEATHDAMAGE, minDamage = -210, maxDamage = -600, range = 7, radius = 3, effect = CONST_ME_MORTAREA, target = false },
- { name = "melee", interval = 2000, chance = 100, skill = 90, attack = 250 },
- { name = "combat", interval = 2000, chance = 12, type = COMBAT_LIFEDRAIN, minDamage = -1500, maxDamage = -2000, range = 7, radius = 3, target = false },
+ { name = "combat", interval = 2000, chance = 12, type = COMBAT_LIFEDRAIN, minDamage = -1500, maxDamage = -2000, range = 7, radius = 3, effect = CONST_ME_DRAWBLOOD, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/bosses/grand_canon_dominus.lua b/data-otservbr-global/monster/quests/the_secret_library/bosses/grand_canon_dominus.lua
index 324701dac3b..f6976c6d732 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/bosses/grand_canon_dominus.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/bosses/grand_canon_dominus.lua
@@ -86,7 +86,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -150, maxDamage = -700 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -720, range = 7, shootEffect = CONST_ANI_ETHEREALSPEAR, target = false },
- { name = "combat", interval = 2000, chance = 14, type = COMBAT_HOLYDAMAGE, minDamage = -100, maxDamage = -1000, length = 8, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 2000, chance = 14, type = COMBAT_HOLYDAMAGE, minDamage = -100, maxDamage = -1000, length = 8, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -200, maxDamage = -700, range = 5, radius = 3, effect = CONST_ME_HOLYAREA, target = false },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -200, maxDamage = -700, range = 5, radius = 3, effect = CONST_ME_SMALLCLOUDS, target = false },
}
diff --git a/data-otservbr-global/monster/quests/the_secret_library/bosses/grand_chaplain_gaunder.lua b/data-otservbr-global/monster/quests/the_secret_library/bosses/grand_chaplain_gaunder.lua
index bd22561f584..a4d42046c58 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/bosses/grand_chaplain_gaunder.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/bosses/grand_chaplain_gaunder.lua
@@ -94,7 +94,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -150, maxDamage = -850 },
{ name = "combat", interval = 1500, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -380, maxDamage = -890, range = 4, radius = 4, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -290, maxDamage = -720, range = 7, shootEffect = CONST_ANI_ETHEREALSPEAR, target = false },
- { name = "combat", interval = 1500, chance = 14, type = COMBAT_HOLYDAMAGE, minDamage = -300, maxDamage = -1000, length = 8, spread = 3, effect = CONST_ME_BLOCKHIT, target = false },
+ { name = "combat", interval = 1500, chance = 14, type = COMBAT_HOLYDAMAGE, minDamage = -300, maxDamage = -1000, length = 8, spread = 0, effect = CONST_ME_BLOCKHIT, target = false },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -200, maxDamage = -700, range = 5, radius = 3, effect = CONST_ME_SMALLCLOUDS, target = false },
}
diff --git a/data-otservbr-global/monster/quests/the_secret_library/bosses/grand_commander_soeren.lua b/data-otservbr-global/monster/quests/the_secret_library/bosses/grand_commander_soeren.lua
index 9e8a232f9df..e79984a5317 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/bosses/grand_commander_soeren.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/bosses/grand_commander_soeren.lua
@@ -88,7 +88,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -150, maxDamage = -700 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -720, range = 7, shootEffect = CONST_ANI_ROYALSPEAR, target = false },
- { name = "combat", interval = 1000, chance = 14, type = COMBAT_HOLYDAMAGE, minDamage = -500, maxDamage = -1000, length = 8, spread = 3, effect = CONST_ME_BLOCKHIT, target = false },
+ { name = "combat", interval = 1000, chance = 14, type = COMBAT_HOLYDAMAGE, minDamage = -500, maxDamage = -1000, length = 8, spread = 0, effect = CONST_ME_BLOCKHIT, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/bosses/grand_master_oberon_functions.lua b/data-otservbr-global/monster/quests/the_secret_library/bosses/grand_master_oberon_functions.lua
index af9c6f0218a..86714879320 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/bosses/grand_master_oberon_functions.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/bosses/grand_master_oberon_functions.lua
@@ -24,7 +24,7 @@ GrandMasterOberonResponses = {
[6] = { msg = "Excuse me but I still do not get the message!", msg2 = oberonOthersMessages[2] },
[7] = { msg = "Dare strike up a Minnesang and you will receive your last accolade!", msg2 = oberonOthersMessages[1] },
[8] = { msg = "Then why are we fighting alone right now?", msg2 = oberonOthersMessages[2] },
- [9] = { msg = "SEHWO ASIMO, TOLIDO ESD!", msg2 = oberonOthersMessages[2] },
+ [9] = { msg = "SEHWO ASIMO, TOLIDO ESD", msg2 = oberonOthersMessages[2] },
}
GrandMasterOberonConfig = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/bosses/thawing_dragon_lord.lua b/data-otservbr-global/monster/quests/the_secret_library/bosses/thawing_dragon_lord.lua
index 032b61dba4a..fa175a85a2b 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/bosses/thawing_dragon_lord.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/bosses/thawing_dragon_lord.lua
@@ -74,7 +74,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -300 },
{ name = "ice crystal bomb", interval = 2000, chance = 30, minDamage = -600, maxDamage = -700, target = true },
- { name = "fire wave", interval = 2000, chance = 30, minDamage = -800, maxDamage = -1200, length = 1, spread = 0, target = true },
+ { name = "fire wave", interval = 2000, chance = 30, minDamage = -800, maxDamage = -1200, length = 1, spread = 1, effect = CONST_ME_FIREAREA, target = true },
{ name = "speed", interval = 1000, chance = 12, speedChange = -250, radius = 6, effect = CONST_ME_HITBYFIRE, target = false, duration = 60000 },
{ name = "firefield", interval = 1000, chance = 10, range = 7, radius = 4, shootEffect = CONST_ANI_FIRE, target = true },
}
diff --git a/data-otservbr-global/monster/quests/the_secret_library/bosses/the_scourge_of_oblivion.lua b/data-otservbr-global/monster/quests/the_secret_library/bosses/the_scourge_of_oblivion.lua
index 5965afef0a3..bd4f897e03a 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/bosses/the_scourge_of_oblivion.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/bosses/the_scourge_of_oblivion.lua
@@ -130,14 +130,14 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 8, type = COMBAT_FIREDAMAGE, minDamage = -1550, maxDamage = -2550, range = 7, radius = 7, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -1075, maxDamage = -2405, range = 7, shootEffect = CONST_ANI_ENERGYBALL, effect = CONST_ME_ENERGYHIT, target = true },
{ name = "combat", interval = 1000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -600, maxDamage = -1500, radius = 8, effect = CONST_ME_LOSEENERGY, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -750, maxDamage = -1200, length = 8, spread = 3, effect = CONST_ME_PURPLEENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -750, maxDamage = -1200, length = 8, spread = 0, effect = CONST_ME_PURPLEENERGY, target = false },
{ name = "choking fear drown", interval = 2000, chance = 20, target = false },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -450, maxDamage = -1400, radius = 4, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = true },
{ name = "combat", interval = 1000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -800, maxDamage = -2300, radius = 8, effect = CONST_ME_MAGIC_GREEN, target = false },
- { name = "speed", interval = 1000, chance = 12, speedChange = -800, radius = 6, effect = CONST_ME_POISONAREA, target = false, duration = 60000 },
+ { name = "speed", interval = 1000, chance = 12, speedChange = -100, radius = 6, effect = CONST_ME_POISONAREA, target = false, duration = 60000 },
{ name = "strength", interval = 1000, chance = 8, radius = 5, effect = CONST_ME_HITAREA, target = false },
{ name = "combat", interval = 1000, chance = 34, type = COMBAT_FIREDAMAGE, minDamage = -100, maxDamage = -700, range = 7, radius = 7, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true },
- { name = "combat", interval = 1000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -300, maxDamage = -950, length = 8, spread = 3, effect = CONST_ME_MAGIC_RED, target = false },
+ { name = "combat", interval = 1000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -300, maxDamage = -950, length = 8, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/brother_chill.lua b/data-otservbr-global/monster/quests/the_secret_library/brother_chill.lua
index 12400ddc549..7843064c156 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/brother_chill.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/brother_chill.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/brother_freeze.lua b/data-otservbr-global/monster/quests/the_secret_library/brother_freeze.lua
index c940834f45d..9268ae77e79 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/brother_freeze.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/brother_freeze.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/concentrated_death.lua b/data-otservbr-global/monster/quests/the_secret_library/concentrated_death.lua
index 35f46d2eaaf..d83987622d8 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/concentrated_death.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/concentrated_death.lua
@@ -67,7 +67,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/dazed_leaf_golem.lua b/data-otservbr-global/monster/quests/the_secret_library/dazed_leaf_golem.lua
index c42fe94b9a6..06961bae6cd 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/dazed_leaf_golem.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/dazed_leaf_golem.lua
@@ -78,7 +78,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/demon_blood.lua b/data-otservbr-global/monster/quests/the_secret_library/demon_blood.lua
index 88b762e2c71..166395f6ab7 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/demon_blood.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/demon_blood.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/demon_slave.lua b/data-otservbr-global/monster/quests/the_secret_library/demon_slave.lua
index dc40725c264..898838c9a53 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/demon_slave.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/demon_slave.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/furious_scorpion.lua b/data-otservbr-global/monster/quests/the_secret_library/furious_scorpion.lua
index 5afc7f32c6f..8d87526b7cd 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/furious_scorpion.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/furious_scorpion.lua
@@ -66,7 +66,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/ghulosh'_deathgaze.lua b/data-otservbr-global/monster/quests/the_secret_library/ghulosh'_deathgaze.lua
index 43cae1f6f6b..f5b80d9a2e9 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/ghulosh'_deathgaze.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/ghulosh'_deathgaze.lua
@@ -63,7 +63,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_DEATHDAMAGE, lenght = 7, spread = 1, minDamage = -1200, maxDamage = -1800, target = false }, -- -_death_beam(1200-1800)
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_DEATHDAMAGE, lenght = 7, spread = 0, minDamage = -1200, maxDamage = -1800, effect = CONST_ME_MORTAREA, target = false }, -- -_death_beam(1200-1800)
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/imp_intruder.lua b/data-otservbr-global/monster/quests/the_secret_library/imp_intruder.lua
index 15b824d749f..09a216cda1a 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/imp_intruder.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/imp_intruder.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/invading_demon.lua b/data-otservbr-global/monster/quests/the_secret_library/invading_demon.lua
index b14dea67f69..ad10e9b6f27 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/invading_demon.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/invading_demon.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/jailer.lua b/data-otservbr-global/monster/quests/the_secret_library/jailer.lua
index c3dc4a60450..bf066fd0135 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/jailer.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/jailer.lua
@@ -72,7 +72,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/librarian.lua b/data-otservbr-global/monster/quests/the_secret_library/librarian.lua
index fe87ae2ff34..83850e0be0b 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/librarian.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/librarian.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/lokathmor.lua b/data-otservbr-global/monster/quests/the_secret_library/lokathmor.lua
index 537b2584d82..be0e44216a9 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/lokathmor.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/lokathmor.lua
@@ -106,7 +106,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 150, attack = 250 },
- { name = "combat", interval = 2000, chance = 8, type = COMBAT_LIFEDRAIN, minDamage = -1100, maxDamage = -2800, range = 7, radius = 5, shootEffect = CONST_ANI_WHIRLWINDAXE, target = true },
+ { name = "combat", interval = 2000, chance = 8, type = COMBAT_LIFEDRAIN, minDamage = -1100, maxDamage = -2800, range = 7, radius = 5, shootEffect = CONST_ANI_WHIRLWINDAXE, effect = CONST_ME_DRAWBLOOD, target = true },
{ name = "combat", interval = 1000, chance = 8, type = COMBAT_DEATHDAMAGE, minDamage = -800, maxDamage = -1900, radius = 9, effect = CONST_ME_MORTAREA, target = false },
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 5000, chance = 18, minDamage = -1100, maxDamage = -2500, effect = CONST_ME_HITBYPOISON, target = false },
diff --git a/data-otservbr-global/monster/quests/the_secret_library/lokathmor_stuck.lua b/data-otservbr-global/monster/quests/the_secret_library/lokathmor_stuck.lua
index 0c75efd919b..9f2c99b931a 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/lokathmor_stuck.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/lokathmor_stuck.lua
@@ -59,7 +59,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 150, attack = 250 },
- { name = "combat", interval = 2000, chance = 8, type = COMBAT_LIFEDRAIN, minDamage = -2500, maxDamage = -2800, range = 7, radius = 5, shootEffect = CONST_ANI_WHIRLWINDAXE, target = true },
+ { name = "combat", interval = 2000, chance = 8, type = COMBAT_LIFEDRAIN, minDamage = -2500, maxDamage = -2800, range = 7, radius = 5, shootEffect = CONST_ANI_WHIRLWINDAXE, effect = CONST_ME_DRAWBLOOD, target = true },
{ name = "combat", interval = 1000, chance = 8, type = COMBAT_DEATHDAMAGE, minDamage = -1500, maxDamage = -1900, radius = 9, effect = CONST_ME_MORTAREA, target = false },
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 5000, chance = 18, minDamage = -2000, maxDamage = -2500, effect = CONST_ME_HITBYPOISON, target = false },
diff --git a/data-otservbr-global/monster/quests/the_secret_library/malicious_minion.lua b/data-otservbr-global/monster/quests/the_secret_library/malicious_minion.lua
index ad77095f69b..63c7867a856 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/malicious_minion.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/malicious_minion.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/mazzinor.lua b/data-otservbr-global/monster/quests/the_secret_library/mazzinor.lua
index a9be1bc3221..b5521c45429 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/mazzinor.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/mazzinor.lua
@@ -98,8 +98,8 @@ monster.attacks = {
{ name = "divine missile", interval = 2000, chance = 10, minDamage = -135, maxDamage = -700, target = true },
{ name = "berserk", interval = 2000, chance = 20, minDamage = -90, maxDamage = -500, range = 7, target = true },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -135, maxDamage = -280, range = 7, radius = 5, effect = CONST_ME_MAGIC_BLUE, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -210, maxDamage = -600, length = 8, spread = 3, effect = CONST_ME_ENERGYAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_HOLYDAMAGE, minDamage = -210, maxDamage = -700, length = 8, spread = 3, effect = CONST_ME_HOLYAREA, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -210, maxDamage = -600, length = 8, spread = 0, effect = CONST_ME_ENERGYAREA, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_HOLYDAMAGE, minDamage = -210, maxDamage = -700, length = 8, spread = 0, effect = CONST_ME_HOLYAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/mean_minion.lua b/data-otservbr-global/monster/quests/the_secret_library/mean_minion.lua
index 711ba72ec50..32146811c5a 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/mean_minion.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/mean_minion.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/ravenous_beyondling.lua b/data-otservbr-global/monster/quests/the_secret_library/ravenous_beyondling.lua
index 56491de9962..28f5f67d2b0 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/ravenous_beyondling.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/ravenous_beyondling.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/rift_breacher.lua b/data-otservbr-global/monster/quests/the_secret_library/rift_breacher.lua
index 24cf9b26ff5..c7e5c081dec 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/rift_breacher.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/rift_breacher.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/rift_minion.lua b/data-otservbr-global/monster/quests/the_secret_library/rift_minion.lua
index ae1dbfbb604..521aec4833d 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/rift_minion.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/rift_minion.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/rift_spawn.lua b/data-otservbr-global/monster/quests/the_secret_library/rift_spawn.lua
index 69256a4a719..361699ca0e4 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/rift_spawn.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/rift_spawn.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/spawn_of_havoc.lua b/data-otservbr-global/monster/quests/the_secret_library/spawn_of_havoc.lua
index f53a3c675a0..4a563a6a1b4 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/spawn_of_havoc.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/spawn_of_havoc.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_armor.lua b/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_armor.lua
index 0191f7d3dec..1905e8a29a9 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_armor.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_armor.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_healing.lua b/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_healing.lua
index 17491a7b4c3..ffe609dc45a 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_healing.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_healing.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_lifesteal.lua b/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_lifesteal.lua
index 3ff2ce5207a..ec3ccaefa97 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_lifesteal.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_lifesteal.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_spells.lua b/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_spells.lua
index 1e319b2a5b3..58fff59a202 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_spells.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_spells.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_summoning.lua b/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_summoning.lua
index c591e74ca97..87c05596b01 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_summoning.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/stolen_knowledge_of_summoning.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/the_blazing_rose.lua b/data-otservbr-global/monster/quests/the_secret_library/the_blazing_rose.lua
index 1eca0b0b507..3eb95e76a26 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/the_blazing_rose.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/the_blazing_rose.lua
@@ -69,7 +69,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/the_book_of_secrets.lua b/data-otservbr-global/monster/quests/the_secret_library/the_book_of_secrets.lua
index 8872dfba1ea..4058cb78662 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/the_book_of_secrets.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/the_book_of_secrets.lua
@@ -58,7 +58,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/the_devourer_of_secrets.lua b/data-otservbr-global/monster/quests/the_secret_library/the_devourer_of_secrets.lua
index c49ef79f6ca..e08e3629eec 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/the_devourer_of_secrets.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/the_devourer_of_secrets.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/the_diamond_blossom.lua b/data-otservbr-global/monster/quests/the_secret_library/the_diamond_blossom.lua
index be4d55a6d76..03fc38bffc8 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/the_diamond_blossom.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/the_diamond_blossom.lua
@@ -69,7 +69,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/the_lily_of_night.lua b/data-otservbr-global/monster/quests/the_secret_library/the_lily_of_night.lua
index 457aeaa6f93..9bf43393315 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/the_lily_of_night.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/the_lily_of_night.lua
@@ -69,7 +69,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/the_scion_of_havoc.lua b/data-otservbr-global/monster/quests/the_secret_library/the_scion_of_havoc.lua
index 23267a626d6..b76af5f82f9 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/the_scion_of_havoc.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/the_scion_of_havoc.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/the_spellstealer.lua b/data-otservbr-global/monster/quests/the_secret_library/the_spellstealer.lua
index 810ab9ebd72..8e304a3a2d3 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/the_spellstealer.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/the_spellstealer.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/war_servant.lua b/data-otservbr-global/monster/quests/the_secret_library/war_servant.lua
index 8bbf980fe62..cfbb9c5af65 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/war_servant.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/war_servant.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/quests/the_secret_library/yalahari_despoiler.lua b/data-otservbr-global/monster/quests/the_secret_library/yalahari_despoiler.lua
index 892e0d12ac1..a3e52e37ea4 100644
--- a/data-otservbr-global/monster/quests/the_secret_library/yalahari_despoiler.lua
+++ b/data-otservbr-global/monster/quests/the_secret_library/yalahari_despoiler.lua
@@ -64,7 +64,7 @@ monster.loot = {}
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200 },
{ name = "combat", interval = 1000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_POFF, target = false },
- { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 3, effect = CONST_ME_POFF, target = false },
+ { name = "combat", interval = 1000, chance = 12, type = COMBAT_ENERGYDAMAGE, minDamage = 0, maxDamage = -175, length = 3, spread = 0, effect = CONST_ME_POFF, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/raids/ferumbras.lua b/data-otservbr-global/monster/raids/ferumbras.lua
index 40df72b86a9..c3dfea647ea 100644
--- a/data-otservbr-global/monster/raids/ferumbras.lua
+++ b/data-otservbr-global/monster/raids/ferumbras.lua
@@ -129,11 +129,11 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -350 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_MANADRAIN, minDamage = -500, maxDamage = -700, range = 7, effect = CONST_ME_MAGIC_RED, target = false },
- { name = "combat", interval = 2000, chance = 25, type = COMBAT_LIFEDRAIN, minDamage = -300, maxDamage = -450, length = 8, spread = 3, effect = CONST_ME_HITBYPOISON, target = false },
+ { name = "combat", interval = 2000, chance = 25, type = COMBAT_LIFEDRAIN, minDamage = -300, maxDamage = -450, length = 8, spread = 0, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "combat", interval = 2000, chance = 21, type = COMBAT_LIFEDRAIN, minDamage = -450, maxDamage = -500, radius = 6, effect = CONST_ME_POFF, target = false },
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 2000, chance = 15, minDamage = -20, maxDamage = -40, range = 7, shootEffect = CONST_ANI_POISON, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -900, maxDamage = -1000, range = 4, radius = 3, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -900, maxDamage = -1000, range = 4, radius = 3, effect = CONST_ME_DRAWBLOOD, target = false },
-- energy damage
{ name = "condition", type = CONDITION_ENERGY, interval = 2000, chance = 18, minDamage = -300, maxDamage = -400, radius = 6, effect = CONST_ME_ENERGYHIT, target = false },
-- fire
diff --git a/data-otservbr-global/monster/raids/furyosa.lua b/data-otservbr-global/monster/raids/furyosa.lua
index 3d5ddc6df47..acbf9711298 100644
--- a/data-otservbr-global/monster/raids/furyosa.lua
+++ b/data-otservbr-global/monster/raids/furyosa.lua
@@ -99,9 +99,9 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -625 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_DEATHDAMAGE, minDamage = -260, maxDamage = -310, radius = 6, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -50, maxDamage = -210, length = 8, spread = 3, effect = CONST_ME_BLOCKHIT, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -200, maxDamage = -300, length = 8, spread = 3, effect = CONST_ME_EXPLOSIONAREA, target = false },
- { name = "combat", interval = 2000, chance = 5, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -800, length = 8, spread = 3, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_MANADRAIN, minDamage = -50, maxDamage = -210, length = 8, spread = 0, effect = CONST_ME_BLOCKHIT, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_FIREDAMAGE, minDamage = -200, maxDamage = -300, length = 8, spread = 0, effect = CONST_ME_EXPLOSIONAREA, target = false },
+ { name = "combat", interval = 2000, chance = 5, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -800, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 3000, chance = 18, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -150, radius = 5, effect = CONST_ME_GROUNDSHAKER, target = true },
{ name = "fury skill reducer", interval = 2000, chance = 5, target = false },
}
diff --git a/data-otservbr-global/monster/raids/ghazbaran.lua b/data-otservbr-global/monster/raids/ghazbaran.lua
index da656d181fc..5f57655679f 100644
--- a/data-otservbr-global/monster/raids/ghazbaran.lua
+++ b/data-otservbr-global/monster/raids/ghazbaran.lua
@@ -129,7 +129,7 @@ monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -2191 },
{ name = "combat", interval = 2000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -250, maxDamage = -500, range = 7, radius = 6, effect = CONST_ME_HITAREA, target = false },
{ name = "combat", interval = 3000, chance = 34, type = COMBAT_PHYSICALDAMAGE, minDamage = -120, maxDamage = -500, range = 7, radius = 1, shootEffect = CONST_ANI_WHIRLWINDSWORD, target = true },
- { name = "combat", interval = 4000, chance = 30, type = COMBAT_ENERGYDAMAGE, minDamage = -100, maxDamage = -800, length = 8, spread = 3, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 4000, chance = 30, type = COMBAT_ENERGYDAMAGE, minDamage = -100, maxDamage = -800, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 3000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -480, range = 14, radius = 5, effect = CONST_ME_POFF, target = false },
{ name = "combat", interval = 4000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -650, range = 7, radius = 13, effect = CONST_ME_BLOCKHIT, target = false },
{ name = "combat", interval = 4000, chance = 18, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -600, radius = 14, effect = CONST_ME_LOSEENERGY, target = false },
diff --git a/data-otservbr-global/monster/raids/mawhawk.lua b/data-otservbr-global/monster/raids/mawhawk.lua
index 9e879512cfa..f00407ca304 100644
--- a/data-otservbr-global/monster/raids/mawhawk.lua
+++ b/data-otservbr-global/monster/raids/mawhawk.lua
@@ -91,7 +91,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 90, attack = 90 },
- { name = "combat", interval = 1800, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -685, length = 7, spread = 3, effect = CONST_ME_STONES, target = false },
+ { name = "combat", interval = 1800, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -685, length = 7, spread = 0, effect = CONST_ME_STONES, target = false },
{ name = "combat", interval = 2000, chance = 9, type = COMBAT_EARTHDAMAGE, minDamage = -250, maxDamage = -590, radius = 6, effect = CONST_ME_BIGPLANTS, target = false },
}
diff --git a/data-otservbr-global/monster/raids/ocyakao.lua b/data-otservbr-global/monster/raids/ocyakao.lua
index b2dfb1a4b3c..2e036c0837b 100644
--- a/data-otservbr-global/monster/raids/ocyakao.lua
+++ b/data-otservbr-global/monster/raids/ocyakao.lua
@@ -87,7 +87,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 25, attack = 50 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 70, maxDamage = -185, range = 7, radius = 3, shootEffect = CONST_ANI_SMALLSTONE, target = true },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = 70, maxDamage = -185, range = 7, radius = 3, shootEffect = CONST_ANI_SMALLSTONE, effect = CONST_ME_HITAREA, target = true },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/raids/the_pale_count.lua b/data-otservbr-global/monster/raids/the_pale_count.lua
index c3cc0e3dfe0..31a40bcfff2 100644
--- a/data-otservbr-global/monster/raids/the_pale_count.lua
+++ b/data-otservbr-global/monster/raids/the_pale_count.lua
@@ -113,7 +113,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 80, attack = 120 },
- { name = "speed", interval = 1000, chance = 17, speedChange = -600, range = 7, radius = 4, target = true, duration = 1500 },
+ { name = "speed", interval = 1000, chance = 17, speedChange = -600, range = 7, radius = 4, effect = CONST_ME_MAGIC_RED, target = true, duration = 1500 },
{ name = "combat", interval = 2000, chance = 21, type = COMBAT_ICEDAMAGE, minDamage = -130, maxDamage = -350, range = 6, radius = 2, shootEffect = CONST_ANI_SMALLICE, effect = CONST_ME_GIANTICE, target = true },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_MANADRAIN, minDamage = -60, maxDamage = -120, range = 7, shootEffect = CONST_ANI_EARTH, effect = CONST_ME_CARNIPHILA, target = false },
}
diff --git a/data-otservbr-global/monster/raids/yakchal.lua b/data-otservbr-global/monster/raids/yakchal.lua
index 840d370a8f8..b2314a2ec53 100644
--- a/data-otservbr-global/monster/raids/yakchal.lua
+++ b/data-otservbr-global/monster/raids/yakchal.lua
@@ -104,7 +104,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -389 },
{ name = "combat", interval = 2000, chance = 18, type = COMBAT_ICEDAMAGE, minDamage = 0, maxDamage = -430, radius = 4, shootEffect = CONST_ANI_SMALLICE, effect = CONST_ME_ICEAREA, target = true },
- { name = "combat", interval = 3000, chance = 34, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -300, range = 7, radius = 3, shootEffect = CONST_ANI_SNOWBALL, target = true },
+ { name = "combat", interval = 3000, chance = 34, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = -300, range = 7, radius = 3, shootEffect = CONST_ANI_SNOWBALL, effect = CONST_ME_HITAREA, target = true },
{ name = "speed", interval = 2000, chance = 10, speedChange = -300, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 20000 },
}
diff --git a/data-otservbr-global/monster/reptiles/carnivostrich.lua b/data-otservbr-global/monster/reptiles/carnivostrich.lua
index e5fa7948d13..e0e0e362573 100644
--- a/data-otservbr-global/monster/reptiles/carnivostrich.lua
+++ b/data-otservbr-global/monster/reptiles/carnivostrich.lua
@@ -91,12 +91,12 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -500, condition = { type = CONDITION_POISON, totalDamage = 480, interval = 4000 } },
- { name = "combat", interval = 2000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -386, maxDamage = -480, range = 7, shootEffect = CONST_ANI_LARGEROCK, target = true },
- { name = "combat", interval = 2000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -135, range = 7, shootEffect = CONST_ANI_SMALLSTONE, target = true },
- { name = "combat", interval = 2000, chance = 30, type = COMBAT_DEATHDAMAGE, minDamage = -350, maxDamage = -495, length = 7, spread = 0, effect = CONST_ME_BLACKSMOKE, target = false },
- { name = "combat", interval = 2000, chance = 30, type = COMBAT_ENERGYDAMAGE, minDamage = -280, maxDamage = -320, length = 7, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
- { name = "energy chain", interval = 2000, chance = 20, minDamage = -302, maxDamage = -309, range = 3, target = true },
- { name = "thunderstorm ring", interval = 2000, chance = 20, minDamage = -325, maxDamage = -415 },
+ { name = "combat", interval = 2500, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -386, maxDamage = -480, range = 7, shootEffect = CONST_ANI_LARGEROCK, target = true },
+ { name = "combat", interval = 3000, chance = 40, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -135, range = 7, shootEffect = CONST_ANI_SMALLSTONE, target = true },
+ { name = "combat", interval = 3500, chance = 30, type = COMBAT_DEATHDAMAGE, minDamage = -350, maxDamage = -495, length = 7, spread = 0, effect = CONST_ME_BLACKSMOKE, target = false },
+ { name = "combat", interval = 4000, chance = 30, type = COMBAT_ENERGYDAMAGE, minDamage = -280, maxDamage = -320, length = 7, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "energy chain", interval = 4500, chance = 20, minDamage = -302, maxDamage = -309, range = 3, target = true },
+ { name = "thunderstorm ring", interval = 5000, chance = 20, minDamage = -325, maxDamage = -415 },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/reptiles/two-headed_turtle.lua b/data-otservbr-global/monster/reptiles/two-headed_turtle.lua
index 6ae829f08da..89d8b24c975 100644
--- a/data-otservbr-global/monster/reptiles/two-headed_turtle.lua
+++ b/data-otservbr-global/monster/reptiles/two-headed_turtle.lua
@@ -91,7 +91,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -300 },
{ name = "combat", interval = 2500, chance = 35, type = COMBAT_ENERGYDAMAGE, minDamage = -100, maxDamage = -300, radius = 4, target = false, effect = CONST_ME_ENERGYHIT },
- { name = "combat", interval = 2000, chance = 35, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -300, radius = 3, target = true, effect = CONST_ME_GHOSTLYBITE },
+ { name = "combat", interval = 2000, chance = 35, type = COMBAT_LIFEDRAIN, minDamage = -100, maxDamage = -300, radius = 3, target = true, effect = CONST_ME_GHOSTLY_BITE },
{ name = "combat", interval = 3000, chance = 45, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -300, range = 1, radius = 1, target = true, effect = CONST_ME_EXPLOSIONAREA },
}
diff --git a/data-otservbr-global/monster/reptiles/young_goanna.lua b/data-otservbr-global/monster/reptiles/young_goanna.lua
index 891251d226b..5f68752fb46 100644
--- a/data-otservbr-global/monster/reptiles/young_goanna.lua
+++ b/data-otservbr-global/monster/reptiles/young_goanna.lua
@@ -94,8 +94,10 @@ monster.loot = {
}
monster.attacks = {
- { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -230, condition = { type = CONDITION_POISON, totalDamage = 15, interval = 4000 } },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -490, range = 3, radius = 1, shootEffect = CONST_ANI_EARTH, effect = CONST_ME_EXPLOSIONHIT, target = true },
+ { name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -500, condition = { type = CONDITION_POISON, totalDamage = 200, interval = 4000 } },
+ { name = "combat", interval = 2500, chance = 30, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -490, range = 3, shootEffect = CONST_ANI_EARTH, effect = CONST_ME_HITBYPOISON, target = true },
+ { name = "combat", interval = 3000, chance = 30, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -500, radius = 1, effect = CONST_ME_GROUNDSHAKER, target = false },
+ { name = "combat", interval = 3500, chance = 30, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -490, lenght = 8, spread = 0, effect = CONST_ME_GREEN_RINGS, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/undeads/bonebeast.lua b/data-otservbr-global/monster/undeads/bonebeast.lua
index 1ac169d5f83..f97d29cdb03 100644
--- a/data-otservbr-global/monster/undeads/bonebeast.lua
+++ b/data-otservbr-global/monster/undeads/bonebeast.lua
@@ -96,7 +96,7 @@ monster.attacks = {
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -50, maxDamage = -60, radius = 3, effect = CONST_ME_POISONAREA, target = false },
-- poison
- { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -70, maxDamage = -80, length = 6, spread = 3, effect = CONST_ME_POISONAREA, target = false },
+ { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -70, maxDamage = -80, length = 6, spread = 0, effect = CONST_ME_POISONAREA, target = false },
{ name = "speed", interval = 2000, chance = 15, speedChange = -600, target = true, duration = 13000 },
}
diff --git a/data-otservbr-global/monster/undeads/cursed_prospector.lua b/data-otservbr-global/monster/undeads/cursed_prospector.lua
index b8e184b222c..d9cca0090f5 100644
--- a/data-otservbr-global/monster/undeads/cursed_prospector.lua
+++ b/data-otservbr-global/monster/undeads/cursed_prospector.lua
@@ -89,8 +89,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -200 },
- { name = "combat", interval = 1700, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -550, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, target = true },
- { name = "combat", interval = 1700, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -150, maxDamage = -550, length = 4, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 1700, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -550, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, effect = CONST_ME_HITBYPOISON, target = true },
+ { name = "combat", interval = 1700, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -150, maxDamage = -550, length = 4, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 1700, chance = 35, type = COMBAT_DEATHDAMAGE, minDamage = -150, maxDamage = -550, radius = 3, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 1700, chance = 35, type = COMBAT_HOLYDAMAGE, minDamage = -250, maxDamage = -550, radius = 3, effect = CONST_ME_HOLYAREA, target = false },
{ name = "combat", interval = 2000, chance = 13, type = COMBAT_ENERGYDAMAGE, minDamage = -400, maxDamage = -550, range = 4, radius = 4, effect = CONST_ME_ENERGYAREA, target = true },
diff --git a/data-otservbr-global/monster/undeads/evil_prospector.lua b/data-otservbr-global/monster/undeads/evil_prospector.lua
index 6691a119f9f..5b12a767672 100644
--- a/data-otservbr-global/monster/undeads/evil_prospector.lua
+++ b/data-otservbr-global/monster/undeads/evil_prospector.lua
@@ -85,8 +85,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -500 },
- { name = "combat", interval = 1700, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -250, maxDamage = -550, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, target = true },
- { name = "combat", interval = 1700, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -250, maxDamage = -550, length = 4, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 1700, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -250, maxDamage = -550, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, effect = CONST_ME_HITBYPOISON, target = true },
+ { name = "combat", interval = 1700, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -250, maxDamage = -550, length = 4, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 1700, chance = 35, type = COMBAT_DEATHDAMAGE, minDamage = -250, maxDamage = -550, radius = 3, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 1700, chance = 35, type = COMBAT_HOLYDAMAGE, minDamage = -250, maxDamage = -400, radius = 3, effect = CONST_ME_HOLYAREA, target = false },
{ name = "combat", interval = 1700, chance = 13, type = COMBAT_ENERGYDAMAGE, minDamage = -400, maxDamage = -450, range = 4, radius = 4, effect = CONST_ME_ENERGYAREA, target = true },
diff --git a/data-otservbr-global/monster/undeads/falcon_knight.lua b/data-otservbr-global/monster/undeads/falcon_knight.lua
index 1f2fb03b157..54a23130758 100644
--- a/data-otservbr-global/monster/undeads/falcon_knight.lua
+++ b/data-otservbr-global/monster/undeads/falcon_knight.lua
@@ -105,7 +105,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -400 },
{ name = "combat", interval = 2000, chance = 18, type = COMBAT_EARTHDAMAGE, minDamage = -400, maxDamage = -500, radius = 2, effect = CONST_ME_GROUNDSHAKER, target = false },
- { name = "combat", interval = 2000, chance = 14, type = COMBAT_HOLYDAMAGE, minDamage = -290, maxDamage = -360, length = 5, spread = 3, effect = CONST_ME_BLOCKHIT, target = false },
+ { name = "combat", interval = 2000, chance = 14, type = COMBAT_HOLYDAMAGE, minDamage = -290, maxDamage = -360, length = 5, spread = 0, effect = CONST_ME_BLOCKHIT, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/undeads/falcon_paladin.lua b/data-otservbr-global/monster/undeads/falcon_paladin.lua
index d9002a289e5..799143fe943 100644
--- a/data-otservbr-global/monster/undeads/falcon_paladin.lua
+++ b/data-otservbr-global/monster/undeads/falcon_paladin.lua
@@ -98,7 +98,7 @@ monster.attacks = {
{ name = "combat", interval = 2000, chance = 50, type = COMBAT_PHYSICALDAMAGE, minDamage = -400, maxDamage = -550, range = 5, shootEffect = CONST_ANI_ROYALSPEAR, target = true },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -200, maxDamage = 500, range = 5, shootEffect = CONST_ANI_BOLT, target = true },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_ENERGYDAMAGE, minDamage = -350, maxDamage = -450, range = 7, radius = 2, shootEffect = CONST_ANI_POWERBOLT, effect = CONST_ME_ENERGYHIT, target = true },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -250, maxDamage = -350, length = 5, spread = 3, effect = CONST_ME_PURPLEENERGY, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_ENERGYDAMAGE, minDamage = -250, maxDamage = -350, length = 5, spread = 0, effect = CONST_ME_PURPLEENERGY, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/undeads/flimsy_lost_soul.lua b/data-otservbr-global/monster/undeads/flimsy_lost_soul.lua
index 5336042dee1..7ff4d5bc65f 100644
--- a/data-otservbr-global/monster/undeads/flimsy_lost_soul.lua
+++ b/data-otservbr-global/monster/undeads/flimsy_lost_soul.lua
@@ -90,8 +90,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -500 },
- { name = "combat", interval = 1700, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -150, maxDamage = -550, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, target = true },
- { name = "combat", interval = 1700, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -150, maxDamage = -550, length = 4, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 1700, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -150, maxDamage = -550, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, effect = CONST_ME_HITBYPOISON, target = true },
+ { name = "combat", interval = 1700, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -150, maxDamage = -550, length = 4, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 1700, chance = 35, type = COMBAT_DEATHDAMAGE, minDamage = -150, maxDamage = -550, radius = 3, effect = CONST_ME_MORTAREA, target = false },
}
diff --git a/data-otservbr-global/monster/undeads/freakish_lost_soul.lua b/data-otservbr-global/monster/undeads/freakish_lost_soul.lua
index 6f00c3eb7fe..ec039b48d86 100644
--- a/data-otservbr-global/monster/undeads/freakish_lost_soul.lua
+++ b/data-otservbr-global/monster/undeads/freakish_lost_soul.lua
@@ -87,8 +87,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -500 },
- { name = "combat", interval = 1700, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -550, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, target = true },
- { name = "combat", interval = 1700, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -150, maxDamage = -550, length = 4, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 1700, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -550, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, effect = CONST_ME_HITBYPOISON, target = true },
+ { name = "combat", interval = 1700, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -150, maxDamage = -550, length = 4, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 1700, chance = 35, type = COMBAT_DEATHDAMAGE, minDamage = -150, maxDamage = -550, radius = 4, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 1700, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -150, maxDamage = -550, radius = 4, effect = CONST_ME_ENERGYAREA, target = false },
}
diff --git a/data-otservbr-global/monster/undeads/grim_reaper.lua b/data-otservbr-global/monster/undeads/grim_reaper.lua
index 107a0ece576..b43c7cc64fb 100644
--- a/data-otservbr-global/monster/undeads/grim_reaper.lua
+++ b/data-otservbr-global/monster/undeads/grim_reaper.lua
@@ -102,9 +102,9 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -320 },
{ name = "combat", interval = 2000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -165, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -350, maxDamage = -720, length = 8, spread = 3, target = false },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -300, length = 7, spread = 3, effect = CONST_ME_EXPLOSIONAREA, target = false },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -225, maxDamage = -275, radius = 4, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -350, maxDamage = -720, length = 8, spread = 0, effect = CONST_ME_MORTAREA, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = 0, maxDamage = -300, length = 7, spread = 0, effect = CONST_ME_EXPLOSIONAREA, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -225, maxDamage = -275, radius = 4, effect = CONST_ME_MORTAREA, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/undeads/lich.lua b/data-otservbr-global/monster/undeads/lich.lua
index 811ee43d144..f6caeb4ae96 100644
--- a/data-otservbr-global/monster/undeads/lich.lua
+++ b/data-otservbr-global/monster/undeads/lich.lua
@@ -114,8 +114,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -75 },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -140, maxDamage = -190, length = 7, spread = 3, effect = CONST_ME_MAGIC_RED, target = false }, -- poison
- { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -300, maxDamage = -400, length = 7, spread = 3, effect = CONST_ME_HITBYPOISON, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -140, maxDamage = -190, length = 7, spread = 0, effect = CONST_ME_MAGIC_RED, target = false }, -- poison
+ { name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -300, maxDamage = -400, length = 7, spread = 0, effect = CONST_ME_HITBYPOISON, target = false },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -200, maxDamage = -245, range = 1, effect = CONST_ME_MAGIC_RED, target = true },
{ name = "speed", interval = 2000, chance = 15, speedChange = -300, range = 7, effect = CONST_ME_MAGIC_RED, target = false, duration = 30000 },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_LIFEDRAIN, minDamage = -130, maxDamage = -195, radius = 3, effect = CONST_ME_MAGIC_RED, target = false },
diff --git a/data-otservbr-global/monster/undeads/lost_soul.lua b/data-otservbr-global/monster/undeads/lost_soul.lua
index d00e9eb9d18..99002595639 100644
--- a/data-otservbr-global/monster/undeads/lost_soul.lua
+++ b/data-otservbr-global/monster/undeads/lost_soul.lua
@@ -103,7 +103,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -420 },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -40, maxDamage = -210, length = 3, spread = 0, effect = CONST_ME_MAGIC_RED, target = false },
- { name = "speed", interval = 2000, chance = 20, speedChange = -800, radius = 6, effect = CONST_ME_SMALLCLOUDS, target = false, duration = 4000 },
+ { name = "speed", interval = 2000, chance = 20, speedChange = -100, radius = 6, effect = CONST_ME_SMALLCLOUDS, target = false, duration = 4000 },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/undeads/mean_lost_soul.lua b/data-otservbr-global/monster/undeads/mean_lost_soul.lua
index aa4ded25b2a..8c25b2c4f4f 100644
--- a/data-otservbr-global/monster/undeads/mean_lost_soul.lua
+++ b/data-otservbr-global/monster/undeads/mean_lost_soul.lua
@@ -89,8 +89,8 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -500 },
- { name = "combat", interval = 1700, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -550, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, target = true },
- { name = "combat", interval = 1700, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -550, length = 4, spread = 3, effect = CONST_ME_ENERGYHIT, target = false },
+ { name = "combat", interval = 1700, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -300, maxDamage = -550, radius = 3, shootEffect = CONST_ANI_ENVENOMEDARROW, effect = CONST_ME_HITBYPOISON, target = true },
+ { name = "combat", interval = 1700, chance = 25, type = COMBAT_ENERGYDAMAGE, minDamage = -300, maxDamage = -550, length = 4, spread = 0, effect = CONST_ME_ENERGYHIT, target = false },
{ name = "combat", interval = 1700, chance = 35, type = COMBAT_DEATHDAMAGE, minDamage = -300, maxDamage = -550, radius = 3, effect = CONST_ME_MORTAREA, target = false },
}
diff --git a/data-otservbr-global/monster/undeads/paladin's_apparition.lua b/data-otservbr-global/monster/undeads/paladin's_apparition.lua
index 440eea9a089..066266e70e3 100644
--- a/data-otservbr-global/monster/undeads/paladin's_apparition.lua
+++ b/data-otservbr-global/monster/undeads/paladin's_apparition.lua
@@ -100,7 +100,7 @@ monster.attacks = {
{ name = "ice chain", interval = 5000, chance = 20, minDamage = -1050, maxDamage = -1300, range = 7 },
{ name = "combat", interval = 9500, chance = 52, type = COMBAT_HOLYDAMAGE, minDamage = -1050, maxDamage = -1300, range = 7, shootEffect = CONST_ANI_HOLY, effect = CONST_ME_HOLYDAMAGE, target = true },
{ name = "combat", interval = 3000, chance = 22, type = COMBAT_HOLYDAMAGE, minDamage = -1200, maxDamage = -1400, radius = 4, effect = CONST_ME_HOLYAREA, target = false },
- { name = "combat", interval = 4000, chance = 23, type = COMBAT_PHYSICALDAMAGE, minDamage = -900, maxDamage = -1350, radius = 4, shootEffect = CONST_ANI_EXPLOSION, range = 7, target = true },
+ { name = "combat", interval = 4000, chance = 23, type = COMBAT_PHYSICALDAMAGE, minDamage = -900, maxDamage = -1350, radius = 4, shootEffect = CONST_ANI_EXPLOSION, range = 7, effect = CONST_ME_EXPLOSIONHIT, target = true },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/undeads/rot_elemental.lua b/data-otservbr-global/monster/undeads/rot_elemental.lua
index ba79449343f..2c414687093 100644
--- a/data-otservbr-global/monster/undeads/rot_elemental.lua
+++ b/data-otservbr-global/monster/undeads/rot_elemental.lua
@@ -96,7 +96,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, skill = 58, attack = 50, condition = { type = CONDITION_POISON, totalDamage = 280, interval = 4000 } },
{ name = "combat", interval = 2000, chance = 13, type = COMBAT_EARTHDAMAGE, minDamage = -150, maxDamage = -250, range = 7, radius = 3, shootEffect = CONST_ANI_GLOOTHSPEAR, effect = CONST_ME_POISONAREA, target = true },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -150, maxDamage = -230, length = 6, spread = 3, effect = CONST_ME_POISONAREA, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -150, maxDamage = -230, length = 6, spread = 0, effect = CONST_ME_POISONAREA, target = false },
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -200, maxDamage = -300, range = 7, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = true },
{ name = "rot elemental paralyze", interval = 2000, chance = 11, target = false },
diff --git a/data-otservbr-global/monster/undeads/undead_dragon.lua b/data-otservbr-global/monster/undeads/undead_dragon.lua
index 5e604be6c5a..0dc1652d85f 100644
--- a/data-otservbr-global/monster/undeads/undead_dragon.lua
+++ b/data-otservbr-global/monster/undeads/undead_dragon.lua
@@ -109,7 +109,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -480 },
- { name = "combat", interval = 2000, chance = 5, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -400, range = 7, radius = 4, target = true },
+ { name = "combat", interval = 2000, chance = 5, type = COMBAT_PHYSICALDAMAGE, minDamage = -300, maxDamage = -400, range = 7, radius = 4, effect = CONST_ME_HITAREA, target = true },
{ name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -125, maxDamage = -600, range = 7, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_SMALLCLOUDS, target = false },
{ name = "combat", interval = 2000, chance = 5, type = COMBAT_EARTHDAMAGE, minDamage = -100, maxDamage = -390, range = 7, radius = 4, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = true },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = 0, maxDamage = -180, range = 7, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = true },
diff --git a/data-otservbr-global/monster/undeads/vicious_manbat.lua b/data-otservbr-global/monster/undeads/vicious_manbat.lua
index 0c50b15fe44..8de69a1bc26 100644
--- a/data-otservbr-global/monster/undeads/vicious_manbat.lua
+++ b/data-otservbr-global/monster/undeads/vicious_manbat.lua
@@ -80,10 +80,10 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -215 },
- { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -250, radius = 3, target = false },
+ { name = "combat", interval = 2000, chance = 15, type = COMBAT_PHYSICALDAMAGE, minDamage = -100, maxDamage = -250, radius = 3, effect = CONST_ME_HITAREA, target = false },
{ name = "speed", interval = 2000, chance = 15, radius = 1, effect = CONST_ME_BATS, target = true },
-- bleed
- { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 20, minDamage = -400, maxDamage = -600, radius = 2, target = false },
+ { name = "condition", type = CONDITION_BLEEDING, interval = 2000, chance = 20, minDamage = -400, maxDamage = -600, radius = 2, effect = CONST_ME_DRAWBLOOD, target = false },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/vermins/cave_devourer.lua b/data-otservbr-global/monster/vermins/cave_devourer.lua
index 15d639d4d9d..1283ac20b81 100644
--- a/data-otservbr-global/monster/vermins/cave_devourer.lua
+++ b/data-otservbr-global/monster/vermins/cave_devourer.lua
@@ -93,10 +93,10 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -400 },
- { name = "stalagmite rune", interval = 2000, chance = 15, minDamage = -190, maxDamage = -300, range = 7, length = 6, spread = 3, shootEffect = CONST_ANI_POISON, target = false },
+ { name = "stalagmite rune", interval = 2000, chance = 15, minDamage = -190, maxDamage = -300, range = 7, shootEffect = CONST_ANI_POISON, target = true },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = -70, maxDamage = -160, range = 3, length = 6, spread = 3, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -90, maxDamage = -160, range = 3, length = 6, spread = 3, effect = CONST_ME_HITBYFIRE, target = false },
- { name = "stone shower rune", interval = 2000, chance = 10, minDamage = -230, maxDamage = -450, range = 7, target = false },
+ { name = "stone shower rune", interval = 2000, chance = 10, minDamage = -230, maxDamage = -450, range = 7, radius = 3, effect = CONST_ME_STONES, target = true },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/vermins/crystal_spider.lua b/data-otservbr-global/monster/vermins/crystal_spider.lua
index ecb4b9ee62c..b6dd122b188 100644
--- a/data-otservbr-global/monster/vermins/crystal_spider.lua
+++ b/data-otservbr-global/monster/vermins/crystal_spider.lua
@@ -100,7 +100,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -250, condition = { type = CONDITION_POISON, totalDamage = 160, interval = 4000 } },
- { name = "speed", interval = 2000, chance = 15, speedChange = -800, range = 7, radius = 6, effect = CONST_ME_POFF, target = false, duration = 15000 },
+ { name = "speed", interval = 2000, chance = 15, speedChange = -100, range = 7, radius = 6, effect = CONST_ME_POFF, target = false, duration = 15000 },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_ICEDAMAGE, minDamage = -50, maxDamage = -100, range = 7, shootEffect = CONST_ANI_ICE, effect = CONST_ME_ICEAREA, target = true },
{ name = "speed", interval = 2000, chance = 20, speedChange = -600, range = 7, shootEffect = CONST_ANI_SNOWBALL, target = true, duration = 10000 },
}
diff --git a/data-otservbr-global/monster/vermins/tunnel_tyrant.lua b/data-otservbr-global/monster/vermins/tunnel_tyrant.lua
index 2299354f240..f8e3b7bfb03 100644
--- a/data-otservbr-global/monster/vermins/tunnel_tyrant.lua
+++ b/data-otservbr-global/monster/vermins/tunnel_tyrant.lua
@@ -92,10 +92,10 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -400 },
- { name = "stalagmite rune", interval = 2000, chance = 15, minDamage = -190, maxDamage = -300, range = 7, length = 6, spread = 3, shootEffect = CONST_ANI_POISON, target = false },
+ { name = "stalagmite rune", interval = 2000, chance = 15, minDamage = -190, maxDamage = -300, range = 7, shootEffect = CONST_ANI_POISON, target = true },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = -70, maxDamage = -160, range = 3, length = 6, spread = 3, effect = CONST_ME_MORTAREA, target = false },
{ name = "combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -90, maxDamage = -160, range = 3, length = 6, spread = 3, effect = CONST_ME_HITBYFIRE, target = false },
- { name = "stone shower rune", interval = 2000, chance = 10, minDamage = -230, maxDamage = -450, range = 7, target = false },
+ { name = "stone shower rune", interval = 2000, chance = 10, minDamage = -230, maxDamage = -450, range = 7, radius = 3, effect = CONST_ME_STONES, target = true },
}
monster.defenses = {
diff --git a/data-otservbr-global/monster/vermins/wiggler.lua b/data-otservbr-global/monster/vermins/wiggler.lua
index 76c994cdff5..bfce930b104 100644
--- a/data-otservbr-global/monster/vermins/wiggler.lua
+++ b/data-otservbr-global/monster/vermins/wiggler.lua
@@ -98,7 +98,7 @@ monster.loot = {
monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -200, condition = { type = CONDITION_POISON, totalDamage = 500, interval = 4000 } },
- { name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -180, maxDamage = -270, length = 4, spread = 3, target = false },
+ { name = "combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -180, maxDamage = -270, length = 4, spread = 3, effect = CONST_ME_HITBYPOISON, target = false },
-- poison
{ name = "condition", type = CONDITION_POISON, interval = 2000, chance = 10, minDamage = -160, maxDamage = -200, range = 7, shootEffect = CONST_ANI_POISONARROW, effect = CONST_ME_SMALLPLANTS, target = false },
{ name = "speed", interval = 2000, chance = 15, speedChange = -700, length = 3, spread = 2, effect = CONST_ME_HITAREA, target = false, duration = 30000 },
diff --git a/data-otservbr-global/npc/gnomadness.lua b/data-otservbr-global/npc/gnomadness.lua
index f3dc522c51b..cedc37c2a2a 100644
--- a/data-otservbr-global/npc/gnomadness.lua
+++ b/data-otservbr-global/npc/gnomadness.lua
@@ -78,11 +78,18 @@ local function creatureSayCallback(npc, creature, type, message)
local desiredLevel = getMoneyCount(message)
if desiredLevel <= 0 then
npcHandler:say("I'm sorry, I don't understand. What hazard level would you like to set?", npc, creature)
- npcHandler:setTopic(playerId, 0)
+ npcHandler:setTopic(playerId, 2)
return true
end
if hazard:setPlayerCurrentLevel(player, desiredLevel) then
npcHandler:say("Your hazard level has been set to " .. desiredLevel .. ". Good luck!", npc, creature)
+ if desiredLevel >= hazard.maxLevel and not player:kv():scoped("primal-ordeal"):get("received-prize") then
+ player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Congratulations you received the Noxious Ripptor mount.")
+ player:addMount(202)
+ npcHandler:say("You've achived the maximum hazard level. As a reward, you've received the Noxious Ripptor mount and a primal bag.", npc, creature)
+ player:addItem(PrimalBagId, 1)
+ player:kv():scoped("primal-ordeal"):set("received-prize", true)
+ end
else
npcHandler:say("You can't set your hazard level higher than your maximum unlocked level.", npc, creature)
end
diff --git a/data-otservbr-global/npc/hireling.lua b/data-otservbr-global/npc/hireling.lua
index 11757bff0a5..ca72e1c5bcf 100644
--- a/data-otservbr-global/npc/hireling.lua
+++ b/data-otservbr-global/npc/hireling.lua
@@ -656,7 +656,7 @@ function createHirelingType(HirelingName)
end
elseif npcHandler:getTopic(playerId) == TOPIC.BANK then
enableBankSystem[playerId] = true
- elseif npcHandler:getTopic(playerId) == TOPIC.FOOD then
+ elseif npcHandler:getTopic(playerId) == TOPIC.FOOD or npcHandler:getTopic(playerId) == TOPIC_FOOD.SKILL_CHOOSE then
handleFoodActions(npc, creature, message)
elseif npcHandler:getTopic(playerId) == TOPIC.GOODS then
-- Ensures players cannot access other shop categories
diff --git a/data-otservbr-global/npc/oberon's_bile.lua b/data-otservbr-global/npc/oberon's_bile.lua
index 6b3cf53ff97..c8750410753 100644
--- a/data-otservbr-global/npc/oberon's_bile.lua
+++ b/data-otservbr-global/npc/oberon's_bile.lua
@@ -11,41 +11,12 @@ npcConfig.walkInterval = 0
npcConfig.walkRadius = 2
npcConfig.outfit = {
- lookTypeEx = 23991,
+ lookTypeEx = 10980,
}
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
-
-npcType.onCloseChannel = function(npc, creature)
- npcHandler:onCloseChannel(npc, creature)
-end
-
-npcHandler:addModule(FocusModule:new(), npcConfig.name, true, true, true)
-
-- npcType registering the npcConfig table
npcType:register(npcConfig)
diff --git a/data-otservbr-global/npc/oberon's_hate.lua b/data-otservbr-global/npc/oberon's_hate.lua
index e9d8858e00f..16ab2f35897 100644
--- a/data-otservbr-global/npc/oberon's_hate.lua
+++ b/data-otservbr-global/npc/oberon's_hate.lua
@@ -11,41 +11,12 @@ npcConfig.walkInterval = 0
npcConfig.walkRadius = 2
npcConfig.outfit = {
- lookTypeEx = 23991,
+ lookTypeEx = 10980,
}
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
-
-npcType.onCloseChannel = function(npc, creature)
- npcHandler:onCloseChannel(npc, creature)
-end
-
-npcHandler:addModule(FocusModule:new(), npcConfig.name, true, true, true)
-
-- npcType registering the npcConfig table
npcType:register(npcConfig)
diff --git a/data-otservbr-global/npc/oberon's_ire.lua b/data-otservbr-global/npc/oberon's_ire.lua
index 4b0e1346684..8789977559d 100644
--- a/data-otservbr-global/npc/oberon's_ire.lua
+++ b/data-otservbr-global/npc/oberon's_ire.lua
@@ -11,41 +11,11 @@ npcConfig.walkInterval = 0
npcConfig.walkRadius = 2
npcConfig.outfit = {
- lookTypeEx = 23991,
+ lookTypeEx = 11211,
}
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
-
-npcType.onCloseChannel = function(npc, creature)
- npcHandler:onCloseChannel(npc, creature)
-end
-
-npcHandler:addModule(FocusModule:new(), npcConfig.name, true, true, true)
-
--- npcType registering the npcConfig table
npcType:register(npcConfig)
diff --git a/data-otservbr-global/npc/oberon's_spite.lua b/data-otservbr-global/npc/oberon's_spite.lua
index 04198674f19..36e28d9b738 100644
--- a/data-otservbr-global/npc/oberon's_spite.lua
+++ b/data-otservbr-global/npc/oberon's_spite.lua
@@ -11,41 +11,12 @@ npcConfig.walkInterval = 0
npcConfig.walkRadius = 2
npcConfig.outfit = {
- lookTypeEx = 23991,
+ lookTypeEx = 11212,
}
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
-
-npcType.onCloseChannel = function(npc, creature)
- npcHandler:onCloseChannel(npc, creature)
-end
-
-npcHandler:addModule(FocusModule:new(), npcConfig.name, true, true, true)
-
-- npcType registering the npcConfig table
npcType:register(npcConfig)
diff --git a/data-otservbr-global/npc/the_lootmonger.lua b/data-otservbr-global/npc/the_lootmonger.lua
index 7374b7645c2..cee60e6850f 100644
--- a/data-otservbr-global/npc/the_lootmonger.lua
+++ b/data-otservbr-global/npc/the_lootmonger.lua
@@ -52,1329 +52,26 @@ end
npcHandler:addModule(FocusModule:new(), npcConfig.name, true, true, true)
-npcConfig.shop = {
- { itemName = "abomination's eye", clientId = 36792, sell = 650000 },
- { itemName = "abomination's tail", clientId = 36791, sell = 700000 },
- { itemName = "abomination's tongue", clientId = 36793, sell = 950000 },
- { itemName = "abyss hammer", clientId = 7414, sell = 20000 },
- { itemName = "acorn", clientId = 10296, sell = 10 },
- { itemName = "afflicted strider head", clientId = 36789, sell = 900 },
- { itemName = "afflicted strider worms", clientId = 36790, sell = 500 },
- { itemName = "albino plate", clientId = 19358, sell = 1500 },
- { itemName = "alloy legs", clientId = 21168, sell = 11000 },
- { itemName = "alptramun's toothbrush", clientId = 29943, sell = 270000 },
- { itemName = "amber staff", clientId = 7426, sell = 8000 },
- { itemName = "amber with a bug", clientId = 32624, sell = 41000 },
- { itemName = "amber with a dragonfly", clientId = 32625, sell = 56000 },
- { itemName = "amber", clientId = 32626, sell = 20000 },
- { itemName = "amulet of loss", clientId = 3057, sell = 45000 },
- { itemName = "ancient amulet", clientId = 3025, sell = 200 },
- { itemName = "ancient belt buckle", clientId = 24384, sell = 260 },
- { itemName = "ancient coin", clientId = 24390, sell = 350 },
- { itemName = "ancient liche bone", clientId = 31588, sell = 28000 },
- { itemName = "ancient shield", clientId = 3432, sell = 900 },
- { itemName = "ancient stone", clientId = 9632, sell = 200 },
- { itemName = "angel figurine", clientId = 32589, sell = 36000 },
- { itemName = "angelic axe", clientId = 7436, sell = 5000 },
- { itemName = "ankh", clientId = 3077, sell = 100 },
- { itemName = "antlers", clientId = 10297, sell = 50 },
- { itemName = "ape fur", clientId = 5883, sell = 120 },
- { itemName = "apron", clientId = 33933, sell = 1300 },
- { itemName = "arbalest", clientId = 5803, sell = 42000 },
- { itemName = "arcane staff", clientId = 3341, sell = 42000 },
- { itemName = "assassin dagger", clientId = 7404, sell = 20000 },
- { itemName = "axe ring", clientId = 3092, sell = 100 },
- { itemName = "axe", clientId = 3274, sell = 7 },
- { itemName = "baby seal doll", clientId = 7183, sell = 20000 },
- { itemName = "badger boots", clientId = 22086, sell = 7500 },
- { itemName = "badger fur", clientId = 903, sell = 15 },
- { itemName = "bamboo stick", clientId = 11445, sell = 30 },
- { itemName = "banana sash", clientId = 11511, sell = 55 },
- { itemName = "bandana", clientId = 5917, sell = 150 },
- { itemName = "bar of gold", clientId = 14112, sell = 10000 },
- { itemName = "basalt fetish", clientId = 17856, sell = 210 },
- { itemName = "basalt figurine", clientId = 17857, sell = 160 },
- { itemName = "bashmu fang", clientId = 36820, sell = 600 },
- { itemName = "bashmu feather", clientId = 36823, sell = 350 },
- { itemName = "bashmu tongue", clientId = 36821, sell = 400 },
- { itemName = "bat decoration", clientId = 6491, sell = 2000 },
- { itemName = "bat wing", clientId = 5894, sell = 50 },
- { itemName = "battle axe", clientId = 3266, sell = 80 },
- { itemName = "battle hammer", clientId = 3305, sell = 120 },
- { itemName = "battle shield", clientId = 3413, sell = 95 },
- { itemName = "battle stone", clientId = 11447, sell = 290 },
- { itemName = "batwing hat", clientId = 9103, sell = 8000 },
- { itemName = "bear paw", clientId = 5896, sell = 100 },
- { itemName = "beast's nightmare-cushion", clientId = 29946, sell = 630000 },
- { itemName = "beastslayer axe", clientId = 3344, sell = 1500 },
- { itemName = "bed of nails", clientId = 25743, sell = 500 },
- { itemName = "beer tap", clientId = 32114, sell = 50 },
- { itemName = "beetle carapace", clientId = 24381, sell = 200 },
- { itemName = "beetle necklace", clientId = 10457, sell = 1500 },
- { itemName = "behemoth claw", clientId = 5930, sell = 2000 },
- { itemName = "behemoth trophy", clientId = 7396, sell = 20000 },
- { itemName = "bejeweled ship's telescope", clientId = 9616, sell = 20000 },
- { itemName = "belted cape", clientId = 8044, sell = 500 },
- { itemName = "berserk potion", clientId = 7439, sell = 500 },
- { itemName = "berserker", clientId = 7403, sell = 40000 },
- { itemName = "black hood", clientId = 9645, sell = 190 },
- { itemName = "black pearl", clientId = 3027, sell = 280 },
- { itemName = "black shield", clientId = 3429, sell = 800 },
- { itemName = "black skull", clientId = 9056, sell = 4000 },
- { itemName = "black wool", clientId = 11448, sell = 300 },
- { itemName = "blacksteel sword", clientId = 7406, sell = 6000 },
- { itemName = "blade of corruption", clientId = 11693, sell = 60000 },
- { itemName = "blazing bone", clientId = 16131, sell = 610 },
- { itemName = "blemished spawn abdomen", clientId = 36779, sell = 550 },
- { itemName = "blemished spawn head", clientId = 36778, sell = 800 },
- { itemName = "blemished spawn tail", clientId = 36780, sell = 1000 },
- { itemName = "blessed sceptre", clientId = 7429, sell = 40000 },
- { itemName = "blood goblet", clientId = 8531, sell = 10000 },
- { itemName = "blood herb", clientId = 3734, sell = 500 },
- { itemName = "blood preservation", clientId = 11449, sell = 320 },
- { itemName = "blood tincture in a vial", clientId = 18928, sell = 360 },
- { itemName = "bloody dwarven beard", clientId = 17827, sell = 110 },
- { itemName = "bloody edge", clientId = 7416, sell = 30000 },
- { itemName = "bloody pincers", clientId = 9633, sell = 100 },
- { itemName = "bloody tears", clientId = 32594, sell = 70000 },
- { itemName = "blue crystal shard", clientId = 16119, sell = 1500 },
- { itemName = "blue crystal splinter", clientId = 16124, sell = 400 },
- { itemName = "blue gem", clientId = 3041, sell = 5000 },
- { itemName = "blue glass plate", clientId = 29345, sell = 60 },
- { itemName = "blue goanna scale", clientId = 31559, sell = 230 },
- { itemName = "blue legs", clientId = 645, sell = 15000 },
- { itemName = "blue piece of cloth", clientId = 5912, sell = 200 },
- { itemName = "blue robe", clientId = 3567, sell = 10000 },
- { itemName = "blue rose", clientId = 3659, sell = 250 },
- { itemName = "boar man hoof", clientId = 40584, sell = 600 },
- { itemName = "boggy dreads", clientId = 9667, sell = 200 },
- { itemName = "bola", clientId = 17809, sell = 35 },
- { itemName = "bone club", clientId = 3337, sell = 5 },
- { itemName = "bone fetish", clientId = 17831, sell = 150 },
- { itemName = "bone shield", clientId = 3441, sell = 80 },
- { itemName = "bone shoulderplate", clientId = 10404, sell = 150 },
- { itemName = "bone sword", clientId = 3338, sell = 20 },
- { itemName = "bone toothpick", clientId = 24380, sell = 150 },
- { itemName = "bonebeast trophy", clientId = 10244, sell = 6000 },
- { itemName = "bonebreaker", clientId = 7428, sell = 10000 },
- { itemName = "bonecarving knife", clientId = 17830, sell = 190 },
- { itemName = "bonelord eye", clientId = 5898, sell = 80 },
- { itemName = "bonelord helmet", clientId = 3408, sell = 7500 },
- { itemName = "bonelord shield", clientId = 3418, sell = 1200 },
- { itemName = "bones of zorvorax", clientId = 24942, sell = 10000 },
- { itemName = "bony tail", clientId = 10277, sell = 210 },
- { itemName = "book of necromantic rituals", clientId = 10320, sell = 180 },
- { itemName = "book of prayers", clientId = 9646, sell = 120 },
- { itemName = "book page", clientId = 28569, sell = 640 },
- { itemName = "boots of haste", clientId = 3079, sell = 30000 },
- { itemName = "bowl of terror sweat", clientId = 20204, sell = 500 },
- { itemName = "brain head's giant neuron", clientId = 32578, sell = 100000 },
- { itemName = "brain head's left hemisphere", clientId = 32579, sell = 90000 },
- { itemName = "brain head's right hemisphere", clientId = 32580, sell = 50000 },
- { itemName = "brainstealer's brain", clientId = 36795, sell = 300000 },
- { itemName = "brainstealer's brainwave", clientId = 36796, sell = 440000 },
- { itemName = "brainstealer's tissue", clientId = 36794, sell = 240000 },
- { itemName = "brass armor", clientId = 3359, sell = 150 },
- { itemName = "brass helmet", clientId = 3354, sell = 30 },
- { itemName = "brass legs", clientId = 3372, sell = 49 },
- { itemName = "brass shield", clientId = 3411, sell = 25 },
- { itemName = "bright bell", clientId = 30324, sell = 220 },
- { itemName = "bright sword", clientId = 3295, sell = 6000 },
- { itemName = "brimstone fangs", clientId = 11702, sell = 380 },
- { itemName = "brimstone shell", clientId = 11703, sell = 210 },
- { itemName = "broadsword", clientId = 3301, sell = 500 },
- { itemName = "broken bell", clientId = 30185, sell = 150 },
- { itemName = "broken crossbow", clientId = 11451, sell = 30 },
- { itemName = "broken draken mail", clientId = 11660, sell = 340 },
- { itemName = "broken gladiator shield", clientId = 9656, sell = 190 },
- { itemName = "broken halberd", clientId = 10418, sell = 100 },
- { itemName = "broken helmet", clientId = 11453, sell = 20 },
- { itemName = "broken iks cuirass", clientId = 40533, sell = 640 },
- { itemName = "broken iks faulds", clientId = 40531, sell = 530 },
- { itemName = "broken iks headpiece", clientId = 40532, sell = 560 },
- { itemName = "broken iks sandals", clientId = 40534, sell = 440 },
- { itemName = "broken key ring", clientId = 11652, sell = 8000 },
- { itemName = "broken longbow", clientId = 34161, sell = 130 },
- { itemName = "broken macuahuitl", clientId = 40530, sell = 1000 },
- { itemName = "broken ring of ending", clientId = 12737, sell = 4000 },
- { itemName = "broken shamanic staff", clientId = 11452, sell = 35 },
- { itemName = "broken slicer", clientId = 11661, sell = 120 },
- { itemName = "broken throwing axe", clientId = 17851, sell = 230 },
- { itemName = "broken visor", clientId = 20184, sell = 1900 },
- { itemName = "bronze amulet", clientId = 3056, sell = 50, count = 200 },
- { itemName = "brooch of embracement", clientId = 34023, sell = 14000 },
- { itemName = "brown crystal splinter", clientId = 16123, sell = 400 },
- { itemName = "brown giant shimmering pearl", clientId = 282, sell = 3000 },
- { itemName = "brown piece of cloth", clientId = 5913, sell = 100 },
- { itemName = "brutetamer's staff", clientId = 7379, sell = 1500 },
- { itemName = "buckle", clientId = 17829, sell = 7000 },
- { itemName = "bullseye potion", clientId = 7443, sell = 500 },
- { itemName = "bunch of ripe rice", clientId = 10328, sell = 75 },
- { itemName = "bunch of troll hair", clientId = 9689, sell = 30 },
- { itemName = "bundle of cursed straw", clientId = 9688, sell = 800 },
- { itemName = "butcher's axe", clientId = 7412, sell = 18000 },
- { itemName = "butterfly ring", clientId = 25698, sell = 2000 },
- { itemName = "calopteryx cape", clientId = 14086, sell = 15000 },
- { itemName = "capricious heart", clientId = 34138, sell = 2100 },
- { itemName = "capricious robe", clientId = 34145, sell = 1200 },
- { itemName = "carapace shield", clientId = 14088, sell = 32000 },
- { itemName = "carlin sword", clientId = 3283, sell = 118 },
- { itemName = "carniphila seeds", clientId = 10300, sell = 50 },
- { itemName = "carnisylvan bark", clientId = 36806, sell = 230 },
- { itemName = "carnisylvan finger", clientId = 36805, sell = 250 },
- { itemName = "carnivostrich feathers", clientId = 40586, sell = 550 },
- { itemName = "carrion worm fang", clientId = 10275, sell = 35 },
- { itemName = "castle shield", clientId = 3435, sell = 5000 },
- { itemName = "cat's paw", clientId = 5479, sell = 2000 },
- { itemName = "cave chimera head", clientId = 36787, sell = 1200 },
- { itemName = "cave chimera leg", clientId = 36788, sell = 650 },
- { itemName = "cave devourer eyes", clientId = 27599, sell = 550 },
- { itemName = "cave devourer legs", clientId = 27601, sell = 350 },
- { itemName = "cave devourer maw", clientId = 27600, sell = 600 },
- { itemName = "cavebear skull", clientId = 12316, sell = 550 },
- { itemName = "centipede leg", clientId = 10301, sell = 28 },
- { itemName = "ceremonial ankh", clientId = 6561, sell = 20000 },
- { itemName = "chain armor", clientId = 3358, sell = 70 },
- { itemName = "chain bolter", clientId = 8022, sell = 40000 },
- { itemName = "chain helmet", clientId = 3352, sell = 17 },
- { itemName = "chain legs", clientId = 3558, sell = 25 },
- { itemName = "chaos mace", clientId = 7427, sell = 9000 },
- { itemName = "chasm spawn abdomen", clientId = 27603, sell = 240 },
- { itemName = "chasm spawn head", clientId = 27602, sell = 850 },
- { itemName = "chasm spawn tail", clientId = 27604, sell = 120 },
- { itemName = "cheese cutter", clientId = 17817, sell = 50 },
- { itemName = "cheesy figurine", clientId = 17818, sell = 150 },
- { itemName = "cheesy membership card", clientId = 35614, sell = 120000 },
- { itemName = "chicken feather", clientId = 5890, sell = 30 },
- { itemName = "chitinous mouth", clientId = 27626, sell = 10000 },
- { itemName = "chitinous mouth", clientId = 27622, sell = 10000 },
- { itemName = "claw of 'the noxious spawn'", clientId = 9392, sell = 15000 },
- { itemName = "cliff strider claw", clientId = 16134, sell = 800 },
- { itemName = "closed trap", clientId = 3481, sell = 75 },
- { itemName = "club ring", clientId = 3093, sell = 100 },
- { itemName = "club", clientId = 3270, sell = 1 },
- { itemName = "cluster of solace", clientId = 20062, sell = 500 },
- { itemName = "coal", clientId = 12600, sell = 20 },
- { itemName = "coat", clientId = 3562, sell = 1 },
- { itemName = "cobra crest", clientId = 31678, sell = 650 },
- { itemName = "cobra crown", clientId = 11674, sell = 50000 },
- { itemName = "cobra tongue", clientId = 9634, sell = 15 },
- { itemName = "coconut shoes", clientId = 9017, sell = 500 },
- { itemName = "collar of blue plasma", clientId = 23542, sell = 6000 },
- { itemName = "collar of green plasma", clientId = 23543, sell = 6000 },
- { itemName = "collar of red plasma", clientId = 23544, sell = 6000 },
- { itemName = "colourful feather", clientId = 11514, sell = 110 },
- { itemName = "colourful feathers", clientId = 25089, sell = 400 },
- { itemName = "colourful snail shell", clientId = 25696, sell = 250 },
- { itemName = "compass", clientId = 10302, sell = 45 },
- { itemName = "composite hornbow", clientId = 8027, sell = 25000 },
- { itemName = "compound eye", clientId = 14083, sell = 150 },
- { itemName = "condensed energy", clientId = 23501, sell = 260 },
- { itemName = "copper shield", clientId = 3430, sell = 50 },
- { itemName = "coral branch", clientId = 39406, sell = 360 },
- { itemName = "coral brooch", clientId = 24391, sell = 750 },
- { itemName = "corrupt naga scales", clientId = 39415, sell = 570 },
- { itemName = "corrupted flag", clientId = 10409, sell = 700 },
- { itemName = "countess sorrow's frozen tear", clientId = 6536, sell = 50000 },
- { itemName = "cow bell", clientId = 32012, sell = 120 },
- { itemName = "cowbell", clientId = 21204, sell = 210 },
- { itemName = "cowtana", clientId = 21177, sell = 2500 },
- { itemName = "crab man claw", clientId = 40582, sell = 550 },
- { itemName = "crab pincers", clientId = 10272, sell = 35 },
- { itemName = "cracked alabaster vase", clientId = 24385, sell = 180 },
- { itemName = "cranial basher", clientId = 7415, sell = 30000 },
- { itemName = "crawler head plating", clientId = 14079, sell = 210 },
- { itemName = "crawler's essence", clientId = 33982, sell = 3700 },
- { itemName = "crest of the deep seas", clientId = 21892, sell = 10000 },
- { itemName = "crocodile boots", clientId = 3556, sell = 1000 },
- { itemName = "crowbar", clientId = 3304, sell = 50 },
- { itemName = "crown armor", clientId = 3381, sell = 12000 },
- { itemName = "crown helmet", clientId = 3385, sell = 2500 },
- { itemName = "crown legs", clientId = 3382, sell = 12000 },
- { itemName = "crown shield", clientId = 3419, sell = 8000 },
- { itemName = "crown", clientId = 33935, sell = 2700 },
- { itemName = "cruelty's chest", clientId = 33923, sell = 720000 },
- { itemName = "cruelty's claw", clientId = 33922, sell = 640000 },
- { itemName = "crunor idol", clientId = 30055, sell = 30000 },
- { itemName = "crusader helmet", clientId = 3391, sell = 6000 },
- { itemName = "cry-stal", clientId = 39394, sell = 3200 },
- { itemName = "crystal ball", clientId = 3076, sell = 190 },
- { itemName = "crystal bone", clientId = 23521, sell = 250 },
- { itemName = "crystal crossbow", clientId = 16163, sell = 35000 },
- { itemName = "crystal mace", clientId = 3333, sell = 12000 },
- { itemName = "crystal necklace", clientId = 3008, sell = 400 },
- { itemName = "crystal of balance", clientId = 9028, sell = 1000 },
- { itemName = "crystal of focus", clientId = 9027, sell = 2000 },
- { itemName = "crystal of power", clientId = 9067, sell = 3000 },
- { itemName = "crystal pedestal", clientId = 9063, sell = 500 },
- { itemName = "crystal ring", clientId = 3007, sell = 250 },
- { itemName = "crystal sword", clientId = 7449, sell = 600 },
- { itemName = "crystal wand", clientId = 3068, sell = 10000 },
- { itemName = "crystalline armor", clientId = 8050, sell = 16000 },
- { itemName = "crystalline spikes", clientId = 16138, sell = 440 },
- { itemName = "crystalline sword", clientId = 16160, sell = 2000 },
- { itemName = "crystallized anger", clientId = 23507, sell = 400 },
- { itemName = "cultish mask", clientId = 9638, sell = 280 },
- { itemName = "cultish robe", clientId = 9639, sell = 150 },
- { itemName = "cultish symbol", clientId = 11455, sell = 500 },
- { itemName = "curious matter", clientId = 23511, sell = 430 },
- { itemName = "curl of hair", clientId = 36809, sell = 320000 },
- { itemName = "cursed bone", clientId = 32774, sell = 6000 },
- { itemName = "cursed shoulder spikes", clientId = 10410, sell = 320 },
- { itemName = "cyan crystal fragment", clientId = 16125, sell = 800 },
- { itemName = "cyclops toe", clientId = 9657, sell = 55 },
- { itemName = "cyclops trophy", clientId = 7398, sell = 500 },
- { itemName = "daedal chisel", clientId = 40522, sell = 480 },
- { itemName = "dagger", clientId = 3267, sell = 2 },
- { itemName = "damaged armor plates", clientId = 28822, sell = 280 },
- { itemName = "damaged worm head", clientId = 27620, sell = 8000 },
- { itemName = "damselfly eye", clientId = 17463, sell = 25 },
- { itemName = "damselfly wing", clientId = 17458, sell = 20 },
- { itemName = "dandelion seeds", clientId = 25695, sell = 200 },
- { itemName = "dangerous proto matter", clientId = 23515, sell = 300 },
- { itemName = "daramian mace", clientId = 3327, sell = 110 },
- { itemName = "daramian waraxe", clientId = 3328, sell = 1000 },
- { itemName = "dark armor", clientId = 3383, sell = 400 },
- { itemName = "dark bell", clientId = 32596, sell = 310000 },
- { itemName = "dark bell", clientId = 30325, sell = 250 },
- { itemName = "dark helmet", clientId = 3384, sell = 250 },
- { itemName = "dark mushroom", clientId = 3728, sell = 100 },
- { itemName = "dark rosary", clientId = 10303, sell = 48 },
- { itemName = "dark shield", clientId = 3421, sell = 400 },
- { itemName = "dead weight", clientId = 20202, sell = 450 },
- { itemName = "death ring", clientId = 6299, sell = 1000 },
- { itemName = "death toll", clientId = 32703, sell = 1000 },
- { itemName = "deepling axe", clientId = 13991, sell = 40000 },
- { itemName = "deepling breaktime snack", clientId = 14011, sell = 90 },
- { itemName = "deepling claw", clientId = 14044, sell = 430 },
- { itemName = "deepling guard belt buckle", clientId = 14010, sell = 230 },
- { itemName = "deepling ridge", clientId = 14041, sell = 360 },
- { itemName = "deepling scales", clientId = 14017, sell = 80 },
- { itemName = "deepling squelcher", clientId = 14250, sell = 7000 },
- { itemName = "deepling staff", clientId = 13987, sell = 4000 },
- { itemName = "deepling warts", clientId = 14012, sell = 180 },
- { itemName = "deeptags", clientId = 14013, sell = 290 },
- { itemName = "deepworm jaws", clientId = 27594, sell = 500 },
- { itemName = "deepworm spike roots", clientId = 27593, sell = 650 },
- { itemName = "deepworm spikes", clientId = 27592, sell = 800 },
- { itemName = "deer trophy", clientId = 7397, sell = 3000 },
- { itemName = "demon dust", clientId = 5526, sell = 300 },
- { itemName = "demon dust", clientId = 5906, sell = 300 },
- { itemName = "demon helmet", clientId = 3387, sell = 40000 },
- { itemName = "demon horn", clientId = 5954, sell = 1000 },
- { itemName = "demon shield", clientId = 3420, sell = 30000 },
- { itemName = "demon trophy", clientId = 7393, sell = 40000 },
- { itemName = "demonbone amulet", clientId = 3019, sell = 32000 },
- { itemName = "demonic essence", clientId = 6499, sell = 1000 },
- { itemName = "demonic finger", clientId = 12541, sell = 1000 },
- { itemName = "demonic skeletal hand", clientId = 9647, sell = 80 },
- { itemName = "demonrage sword", clientId = 7382, sell = 36000 },
- { itemName = "depth calcei", clientId = 13997, sell = 25000 },
- { itemName = "depth galea", clientId = 13995, sell = 35000 },
- { itemName = "depth lorica", clientId = 13994, sell = 30000 },
- { itemName = "depth ocrea", clientId = 13996, sell = 16000 },
- { itemName = "depth scutum", clientId = 13998, sell = 36000 },
- { itemName = "devil helmet", clientId = 3356, sell = 1000 },
- { itemName = "diabolic skull", clientId = 34025, sell = 19000 },
- { itemName = "diamond sceptre", clientId = 7387, sell = 3000 },
- { itemName = "diamond", clientId = 32770, sell = 15000 },
- { itemName = "diremaw brainpan", clientId = 27597, sell = 350 },
- { itemName = "diremaw legs", clientId = 27598, sell = 270 },
- { itemName = "dirty turban", clientId = 11456, sell = 120 },
- { itemName = "disgusting trophy", clientId = 10421, sell = 3000 },
- { itemName = "distorted heart", clientId = 34142, sell = 2100 },
- { itemName = "distorted robe", clientId = 34149, sell = 1200 },
- { itemName = "divine plate", clientId = 8057, sell = 55000 },
- { itemName = "djinn blade", clientId = 3339, sell = 15000 },
- { itemName = "doll", clientId = 2991, sell = 200 },
- { itemName = "double axe", clientId = 3275, sell = 260 },
- { itemName = "doublet", clientId = 3379, sell = 3 },
- { itemName = "downy feather", clientId = 11684, sell = 20 },
- { itemName = "dowser", clientId = 19110, sell = 35 },
- { itemName = "drachaku", clientId = 10391, sell = 10000 },
- { itemName = "dracola's eye", clientId = 6546, sell = 50000 },
- { itemName = "dracoyle statue", clientId = 9034, sell = 5000 },
- { itemName = "dragon blood", clientId = 24937, sell = 700 },
- { itemName = "dragon claw", clientId = 5919, sell = 8000 },
- { itemName = "dragon figurine", clientId = 30053, sell = 45000 },
- { itemName = "dragon hammer", clientId = 3322, sell = 2000 },
- { itemName = "dragon lance", clientId = 3302, sell = 9000 },
- { itemName = "dragon lord trophy", clientId = 7399, sell = 10000 },
- { itemName = "dragon necklace", clientId = 3085, sell = 100, count = 200 },
- { itemName = "dragon priest's wandtip", clientId = 10444, sell = 175 },
- { itemName = "dragon robe", clientId = 8039, sell = 50000 },
- { itemName = "dragon scale mail", clientId = 3386, sell = 40000 },
- { itemName = "dragon shield", clientId = 3416, sell = 4000 },
- { itemName = "dragon slayer", clientId = 7402, sell = 15000 },
- { itemName = "dragon tongue", clientId = 24938, sell = 550 },
- { itemName = "dragon's tail", clientId = 11457, sell = 100 },
- { itemName = "dragonbone staff", clientId = 7430, sell = 3000 },
- { itemName = "draken boots", clientId = 4033, sell = 40000 },
- { itemName = "draken sulphur", clientId = 11658, sell = 550 },
- { itemName = "draken trophy", clientId = 10398, sell = 15000 },
- { itemName = "draken wristbands", clientId = 11659, sell = 430 },
- { itemName = "drakinata", clientId = 10388, sell = 10000 },
- { itemName = "draptor scales", clientId = 12309, sell = 800 },
- { itemName = "dreaded cleaver", clientId = 7419, sell = 15000 },
- { itemName = "dream blossom staff", clientId = 25700, sell = 5000 },
- { itemName = "dream essence egg", clientId = 30005, sell = 205 },
- { itemName = "dung ball", clientId = 14225, sell = 130 },
- { itemName = "dwarven armor", clientId = 3397, sell = 30000 },
- { itemName = "dwarven axe", clientId = 3323, sell = 1500 },
- { itemName = "dwarven legs", clientId = 3398, sell = 40000 },
- { itemName = "dwarven ring", clientId = 3097, sell = 100 },
- { itemName = "dwarven shield", clientId = 3425, sell = 100 },
- { itemName = "earflap", clientId = 17819, sell = 40 },
- { itemName = "ectoplasmic sushi", clientId = 11681, sell = 300 },
- { itemName = "egg of the many", clientId = 9606, sell = 15000 },
- { itemName = "elder bonelord tentacle", clientId = 10276, sell = 150 },
- { itemName = "eldritch crystal", clientId = 36835, sell = 48000 },
- { itemName = "elite draken mail", clientId = 11651, sell = 50000 },
- { itemName = "elven amulet", clientId = 3082, sell = 100, count = 50 },
- { itemName = "elven astral observer", clientId = 11465, sell = 90 },
- { itemName = "elven hoof", clientId = 18994, sell = 115 },
- { itemName = "elven scouting glass", clientId = 11464, sell = 50 },
- { itemName = "elvish bow", clientId = 7438, sell = 2000 },
- { itemName = "elvish talisman", clientId = 9635, sell = 45 },
- { itemName = "emerald bangle", clientId = 3010, sell = 800 },
- { itemName = "emerald tortoise shell", clientId = 39379, sell = 2150 },
- { itemName = "empty honey glass", clientId = 31331, sell = 270 },
- { itemName = "empty potion flask", clientId = 283, sell = 5 },
- { itemName = "empty potion flask", clientId = 284, sell = 5 },
- { itemName = "empty potion flask", clientId = 285, sell = 5 },
- { itemName = "enchanted chicken wing", clientId = 5891, sell = 20000 },
- { itemName = "energy ball", clientId = 23523, sell = 300 },
- { itemName = "energy ring", clientId = 3051, sell = 100 },
- { itemName = "energy soil", clientId = 945, sell = 2000 },
- { itemName = "energy vein", clientId = 23508, sell = 270 },
- { itemName = "enigmatic voodoo skull", clientId = 5669, sell = 4000 },
- { itemName = "ensouled essence", clientId = 32698, sell = 820 },
- { itemName = "epee", clientId = 3326, sell = 8000 },
- { itemName = "essence of a bad dream", clientId = 10306, sell = 360 },
- { itemName = "ethno coat", clientId = 8064, sell = 200 },
- { itemName = "eternal flames", clientId = 946, sell = 5000 },
- { itemName = "execowtioner axe", clientId = 21176, sell = 12000 },
- { itemName = "execowtioner mask", clientId = 21201, sell = 240 },
- { itemName = "executioner", clientId = 7453, sell = 55000 },
- { itemName = "explorer brooch", clientId = 4871, sell = 50 },
- { itemName = "eye of a deepling", clientId = 12730, sell = 150 },
- { itemName = "eye of a weeper", clientId = 16132, sell = 650 },
- { itemName = "eye of corruption", clientId = 11671, sell = 390 },
- { itemName = "eyeless devourer legs", clientId = 36776, sell = 650 },
- { itemName = "eyeless devourer maw", clientId = 36775, sell = 420 },
- { itemName = "eyeless devourer tongue", clientId = 36777, sell = 900 },
- { itemName = "fafnar symbol", clientId = 31443, sell = 950 },
- { itemName = "fairy wings", clientId = 25694, sell = 200 },
- { itemName = "falcon crest", clientId = 28823, sell = 650 },
- { itemName = "fern", clientId = 3737, sell = 20 },
- { itemName = "fiery heart", clientId = 9636, sell = 375 },
- { itemName = "fiery tear", clientId = 39040, sell = 1070000 },
- { itemName = "fig leaf", clientId = 25742, sell = 200 },
- { itemName = "figurine of cruelty", clientId = 34019, sell = 3100000 },
- { itemName = "figurine of greed", clientId = 34021, sell = 2900000 },
- { itemName = "figurine of hatred", clientId = 34020, sell = 2700000 },
- { itemName = "figurine of malice", clientId = 34018, sell = 2800000 },
- { itemName = "figurine of megalomania", clientId = 33953, sell = 5000000 },
- { itemName = "figurine of spite", clientId = 33952, sell = 3000000 },
- { itemName = "fir cone", clientId = 19111, sell = 25 },
- { itemName = "fire axe", clientId = 3320, sell = 8000 },
- { itemName = "fire mushroom", clientId = 3731, sell = 200 },
- { itemName = "fire sword", clientId = 3280, sell = 4000 },
- { itemName = "first verse of the hymn", clientId = 6087, sell = 100 },
- { itemName = "fish fin", clientId = 5895, sell = 150 },
- { itemName = "fishing rod", clientId = 3483, sell = 40 },
- { itemName = "flask of embalming fluid", clientId = 11466, sell = 30 },
- { itemName = "flask of warrior's sweat", clientId = 5885, sell = 10000 },
- { itemName = "flawless ice crystal", clientId = 942, sell = 5000 },
- { itemName = "flintstone", clientId = 12806, sell = 800 },
- { itemName = "flotsam", clientId = 39407, sell = 330 },
- { itemName = "flower dress", clientId = 9015, sell = 1000 },
- { itemName = "flower wreath", clientId = 9013, sell = 500 },
- { itemName = "focus cape", clientId = 8043, sell = 6000 },
- { itemName = "fourth verse of the hymn", clientId = 6090, sell = 800 },
- { itemName = "fox paw", clientId = 27462, sell = 100 },
- { itemName = "frazzle skin", clientId = 20199, sell = 400 },
- { itemName = "frazzle tongue", clientId = 20198, sell = 700 },
- { itemName = "frost giant pelt", clientId = 9658, sell = 160 },
- { itemName = "frosty ear of a troll", clientId = 9648, sell = 30 },
- { itemName = "frosty heart", clientId = 9661, sell = 280 },
- { itemName = "frozen lightning", clientId = 23519, sell = 270 },
- { itemName = "frozen starlight", clientId = 3249, sell = 20000 },
- { itemName = "fur armor", clientId = 22085, sell = 5000 },
- { itemName = "fur boots", clientId = 7457, sell = 2000 },
- { itemName = "fur shred", clientId = 34164, sell = 200 },
- { itemName = "furry club", clientId = 7432, sell = 1000 },
- { itemName = "garlic necklace", clientId = 3083, sell = 50 },
- { itemName = "gauze bandage", clientId = 9649, sell = 90 },
- { itemName = "gear crystal", clientId = 9655, sell = 200 },
- { itemName = "gear wheel", clientId = 8775, sell = 500 },
- { itemName = "gearwheel chain", clientId = 21170, sell = 5000 },
- { itemName = "gemmed figurine", clientId = 24392, sell = 3500 },
- { itemName = "geomancer's robe", clientId = 11458, sell = 80 },
- { itemName = "geomancer's staff", clientId = 11463, sell = 120 },
- { itemName = "ghastly dragon head", clientId = 10449, sell = 700 },
- { itemName = "ghostly tissue", clientId = 9690, sell = 90 },
- { itemName = "ghoul snack", clientId = 11467, sell = 60 },
- { itemName = "giant amethyst", clientId = 32622, sell = 60000 },
- { itemName = "giant crab pincer", clientId = 12317, sell = 950 },
- { itemName = "giant emerald", clientId = 30060, sell = 90000 },
- { itemName = "giant eye", clientId = 10280, sell = 380 },
- { itemName = "giant pacifier", clientId = 21199, sell = 170 },
- { itemName = "giant ruby", clientId = 30059, sell = 70000 },
- { itemName = "giant sapphire", clientId = 30061, sell = 50000 },
- { itemName = "giant sword", clientId = 3281, sell = 17000 },
- { itemName = "giant tentacle", clientId = 27619, sell = 10000 },
- { itemName = "giant topaz", clientId = 32623, sell = 80000 },
- { itemName = "girlish hair decoration", clientId = 11443, sell = 30 },
- { itemName = "girtablilu warrior carapace", clientId = 36971, sell = 520 },
- { itemName = "glacial rod", clientId = 16118, sell = 6500 },
- { itemName = "glacier amulet", clientId = 815, sell = 1500 },
- { itemName = "glacier kilt", clientId = 823, sell = 11000 },
- { itemName = "glacier mask", clientId = 829, sell = 2500 },
- { itemName = "glacier robe", clientId = 824, sell = 11000 },
- { itemName = "glacier shoes", clientId = 819, sell = 2500 },
- { itemName = "gland", clientId = 8143, sell = 500 },
- { itemName = "glistening bone", clientId = 23522, sell = 250 },
- { itemName = "glob of acid slime", clientId = 9054, sell = 25 },
- { itemName = "glob of glooth", clientId = 21182, sell = 125 },
- { itemName = "glob of mercury", clientId = 9053, sell = 20 },
- { itemName = "glob of tar", clientId = 9055, sell = 30 },
- { itemName = "gloom wolf fur", clientId = 22007, sell = 70 },
- { itemName = "glooth amulet", clientId = 21183, sell = 2000 },
- { itemName = "glooth axe", clientId = 21180, sell = 1500 },
- { itemName = "glooth blade", clientId = 21179, sell = 1500 },
- { itemName = "glooth cap", clientId = 21164, sell = 7000 },
- { itemName = "glooth club", clientId = 21178, sell = 1500 },
- { itemName = "glooth injection tube", clientId = 21103, sell = 350 },
- { itemName = "glooth whip", clientId = 21172, sell = 2500 },
- { itemName = "glorious axe", clientId = 7454, sell = 3000 },
- { itemName = "glowing rune", clientId = 28570, sell = 350 },
- { itemName = "goanna claw", clientId = 31561, sell = 260 },
- { itemName = "goanna meat", clientId = 31560, sell = 190 },
- { itemName = "goat grass", clientId = 3674, sell = 50 },
- { itemName = "goblet of gloom", clientId = 34022, sell = 12000 },
- { itemName = "goblin ear", clientId = 11539, sell = 20 },
- { itemName = "gold ingot", clientId = 9058, sell = 5000 },
- { itemName = "gold nugget", clientId = 3040, sell = 850 },
- { itemName = "gold ring", clientId = 3063, sell = 8000 },
- { itemName = "gold-brocaded cloth", clientId = 40529, sell = 175 },
- { itemName = "golden amulet", clientId = 3013, sell = 2000 },
- { itemName = "golden armor", clientId = 3360, sell = 20000 },
- { itemName = "golden brush", clientId = 25689, sell = 250 },
- { itemName = "golden cheese wedge", clientId = 35581, sell = 6000 },
- { itemName = "golden dustbin", clientId = 35579, sell = 7000 },
- { itemName = "golden fafnar trophy", clientId = 9626, sell = 10000 },
- { itemName = "golden figurine", clientId = 5799, sell = 3000 },
- { itemName = "golden legs", clientId = 3364, sell = 30000 },
- { itemName = "golden lotus brooch", clientId = 21974, sell = 270 },
- { itemName = "golden mask", clientId = 31324, sell = 38000 },
- { itemName = "golden mug", clientId = 2903, sell = 250 },
- { itemName = "golden sickle", clientId = 3306, sell = 1000 },
- { itemName = "golden skull", clientId = 35580, sell = 9000 },
- { itemName = "goo shell", clientId = 19372, sell = 4000 },
- { itemName = "goosebump leather", clientId = 20205, sell = 650 },
- { itemName = "gore horn", clientId = 39377, sell = 2900 },
- { itemName = "gorerilla mane", clientId = 39392, sell = 2750 },
- { itemName = "gorerilla tail", clientId = 39393, sell = 2650 },
- { itemName = "grant of arms", clientId = 28824, sell = 950 },
- { itemName = "grappling hook", clientId = 35588, sell = 150 },
- { itemName = "grasshopper legs", clientId = 14087, sell = 15000 },
- { itemName = "grave flower", clientId = 3661, sell = 25 },
- { itemName = "greed's arm", clientId = 33924, sell = 950000 },
- { itemName = "green bandage", clientId = 25697, sell = 180 },
- { itemName = "green crystal fragment", clientId = 16127, sell = 800 },
- { itemName = "green crystal shard", clientId = 16121, sell = 1500 },
- { itemName = "green crystal splinter", clientId = 16122, sell = 400 },
- { itemName = "green dragon leather", clientId = 5877, sell = 100 },
- { itemName = "green dragon scale", clientId = 5920, sell = 100 },
- { itemName = "green gem", clientId = 3038, sell = 5000 },
- { itemName = "green giant shimmering pearl", clientId = 281, sell = 3000 },
- { itemName = "green glass plate", clientId = 29346, sell = 180 },
- { itemName = "green mushroom", clientId = 3732, sell = 100 },
- { itemName = "green piece of cloth", clientId = 5910, sell = 200 },
- { itemName = "greenwood coat", clientId = 8041, sell = 50000 },
- { itemName = "griffin shield", clientId = 3433, sell = 3000 },
- { itemName = "grimace", clientId = 32593, sell = 120000 },
- { itemName = "gruesome fan", clientId = 34024, sell = 15000 },
- { itemName = "guardian axe", clientId = 14043, sell = 9000 },
- { itemName = "guardian boots", clientId = 10323, sell = 35000 },
- { itemName = "guardian halberd", clientId = 3315, sell = 11000 },
- { itemName = "guardian shield", clientId = 3415, sell = 2000 },
- { itemName = "guidebook", clientId = 25745, sell = 200 },
- { itemName = "hailstorm rod", clientId = 3067, sell = 3000 },
- { itemName = "hair of a banshee", clientId = 11446, sell = 350 },
- { itemName = "halberd", clientId = 3269, sell = 400 },
- { itemName = "half-digested piece of meat", clientId = 10283, sell = 55 },
- { itemName = "half-digested stones", clientId = 27369, sell = 40 },
- { itemName = "half-eaten brain", clientId = 9659, sell = 85 },
- { itemName = "hammer of wrath", clientId = 3332, sell = 30000 },
- { itemName = "hand axe", clientId = 3268, sell = 4 },
- { itemName = "hand", clientId = 33936, sell = 1450 },
- { itemName = "hardened bone", clientId = 5925, sell = 70 },
- { itemName = "harpoon of a giant snail", clientId = 27625, sell = 15000 },
- { itemName = "harpy feathers", clientId = 40585, sell = 730 },
- { itemName = "hatched rorc egg", clientId = 18997, sell = 30 },
- { itemName = "hatchet", clientId = 3276, sell = 25 },
- { itemName = "haunted blade", clientId = 7407, sell = 8000 },
- { itemName = "haunted piece of wood", clientId = 9683, sell = 115 },
- { itemName = "hazardous heart", clientId = 34140, sell = 5000 },
- { itemName = "hazardous robe", clientId = 34147, sell = 3000 },
- { itemName = "head", clientId = 33937, sell = 3200 },
- { itemName = "head", clientId = 33932, sell = 3500 },
- { itemName = "headchopper", clientId = 7380, sell = 6000 },
- { itemName = "headpecker beak", clientId = 39387, sell = 2998 },
- { itemName = "headpecker feather", clientId = 39388, sell = 1300 },
- { itemName = "heat core", clientId = 21167, sell = 10000 },
- { itemName = "heaven blossom", clientId = 3657, sell = 50 },
- { itemName = "heaven blossom", clientId = 5921, sell = 50 },
- { itemName = "heavy mace", clientId = 3340, sell = 50000 },
- { itemName = "heavy machete", clientId = 3330, sell = 90 },
- { itemName = "heavy old tome", clientId = 23986, sell = 30 },
- { itemName = "heavy trident", clientId = 12683, sell = 2000 },
- { itemName = "hellhound slobber", clientId = 9637, sell = 500 },
- { itemName = "hellspawn tail", clientId = 10304, sell = 475 },
- { itemName = "helmet of the lost", clientId = 17852, sell = 2000 },
- { itemName = "hemp rope", clientId = 20206, sell = 350 },
- { itemName = "heroic axe", clientId = 7389, sell = 30000 },
- { itemName = "hexagonal ruby", clientId = 30180, sell = 30000 },
- { itemName = "hibiscus dress", clientId = 8045, sell = 3000 },
- { itemName = "hideous chunk", clientId = 16140, sell = 510 },
- { itemName = "hieroglyph banner", clientId = 12482, sell = 500 },
- { itemName = "high guard flag", clientId = 10415, sell = 550 },
- { itemName = "high guard shoulderplates", clientId = 10416, sell = 130 },
- { itemName = "hive bow", clientId = 14246, sell = 28000 },
- { itemName = "hive scythe", clientId = 14089, sell = 17000 },
- { itemName = "hollow stampor hoof", clientId = 12314, sell = 400 },
- { itemName = "holy ash", clientId = 17850, sell = 160 },
- { itemName = "holy orchid", clientId = 5922, sell = 90 },
- { itemName = "honeycomb", clientId = 5902, sell = 40 },
- { itemName = "horn of kalyassa", clientId = 24941, sell = 10000 },
- { itemName = "horn", clientId = 19359, sell = 300 },
- { itemName = "horoscope", clientId = 18926, sell = 40 },
- { itemName = "huge chunk of crude iron", clientId = 5892, sell = 15000 },
- { itemName = "huge shell", clientId = 27621, sell = 15000 },
- { itemName = "huge spiky snail shell", clientId = 27627, sell = 8000 },
- { itemName = "humongous chunk", clientId = 16139, sell = 540 },
- { itemName = "hunter's quiver", clientId = 11469, sell = 80 },
- { itemName = "hydra egg", clientId = 4839, sell = 500 },
- { itemName = "hydra head", clientId = 10282, sell = 600 },
- { itemName = "hydrophytes", clientId = 39410, sell = 220 },
- { itemName = "ice flower", clientId = 30058, sell = 370 },
- { itemName = "ice rapier", clientId = 3284, sell = 1000 },
- { itemName = "iced soil", clientId = 944, sell = 2000 },
- { itemName = "incantation notes", clientId = 18929, sell = 90 },
- { itemName = "infernal heart", clientId = 34139, sell = 2100 },
- { itemName = "infernal robe", clientId = 34146, sell = 1200 },
- { itemName = "inkwell", clientId = 28568, sell = 720 },
- { itemName = "instable proto matter", clientId = 23516, sell = 300 },
- { itemName = "iron helmet", clientId = 3353, sell = 150 },
- { itemName = "iron ore", clientId = 5880, sell = 500 },
- { itemName = "ivory carving", clientId = 33945, sell = 300 },
- { itemName = "ivory comb", clientId = 32773, sell = 8000 },
- { itemName = "izcandar's snow globe", clientId = 29944, sell = 180000 },
- { itemName = "izcandar's sundial", clientId = 29945, sell = 225000 },
- { itemName = "jacket", clientId = 3561, sell = 1 },
- { itemName = "jade hammer", clientId = 7422, sell = 25000 },
- { itemName = "jade hat", clientId = 10451, sell = 9000 },
- { itemName = "jagged sickle", clientId = 32595, sell = 150000 },
- { itemName = "jaws", clientId = 34014, sell = 3900 },
- { itemName = "jewelled belt", clientId = 11470, sell = 180 },
- { itemName = "jungle moa claw", clientId = 39404, sell = 160 },
- { itemName = "jungle moa egg", clientId = 39405, sell = 250 },
- { itemName = "jungle moa feather", clientId = 39403, sell = 140 },
- { itemName = "katana", clientId = 3300, sell = 35 },
- { itemName = "katex' blood", clientId = 34100, sell = 210 },
- { itemName = "key to the drowned library", clientId = 14009, sell = 330 },
- { itemName = "knight armor", clientId = 3370, sell = 5000 },
- { itemName = "knight axe", clientId = 3318, sell = 2000 },
- { itemName = "knight legs", clientId = 3371, sell = 5000 },
- { itemName = "kollos shell", clientId = 14077, sell = 420 },
- { itemName = "kongra's shoulderpad", clientId = 11471, sell = 100 },
- { itemName = "krimhorn helmet", clientId = 7461, sell = 200 },
- { itemName = "lamassu hoof", clientId = 31441, sell = 330 },
- { itemName = "lamassu horn", clientId = 31442, sell = 240 },
- { itemName = "lancer beetle shell", clientId = 10455, sell = 80 },
- { itemName = "lancet", clientId = 18925, sell = 90 },
- { itemName = "lava fungus head", clientId = 36785, sell = 900 },
- { itemName = "lava fungus ring", clientId = 36786, sell = 390 },
- { itemName = "lavaworm jaws", clientId = 36771, sell = 1100 },
- { itemName = "lavaworm spike roots", clientId = 36769, sell = 600 },
- { itemName = "lavaworm spikes", clientId = 36770, sell = 750 },
- { itemName = "lavos armor", clientId = 8049, sell = 16000 },
- { itemName = "leaf legs", clientId = 9014, sell = 500 },
- { itemName = "leaf star", clientId = 25735, sell = 50 },
- { itemName = "leather armor", clientId = 3361, sell = 12 },
- { itemName = "leather boots", clientId = 3552, sell = 2 },
- { itemName = "leather helmet", clientId = 3355, sell = 4 },
- { itemName = "leather legs", clientId = 3559, sell = 9 },
- { itemName = "legion helmet", clientId = 3374, sell = 22 },
- { itemName = "legionnaire flags", clientId = 10417, sell = 500 },
- { itemName = "leopard armor", clientId = 3404, sell = 1000 },
- { itemName = "leviathan's amulet", clientId = 9303, sell = 3000 },
- { itemName = "life crystal", clientId = 3061, sell = 85 },
- { itemName = "life preserver", clientId = 17813, sell = 300 },
- { itemName = "life ring", clientId = 3052, sell = 50 },
- { itemName = "light shovel", clientId = 5710, sell = 300 },
- { itemName = "lightning boots", clientId = 820, sell = 2500 },
- { itemName = "lightning headband", clientId = 828, sell = 2500 },
- { itemName = "lightning legs", clientId = 822, sell = 11000 },
- { itemName = "lightning pendant", clientId = 816, sell = 1500 },
- { itemName = "lightning robe", clientId = 825, sell = 11000 },
- { itemName = "liodile fang", clientId = 40583, sell = 480 },
- { itemName = "lion cloak patch", clientId = 34162, sell = 190 },
- { itemName = "lion crest", clientId = 34160, sell = 270 },
- { itemName = "lion figurine", clientId = 33781, sell = 10000 },
- { itemName = "lion seal", clientId = 34163, sell = 210 },
- { itemName = "lion trophy", clientId = 7400, sell = 3000 },
- { itemName = "lion's mane", clientId = 9691, sell = 60 },
- { itemName = "little bowl of myrrh", clientId = 25702, sell = 500 },
- { itemName = "lizard essence", clientId = 11680, sell = 300 },
- { itemName = "lizard heart", clientId = 31340, sell = 530 },
- { itemName = "lizard leather", clientId = 5876, sell = 150 },
- { itemName = "lizard scale", clientId = 5881, sell = 120 },
- { itemName = "lizard trophy", clientId = 10419, sell = 8000 },
- { itemName = "longing eyes", clientId = 27624, sell = 8000 },
- { itemName = "longsword", clientId = 3285, sell = 51 },
- { itemName = "lost basher's spike", clientId = 17826, sell = 280 },
- { itemName = "lost bracers", clientId = 17853, sell = 140 },
- { itemName = "lost husher's staff", clientId = 17848, sell = 250 },
- { itemName = "lost soul", clientId = 32227, sell = 120 },
- { itemName = "luminescent crystal pickaxe", clientId = 32711, sell = 50 },
- { itemName = "luminous orb", clientId = 11454, sell = 1000 },
- { itemName = "lump of dirt", clientId = 9692, sell = 10 },
- { itemName = "lump of earth", clientId = 10305, sell = 130 },
- { itemName = "lunar staff", clientId = 7424, sell = 5000 },
- { itemName = "mace", clientId = 3286, sell = 30 },
- { itemName = "machete", clientId = 3308, sell = 6 },
- { itemName = "mad froth", clientId = 17854, sell = 80 },
- { itemName = "magic light wand", clientId = 3046, sell = 35 },
- { itemName = "magic plate armor", clientId = 3366, sell = 90000 },
- { itemName = "magic sulphur", clientId = 5904, sell = 8000 },
- { itemName = "magma amulet", clientId = 817, sell = 1500 },
- { itemName = "magma boots", clientId = 818, sell = 2500 },
- { itemName = "magma clump", clientId = 16130, sell = 570 },
- { itemName = "magma coat", clientId = 826, sell = 11000 },
- { itemName = "magma legs", clientId = 821, sell = 11000 },
- { itemName = "magma monocle", clientId = 827, sell = 2500 },
- { itemName = "makara fin", clientId = 39401, sell = 350 },
- { itemName = "makara tongue", clientId = 39402, sell = 320 },
- { itemName = "malice's horn", clientId = 33920, sell = 620000 },
- { itemName = "malice's spine", clientId = 33921, sell = 850000 },
- { itemName = "malofur's lunchbox", clientId = 30088, sell = 240000 },
- { itemName = "mammoth fur cape", clientId = 7463, sell = 6000 },
- { itemName = "mammoth fur shorts", clientId = 7464, sell = 850 },
- { itemName = "mammoth tusk", clientId = 10321, sell = 100 },
- { itemName = "mammoth whopper", clientId = 7381, sell = 300 },
- { itemName = "mandrake", clientId = 5014, sell = 5000 },
- { itemName = "mantassin tail", clientId = 11489, sell = 280 },
- { itemName = "manticore ear", clientId = 31440, sell = 310 },
- { itemName = "manticore tail", clientId = 31439, sell = 220 },
- { itemName = "mantosaurus jaw", clientId = 39386, sell = 2998 },
- { itemName = "marlin trophy", clientId = 902, sell = 5000 },
- { itemName = "marsh stalker beak", clientId = 17461, sell = 65 },
- { itemName = "marsh stalker feather", clientId = 17462, sell = 50 },
- { itemName = "mastermind potion", clientId = 7440, sell = 500 },
- { itemName = "mastermind shield", clientId = 3414, sell = 50000 },
- { itemName = "maxilla", clientId = 12315, sell = 250 },
- { itemName = "maxxenius head", clientId = 29942, sell = 500000 },
- { itemName = "meat hammer", clientId = 32093, sell = 60 },
- { itemName = "medal of valiance", clientId = 31591, sell = 410000 },
- { itemName = "medusa shield", clientId = 3436, sell = 9000 },
- { itemName = "megalomania's essence", clientId = 33928, sell = 1900000 },
- { itemName = "megalomania's skull", clientId = 33925, sell = 1500000 },
- { itemName = "mercenary sword", clientId = 7386, sell = 12000 },
- { itemName = "mercurial wing", clientId = 39395, sell = 2500 },
- { itemName = "metal bat", clientId = 21171, sell = 9000 },
- { itemName = "metal jaw", clientId = 21193, sell = 260 },
- { itemName = "metal spats", clientId = 21169, sell = 2000 },
- { itemName = "metal spike", clientId = 10298, sell = 320 },
- { itemName = "metal toe", clientId = 21198, sell = 430 },
- { itemName = "might ring", clientId = 3048, sell = 250, count = 20 },
- { itemName = "milk churn", clientId = 32011, sell = 100 },
- { itemName = "mind stone", clientId = 3062, sell = 100 },
- { itemName = "mino lance", clientId = 21174, sell = 7000 },
- { itemName = "mino shield", clientId = 21175, sell = 3000 },
- { itemName = "minotaur horn", clientId = 11472, sell = 75 },
- { itemName = "minotaur leather", clientId = 5878, sell = 80 },
- { itemName = "minotaur trophy", clientId = 7401, sell = 500 },
- { itemName = "miraculum", clientId = 11474, sell = 60 },
- { itemName = "model ship", clientId = 2994, sell = 1000 },
- { itemName = "modified crossbow", clientId = 8021, sell = 10000 },
- { itemName = "mooh'tah plate", clientId = 21166, sell = 6000 },
- { itemName = "mooh'tah shell", clientId = 21202, sell = 110 },
- { itemName = "moohtant cudgel", clientId = 21173, sell = 14000 },
- { itemName = "moohtant horn", clientId = 21200, sell = 140 },
- { itemName = "moonlight rod", clientId = 3070, sell = 200 },
- { itemName = "moonstone", clientId = 32771, sell = 13000 },
- { itemName = "morbid tapestry", clientId = 34170, sell = 30000 },
- { itemName = "morgaroth's heart", clientId = 5943, sell = 15000 },
- { itemName = "morshabaal's brain", clientId = 37613, sell = 15000 },
- { itemName = "morshabaal's extract", clientId = 37810, sell = 3250000 },
- { itemName = "morning star", clientId = 3282, sell = 100 },
- { itemName = "mother soil", clientId = 947, sell = 5000 },
- { itemName = "mould heart", clientId = 34141, sell = 2100 },
- { itemName = "mould robe", clientId = 34148, sell = 1200 },
- { itemName = "mouldy powder", clientId = 35596, sell = 200 },
- { itemName = "mr. punish's handcuffs", clientId = 6537, sell = 50000 },
- { itemName = "muck rod", clientId = 16117, sell = 6000 },
- { itemName = "mucus plug", clientId = 16102, sell = 500 },
- { itemName = "mutated bat ear", clientId = 9662, sell = 420 },
- { itemName = "mutated flesh", clientId = 10308, sell = 50 },
- { itemName = "mutated rat tail", clientId = 9668, sell = 150 },
- { itemName = "mycological bow", clientId = 16164, sell = 35000 },
- { itemName = "mysterious fetish", clientId = 3078, sell = 50 },
- { itemName = "mysterious voodoo skull", clientId = 5668, sell = 4000 },
- { itemName = "mystic blade", clientId = 7384, sell = 30000 },
- { itemName = "mystic turban", clientId = 3574, sell = 150 },
- { itemName = "mystical hourglass", clientId = 9660, sell = 700 },
- { itemName = "naga archer scales", clientId = 39413, sell = 340 },
- { itemName = "naga armring", clientId = 39411, sell = 390 },
- { itemName = "naga earring", clientId = 39412, sell = 380 },
- { itemName = "naga warrior scales", clientId = 39414, sell = 340 },
- { itemName = "naginata", clientId = 3314, sell = 2000 },
- { itemName = "natural soil", clientId = 940, sell = 2000 },
- { itemName = "necklace of the deep", clientId = 13990, sell = 3000 },
- { itemName = "necromantic robe", clientId = 11475, sell = 250 },
- { itemName = "necromantic rust", clientId = 21196, sell = 390 },
- { itemName = "necrotic rod", clientId = 3069, sell = 1000 },
- { itemName = "nettle blossom", clientId = 10314, sell = 75 },
- { itemName = "nettle spit", clientId = 11476, sell = 25 },
- { itemName = "neutral matter", clientId = 954, sell = 5000 },
- { itemName = "nighthunter wing", clientId = 39381, sell = 2000 },
- { itemName = "nightmare blade", clientId = 7418, sell = 35000 },
- { itemName = "noble amulet", clientId = 31595, sell = 430000 },
- { itemName = "noble armor", clientId = 3380, sell = 900 },
- { itemName = "noble axe", clientId = 7456, sell = 10000 },
- { itemName = "noble cape", clientId = 31593, sell = 425000 },
- { itemName = "noble turban", clientId = 11486, sell = 430 },
- { itemName = "norse shield", clientId = 7460, sell = 1500 },
- { itemName = "northwind rod", clientId = 8083, sell = 1500 },
- { itemName = "nose ring", clientId = 5804, sell = 2000 },
- { itemName = "obsidian lance", clientId = 3313, sell = 500 },
- { itemName = "odd organ", clientId = 23510, sell = 410 },
- { itemName = "ogre ear stud", clientId = 22188, sell = 180 },
- { itemName = "ogre nose ring", clientId = 22189, sell = 210 },
- { itemName = "old parchment", clientId = 4831, sell = 500 },
- { itemName = "old girtablilu carapace", clientId = 36972, sell = 570 },
- { itemName = "one of timira's many heads", clientId = 39399, sell = 215000 },
- { itemName = "onyx chip", clientId = 22193, sell = 500 },
- { itemName = "onyx flail", clientId = 7421, sell = 22000 },
- { itemName = "onyx pendant", clientId = 22195, sell = 3500 },
- { itemName = "opal", clientId = 22194, sell = 500 },
- { itemName = "orange mushroom", clientId = 3726, sell = 150 },
- { itemName = "orb", clientId = 3060, sell = 750 },
- { itemName = "orc leather", clientId = 11479, sell = 30 },
- { itemName = "orc tooth", clientId = 10196, sell = 150 },
- { itemName = "orc trophy", clientId = 7395, sell = 1000 },
- { itemName = "orc tusk", clientId = 7786, sell = 700 },
- { itemName = "orcish axe", clientId = 3316, sell = 350 },
- { itemName = "orcish gear", clientId = 11477, sell = 85 },
- { itemName = "orcish maul", clientId = 7392, sell = 6000 },
- { itemName = "orichalcum pearl", clientId = 5021, sell = 40 },
- { itemName = "oriental shoes", clientId = 21981, sell = 15000 },
- { itemName = "ornamented axe", clientId = 7411, sell = 20000 },
- { itemName = "ornamented shield", clientId = 3424, sell = 1500 },
- { itemName = "ornate chestplate", clientId = 13993, sell = 60000 },
- { itemName = "ornate crossbow", clientId = 14247, sell = 12000 },
- { itemName = "ornate legs", clientId = 13999, sell = 40000 },
- { itemName = "ornate locket", clientId = 30056, sell = 18000 },
- { itemName = "ornate mace", clientId = 14001, sell = 42000 },
- { itemName = "ornate shield", clientId = 14000, sell = 42000 },
- { itemName = "orshabaal's brain", clientId = 5808, sell = 12000 },
- { itemName = "pair of hellflayer horns", clientId = 22729, sell = 1300 },
- { itemName = "pair of iron fists", clientId = 17828, sell = 4000 },
- { itemName = "pair of old bracers", clientId = 32705, sell = 500 },
- { itemName = "paladin armor", clientId = 8063, sell = 15000 },
- { itemName = "pale worm's scalp", clientId = 32598, sell = 489000 },
- { itemName = "panda teddy", clientId = 5080, sell = 30000 },
- { itemName = "panpipes", clientId = 2953, sell = 150 },
- { itemName = "panther head", clientId = 12039, sell = 750 },
- { itemName = "panther paw", clientId = 12040, sell = 300 },
- { itemName = "parder fur", clientId = 39418, sell = 150 },
- { itemName = "parder tooth", clientId = 39417, sell = 150 },
- { itemName = "patch of fine cloth", clientId = 28821, sell = 1350 },
- { itemName = "patched boots", clientId = 3550, sell = 2000 },
- { itemName = "peacock feather fan", clientId = 21975, sell = 350 },
- { itemName = "pelvis bone", clientId = 11481, sell = 30 },
- { itemName = "percht horns", clientId = 30186, sell = 200 },
- { itemName = "perfect behemoth fang", clientId = 5893, sell = 250 },
- { itemName = "pet pig", clientId = 16165, sell = 1500 },
- { itemName = "petrified scream", clientId = 10420, sell = 250 },
- { itemName = "phantasmal hair", clientId = 32704, sell = 500 },
- { itemName = "pharaoh banner", clientId = 12483, sell = 1000 },
- { itemName = "pharaoh sword", clientId = 3334, sell = 23000 },
- { itemName = "phoenix shield", clientId = 3439, sell = 16000 },
- { itemName = "pick", clientId = 3456, sell = 15 },
- { itemName = "piece of archer armor", clientId = 11483, sell = 20 },
- { itemName = "piece of crocodile leather", clientId = 10279, sell = 15 },
- { itemName = "piece of dead brain", clientId = 9663, sell = 420 },
- { itemName = "piece of draconian steel", clientId = 5889, sell = 3000 },
- { itemName = "piece of hell steel", clientId = 5888, sell = 500 },
- { itemName = "piece of hellfire armor", clientId = 9664, sell = 550 },
- { itemName = "piece of massacre's shell", clientId = 6540, sell = 50000 },
- { itemName = "piece of royal steel", clientId = 5887, sell = 10000 },
- { itemName = "piece of scarab shell", clientId = 9641, sell = 45 },
- { itemName = "piece of swampling wood", clientId = 17823, sell = 30 },
- { itemName = "piece of timira's sensors", clientId = 39400, sell = 150000 },
- { itemName = "piece of warrior armor", clientId = 11482, sell = 50 },
- { itemName = "pieces of magic chalk", clientId = 18930, sell = 210 },
- { itemName = "pig foot", clientId = 9693, sell = 10 },
- { itemName = "pile of grave earth", clientId = 11484, sell = 25 },
- { itemName = "pirat's tail", clientId = 35573, sell = 180 },
- { itemName = "pirate boots", clientId = 5461, sell = 3000 },
- { itemName = "pirate coin", clientId = 35572, sell = 110 },
- { itemName = "pirate hat", clientId = 6096, sell = 1000 },
- { itemName = "pirate knee breeches", clientId = 5918, sell = 200 },
- { itemName = "pirate shirt", clientId = 6095, sell = 500 },
- { itemName = "pirate voodoo doll", clientId = 5810, sell = 500 },
- { itemName = "plagueroot offshoot", clientId = 30087, sell = 280000 },
- { itemName = "plasma pearls", clientId = 23506, sell = 250 },
- { itemName = "plasmatic lightning", clientId = 23520, sell = 270 },
- { itemName = "plate armor", clientId = 3357, sell = 400 },
- { itemName = "plate legs", clientId = 3557, sell = 115 },
- { itemName = "plate shield", clientId = 3410, sell = 45 },
- { itemName = "platinum amulet", clientId = 3055, sell = 2500 },
- { itemName = "poison dagger", clientId = 3299, sell = 50 },
- { itemName = "poison gland", clientId = 29348, sell = 210 },
- { itemName = "poison spider shell", clientId = 11485, sell = 10 },
- { itemName = "poisoned fang", clientId = 21195, sell = 130 },
- { itemName = "poisonous slime", clientId = 9640, sell = 50 },
- { itemName = "polar bear paw", clientId = 9650, sell = 30 },
- { itemName = "pool of chitinous glue", clientId = 20207, sell = 480 },
- { itemName = "porcelain mask", clientId = 25088, sell = 2000 },
- { itemName = "powder herb", clientId = 3739, sell = 10 },
- { itemName = "power ring", clientId = 3050, sell = 50 },
- { itemName = "prehemoth claw", clientId = 39383, sell = 2300 },
- { itemName = "prehemoth horns", clientId = 39382, sell = 3000 },
- { itemName = "prismatic quartz", clientId = 24962, sell = 450 },
- { itemName = "pristine worm head", clientId = 27618, sell = 15000 },
- { itemName = "protection amulet", clientId = 3084, sell = 100, count = 250 },
- { itemName = "protective charm", clientId = 11444, sell = 60 },
- { itemName = "pulverized ore", clientId = 16133, sell = 400 },
- { itemName = "purified soul", clientId = 32228, sell = 260 },
- { itemName = "purple robe", clientId = 11473, sell = 110 },
- { itemName = "purple tome", clientId = 2848, sell = 2000 },
- { itemName = "quara bone", clientId = 11491, sell = 500 },
- { itemName = "quara eye", clientId = 11488, sell = 350 },
- { itemName = "quara pincers", clientId = 11490, sell = 410 },
- { itemName = "quara tentacle", clientId = 11487, sell = 140 },
- { itemName = "queen's sceptre", clientId = 7410, sell = 20000 },
- { itemName = "quill", clientId = 28567, sell = 1100 },
- { itemName = "rabbit's foot", clientId = 12172, sell = 50 },
- { itemName = "ragnir helmet", clientId = 7462, sell = 400 },
- { itemName = "rainbow quartz", clientId = 25737, sell = 800 },
- { itemName = "rapier", clientId = 3272, sell = 5 },
- { itemName = "rare earth", clientId = 27301, sell = 80 },
- { itemName = "ratana", clientId = 17812, sell = 500 },
- { itemName = "ratmiral's hat", clientId = 35613, sell = 150000 },
- { itemName = "ravenous circlet", clientId = 32597, sell = 220000 },
- { itemName = "red crystal fragment", clientId = 16126, sell = 800 },
- { itemName = "red dragon leather", clientId = 5948, sell = 200 },
- { itemName = "red dragon scale", clientId = 5882, sell = 200 },
- { itemName = "red gem", clientId = 3039, sell = 1000 },
- { itemName = "red goanna scale", clientId = 31558, sell = 270 },
- { itemName = "red hair dye", clientId = 17855, sell = 40 },
- { itemName = "red lantern", clientId = 10289, sell = 250 },
- { itemName = "red piece of cloth", clientId = 5911, sell = 300 },
- { itemName = "red tome", clientId = 2852, sell = 2000 },
- { itemName = "relic sword", clientId = 7383, sell = 25000 },
- { itemName = "rhindeer antlers", clientId = 40587, sell = 680 },
- { itemName = "rhino hide", clientId = 24388, sell = 175 },
- { itemName = "rhino horn carving", clientId = 24386, sell = 300 },
- { itemName = "rhino horn", clientId = 24389, sell = 265 },
- { itemName = "rift bow", clientId = 22866, sell = 45000 },
- { itemName = "rift crossbow", clientId = 22867, sell = 45000 },
- { itemName = "rift lance", clientId = 22727, sell = 30000 },
- { itemName = "rift shield", clientId = 22726, sell = 50000 },
- { itemName = "ring of blue plasma", clientId = 23529, sell = 8000 },
- { itemName = "ring of green plasma", clientId = 23531, sell = 8000 },
- { itemName = "ring of healing", clientId = 3098, sell = 100 },
- { itemName = "ring of red plasma", clientId = 23533, sell = 8000 },
- { itemName = "ring of the sky", clientId = 3006, sell = 30000 },
- { itemName = "ripptor claw", clientId = 39389, sell = 2000 },
- { itemName = "ripptor scales", clientId = 39391, sell = 1200 },
- { itemName = "ritual tooth", clientId = 40528, sell = 135 },
- { itemName = "rod", clientId = 33929, sell = 2200 },
- { itemName = "rogue naga scales", clientId = 39416, sell = 570 },
- { itemName = "roots", clientId = 33938, sell = 1200 },
- { itemName = "rope belt", clientId = 11492, sell = 66 },
- { itemName = "rope", clientId = 3003, sell = 15 },
- { itemName = "rorc egg", clientId = 18996, sell = 120 },
- { itemName = "rorc feather", clientId = 18993, sell = 70 },
- { itemName = "rotten feather", clientId = 40527, sell = 120 },
- { itemName = "rotten heart", clientId = 31589, sell = 74000 },
- { itemName = "rotten piece of cloth", clientId = 10291, sell = 30 },
- { itemName = "royal almandine", clientId = 39038, sell = 460000 },
- { itemName = "royal axe", clientId = 7434, sell = 40000 },
- { itemName = "royal helmet", clientId = 3392, sell = 30000 },
- { itemName = "rubber cap", clientId = 21165, sell = 11000 },
- { itemName = "ruby necklace", clientId = 3016, sell = 2000 },
- { itemName = "runed sword", clientId = 7417, sell = 45000 },
- { itemName = "ruthless axe", clientId = 6553, sell = 45000 },
- { itemName = "sabre", clientId = 3273, sell = 12 },
- { itemName = "sabretooth fur", clientId = 39378, sell = 2500 },
- { itemName = "sabretooth", clientId = 10311, sell = 400 },
- { itemName = "sacred tree amulet", clientId = 9302, sell = 3000 },
- { itemName = "safety pin", clientId = 11493, sell = 120 },
- { itemName = "sai", clientId = 10389, sell = 16500 },
- { itemName = "sample of monster blood", clientId = 27874, sell = 250 },
- { itemName = "sandcrawler shell", clientId = 10456, sell = 20 },
- { itemName = "sapphire hammer", clientId = 7437, sell = 7000 },
- { itemName = "scale armor", clientId = 3377, sell = 75 },
- { itemName = "scale of corruption", clientId = 11673, sell = 680 },
- { itemName = "scale of gelidrazah", clientId = 24939, sell = 10000 },
- { itemName = "scarab amulet", clientId = 3018, sell = 200 },
- { itemName = "scarab coin", clientId = 3042, sell = 100 },
- { itemName = "scarab pincers", clientId = 9631, sell = 280 },
- { itemName = "scarab shield", clientId = 3440, sell = 2000 },
- { itemName = "scimitar", clientId = 3307, sell = 150 },
- { itemName = "scorpion charm", clientId = 36822, sell = 620 },
- { itemName = "scorpion tail", clientId = 9651, sell = 25 },
- { itemName = "scroll of heroic deeds", clientId = 11510, sell = 230 },
- { itemName = "scythe leg", clientId = 10312, sell = 450 },
- { itemName = "scythe", clientId = 3453, sell = 10 },
- { itemName = "sea horse figurine", clientId = 31323, sell = 42000 },
- { itemName = "sea serpent scale", clientId = 9666, sell = 520 },
- { itemName = "sea serpent trophy", clientId = 9613, sell = 10000 },
- { itemName = "seacrest hair", clientId = 21801, sell = 260 },
- { itemName = "seacrest pearl", clientId = 21747, sell = 400 },
- { itemName = "seacrest scale", clientId = 21800, sell = 150 },
- { itemName = "second verse of the hymn", clientId = 6088, sell = 250 },
- { itemName = "seeds", clientId = 647, sell = 150 },
- { itemName = "serpent sword", clientId = 3297, sell = 900 },
- { itemName = "shadow herb", clientId = 3740, sell = 20 },
- { itemName = "shadow sceptre", clientId = 7451, sell = 10000 },
- { itemName = "shaggy tail", clientId = 10407, sell = 25 },
- { itemName = "shamanic hood", clientId = 11478, sell = 45 },
- { itemName = "shamanic talisman", clientId = 22184, sell = 200 },
- { itemName = "shard", clientId = 7290, sell = 2000 },
- { itemName = "shark fins", clientId = 35574, sell = 250 },
- { itemName = "shimmering beetles", clientId = 25693, sell = 150 },
- { itemName = "shiny stone", clientId = 10310, sell = 500 },
- { itemName = "shockwave amulet", clientId = 9304, sell = 3000 },
- { itemName = "short sword", clientId = 3294, sell = 10 },
- { itemName = "shovel", clientId = 3457, sell = 8 },
- { itemName = "sickle", clientId = 3293, sell = 3 },
- { itemName = "sight of surrender's eye", clientId = 20183, sell = 3000 },
- { itemName = "signet ring", clientId = 31592, sell = 480000 },
- { itemName = "silencer claws", clientId = 20200, sell = 390 },
- { itemName = "silencer resonating chamber", clientId = 20201, sell = 600 },
- { itemName = "silken bookmark", clientId = 28566, sell = 1300 },
- { itemName = "silkweaver bow", clientId = 8029, sell = 12000 },
- { itemName = "silky fur", clientId = 10292, sell = 35 },
- { itemName = "silver amulet", clientId = 3054, sell = 50, count = 200 },
- { itemName = "silver brooch", clientId = 3017, sell = 150 },
- { itemName = "silver dagger", clientId = 3290, sell = 500 },
- { itemName = "silver fafnar trophy", clientId = 9627, sell = 1000 },
- { itemName = "silver hand mirror", clientId = 32772, sell = 10000 },
- { itemName = "silver rune emblem explosion", clientId = 11607, sell = 5000 },
- { itemName = "silver rune emblem heavy magic missile", clientId = 11605, sell = 5000 },
- { itemName = "silver rune emblem sudden death", clientId = 11609, sell = 5000 },
- { itemName = "silver rune emblem ultimate healing", clientId = 11603, sell = 5000 },
- { itemName = "single human eye", clientId = 25701, sell = 1000 },
- { itemName = "skeleton decoration", clientId = 6525, sell = 3000 },
- { itemName = "skull belt", clientId = 11480, sell = 80 },
- { itemName = "skull coin", clientId = 32583, sell = 12000 },
- { itemName = "skull fetish", clientId = 22191, sell = 250 },
- { itemName = "skull helmet", clientId = 5741, sell = 40000 },
- { itemName = "skull shatterer", clientId = 17849, sell = 170 },
- { itemName = "skull staff", clientId = 3324, sell = 6000 },
- { itemName = "skullcracker armor", clientId = 8061, sell = 18000 },
- { itemName = "skunk tail", clientId = 10274, sell = 50 },
- { itemName = "slime heart", clientId = 21194, sell = 160 },
- { itemName = "slime mould", clientId = 12601, sell = 175 },
- { itemName = "slimy leaf tentacle", clientId = 21197, sell = 320 },
- { itemName = "slimy leg", clientId = 27623, sell = 4500 },
- { itemName = "sling herb", clientId = 3738, sell = 10 },
- { itemName = "small amethyst", clientId = 3033, sell = 200 },
- { itemName = "small axe", clientId = 3462, sell = 5 },
- { itemName = "small diamond", clientId = 3028, sell = 300 },
- { itemName = "small emerald", clientId = 3032, sell = 250 },
- { itemName = "small enchanted amethyst", clientId = 678, sell = 200 },
- { itemName = "small enchanted emerald", clientId = 677, sell = 250 },
- { itemName = "small enchanted ruby", clientId = 676, sell = 250 },
- { itemName = "small enchanted sapphire", clientId = 675, sell = 250 },
- { itemName = "small energy ball", clientId = 23524, sell = 250 },
- { itemName = "small flask of eyedrops", clientId = 11512, sell = 95 },
- { itemName = "small notebook", clientId = 11450, sell = 480 },
- { itemName = "small oil lamp", clientId = 2933, sell = 150 },
- { itemName = "small pitchfork", clientId = 11513, sell = 70 },
- { itemName = "small ruby", clientId = 3030, sell = 250 },
- { itemName = "small sapphire", clientId = 3029, sell = 250 },
- { itemName = "small topaz", clientId = 9057, sell = 200 },
- { itemName = "small treasure chest", clientId = 35571, sell = 500 },
- { itemName = "small tropical fish", clientId = 39408, sell = 380 },
- { itemName = "smoldering eye", clientId = 39543, sell = 470000 },
- { itemName = "snake skin", clientId = 9694, sell = 400 },
- { itemName = "snakebite rod", clientId = 3066, sell = 100 },
- { itemName = "sniper gloves", clientId = 5875, sell = 2000 },
- { itemName = "soldier helmet", clientId = 3375, sell = 16 },
- { itemName = "solid rage", clientId = 23517, sell = 310 },
- { itemName = "some grimeleech wings", clientId = 22730, sell = 1200 },
- { itemName = "soul stone", clientId = 5809, sell = 6000 },
- { itemName = "souleater trophy", clientId = 11679, sell = 7500 },
- { itemName = "sparkion claw", clientId = 23502, sell = 290 },
- { itemName = "sparkion legs", clientId = 23504, sell = 310 },
- { itemName = "spark sphere", clientId = 23518, sell = 350 },
- { itemName = "sparkion stings", clientId = 23505, sell = 280 },
- { itemName = "sparkion tail", clientId = 23503, sell = 300 },
- { itemName = "spectral gold nugget", clientId = 32724, sell = 500 },
- { itemName = "spectral silver nugget", clientId = 32725, sell = 250 },
- { itemName = "spectral stone", clientId = 4840, sell = 50 },
- { itemName = "spellbook of enlightenment", clientId = 8072, sell = 4000 },
- { itemName = "spellbook of lost souls", clientId = 8075, sell = 19000 },
- { itemName = "spellbook of mind control", clientId = 8074, sell = 13000 },
- { itemName = "spellbook of warding", clientId = 8073, sell = 8000 },
- { itemName = "spellsinger's seal", clientId = 14008, sell = 280 },
- { itemName = "spellwand", clientId = 651, sell = 299 },
- { itemName = "spellweaver's robe", clientId = 10438, sell = 12000 },
- { itemName = "sphinx feather", clientId = 31437, sell = 470 },
- { itemName = "sphinx tiara", clientId = 31438, sell = 360 },
- { itemName = "spider fangs", clientId = 8031, sell = 10 },
- { itemName = "spider silk", clientId = 5879, sell = 100 },
- { itemName = "spidris mandible", clientId = 14082, sell = 450 },
- { itemName = "spike shield", clientId = 17810, sell = 250 },
- { itemName = "spike sword", clientId = 3271, sell = 1000 },
- { itemName = "spiked iron ball", clientId = 10408, sell = 100 },
- { itemName = "spiked squelcher", clientId = 7452, sell = 5000 },
- { itemName = "spiky club", clientId = 17859, sell = 300 },
- { itemName = "spirit cloak", clientId = 8042, sell = 350 },
- { itemName = "spirit container", clientId = 5884, sell = 40000 },
- { itemName = "spite's spirit", clientId = 33926, sell = 840000 },
- { itemName = "spitter nose", clientId = 14078, sell = 340 },
- { itemName = "spooky blue eye", clientId = 9642, sell = 95 },
- { itemName = "springsprout rod", clientId = 8084, sell = 3600 },
- { itemName = "srezz' eye", clientId = 34103, sell = 300 },
- { itemName = "spool of yarn", clientId = 5886, sell = 1000 },
- { itemName = "stalking seeds", clientId = 39384, sell = 1800 },
- { itemName = "stampor horn", clientId = 12312, sell = 280 },
- { itemName = "stampor talons", clientId = 12313, sell = 150 },
- { itemName = "star amulet", clientId = 3014, sell = 500 },
- { itemName = "star herb", clientId = 3736, sell = 15 },
- { itemName = "statue of abyssador", clientId = 16232, sell = 4000 },
- { itemName = "statue of deathstrike", clientId = 16236, sell = 3000 },
- { itemName = "statue of devovorga", clientId = 4065, sell = 1500 },
- { itemName = "statue of gnomevil", clientId = 16240, sell = 2000 },
- { itemName = "stealth ring", clientId = 3049, sell = 200 },
- { itemName = "steel boots", clientId = 3554, sell = 30000 },
- { itemName = "steel helmet", clientId = 3351, sell = 293 },
- { itemName = "steel shield", clientId = 3409, sell = 80 },
- { itemName = "stone herb", clientId = 3735, sell = 20 },
- { itemName = "stone nose", clientId = 16137, sell = 590 },
- { itemName = "stone skin amulet", clientId = 3081, sell = 500, count = 5 },
- { itemName = "stone wing", clientId = 10278, sell = 120 },
- { itemName = "stonerefiner's skull", clientId = 27606, sell = 100 },
- { itemName = "strand of medusa hair", clientId = 10309, sell = 600 },
- { itemName = "strange helmet", clientId = 3373, sell = 500 },
- { itemName = "strange proto matter", clientId = 23513, sell = 300 },
- { itemName = "strange symbol", clientId = 3058, sell = 200 },
- { itemName = "strange talisman", clientId = 3045, sell = 30, count = 200 },
- { itemName = "streaked devourer eyes", clientId = 36772, sell = 500 },
- { itemName = "streaked devourer legs", clientId = 36774, sell = 600 },
- { itemName = "streaked devourer maw", clientId = 36773, sell = 400 },
- { itemName = "striped fur", clientId = 10293, sell = 50 },
- { itemName = "studded armor", clientId = 3378, sell = 25 },
- { itemName = "studded club", clientId = 3336, sell = 10 },
- { itemName = "studded helmet", clientId = 3376, sell = 20 },
- { itemName = "studded legs", clientId = 3362, sell = 15 },
- { itemName = "studded shield", clientId = 3426, sell = 16 },
- { itemName = "stuffed dragon", clientId = 5791, sell = 6000 },
- { itemName = "sulphider shell", clientId = 39375, sell = 2200 },
- { itemName = "sulphur powder", clientId = 39376, sell = 1900 },
- { itemName = "sulphurous stone", clientId = 10315, sell = 100 },
- { itemName = "summer dress", clientId = 8046, sell = 1500 },
- { itemName = "swamp grass", clientId = 9686, sell = 20 },
- { itemName = "swamplair armor", clientId = 8052, sell = 16000 },
- { itemName = "swampling club", clientId = 17824, sell = 40 },
- { itemName = "swampling moss", clientId = 17822, sell = 20 },
- { itemName = "swarmer antenna", clientId = 14076, sell = 130 },
- { itemName = "sword ring", clientId = 3091, sell = 100 },
- { itemName = "sword", clientId = 3264, sell = 25 },
- { itemName = "tail of corruption", clientId = 11672, sell = 240 },
- { itemName = "talon", clientId = 3034, sell = 320 },
- { itemName = "tarantula egg", clientId = 10281, sell = 80 },
- { itemName = "tarnished rhino figurine", clientId = 24387, sell = 320 },
- { itemName = "tattered piece of robe", clientId = 9684, sell = 120 },
- { itemName = "taurus mace", clientId = 7425, sell = 500 },
- { itemName = "telescope eye", clientId = 33934, sell = 1600 },
- { itemName = "tempest shield", clientId = 3442, sell = 35000 },
- { itemName = "tentacle of tentugly", clientId = 35611, sell = 27000 },
- { itemName = "tentacle piece", clientId = 11666, sell = 5000 },
- { itemName = "tentugly's eye", clientId = 35610, sell = 52000 },
- { itemName = "tentugly's jaws", clientId = 35612, sell = 80000 },
- { itemName = "terra amulet", clientId = 814, sell = 1500 },
- { itemName = "terra boots", clientId = 813, sell = 2500 },
- { itemName = "terra hood", clientId = 830, sell = 2500 },
- { itemName = "terra legs", clientId = 812, sell = 11000 },
- { itemName = "terra mantle", clientId = 811, sell = 11000 },
- { itemName = "terra rod", clientId = 3065, sell = 2000 },
- { itemName = "terramite eggs", clientId = 10453, sell = 50 },
- { itemName = "terramite legs", clientId = 10454, sell = 60 },
- { itemName = "terramite shell", clientId = 10452, sell = 170 },
- { itemName = "terrorbird beak", clientId = 10273, sell = 95 },
- { itemName = "thaian sword", clientId = 7391, sell = 16000 },
- { itemName = "the avenger", clientId = 6527, sell = 42000 },
- { itemName = "the handmaiden's protector", clientId = 6539, sell = 50000 },
- { itemName = "the imperor's trident", clientId = 6534, sell = 50000 },
- { itemName = "the ironworker", clientId = 8025, sell = 50000 },
- { itemName = "the justice seeker", clientId = 7390, sell = 40000 },
- { itemName = "the plasmother's remains", clientId = 6535, sell = 50000 },
- { itemName = "thick fur", clientId = 10307, sell = 150 },
- { itemName = "third verse of the hymn", clientId = 6089, sell = 400 },
- { itemName = "thorn", clientId = 9643, sell = 100 },
- { itemName = "throwing knife", clientId = 3298, sell = 2 },
- { itemName = "tiara", clientId = 35578, sell = 11000 },
- { itemName = "tiger eye", clientId = 24961, sell = 350 },
- { itemName = "time ring", clientId = 3053, sell = 100 },
- { itemName = "titan axe", clientId = 7413, sell = 4000 },
- { itemName = "token of love", clientId = 31594, sell = 440000 },
- { itemName = "tooth file", clientId = 18924, sell = 60 },
- { itemName = "tooth of tazhadur", clientId = 24940, sell = 10000 },
- { itemName = "torn shirt", clientId = 25744, sell = 250 },
- { itemName = "tortoise shield", clientId = 6131, sell = 150 },
- { itemName = "tower shield", clientId = 3428, sell = 8000 },
- { itemName = "trapped bad dream monster", clientId = 20203, sell = 900 },
- { itemName = "tremendous tyrant head", clientId = 36783, sell = 930 },
- { itemName = "tremendous tyrant shell", clientId = 36784, sell = 740 },
- { itemName = "tribal mask", clientId = 3403, sell = 250 },
- { itemName = "troll green", clientId = 3741, sell = 25 },
- { itemName = "trollroot", clientId = 11515, sell = 50 },
- { itemName = "trophy of jaul", clientId = 14006, sell = 4000 },
- { itemName = "trophy of obujos", clientId = 14002, sell = 3000 },
- { itemName = "trophy of tanjis", clientId = 14004, sell = 2000 },
- { itemName = "tunnel tyrant head", clientId = 27595, sell = 500 },
- { itemName = "tunnel tyrant shell", clientId = 27596, sell = 700 },
- { itemName = "turtle shell", clientId = 5899, sell = 90 },
- { itemName = "tusk", clientId = 3044, sell = 100 },
- { itemName = "twiceslicer", clientId = 11657, sell = 28000 },
- { itemName = "twin hooks", clientId = 10392, sell = 500 },
- { itemName = "two handed sword", clientId = 3265, sell = 450 },
- { itemName = "two-headed turtle heads", clientId = 39409, sell = 460 },
- { itemName = "undead heart", clientId = 10450, sell = 200 },
- { itemName = "undertaker fangs", clientId = 39380, sell = 2700 },
- { itemName = "underworld rod", clientId = 8082, sell = 4400 },
- { itemName = "unholy bone", clientId = 10316, sell = 480 },
- { itemName = "unholy book", clientId = 6103, sell = 30000 },
- { itemName = "unicorn figurine", clientId = 30054, sell = 50000 },
- { itemName = "urmahlullus mane", clientId = 31623, sell = 490000 },
- { itemName = "urmahlullus paws", clientId = 31624, sell = 245000 },
- { itemName = "urmahlullus tail", clientId = 31622, sell = 210000 },
- { itemName = "utua's poison", clientId = 34101, sell = 230 },
- { itemName = "vampire dust", clientId = 5905, sell = 100 },
- { itemName = "vampire shield", clientId = 3434, sell = 15000 },
- { itemName = "vampire teeth", clientId = 9685, sell = 275 },
- { itemName = "vampire's cape chain", clientId = 18927, sell = 150 },
- { itemName = "varnished diremaw brainpan", clientId = 36781, sell = 750 },
- { itemName = "varnished diremaw legs", clientId = 36782, sell = 670 },
- { itemName = "veal", clientId = 32009, sell = 40 },
- { itemName = "vein of ore", clientId = 16135, sell = 330 },
- { itemName = "venison", clientId = 18995, sell = 55 },
- { itemName = "vexclaw talon", clientId = 22728, sell = 1100 },
- { itemName = "vial of hatred", clientId = 33927, sell = 737000 },
- { itemName = "vial", clientId = 2874, sell = 5 },
- { itemName = "vibrant heart", clientId = 34143, sell = 2100 },
- { itemName = "vibrant robe", clientId = 34144, sell = 1200 },
- { itemName = "viking helmet", clientId = 3367, sell = 66 },
- { itemName = "viking shield", clientId = 3431, sell = 85 },
- { itemName = "vile axe", clientId = 7388, sell = 30000 },
- { itemName = "violet crystal shard", clientId = 16120, sell = 1500 },
- { itemName = "violet gem", clientId = 3036, sell = 10000 },
- { itemName = "violet glass plate", clientId = 29347, sell = 2150 },
- { itemName = "volatile proto matter", clientId = 23514, sell = 300 },
- { itemName = "voodoo doll", clientId = 3002, sell = 400 },
- { itemName = "wailing widow's necklace", clientId = 10412, sell = 3000 },
- { itemName = "wand of cosmic energy", clientId = 3073, sell = 2000 },
- { itemName = "wand of decay", clientId = 3072, sell = 1000 },
- { itemName = "wand of defiance", clientId = 16096, sell = 6500 },
- { itemName = "wand of draconia", clientId = 8093, sell = 1500 },
- { itemName = "wand of dragonbreath", clientId = 3075, sell = 200 },
- { itemName = "wand of everblazing", clientId = 16115, sell = 6000 },
- { itemName = "wand of inferno", clientId = 3071, sell = 3000 },
- { itemName = "wand of starstorm", clientId = 8092, sell = 3600 },
- { itemName = "wand of voodoo", clientId = 8094, sell = 4400 },
- { itemName = "wand of vortex", clientId = 3074, sell = 100 },
- { itemName = "war axe", clientId = 3342, sell = 12000 },
- { itemName = "war crystal", clientId = 9654, sell = 460 },
- { itemName = "war hammer", clientId = 3279, sell = 1200 },
- { itemName = "war horn", clientId = 2958, sell = 8000 },
- { itemName = "warmaster's wristguards", clientId = 10405, sell = 200 },
- { itemName = "warrior helmet", clientId = 3369, sell = 5000 },
- { itemName = "warrior's axe", clientId = 14040, sell = 11000 },
- { itemName = "warrior's shield", clientId = 14042, sell = 9000 },
- { itemName = "warwolf fur", clientId = 10318, sell = 30 },
- { itemName = "waspoid claw", clientId = 14080, sell = 320 },
- { itemName = "waspoid wing", clientId = 14081, sell = 190 },
- { itemName = "watch", clientId = 2906, sell = 6 },
- { itemName = "watermelon tourmaline (slice)", clientId = 33779, sell = 30000 },
- { itemName = "watermelon tourmaline", clientId = 33780, sell = 230000 },
- { itemName = "weaver's wandtip", clientId = 10397, sell = 250 },
- { itemName = "wedding ring", clientId = 3004, sell = 100 },
- { itemName = "werebadger claws", clientId = 22051, sell = 160 },
- { itemName = "werebadger skull", clientId = 22055, sell = 185 },
- { itemName = "werebadger trophy", clientId = 22101, sell = 9000 },
- { itemName = "werebear fur", clientId = 22057, sell = 185 },
- { itemName = "werebear skull", clientId = 22056, sell = 195 },
- { itemName = "werebear trophy", clientId = 22103, sell = 11000 },
- { itemName = "wereboar hooves", clientId = 22053, sell = 175 },
- { itemName = "wereboar loincloth", clientId = 22087, sell = 1500 },
- { itemName = "wereboar trophy", clientId = 22102, sell = 10000 },
- { itemName = "wereboar tusk", clientId = 22054, sell = 165 },
- { itemName = "werefox tail", clientId = 27463, sell = 200 },
- { itemName = "werefox trophy", clientId = 27706, sell = 9000 },
- { itemName = "werehyaena nose", clientId = 33943, sell = 220 },
- { itemName = "werehyaena talisman", clientId = 33944, sell = 350 },
- { itemName = "werehyaena trophy", clientId = 34219, sell = 12000 },
- { itemName = "werewolf amulet", clientId = 22060, sell = 3000 },
- { itemName = "werewolf fangs", clientId = 22052, sell = 180 },
- { itemName = "werewolf fur", clientId = 10317, sell = 380 },
- { itemName = "white deer antlers", clientId = 12544, sell = 400 },
- { itemName = "white deer skin", clientId = 12545, sell = 245 },
- { itemName = "white gem", clientId = 32769, sell = 12000 },
- { itemName = "white pearl", clientId = 3026, sell = 160 },
- { itemName = "white piece of cloth", clientId = 5909, sell = 100 },
- { itemName = "white silk flower", clientId = 34008, sell = 9000 },
- { itemName = "widow's mandibles", clientId = 10411, sell = 110 },
- { itemName = "wild flowers", clientId = 25691, sell = 120 },
- { itemName = "wimp tooth chain", clientId = 17847, sell = 120 },
- { itemName = "windborn colossus armor", clientId = 8055, sell = 50000 },
- { itemName = "winged tail", clientId = 10313, sell = 800 },
- { itemName = "winter wolf fur", clientId = 10295, sell = 20 },
- { itemName = "witch broom", clientId = 9652, sell = 60 },
- { itemName = "witch hat", clientId = 9653, sell = 5000 },
- { itemName = "withered pauldrons", clientId = 27607, sell = 850 },
- { itemName = "withered scalp", clientId = 27608, sell = 900 },
- { itemName = "wolf paw", clientId = 5897, sell = 70 },
- { itemName = "wolf trophy", clientId = 7394, sell = 3000 },
- { itemName = "wood cape", clientId = 3575, sell = 5000 },
- { itemName = "wood mushroom", clientId = 3727, sell = 15 },
- { itemName = "wood", clientId = 5901, sell = 5 },
- { itemName = "wooden hammer", clientId = 3459, sell = 15 },
- { itemName = "wooden shield", clientId = 3412, sell = 5 },
- { itemName = "wooden spellbook", clientId = 25699, sell = 12000 },
- { itemName = "wool", clientId = 10319, sell = 15 },
- { itemName = "writhing brain", clientId = 32600, sell = 370000 },
- { itemName = "writhing heart", clientId = 32599, sell = 185000 },
- { itemName = "wyrm scale", clientId = 9665, sell = 400 },
- { itemName = "wyvern fang", clientId = 7408, sell = 1500 },
- { itemName = "wyvern talisman", clientId = 9644, sell = 265 },
- { itemName = "yellow gem", clientId = 3037, sell = 1000 },
- { itemName = "yellow piece of cloth", clientId = 5914, sell = 150 },
- { itemName = "yielocks", clientId = 12805, sell = 600 },
- { itemName = "yielowax", clientId = 12742, sell = 600 },
- { itemName = "yirkas' egg", clientId = 34102, sell = 280 },
- { itemName = "young lich worm", clientId = 31590, sell = 25000 },
- { itemName = "zaoan armor", clientId = 10384, sell = 14000 },
- { itemName = "zaoan halberd", clientId = 10406, sell = 500 },
- { itemName = "zaoan helmet", clientId = 10385, sell = 45000 },
- { itemName = "zaoan legs", clientId = 10387, sell = 14000 },
- { itemName = "zaoan robe", clientId = 10439, sell = 12000 },
- { itemName = "zaoan shoes", clientId = 10386, sell = 5000 },
- { itemName = "zaoan sword", clientId = 10390, sell = 30000 },
- { itemName = "zaogun flag", clientId = 10413, sell = 600 },
- { itemName = "zaogun's shoulderplates", clientId = 10414, sell = 150 },
+npcConfig.shop = LootShopConfig
+
+local function creatureSayCallback(npc, player, type, message)
+ local formattedCategoryNames = {}
+ for categoryName, _ in pairs(LootShopConfigTable) do
+ table.insert(formattedCategoryNames, "{" .. categoryName .. "}")
+ end
+
+ local categoryTable = LootShopConfigTable[message:lower()]
+ if MsgContains(message, "shop options") then
+ npcHandler:say("I sell a selection of " .. table.concat(formattedCategoryNames, ", "), npc, player)
+ elseif categoryTable then
+ npcHandler:say("Here are the items for the category " .. message, npc, player)
+ npc:openShopWindowTable(player, categoryTable)
+ end
+end
- { itemName = "all loot in pouch", clientId = ITEM_GOLD_POUCH, sell = 1 },
-}
+npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
+npcHandler:setMessage(MESSAGE_GREET, "Ah, a customer! Be greeted, |PLAYERNAME|! I buy all kinds of loot, would you like a {trade}? I can also show you my {shop options}.")
+npcHandler:setMessage(MESSAGE_SENDTRADE, "Ah, a customer! Be greeted, |PLAYERNAME|! I buy all kinds of loot, would you like a {trade}? I can also show you my {shop options}.")
-- On buy npc shop message
npcType.onBuyItem = function(npc, player, itemId, subType, amount, ignore, inBackpacks, totalCost)
diff --git a/data-otservbr-global/npc/undal.lua b/data-otservbr-global/npc/undal.lua
index 786487fea2c..ad0346e7e77 100644
--- a/data-otservbr-global/npc/undal.lua
+++ b/data-otservbr-global/npc/undal.lua
@@ -53,5 +53,121 @@ end
npcHandler:addModule(FocusModule:new(), npcConfig.name, true, true, true)
+local outfits = { 1147, 1146 }
+
+local function hasOutfit(player)
+ for _, outfit in ipairs(outfits) do
+ if player:hasOutfit(outfit) then
+ return true
+ end
+ end
+ return false
+end
+
+local function hasAddon(player, addon)
+ for _, outfit in ipairs(outfits) do
+ if player:hasOutfit(outfit, addon) then
+ return true
+ end
+ end
+ return false
+end
+
+local function hasKllledTheNightmareBeast(player)
+ return player:getStorageValue(Storage.Quest.U12_00.TheDreamCourts.NightmareBeastKilled) == 1
+end
+
+local function checkAchievement(player)
+ if hasAddon(player, 3) then
+ player:addAchievement("Dream Warrior")
+ end
+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 npcHandler:getTopic(playerId) == 0 then
+ if MsgContains(message, "task") or MsgContains(message, "outfit") then
+ if hasOutfit(player) then
+ npcHandler:say("You already have the Dream Warrior outfit.", npc, creature)
+ return true
+ end
+
+ if not hasKllledTheNightmareBeast(player) then
+ npcHandler:say("You need to kill the Nightmare Beast first.", npc, creature)
+ return true
+ end
+
+ npcHandler:say("The Nightmare Beast is slain. You have done well. The Courts of Summer and Winter will be forever grateful. For your efforts I want to reward you with our traditional dream warrior outfit. May it suit you well!", npc, creature)
+ for _, outfit in ipairs(outfits) do
+ player:addOutfit(outfit, 0)
+ end
+ return true
+ end
+
+ if MsgContains(message, "addon") then
+ if not hasOutfit(player) then
+ npcHandler:say("You don't have the Dream Warrior outfit.", npc, creature)
+ return true
+ end
+ npcHandler:say("Are you interested in one or two addons to your dream warrior outfit?", npc, creature)
+ npcHandler:setTopic(playerId, 1)
+ return true
+ end
+ elseif npcHandler:getTopic(playerId) == 1 then
+ if MsgContains(message, "yes") then
+ npcHandler:say("I provide two addons. For the first one I need you to bring me five pomegranates. For the second addon you need an ice shield. Which one would you like? {Pomegranate} or {shield}?", npc, creature)
+ npcHandler:setTopic(playerId, 2)
+ else
+ npcHandler:say("Alright then. Come back if you change your mind.", npc, creature)
+ npcHandler:setTopic(playerId, 0)
+ end
+ elseif npcHandler:getTopic(playerId) == 2 then
+ if MsgContains(message, "pomegranate") then
+ if hasAddon(player, 1) then
+ npcHandler:say("You already have this addon.", npc, creature)
+ return true
+ end
+ if player:removeItem(30169, 5) then
+ npcHandler:say("Great! Here is the addon.", npc, creature)
+ for _, outfit in ipairs(outfits) do
+ player:addOutfitAddon(outfit, 1)
+ end
+ player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
+ checkAchievement(player)
+ npcHandler:setTopic(playerId, 0)
+ else
+ npcHandler:say("Sorry, you don't have the required items.", npc, creature)
+ end
+ elseif MsgContains(message, "shield") then
+ if hasAddon(player, 2) then
+ npcHandler:say("You already have this addon.", npc, creature)
+ return true
+ end
+ if player:removeItem(30168, 1) then
+ npcHandler:say("Great! Here is the addon.", npc, creature)
+ for _, outfit in ipairs(outfits) do
+ player:addOutfitAddon(outfit, 2)
+ end
+ player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
+ checkAchievement(player)
+ npcHandler:setTopic(playerId, 0)
+ else
+ npcHandler:say("Sorry, you don't have the required items.", npc, creature)
+ end
+ else
+ npcHandler:say("Sorry, I didn't understand.", npc, creature)
+ return true
+ end
+ end
+end
+
+npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
+
-- npcType registering the npcConfig table
npcType:register(npcConfig)
diff --git a/data-otservbr-global/npc/vanys.lua b/data-otservbr-global/npc/vanys.lua
index 0d7c1e009ea..c922ce8c8cd 100644
--- a/data-otservbr-global/npc/vanys.lua
+++ b/data-otservbr-global/npc/vanys.lua
@@ -53,5 +53,121 @@ end
npcHandler:addModule(FocusModule:new(), npcConfig.name, true, true, true)
+local outfits = { 1147, 1146 }
+
+local function hasOutfit(player)
+ for _, outfit in ipairs(outfits) do
+ if player:hasOutfit(outfit) then
+ return true
+ end
+ end
+ return false
+end
+
+local function hasAddon(player, addon)
+ for _, outfit in ipairs(outfits) do
+ if player:hasOutfit(outfit, addon) then
+ return true
+ end
+ end
+ return false
+end
+
+local function hasKllledTheNightmareBeast(player)
+ return player:getStorageValue(Storage.Quest.U12_00.TheDreamCourts.NightmareBeastKilled) == 1
+end
+
+local function checkAchievement(player)
+ if hasAddon(player, 3) then
+ player:addAchievement("Dream Warrior")
+ end
+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 npcHandler:getTopic(playerId) == 0 then
+ if MsgContains(message, "task") or MsgContains(message, "outfit") then
+ if hasOutfit(player) then
+ npcHandler:say("You already have the Dream Warrior outfit.", npc, creature)
+ return true
+ end
+
+ if not hasKllledTheNightmareBeast(player) then
+ npcHandler:say("You need to kill the Nightmare Beast first.", npc, creature)
+ return true
+ end
+
+ npcHandler:say("The Nightmare Beast is slain. You have done well. The Courts of Summer and Winter will be forever grateful. For your efforts I want to reward you with our traditional dream warrior outfit. May it suit you well!", npc, creature)
+ for _, outfit in ipairs(outfits) do
+ player:addOutfit(outfit, 0)
+ end
+ return true
+ end
+
+ if MsgContains(message, "addon") then
+ if not hasOutfit(player) then
+ npcHandler:say("You don't have the Dream Warrior outfit.", npc, creature)
+ return true
+ end
+ npcHandler:say("Are you interested in one or two addons to your dream warrior outfit?", npc, creature)
+ npcHandler:setTopic(playerId, 1)
+ return true
+ end
+ elseif npcHandler:getTopic(playerId) == 1 then
+ if MsgContains(message, "yes") then
+ npcHandler:say("I provide two addons. For the first one I need you to bring me five pomegranates. For the second addon you need an ice shield. Which one would you like? {Pomegranate} or {shield}?", npc, creature)
+ npcHandler:setTopic(playerId, 2)
+ else
+ npcHandler:say("Alright then. Come back if you change your mind.", npc, creature)
+ npcHandler:setTopic(playerId, 0)
+ end
+ elseif npcHandler:getTopic(playerId) == 2 then
+ if MsgContains(message, "pomegranate") then
+ if hasAddon(player, 1) then
+ npcHandler:say("You already have this addon.", npc, creature)
+ return true
+ end
+ if player:removeItem(30169, 5) then
+ npcHandler:say("Great! Here is the addon.", npc, creature)
+ for _, outfit in ipairs(outfits) do
+ player:addOutfitAddon(outfit, 1)
+ end
+ player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
+ checkAchievement(player)
+ npcHandler:setTopic(playerId, 0)
+ else
+ npcHandler:say("Sorry, you don't have the required items.", npc, creature)
+ end
+ elseif MsgContains(message, "shield") then
+ if hasAddon(player, 2) then
+ npcHandler:say("You already have this addon.", npc, creature)
+ return true
+ end
+ if player:removeItem(30168, 1) then
+ npcHandler:say("Great! Here is the addon.", npc, creature)
+ for _, outfit in ipairs(outfits) do
+ player:addOutfitAddon(outfit, 2)
+ end
+ player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
+ checkAchievement(player)
+ npcHandler:setTopic(playerId, 0)
+ else
+ npcHandler:say("Sorry, you don't have the required items.", npc, creature)
+ end
+ else
+ npcHandler:say("Sorry, I didn't understand.", npc, creature)
+ return true
+ end
+ end
+end
+
+npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
+
-- npcType registering the npcConfig table
npcType:register(npcConfig)
diff --git a/data-otservbr-global/scripts/actions/addons/addons.lua b/data-otservbr-global/scripts/actions/addons/addons.lua
index 8fea3d0b074..0658ab69312 100644
--- a/data-otservbr-global/scripts/actions/addons/addons.lua
+++ b/data-otservbr-global/scripts/actions/addons/addons.lua
@@ -20,6 +20,9 @@ local config = {
-- rascoohan
[35595] = { female = 1372, male = 1371, addon = 1, achievement = "Honorary Rascoohan" },
[35695] = { female = 1372, male = 1371, addon = 2, achievement = "Honorary Rascoohan" },
+ -- fire-fighter
+ [39544] = { female = 1569, male = 1568, addon = 1, achievement = "Friendly Fire" },
+ [39545] = { female = 1569, male = 1568, addon = 2, achievement = "Friendly Fire" },
}
local addons = Action()
diff --git a/data-otservbr-global/scripts/actions/adventurers_guild/adventurers_stone.lua b/data-otservbr-global/scripts/actions/adventurers_guild/adventurers_stone.lua
index d39577418a5..ad737b276d3 100644
--- a/data-otservbr-global/scripts/actions/adventurers_guild/adventurers_stone.lua
+++ b/data-otservbr-global/scripts/actions/adventurers_guild/adventurers_stone.lua
@@ -29,7 +29,7 @@ local config = {
{ fromPos = Position(32340, 32217, 7), toPos = Position(32355, 32232, 7), townId = TOWNS_LIST.THAIS },
{ fromPos = Position(32910, 32070, 7), toPos = Position(32930, 32082, 7), townId = TOWNS_LIST.VENORE },
{ fromPos = Position(33119, 32836, 7), toPos = Position(33133, 32850, 7), townId = TOWNS_LIST.ANKRAHMUN },
- { fromPos = Position(33160, 31794, 8), toPos = Position(33175, 31814, 8), townId = TOWNS_LIST.EDRON },
+ { fromPos = Position(33160, 31794, 9), toPos = Position(33175, 31814, 8), townId = TOWNS_LIST.EDRON },
{ fromPos = Position(33018, 31448, 11), toPos = Position(33035, 31457, 11), townId = TOWNS_LIST.FARMINE },
{ fromPos = Position(33205, 32455, 8), toPos = Position(33223, 32466, 8), townId = TOWNS_LIST.DARASHIA },
{ fromPos = Position(32327, 32831, 7), toPos = Position(32340, 32847, 7), townId = TOWNS_LIST.LIBERTY_BAY },
@@ -60,7 +60,7 @@ end
function adventurersStone.onUse(player, item, fromPosition, target, toPosition, isHotkey)
local tile = Tile(player:getPosition())
- if not tile:hasFlag(TILESTATE_PROTECTIONZONE) or tile:hasFlag(TILESTATE_HOUSE) or player:isPzLocked() or player:getCondition(CONDITION_INFIGHT, CONDITIONID_DEFAULT) then
+ if not tile:hasFlag(TILESTATE_PROTECTIONZONE) or tile:hasFlag(TILESTATE_HOUSE) or player:isPzLocked() then
doNotTeleport(player)
return false
end
@@ -69,16 +69,16 @@ function adventurersStone.onUse(player, item, fromPosition, target, toPosition,
if config.enableTemples then
for _, temple in ipairs(config.Temples) do
- if isInRange(playerPos, temple.fromPos, temple.toPos) then
+ if playerPos:isInRange(temple.fromPos, temple.toPos) then
allowed, townId = true, temple.townId
break
end
end
end
- if config.enableDepots then
+ if config.enableDepots and not allowed then
for _, depot in ipairs(config.Depots) do
- if isInRange(playerPos, depot.fromPos, depot.toPos) then
+ if playerPos:isInRange(depot.fromPos, depot.toPos) then
allowed, townId = true, depot.townId
break
end
diff --git a/data-otservbr-global/scripts/actions/farmine/oberon_lever.lua b/data-otservbr-global/scripts/actions/farmine/oberon_lever.lua
index 0ec20531e46..e7a1a104d52 100644
--- a/data-otservbr-global/scripts/actions/farmine/oberon_lever.lua
+++ b/data-otservbr-global/scripts/actions/farmine/oberon_lever.lua
@@ -14,12 +14,6 @@ local config = {
from = Position(33357, 31312, 9),
to = Position(33371, 31324, 9),
},
- monsters = {
- { name = "Oberon's Bile", pos = Position(33361, 31316, 9) },
- { name = "Oberon's Hate", pos = Position(33367, 31316, 9) },
- { name = "Oberon's Spite", pos = Position(33361, 31320, 9) },
- { name = "Oberon's Ire", pos = Position(33367, 31320, 9) },
- },
exit = Position(33364, 31341, 9),
}
diff --git a/data-otservbr-global/scripts/actions/object/moonlight_crystals.lua b/data-otservbr-global/scripts/actions/object/moonlight_crystals.lua
index 76762d4a85c..e8dbf007312 100644
--- a/data-otservbr-global/scripts/actions/object/moonlight_crystals.lua
+++ b/data-otservbr-global/scripts/actions/object/moonlight_crystals.lua
@@ -2,24 +2,30 @@ local moonlightCrystals = Action()
function moonlightCrystals.onUse(player, item, fromPosition, target, toPosition, isHotkey)
if target.itemid == 22060 then
- target:transform(22061)
+ target:remove()
+ player:addItem(22061, 1)
item:remove(1)
return true
elseif target.itemid == 22062 then
if (player:getStorageValue(Storage.Grimvale.WereHelmetEnchant) == 0) or (player:getStorageValue(Storage.Grimvale.WereHelmetEnchant) == 1) then
- target:transform(24783) -- Magic level helmet
+ target:remove() -- Magic level helmet
+ player:addItem(24783, 1)
item:remove(1)
elseif player:getStorageValue(Storage.Grimvale.WereHelmetEnchant) == 2 then
- target:transform(22132) -- Paladin helmet
+ target:remove() -- Paladin helmet
+ player:addItem(22132, 1)
item:remove(1)
elseif player:getStorageValue(Storage.Grimvale.WereHelmetEnchant) == 3 then
- target:transform(22128) -- Knight club
+ target:remove() -- Knight club
+ player:addItem(22128, 1)
item:remove(1)
elseif player:getStorageValue(Storage.Grimvale.WereHelmetEnchant) == 4 then
- target:transform(22130) -- Knight axe
+ target:remove() -- Knight axe
+ player:addItem(22130, 1)
item:remove(1)
elseif player:getStorageValue(Storage.Grimvale.WereHelmetEnchant) == 5 then
- target:transform(22129) -- Knight sword
+ target:remove() -- Knight sword
+ player:addItem(22129, 1)
item:remove(1)
else
return false
diff --git a/data-otservbr-global/scripts/actions/object/rope_down.lua b/data-otservbr-global/scripts/actions/object/rope_down.lua
index f12613660cf..87d66d4b188 100644
--- a/data-otservbr-global/scripts/actions/object/rope_down.lua
+++ b/data-otservbr-global/scripts/actions/object/rope_down.lua
@@ -1,11 +1,22 @@
-local action = Action()
+local cobraBastion = Action()
-function action.onUse(player, item, fromPosition, target, toPosition, isHotkey)
+function cobraBastion.onUse(player, item, fromPosition, target, toPosition, isHotkey)
if not player then
return false
end
player:teleportTo(Position(33394, 32650, 2))
end
-action:position(Position(33395, 32651, 1))
-action:register()
+cobraBastion:position(Position(33395, 32651, 1))
+cobraBastion:register()
+
+local oskayaat = Action()
+function oskayaat.onUse(player, item, fromPosition, target, toPosition, isHotkey)
+ if not player then
+ return false
+ end
+ player:teleportTo(Position(33014, 32983, 8))
+end
+
+oskayaat:position(Position(33014, 32983, 7))
+oskayaat:register()
diff --git a/data-otservbr-global/scripts/actions/other/bag_you_covet.lua b/data-otservbr-global/scripts/actions/other/bag_you_covet.lua
index ddc381c69d1..e332d9fd3f2 100644
--- a/data-otservbr-global/scripts/actions/other/bag_you_covet.lua
+++ b/data-otservbr-global/scripts/actions/other/bag_you_covet.lua
@@ -15,7 +15,7 @@ local rewards = {
{ id = 43887, name = "Sanguine Galoshes" },
}
-BagYouCovetId = 43895
+BagYouCovetId = 43898
local bagyouCovet = Action()
diff --git a/data-otservbr-global/scripts/actions/other/dolls.lua b/data-otservbr-global/scripts/actions/other/dolls.lua
index 255bdfa21f5..32864dcd109 100644
--- a/data-otservbr-global/scripts/actions/other/dolls.lua
+++ b/data-otservbr-global/scripts/actions/other/dolls.lua
@@ -56,6 +56,12 @@ local dolls = {
"My dark magic lies on tibialatina.wikia.com",
},
[21962] = { "Hail Tibia Brasileiros! (União&Força)" },
+ [32918] = {
+ "COME HERE! FREE ITEMS FOR EVERYONE!",
+ "DON'T BE AFRAID! I AM COMING IN PEACE!",
+ "BOW TO THE POWER OF THE RUTHLESS SEVEN!",
+ "Slay your friends and I will spare you!",
+ },
}
local doll = Action()
diff --git a/data-otservbr-global/scripts/actions/other/music.lua b/data-otservbr-global/scripts/actions/other/music.lua
index 519a36e1f81..9e5cbe5cb7b 100644
--- a/data-otservbr-global/scripts/actions/other/music.lua
+++ b/data-otservbr-global/scripts/actions/other/music.lua
@@ -35,7 +35,7 @@ local MusicEffect = {
local music = Action()
function music.onUse(player, item, fromPosition, target, toPosition, isHotkey)
if item.itemid == 2949 then
- if isInRange(player:getPosition(), Position(32695, 31717, 2), Position(32699, 31719, 2)) then
+ if player:getPosition():isInRange(Position(32695, 31717, 2), Position(32699, 31719, 2)) then
local lyreProgress = player:getStorageValue(Storage.Diapason.Lyre)
if lyreProgress < 7 and player:getStorageValue(Storage.Diapason.Edala) ~= 1 and player:getStorageValue(Storage.Diapason.LyreTimer) < os.time() then
player:setStorageValue(Storage.Diapason.Lyre, math.max(0, lyreProgress) + 1)
@@ -44,7 +44,7 @@ function music.onUse(player, item, fromPosition, target, toPosition, isHotkey)
end
end
elseif item.itemid == 2953 then
- if isInRange(player:getPosition(), Position(33540, 32245, 7), Position(33542, 32247, 7)) then
+ if player:getPosition():isInRange(Position(33540, 32245, 7), Position(33542, 32247, 7)) then
local ThreatenedDreams = Storage.Quest.U11_40.ThreatenedDreams
local UnlikelyCouple = player:getStorageValue(ThreatenedDreams.Mission03.UnlikelyCouple)
local PanpipesTimer = player:getStorageValue(ThreatenedDreams.Mission03.PanpipesTimer)
diff --git a/data-otservbr-global/scripts/actions/other/potions.lua b/data-otservbr-global/scripts/actions/other/potions.lua
index 1cc63639189..febc3ed9d3e 100644
--- a/data-otservbr-global/scripts/actions/other/potions.lua
+++ b/data-otservbr-global/scripts/actions/other/potions.lua
@@ -239,7 +239,7 @@ function flaskPotion.onUse(player, item, fromPosition, target, toPosition, isHot
end
local potion = potions[item:getId()]
- if potion.level and player:getLevel() < potion.level or potion.vocations and not table.contains(potion.vocations, player:getVocation():getBaseId()) and not (player:getGroup():getId() >= 2) then
+ if potion.level and player:getLevel() < potion.level or potion.vocations and not table.contains(potion.vocations, player:getVocation():getBaseId()) and not (player:getGroup():getId() >= GROUP_TYPE_GAMEMASTER) then
player:say(potion.description, MESSAGE_POTION)
return true
end
diff --git a/data-otservbr-global/scripts/actions/other/surprise_bag.lua b/data-otservbr-global/scripts/actions/other/surprise_bag.lua
index bbe76e26055..052fc987c61 100644
--- a/data-otservbr-global/scripts/actions/other/surprise_bag.lua
+++ b/data-otservbr-global/scripts/actions/other/surprise_bag.lua
@@ -89,7 +89,7 @@ function surpriseBag.onUse(cid, item, fromPosition, itemEx, toPosition)
local count = 1
local gift = present[math.random(1, #present)]
if type(gift) == "table" then
- count = gift[2]
+ count = math.random(1, gift[2])
gift = gift[1]
end
diff --git a/data-otservbr-global/scripts/actions/other/watch.lua b/data-otservbr-global/scripts/actions/other/watch.lua
index d989856ace5..a97fce78cbf 100644
--- a/data-otservbr-global/scripts/actions/other/watch.lua
+++ b/data-otservbr-global/scripts/actions/other/watch.lua
@@ -5,5 +5,5 @@ function watch.onUse(player, item, fromPosition, target, toPosition, isHotkey)
return true
end
-watch:id(2445, 2446, 2447, 2448, 2906, 2771)
+watch:id(2445, 2446, 2447, 2448, 2906, 2771, 6091)
watch:register()
diff --git a/data-otservbr-global/scripts/actions/quests/adventures_of_galthen/iksupan_entrance.lua b/data-otservbr-global/scripts/actions/quests/adventures_of_galthen/iksupan_entrance.lua
index 8ec086eeb8b..79a74c4f8cd 100644
--- a/data-otservbr-global/scripts/actions/quests/adventures_of_galthen/iksupan_entrance.lua
+++ b/data-otservbr-global/scripts/actions/quests/adventures_of_galthen/iksupan_entrance.lua
@@ -1,5 +1,5 @@
local config = {
- { position = { x = 32728, y = 32878, z = 7 }, destination = { x = 34015, y = 31890, z = 8 } },
+ { position = { x = 32728, y = 32875, z = 7 }, destination = { x = 34015, y = 31890, z = 8 } },
}
local entrance = Action()
diff --git a/data-otservbr-global/scripts/actions/quests/adventures_of_galthen/iksupan_exit.lua b/data-otservbr-global/scripts/actions/quests/adventures_of_galthen/iksupan_exit.lua
index 0a4a27478b0..09f53f88c79 100644
--- a/data-otservbr-global/scripts/actions/quests/adventures_of_galthen/iksupan_exit.lua
+++ b/data-otservbr-global/scripts/actions/quests/adventures_of_galthen/iksupan_exit.lua
@@ -1,5 +1,6 @@
local config = {
{ position = { x = 34015, y = 31892, z = 8 }, destination = { x = 32728, y = 32880, z = 7 } },
+ { position = { x = 34041, y = 31726, z = 10 }, destination = { x = 32728, y = 32880, z = 7 } },
}
local exit = MoveEvent()
diff --git a/data-otservbr-global/scripts/actions/quests/elemental_spheres/lord_of_elements_lever.lua b/data-otservbr-global/scripts/actions/quests/elemental_spheres/lord_of_elements_lever.lua
index 997e4acbdc6..3e90bf6ac90 100644
--- a/data-otservbr-global/scripts/actions/quests/elemental_spheres/lord_of_elements_lever.lua
+++ b/data-otservbr-global/scripts/actions/quests/elemental_spheres/lord_of_elements_lever.lua
@@ -63,7 +63,7 @@ local config = {
local function resetRoom(players)
for i = 1, #players do
local player = Player(players[i])
- if player and isInRange(player:getPosition(), config.area.from, config.area.to) then
+ if player and player:getPosition():isInRange(config.area.from, config.area.to) then
player:teleportTo(config.exitPosition)
config.exitPosition:sendMagicEffect(CONST_ME_TELEPORT)
end
@@ -104,7 +104,7 @@ local function warnPlayers(players)
local player
for i = 1, #players do
player = Player(players[i])
- if player and isInRange(player:getPosition(), config.roomArea.from, config.roomArea.to) then
+ if player and player:getPosition():isInRange(config.roomArea.from, config.roomArea.to) then
break
end
player = nil
diff --git a/data-otservbr-global/scripts/actions/quests/elemental_spheres/machine2.lua b/data-otservbr-global/scripts/actions/quests/elemental_spheres/machine2.lua
index 8ec90c1ce07..26fd74a62e5 100644
--- a/data-otservbr-global/scripts/actions/quests/elemental_spheres/machine2.lua
+++ b/data-otservbr-global/scripts/actions/quests/elemental_spheres/machine2.lua
@@ -1,6 +1,6 @@
local elementalSpheresMachine2 = Action()
function elementalSpheresMachine2.onUse(player, item, fromPosition, target, toPosition, isHotkey)
- if not isInRange(toPosition, Position(33238, 31806, 12), Position(33297, 31865, 12)) then
+ if not toPosition:isInRange(Position(33238, 31806, 12), Position(33297, 31865, 12)) then
return false
end
diff --git a/data-otservbr-global/scripts/actions/quests/elemental_spheres/soils2.lua b/data-otservbr-global/scripts/actions/quests/elemental_spheres/soils2.lua
index daf2973d2b5..db55886635b 100644
--- a/data-otservbr-global/scripts/actions/quests/elemental_spheres/soils2.lua
+++ b/data-otservbr-global/scripts/actions/quests/elemental_spheres/soils2.lua
@@ -18,7 +18,7 @@ function elementalSpheresSoils2.onUse(player, item, fromPosition, target, toPosi
return false
end
- if not isInRange(toPosition, { x = 33238, y = 31806, z = 12 }, { x = 33297, y = 31865, z = 12 }) then
+ if not toPosition:isInRange({ x = 33238, y = 31806, z = 12 }, { x = 33297, y = 31865, z = 12 }) then
return false
end
diff --git a/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/bone_flute.lua b/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/bone_flute.lua
index 842ea96aef2..def47cc49ca 100644
--- a/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/bone_flute.lua
+++ b/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/bone_flute.lua
@@ -6,7 +6,7 @@ function ferumbrasAscendantBoneFlute.onUse(player, item, fromPosition, target, t
if player:getStorageValue(Storage.FerumbrasAscension.BoneFlute) >= 1 then
return false
end
- if not isInRange(target:getPosition(), Position(33477, 32775, 11), Position(33493, 32781, 11)) then
+ if not target:getPosition():isInRange(Position(33477, 32775, 11), Position(33493, 32781, 11)) then
return false
end
if target:getName():lower() == "snake" or target:getName():lower() == "lion" or target:getName():lower() == "bear" or target:getName():lower() == "seagull" or target:getName():lower() == "pig" then
diff --git a/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/flower_puzzle_lever.lua b/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/flower_puzzle_lever.lua
index 7f49c9c7f7f..6cc91c9d45a 100644
--- a/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/flower_puzzle_lever.lua
+++ b/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/flower_puzzle_lever.lua
@@ -34,11 +34,11 @@ function ferumbrasAscendantFlowerPuzzle.onUse(player, item, fromPosition, target
return true
end
end
- if Game.getStorageValue(Storage.FerumbrasAscension.FlowerPuzzleTimer) >= 1 then
+ if Game.getStorageValue(GlobalStorage.FerumbrasAscendant.FlowerPuzzleTimer) >= 1 then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "The portal still activated.")
else
- Game.setStorageValue(Storage.FerumbrasAscension.FlowerPuzzleTimer, 1)
- addEvent(Game.setStorageValue, 30 * 1000, Storage.FerumbrasAscension.FlowerPuzzleTimer, 0)
+ Game.setStorageValue(GlobalStorage.FerumbrasAscendant.FlowerPuzzleTimer, 1)
+ addEvent(Game.setStorageValue, 30 * 1000, GlobalStorage.FerumbrasAscendant.FlowerPuzzleTimer, 0)
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "A portal forms as two beams of a strange construction dividing this room move towards each other.")
for x = 33475, 33479 do
local pos = Position(x, 32698, 14)
diff --git a/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/ragiaz_lever.lua b/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/ragiaz_lever.lua
index bf24a598d81..4fc83e29aa0 100644
--- a/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/ragiaz_lever.lua
+++ b/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/ragiaz_lever.lua
@@ -12,6 +12,12 @@ local config = {
{ pos = Position(33459, 32356, 13), teleport = Position(33482, 32339, 13), effect = CONST_ME_TELEPORT },
{ pos = Position(33460, 32356, 13), teleport = Position(33482, 32339, 13), effect = CONST_ME_TELEPORT },
},
+ monsters = {
+ { name = "Death Dragon", pos = Position(33476, 32331, 13) },
+ { name = "Death Dragon", pos = Position(33476, 32340, 13) },
+ { name = "Death Dragon", pos = Position(33487, 32340, 13) },
+ { name = "Death Dragon", pos = Position(33488, 32331, 13) },
+ },
specPos = {
from = Position(33468, 32319, 13),
to = Position(33495, 32347, 13),
@@ -19,23 +25,6 @@ local config = {
exit = Position(33319, 32318, 13),
}
-local deathDragons = {
- Position(33476, 32331, 13),
- Position(33476, 32340, 13),
- Position(33487, 32340, 13),
- Position(33488, 32331, 13),
-}
-
-local ferumbrasAscendantRagiaz = Action()
-function ferumbrasAscendantRagiaz.onUse(player, item, fromPosition, target, toPosition, isHotkey)
- if CreateDefaultLeverBoss(player, config) then
- for _, pos in pairs(deathDragons) do
- Game.createMonster("Death Dragon", pos, true, true)
- end
- return true
- end
- return false
-end
-
-ferumbrasAscendantRagiaz:uid(1023)
-ferumbrasAscendantRagiaz:register()
+local lever = BossLever(config)
+lever:uid(1023)
+lever:register()
diff --git a/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/sacrifice.lua b/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/sacrifice.lua
index e906f6f98cf..cf69d4dc968 100644
--- a/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/sacrifice.lua
+++ b/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/sacrifice.lua
@@ -7,7 +7,7 @@ local fount = {
local ferumbrasAscendantSacrifice = Action()
function ferumbrasAscendantSacrifice.onUse(player, item, fromPosition, target, toPosition, isHotkey)
- if not target.actionid == 53805 or Tile(Position(33415, 32379, 12)):getItemById(22161) or player:getStorageValue(Storage.FerumbrasAscension.Fount) >= 4 then
+ if not target.actionid == 53805 or Tile(Position(33415, 32379, 12)):getItemById(22163) or player:getStorageValue(Storage.FerumbrasAscension.Fount) >= 4 then
return false
end
if item.itemid == 22158 then
diff --git a/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/teleportation_rod.lua b/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/teleportation_rod.lua
index 78292f6d34c..062233e7eb7 100644
--- a/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/teleportation_rod.lua
+++ b/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/teleportation_rod.lua
@@ -1,11 +1,11 @@
local config = {
- [24830] = { storageKey = Storage.FerumbrasAscension.Razzagorn },
- [24831] = { storageKey = Storage.FerumbrasAscension.Ragiaz },
- [24832] = { storageKey = Storage.FerumbrasAscension.Zamulosh },
- [24833] = { storageKey = Storage.FerumbrasAscension.Mazoran },
- [24834] = { storageKey = Storage.FerumbrasAscension.Tarbaz },
- [24835] = { storageKey = Storage.FerumbrasAscension.Shulgrax },
- [24836] = { storageKey = Storage.FerumbrasAscension.Plagirath },
+ [22174] = { storageKey = Storage.FerumbrasAscension.Razzagorn },
+ [22175] = { storageKey = Storage.FerumbrasAscension.Ragiaz },
+ [22176] = { storageKey = Storage.FerumbrasAscension.Zamulosh },
+ [22177] = { storageKey = Storage.FerumbrasAscension.Mazoran },
+ [22178] = { storageKey = Storage.FerumbrasAscension.Tarbaz },
+ [22179] = { storageKey = Storage.FerumbrasAscension.Shulgrax },
+ [22180] = { storageKey = Storage.FerumbrasAscension.Plagirath },
}
local ferumbrasAscendantTeleportation = Action()
diff --git a/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/zamulosh_lever.lua b/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/zamulosh_lever.lua
index f59534879e3..94c7d59c0b2 100644
--- a/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/zamulosh_lever.lua
+++ b/data-otservbr-global/scripts/actions/quests/ferumbras_ascendant/zamulosh_lever.lua
@@ -28,16 +28,6 @@ local zamuloshSummons = {
Position(33644, 32756, 11),
}
-local ferumbrasAscendantZamulosh = Action()
-function ferumbrasAscendantZamulosh.onUse(player, item, fromPosition, target, toPosition, isHotkey)
- if CreateDefaultLeverBoss(player, config) then
- for _, pos in pairs(zamuloshSummons) do
- Game.createMonster("Zamulosh3", pos, true, true)
- end
- return true
- end
- return false
-end
-
-ferumbrasAscendantZamulosh:uid(1026)
-ferumbrasAscendantZamulosh:register()
+local lever = BossLever(config)
+lever:uid(1026)
+lever:register()
diff --git a/data-otservbr-global/scripts/creaturescripts/customs/freequests.lua b/data-otservbr-global/scripts/creaturescripts/customs/freequests.lua
index ec9d9ab4800..e3db2db8c6a 100644
--- a/data-otservbr-global/scripts/creaturescripts/customs/freequests.lua
+++ b/data-otservbr-global/scripts/creaturescripts/customs/freequests.lua
@@ -371,6 +371,10 @@ local questTable = {
{ storage = Storage.HeroRathleton.AccessDoor, storageValue = 1 },
{ storage = Storage.HeroRathleton.FastWay, storageValue = 1 },
+
+ -- Sea Serpent Quest
+ { storage = Storage.Quest.U8_2.FishForASerpent.QuestLine, storageValue = 5 },
+ { storage = Storage.Quest.U8_2.TheHuntForTheSeaSerpent.QuestLine, storageValue = 2 },
}
-- from Position: (33201, 31762, 1)
diff --git a/data-otservbr-global/scripts/creaturescripts/customs/reward_exercise.lua b/data-otservbr-global/scripts/creaturescripts/customs/reward_exercise.lua
index f17304cec00..7ef792fe10e 100644
--- a/data-otservbr-global/scripts/creaturescripts/customs/reward_exercise.lua
+++ b/data-otservbr-global/scripts/creaturescripts/customs/reward_exercise.lua
@@ -10,4 +10,6 @@ function winReward.onLogin(player)
return true
end
-winReward:register()
+if configManager.getBoolean(configKeys.TOGGLE_RECEIVE_REWARD) then
+ winReward:register()
+end
diff --git a/data-otservbr-global/scripts/creaturescripts/others/login_events.lua b/data-otservbr-global/scripts/creaturescripts/others/login_events.lua
index 7adef4c07a1..de3b9cc4f0a 100644
--- a/data-otservbr-global/scripts/creaturescripts/others/login_events.lua
+++ b/data-otservbr-global/scripts/creaturescripts/others/login_events.lua
@@ -1,7 +1,6 @@
local loginEvents = CreatureEvent("LoginEvents")
function loginEvents.onLogin(player)
local events = {
- --Others
"AdvanceSave",
"BossParticipation",
"DropLoot",
@@ -11,7 +10,6 @@ function loginEvents.onLogin(player)
"FamiliarAdvance",
--Quests
--Cults Of Tibia Quest
- "LeidenHeal",
"HealthPillar",
"YalahariHealth",
}
diff --git a/data-otservbr-global/scripts/creaturescripts/players/namelock.lua b/data-otservbr-global/scripts/creaturescripts/players/namelock.lua
new file mode 100644
index 00000000000..c34eab6f181
--- /dev/null
+++ b/data-otservbr-global/scripts/creaturescripts/players/namelock.lua
@@ -0,0 +1,21 @@
+function CheckNamelock(player)
+ local namelockReason = player:kv():get("namelock")
+ if not namelockReason then
+ return true
+ end
+ player:setMoveLocked(true)
+ player:teleportTo(player:getTown():getTemplePosition())
+ player:sendTextMessage(MESSAGE_ADMINISTRADOR, "Your name has been locked for the following reason: " .. namelockReason .. ".")
+ player:openStore("extras")
+ addPlayerEvent(sendRequestPurchaseData, 50, player, 65002, GameStore.ClientOfferTypes.CLIENT_STORE_OFFER_NAMECHANGE)
+ addPlayerEvent(CheckNamelock, 30000, player)
+end
+
+local playerLogin = CreatureEvent("NamelockLogin")
+
+function playerLogin.onLogin(player)
+ addPlayerEvent(CheckNamelock, 1000, player)
+ return true
+end
+
+playerLogin:register()
diff --git a/data-otservbr-global/scripts/creaturescripts/quests/cults_of_tibia/leiden_heal.lua b/data-otservbr-global/scripts/creaturescripts/quests/cults_of_tibia/leiden_heal.lua
index 1eaf838ec28..85d61186ccf 100644
--- a/data-otservbr-global/scripts/creaturescripts/quests/cults_of_tibia/leiden_heal.lua
+++ b/data-otservbr-global/scripts/creaturescripts/quests/cults_of_tibia/leiden_heal.lua
@@ -1,16 +1,14 @@
local leidenHeal = CreatureEvent("LeidenHeal")
function leidenHeal.onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
- if creature:getName():lower() == "leiden" then
- if attacker and attacker:isPlayer() then
- primaryType = COMBAT_HEALING
- secondaryType = primaryType
- if primaryDamage < 0 then
- primaryDamage = primaryDamage * -1
- end
- secondaryDamage = primaryDamage
- creature:addHealth(primaryDamage < 0 and -primaryDamage or primaryDamage)
- return primaryDamage, primaryType, secondaryDamage, secondaryType
+ if attacker and attacker:isPlayer() then
+ primaryType = COMBAT_HEALING
+ secondaryType = primaryType
+ if primaryDamage < 0 then
+ primaryDamage = primaryDamage * -1
end
+ secondaryDamage = primaryDamage
+ creature:addHealth(primaryDamage < 0 and -primaryDamage or primaryDamage)
+ return primaryDamage, primaryType, secondaryDamage, secondaryType
end
return primaryDamage, primaryType, secondaryDamage, secondaryType
end
diff --git a/data-otservbr-global/scripts/creaturescripts/quests/ferumbras_ascendant/bosses_kill.lua b/data-otservbr-global/scripts/creaturescripts/quests/ferumbras_ascendant/bosses_kill.lua
index 5d81cf2f22c..8993c4b9063 100644
--- a/data-otservbr-global/scripts/creaturescripts/quests/ferumbras_ascendant/bosses_kill.lua
+++ b/data-otservbr-global/scripts/creaturescripts/quests/ferumbras_ascendant/bosses_kill.lua
@@ -3,7 +3,7 @@ local bosses = {
["tarbaz"] = { teleportPos = Position(33460, 32853, 11), godbreakerPos = Position(33427, 32852, 13) },
["ragiaz"] = { teleportPos = Position(33482, 32345, 13), godbreakerPos = Position(33466, 32392, 13) },
["plagirath"] = { teleportPos = Position(33174, 31511, 13), godbreakerPos = Position(33204, 31510, 13) },
- ["razzagorn"] = { teleportPos = Position(33413, 32467, 14), godbreakerPos = Position(33357, 32440, 13) },
+ ["razzagorn"] = { teleportPos = Position(33357, 32434, 12), godbreakerPos = Position(33357, 32440, 13) },
["zamulosh"] = { teleportPos = Position(33644, 32764, 11), godbreakerPos = Position(33678, 32758, 13) },
["mazoran"] = { teleportPos = Position(33585, 32699, 14), godbreakerPos = Position(33614, 32679, 15) },
["shulgrax"] = { teleportPos = Position(33486, 32796, 13), godbreakerPos = Position(33459, 32820, 14) },
diff --git a/data-otservbr-global/scripts/creaturescripts/quests/ferumbras_ascendant/rift_invader_death.lua b/data-otservbr-global/scripts/creaturescripts/quests/ferumbras_ascendant/rift_invader_death.lua
index a3d049f4581..3db8456d1d1 100644
--- a/data-otservbr-global/scripts/creaturescripts/quests/ferumbras_ascendant/rift_invader_death.lua
+++ b/data-otservbr-global/scripts/creaturescripts/quests/ferumbras_ascendant/rift_invader_death.lua
@@ -22,7 +22,7 @@ function riftInvaderDeath.onDeath(creature, corpse, lasthitkiller, mostdamagekil
for i = 1, #crystals do
local crystal = crystals[i]
- if isInRange(creature:getPosition(), crystal.fromPosition, crystal.toPosition) then
+ if creature:getPosition():isInRange(crystal.fromPosition, crystal.toPosition) then
if Game.getStorageValue(crystal.globalStorage) > 8 then
local item = Tile(crystal.crystalPosition):getItemById(14955)
if not item then
diff --git a/data-otservbr-global/scripts/creaturescripts/quests/ferumbras_ascendant/the_shatterer_kill.lua b/data-otservbr-global/scripts/creaturescripts/quests/ferumbras_ascendant/the_shatterer_kill.lua
index a132bf68f17..493db2c089e 100644
--- a/data-otservbr-global/scripts/creaturescripts/quests/ferumbras_ascendant/the_shatterer_kill.lua
+++ b/data-otservbr-global/scripts/creaturescripts/quests/ferumbras_ascendant/the_shatterer_kill.lua
@@ -95,7 +95,7 @@ function theShattererKill.onDeath(creature)
local oldPos = teleport:getDestination()
if teleport then
teleport:transform(22761)
- targetMonster:getPosition():sendMagicEffect(CONST_ME_THUNDER)
+ creature:getPosition():sendMagicEffect(CONST_ME_THUNDER)
teleport:setDestination(newPos)
addEvent(revertTeleport, 2 * 60 * 1000, teleportPos, 22761, 1949, oldPos)
revert()
diff --git a/data-otservbr-global/scripts/creaturescripts/quests/in_service_of_yalahar/azerus_kill.lua b/data-otservbr-global/scripts/creaturescripts/quests/in_service_of_yalahar/azerus_kill.lua
index e0243544958..0b288679c18 100644
--- a/data-otservbr-global/scripts/creaturescripts/quests/in_service_of_yalahar/azerus_kill.lua
+++ b/data-otservbr-global/scripts/creaturescripts/quests/in_service_of_yalahar/azerus_kill.lua
@@ -8,15 +8,14 @@ end
local azerus = CreatureEvent("AzerusDeath")
function azerus.onDeath(creature)
- local targetMonster = creature:getMonster()
- local position = targetMonster:getPosition()
+ local position = creature:getPosition()
position:sendMagicEffect(CONST_ME_TELEPORT)
local item = Game.createItem(1949, 1, position)
local teleportToPosition = Position(32780, 31168, 14)
if item:isTeleport() then
item:setDestination(teleportToPosition)
end
- targetMonster:say("Azerus ran into teleporter! It will disappear in 2 minutes. Enter it!", TALKTYPE_MONSTER_SAY, 0, 0, position)
+ creature:say("Azerus ran into teleporter! It will disappear in 2 minutes. Enter it!", TALKTYPE_MONSTER_SAY, 0, 0, position)
--remove portal after 2 min
addEvent(removeTeleport, 2 * 60 * 1000, position)
diff --git a/data-otservbr-global/scripts/creaturescripts/quests/the_primal_ordeal/magma_bubble_death.lua b/data-otservbr-global/scripts/creaturescripts/quests/the_primal_ordeal/magma_bubble_death.lua
index 953918d959e..121b4071da0 100644
--- a/data-otservbr-global/scripts/creaturescripts/quests/the_primal_ordeal/magma_bubble_death.lua
+++ b/data-otservbr-global/scripts/creaturescripts/quests/the_primal_ordeal/magma_bubble_death.lua
@@ -1,15 +1,26 @@
local magmaBubbleDeath = CreatureEvent("MagmaBubbleDeath")
+
+local function hasOutfit(player)
+ return player:hasOutfit(1569) or player:hasOutfit(1568)
+end
+
function magmaBubbleDeath.onDeath(creature, corpse, killer, mostDamage, unjustified, mostDamage_unjustified)
if not creature then
return
end
local damageMap = creature:getMonster():getDamageMap()
-
for key, value in pairs(damageMap) do
local player = Player(key)
- if player and player:getStorageValue(Storage.Quest.U12_90.PrimalOrdeal.Bosses.MagmaBubbleKilled) < 1 then
- player:setStorageValue(Storage.Quest.U12_90.PrimalOrdeal.Bosses.MagmaBubbleKilled, 1) -- Access to The primal menace boss fight
+ if player then
+ if not hasOutfit(player) then
+ player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Congratulations you received the Fire-Fighter Outfit.")
+ player:addOutfit(1569, 0)
+ player:addOutfit(1568, 0)
+ end
+ if player:getStorageValue(Storage.Quest.U12_90.PrimalOrdeal.Bosses.MagmaBubbleKilled) < 1 then
+ player:setStorageValue(Storage.Quest.U12_90.PrimalOrdeal.Bosses.MagmaBubbleKilled, 1) -- Access to The primal menace boss fight
+ end
end
end
end
diff --git a/data-otservbr-global/scripts/globalevents/quests/demon_oak_voices.lua b/data-otservbr-global/scripts/globalevents/quests/demon_oak_voices.lua
index c5266d1e149..54d86db95fe 100644
--- a/data-otservbr-global/scripts/globalevents/quests/demon_oak_voices.lua
+++ b/data-otservbr-global/scripts/globalevents/quests/demon_oak_voices.lua
@@ -19,7 +19,7 @@ function demonOakVoices.onThink(interval, lastExecution)
local sound = sounds[math.random(#sounds)]
for i = 1, #spectators do
spectator = spectators[i]
- if isInRange(spectator:getPosition(), questArea[1], questArea[2]) then
+ if spectator:getPosition():isInRange(questArea[1], questArea[2]) then
return true
end
spectator:say(sound, TALKTYPE_MONSTER_YELL, false, 0, DEMON_OAK_POSITION)
diff --git a/data-otservbr-global/scripts/lib/register_actions.lua b/data-otservbr-global/scripts/lib/register_actions.lua
index b55cfca6c33..1522ad20417 100644
--- a/data-otservbr-global/scripts/lib/register_actions.lua
+++ b/data-otservbr-global/scripts/lib/register_actions.lua
@@ -323,13 +323,13 @@ local function addFerumbrasAscendantReward(player, target, toPosition)
end
end
- if target.itemid == 10551 and target.actionid == 53803 then
- if player:getStorageValue(Storage.FerumbrasAscendant.Ring) >= 1 then
+ if target.itemid == 22872 and target.actionid == 53803 then
+ if player:getStorageValue(Storage.FerumbrasAscension.Ring) >= 1 then
return false
end
player:addItem(22170, 1)
- player:setStorageValue(Storage.FerumbrasAscendant.Ring, 1)
+ player:setStorageValue(Storage.FerumbrasAscension.Ring, 1)
end
end
diff --git a/data-otservbr-global/scripts/lib/register_monster_type.lua b/data-otservbr-global/scripts/lib/register_monster_type.lua
index 6fbf56f8269..49537ac9c4c 100644
--- a/data-otservbr-global/scripts/lib/register_monster_type.lua
+++ b/data-otservbr-global/scripts/lib/register_monster_type.lua
@@ -931,6 +931,11 @@ function readSpell(incomingLua, mtype)
spell:setConditionDamage(incomingLua.condition.totalDamage, incomingLua.condition.totalDamage, 0)
end
+ local isArea = (incomingLua.radius and incomingLua.radius > 1) or incomingLua.length or incomingLua.spread
+ if isArea and incomingLua.effect == nil and not string.find(incomingLua.name, "field") then
+ logger.warn("[readSpell] - Monster {}: Spell {} is area but has no effect. Set to `false` explicitly to supress this alert and hide the effect", mtype:name(), incomingLua.name)
+ spell:setCombatEffect(CONST_ME_POFF)
+ end
elseif incomingLua.script then
spell:setScriptName("monster/" .. incomingLua.script .. ".lua")
if incomingLua.interval then
diff --git a/data-otservbr-global/scripts/lib/register_spells.lua b/data-otservbr-global/scripts/lib/register_spells.lua
index 0aa63ca3471..49a5d7aec2f 100644
--- a/data-otservbr-global/scripts/lib/register_spells.lua
+++ b/data-otservbr-global/scripts/lib/register_spells.lua
@@ -283,6 +283,18 @@ AREA_CIRCLE1X1 = {
{ 0, 1, 0 },
}
+AREA_CIRCLE4X4 = {
+ { 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+ { 0, 0, 0, 1, 1, 1, 0, 0, 0 },
+ { 0, 0, 1, 1, 1, 1, 1, 0, 0 },
+ { 0, 1, 1, 1, 1, 1, 1, 1, 0 },
+ { 1, 1, 1, 1, 3, 1, 1, 1, 1 },
+ { 0, 1, 1, 1, 1, 1, 1, 1, 0 },
+ { 0, 0, 1, 1, 1, 1, 1, 0, 0 },
+ { 0, 0, 0, 1, 1, 1, 0, 0, 0 },
+ { 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+}
+
AREA_CIRCLE5X5 = {
{ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0 },
diff --git a/data-otservbr-global/scripts/lib/shops.lua b/data-otservbr-global/scripts/lib/shops.lua
new file mode 100644
index 00000000000..84902899489
--- /dev/null
+++ b/data-otservbr-global/scripts/lib/shops.lua
@@ -0,0 +1,1604 @@
+SupplyShopConfigTable = {
+ ["foods"] = {
+ { itemName = "brown mushroom", clientId = 3725, buy = 10 },
+ { itemName = "fire mushroom", clientId = 3731, buy = 300 },
+ },
+ ["exercise weapons"] = {
+ { itemName = "enhanced exercise axe", clientId = 35280, buy = 2340000 },
+ { itemName = "enhanced exercise bow", clientId = 35282, buy = 2340000 },
+ { itemName = "enhanced exercise club", clientId = 35281, buy = 2340000 },
+ { itemName = "enhanced exercise rod", clientId = 35283, buy = 2340000 },
+ { itemName = "enhanced exercise shield", clientId = 44066, buy = 2340000 },
+ { itemName = "enhanced exercise sword", clientId = 35279, buy = 2340000 },
+ { itemName = "enhanced exercise wand", clientId = 35284, buy = 2340000 },
+ { itemName = "exercise axe", clientId = 28553, buy = 1800000 },
+ { itemName = "exercise bow", clientId = 28555, buy = 1800000 },
+ { itemName = "exercise club", clientId = 28554, buy = 1800000 },
+ { itemName = "exercise rod", clientId = 28556, buy = 1800000 },
+ { itemName = "exercise shield", clientId = 44065, buy = 1800000 },
+ { itemName = "exercise sword", clientId = 28552, buy = 1800000 },
+ { itemName = "exercise wand", clientId = 28557, buy = 1800000 },
+ { itemName = "masterful exercise axe", clientId = 35286, buy = 2700000 },
+ { itemName = "masterful exercise bow", clientId = 35288, buy = 2700000 },
+ { itemName = "masterful exercise club", clientId = 35287, buy = 2700000 },
+ { itemName = "masterful exercise rod", clientId = 35289, buy = 2700000 },
+ { itemName = "masterful exercise shield", clientId = 44067, buy = 2700000 },
+ { itemName = "masterful exercise sword", clientId = 35285, buy = 2700000 },
+ { itemName = "masterful exercise wand", clientId = 35290, buy = 2700000 },
+ },
+ ["distance equipments"] = {
+ { itemName = "envenomed arrow", clientId = 16143, buy = 12 },
+ { itemName = "diamond arrow", clientId = 35901, buy = 100 },
+ { itemName = "drill bolt", clientId = 16142, buy = 12 },
+ { itemName = "crystalline arrow", clientId = 15793, buy = 20 },
+ { itemName = "blue quiver", clientId = 35848, buy = 400 },
+ { itemName = "bolt", clientId = 3446, buy = 4 },
+ { itemName = "bow", clientId = 3350, buy = 400 },
+ { itemName = "arrow", clientId = 3447, buy = 3 },
+ { itemName = "assassin star", clientId = 7368, buy = 100 },
+ { itemName = "earth arrow", clientId = 774, buy = 5 },
+ { itemName = "enchanted spear", clientId = 7367, buy = 30 },
+ { itemName = "flaming arrow", clientId = 763, buy = 5 },
+ { itemName = "flash arrow", clientId = 761, buy = 5 },
+ { itemName = "royal star", clientId = 25759, buy = 110 },
+ { itemName = "quiver", clientId = 35562, buy = 400 },
+ { itemName = "red quiver", clientId = 35849, buy = 400 },
+ { itemName = "power bolt", clientId = 3450, buy = 7 },
+ { itemName = "piercing bolt", clientId = 7363, buy = 5 },
+ { itemName = "onyx arrow", clientId = 7365, buy = 7 },
+ { itemName = "prismatic bolt", clientId = 16141, buy = 20 },
+ { itemName = "shiver arrow", clientId = 762, buy = 5 },
+ { itemName = "sniper arrow", clientId = 7364, buy = 5 },
+ { itemName = "spear", clientId = 3277, buy = 5 },
+ { itemName = "spectral bolt", clientId = 35902, buy = 70 },
+ { itemName = "throwing star", clientId = 3287, buy = 42 },
+ { itemName = "tarsal arrow", clientId = 14251, buy = 6 },
+ { itemName = "vortex bolt", clientId = 14252, buy = 6 },
+ { itemName = "hunting spear", clientId = 3347, buy = 25 },
+ },
+ ["runes"] = {
+ { itemName = "animate dead rune", clientId = 3203, buy = 375 },
+ { itemName = "avalanche rune", clientId = 3161, buy = 57 },
+ { itemName = "blank rune", clientId = 3147, buy = 10 },
+ { itemName = "chameleon rune", clientId = 3178, buy = 210 },
+ { itemName = "convince creature rune", clientId = 3177, buy = 80 },
+ { itemName = "cure poison rune", clientId = 3153, buy = 65 },
+ { itemName = "desintegrate rune", clientId = 3197, buy = 26 },
+ { itemName = "destroy field rune", clientId = 3148, buy = 15 },
+ { itemName = "divine rain rune", clientId = 3186, buy = 57 },
+ { itemName = "energy bomb rune", clientId = 3149, buy = 203 },
+ { itemName = "energy field rune", clientId = 3164, buy = 38 },
+ { itemName = "energy wall rune", clientId = 3166, buy = 85 },
+ { itemName = "explosion rune", clientId = 3200, buy = 31 },
+ { itemName = "fire bomb rune", clientId = 3192, buy = 147 },
+ { itemName = "fire field rune", clientId = 3188, buy = 28 },
+ { itemName = "fire wall rune", clientId = 3190, buy = 61 },
+ { itemName = "fireball rune", clientId = 3189, buy = 65 },
+ { itemName = "great fireball rune", clientId = 3191, buy = 57 },
+ { itemName = "heavy magic missile rune", clientId = 3198, buy = 65 },
+ { itemName = "holy missile rune", clientId = 3182, buy = 16 },
+ { itemName = "icicle rune", clientId = 3158, buy = 65 },
+ { itemName = "intense healing rune", clientId = 3152, buy = 95 },
+ { itemName = "light magic missile rune", clientId = 3174, buy = 4 },
+ { itemName = "magic wall rune", clientId = 3180, buy = 116 },
+ { itemName = "paralyze rune", clientId = 3165, buy = 700 },
+ { itemName = "poison bomb rune", clientId = 3173, buy = 85 },
+ { itemName = "poison field rune", clientId = 3172, buy = 21 },
+ { itemName = "poison wall rune", clientId = 3176, buy = 52 },
+ { itemName = "soulfire rune", clientId = 3195, buy = 46 },
+ { itemName = "stalagmite rune", clientId = 3179, buy = 65 },
+ { itemName = "stone shower rune", clientId = 3175, buy = 57 },
+ { itemName = "sudden death rune", clientId = 3155, buy = 135 },
+ { itemName = "thunderstorm rune", clientId = 3202, buy = 57 },
+ { itemName = "ultimate healing rune", clientId = 3160, buy = 175 },
+ { itemName = "wild growth rune", clientId = 3156, buy = 160 },
+ },
+ ["tools"] = {
+ { itemName = "fishing rod", clientId = 3483, buy = 150 },
+ { itemName = "flask of rust remover", clientId = 9016, buy = 50 },
+ { itemName = "torch", clientId = 2920, buy = 2 },
+ { itemName = "worm", clientId = 3492, buy = 1 },
+ { itemName = "crowbar", clientId = 3304, buy = 260 },
+ { itemName = "backpack", clientId = 2854, buy = 20 },
+ },
+ ["amulets"] = {
+ { itemName = "gill necklace", clientId = 16108, buy = 20000 },
+ { itemName = "glacier amulet", clientId = 815, buy = 15000 },
+ { itemName = "leviathan's amulet", clientId = 9303, buy = 30000 },
+ { itemName = "magma amulet", clientId = 817, buy = 15000 },
+ { itemName = "lightning pendant", clientId = 816, buy = 15000 },
+ { itemName = "prismatic necklace", clientId = 16113, buy = 20000 },
+ { itemName = "sacred tree amulet", clientId = 9302, buy = 30000 },
+ { itemName = "shockwave amulet", clientId = 9304, buy = 30000 },
+ { itemName = "stone skin amulet", clientId = 3081, buy = 5000 },
+ { itemName = "collar of blue plasma", clientId = 23542, buy = 60000 },
+ { itemName = "collar of green plasma", clientId = 23543, buy = 60000 },
+ { itemName = "collar of red plasma", clientId = 23544, buy = 60000 },
+ { itemName = "terra amulet", clientId = 814, buy = 15000 },
+ },
+ ["rings"] = {
+ { itemName = "life ring", clientId = 3052, buy = 900 },
+ { itemName = "might ring", clientId = 3048, buy = 5000 },
+ { itemName = "ring of blue plasma", clientId = 23529, buy = 80000 },
+ { itemName = "ring of green plasma", clientId = 23531, buy = 80000 },
+ { itemName = "ring of healing", clientId = 3098, buy = 2000 },
+ { itemName = "prismatic ring", clientId = 16114, buy = 100000 },
+ { itemName = "ring of red plasma", clientId = 23533, buy = 80000 },
+ { itemName = "stealth ring", clientId = 3049, buy = 5000 },
+ { itemName = "time ring", clientId = 3053, buy = 2000 },
+ { itemName = "dwarven ring", clientId = 3097, buy = 2000 },
+ { itemName = "energy ring", clientId = 3051, buy = 2000 },
+ },
+ ["potions"] = {
+ { itemName = "great health potion", clientId = 239, buy = 225 },
+ { itemName = "great mana potion", clientId = 238, buy = 144 },
+ { itemName = "great spirit potion", clientId = 7642, buy = 228 },
+ { itemName = "health potion", clientId = 266, buy = 50 },
+ { itemName = "mana potion", clientId = 268, buy = 56 },
+ { itemName = "mana shield potion", clientId = 35563, buy = 200000 },
+ { itemName = "ultimate health potion", clientId = 7643, buy = 379 },
+ { itemName = "ultimate mana potion", clientId = 23373, buy = 438 },
+ { itemName = "ultimate spirit potion", clientId = 23374, buy = 438 },
+ { itemName = "supreme health potion", clientId = 23375, buy = 625 },
+ { itemName = "strong health potion", clientId = 236, buy = 115 },
+ { itemName = "strong mana potion", clientId = 237, buy = 93 },
+ },
+}
+
+SupplyShopConfig = {}
+for _, categoryTable in pairs(SupplyShopConfigTable) do
+ for _, itemTable in ipairs(categoryTable) do
+ table.insert(SupplyShopConfig, itemTable)
+ end
+end
+
+function FindSupplyShopItem(itemName)
+ for _, item in ipairs(SupplyShopConfig) do
+ if string.starts(item.itemName:lower(), itemName:lower()) then
+ return item
+ end
+ end
+end
+
+LootShopConfigTable = {
+ ["creature products"] = {
+ { itemName = "abomination's eye", clientId = 36792, sell = 650000 },
+ { itemName = "abomination's tail", clientId = 36791, sell = 700000 },
+ { itemName = "abomination's tongue", clientId = 36793, sell = 950000 },
+ { itemName = "afflicted strider head", clientId = 36789, sell = 900 },
+ { itemName = "afflicted strider worms", clientId = 36790, sell = 500 },
+ { itemName = "alptramun's toothbrush", clientId = 29943, sell = 270000 },
+ { itemName = "acorn", clientId = 10296, sell = 10 },
+ { itemName = "amber with a bug", clientId = 32624, sell = 41000 },
+ { itemName = "amber with a dragonfly", clientId = 32625, sell = 56000 },
+ { itemName = "amber", clientId = 32626, sell = 20000 },
+ { itemName = "ancient belt buckle", clientId = 24384, sell = 260 },
+ { itemName = "ancient liche bone", clientId = 31588, sell = 28000 },
+ { itemName = "antlers", clientId = 10297, sell = 50 },
+ { itemName = "apron", clientId = 33933, sell = 1300 },
+ { itemName = "badger fur", clientId = 10299, sell = 15 },
+ { itemName = "badger fur", clientId = 903, sell = 15 },
+ { itemName = "bamboo stick", clientId = 11445, sell = 30 },
+ { itemName = "banana sash", clientId = 11511, sell = 55 },
+ { itemName = "basalt fetish", clientId = 17856, sell = 210 },
+ { itemName = "bashmu fang", clientId = 36820, sell = 600 },
+ { itemName = "bashmu feather", clientId = 36823, sell = 350 },
+ { itemName = "bashmu tongue", clientId = 36821, sell = 400 },
+ { itemName = "bed of nails", clientId = 25743, sell = 500 },
+ { itemName = "beer tap", clientId = 32114, sell = 50 },
+ { itemName = "beetle carapace", clientId = 24381, sell = 200 },
+ { itemName = "beetle necklace", clientId = 10457, sell = 1500 },
+ { itemName = "bejeweled ship's telescope", clientId = 9616, sell = 20000 },
+ { itemName = "berserker", clientId = 7403, sell = 40000 },
+ { itemName = "black hood", clientId = 9645, sell = 190 },
+ { itemName = "black skull", clientId = 9056, sell = 4000 },
+ { itemName = "black wool", clientId = 11448, sell = 300 },
+ { itemName = "blazing bone", clientId = 16131, sell = 610 },
+ { itemName = "blemished spawn abdomen", clientId = 36779, sell = 550 },
+ { itemName = "blemished spawn head", clientId = 36778, sell = 800 },
+ { itemName = "blemished spawn tail", clientId = 36780, sell = 1000 },
+ { itemName = "blood preservation", clientId = 11449, sell = 320 },
+ { itemName = "blood tincture in a vial", clientId = 18928, sell = 360 },
+ { itemName = "bloody dwarven beard", clientId = 17827, sell = 110 },
+ { itemName = "bloody pincers", clientId = 9633, sell = 100 },
+ { itemName = "bloody tears", clientId = 32594, sell = 70000 },
+ { itemName = "blue glass plate", clientId = 29345, sell = 60 },
+ { itemName = "blue goanna scale", clientId = 31559, sell = 230 },
+ { itemName = "boar man hoof", clientId = 40584, sell = 600 },
+ { itemName = "boggy dreads", clientId = 9667, sell = 200 },
+ { itemName = "bola", clientId = 17809, sell = 35 },
+ { itemName = "bone fetish", clientId = 17831, sell = 150 },
+ { itemName = "bone shoulderplate", clientId = 10404, sell = 150 },
+ { itemName = "bone toothpick", clientId = 24380, sell = 150 },
+ { itemName = "bonecarving knife", clientId = 17830, sell = 190 },
+ { itemName = "bones of zorvorax", clientId = 24942, sell = 10000 },
+ { itemName = "bony tail", clientId = 10277, sell = 210 },
+ { itemName = "book of necromantic rituals", clientId = 10320, sell = 180 },
+ { itemName = "book of prayers", clientId = 9646, sell = 120 },
+ { itemName = "book page", clientId = 28569, sell = 640 },
+ { itemName = "bowl of terror sweat", clientId = 20204, sell = 500 },
+ { itemName = "brain head's giant neuron", clientId = 32578, sell = 100000 },
+ { itemName = "brain head's left hemisphere", clientId = 32579, sell = 90000 },
+ { itemName = "brain head's right hemisphere", clientId = 32580, sell = 50000 },
+ { itemName = "brainstealer's brain", clientId = 36795, sell = 300000 },
+ { itemName = "brainstealer's brainwave", clientId = 36796, sell = 440000 },
+ { itemName = "brainstealer's tissue", clientId = 36794, sell = 240000 },
+ { itemName = "bright bell", clientId = 30324, sell = 220 },
+ { itemName = "brimstone fangs", clientId = 11702, sell = 380 },
+ { itemName = "brimstone shell", clientId = 11703, sell = 210 },
+ { itemName = "broken bell", clientId = 30185, sell = 150 },
+ { itemName = "broken crossbow", clientId = 11451, sell = 30 },
+ { itemName = "broken draken mail", clientId = 11660, sell = 340 },
+ { itemName = "broken gladiator shield", clientId = 9656, sell = 190 },
+ { itemName = "broken halberd", clientId = 10418, sell = 100 },
+ { itemName = "broken helmet", clientId = 11453, sell = 20 },
+ { itemName = "broken iks faulds", clientId = 40531, sell = 530 },
+ { itemName = "broken iks headpiece", clientId = 40532, sell = 560 },
+ { itemName = "broken iks sandals", clientId = 40534, sell = 440 },
+ { itemName = "broken key ring", clientId = 11652, sell = 8000 },
+ { itemName = "broken longbow", clientId = 34161, sell = 130 },
+ { itemName = "broken macuahuitl", clientId = 40530, sell = 1000 },
+ { itemName = "broken ring of ending", clientId = 12737, sell = 4000 },
+ { itemName = "broken shamanic staff", clientId = 11452, sell = 35 },
+ { itemName = "broken slicer", clientId = 11661, sell = 120 },
+ { itemName = "broken throwing axe", clientId = 17851, sell = 230 },
+ { itemName = "broken visor", clientId = 20184, sell = 1900 },
+ { itemName = "bronze amulet", clientId = 3056, sell = 50, count = 200 },
+ { itemName = "brooch of embracement", clientId = 34023, sell = 14000 },
+ { itemName = "brutetamer's staff", clientId = 7379, sell = 1500 },
+ { itemName = "buckle", clientId = 17829, sell = 7000 },
+ { itemName = "bunch of ripe rice", clientId = 10328, sell = 75 },
+ { itemName = "bunch of troll hair", clientId = 9689, sell = 30 },
+ { itemName = "bundle of cursed straw", clientId = 9688, sell = 800 },
+ { itemName = "capricious heart", clientId = 34138, sell = 2100 },
+ { itemName = "capricious robe", clientId = 34145, sell = 1200 },
+ { itemName = "carniphila seeds", clientId = 10300, sell = 50 },
+ { itemName = "carnisylvan bark", clientId = 36806, sell = 230 },
+ { itemName = "carnisylvan finger", clientId = 36805, sell = 250 },
+ { itemName = "carnivostrich feathers", clientId = 40586, sell = 550 },
+ { itemName = "carrion worm fang", clientId = 10275, sell = 35 },
+ { itemName = "cat's paw", clientId = 5479, sell = 2000 },
+ { itemName = "cave chimera head", clientId = 36787, sell = 1200 },
+ { itemName = "cave chimera leg", clientId = 36788, sell = 650 },
+ { itemName = "cave devourer eyes", clientId = 27599, sell = 550 },
+ { itemName = "cave devourer legs", clientId = 27601, sell = 350 },
+ { itemName = "cave devourer maw", clientId = 27600, sell = 600 },
+ { itemName = "cavebear skull", clientId = 12316, sell = 550 },
+ { itemName = "centipede leg", clientId = 10301, sell = 28 },
+ { itemName = "chasm spawn abdomen", clientId = 27603, sell = 240 },
+ { itemName = "chasm spawn head", clientId = 27602, sell = 850 },
+ { itemName = "chasm spawn tail", clientId = 27604, sell = 120 },
+ { itemName = "cheese cutter", clientId = 17817, sell = 50 },
+ { itemName = "cheesy figurine", clientId = 17818, sell = 150 },
+ { itemName = "cheesy membership card", clientId = 35614, sell = 120000 },
+ { itemName = "chicken feather", clientId = 5890, sell = 30 },
+ { itemName = "chitinous mouth", clientId = 27622, sell = 10000 },
+ { itemName = "chitinous mouth", clientId = 27626, sell = 10000 },
+ { itemName = "cliff strider claw", clientId = 16134, sell = 800 },
+ { itemName = "closed trap", clientId = 3481, sell = 75 },
+ { itemName = "coal", clientId = 12600, sell = 20 },
+ { itemName = "cobra crest", clientId = 31678, sell = 650 },
+ { itemName = "cobra tongue", clientId = 9634, sell = 15 },
+ { itemName = "colourful feather", clientId = 11514, sell = 110 },
+ { itemName = "colourful feathers", clientId = 25089, sell = 400 },
+ { itemName = "colourful snail shell", clientId = 25696, sell = 250 },
+ { itemName = "compass", clientId = 10302, sell = 45 },
+ { itemName = "compound eye", clientId = 14083, sell = 150 },
+ { itemName = "condensed energy", clientId = 23501, sell = 260 },
+ { itemName = "coral branch", clientId = 39406, sell = 360 },
+ { itemName = "coral brooch", clientId = 24391, sell = 750 },
+ { itemName = "corrupt naga scales", clientId = 39415, sell = 570 },
+ { itemName = "corrupted flag", clientId = 10409, sell = 700 },
+ { itemName = "countess sorrow's frozen tear", clientId = 6536, sell = 50000 },
+ { itemName = "cow bell", clientId = 32012, sell = 120 },
+ { itemName = "cowbell", clientId = 21204, sell = 210 },
+ { itemName = "crab man claw", clientId = 40582, sell = 550 },
+ { itemName = "crab pincers", clientId = 10272, sell = 35 },
+ { itemName = "crawler head plating", clientId = 14079, sell = 210 },
+ { itemName = "crawler's essence", clientId = 33982, sell = 3700 },
+ { itemName = "crest of the deep seas", clientId = 21892, sell = 10000 },
+ { itemName = "cruelty's chest", clientId = 33923, sell = 720000 },
+ { itemName = "cruelty's claw", clientId = 33922, sell = 640000 },
+ { itemName = "crunor idol", clientId = 30055, sell = 30000 },
+ { itemName = "crystal bone", clientId = 23521, sell = 250 },
+ { itemName = "cultish mask", clientId = 9638, sell = 280 },
+ { itemName = "cultish robe", clientId = 9639, sell = 150 },
+ { itemName = "cultish symbol", clientId = 11455, sell = 500 },
+ { itemName = "curious matter", clientId = 23511, sell = 430 },
+ { itemName = "curl of hair", clientId = 36809, sell = 320000 },
+ { itemName = "cursed bone", clientId = 32774, sell = 6000 },
+ { itemName = "cursed shoulder spikes", clientId = 10410, sell = 320 },
+ { itemName = "cyclops toe", clientId = 9657, sell = 55 },
+ { itemName = "daedal chisel", clientId = 40522, sell = 480 },
+ { itemName = "damaged armor plates", clientId = 28822, sell = 280 },
+ { itemName = "damaged worm head", clientId = 27620, sell = 8000 },
+ { itemName = "damselfly eye", clientId = 17463, sell = 25 },
+ { itemName = "damselfly wing", clientId = 17458, sell = 20 },
+ { itemName = "dandelion seeds", clientId = 25695, sell = 200 },
+ { itemName = "dangerous proto matter", clientId = 23515, sell = 300 },
+ { itemName = "dark bell", clientId = 30325, sell = 250 },
+ { itemName = "dark bell", clientId = 32596, sell = 310000 },
+ { itemName = "dead weight", clientId = 20202, sell = 450 },
+ { itemName = "deepling breaktime snack", clientId = 14011, sell = 90 },
+ { itemName = "deepling claw", clientId = 14044, sell = 430 },
+ { itemName = "deepling guard belt buckle", clientId = 14010, sell = 230 },
+ { itemName = "deepling ridge", clientId = 14041, sell = 360 },
+ { itemName = "deepling scales", clientId = 14017, sell = 80 },
+ { itemName = "deepling warts", clientId = 14012, sell = 180 },
+ { itemName = "deeptags", clientId = 14013, sell = 290 },
+ { itemName = "deepworm jaws", clientId = 27594, sell = 500 },
+ { itemName = "deepworm spike roots", clientId = 27593, sell = 650 },
+ { itemName = "deepworm spikes", clientId = 27592, sell = 800 },
+ { itemName = "demon horn", clientId = 5954, sell = 1000 },
+ { itemName = "demonic finger", clientId = 12541, sell = 1000 },
+ { itemName = "demonic skeletal hand", clientId = 9647, sell = 80 },
+ { itemName = "diabolic skull", clientId = 34025, sell = 19000 },
+ { itemName = "diremaw brainpan", clientId = 27597, sell = 350 },
+ { itemName = "diremaw legs", clientId = 27598, sell = 270 },
+ { itemName = "dirty turban", clientId = 11456, sell = 120 },
+ { itemName = "distorted heart", clientId = 34142, sell = 2100 },
+ { itemName = "distorted robe", clientId = 34149, sell = 1200 },
+ { itemName = "downy feather", clientId = 11684, sell = 20 },
+ { itemName = "dowser", clientId = 19110, sell = 35 },
+ { itemName = "dracola's eye", clientId = 6546, sell = 50000 },
+ { itemName = "dragon blood", clientId = 24937, sell = 700 },
+ { itemName = "dragon priest's wandtip", clientId = 10444, sell = 175 },
+ { itemName = "dragon tongue", clientId = 24938, sell = 550 },
+ { itemName = "dragon's tail", clientId = 11457, sell = 100 },
+ { itemName = "draken sulphur", clientId = 11658, sell = 550 },
+ { itemName = "draken wristbands", clientId = 11659, sell = 430 },
+ { itemName = "draptor scales", clientId = 12309, sell = 800 },
+ { itemName = "dream essence egg", clientId = 30005, sell = 205 },
+ { itemName = "dung ball", clientId = 14225, sell = 130 },
+ { itemName = "earflap", clientId = 17819, sell = 40 },
+ { itemName = "elder bonelord tentacle", clientId = 10276, sell = 150 },
+ { itemName = "elven astral observer", clientId = 11465, sell = 90 },
+ { itemName = "elven hoof", clientId = 18994, sell = 115 },
+ { itemName = "elven scouting glass", clientId = 11464, sell = 50 },
+ { itemName = "elvish talisman", clientId = 9635, sell = 45 },
+ { itemName = "emerald tortoise shell", clientId = 39379, sell = 2150 },
+ { itemName = "empty honey glass", clientId = 31331, sell = 270 },
+ { itemName = "energy ball", clientId = 23523, sell = 300 },
+ { itemName = "energy vein", clientId = 23508, sell = 270 },
+ { itemName = "enigmatic voodoo skull", clientId = 5669, sell = 4000 },
+ { itemName = "ensouled essence", clientId = 32698, sell = 820 },
+ { itemName = "essence of a bad dream", clientId = 10306, sell = 360 },
+ { itemName = "eternal flames", clientId = 946, sell = 5000 },
+ { itemName = "execowtioner mask", clientId = 21201, sell = 240 },
+ { itemName = "ethno coat", clientId = 8064, sell = 200 },
+ { itemName = "eye of a deepling", clientId = 12730, sell = 150 },
+ { itemName = "eye of a weeper", clientId = 16132, sell = 650 },
+ { itemName = "eye of corruption", clientId = 11671, sell = 390 },
+ { itemName = "eyeless devourer legs", clientId = 36776, sell = 650 },
+ { itemName = "eyeless devourer maw", clientId = 36775, sell = 420 },
+ { itemName = "eyeless devourer tongue", clientId = 36777, sell = 900 },
+ { itemName = "fafnar symbol", clientId = 31443, sell = 950 },
+ { itemName = "fairy wings", clientId = 25694, sell = 200 },
+ { itemName = "falcon crest", clientId = 28823, sell = 650 },
+ { itemName = "fern", clientId = 3737, sell = 20 },
+ { itemName = "fiery heart", clientId = 9636, sell = 375 },
+ { itemName = "fiery tear", clientId = 39040, sell = 1070000 },
+ { itemName = "fig leaf", clientId = 25742, sell = 200 },
+ { itemName = "fir cone", clientId = 19111, sell = 25 },
+ { itemName = "flask of embalming fluid", clientId = 11466, sell = 30 },
+ { itemName = "flask of warrior's sweat", clientId = 5885, sell = 10000 },
+ { itemName = "flotsam", clientId = 39407, sell = 330 },
+ { itemName = "flower dress", clientId = 9015, sell = 1000 },
+ { itemName = "flower wreath", clientId = 9013, sell = 500 },
+ { itemName = "fox paw", clientId = 27462, sell = 100 },
+ { itemName = "frazzle skin", clientId = 20199, sell = 400 },
+ { itemName = "frazzle tongue", clientId = 20198, sell = 700 },
+ { itemName = "frost giant pelt", clientId = 9658, sell = 160 },
+ { itemName = "frosty ear of a troll", clientId = 9648, sell = 30 },
+ { itemName = "frosty heart", clientId = 9661, sell = 280 },
+ { itemName = "gauze bandage", clientId = 9649, sell = 90 },
+ { itemName = "gear crystal", clientId = 9655, sell = 200 },
+ { itemName = "gear wheel", clientId = 8775, sell = 500 },
+ { itemName = "fur shred", clientId = 34164, sell = 200 },
+ { itemName = "geomancer's robe", clientId = 11458, sell = 80 },
+ { itemName = "geomancer's staff", clientId = 11463, sell = 120 },
+ { itemName = "ghastly dragon head", clientId = 10449, sell = 700 },
+ { itemName = "ghostly tissue", clientId = 9690, sell = 90 },
+ { itemName = "ghoul snack", clientId = 11467, sell = 60 },
+ { itemName = "giant crab pincer", clientId = 12317, sell = 950 },
+ { itemName = "giant eye", clientId = 10280, sell = 380 },
+ { itemName = "giant tentacle", clientId = 27619, sell = 10000 },
+ { itemName = "girlish hair decoration", clientId = 11443, sell = 30 },
+ { itemName = "girtablilu warrior carapace", clientId = 36971, sell = 520 },
+ { itemName = "gland", clientId = 8143, sell = 500 },
+ { itemName = "glistening bone", clientId = 23522, sell = 250 },
+ { itemName = "glob of acid slime", clientId = 9054, sell = 25 },
+ { itemName = "glob of glooth", clientId = 21182, sell = 125 },
+ { itemName = "glob of mercury", clientId = 9053, sell = 20 },
+ { itemName = "glob of tar", clientId = 9055, sell = 30 },
+ { itemName = "gloom wolf fur", clientId = 22007, sell = 70 },
+ { itemName = "glooth injection tube", clientId = 21103, sell = 350 },
+ { itemName = "goanna claw", clientId = 31561, sell = 260 },
+ { itemName = "goanna meat", clientId = 31560, sell = 190 },
+ { itemName = "goat grass", clientId = 3674, sell = 50 },
+ { itemName = "goblet of gloom", clientId = 34022, sell = 12000 },
+ { itemName = "goblin ear", clientId = 11539, sell = 20 },
+ { itemName = "goo shell", clientId = 19372, sell = 4000 },
+ { itemName = "goosebump leather", clientId = 20205, sell = 650 },
+ { itemName = "gore horn", clientId = 39377, sell = 2900 },
+ { itemName = "gorerilla mane", clientId = 39392, sell = 2750 },
+ { itemName = "gorerilla tail", clientId = 39393, sell = 2650 },
+ { itemName = "grant of arms", clientId = 28824, sell = 950 },
+ { itemName = "grappling hook", clientId = 35588, sell = 150 },
+ { itemName = "grasshopper legs", clientId = 14087, sell = 15000 },
+ { itemName = "grave flower", clientId = 3661, sell = 25 },
+ { itemName = "greed's arm", clientId = 33924, sell = 950000 },
+ { itemName = "green bandage", clientId = 25697, sell = 180 },
+ { itemName = "green glass plate", clientId = 29346, sell = 180 },
+ { itemName = "grimace", clientId = 32593, sell = 120000 },
+ { itemName = "gruesome fan", clientId = 34024, sell = 15000 },
+ { itemName = "guidebook", clientId = 25745, sell = 200 },
+ { itemName = "hair of a banshee", clientId = 11446, sell = 350 },
+ { itemName = "half-digested piece of meat", clientId = 10283, sell = 55 },
+ { itemName = "half-digested stones", clientId = 27369, sell = 40 },
+ { itemName = "half-eaten brain", clientId = 9659, sell = 85 },
+ { itemName = "hand", clientId = 33936, sell = 1450 },
+ { itemName = "harpoon of a giant snail", clientId = 27625, sell = 15000 },
+ { itemName = "harpy feathers", clientId = 40585, sell = 730 },
+ { itemName = "hatched rorc egg", clientId = 18997, sell = 30 },
+ { itemName = "haunted piece of wood", clientId = 9683, sell = 115 },
+ { itemName = "hazardous heart", clientId = 34140, sell = 5000 },
+ { itemName = "hazardous robe", clientId = 34147, sell = 3000 },
+ { itemName = "head", clientId = 33932, sell = 3500 },
+ { itemName = "head", clientId = 33937, sell = 3200 },
+ { itemName = "headpecker beak", clientId = 39387, sell = 2998 },
+ { itemName = "headpecker feather", clientId = 39388, sell = 1300 },
+ { itemName = "heaven blossom", clientId = 3657, sell = 50 },
+ { itemName = "heavy machete", clientId = 3330, sell = 90 },
+ { itemName = "heavy old tome", clientId = 23986, sell = 30 },
+ { itemName = "hellhound slobber", clientId = 9637, sell = 500 },
+ { itemName = "hellspawn tail", clientId = 10304, sell = 475 },
+ { itemName = "hemp rope", clientId = 20206, sell = 350 },
+ { itemName = "hideous chunk", clientId = 16140, sell = 510 },
+ { itemName = "hieroglyph banner", clientId = 12482, sell = 500 },
+ { itemName = "high guard flag", clientId = 10415, sell = 550 },
+ { itemName = "high guard shoulderplates", clientId = 10416, sell = 130 },
+ { itemName = "hollow stampor hoof", clientId = 12314, sell = 400 },
+ { itemName = "holy ash", clientId = 17850, sell = 160 },
+ { itemName = "horn of kalyassa", clientId = 24941, sell = 10000 },
+ { itemName = "horn", clientId = 19359, sell = 300 },
+ { itemName = "horoscope", clientId = 18926, sell = 40 },
+ { itemName = "huge chunk of crude iron", clientId = 5892, sell = 15000 },
+ { itemName = "huge shell", clientId = 27621, sell = 15000 },
+ { itemName = "huge spiky snail shell", clientId = 27627, sell = 8000 },
+ { itemName = "humongous chunk", clientId = 16139, sell = 540 },
+ { itemName = "hunter's quiver", clientId = 11469, sell = 80 },
+ { itemName = "hydra egg", clientId = 4839, sell = 500 },
+ { itemName = "hydra head", clientId = 10282, sell = 600 },
+ { itemName = "hydrophytes", clientId = 39410, sell = 220 },
+ { itemName = "ice flower", clientId = 30058, sell = 370 },
+ { itemName = "incantation notes", clientId = 18929, sell = 90 },
+ { itemName = "infernal heart", clientId = 34139, sell = 2100 },
+ { itemName = "infernal robe", clientId = 34146, sell = 1200 },
+ { itemName = "inkwell", clientId = 28568, sell = 720 },
+ { itemName = "instable proto matter", clientId = 23516, sell = 300 },
+ { itemName = "ivory carving", clientId = 33945, sell = 300 },
+ { itemName = "ivory comb", clientId = 32773, sell = 8000 },
+ { itemName = "izcandar's snow globe", clientId = 29944, sell = 180000 },
+ { itemName = "izcandar's sundial", clientId = 29945, sell = 225000 },
+ { itemName = "jacket", clientId = 3561, sell = 1 },
+ { itemName = "jaws", clientId = 34014, sell = 3900 },
+ { itemName = "jewelled belt", clientId = 11470, sell = 180 },
+ { itemName = "jungle moa claw", clientId = 39404, sell = 160 },
+ { itemName = "jungle moa egg", clientId = 39405, sell = 250 },
+ { itemName = "jungle moa feather", clientId = 39403, sell = 140 },
+ { itemName = "katex' blood", clientId = 34100, sell = 210 },
+ { itemName = "key to the drowned library", clientId = 14009, sell = 330 },
+ { itemName = "kollos shell", clientId = 14077, sell = 420 },
+ { itemName = "kongra's shoulderpad", clientId = 11471, sell = 100 },
+ { itemName = "lamassu hoof", clientId = 31441, sell = 330 },
+ { itemName = "lamassu horn", clientId = 31442, sell = 240 },
+ { itemName = "lancer beetle shell", clientId = 10455, sell = 80 },
+ { itemName = "lancet", clientId = 18925, sell = 90 },
+ { itemName = "lava fungus head", clientId = 36785, sell = 900 },
+ { itemName = "lava fungus ring", clientId = 36786, sell = 390 },
+ { itemName = "lavaworm jaws", clientId = 36771, sell = 1100 },
+ { itemName = "lavaworm spike roots", clientId = 36769, sell = 600 },
+ { itemName = "lavaworm spikes", clientId = 36770, sell = 750 },
+ { itemName = "legionnaire flags", clientId = 10417, sell = 500 },
+ { itemName = "liodile fang", clientId = 40583, sell = 480 },
+ { itemName = "lion cloak patch", clientId = 34162, sell = 190 },
+ { itemName = "lion crest", clientId = 34160, sell = 270 },
+ { itemName = "lion figurine", clientId = 33781, sell = 10000 },
+ { itemName = "lion seal", clientId = 34163, sell = 210 },
+ { itemName = "lion's mane", clientId = 9691, sell = 60 },
+ { itemName = "little bowl of myrrh", clientId = 25702, sell = 500 },
+ { itemName = "lizard essence", clientId = 11680, sell = 300 },
+ { itemName = "lizard heart", clientId = 31340, sell = 530 },
+ { itemName = "longing eyes", clientId = 27624, sell = 8000 },
+ { itemName = "lost basher's spike", clientId = 17826, sell = 280 },
+ { itemName = "lost bracers", clientId = 17853, sell = 140 },
+ { itemName = "lost husher's staff", clientId = 17848, sell = 250 },
+ { itemName = "lost soul", clientId = 32227, sell = 120 },
+ { itemName = "luminescent crystal pickaxe", clientId = 32711, sell = 50 },
+ { itemName = "luminous orb", clientId = 11454, sell = 1000 },
+ { itemName = "lump of dirt", clientId = 9692, sell = 10 },
+ { itemName = "lump of earth", clientId = 10305, sell = 130 },
+ { itemName = "mad froth", clientId = 17854, sell = 80 },
+ { itemName = "magma clump", clientId = 16130, sell = 570 },
+ { itemName = "magma coat", clientId = 826, sell = 11000 },
+ { itemName = "makara fin", clientId = 39401, sell = 350 },
+ { itemName = "makara tongue", clientId = 39402, sell = 320 },
+ { itemName = "malice's horn", clientId = 33920, sell = 620000 },
+ { itemName = "malice's spine", clientId = 33921, sell = 850000 },
+ { itemName = "malofur's lunchbox", clientId = 30088, sell = 240000 },
+ { itemName = "mantassin tail", clientId = 11489, sell = 280 },
+ { itemName = "manticore ear", clientId = 31440, sell = 310 },
+ { itemName = "manticore tail", clientId = 31439, sell = 220 },
+ { itemName = "mantosaurus jaw", clientId = 39386, sell = 2998 },
+ { itemName = "marsh stalker beak", clientId = 17461, sell = 65 },
+ { itemName = "marsh stalker feather", clientId = 17462, sell = 50 },
+ { itemName = "maxilla", clientId = 12315, sell = 250 },
+ { itemName = "maxxenius head", clientId = 29942, sell = 500000 },
+ { itemName = "megalomania's essence", clientId = 33928, sell = 1900000 },
+ { itemName = "megalomania's skull", clientId = 33925, sell = 1500000 },
+ { itemName = "metal spike", clientId = 10298, sell = 320 },
+ { itemName = "metal toe", clientId = 21198, sell = 430 },
+ { itemName = "milk churn", clientId = 32011, sell = 100 },
+ { itemName = "minotaur horn", clientId = 11472, sell = 75 },
+ { itemName = "miraculum", clientId = 11474, sell = 60 },
+ { itemName = "mooh'tah shell", clientId = 21202, sell = 110 },
+ { itemName = "moohtant horn", clientId = 21200, sell = 140 },
+ { itemName = "moon pin", clientId = 43736, sell = 18000 },
+ { itemName = "morgaroth's heart", clientId = 5943, sell = 15000 },
+ { itemName = "morshabaal's brain", clientId = 37613, sell = 15000 },
+ { itemName = "morshabaal's extract", clientId = 37810, sell = 3250000 },
+ { itemName = "mould heart", clientId = 34141, sell = 2100 },
+ { itemName = "mould robe", clientId = 34148, sell = 1200 },
+ { itemName = "mouldy powder", clientId = 35596, sell = 200 },
+ { itemName = "mr. punish's handcuffs", clientId = 6537, sell = 50000 },
+ { itemName = "mucus plug", clientId = 16102, sell = 500 },
+ { itemName = "mutated bat ear", clientId = 9662, sell = 420 },
+ { itemName = "mutated flesh", clientId = 10308, sell = 50 },
+ { itemName = "mutated rat tail", clientId = 9668, sell = 150 },
+ { itemName = "mysterious fetish", clientId = 3078, sell = 50 },
+ { itemName = "mysterious voodoo skull", clientId = 5668, sell = 4000 },
+ { itemName = "mystical hourglass", clientId = 9660, sell = 700 },
+ { itemName = "naga archer scales", clientId = 39413, sell = 340 },
+ { itemName = "naga armring", clientId = 39411, sell = 390 },
+ { itemName = "naga earring", clientId = 39412, sell = 380 },
+ { itemName = "naga warrior scales", clientId = 39414, sell = 340 },
+ { itemName = "necromantic robe", clientId = 11475, sell = 250 },
+ { itemName = "necromantic rust", clientId = 21196, sell = 390 },
+ { itemName = "nettle blossom", clientId = 10314, sell = 75 },
+ { itemName = "nettle spit", clientId = 11476, sell = 25 },
+ { itemName = "neutral matter", clientId = 954, sell = 5000 },
+ { itemName = "nighthunter wing", clientId = 39381, sell = 2000 },
+ { itemName = "odd organ", clientId = 23510, sell = 410 },
+ { itemName = "ogre ear stud", clientId = 22188, sell = 180 },
+ { itemName = "ogre nose ring", clientId = 22189, sell = 210 },
+ { itemName = "old girtablilu carapace", clientId = 36972, sell = 570 },
+ { itemName = "old parchment", clientId = 4831, sell = 500 },
+ { itemName = "one of timira's many heads", clientId = 39399, sell = 215000 },
+ { itemName = "orc leather", clientId = 11479, sell = 30 },
+ { itemName = "orc tooth", clientId = 10196, sell = 150 },
+ { itemName = "orc trophy", clientId = 7395, sell = 1000 },
+ { itemName = "orc tusk", clientId = 7786, sell = 700 },
+ { itemName = "orcish gear", clientId = 11477, sell = 85 },
+ { itemName = "orshabaal's brain", clientId = 5808, sell = 12000 },
+ { itemName = "pair of hellflayer horns", clientId = 22729, sell = 1300 },
+ { itemName = "pair of iron fists", clientId = 17828, sell = 4000 },
+ { itemName = "pair of old bracers", clientId = 32705, sell = 500 },
+ { itemName = "pale worm's scalp", clientId = 32598, sell = 489000 },
+ { itemName = "panpipes", clientId = 2953, sell = 150 },
+ { itemName = "panther head", clientId = 12039, sell = 750 },
+ { itemName = "panther paw", clientId = 12040, sell = 300 },
+ { itemName = "parder fur", clientId = 39418, sell = 150 },
+ { itemName = "parder tooth", clientId = 39417, sell = 150 },
+ { itemName = "patch of fine cloth", clientId = 28821, sell = 1350 },
+ { itemName = "peacock feather fan", clientId = 21975, sell = 350 },
+ { itemName = "pelvis bone", clientId = 11481, sell = 30 },
+ { itemName = "percht horns", clientId = 30186, sell = 200 },
+ { itemName = "petrified scream", clientId = 10420, sell = 250 },
+ { itemName = "phantasmal hair", clientId = 32704, sell = 500 },
+ { itemName = "pharaoh banner", clientId = 12483, sell = 1000 },
+ { itemName = "piece of archer armor", clientId = 11483, sell = 20 },
+ { itemName = "piece of crocodile leather", clientId = 10279, sell = 15 },
+ { itemName = "piece of dead brain", clientId = 9663, sell = 420 },
+ { itemName = "piece of hellfire armor", clientId = 9664, sell = 550 },
+ { itemName = "piece of massacre's shell", clientId = 6540, sell = 50000 },
+ { itemName = "piece of scarab shell", clientId = 9641, sell = 45 },
+ { itemName = "piece of swampling wood", clientId = 17823, sell = 30 },
+ { itemName = "piece of timira's sensors", clientId = 39400, sell = 150000 },
+ { itemName = "piece of warrior armor", clientId = 11482, sell = 50 },
+ { itemName = "pieces of magic chalk", clientId = 18930, sell = 210 },
+ { itemName = "pig foot", clientId = 9693, sell = 10 },
+ { itemName = "pile of grave earth", clientId = 11484, sell = 25 },
+ { itemName = "pirat's tail", clientId = 35573, sell = 180 },
+ { itemName = "plagueroot offshoot", clientId = 30087, sell = 280000 },
+ { itemName = "plasmatic lightning", clientId = 23520, sell = 270 },
+ { itemName = "poison gland", clientId = 29348, sell = 210 },
+ { itemName = "poison spider shell", clientId = 11485, sell = 10 },
+ { itemName = "poisoned fang", clientId = 21195, sell = 130 },
+ { itemName = "poisonous slime", clientId = 9640, sell = 50 },
+ { itemName = "polar bear paw", clientId = 9650, sell = 30 },
+ { itemName = "pool of chitinous glue", clientId = 20207, sell = 480 },
+ { itemName = "porcelain mask", clientId = 25088, sell = 2000 },
+ { itemName = "powder herb", clientId = 3739, sell = 10 },
+ { itemName = "prehemoth claw", clientId = 39383, sell = 2300 },
+ { itemName = "prehemoth horns", clientId = 39382, sell = 3000 },
+ { itemName = "pristine worm head", clientId = 27618, sell = 15000 },
+ { itemName = "protective charm", clientId = 11444, sell = 60 },
+ { itemName = "pulverized ore", clientId = 16133, sell = 400 },
+ { itemName = "purified soul", clientId = 32228, sell = 260 },
+ { itemName = "purple robe", clientId = 11473, sell = 110 },
+ { itemName = "quara bone", clientId = 11491, sell = 500 },
+ { itemName = "quara eye", clientId = 11488, sell = 350 },
+ { itemName = "quara pincers", clientId = 11490, sell = 410 },
+ { itemName = "quara tentacle", clientId = 11487, sell = 140 },
+ { itemName = "quill", clientId = 28567, sell = 1100 },
+ { itemName = "rabbit's foot", clientId = 12172, sell = 50 },
+ { itemName = "rare earth", clientId = 27301, sell = 80 },
+ { itemName = "ratmiral's hat", clientId = 35613, sell = 150000 },
+ { itemName = "ravenous circlet", clientId = 32597, sell = 220000 },
+ { itemName = "red goanna scale", clientId = 31558, sell = 270 },
+ { itemName = "red hair dye", clientId = 17855, sell = 40 },
+ { itemName = "red lantern", clientId = 10289, sell = 250 },
+ { itemName = "rhindeer antlers", clientId = 40587, sell = 680 },
+ { itemName = "rhino hide", clientId = 24388, sell = 175 },
+ { itemName = "rhino horn carving", clientId = 24386, sell = 300 },
+ { itemName = "rhino horn", clientId = 24389, sell = 265 },
+ { itemName = "ripptor claw", clientId = 39389, sell = 2000 },
+ { itemName = "ripptor scales", clientId = 39391, sell = 1200 },
+ { itemName = "ritual tooth", clientId = 40528, sell = 135 },
+ { itemName = "rogue naga scales", clientId = 39416, sell = 570 },
+ { itemName = "roots", clientId = 33938, sell = 1200 },
+ { itemName = "rope belt", clientId = 11492, sell = 66 },
+ { itemName = "rorc egg", clientId = 18996, sell = 120 },
+ { itemName = "rorc feather", clientId = 18993, sell = 70 },
+ { itemName = "rotten feather", clientId = 40527, sell = 120 },
+ { itemName = "rotten heart", clientId = 31589, sell = 74000 },
+ { itemName = "rotten piece of cloth", clientId = 10291, sell = 30 },
+ { itemName = "sabretooth fur", clientId = 39378, sell = 2500 },
+ { itemName = "sabretooth", clientId = 10311, sell = 400 },
+ { itemName = "safety pin", clientId = 11493, sell = 120 },
+ { itemName = "sample of monster blood", clientId = 27874, sell = 250 },
+ { itemName = "sandcrawler shell", clientId = 10456, sell = 20 },
+ { itemName = "scale of corruption", clientId = 11673, sell = 680 },
+ { itemName = "scale of gelidrazah", clientId = 24939, sell = 10000 },
+ { itemName = "scorpion charm", clientId = 36822, sell = 620 },
+ { itemName = "scorpion tail", clientId = 9651, sell = 25 },
+ { itemName = "scroll of heroic deeds", clientId = 11510, sell = 230 },
+ { itemName = "scythe leg", clientId = 10312, sell = 450 },
+ { itemName = "scarab pincers", clientId = 9631, sell = 280 },
+ { itemName = "sea serpent scale", clientId = 9666, sell = 520 },
+ { itemName = "seacrest hair", clientId = 21801, sell = 260 },
+ { itemName = "seacrest scale", clientId = 21800, sell = 150 },
+ { itemName = "seeds", clientId = 647, sell = 150 },
+ { itemName = "shadow herb", clientId = 3740, sell = 20 },
+ { itemName = "shaggy tail", clientId = 10407, sell = 25 },
+ { itemName = "shamanic hood", clientId = 11478, sell = 45 },
+ { itemName = "shamanic mask", clientId = 22192, sell = 2000 },
+ { itemName = "shamanic talisman", clientId = 22184, sell = 200 },
+ { itemName = "shark fins", clientId = 35574, sell = 250 },
+ { itemName = "shimmering beetles", clientId = 25693, sell = 150 },
+ { itemName = "sight of surrender's eye", clientId = 20183, sell = 3000 },
+ { itemName = "silencer claws", clientId = 20200, sell = 390 },
+ { itemName = "silencer resonating chamber", clientId = 20201, sell = 600 },
+ { itemName = "silken bookmark", clientId = 28566, sell = 1300 },
+ { itemName = "silky fur", clientId = 10292, sell = 35 },
+ { itemName = "single human eye", clientId = 25701, sell = 1000 },
+ { itemName = "skull belt", clientId = 11480, sell = 80 },
+ { itemName = "skull fetish", clientId = 22191, sell = 250 },
+ { itemName = "skull shatterer", clientId = 17849, sell = 170 },
+ { itemName = "skunk tail", clientId = 10274, sell = 50 },
+ { itemName = "slime heart", clientId = 21194, sell = 160 },
+ { itemName = "slime mould", clientId = 12601, sell = 175 },
+ { itemName = "slimy leaf tentacle", clientId = 21197, sell = 320 },
+ { itemName = "slimy leg", clientId = 27623, sell = 4500 },
+ { itemName = "sling herb", clientId = 3738, sell = 10 },
+ { itemName = "small energy ball", clientId = 23524, sell = 250 },
+ { itemName = "small flask of eyedrops", clientId = 11512, sell = 95 },
+ { itemName = "small notebook", clientId = 11450, sell = 480 },
+ { itemName = "small oil lamp", clientId = 2933, sell = 150 },
+ { itemName = "small pitchfork", clientId = 11513, sell = 70 },
+ { itemName = "small tropical fish", clientId = 39408, sell = 380 },
+ { itemName = "smoldering eye", clientId = 39543, sell = 470000 },
+ { itemName = "snake skin", clientId = 9694, sell = 400 },
+ { itemName = "solid rage", clientId = 23517, sell = 310 },
+ { itemName = "some grimeleech wings", clientId = 22730, sell = 1200 },
+ { itemName = "spark sphere", clientId = 23518, sell = 350 },
+ { itemName = "sparkion claw", clientId = 23502, sell = 290 },
+ { itemName = "sparkion legs", clientId = 23504, sell = 310 },
+ { itemName = "sparkion stings", clientId = 23505, sell = 280 },
+ { itemName = "sparkion tail", clientId = 23503, sell = 300 },
+ { itemName = "spellsinger's seal", clientId = 14008, sell = 280 },
+ { itemName = "sphinx feather", clientId = 31437, sell = 470 },
+ { itemName = "sphinx tiara", clientId = 31438, sell = 360 },
+ { itemName = "spider fangs", clientId = 8031, sell = 10 },
+ { itemName = "spidris mandible", clientId = 14082, sell = 450 },
+ { itemName = "spiked iron ball", clientId = 10408, sell = 100 },
+ { itemName = "spiky club", clientId = 17859, sell = 300 },
+ { itemName = "spite's spirit", clientId = 33926, sell = 840000 },
+ { itemName = "spitter nose", clientId = 14078, sell = 340 },
+ { itemName = "spooky blue eye", clientId = 9642, sell = 95 },
+ { itemName = "srezz' eye", clientId = 34103, sell = 300 },
+ { itemName = "stalking seeds", clientId = 39384, sell = 1800 },
+ { itemName = "stampor horn", clientId = 12312, sell = 280 },
+ { itemName = "stampor talons", clientId = 12313, sell = 150 },
+ { itemName = "star herb", clientId = 3736, sell = 15 },
+ { itemName = "stone herb", clientId = 3735, sell = 20 },
+ { itemName = "stone nose", clientId = 16137, sell = 590 },
+ { itemName = "stone wing", clientId = 10278, sell = 120 },
+ { itemName = "stonerefiner's skull", clientId = 27606, sell = 100 },
+ { itemName = "strand of medusa hair", clientId = 10309, sell = 600 },
+ { itemName = "strange proto matter", clientId = 23513, sell = 300 },
+ { itemName = "strange symbol", clientId = 3058, sell = 200 },
+ { itemName = "strange talisman", clientId = 3045, sell = 30, count = 200 },
+ { itemName = "streaked devourer eyes", clientId = 36772, sell = 500 },
+ { itemName = "streaked devourer legs", clientId = 36774, sell = 600 },
+ { itemName = "streaked devourer maw", clientId = 36773, sell = 400 },
+ { itemName = "striped fur", clientId = 10293, sell = 50 },
+ { itemName = "sulphider shell", clientId = 39375, sell = 2200 },
+ { itemName = "sulphur powder", clientId = 39376, sell = 1900 },
+ { itemName = "sulphurous stone", clientId = 10315, sell = 100 },
+ { itemName = "summer dress", clientId = 8046, sell = 1500 },
+ { itemName = "sun brooch", clientId = 43737, sell = 18000 },
+ { itemName = "swamp grass", clientId = 9686, sell = 20 },
+ { itemName = "swampling club", clientId = 17824, sell = 40 },
+ { itemName = "swampling moss", clientId = 17822, sell = 20 },
+ { itemName = "swarmer antenna", clientId = 14076, sell = 130 },
+ { itemName = "tail of corruption", clientId = 11672, sell = 240 },
+ { itemName = "tarantula egg", clientId = 10281, sell = 80 },
+ { itemName = "tarnished rhino figurine", clientId = 24387, sell = 320 },
+ { itemName = "tattered piece of robe", clientId = 9684, sell = 120 },
+ { itemName = "telescope eye", clientId = 33934, sell = 1600 },
+ { itemName = "tentacle of tentugly", clientId = 35611, sell = 27000 },
+ { itemName = "tentacle piece", clientId = 11666, sell = 5000 },
+ { itemName = "tentugly's eye", clientId = 35610, sell = 52000 },
+ { itemName = "tentugly's jaws", clientId = 35612, sell = 80000 },
+ { itemName = "terramite eggs", clientId = 10453, sell = 50 },
+ { itemName = "terramite legs", clientId = 10454, sell = 60 },
+ { itemName = "terramite shell", clientId = 10452, sell = 170 },
+ { itemName = "terrorbird beak", clientId = 10273, sell = 95 },
+ { itemName = "the handmaiden's protector", clientId = 6539, sell = 50000 },
+ { itemName = "the imperor's trident", clientId = 6534, sell = 50000 },
+ { itemName = "the plasmother's remains", clientId = 6535, sell = 50000 },
+ { itemName = "thick fur", clientId = 10307, sell = 150 },
+ { itemName = "thorn", clientId = 9643, sell = 100 },
+ { itemName = "tiger eye", clientId = 24961, sell = 350 },
+ { itemName = "token of love", clientId = 31594, sell = 440000 },
+ { itemName = "tooth file", clientId = 18924, sell = 60 },
+ { itemName = "tooth of tazhadur", clientId = 24940, sell = 10000 },
+ { itemName = "torn shirt", clientId = 25744, sell = 250 },
+ { itemName = "trapped bad dream monster", clientId = 20203, sell = 900 },
+ { itemName = "tremendous tyrant head", clientId = 36783, sell = 930 },
+ { itemName = "tremendous tyrant shell", clientId = 36784, sell = 740 },
+ { itemName = "tribal mask", clientId = 3403, sell = 250 },
+ { itemName = "troll green", clientId = 3741, sell = 25 },
+ { itemName = "trollroot", clientId = 11515, sell = 50 },
+ { itemName = "tunnel tyrant head", clientId = 27595, sell = 500 },
+ { itemName = "tunnel tyrant shell", clientId = 27596, sell = 700 },
+ { itemName = "tusk", clientId = 3044, sell = 100 },
+ { itemName = "two-headed turtle heads", clientId = 39409, sell = 460 },
+ { itemName = "undead heart", clientId = 10450, sell = 200 },
+ { itemName = "undertaker fangs", clientId = 39380, sell = 2700 },
+ { itemName = "unholy bone", clientId = 10316, sell = 480 },
+ { itemName = "unholy book", clientId = 6103, sell = 30000 },
+ { itemName = "urmahlullus mane", clientId = 31623, sell = 490000 },
+ { itemName = "urmahlullus paws", clientId = 31624, sell = 245000 },
+ { itemName = "urmahlullus tail", clientId = 31622, sell = 210000 },
+ { itemName = "utua's poison", clientId = 34101, sell = 230 },
+ { itemName = "vampire teeth", clientId = 9685, sell = 275 },
+ { itemName = "vampire's cape chain", clientId = 18927, sell = 150 },
+ { itemName = "varnished diremaw brainpan", clientId = 36781, sell = 750 },
+ { itemName = "varnished diremaw legs", clientId = 36782, sell = 670 },
+ { itemName = "veal", clientId = 32009, sell = 40 },
+ { itemName = "vein of ore", clientId = 16135, sell = 330 },
+ { itemName = "venison", clientId = 18995, sell = 55 },
+ { itemName = "vexclaw talon", clientId = 22728, sell = 1100 },
+ { itemName = "vial of hatred", clientId = 33927, sell = 737000 },
+ { itemName = "vibrant heart", clientId = 34143, sell = 2100 },
+ { itemName = "vibrant robe", clientId = 34144, sell = 1200 },
+ { itemName = "violet glass plate", clientId = 29347, sell = 2150 },
+ { itemName = "volatile proto matter", clientId = 23514, sell = 300 },
+ { itemName = "war horn", clientId = 2958, sell = 8000 },
+ { itemName = "warmaster's wristguards", clientId = 10405, sell = 200 },
+ { itemName = "warwolf fur", clientId = 10318, sell = 30 },
+ { itemName = "waspoid claw", clientId = 14080, sell = 320 },
+ { itemName = "waspoid wing", clientId = 14081, sell = 190 },
+ { itemName = "weaver's wandtip", clientId = 10397, sell = 250 },
+ { itemName = "werebadger claws", clientId = 22051, sell = 160 },
+ { itemName = "werebadger skull", clientId = 22055, sell = 185 },
+ { itemName = "werebear fur", clientId = 22057, sell = 185 },
+ { itemName = "werebear skull", clientId = 22056, sell = 195 },
+ { itemName = "wereboar hooves", clientId = 22053, sell = 175 },
+ { itemName = "wereboar tusk", clientId = 22054, sell = 165 },
+ { itemName = "werecrocodile tongue", clientId = 43729, sell = 570 },
+ { itemName = "werefox tail", clientId = 27463, sell = 200 },
+ { itemName = "werehyaena nose", clientId = 33943, sell = 220 },
+ { itemName = "werehyaena talisman", clientId = 33944, sell = 350 },
+ { itemName = "werepanther claw", clientId = 43731, sell = 280 },
+ { itemName = "weretiger tooth", clientId = 43730, sell = 490 },
+ { itemName = "werewolf fangs", clientId = 22052, sell = 180 },
+ { itemName = "werewolf fur", clientId = 10317, sell = 380 },
+ { itemName = "white deer antlers", clientId = 12544, sell = 400 },
+ { itemName = "white deer skin", clientId = 12545, sell = 245 },
+ { itemName = "white silk flower", clientId = 34008, sell = 9000 },
+ { itemName = "widow's mandibles", clientId = 10411, sell = 110 },
+ { itemName = "wild flowers", clientId = 25691, sell = 120 },
+ { itemName = "wimp tooth chain", clientId = 17847, sell = 120 },
+ { itemName = "winged tail", clientId = 10313, sell = 800 },
+ { itemName = "winter wolf fur", clientId = 10295, sell = 20 },
+ { itemName = "witch broom", clientId = 9652, sell = 60 },
+ { itemName = "withered pauldrons", clientId = 27607, sell = 850 },
+ { itemName = "withered scalp", clientId = 27608, sell = 900 },
+ { itemName = "wood", clientId = 5901, sell = 5 },
+ { itemName = "wool", clientId = 10319, sell = 15 },
+ { itemName = "writhing brain", clientId = 32600, sell = 370000 },
+ { itemName = "writhing heart", clientId = 32599, sell = 185000 },
+ { itemName = "wyrm scale", clientId = 9665, sell = 400 },
+ { itemName = "wyvern talisman", clientId = 9644, sell = 265 },
+ { itemName = "yielocks", clientId = 12805, sell = 600 },
+ { itemName = "yielowax", clientId = 12742, sell = 600 },
+ { itemName = "yirkas' egg", clientId = 34102, sell = 280 },
+ { itemName = "young lich worm", clientId = 31590, sell = 25000 },
+ { itemName = "zaogun flag", clientId = 10413, sell = 600 },
+ { itemName = "zaogun's shoulderplates", clientId = 10414, sell = 150 },
+ },
+
+ ["equipment"] = {
+ { itemName = "abyss hammer", clientId = 7414, sell = 20000 },
+ { itemName = "albino plate", clientId = 19358, sell = 1500 },
+ { itemName = "alloy legs", clientId = 21168, sell = 11000 },
+ { itemName = "amber staff", clientId = 7426, sell = 8000 },
+ { itemName = "ancient shield", clientId = 3432, sell = 900 },
+ { itemName = "angelic axe", clientId = 7436, sell = 5000 },
+ { itemName = "arbalest", clientId = 5803, sell = 42000 },
+ { itemName = "arcane staff", clientId = 3341, sell = 42000 },
+ { itemName = "assassin dagger", clientId = 7404, sell = 20000 },
+ { itemName = "axe", clientId = 3274, sell = 7 },
+ { itemName = "badger boots", clientId = 22086, sell = 7500 },
+ { itemName = "bandana", clientId = 5917, sell = 150 },
+ { itemName = "battle axe", clientId = 3266, sell = 80 },
+ { itemName = "battle hammer", clientId = 3305, sell = 120 },
+ { itemName = "battle shield", clientId = 3413, sell = 95 },
+ { itemName = "batwing hat", clientId = 9103, sell = 8000 },
+ { itemName = "beastslayer axe", clientId = 3344, sell = 1500 },
+ { itemName = "belted cape", clientId = 8044, sell = 500 },
+ { itemName = "black shield", clientId = 3429, sell = 800 },
+ { itemName = "blacksteel sword", clientId = 7406, sell = 6000 },
+ { itemName = "blade of corruption", clientId = 11693, sell = 60000 },
+ { itemName = "blessed sceptre", clientId = 7429, sell = 40000 },
+ { itemName = "bloody edge", clientId = 7416, sell = 30000 },
+ { itemName = "blue legs", clientId = 645, sell = 15000 },
+ { itemName = "blue robe", clientId = 3567, sell = 10000 },
+ { itemName = "bone club", clientId = 3337, sell = 5 },
+ { itemName = "bone shield", clientId = 3441, sell = 80 },
+ { itemName = "bone sword", clientId = 3338, sell = 20 },
+ { itemName = "bonebreaker", clientId = 7428, sell = 10000 },
+ { itemName = "bonelord helmet", clientId = 3408, sell = 7500 },
+ { itemName = "bonelord shield", clientId = 3418, sell = 1200 },
+ { itemName = "boots of haste", clientId = 3079, sell = 30000 },
+ { itemName = "brass armor", clientId = 3359, sell = 150 },
+ { itemName = "brass helmet", clientId = 3354, sell = 30 },
+ { itemName = "brass legs", clientId = 3372, sell = 49 },
+ { itemName = "brass shield", clientId = 3411, sell = 25 },
+ { itemName = "bright sword", clientId = 3295, sell = 6000 },
+ { itemName = "broadsword", clientId = 3301, sell = 500 },
+ { itemName = "butcher's axe", clientId = 7412, sell = 18000 },
+ { itemName = "butterfly ring", clientId = 25698, sell = 2000 },
+ { itemName = "calopteryx cape", clientId = 14086, sell = 15000 },
+ { itemName = "carapace shield", clientId = 14088, sell = 32000 },
+ { itemName = "carlin sword", clientId = 3283, sell = 118 },
+ { itemName = "castle shield", clientId = 3435, sell = 5000 },
+ { itemName = "chain armor", clientId = 3358, sell = 70 },
+ { itemName = "chain bolter", clientId = 8022, sell = 40000 },
+ { itemName = "chain helmet", clientId = 3352, sell = 17 },
+ { itemName = "chain legs", clientId = 3558, sell = 25 },
+ { itemName = "chaos mace", clientId = 7427, sell = 9000 },
+ { itemName = "claw of 'the noxious spawn'", clientId = 9392, sell = 15000 },
+ { itemName = "club", clientId = 3270, sell = 1 },
+ { itemName = "coat", clientId = 3562, sell = 1 },
+ { itemName = "cobra crown", clientId = 11674, sell = 50000 },
+ { itemName = "coconut shoes", clientId = 9017, sell = 500 },
+ { itemName = "composite hornbow", clientId = 8027, sell = 25000 },
+ { itemName = "copper shield", clientId = 3430, sell = 50 },
+ { itemName = "cowtana", clientId = 21177, sell = 2500 },
+ { itemName = "cranial basher", clientId = 7415, sell = 30000 },
+ { itemName = "crocodile boots", clientId = 3556, sell = 1000 },
+ { itemName = "crowbar", clientId = 3304, sell = 50 },
+ { itemName = "crown armor", clientId = 3381, sell = 12000 },
+ { itemName = "crown helmet", clientId = 3385, sell = 2500 },
+ { itemName = "crown legs", clientId = 3382, sell = 12000 },
+ { itemName = "crown shield", clientId = 3419, sell = 8000 },
+ { itemName = "crusader helmet", clientId = 3391, sell = 6000 },
+ { itemName = "crystal crossbow", clientId = 16163, sell = 35000 },
+ { itemName = "crystal mace", clientId = 3333, sell = 12000 },
+ { itemName = "crystal ring", clientId = 3007, sell = 250 },
+ { itemName = "crystal sword", clientId = 7449, sell = 600 },
+ { itemName = "crystal wand", clientId = 3068, sell = 10000 },
+ { itemName = "crystalline armor", clientId = 8050, sell = 16000 },
+ { itemName = "crystalline axe", clientId = 16161, sell = 10000 },
+ { itemName = "crystalline spikes", clientId = 16138, sell = 440 },
+ { itemName = "crystalline sword", clientId = 16160, sell = 2000 },
+ { itemName = "dagger", clientId = 3267, sell = 2 },
+ { itemName = "daramian mace", clientId = 3327, sell = 110 },
+ { itemName = "daramian waraxe", clientId = 3328, sell = 1000 },
+ { itemName = "dark armor", clientId = 3383, sell = 400 },
+ { itemName = "dark helmet", clientId = 3384, sell = 250 },
+ { itemName = "dark shield", clientId = 3421, sell = 400 },
+ { itemName = "death ring", clientId = 6299, sell = 1000 },
+ { itemName = "deepling axe", clientId = 13991, sell = 40000 },
+ { itemName = "deepling squelcher", clientId = 14250, sell = 7000 },
+ { itemName = "deepling staff", clientId = 13987, sell = 4000 },
+ { itemName = "demon helmet", clientId = 3387, sell = 40000 },
+ { itemName = "demon shield", clientId = 3420, sell = 30000 },
+ { itemName = "demonbone amulet", clientId = 3019, sell = 32000 },
+ { itemName = "demonrage sword", clientId = 7382, sell = 36000 },
+ { itemName = "depth calcei", clientId = 13997, sell = 25000 },
+ { itemName = "depth galea", clientId = 13995, sell = 35000 },
+ { itemName = "depth lorica", clientId = 13994, sell = 30000 },
+ { itemName = "depth ocrea", clientId = 13996, sell = 16000 },
+ { itemName = "depth scutum", clientId = 13998, sell = 36000 },
+ { itemName = "devil helmet", clientId = 3356, sell = 1000 },
+ { itemName = "diamond sceptre", clientId = 7387, sell = 3000 },
+ { itemName = "divine plate", clientId = 8057, sell = 55000 },
+ { itemName = "djinn blade", clientId = 3339, sell = 15000 },
+ { itemName = "double axe", clientId = 3275, sell = 260 },
+ { itemName = "doublet", clientId = 3379, sell = 3 },
+ { itemName = "drachaku", clientId = 10391, sell = 10000 },
+ { itemName = "dragon hammer", clientId = 3322, sell = 2000 },
+ { itemName = "dragon lance", clientId = 3302, sell = 9000 },
+ { itemName = "dragon robe", clientId = 8039, sell = 50000 },
+ { itemName = "dragon scale mail", clientId = 3386, sell = 40000 },
+ { itemName = "dragon shield", clientId = 3416, sell = 4000 },
+ { itemName = "dragon slayer", clientId = 7402, sell = 15000 },
+ { itemName = "dragonbone staff", clientId = 7430, sell = 3000 },
+ { itemName = "draken boots", clientId = 4033, sell = 40000 },
+ { itemName = "drakinata", clientId = 10388, sell = 10000 },
+ { itemName = "dream essence egg", clientId = 30005, sell = 205 },
+ { itemName = "dung ball", clientId = 14225, sell = 130 },
+ { itemName = "dreaded cleaver", clientId = 7419, sell = 15000 },
+ { itemName = "dream blossom staff", clientId = 25700, sell = 5000 },
+ { itemName = "dwarven armor", clientId = 3397, sell = 30000 },
+ { itemName = "dwarven axe", clientId = 3323, sell = 1500 },
+ { itemName = "dwarven legs", clientId = 3398, sell = 40000 },
+ { itemName = "dwarven shield", clientId = 3425, sell = 100 },
+ { itemName = "elite draken mail", clientId = 11651, sell = 50000 },
+ { itemName = "elvish bow", clientId = 7438, sell = 2000 },
+ { itemName = "epee", clientId = 3326, sell = 8000 },
+ { itemName = "execowtioner axe", clientId = 21176, sell = 12000 },
+ { itemName = "executioner", clientId = 7453, sell = 55000 },
+ { itemName = "fire axe", clientId = 3320, sell = 8000 },
+ { itemName = "fire sword", clientId = 3280, sell = 4000 },
+ { itemName = "fishing rod", clientId = 3483, sell = 40 },
+ { itemName = "focus cape", clientId = 8043, sell = 6000 },
+ { itemName = "fur armor", clientId = 22085, sell = 5000 },
+ { itemName = "fur boots", clientId = 7457, sell = 2000 },
+ { itemName = "furry club", clientId = 7432, sell = 1000 },
+ { itemName = "giant sword", clientId = 3281, sell = 17000 },
+ { itemName = "glacial rod", clientId = 16118, sell = 6500 },
+ { itemName = "glacier amulet", clientId = 815, sell = 1500 },
+ { itemName = "glacier kilt", clientId = 823, sell = 11000 },
+ { itemName = "glacier mask", clientId = 829, sell = 2500 },
+ { itemName = "glacier robe", clientId = 824, sell = 11000 },
+ { itemName = "glacier shoes", clientId = 819, sell = 2500 },
+ { itemName = "glooth axe", clientId = 21180, sell = 1500 },
+ { itemName = "glooth blade", clientId = 21179, sell = 1500 },
+ { itemName = "glooth cap", clientId = 21164, sell = 7000 },
+ { itemName = "glooth club", clientId = 21178, sell = 1500 },
+ { itemName = "glooth whip", clientId = 21172, sell = 2500 },
+ { itemName = "glorious axe", clientId = 7454, sell = 3000 },
+ { itemName = "golden armor", clientId = 3360, sell = 20000 },
+ { itemName = "golden legs", clientId = 3364, sell = 30000 },
+ { itemName = "greenwood coat", clientId = 8041, sell = 50000 },
+ { itemName = "griffin shield", clientId = 3433, sell = 3000 },
+ { itemName = "guardian axe", clientId = 14043, sell = 9000 },
+ { itemName = "guardian boots", clientId = 10323, sell = 35000 },
+ { itemName = "guardian halberd", clientId = 3315, sell = 11000 },
+ { itemName = "guardian shield", clientId = 3415, sell = 2000 },
+ { itemName = "hailstorm rod", clientId = 3067, sell = 3000 },
+ { itemName = "halberd", clientId = 3269, sell = 400 },
+ { itemName = "hammer of wrath", clientId = 3332, sell = 30000 },
+ { itemName = "hand axe", clientId = 3268, sell = 4 },
+ { itemName = "hatchet", clientId = 3276, sell = 25 },
+ { itemName = "haunted blade", clientId = 7407, sell = 8000 },
+ { itemName = "headchopper", clientId = 7380, sell = 6000 },
+ { itemName = "heat core", clientId = 21167, sell = 10000 },
+ { itemName = "heavy trident", clientId = 12683, sell = 2000 },
+ { itemName = "heavy mace", clientId = 3340, sell = 50000 },
+ { itemName = "helmet of the lost", clientId = 17852, sell = 2000 },
+ { itemName = "heroic axe", clientId = 7389, sell = 30000 },
+ { itemName = "hibiscus dress", clientId = 8045, sell = 3000 },
+ { itemName = "hive bow", clientId = 14246, sell = 28000 },
+ { itemName = "hive scythe", clientId = 14089, sell = 17000 },
+ { itemName = "ice rapier", clientId = 3284, sell = 1000 },
+ { itemName = "iron helmet", clientId = 3353, sell = 150 },
+ { itemName = "jade hammer", clientId = 7422, sell = 25000 },
+ { itemName = "jade hat", clientId = 10451, sell = 9000 },
+ { itemName = "jagged sickle", clientId = 32595, sell = 150000 },
+ { itemName = "katana", clientId = 3300, sell = 35 },
+ { itemName = "knight armor", clientId = 3370, sell = 5000 },
+ { itemName = "knight axe", clientId = 3318, sell = 2000 },
+ { itemName = "knight legs", clientId = 3371, sell = 5000 },
+ { itemName = "krimhorn helmet", clientId = 7461, sell = 200 },
+ { itemName = "lavos armor", clientId = 8049, sell = 16000 },
+ { itemName = "leaf legs", clientId = 9014, sell = 500 },
+ { itemName = "leaf star", clientId = 25735, sell = 50 },
+ { itemName = "leather armor", clientId = 3361, sell = 12 },
+ { itemName = "leather boots", clientId = 3552, sell = 2 },
+ { itemName = "leather helmet", clientId = 3355, sell = 4 },
+ { itemName = "leather legs", clientId = 3559, sell = 9 },
+ { itemName = "legion helmet", clientId = 3374, sell = 22 },
+ { itemName = "leopard armor", clientId = 3404, sell = 1000 },
+ { itemName = "life preserver", clientId = 17813, sell = 300 },
+ { itemName = "light shovel", clientId = 5710, sell = 300 },
+ { itemName = "lightning boots", clientId = 820, sell = 2500 },
+ { itemName = "lightning headband", clientId = 828, sell = 2500 },
+ { itemName = "lightning legs", clientId = 822, sell = 11000 },
+ { itemName = "lightning pendant", clientId = 816, sell = 1500 },
+ { itemName = "lightning robe", clientId = 825, sell = 11000 },
+ { itemName = "longsword", clientId = 3285, sell = 51 },
+ { itemName = "lunar staff", clientId = 7424, sell = 5000 },
+ { itemName = "mace", clientId = 3286, sell = 30 },
+ { itemName = "machete", clientId = 3308, sell = 6 },
+ { itemName = "magic plate armor", clientId = 3366, sell = 90000 },
+ { itemName = "magma boots", clientId = 818, sell = 2500 },
+ { itemName = "magma legs", clientId = 821, sell = 11000 },
+ { itemName = "magma monocle", clientId = 827, sell = 2500 },
+ { itemName = "mammoth fur cape", clientId = 7463, sell = 6000 },
+ { itemName = "mammoth fur shorts", clientId = 7464, sell = 850 },
+ { itemName = "mammoth whopper", clientId = 7381, sell = 300 },
+ { itemName = "mastermind shield", clientId = 3414, sell = 50000 },
+ { itemName = "meat hammer", clientId = 32093, sell = 60 },
+ { itemName = "medusa shield", clientId = 3436, sell = 9000 },
+ { itemName = "mercenary sword", clientId = 7386, sell = 12000 },
+ { itemName = "mercurial wing", clientId = 39395, sell = 2500 },
+ { itemName = "metal bat", clientId = 21171, sell = 9000 },
+ { itemName = "metal jaw", clientId = 21193, sell = 260 },
+ { itemName = "metal spats", clientId = 21169, sell = 2000 },
+ { itemName = "mino lance", clientId = 21174, sell = 7000 },
+ { itemName = "mino shield", clientId = 21175, sell = 3000 },
+ { itemName = "modified crossbow", clientId = 8021, sell = 10000 },
+ { itemName = "mooh'tah plate", clientId = 21166, sell = 6000 },
+ { itemName = "moohtant cudgel", clientId = 21173, sell = 14000 },
+ { itemName = "moonlight rod", clientId = 3070, sell = 200 },
+ { itemName = "morning star", clientId = 3282, sell = 100 },
+ { itemName = "muck rod", clientId = 16117, sell = 6000 },
+ { itemName = "mycological bow", clientId = 16164, sell = 35000 },
+ { itemName = "mystic blade", clientId = 7384, sell = 30000 },
+ { itemName = "mystic turban", clientId = 3574, sell = 150 },
+ { itemName = "naginata", clientId = 3314, sell = 2000 },
+ { itemName = "necrotic rod", clientId = 3069, sell = 1000 },
+ { itemName = "nightmare blade", clientId = 7418, sell = 35000 },
+ { itemName = "noble armor", clientId = 3380, sell = 900 },
+ { itemName = "noble axe", clientId = 7456, sell = 10000 },
+ { itemName = "noble cape", clientId = 31593, sell = 425000 },
+ { itemName = "noble turban", clientId = 11486, sell = 430 },
+ { itemName = "norse shield", clientId = 7460, sell = 1500 },
+ { itemName = "northwind rod", clientId = 8083, sell = 1500 },
+ { itemName = "obsidian lance", clientId = 3313, sell = 500 },
+ { itemName = "ogre choppa", clientId = 22172, sell = 1500 },
+ { itemName = "ogre klubba", clientId = 22171, sell = 2500 },
+ { itemName = "ogre scepta", clientId = 22183, sell = 3600 },
+ { itemName = "onyx flail", clientId = 7421, sell = 22000 },
+ { itemName = "orcish axe", clientId = 3316, sell = 350 },
+ { itemName = "orcish maul", clientId = 7392, sell = 6000 },
+ { itemName = "oriental shoes", clientId = 21981, sell = 15000 },
+ { itemName = "ornamented axe", clientId = 7411, sell = 20000 },
+ { itemName = "ornamented shield", clientId = 3424, sell = 1500 },
+ { itemName = "ornate chestplate", clientId = 13993, sell = 60000 },
+ { itemName = "ornate crossbow", clientId = 14247, sell = 12000 },
+ { itemName = "ornate legs", clientId = 13999, sell = 40000 },
+ { itemName = "ornate mace", clientId = 14001, sell = 42000 },
+ { itemName = "ornate shield", clientId = 14000, sell = 42000 },
+ { itemName = "paladin armor", clientId = 8063, sell = 15000 },
+ { itemName = "patched boots", clientId = 3550, sell = 2000 },
+ { itemName = "pharaoh sword", clientId = 3334, sell = 23000 },
+ { itemName = "phoenix shield", clientId = 3439, sell = 16000 },
+ { itemName = "pick", clientId = 3456, sell = 15 },
+ { itemName = "plate armor", clientId = 3357, sell = 400 },
+ { itemName = "plate legs", clientId = 3557, sell = 115 },
+ { itemName = "plate shield", clientId = 3410, sell = 45 },
+ { itemName = "platinum amulet", clientId = 3055, sell = 2500 },
+ { itemName = "poison dagger", clientId = 3299, sell = 50 },
+ { itemName = "queen's sceptre", clientId = 7410, sell = 20000 },
+ { itemName = "ragnir helmet", clientId = 7462, sell = 400 },
+ { itemName = "rapier", clientId = 3272, sell = 5 },
+ { itemName = "ratana", clientId = 17812, sell = 500 },
+ { itemName = "relic sword", clientId = 7383, sell = 25000 },
+ { itemName = "rift bow", clientId = 22866, sell = 45000 },
+ { itemName = "rift crossbow", clientId = 22867, sell = 45000 },
+ { itemName = "rift lance", clientId = 22727, sell = 30000 },
+ { itemName = "rift shield", clientId = 22726, sell = 50000 },
+ { itemName = "ripper lance", clientId = 3346, sell = 500 },
+ { itemName = "rod", clientId = 33929, sell = 2200 },
+ { itemName = "rope", clientId = 3003, sell = 15 },
+ { itemName = "royal axe", clientId = 7434, sell = 40000 },
+ { itemName = "royal helmet", clientId = 3392, sell = 30000 },
+ { itemName = "rubber cap", clientId = 21165, sell = 11000 },
+ { itemName = "runed sword", clientId = 7417, sell = 45000 },
+ { itemName = "ruthless axe", clientId = 6553, sell = 45000 },
+ { itemName = "sabre", clientId = 3273, sell = 12 },
+ { itemName = "sai", clientId = 10389, sell = 16500 },
+ { itemName = "sapphire hammer", clientId = 7437, sell = 7000 },
+ { itemName = "scale armor", clientId = 3377, sell = 75 },
+ { itemName = "scarab shield", clientId = 3440, sell = 2000 },
+ { itemName = "scimitar", clientId = 3307, sell = 150 },
+ { itemName = "scythe", clientId = 3453, sell = 10 },
+ { itemName = "serpent sword", clientId = 3297, sell = 900 },
+ { itemName = "shadow sceptre", clientId = 7451, sell = 10000 },
+ { itemName = "short sword", clientId = 3294, sell = 10 },
+ { itemName = "shovel", clientId = 3457, sell = 8 },
+ { itemName = "sickle", clientId = 3293, sell = 3 },
+ { itemName = "silkweaver bow", clientId = 8029, sell = 12000 },
+ { itemName = "silver dagger", clientId = 3290, sell = 500 },
+ { itemName = "skull helmet", clientId = 5741, sell = 40000 },
+ { itemName = "skull staff", clientId = 3324, sell = 6000 },
+ { itemName = "skullcracker armor", clientId = 8061, sell = 18000 },
+ { itemName = "small axe", clientId = 3462, sell = 5 },
+ { itemName = "snakebite rod", clientId = 3066, sell = 100 },
+ { itemName = "soldier helmet", clientId = 3375, sell = 16 },
+ { itemName = "spellbook of enlightenment", clientId = 8072, sell = 4000 },
+ { itemName = "spellbook of lost souls", clientId = 8075, sell = 19000 },
+ { itemName = "spellbook of mind control", clientId = 8074, sell = 13000 },
+ { itemName = "spellbook of warding", clientId = 8073, sell = 8000 },
+ { itemName = "spellwand", clientId = 651, sell = 299 },
+ { itemName = "spellweaver's robe", clientId = 10438, sell = 12000 },
+ { itemName = "spike shield", clientId = 17810, sell = 250 },
+ { itemName = "spike sword", clientId = 3271, sell = 1000 },
+ { itemName = "spiked squelcher", clientId = 7452, sell = 5000 },
+ { itemName = "spirit cloak", clientId = 8042, sell = 350 },
+ { itemName = "springsprout rod", clientId = 8084, sell = 3600 },
+ { itemName = "steel boots", clientId = 3554, sell = 30000 },
+ { itemName = "steel helmet", clientId = 3351, sell = 293 },
+ { itemName = "steel shield", clientId = 3409, sell = 80 },
+ { itemName = "strange helmet", clientId = 3373, sell = 500 },
+ { itemName = "studded armor", clientId = 3378, sell = 25 },
+ { itemName = "studded club", clientId = 3336, sell = 10 },
+ { itemName = "studded helmet", clientId = 3376, sell = 20 },
+ { itemName = "studded legs", clientId = 3362, sell = 15 },
+ { itemName = "studded shield", clientId = 3426, sell = 16 },
+ { itemName = "swamplair armor", clientId = 8052, sell = 16000 },
+ { itemName = "sword", clientId = 3264, sell = 25 },
+ { itemName = "taurus mace", clientId = 7425, sell = 500 },
+ { itemName = "tempest shield", clientId = 3442, sell = 35000 },
+ { itemName = "terra boots", clientId = 813, sell = 2500 },
+ { itemName = "terra hood", clientId = 830, sell = 2500 },
+ { itemName = "terra legs", clientId = 812, sell = 11000 },
+ { itemName = "terra mantle", clientId = 811, sell = 11000 },
+ { itemName = "terra rod", clientId = 3065, sell = 2000 },
+ { itemName = "thaian sword", clientId = 7391, sell = 16000 },
+ { itemName = "the avenger", clientId = 6527, sell = 42000 },
+ { itemName = "the ironworker", clientId = 8025, sell = 50000 },
+ { itemName = "the justice seeker", clientId = 7390, sell = 40000 },
+ { itemName = "throwing knife", clientId = 3298, sell = 2 },
+ { itemName = "tiara", clientId = 35578, sell = 11000 },
+ { itemName = "titan axe", clientId = 7413, sell = 4000 },
+ { itemName = "tortoise shield", clientId = 6131, sell = 150 },
+ { itemName = "tower shield", clientId = 3428, sell = 8000 },
+ { itemName = "twiceslicer", clientId = 11657, sell = 28000 },
+ { itemName = "twin hooks", clientId = 10392, sell = 500 },
+ { itemName = "two handed sword", clientId = 3265, sell = 450 },
+ { itemName = "underworld rod", clientId = 8082, sell = 4400 },
+ { itemName = "vampire shield", clientId = 3434, sell = 15000 },
+ { itemName = "viking helmet", clientId = 3367, sell = 66 },
+ { itemName = "viking shield", clientId = 3431, sell = 85 },
+ { itemName = "vile axe", clientId = 7388, sell = 30000 },
+ { itemName = "wand of cosmic energy", clientId = 3073, sell = 2000 },
+ { itemName = "wand of decay", clientId = 3072, sell = 1000 },
+ { itemName = "wand of defiance", clientId = 16096, sell = 6500 },
+ { itemName = "wand of draconia", clientId = 8093, sell = 1500 },
+ { itemName = "wand of dragonbreath", clientId = 3075, sell = 200 },
+ { itemName = "wand of everblazing", clientId = 16115, sell = 6000 },
+ { itemName = "wand of inferno", clientId = 3071, sell = 3000 },
+ { itemName = "wand of starstorm", clientId = 8092, sell = 3600 },
+ { itemName = "wand of voodoo", clientId = 8094, sell = 4400 },
+ { itemName = "wand of vortex", clientId = 3074, sell = 100 },
+ { itemName = "war axe", clientId = 3342, sell = 12000 },
+ { itemName = "war hammer", clientId = 3279, sell = 1200 },
+ { itemName = "warrior helmet", clientId = 3369, sell = 5000 },
+ { itemName = "warrior's axe", clientId = 14040, sell = 11000 },
+ { itemName = "warrior's shield", clientId = 14042, sell = 9000 },
+ { itemName = "watch", clientId = 2906, sell = 6 },
+ { itemName = "wereboar loincloth", clientId = 22087, sell = 1500 },
+ { itemName = "windborn colossus armor", clientId = 8055, sell = 50000 },
+ { itemName = "witch hat", clientId = 9653, sell = 5000 },
+ { itemName = "wood cape", clientId = 3575, sell = 5000 },
+ { itemName = "wooden hammer", clientId = 3459, sell = 15 },
+ { itemName = "wooden shield", clientId = 3412, sell = 5 },
+ { itemName = "wooden spellbook", clientId = 25699, sell = 12000 },
+ { itemName = "wyvern fang", clientId = 7408, sell = 1500 },
+ { itemName = "zaoan armor", clientId = 10384, sell = 14000 },
+ { itemName = "zaoan halberd", clientId = 10406, sell = 500 },
+ { itemName = "zaoan helmet", clientId = 10385, sell = 45000 },
+ { itemName = "zaoan legs", clientId = 10387, sell = 14000 },
+ { itemName = "zaoan robe", clientId = 10439, sell = 12000 },
+ { itemName = "zaoan shoes", clientId = 10386, sell = 5000 },
+ { itemName = "zaoan sword", clientId = 10390, sell = 30000 },
+ },
+
+ ["amulets"] = {
+ { itemName = "amulet of loss", clientId = 3057, sell = 45000 },
+ { itemName = "ancient amulet", clientId = 3025, sell = 200 },
+ { itemName = "collar of blue plasma", clientId = 23542, sell = 6000 },
+ { itemName = "collar of green plasma", clientId = 23543, sell = 6000 },
+ { itemName = "collar of red plasma", clientId = 23544, sell = 6000 },
+ { itemName = "crystal necklace", clientId = 3008, sell = 400 },
+ { itemName = "dragon necklace", clientId = 3085, sell = 100, count = 200 },
+ { itemName = "elven amulet", clientId = 3082, sell = 100, count = 50 },
+ { itemName = "garlic necklace", clientId = 3083, sell = 50 },
+ { itemName = "gearwheel chain", clientId = 21170, sell = 5000 },
+ { itemName = "glooth amulet", clientId = 21183, sell = 2000 },
+ { itemName = "leviathan's amulet", clientId = 9303, sell = 3000 },
+ { itemName = "magma amulet", clientId = 817, sell = 1500 },
+ { itemName = "noble amulet", clientId = 31595, sell = 430000 },
+ { itemName = "onyx pendant", clientId = 22195, sell = 3500 },
+ { itemName = "ornate locket", clientId = 30056, sell = 18000 },
+ { itemName = "protection amulet", clientId = 3084, sell = 100, count = 250 },
+ { itemName = "ruby necklace", clientId = 3016, sell = 2000 },
+ { itemName = "sacred tree amulet", clientId = 9302, sell = 3000 },
+ { itemName = "scarab amulet", clientId = 3018, sell = 200 },
+ { itemName = "shockwave amulet", clientId = 9304, sell = 3000 },
+ { itemName = "silver amulet", clientId = 3054, sell = 50, count = 200 },
+ { itemName = "star amulet", clientId = 3014, sell = 500 },
+ { itemName = "stone skin amulet", clientId = 3081, sell = 500, count = 5 },
+ { itemName = "terra amulet", clientId = 814, sell = 1500 },
+ { itemName = "wailing widow's necklace", clientId = 10412, sell = 3000 },
+ { itemName = "werewolf amulet", clientId = 22060, sell = 3000 },
+ { itemName = "wolf tooth chain", clientId = 3012, sell = 100 },
+ },
+
+ ["rings"] = {
+ { itemName = "axe ring", clientId = 3092, sell = 100 },
+ { itemName = "club ring", clientId = 3093, sell = 100 },
+ { itemName = "dwarven ring", clientId = 3097, sell = 100 },
+ { itemName = "energy ring", clientId = 3051, sell = 100 },
+ { itemName = "life ring", clientId = 3052, sell = 50 },
+ { itemName = "might ring", clientId = 3048, sell = 250, count = 20 },
+ { itemName = "power ring", clientId = 3050, sell = 50 },
+ { itemName = "ring of blue plasma", clientId = 23529, sell = 8000 },
+ { itemName = "ring of green plasma", clientId = 23531, sell = 8000 },
+ { itemName = "ring of healing", clientId = 3098, sell = 100 },
+ { itemName = "ring of red plasma", clientId = 23533, sell = 8000 },
+ { itemName = "ring of the sky", clientId = 3006, sell = 30000 },
+ { itemName = "signet ring", clientId = 31592, sell = 480000 },
+ { itemName = "stealth ring", clientId = 3049, sell = 200 },
+ { itemName = "sword ring", clientId = 3091, sell = 100 },
+ { itemName = "time ring", clientId = 3053, sell = 100 },
+ { itemName = "wedding ring", clientId = 3004, sell = 100 },
+ },
+
+ ["valuables"] = {
+ { itemName = "ancient coin", clientId = 24390, sell = 350 },
+ { itemName = "ancient stone", clientId = 9632, sell = 200 },
+ { itemName = "angel figurine", clientId = 32589, sell = 36000 },
+ { itemName = "ankh", clientId = 3077, sell = 100 },
+ { itemName = "bar of gold", clientId = 14112, sell = 10000 },
+ { itemName = "basalt figurine", clientId = 17857, sell = 160 },
+ { itemName = "battle stone", clientId = 11447, sell = 290 },
+ { itemName = "beast's nightmare-cushion", clientId = 29946, sell = 630000 },
+ { itemName = "black pearl", clientId = 3027, sell = 280 },
+ { itemName = "blood goblet", clientId = 8531, sell = 10000 },
+ { itemName = "blue crystal shard", clientId = 16119, sell = 1500 },
+ { itemName = "blue crystal splinter", clientId = 16124, sell = 400 },
+ { itemName = "blue gem", clientId = 3041, sell = 5000 },
+ { itemName = "broken iks cuirass", clientId = 40533, sell = 640 },
+ { itemName = "brown crystal splinter", clientId = 16123, sell = 400 },
+ { itemName = "brown giant shimmering pearl", clientId = 282, sell = 3000 },
+ { itemName = "ceremonial ankh", clientId = 6561, sell = 20000 },
+ { itemName = "cracked alabaster vase", clientId = 24385, sell = 180 },
+ { itemName = "crown", clientId = 33935, sell = 2700 },
+ { itemName = "cry-stal", clientId = 39394, sell = 3200 },
+ { itemName = "crystal ball", clientId = 3076, sell = 190 },
+ { itemName = "crystal of balance", clientId = 9028, sell = 1000 },
+ { itemName = "crystal of focus", clientId = 9027, sell = 2000 },
+ { itemName = "crystal of power", clientId = 9067, sell = 3000 },
+ { itemName = "crystallized anger", clientId = 23507, sell = 400 },
+ { itemName = "cyan crystal fragment", clientId = 16125, sell = 800 },
+ { itemName = "dark rosary", clientId = 10303, sell = 48 },
+ { itemName = "death toll", clientId = 32703, sell = 1000 },
+ { itemName = "diamond", clientId = 32770, sell = 15000 },
+ { itemName = "dragon figurine", clientId = 30053, sell = 45000 },
+ { itemName = "eldritch crystal", clientId = 36835, sell = 48000 },
+ { itemName = "emerald bangle", clientId = 3010, sell = 800 },
+ { itemName = "explorer brooch", clientId = 4871, sell = 50 },
+ { itemName = "figurine of cruelty", clientId = 34019, sell = 3100000 },
+ { itemName = "figurine of greed", clientId = 34021, sell = 2900000 },
+ { itemName = "figurine of hatred", clientId = 34020, sell = 2700000 },
+ { itemName = "figurine of malice", clientId = 34018, sell = 2800000 },
+ { itemName = "figurine of megalomania", clientId = 33953, sell = 5000000 },
+ { itemName = "figurine of spite", clientId = 33952, sell = 3000000 },
+ { itemName = "flawless ice crystal", clientId = 942, sell = 5000 },
+ { itemName = "flintstone", clientId = 12806, sell = 800 },
+ { itemName = "frozen lightning", clientId = 23519, sell = 270 },
+ { itemName = "frozen starlight", clientId = 3249, sell = 20000 },
+ { itemName = "gemmed figurine", clientId = 24392, sell = 3500 },
+ { itemName = "giant amethyst", clientId = 32622, sell = 60000 },
+ { itemName = "giant emerald", clientId = 30060, sell = 90000 },
+ { itemName = "giant pacifier", clientId = 21199, sell = 170 },
+ { itemName = "giant ruby", clientId = 30059, sell = 70000 },
+ { itemName = "giant sapphire", clientId = 30061, sell = 50000 },
+ { itemName = "giant topaz", clientId = 32623, sell = 80000 },
+ { itemName = "glowing rune", clientId = 28570, sell = 350 },
+ { itemName = "gold ingot", clientId = 9058, sell = 5000 },
+ { itemName = "gold nugget", clientId = 3040, sell = 850 },
+ { itemName = "gold ring", clientId = 3063, sell = 8000 },
+ { itemName = "gold-brocaded cloth", clientId = 40529, sell = 175 },
+ { itemName = "golden amulet", clientId = 3013, sell = 2000 },
+ { itemName = "golden brush", clientId = 25689, sell = 250 },
+ { itemName = "golden cheese wedge", clientId = 35581, sell = 6000 },
+ { itemName = "golden dustbin", clientId = 35579, sell = 7000 },
+ { itemName = "golden fafnar trophy", clientId = 9626, sell = 10000 },
+ { itemName = "golden figurine", clientId = 5799, sell = 3000 },
+ { itemName = "golden lotus brooch", clientId = 21974, sell = 270 },
+ { itemName = "golden mask", clientId = 31324, sell = 38000 },
+ { itemName = "golden mug", clientId = 2903, sell = 250 },
+ { itemName = "golden sickle", clientId = 3306, sell = 1000 },
+ { itemName = "golden skull", clientId = 35580, sell = 9000 },
+ { itemName = "golden sun coin", clientId = 43734, sell = 11000 },
+ { itemName = "golden tiger coin", clientId = 43735, sell = 11000 },
+ { itemName = "green crystal fragment", clientId = 16127, sell = 800 },
+ { itemName = "green crystal shard", clientId = 16121, sell = 1500 },
+ { itemName = "green crystal splinter", clientId = 16122, sell = 400 },
+ { itemName = "green gem", clientId = 3038, sell = 5000 },
+ { itemName = "green giant shimmering pearl", clientId = 281, sell = 3000 },
+ { itemName = "hexagonal ruby", clientId = 30180, sell = 30000 },
+ { itemName = "life crystal", clientId = 3061, sell = 85 },
+ { itemName = "magic light wand", clientId = 3046, sell = 35 },
+ { itemName = "medal of valiance", clientId = 31591, sell = 410000 },
+ { itemName = "mind stone", clientId = 3062, sell = 100 },
+ { itemName = "moonstone", clientId = 32771, sell = 13000 },
+ { itemName = "onyx chip", clientId = 22193, sell = 500 },
+ { itemName = "opal", clientId = 22194, sell = 500 },
+ { itemName = "orb", clientId = 3060, sell = 750 },
+ { itemName = "orichalcum pearl", clientId = 5021, sell = 40 },
+ { itemName = "pirate coin", clientId = 35572, sell = 110 },
+ { itemName = "plasma pearls", clientId = 23506, sell = 250 },
+ { itemName = "prismatic quartz", clientId = 24962, sell = 450 },
+ { itemName = "purple tome", clientId = 2848, sell = 2000 },
+ { itemName = "rainbow quartz", clientId = 25737, sell = 800 },
+ { itemName = "red crystal fragment", clientId = 16126, sell = 800 },
+ { itemName = "red gem", clientId = 3039, sell = 1000 },
+ { itemName = "red tome", clientId = 2852, sell = 2000 },
+ { itemName = "royal almandine", clientId = 39038, sell = 460000 },
+ { itemName = "scarab coin", clientId = 3042, sell = 100 },
+ { itemName = "sea horse figurine", clientId = 31323, sell = 42000 },
+ { itemName = "seacrest pearl", clientId = 21747, sell = 400 },
+ { itemName = "shiny stone", clientId = 10310, sell = 500 },
+ { itemName = "silver brooch", clientId = 3017, sell = 150 },
+ { itemName = "silver foxmouse coin", clientId = 43733, sell = 11000 },
+ { itemName = "silver hand mirror", clientId = 32772, sell = 10000 },
+ { itemName = "silver moon coin", clientId = 43732, sell = 11000 },
+ { itemName = "silver rune emblem explosion", clientId = 11607, sell = 5000 },
+ { itemName = "silver rune emblem heavy magic missile", clientId = 11605, sell = 5000 },
+ { itemName = "silver rune emblem sudden death", clientId = 11609, sell = 5000 },
+ { itemName = "silver rune emblem ultimate healing", clientId = 11603, sell = 5000 },
+ { itemName = "skull coin", clientId = 32583, sell = 12000 },
+ { itemName = "small amethyst", clientId = 3033, sell = 200 },
+ { itemName = "small diamond", clientId = 3028, sell = 300 },
+ { itemName = "small emerald", clientId = 3032, sell = 250 },
+ { itemName = "small enchanted amethyst", clientId = 678, sell = 200 },
+ { itemName = "small enchanted emerald", clientId = 677, sell = 250 },
+ { itemName = "small enchanted ruby", clientId = 676, sell = 250 },
+ { itemName = "small enchanted sapphire", clientId = 675, sell = 250 },
+ { itemName = "small ruby", clientId = 3030, sell = 250 },
+ { itemName = "small sapphire", clientId = 3029, sell = 250 },
+ { itemName = "small topaz", clientId = 9057, sell = 200 },
+ { itemName = "small treasure chest", clientId = 35571, sell = 500 },
+ { itemName = "spectral gold nugget", clientId = 32724, sell = 500 },
+ { itemName = "spectral silver nugget", clientId = 32725, sell = 250 },
+ { itemName = "spectral stone", clientId = 4840, sell = 50 },
+ { itemName = "talon", clientId = 3034, sell = 320 },
+ { itemName = "unicorn figurine", clientId = 30054, sell = 50000 },
+ { itemName = "violet crystal shard", clientId = 16120, sell = 1500 },
+ { itemName = "violet gem", clientId = 3036, sell = 10000 },
+ { itemName = "war crystal", clientId = 9654, sell = 460 },
+ { itemName = "watermelon tourmaline (slice)", clientId = 33779, sell = 30000 },
+ { itemName = "watermelon tourmaline", clientId = 33780, sell = 230000 },
+ { itemName = "white gem", clientId = 32769, sell = 12000 },
+ { itemName = "white pearl", clientId = 3026, sell = 160 },
+ { itemName = "yellow gem", clientId = 3037, sell = 1000 },
+ },
+
+ ["quest items"] = {
+ { itemName = "ape fur", clientId = 5883, sell = 120 },
+ { itemName = "bat wing", clientId = 5894, sell = 50 },
+ { itemName = "bear paw", clientId = 5896, sell = 100 },
+ { itemName = "behemoth claw", clientId = 5930, sell = 2000 },
+ { itemName = "blue piece of cloth", clientId = 5912, sell = 200 },
+ { itemName = "bonelord eye", clientId = 5898, sell = 80 },
+ { itemName = "brown piece of cloth", clientId = 5913, sell = 100 },
+ { itemName = "cluster of solace", clientId = 20062, sell = 500 },
+ { itemName = "demon dust", clientId = 5906, sell = 300 },
+ { itemName = "demonic essence", clientId = 6499, sell = 1000 },
+ { itemName = "dragon claw", clientId = 5919, sell = 8000 },
+ { itemName = "egg of the many", clientId = 9606, sell = 15000 },
+ { itemName = "enchanted chicken wing", clientId = 5891, sell = 20000 },
+ { itemName = "first verse of the hymn", clientId = 6087, sell = 100 },
+ { itemName = "fish fin", clientId = 5895, sell = 150 },
+ { itemName = "fourth verse of the hymn", clientId = 6090, sell = 800 },
+ { itemName = "green dragon leather", clientId = 5877, sell = 100 },
+ { itemName = "green dragon scale", clientId = 5920, sell = 100 },
+ { itemName = "green piece of cloth", clientId = 5910, sell = 200 },
+ { itemName = "hardened bone", clientId = 5925, sell = 70 },
+ { itemName = "heaven blossom", clientId = 5921, sell = 50 },
+ { itemName = "holy orchid", clientId = 5922, sell = 90 },
+ { itemName = "honeycomb", clientId = 5902, sell = 40 },
+ { itemName = "iced soil", clientId = 944, sell = 2000 },
+ { itemName = "energy soil", clientId = 945, sell = 2000 },
+ { itemName = "iron ore", clientId = 5880, sell = 500 },
+ { itemName = "lizard leather", clientId = 5876, sell = 150 },
+ { itemName = "lizard scale", clientId = 5881, sell = 120 },
+ { itemName = "magic sulphur", clientId = 5904, sell = 8000 },
+ { itemName = "mammoth tusk", clientId = 10321, sell = 100 },
+ { itemName = "mandrake", clientId = 5014, sell = 5000 },
+ { itemName = "minotaur leather", clientId = 5878, sell = 80 },
+ { itemName = "mother soil", clientId = 947, sell = 5000 },
+ { itemName = "natural soil", clientId = 940, sell = 2000 },
+ { itemName = "necklace of the deep", clientId = 13990, sell = 3000 },
+ { itemName = "nose ring", clientId = 5804, sell = 2000 },
+ { itemName = "perfect behemoth fang", clientId = 5893, sell = 250 },
+ { itemName = "piece of royal steel", clientId = 5887, sell = 10000 },
+ { itemName = "piece of draconian steel", clientId = 5889, sell = 3000 },
+ { itemName = "piece of hell steel", clientId = 5888, sell = 500 },
+ { itemName = "pirate voodoo doll", clientId = 5810, sell = 500 },
+ { itemName = "red dragon leather", clientId = 5948, sell = 200 },
+ { itemName = "red dragon scale", clientId = 5882, sell = 200 },
+ { itemName = "red piece of cloth", clientId = 5911, sell = 300 },
+ { itemName = "second verse of the hymn", clientId = 6088, sell = 250 },
+ { itemName = "shard", clientId = 7290, sell = 2000 },
+ { itemName = "sniper gloves", clientId = 5875, sell = 2000 },
+ { itemName = "soul stone", clientId = 5809, sell = 6000 },
+ { itemName = "spider silk", clientId = 5879, sell = 100 },
+ { itemName = "spirit container", clientId = 5884, sell = 40000 },
+ { itemName = "spool of yarn", clientId = 5886, sell = 1000 },
+ { itemName = "third verse of the hymn", clientId = 6089, sell = 400 },
+ { itemName = "turtle shell", clientId = 5899, sell = 90 },
+ { itemName = "vampire dust", clientId = 5905, sell = 100 },
+ { itemName = "voodoo doll", clientId = 3002, sell = 400 },
+ { itemName = "white piece of cloth", clientId = 5909, sell = 100 },
+ { itemName = "wolf paw", clientId = 5897, sell = 70 },
+ { itemName = "yellow piece of cloth", clientId = 5914, sell = 150 },
+ },
+
+ ["decoration"] = {
+ { itemName = "baby seal doll", clientId = 7183, sell = 20000 },
+ { itemName = "bat decoration", clientId = 6491, sell = 2000 },
+ { itemName = "behemoth trophy", clientId = 7396, sell = 20000 },
+ { itemName = "blood herb", clientId = 3734, sell = 500 },
+ { itemName = "blue rose", clientId = 3659, sell = 250 },
+ { itemName = "bonebeast trophy", clientId = 10244, sell = 6000 },
+ { itemName = "crystal pedestal", clientId = 9063, sell = 500 },
+ { itemName = "cyclops trophy", clientId = 7398, sell = 500 },
+ { itemName = "deer trophy", clientId = 7397, sell = 3000 },
+ { itemName = "demon trophy", clientId = 7393, sell = 40000 },
+ { itemName = "disgusting trophy", clientId = 10421, sell = 3000 },
+ { itemName = "doll", clientId = 2991, sell = 200 },
+ { itemName = "dracoyle statue", clientId = 9034, sell = 5000 },
+ { itemName = "dragon lord trophy", clientId = 7399, sell = 10000 },
+ { itemName = "draken trophy", clientId = 10398, sell = 15000 },
+ { itemName = "lion trophy", clientId = 7400, sell = 3000 },
+ { itemName = "lizard trophy", clientId = 10419, sell = 8000 },
+ { itemName = "marlin trophy", clientId = 902, sell = 5000 },
+ { itemName = "minotaur trophy", clientId = 7401, sell = 500 },
+ { itemName = "model ship", clientId = 2994, sell = 1000 },
+ { itemName = "morbid tapestry", clientId = 34170, sell = 30000 },
+ { itemName = "panda teddy", clientId = 5080, sell = 30000 },
+ { itemName = "pet pig", clientId = 16165, sell = 1500 },
+ { itemName = "sea serpent trophy", clientId = 9613, sell = 10000 },
+ { itemName = "silver fafnar trophy", clientId = 9627, sell = 1000 },
+ { itemName = "skeleton decoration", clientId = 6525, sell = 3000 },
+ { itemName = "souleater trophy", clientId = 11679, sell = 7500 },
+ { itemName = "statue of abyssador", clientId = 16232, sell = 4000 },
+ { itemName = "statue of deathstrike", clientId = 16236, sell = 3000 },
+ { itemName = "statue of devovorga", clientId = 4065, sell = 1500 },
+ { itemName = "statue of gnomevil", clientId = 16240, sell = 2000 },
+ { itemName = "stuffed dragon", clientId = 5791, sell = 6000 },
+ { itemName = "trophy of jaul", clientId = 14006, sell = 4000 },
+ { itemName = "trophy of obujos", clientId = 14002, sell = 3000 },
+ { itemName = "trophy of tanjis", clientId = 14004, sell = 2000 },
+ { itemName = "werebadger trophy", clientId = 22101, sell = 9000 },
+ { itemName = "werebear trophy", clientId = 22103, sell = 11000 },
+ { itemName = "wereboar trophy", clientId = 22102, sell = 10000 },
+ { itemName = "werecrocodile trophy", clientId = 43916, sell = 15000 },
+ { itemName = "werefox trophy", clientId = 27706, sell = 9000 },
+ { itemName = "werehyaena trophy", clientId = 34219, sell = 12000 },
+ { itemName = "werepanther trophy", clientId = 43917, sell = 14000 },
+ { itemName = "weretiger trophy", clientId = 43915, sell = 14000 },
+ { itemName = "wolf trophy", clientId = 7394, sell = 3000 },
+ },
+
+ ["potions"] = {
+ { itemName = "berserk potion", clientId = 7439, sell = 500 },
+ { itemName = "bullseye potion", clientId = 7443, sell = 500 },
+ { itemName = "empty potion flask", clientId = 283, sell = 5 },
+ { itemName = "empty potion flask", clientId = 284, sell = 5 },
+ { itemName = "empty potion flask", clientId = 285, sell = 5 },
+ { itemName = "mastermind potion", clientId = 7440, sell = 500 },
+ { itemName = "vial", clientId = 2874, sell = 5 },
+ },
+
+ ["food"] = {
+ { itemName = "dark mushroom", clientId = 3728, sell = 100 },
+ { itemName = "ectoplasmic sushi", clientId = 11681, sell = 300 },
+ { itemName = "fire mushroom", clientId = 3731, sell = 200 },
+ { itemName = "green mushroom", clientId = 3732, sell = 100 },
+ { itemName = "orange mushroom", clientId = 3726, sell = 150 },
+ { itemName = "wood mushroom", clientId = 3727, sell = 15 },
+ },
+}
+
+local garbage = {
+ "Spatial Warp Almanac",
+ "assassin star",
+ "big bone",
+ "bug meat",
+ "cape",
+ "combat knife",
+ "dirty cape",
+ "dirty fur",
+ "energy bar",
+ "fishbone",
+ "flash arrow",
+ "great health potion",
+ "great mana potion",
+ "great spirit potion",
+ "ham",
+ "health potion",
+ "knife",
+ "mana potion",
+ "royal star",
+ "strong health potion",
+ "strong mana potion",
+ "supreme health potion",
+ "the spatial warp almanac",
+ "ultimate health potion",
+ "ultimate mana potion",
+ "ultimate spirit potion",
+ "onyx arrow",
+ "small stone",
+ 1047, -- bone
+ 1048, -- bone
+ 3115, -- bone
+ 2920, -- torch
+ 6558, -- demonic blood
+ 27509, -- heavy crystal fragment
+ 27713, -- heavy crystal fragment
+}
+
+LootShopConfigTable["garbage"] = {}
+
+for _, itemNameOrId in ipairs(garbage) do
+ local item = ItemType(itemNameOrId)
+ if item and item:getId() > 0 then
+ local suplyShop = FindSupplyShopItem(item:getName())
+ local price = 1
+ if suplyShop then
+ price = math.ceil(suplyShop.buy / 3)
+ end
+ table.insert(LootShopConfigTable["garbage"], { itemName = item:getName(), clientId = item:getId(), sell = price })
+ end
+end
+
+local lootPouchEntry = { itemName = "all loot in pouch", clientId = ITEM_GOLD_POUCH, sell = 1 }
+LootShopConfig = { lootPouchEntry }
+
+for category, items in pairs(LootShopConfigTable) do
+ for _, item in ipairs(items) do
+ table.insert(LootShopConfig, item)
+ end
+ table.insert(LootShopConfigTable[category], lootPouchEntry)
+end
+
+function FindLootShopCategory(categoryName)
+ for category, items in pairs(LootShopConfigTable) do
+ if string.starts(category:lower(), categoryName:lower()) then
+ return items
+ end
+ end
+end
+
+function FindLootShopItem(itemName)
+ for _, item in ipairs(LootShopConfig) do
+ if string.starts(item.itemName:lower(), itemName:lower()) then
+ return item
+ end
+ end
+end
diff --git a/data-otservbr-global/scripts/movements/others/closing_door.lua b/data-otservbr-global/scripts/movements/others/closing_door.lua
index a4e286d0a71..448d208b20f 100644
--- a/data-otservbr-global/scripts/movements/others/closing_door.lua
+++ b/data-otservbr-global/scripts/movements/others/closing_door.lua
@@ -13,6 +13,9 @@ for index, value in ipairs(LevelDoorTable) do
table.insert(doorIds, value.openDoor)
end
end
+local skipActionIds = {
+ 12107,
+}
function closingDoor.onStepIn(creature, item, position, fromPosition)
local player = creature:getPlayer()
@@ -22,7 +25,7 @@ function closingDoor.onStepIn(creature, item, position, fromPosition)
for index, value in ipairs(QuestDoorTable) do
if value.openDoor == item.itemid then
- if player:getStorageValue(item.actionid) ~= -1 then
+ if player:getStorageValue(item.actionid) ~= -1 or table.contains(skipActionIds, item.actionid) then
return true
else
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "The door seems to be sealed against unwanted intruders.")
diff --git a/data-otservbr-global/scripts/movements/quests/the_gravedigger_of_drefia/teleport.lua b/data-otservbr-global/scripts/movements/quests/the_gravedigger_of_drefia/teleport.lua
index 824642c4287..ad3f9447859 100644
--- a/data-otservbr-global/scripts/movements/quests/the_gravedigger_of_drefia/teleport.lua
+++ b/data-otservbr-global/scripts/movements/quests/the_gravedigger_of_drefia/teleport.lua
@@ -13,9 +13,9 @@ local setting = {
},
}
-local teleport = MoveEvent()
+local event = MoveEvent()
-function teleport.onStepIn(creature, item, position, fromPosition)
+function event.onStepIn(creature, item, position, fromPosition)
local player = creature:getPlayer()
if not player then
return true
@@ -32,10 +32,10 @@ function teleport.onStepIn(creature, item, position, fromPosition)
return true
end
-teleport:type("stepin")
+event:type("stepin")
for index, value in pairs(setting) do
- teleport:aid(index)
+ event:aid(index)
end
-teleport:register()
+event:register()
diff --git a/data-otservbr-global/scripts/movements/teleport/oskayaat.lua b/data-otservbr-global/scripts/movements/teleport/oskayaat.lua
new file mode 100644
index 00000000000..4a5ac5683ac
--- /dev/null
+++ b/data-otservbr-global/scripts/movements/teleport/oskayaat.lua
@@ -0,0 +1,33 @@
+SimpleTeleport(Position(33028, 32953, 8), Position(33042, 32950, 9))
+SimpleTeleport(Position(33043, 32950, 9), Position(33028, 32952, 8))
+
+local wallTeleport = Action()
+function wallTeleport.onUse(player, item, fromPosition, target, toPosition, isHotkey)
+ if player:getPosition().y < 32915 then
+ player:teleportTo(Position(33038, 32916, 9))
+ else
+ player:teleportTo(Position(33038, 32914, 9))
+ end
+ return true
+end
+
+wallTeleport:position(Position(33038, 32915, 9))
+wallTeleport:register()
+
+local boatExit = Action()
+function boatExit.onUse(player, item, fromPosition, target, toPosition, isHotkey)
+ player:teleportTo(Position(33176, 32882, 7))
+ return true
+end
+
+boatExit:position(Position(33069, 32915, 7))
+boatExit:register()
+
+local boatEntry = Action()
+function boatEntry.onUse(player, item, fromPosition, target, toPosition, isHotkey)
+ player:teleportTo(Position(33069, 32916, 7))
+ return true
+end
+
+boatEntry:position(Position(33176, 32883, 7))
+boatEntry:register()
diff --git a/data-otservbr-global/scripts/quests/cradle_of_monsters/the_monster_fight.lua b/data-otservbr-global/scripts/quests/cradle_of_monsters/the_monster_fight.lua
new file mode 100644
index 00000000000..ac10eead616
--- /dev/null
+++ b/data-otservbr-global/scripts/quests/cradle_of_monsters/the_monster_fight.lua
@@ -0,0 +1,234 @@
+local bossZone = Zone("boss.the-monster")
+
+local puddleId = 42075
+local jailBarsId = 2184
+
+local encounter = Encounter("The Monster", {
+ zone = bossZone,
+ timeToSpawnMonsters = "10ms",
+})
+
+local function freeMonster()
+ local tile = Tile(Position(33844, 32591, 12))
+ if tile then
+ while true do
+ local item = tile:getItemById(jailBarsId)
+ if item then
+ item:remove()
+ else
+ break
+ end
+ end
+ end
+end
+
+function encounter:onReset(position)
+ encounter:removeMonsters()
+ freeMonster()
+end
+
+encounter:addRemoveMonsters():autoAdvance()
+encounter
+ :addStage({
+ start = function()
+ Game.createItem(jailBarsId, 1, Position(33844, 32591, 12))
+ end,
+ })
+ :autoAdvance()
+
+encounter:addSpawnMonsters({
+ {
+ name = "Doctor Marrow",
+ event = "fight.the-monster.DoctorMarrowHealth",
+ positions = {
+ Position(33838, 32591, 12),
+ },
+ spawn = function(monster)
+ monster:setInvulnerable()
+ end,
+ },
+ {
+ name = "The Monster",
+ event = { "fight.the-monster.TheMonsterHealth", "fight.the-monster.TheMonsterDeath" },
+ positions = {
+ Position(33845, 32591, 12),
+ },
+ spawn = function(monster)
+ monster:setIcon("the-monster", CreatureIconCategory_Quests, CreatureIconQuests_PurpleShield, 20)
+ end,
+ },
+ {
+ name = "Antenna",
+ event = "fight.the-monster.AntennaDeath",
+ positions = {
+ Position(33834, 32589, 12),
+ Position(33840, 32589, 12),
+ Position(33834, 32593, 12),
+ Position(33840, 32593, 12),
+ },
+ },
+})
+
+encounter:addStage({
+ start = function()
+ local monsters = encounter:getZone():getMonstersByName("Doctor Marrow")
+ if not monsters or #monsters == 0 then
+ return false
+ end
+ local doctor = monsters[1]
+ doctor:removeInvulnerable()
+ end,
+})
+
+encounter:addStage({
+ start = function()
+ freeMonster()
+ end,
+})
+
+encounter:register()
+
+local spawnContainers = GlobalEvent("fight.the-monster.containers.onThink")
+function spawnContainers.onThink(interval, lastExecution)
+ return true
+end
+
+spawnContainers:interval(4000)
+spawnContainers:register()
+
+local doctorHealth = CreatureEvent("fight.the-monster.DoctorMarrowHealth")
+function doctorHealth.onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType)
+ if not creature then
+ return primaryDamage, primaryType, secondaryDamage, secondaryType
+ end
+ local newHealth = creature:getHealth() - primaryDamage - secondaryDamage
+ if newHealth <= creature:getMaxHealth() * 0.5 then
+ creature:setHealth(creature:getMaxHealth())
+ creature:remove()
+ encounter:nextStage()
+ return false
+ end
+ return primaryDamage, primaryType, secondaryDamage, secondaryType
+end
+
+doctorHealth:register()
+
+local antennaDeath = CreatureEvent("fight.the-monster.AntennaDeath")
+function antennaDeath.onDeath()
+ -- The monster count is only updated AFTER the event is called, so we need to subtract 1
+ local count = encounter:countMonsters("antenna") - 1
+ if count == 0 then
+ encounter:nextStage()
+ end
+end
+
+antennaDeath:register()
+
+local alchemistContainerDeath = CreatureEvent("fight.the-monster.AlchemistContainerDeath")
+function alchemistContainerDeath.onDeath(creature)
+ local directions = { DIRECTION_NORTH, DIRECTION_EAST, DIRECTION_SOUTH, DIRECTION_WEST }
+ for _, direction in ipairs(directions) do
+ local position = creature:getPosition()
+ position:getNextPosition(direction)
+ local tile = Tile(position)
+ if tile:isWalkable(false, false, false, true, true) then
+ local item = Game.createItem(puddleId, 1, position)
+ item:decay()
+ break
+ end
+ end
+end
+
+alchemistContainerDeath:register()
+
+local alchemistContainerSpawns = GlobalEvent("fight.the-monster.containers.alchemist.onThink")
+local alchemistContainerPositions = {
+ { x = 33834, y = 32585, z = 12 },
+ { x = 33840, y = 32585, z = 12 },
+ { x = 33845, y = 32587, z = 12 },
+ { x = 33845, y = 32595, z = 12 },
+ { x = 33840, y = 32597, z = 12 },
+ { x = 33834, y = 32597, z = 12 },
+ { x = 33829, y = 32595, z = 12 },
+ { x = 33829, y = 32592, z = 12 },
+ { x = 33829, y = 32590, z = 12 },
+ { x = 33829, y = 32587, z = 12 },
+}
+
+function alchemistContainerSpawns.onThink()
+ for _, position in ipairs(alchemistContainerPositions) do
+ local tile = Tile(position)
+ if tile and tile:getCreatureCount() == 0 then
+ local corpse = tile:getItemById(39949)
+ if corpse then
+ corpse:remove()
+ end
+ local monster = Game.createMonster("alchemist container", position)
+ if monster then
+ monster:registerEvent("fight.the-monster.AlchemistContainerDeath")
+ end
+ end
+ end
+ return true
+end
+
+alchemistContainerSpawns:interval(10000)
+alchemistContainerSpawns:register()
+
+local function getShields(creature)
+ local currentIcon = creature:getIcon("the-monster")
+ if not currentIcon or currentIcon.category ~= CreatureIconCategory_Quests or currentIcon.icon ~= CreatureIconQuests_PurpleShield then
+ return 0
+ end
+ if currentIcon.count <= 0 then
+ creature:removeIcon("magma-bubble")
+ return 0
+ end
+ return currentIcon.count
+end
+
+local function setShields(creature, count)
+ if count <= 0 then
+ creature:removeIcon("the-monster")
+ return
+ end
+ creature:setIcon("the-monster", CreatureIconCategory_Quests, CreatureIconQuests_PurpleShield, count)
+end
+
+local monsterHealth = CreatureEvent("fight.the-monster.TheMonsterHealth")
+function monsterHealth.onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType)
+ if not creature then
+ return primaryDamage, primaryType, secondaryDamage, secondaryType
+ end
+ local shields = getShields(creature)
+ local multiplier = 1 - shields * 0.05
+ return primaryDamage * multiplier, primaryType, secondaryDamage * multiplier, secondaryType
+end
+
+monsterHealth:register()
+
+local monsterDeath = CreatureEvent("fight.the-monster.TheMonsterDeath")
+function monsterDeath.onDeath(creature)
+ encounter:nextStage()
+end
+
+monsterDeath:register()
+
+local puddleStepIn = MoveEvent("fight.the-monster.PuddleStepIn")
+function puddleStepIn.onStepIn(creature, item, position, fromPosition)
+ if not creature or creature:getName() ~= "The Monster" then
+ return true
+ end
+ item:remove()
+ local current = getShields(creature)
+ if current <= 0 then
+ return true
+ end
+ setShields(creature, current - 1)
+ creature:getPosition():sendMagicEffect(CONST_ME_ORANGE_ENERGY_SPARK)
+ return true
+end
+
+puddleStepIn:type("stepin")
+puddleStepIn:id(puddleId)
+puddleStepIn:register()
diff --git a/data-otservbr-global/scripts/quests/cradle_of_monsters/the_monster_lever.lua b/data-otservbr-global/scripts/quests/cradle_of_monsters/the_monster_lever.lua
new file mode 100644
index 00000000000..71528272d4b
--- /dev/null
+++ b/data-otservbr-global/scripts/quests/cradle_of_monsters/the_monster_lever.lua
@@ -0,0 +1,28 @@
+local config = {
+ boss = { name = "The Monster" },
+ encounter = "The Monster",
+ requiredLevel = 250,
+
+ playerPositions = {
+ { pos = { x = 33812, y = 32584, z = 12 }, teleport = { x = 33831, y = 32591, z = 12 }, effect = CONST_ME_TELEPORT },
+ { pos = { x = 33811, y = 32584, z = 12 }, teleport = { x = 33831, y = 32591, z = 12 }, effect = CONST_ME_TELEPORT },
+ { pos = { x = 33810, y = 32584, z = 12 }, teleport = { x = 33831, y = 32591, z = 12 }, effect = CONST_ME_TELEPORT },
+ { pos = { x = 33809, y = 32584, z = 12 }, teleport = { x = 33831, y = 32591, z = 12 }, effect = CONST_ME_TELEPORT },
+ { pos = { x = 33808, y = 32584, z = 12 }, teleport = { x = 33831, y = 32591, z = 12 }, effect = CONST_ME_TELEPORT },
+ },
+ specPos = {
+ from = { x = 33828, y = 32584, z = 12 },
+ to = { x = 33846, y = 32598, z = 12 },
+ },
+ exitTeleporter = { x = 33829, y = 32591, z = 12 },
+ exit = { x = 33810, y = 32587, z = 12 },
+}
+
+local lever = BossLever(config)
+lever:position({ x = 33813, y = 32584, z = 12 })
+lever:register()
+
+-- Entrance to lever room
+SimpleTeleport({ x = 33792, y = 32581, z = 12 }, { x = 33806, y = 32584, z = 12 })
+-- Exit from lever room
+SimpleTeleport({ x = 33804, y = 32584, z = 12 }, { x = 33792, y = 32579, z = 12 })
diff --git a/data-otservbr-global/scripts/quests/primal_ordeal_quest/magma_bubble_fight.lua b/data-otservbr-global/scripts/quests/primal_ordeal_quest/magma_bubble_fight.lua
index c2642008a09..36de1fb1497 100644
--- a/data-otservbr-global/scripts/quests/primal_ordeal_quest/magma_bubble_fight.lua
+++ b/data-otservbr-global/scripts/quests/primal_ordeal_quest/magma_bubble_fight.lua
@@ -270,8 +270,7 @@ theEndOfDaysHealth:register()
local magmaCrystalDeath = CreatureEvent("fight.magma-bubble.MagmaCrystalDeath")
function magmaCrystalDeath.onDeath()
- -- The monster count is only updated AFTER the event is called, so we need to subtract 1
- local crystals = encounter:countMonsters("magma crystal") - 1
+ local crystals = encounter:countMonsters("magma crystal")
if crystals == 0 then
encounter:nextStage()
else
@@ -283,8 +282,7 @@ magmaCrystalDeath:register()
local endOfDaysDeath = CreatureEvent("fight.magma-bubble.TheEndOfDaysDeath")
function endOfDaysDeath.onDeath()
- -- The monster count is only updated AFTER the event is called, so we need to subtract 1
- local monsters = encounter:countMonsters("the end of days") - 1
+ local monsters = encounter:countMonsters("the end of days")
if monsters == 0 then
encounter:nextStage()
end
diff --git a/data-otservbr-global/scripts/quests/primal_ordeal_quest/the_primal_manace_lever.lua b/data-otservbr-global/scripts/quests/primal_ordeal_quest/the_primal_manace_lever.lua
index bb01eb8da7d..805c68b689f 100644
--- a/data-otservbr-global/scripts/quests/primal_ordeal_quest/the_primal_manace_lever.lua
+++ b/data-otservbr-global/scripts/quests/primal_ordeal_quest/the_primal_manace_lever.lua
@@ -15,6 +15,7 @@ local config = {
from = Position(33547, 32749, 15),
to = Position(33570, 32769, 15),
},
+ disableCooldown = true,
exit = Position(33520, 32871, 15),
}
diff --git a/data-otservbr-global/scripts/quests/the_new_frontier/action-beaver.lua b/data-otservbr-global/scripts/quests/the_new_frontier/action-beaver.lua
index bf29b8854a3..68350db37ef 100644
--- a/data-otservbr-global/scripts/quests/the_new_frontier/action-beaver.lua
+++ b/data-otservbr-global/scripts/quests/the_new_frontier/action-beaver.lua
@@ -13,16 +13,16 @@ function beaverTrees.onUse(player, item, fromPosition, target, toPosition, isHot
if toPosition == config.treesBeaver[1] or toPosition == config.treesBeaver[2] or toPosition == config.treesBeaver[3] and player:getStorageValue(TheNewFrontier.Questline) == 5 then
if toPosition == config.treesBeaver[1] and player:getStorageValue(TheNewFrontier.Mission02.Beaver1) < 1 then
for i = 1, 3 do
- pos = toPosition
- Game.createMonster("enraged squirrel", pos)
+ position = toPosition
+ Game.createMonster("enraged squirrel", position)
toPosition:sendMagicEffect(CONST_ME_TELEPORT)
end
player:setStorageValue(TheNewFrontier.Mission02.Beaver1, 1)
player:say("You have marked the tree, but you also angered the aquirrel family who lived on it!", TALKTYPE_MONSTER_SAY)
elseif toPosition == config.treesBeaver[2] and player:getStorageValue(TheNewFrontier.Mission02.Beaver2) < 1 then
for i = 1, 5 do
- pos = toPosition
- Game.createMonster("wolf", pos)
+ position = toPosition
+ Game.createMonster("wolf", position)
toPosition:sendMagicEffect(CONST_ME_TELEPORT)
end
Game.createMonster("war wolf", toPosition)
diff --git a/data-otservbr-global/scripts/quests/the_order_of_lion/action-bounac_entrance.lua b/data-otservbr-global/scripts/quests/the_order_of_lion/action-bounac_entrance.lua
index 803bfc1b1e6..6c4c6b6d5c1 100644
--- a/data-otservbr-global/scripts/quests/the_order_of_lion/action-bounac_entrance.lua
+++ b/data-otservbr-global/scripts/quests/the_order_of_lion/action-bounac_entrance.lua
@@ -20,3 +20,6 @@ end
bounacEntrance:aid(59602)
bounacEntrance:aid(59603)
bounacEntrance:register()
+
+SimpleTeleport(Position(32475, 32497, 7), Position(32475, 32496, 6), nil, true)
+SimpleTeleport(Position(32475, 32497, 6), Position(32475, 32498, 7), nil, true)
diff --git a/data-otservbr-global/scripts/spells/monster/sparks_chain.lua b/data-otservbr-global/scripts/spells/monster/sparks_chain.lua
new file mode 100644
index 00000000000..2134252d9f2
--- /dev/null
+++ b/data-otservbr-global/scripts/spells/monster/sparks_chain.lua
@@ -0,0 +1,22 @@
+local combat = Combat()
+combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_LIFEDRAIN)
+combat:setParameter(COMBAT_PARAM_CHAIN_EFFECT, CONST_ME_MAGIC_RED)
+
+function getChainValue(creature)
+ return 2, 3, false
+end
+
+combat:setCallback(CALLBACK_PARAM_CHAINVALUE, "getChainValue")
+
+local spell = Spell("instant")
+
+function spell.onCastSpell(creature, var)
+ return combat:execute(creature, var)
+end
+
+spell:name("sparks chain")
+spell:words("###6054")
+spell:needLearn(true)
+spell:cooldown("2000")
+spell:isSelfTarget(true)
+spell:register()
diff --git a/data-otservbr-global/scripts/spells/support/sharpshooter.lua b/data-otservbr-global/scripts/spells/support/sharpshooter.lua
index 1003128a6c4..568fec86e00 100644
--- a/data-otservbr-global/scripts/spells/support/sharpshooter.lua
+++ b/data-otservbr-global/scripts/spells/support/sharpshooter.lua
@@ -4,9 +4,9 @@ local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
-local speed = Condition(CONDITION_PARALYZE)
+local speed = Condition(CONDITION_HASTE)
speed:setParameter(CONDITION_PARAM_TICKS, spellDuration)
-speed:setFormula(-0.7, 56, -0.7, 56)
+speed:setFormula(0.7, 0, 0.7, 0)
combat:addCondition(speed)
local exhaustHealGroup = Condition(CONDITION_SPELLGROUPCOOLDOWN)
diff --git a/data-otservbr-global/scripts/spells/support/swift_foot.lua b/data-otservbr-global/scripts/spells/support/swift_foot.lua
index 14e3e5b85f4..5984e2cf250 100644
--- a/data-otservbr-global/scripts/spells/support/swift_foot.lua
+++ b/data-otservbr-global/scripts/spells/support/swift_foot.lua
@@ -6,7 +6,7 @@ combat:setParameter(COMBAT_PARAM_AGGRESSIVE, 0)
local condition = Condition(CONDITION_HASTE)
condition:setParameter(CONDITION_PARAM_TICKS, spellDuration)
-condition:setFormula(0.8, -72, 0.8, -72)
+condition:setFormula(1.8, 72, 1.8, 72)
combat:addCondition(condition)
local spell = Spell("instant")
diff --git a/data-otservbr-global/startup/tables/item.lua b/data-otservbr-global/startup/tables/item.lua
index fecd3fc6a0b..6aaa5f7235d 100644
--- a/data-otservbr-global/startup/tables/item.lua
+++ b/data-otservbr-global/startup/tables/item.lua
@@ -276,6 +276,11 @@ ItemAction = {
}
ItemUnique = {
+ -- Issavi town teleport
+ [9515] = {
+ itemId = 1949,
+ itemPos = { x = 33926, y = 31477, z = 5 },
+ },
-- The shattered isles
-- data\scripts\actions\quests\the_shattered_isles\nargor_maps.lua
[40001] = {
diff --git a/data-otservbr-global/world/otservbr-npc.xml b/data-otservbr-global/world/otservbr-npc.xml
index 305023dbfa2..85ee7763faa 100644
--- a/data-otservbr-global/world/otservbr-npc.xml
+++ b/data-otservbr-global/world/otservbr-npc.xml
@@ -2379,6 +2379,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/events/scripts/player.lua b/data/events/scripts/player.lua
index 487bc0017b6..f868f84fe2d 100644
--- a/data/events/scripts/player.lua
+++ b/data/events/scripts/player.lua
@@ -642,18 +642,14 @@ function Player:onChangeZone(zone)
delay = configManager.getNumber(configKeys.STAMINA_GREEN_DELAY)
end
- local message = string.format("In protection zone. Every %i minutes, gain %i stamina.", delay, configManager.getNumber(configKeys.STAMINA_PZ_GAIN))
- self:sendTextMessage(MESSAGE_STATUS, message)
+ local message = string.format("In protection zone. Recharging %i stamina every %i minutes.", configManager.getNumber(configKeys.STAMINA_PZ_GAIN), delay)
+ self:sendTextMessage(MESSAGE_FAILURE, message)
staminaBonus.eventsPz[self:getId()] = addEvent(addStamina, delay * 60 * 1000, nil, self:getId(), delay * 60 * 1000)
end
end
else
if event then
- self:sendTextMessage(
- MESSAGE_STATUS,
- "You are no longer refilling stamina, \z
- since you left a regeneration zone."
- )
+ self:sendTextMessage(MESSAGE_FAILURE, "You are no longer refilling stamina, since you left a regeneration zone.")
stopEvent(event)
staminaBonus.eventsPz[self:getId()] = nil
end
diff --git a/data/global.lua b/data/global.lua
index 4caec8c69f9..3508d7fbd44 100644
--- a/data/global.lua
+++ b/data/global.lua
@@ -19,6 +19,10 @@ function IsRetroPVP()
return configManager.getBoolean(configKeys.TOGGLE_SERVER_IS_RETRO)
end
+function IsTravelFree()
+ return configManager.getBoolean(configKeys.TOGGLE_TRAVELS_FREE)
+end
+
-- NOTE: 0 is disabled.
PARTY_PROTECTION = (IsRetroPVP() and 0) or 1
ADVANCED_SECURE_MODE = (IsRetroPVP() and 0) or 1
@@ -159,7 +163,7 @@ function addStamina(playerId, ...)
staminaBonus.eventsTrainer[playerId] = nil
else
player:setStamina(player:getStamina() + staminaBonus.bonus)
- player:sendTextMessage(MESSAGE_STATUS, string.format("%i of stamina has been refilled.", configManager.getNumber(configKeys.STAMINA_TRAINER_GAIN)))
+ player:sendTextMessage(MESSAGE_FAILURE, string.format("%i of stamina has been refilled.", configManager.getNumber(configKeys.STAMINA_TRAINER_GAIN)))
staminaBonus.eventsTrainer[playerId] = addEvent(addStamina, staminaBonus.period, playerId)
end
end
@@ -196,8 +200,9 @@ function addStamina(playerId, ...)
return false
end
- player:setStamina(player:getStamina() + configManager.getNumber(configKeys.STAMINA_PZ_GAIN))
- player:sendTextMessage(MESSAGE_STATUS, string.format("%i of stamina has been refilled.", configManager.getNumber(configKeys.STAMINA_PZ_GAIN)))
+ local regen = configManager.getNumber(configKeys.STAMINA_PZ_GAIN)
+ player:setStamina(player:getStamina() + regen)
+ player:sendTextMessage(MESSAGE_STATUS, string.format("%i minute%s of stamina has been refilled.", regen, regen == 1 and "" or "s"))
staminaBonus.eventsPz[localPlayerId] = addEvent(addStamina, delay, nil, localPlayerId, delay)
return true
end
diff --git a/data/items/items.xml b/data/items/items.xml
index 67bb50a17ff..ade8054ec07 100644
--- a/data/items/items.xml
+++ b/data/items/items.xml
@@ -7360,6 +7360,8 @@
+
+
-
diff --git a/data/libs/achievements_lib.lua b/data/libs/achievements_lib.lua
index 49318843c1c..2b0f441ad29 100644
--- a/data/libs/achievements_lib.lua
+++ b/data/libs/achievements_lib.lua
@@ -570,6 +570,10 @@ achievements = {
[475] = { name = "Taskmaster", grade = 1, points = 2, description = "Having hunted and bested them all, you live for the thrill of the hunt!" },
[476] = { name = "Verminbane", grade = 1, points = 2, description = "And so it begins!" },
+ --12.60
+ [480] = { name = "Honorary Rascoohan", grade = 1, points = 2, description = "When in Rascacoon, do as the Rascoohans do!" },
+ [481] = { name = "Release the Kraken", grade = 1, points = 3, description = "Riding around on this squishy companion gives you the feeling of flying through the air... uhm... swimming through the seven seas!" },
+
--Custom
[477] = { name = "Waypoint Explorer", grade = 1, points = 1, description = "You've explored all the towns of Tibia and discovered each town's waypoint." },
[478] = { name = "Up the Molehill", grade = 1, points = 3, description = "Putting this candle stump on your new mount was kind of a waiting game. You're even tempted to call it whack-a-mole. But in the end you found a loyal companion for your journeys into the depths." },
@@ -578,6 +582,12 @@ achievements = {
--12.60
[480] = { name = "Honorary Rascoohan", grade = 1, points = 2, description = "When in Rascacoon, do as the Rascoohans do!" },
[481] = { name = "Release the Kraken", grade = 1, points = 3, description = "Riding around on this squishy companion gives you the feeling of flying through the air... uhm... swimming through the seven seas!" },
+
+ -- 12.90
+ [482] = { name = "Friendly Fire", grade = 1, points = 2, description = "You mastered the fire and tamed a supervulcano!" },
+
+ --
+ [483] = { name = "Dream Warrior", grade = 2, points = 6, description = "You became an acquaintance of the courts of dreams and acquired the right to display your new status and title of 'dream warrior'." },
}
ACHIEVEMENT_FIRST = 1
diff --git a/data/libs/exercise_training.lua b/data/libs/exercise_training.lua
index 6981c55ca3b..ab4282b3cbb 100644
--- a/data/libs/exercise_training.lua
+++ b/data/libs/exercise_training.lua
@@ -55,7 +55,7 @@ function ExerciseEvent(playerId, tilePosition, weaponId, dummyId)
end
if player:isTraining() == 0 then
- player:sendTextMessage(MESSAGE_FAILURE, "You've stopped training!")
+ player:sendTextMessage(MESSAGE_FAILURE, "You have stopped training.")
return LeaveTraining(playerId)
end
diff --git a/data/libs/functions/bosslever.lua b/data/libs/functions/bosslever.lua
index 257e9eb4eae..3792cdf629d 100644
--- a/data/libs/functions/bosslever.lua
+++ b/data/libs/functions/bosslever.lua
@@ -18,7 +18,7 @@
---@field private exit Position
---@field private encounter Encounter
---@field private timeoutEvent Event
----@field private testMode boolean
+---@field private disableCooldown boolean
BossLever = {}
--[[
@@ -71,7 +71,7 @@ setmetatable(BossLever, {
exit = config.exit,
area = config.specPos,
monsters = config.monsters or {},
- testMode = config.testMode,
+ disableCooldown = config.disableCooldown,
_position = nil,
_uid = nil,
_aid = nil,
@@ -115,7 +115,7 @@ end
---@param player Player
---@return number
function BossLever:lastEncounterTime(player)
- if not player or self.testMode then
+ if not player or self.disableCooldown then
return 0
end
return player:getBossCooldown(self.name)
@@ -178,7 +178,18 @@ function BossLever:onUse(player)
return false
end
- if not lever:canUseLever(player, self.name, self.timeToFightAgain / 60 / 60) then
+ if self:lastEncounterTime(creature) > os.time() then
+ local info = lever:getInfoPositions()
+ for _, v in pairs(info) do
+ local newPlayer = v.creature
+ if newPlayer then
+ local timeLeft = self:lastEncounterTime(newPlayer) - os.time()
+ newPlayer:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You or a member in your team have to wait " .. getTimeInWords(timeLeft) .. " to face " .. self.name .. " again!")
+ if self:lastEncounterTime(newPlayer) > os.time() then
+ newPlayer:getPosition():sendMagicEffect(CONST_ME_POFF)
+ end
+ end
+ end
return false
end
self.onUseExtra(creature)
diff --git a/data/libs/functions/creature.lua b/data/libs/functions/creature.lua
index d43a31f287d..29e0303ca7e 100644
--- a/data/libs/functions/creature.lua
+++ b/data/libs/functions/creature.lua
@@ -7,9 +7,14 @@ function Creature.getClosestFreePosition(self, position, maxRadius, mustBeReacha
end
local checkPosition = Position(position)
+ local closestDistance = -1
+ local closestPosition = Position()
for radius = 0, maxRadius do
checkPosition.x = checkPosition.x - math.min(1, radius)
checkPosition.y = checkPosition.y + math.min(1, radius)
+ if closestDistance ~= -1 then
+ return closestPosition
+ end
local total = math.max(1, radius * 8)
for i = 1, total do
@@ -20,11 +25,15 @@ function Creature.getClosestFreePosition(self, position, maxRadius, mustBeReacha
local tile = Tile(checkPosition)
if tile and tile:getCreatureCount() == 0 and not tile:hasProperty(CONST_PROP_IMMOVABLEBLOCKSOLID) and (not mustBeReachable or self:getPathTo(checkPosition)) then
- return checkPosition
+ local distance = self:getPosition():getDistance(checkPosition)
+ if closestDistance == -1 or closestDistance > distance then
+ closestDistance = distance
+ closestPosition = Position(checkPosition)
+ end
end
end
end
- return Position()
+ return closestPosition
end
function Creature.getMonster(self)
diff --git a/data/libs/functions/functions.lua b/data/libs/functions/functions.lua
index c39a10de451..48e1ff29078 100644
--- a/data/libs/functions/functions.lua
+++ b/data/libs/functions/functions.lua
@@ -731,10 +731,6 @@ if not bosssPlayers then
}
end
-function isInRange(pos, fromPos, toPos)
- return pos.x >= fromPos.x and pos.y >= fromPos.y and pos.z >= fromPos.z and pos.x <= toPos.x and pos.y <= toPos.y and pos.z <= toPos.z
-end
-
function isNumber(str)
return tonumber(str) ~= nil
end
diff --git a/data/libs/functions/game.lua b/data/libs/functions/game.lua
index 5682f5c5869..e4d40bef318 100644
--- a/data/libs/functions/game.lua
+++ b/data/libs/functions/game.lua
@@ -58,18 +58,6 @@ function Game.getHouseByPlayerGUID(playerGUID)
return nil
end
-function Game.getPlayersByAccountNumber(accountNumber)
- local result = {}
- local players, player = Game.getPlayers()
- for i = 1, #players do
- player = players[i]
- if player:getAccountId() == accountNumber then
- result[#result + 1] = player
- end
- end
- return result
-end
-
function Game.getPlayersByIPAddress(ip, mask)
if not mask then
mask = 0xFFFFFFFF
diff --git a/data/libs/functions/load.lua b/data/libs/functions/load.lua
index 9319bc97ac6..bedbbe84fe1 100644
--- a/data/libs/functions/load.lua
+++ b/data/libs/functions/load.lua
@@ -27,3 +27,4 @@ dofile(CORE_DIRECTORY .. "/libs/functions/teleport.lua")
dofile(CORE_DIRECTORY .. "/libs/functions/tile.lua")
dofile(CORE_DIRECTORY .. "/libs/functions/vocation.lua")
dofile(CORE_DIRECTORY .. "/libs/functions/set.lua")
+dofile(CORE_DIRECTORY .. "/libs/functions/queue.lua")
diff --git a/data/libs/functions/party.lua b/data/libs/functions/party.lua
index c2fdffffc28..b811b8bb547 100644
--- a/data/libs/functions/party.lua
+++ b/data/libs/functions/party.lua
@@ -74,6 +74,50 @@ function Party.hasDruid(self)
return self:hasVocation(VOCATION.BASE_ID.DRUID)
end
+function Party:getPlayersWithVocation(vocation)
+ local players = {}
+ if self:getLeader():getVocation():getBaseId() == vocation then
+ table.insert(players, self:getLeader())
+ end
+ local membersList = self:getMembers()
+ for i = 1, #membersList do
+ local player = membersList[i]
+ if player and player:getVocation():getBaseId() == vocation then
+ table.insert(players, player)
+ end
+ end
+ return players
+end
+
+function Party:getKnights()
+ return self:getPlayersWithVocation(VOCATION.BASE_ID.KNIGHT)
+end
+
+function Party:getPaladins()
+ return self:getPlayersWithVocation(VOCATION.BASE_ID.PALADIN)
+end
+
+function Party:getSorcerers()
+ return self:getPlayersWithVocation(VOCATION.BASE_ID.SORCERER)
+end
+
+function Party:getDruids()
+ return self:getPlayersWithVocation(VOCATION.BASE_ID.DRUID)
+end
+
+function Party:getMages()
+ local sorcerers = self:getSorcerers()
+ local druids = self:getDruids()
+ local mages = {}
+ for i = 1, #sorcerers do
+ table.insert(mages, sorcerers[i])
+ end
+ for i = 1, #druids do
+ table.insert(mages, druids[i])
+ end
+ return mages
+end
+
function Participants(player, requireSharedExperience)
local party = player:getParty()
if not party then
@@ -86,3 +130,14 @@ function Participants(player, requireSharedExperience)
table.insert(members, party:getLeader())
return members
end
+
+function Player:isPartyLeaderOrSolo(sharedExperience)
+ local party = self:getParty()
+ if not party then
+ return true
+ end
+ if sharedExperience and not party:isSharedExperienceActive() then
+ return true
+ end
+ return party:getLeader() == self
+end
diff --git a/data/libs/functions/player.lua b/data/libs/functions/player.lua
index 7be4b743228..90e739792cc 100644
--- a/data/libs/functions/player.lua
+++ b/data/libs/functions/player.lua
@@ -27,7 +27,7 @@ function Player.feed(self, food)
end
function Player.getClosestFreePosition(self, position, extended)
- if self:getGroup():getAccess() and self:getAccountType() >= ACCOUNT_TYPE_GOD then
+ if self:getGroup():getAccess() and self:getAccountType() == ACCOUNT_TYPE_GOD then
return position
end
return Creature.getClosestFreePosition(self, position, extended)
@@ -652,6 +652,62 @@ function Player:setFiendish()
return false
end
+function Player:findItemInInbox(itemId, name)
+ local inbox = self:getSlotItem(CONST_SLOT_STORE_INBOX)
+ local items = inbox:getItems()
+ for _, item in pairs(items) do
+ if item:getId() == itemId and (not name or item:getName() == name) then
+ return item
+ end
+ end
+ return nil
+end
+
+function Player:sendColoredMessage(message)
+ local grey = 3003
+ local blue = 3043
+ local green = 3415
+ local purple = 36792
+ local yellow = 34021
+
+ local msg = message:gsub("{grey|", "{" .. grey .. "|"):gsub("{blue|", "{" .. blue .. "|"):gsub("{green|", "{" .. green .. "|"):gsub("{purple|", "{" .. purple .. "|"):gsub("{yellow|", "{" .. yellow .. "|")
+ return self:sendTextMessage(MESSAGE_LOOT, msg)
+end
+
+function Player:showInfoModal(title, message, buttonText)
+ local modal = ModalWindow({
+ title = title,
+ message = message,
+ })
+ buttonText = buttonText or "Close"
+ modal:addButton(buttonText, function() end)
+ modal:setDefaultEscapeButton(buttonText)
+
+ modal:sendToPlayer(self)
+end
+
+function Player:showConfirmationModal(title, message, yesCallback, noCallback, yesText, noText)
+ local modal = ModalWindow({
+ title = title,
+ message = message,
+ })
+ yesText = yesText or "Yes"
+ modal:addButton(yesText, yesCallback or function() end)
+ noText = noText or "No"
+ modal:addButton(noText, noCallback or function() end)
+ modal:setDefaultEscapeButton(noText)
+
+ modal:sendToPlayer(self)
+end
+
+function Player:removeAll(itemId)
+ local count = 0
+ while self:removeItem(itemId, 1) do
+ count = count + 1
+ end
+ return count
+end
+
local function bossKVScope(bossNameOrId)
local mType = MonsterType(bossNameOrId)
if not mType then
diff --git a/data/libs/functions/queue.lua b/data/libs/functions/queue.lua
new file mode 100644
index 00000000000..33a6c240947
--- /dev/null
+++ b/data/libs/functions/queue.lua
@@ -0,0 +1,73 @@
+Queue = {}
+
+---@param initial table|Queue
+---@param options table
+---@return Queue
+setmetatable(Queue, {
+ __call = function(self)
+ local set = setmetatable({
+ head = 0,
+ tail = -1,
+ items = {},
+ }, { __index = Queue })
+ return set
+ end,
+})
+
+function Queue:isEmpty()
+ return self.head > self.tail
+end
+
+function Queue:enqueue(value)
+ self.tail = self.tail + 1
+ self.items[self.tail] = value
+end
+
+function Queue:dequeue()
+ if self:isEmpty() then
+ error("Queue is empty")
+ end
+
+ local value = self.items[self.head]
+ self.items[self.head] = nil -- to allow garbage collection
+ self.head = self.head + 1
+ return value
+end
+
+function Queue:peek()
+ if self:isEmpty() then
+ error("Queue is empty")
+ end
+
+ return self.items[self.head]
+end
+
+function Queue:size()
+ return self.tail - self.head + 1
+end
+
+RandomQueue = {}
+
+setmetatable(RandomQueue, {
+ __index = Queue,
+ __call = function(self)
+ local instance = setmetatable(Queue(), { __index = RandomQueue })
+ return instance
+ end,
+})
+
+function RandomQueue:dequeue()
+ if self:isEmpty() then
+ error("RandomQueue is empty")
+ end
+
+ local index = math.random(self.head, self.tail)
+ local value = self.items[index]
+
+ -- Move the last item to the place of the removed item to maintain contiguity
+ self.items[index] = self.items[self.tail]
+ self.items[self.tail] = nil -- to allow garbage collection
+ self.tail = self.tail - 1
+
+ return value
+end
diff --git a/data/libs/functions/string.lua b/data/libs/functions/string.lua
index 5d41af47c75..9d746b82e3a 100644
--- a/data/libs/functions/string.lua
+++ b/data/libs/functions/string.lua
@@ -96,6 +96,19 @@ string.splitTrimmed = function(str, sep)
return res
end
+-- Function that splits a string into parts using a separator
+-- @param str (string) - the string to be split, sep (string) - the separator to be used
+-- @return a table containing the separated parts of the string
+function string.splitFirst(str, delimiter)
+ local start, finish = string.find(str, delimiter)
+ if start == nil then
+ return str, nil
+ end
+ local firstPart = string.sub(str, 1, start - 1)
+ local secondPart = string.sub(str, finish + 1)
+ return firstPart:trim(), secondPart:trim()
+end
+
--- Function that removes whitespace from the beginning and end of a string
-- @param str (string) - the string to be modified
-- @return the string without whitespace at the beginning and end
diff --git a/data/libs/functions/teleport.lua b/data/libs/functions/teleport.lua
index de150cdcfdc..266e29d4fd8 100644
--- a/data/libs/functions/teleport.lua
+++ b/data/libs/functions/teleport.lua
@@ -2,7 +2,7 @@ function Teleport.isTeleport(self)
return true
end
-function SimpleTeleport(from, destination, condition)
+function SimpleTeleport(from, destination, condition, disableEffect)
local teleport = MoveEvent()
function teleport.onStepIn(creature, item, position, fromPosition)
@@ -16,7 +16,9 @@ function SimpleTeleport(from, destination, condition)
end
player:teleportTo(destination)
- player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
+ if not disableEffect then
+ player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
+ end
return true
end
diff --git a/data/libs/hireling_lib.lua b/data/libs/hireling_lib.lua
index ee52150c5ea..528a903da88 100644
--- a/data/libs/hireling_lib.lua
+++ b/data/libs/hireling_lib.lua
@@ -676,18 +676,6 @@ function Player:sendHirelingSelectionModal(title, message, callback, data)
modal:sendToPlayer(self)
end
-function Player:showInfoModal(title, message, buttonText)
- local modal = ModalWindow({
- title = title,
- message = message,
- })
- buttonText = buttonText or "Close"
- modal:addButton(buttonText, function() end)
- modal:setDefaultEscapeButton(buttonText)
-
- modal:sendToPlayer(self)
-end
-
function Player:hasHirelingSkill(skillName)
return self:kv():scoped("hireling-skills"):get(skillName)
end
diff --git a/data/libs/reward_boss/reward_boss.lua b/data/libs/reward_boss/reward_boss.lua
index 8913d746a84..5576eb62fa6 100644
--- a/data/libs/reward_boss/reward_boss.lua
+++ b/data/libs/reward_boss/reward_boss.lua
@@ -116,6 +116,9 @@ function ResetAndSetTargetList(creature)
local bossId = creature:getId()
local info = _G.GlobalBosses[bossId]
+ if not info then
+ return
+ end
-- Reset all players' status
for _, player in pairs(info) do
player.active = false
diff --git a/data/modules/scripts/blessings/blessings.lua b/data/modules/scripts/blessings/blessings.lua
index 2f3aa90fe6b..c7c1ce42a72 100644
--- a/data/modules/scripts/blessings/blessings.lua
+++ b/data/modules/scripts/blessings/blessings.lua
@@ -361,6 +361,10 @@ Blessings.BuyAllBlesses = function(player)
end
if player:removeMoneyBank(totalCost) then
+ metrics.addCounter("balance_decrease", remainsPrice, {
+ player = player:getName(),
+ context = "blessings",
+ })
for i, v in ipairs(missingBless) do
player:addBlessing(v.id, 1)
end
diff --git a/data/modules/scripts/gamestore/gamestore.lua b/data/modules/scripts/gamestore/gamestore.lua
index afaffcb0b6a..f524932a4bd 100644
--- a/data/modules/scripts/gamestore/gamestore.lua
+++ b/data/modules/scripts/gamestore/gamestore.lua
@@ -6342,6 +6342,7 @@ GameStore.Categories = {
{
icons = { "Name_Change.png" },
name = "Character Name Change",
+ home = true,
price = 250,
id = 65002,
description = "Tired of your current character name? Purchase a new one!\n\n{character}\n{info} relog required after purchase to finalise the name change",
diff --git a/data/modules/scripts/gamestore/init.lua b/data/modules/scripts/gamestore/init.lua
index 981db5cec6b..64151e2ff20 100644
--- a/data/modules/scripts/gamestore/init.lua
+++ b/data/modules/scripts/gamestore/init.lua
@@ -428,8 +428,11 @@ function parseBuyStoreOffer(playerId, msg)
-- At this point the purchase is assumed to be formatted correctly
local offerPrice = offer.type == GameStore.OfferTypes.OFFER_TYPE_EXPBOOST and GameStore.ExpBoostValues[player:getStorageValue(GameStore.Storages.expBoostCount)] or offer.price
local offerCoinType = offer.coinType
+ if offer.type == GameStore.OfferTypes.OFFER_TYPE_NAMECHANGE and player:kv():get("namelock") then
+ offerPrice = 0
+ end
-- Check if offer can be honored
- if not player:canPayForOffer(offerPrice, offerCoinType) then
+ if offerPrice > 0 and not player:canPayForOffer(offerPrice, offerCoinType) then
return queueSendStoreAlertToUser("You don't have enough coins. Your purchase has been cancelled.", 250, playerId)
end
@@ -864,9 +867,14 @@ function sendShowStoreOffers(playerId, category, redirectId)
xpBoostPrice = GameStore.ExpBoostValues[player:getStorageValue(GameStore.Storages.expBoostCount)]
end
+ nameLockPrice = nil
+ if offer.type == GameStore.OfferTypes.OFFER_TYPE_NAMECHANGE and player:kv():get("namelock") then
+ nameLockPrice = 0
+ end
+
msg:addU32(off.id)
msg:addU16(off.count)
- msg:addU32(xpBoostPrice or off.price)
+ msg:addU32(xpBoostPrice or nameLockPrice or off.price)
msg:addByte(off.coinType or 0x00)
msg:addByte((off.disabledReadonIndex ~= nil) and 1 or 0)
@@ -1366,8 +1374,8 @@ GameStore.canUseHirelingName = function(name)
local result = {
ability = false,
}
- if name:len() < 3 or name:len() > 14 then
- result.reason = "The length of the hireling name must be between 3 and 14 characters."
+ if name:len() < 3 or name:len() > 18 then
+ result.reason = "The length of the hireling name must be between 3 and 18 characters."
return result
end
@@ -1422,8 +1430,8 @@ GameStore.canChangeToName = function(name)
local result = {
ability = false,
}
- if name:len() < 3 or name:len() > 14 then
- result.reason = "The length of your new name must be between 3 and 14 characters."
+ if name:len() < 3 or name:len() > 18 then
+ result.reason = "The length of your new name must be between 3 and 18 characters."
return result
end
@@ -1703,8 +1711,12 @@ function GameStore.processNameChangePurchase(player, offer, productType, newName
end
end
- local resultId = db.storeQuery("SELECT * FROM `players` WHERE `name` = " .. db.escapeString(newName) .. "")
- if resultId ~= false then
+ newName = newName:lower():trim():gsub("(%l)(%w*)", function(a, b)
+ return string.upper(a) .. b
+ end)
+
+ local normalizedName = Game.getNormalizedPlayerName(newName, true)
+ if normalizedName then
return error({ code = 1, message = "This name is already used, please try again!" })
end
@@ -1713,25 +1725,16 @@ function GameStore.processNameChangePurchase(player, offer, productType, newName
return error({ code = 1, message = result.reason })
end
- player:makeCoinTransaction(offer)
-
- local message = string.format("You have purchased %s for %d coins.", offer.name, offer.price)
+ local message, namelockReason = "", player:kv():get("namelock")
+ if not namelockReason then
+ player:makeCoinTransaction(offer)
+ message = string.format("You have purchased %s for %d coins.", offer.name, offer.price)
+ else
+ message = "Your character has been renamed successfully."
+ end
addPlayerEvent(sendStorePurchaseSuccessful, 500, playerId, message)
- newName = newName:lower():gsub("(%l)(%w*)", function(a, b)
- return string.upper(a) .. b
- end)
- db.query("UPDATE `players` SET `name` = " .. db.escapeString(newName) .. " WHERE `id` = " .. player:getGuid())
- message = "You have successfully changed you name, relogin!"
- addEvent(function()
- local player = Player(playerId)
- if not player then
- return false
- end
-
- player:remove()
- end, 1000)
- -- If not, we ask him to do!
+ player:changeName(newName)
else
return addPlayerEvent(sendRequestPurchaseData, 250, playerId, offer.id, GameStore.ClientOfferTypes.CLIENT_STORE_OFFER_NAMECHANGE)
end
@@ -2176,13 +2179,14 @@ function sendHomePage(playerId)
end
function Player:openStore(serviceName) --exporting the method so other scripts can use to open store
- openStore(self:getId())
+ local playerId = self:getId()
+ openStore(playerId)
--local serviceType = msg:getByte()
local category = GameStore.Categories and GameStore.Categories[1] or nil
if serviceName and serviceName:lower() == "home" then
- return sendHomePage(self:getId())
+ return sendHomePage(playerId)
end
if serviceName and GameStore.getCategoryByName(serviceName) then
diff --git a/data/npclib/npc.lua b/data/npclib/npc.lua
index 5ca017e1f73..30305778707 100644
--- a/data/npclib/npc.lua
+++ b/data/npclib/npc.lua
@@ -54,12 +54,12 @@ end
function SayEvent(npcId, playerId, messageDelayed, npcHandler, textType)
local npc = Npc(npcId)
if not npc then
- return logger.error("[NpcHandler:say] - Npc parameter for npc '{}' is missing, nil or not found", npc:getName())
+ return logger.error("[{} NpcHandler:say] - Npc parameter for npc '{}' is missing, nil or not found", npc:getName(), npc:getName())
end
local player = Player(playerId)
if not player then
- return logger.error("[NpcHandler:say] - Player parameter for npc '{}' is missing, nil or not found", npc:getName())
+ return logger.error("[{} NpcHandler:say] - Player parameter for npc '{}' is missing, nil or not found", npc:getName(), npc:getName())
end
local parseInfo = {
diff --git a/data/npclib/npc_system/modules.lua b/data/npclib/npc_system/modules.lua
index c8f2847c84f..68fff0c39df 100644
--- a/data/npclib/npc_system/modules.lua
+++ b/data/npclib/npc_system/modules.lua
@@ -46,7 +46,7 @@ if Modules == nil then
return false
end
- local cost, costMessage = (configManager.getBoolean(configKeys.TOGGLE_TRAVELS_FREE) and 0) or parameters.cost, "%d gold"
+ local cost, costMessage = (IsTravelFree() and 0) or parameters.cost, "%d gold"
if cost and cost > 0 then
if parameters.discount then
cost = cost - StdModule.travelDiscount(npc, player, parameters.discount)
@@ -64,8 +64,13 @@ if Modules == nil then
[TAG_PVPBLESSCOST] = Blessings.getPvpBlessingCost(player:getLevel(), false),
[TAG_TRAVELCOST] = costMessage,
}
+ if parameters.replacements then
+ for k, v in pairs(parameters.replacements) do
+ parseInfo[k] = v
+ end
+ end
if parameters.text then
- npcHandler:say(npcHandler:parseMessage(parameters.text, parseInfo), npc, player)
+ npcHandler:say(npcHandler:parseMessage(parameters.text, parseInfo, player, message), npc, player)
end
if parameters.ungreet then
@@ -195,7 +200,7 @@ if Modules == nil then
return false
end
- local cost = (configManager.getBoolean(configKeys.TOGGLE_TRAVELS_FREE) and 0) or parameters.cost
+ local cost = (IsTravelFree() and 0) or parameters.cost
if cost and cost > 0 then
if parameters.discount then
cost = cost - StdModule.travelDiscount(npc, player, parameters.discount)
@@ -509,7 +514,7 @@ if Modules == nil then
return false
end
- local cost = (configManager.getBoolean(configKeys.TOGGLE_TRAVELS_FREE) and 0) or parameters.cost
+ local cost = (IsTravelFree() and 0) or parameters.cost
module.npcHandler:say(string.format("Do you want to travel to '%s' for '%d' gold coins?", keywords[1], cost), npc, player)
return true
@@ -523,7 +528,7 @@ if Modules == nil then
local npcHandler = module.npcHandler
- local cost = (configManager.getBoolean(configKeys.TOGGLE_TRAVELS_FREE) and 0) or parameters.cost
+ local cost = (IsTravelFree() and 0) or parameters.cost
local destination = parameters.destination
local premium = parameters.premium
diff --git a/data/npclib/npc_system/npc_handler.lua b/data/npclib/npc_system/npc_handler.lua
index d72dca40553..8f4d5f2ca48 100644
--- a/data/npclib/npc_system/npc_handler.lua
+++ b/data/npclib/npc_system/npc_handler.lua
@@ -221,7 +221,7 @@ if NpcHandler == nil then
function NpcHandler:removeInteraction(npc, player)
local playerId = player:getId()
if Player(player) == nil then
- return logger.error("[NpcHandler:removeInteraction] - Player parameter for npc '{}' is missing or nil", npc:getName())
+ return logger.error("[{} NpcHandler:removeInteraction] - Player parameter for npc '{}' is missing or nil", npc:getName(), npc:getName())
end
if self:getEventDelayedSay(playerId) then
@@ -345,16 +345,29 @@ if NpcHandler == nil then
end
-- Translates all message tags found in msg using parseInfo
- function NpcHandler:parseMessage(msg, parseInfo)
+ function NpcHandler:parseMessage(msg, parseInfo, player, message)
local ret = msg
if type(ret) == "string" then
for search, replace in pairs(parseInfo) do
- ret = string.gsub(ret, search, replace)
+ if type(replace) == "string" then
+ ret = string.gsub(ret, search, replace)
+ elseif type(replace) == "function" then
+ ret = string.gsub(ret, search, replace(player, message))
+ else
+ ret = string.gsub(ret, search, replace)
+ end
end
else
for i = 1, #ret do
for search, replace in pairs(parseInfo) do
ret[i] = string.gsub(ret[i], search, replace)
+ if type(replace) == "string" then
+ ret[i] = string.gsub(ret[i], search, replace)
+ elseif type(replace) == "function" then
+ ret = string.gsub(ret, search, replace(player, message))
+ else
+ ret[i] = string.gsub(ret[i], search, replace)
+ end
end
end
end
diff --git a/data/scripts/eventcallbacks/monster/ondroploot__base.lua b/data/scripts/eventcallbacks/monster/ondroploot__base.lua
index c30f0026316..cb7bc4207e8 100644
--- a/data/scripts/eventcallbacks/monster/ondroploot__base.lua
+++ b/data/scripts/eventcallbacks/monster/ondroploot__base.lua
@@ -1,10 +1,14 @@
local callback = EventCallback()
+function Player:canReceiveLoot()
+ return self:getStamina() > 840
+end
+
function callback.monsterOnDropLoot(monster, corpse)
local player = Player(corpse:getCorpseOwner())
local factor = 1.0
local msgSuffix = ""
- if player and player:getStamina() > 840 then
+ if player and player:canReceiveLoot() then
local config = player:calculateLootFactor(monster)
factor = config.factor
msgSuffix = config.msgSuffix
diff --git a/data/scripts/eventcallbacks/monster/ondroploot_boosted.lua b/data/scripts/eventcallbacks/monster/ondroploot_boosted.lua
index 613d1943f7b..1d94033a572 100644
--- a/data/scripts/eventcallbacks/monster/ondroploot_boosted.lua
+++ b/data/scripts/eventcallbacks/monster/ondroploot_boosted.lua
@@ -1,21 +1,22 @@
local callback = EventCallback()
function callback.monsterOnDropLoot(monster, corpse)
- if configManager.getNumber(configKeys.RATE_LOOT) == 0 then
+ if not monster or not corpse then
return
end
- local mType = monster:getType()
- if mType:isRewardBoss() then
+ if monster:getName():lower() ~= Game.getBoostedCreature():lower() then
return
end
- if monster:getName():lower() ~= Game.getBoostedCreature():lower() then
+ local mType = monster:getType()
+ if mType:isRewardBoss() then
return
end
local player = Player(corpse:getCorpseOwner())
- if not player then
+ if not player or not player:canReceiveLoot() then
return
end
- if player:getStamina() <= 840 then
+ local mType = monster:getType()
+ if not mType then
return
end
diff --git a/data/scripts/eventcallbacks/monster/ondroploot_hazard.lua b/data/scripts/eventcallbacks/monster/ondroploot_hazard.lua
index ec9c7743176..ddcaeaee782 100644
--- a/data/scripts/eventcallbacks/monster/ondroploot_hazard.lua
+++ b/data/scripts/eventcallbacks/monster/ondroploot_hazard.lua
@@ -1,21 +1,15 @@
local callback = EventCallback()
function callback.monsterOnDropLoot(monster, corpse)
- if configManager.getNumber(configKeys.RATE_LOOT) == 0 then
- return
- end
- local mType = monster:getType()
- if mType:isRewardBoss() then
- return
- end
if not monster:hazard() then
return
end
local player = Player(corpse:getCorpseOwner())
- if not player then
+ if not player or not player:canReceiveLoot() then
return
end
- if player:getStamina() <= 840 then
+ local mType = monster:getType()
+ if not mType then
return
end
diff --git a/data/scripts/eventcallbacks/monster/ondroploot_prey.lua b/data/scripts/eventcallbacks/monster/ondroploot_prey.lua
index 123401072c7..1f732f173d2 100644
--- a/data/scripts/eventcallbacks/monster/ondroploot_prey.lua
+++ b/data/scripts/eventcallbacks/monster/ondroploot_prey.lua
@@ -1,18 +1,12 @@
local callback = EventCallback()
function callback.monsterOnDropLoot(monster, corpse)
- if configManager.getNumber(configKeys.RATE_LOOT) == 0 then
- return
- end
- local mType = monster:getType()
- if mType:isRewardBoss() then
- return
- end
local player = Player(corpse:getCorpseOwner())
- if not player then
+ if not player or not player:canReceiveLoot() then
return
end
- if player:getStamina() <= 840 then
+ local mType = monster:getType()
+ if not mType then
return
end
diff --git a/data/scripts/eventcallbacks/monster/ondroploot_wealth_duplex.lua b/data/scripts/eventcallbacks/monster/ondroploot_wealth_duplex.lua
index 0cb45226827..20202c0b5cc 100644
--- a/data/scripts/eventcallbacks/monster/ondroploot_wealth_duplex.lua
+++ b/data/scripts/eventcallbacks/monster/ondroploot_wealth_duplex.lua
@@ -1,18 +1,12 @@
local callback = EventCallback()
function callback.monsterOnDropLoot(monster, corpse)
- if configManager.getNumber(configKeys.RATE_LOOT) == 0 then
- return
- end
- local mType = monster:getType()
- if mType:isRewardBoss() then
- return
- end
local player = Player(corpse:getCorpseOwner())
- if not player then
+ if not player or not player:canReceiveLoot() then
return
end
- if player:getStamina() <= 840 then
+ local mType = monster:getType()
+ if not mType then
return
end
diff --git a/data/scripts/eventcallbacks/monster/postdroploot_analyzer.lua b/data/scripts/eventcallbacks/monster/postdroploot_analyzer.lua
index 371bdd01b65..8214ac98ea1 100644
--- a/data/scripts/eventcallbacks/monster/postdroploot_analyzer.lua
+++ b/data/scripts/eventcallbacks/monster/postdroploot_analyzer.lua
@@ -2,10 +2,7 @@ local callback = EventCallback()
function callback.monsterPostDropLoot(monster, corpse)
local player = Player(corpse:getCorpseOwner())
- if not player then
- return
- end
- if player:getStamina() <= 840 then
+ if not player or not player:canReceiveLoot() then
return
end
local mType = monster:getType()
diff --git a/data/scripts/talkactions/gm/namelock.lua b/data/scripts/talkactions/gm/namelock.lua
new file mode 100644
index 00000000000..1b204759e02
--- /dev/null
+++ b/data/scripts/talkactions/gm/namelock.lua
@@ -0,0 +1,48 @@
+local namelock = TalkAction("/namelock")
+
+function namelock.onSay(player, words, param)
+ -- create log
+ logCommand(player, words, param)
+
+ if param == "" then
+ player:sendCancelMessage("Command param required.")
+ return true
+ end
+
+ local name = param
+ local reason = ""
+
+ local separatorPos = param:find(",")
+ if separatorPos then
+ name = param:sub(0, separatorPos - 1)
+ reason = string.trim(param:sub(separatorPos + 1))
+ end
+
+ if reason == "" then
+ player:sendCancelMessage("You must specify a reason.")
+ return true
+ end
+
+ local target = Player(name)
+ local online = true
+ if not target then
+ target = Game.getOfflinePlayer(name)
+ online = false
+ end
+ if target and target:isPlayer() then
+ target:kv():set("namelock", reason)
+ local text = target:getName() .. " has been namelocked"
+ logger.info(text .. ", reason: " .. reason)
+ player:sendTextMessage(MESSAGE_ADMINISTRADOR, text)
+ Webhook.sendMessage("Player Namelocked", text .. " reason: " .. reason .. ".", WEBHOOK_COLOR_YELLOW, announcementChannels["serverAnnouncements"])
+ if online then
+ CheckNamelock(target)
+ end
+ else
+ player:sendTextMessage(MESSAGE_EVENT_ADVANCE, name .. " was not found.")
+ end
+end
+
+namelock:separator(" ")
+namelock:groupType("gamemaster")
+namelock:register()
diff --git a/data/scripts/talkactions/gm/teleport_to_player.lua b/data/scripts/talkactions/gm/teleport_to_player.lua
index 1a59a0ffd12..786cfa7cbab 100644
--- a/data/scripts/talkactions/gm/teleport_to_player.lua
+++ b/data/scripts/talkactions/gm/teleport_to_player.lua
@@ -20,7 +20,7 @@ function teleportToCreature.onSay(player, words, param)
local isGhost = targetPlayer:isInGhostMode()
local isTraining = _G.OnExerciseTraining[targetPlayer:getId()]
local isIdle = targetPlayer:getIdleTime() >= 5 * 60 * 1000
- local isInTrainingRoom = isInRange(targetPlayer:getPosition(), Position(1015, 1109, 7), Position(1094, 1738, 7))
+ local isInTrainingRoom = targetPlayer:getPosition():isInRange(Position(1015, 1109, 7), Position(1094, 1738, 7))
local isActive = not isGhost and not isTraining and not isIdle and not isInTrainingRoom
if isActive then
table.insert(playerList, targetPlayer)
diff --git a/data/scripts/talkactions/god/manage_kv.lua b/data/scripts/talkactions/god/manage_kv.lua
index 6a2f4e6c6b7..d4c7f104c10 100644
--- a/data/scripts/talkactions/god/manage_kv.lua
+++ b/data/scripts/talkactions/god/manage_kv.lua
@@ -15,18 +15,8 @@ get:register()
local set = TalkAction("/setkv")
-local function splitFirst(str, delimiter)
- local start, finish = string.find(str, delimiter)
- if start == nil then
- return str, nil
- end
- local firstPart = string.sub(str, 1, start - 1)
- local secondPart = string.sub(str, finish + 1)
- return firstPart, secondPart
-end
-
function set.onSay(player, words, param)
- local key, value = splitFirst(param, " ")
+ local key, value = string.splitFirst(param, " ")
value = load("return " .. value)()
kv.set(key, value)
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "kv[" .. key .. "] = " .. PrettyString(value))
@@ -39,7 +29,7 @@ set:register()
local bossCooldown = TalkAction("/clearcooldown")
function bossCooldown.onSay(player, words, param)
- local boss, playerName = splitFirst(param, ",")
+ local boss, playerName = string.splitFirst(param, ",")
if not playerName then
playerName = player:getName()
end
diff --git a/data/scripts/talkactions/god/zones.lua b/data/scripts/talkactions/god/zones.lua
index fd2530c6ff8..1eaaf37a098 100644
--- a/data/scripts/talkactions/god/zones.lua
+++ b/data/scripts/talkactions/god/zones.lua
@@ -10,8 +10,15 @@ function zones.onSay(player, words, param)
if cmd == "list" then
local list = {}
+ local filter = params[2] and params[2]:trim()
for _, zone in ipairs(Zone.getAll()) do
+ if filter then
+ if not zone:getName():lower():find(filter:lower()) then
+ goto continue
+ end
+ end
table.insert(list, zone:getName())
+ ::continue::
end
player:sendTextMessage(MESSAGE_HEALED, "Zones:\n" .. table.concat(list, "\n "))
return true
diff --git a/data/scripts/talkactions/player/buy_house.lua b/data/scripts/talkactions/player/buy_house.lua
index 1d50956e71b..c3784d81a6b 100644
--- a/data/scripts/talkactions/player/buy_house.lua
+++ b/data/scripts/talkactions/player/buy_house.lua
@@ -50,6 +50,10 @@ function buyHouse.onSay(player, words, param)
player:sendCancelMessage("You do not have enough money.")
return true
end
+ metrics.addCounter("balance_decrease", remainsPrice, {
+ player = player:getName(),
+ context = "house_purchase",
+ })
house:setHouseOwner(player:getGuid())
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have successfully bought this house, be sure to have the money for the rent in the bank.")
diff --git a/src/config/config_definitions.hpp b/src/config/config_definitions.hpp
index 077f7fc7adf..c04b7af5cc7 100644
--- a/src/config/config_definitions.hpp
+++ b/src/config/config_definitions.hpp
@@ -132,6 +132,8 @@ enum ConfigKey_t : uint16_t {
MAX_MESSAGEBUFFER,
MAX_PACKETS_PER_SECOND,
MAX_PLAYERS,
+ MAX_PLAYERS_OUTSIDE_PZ_PER_ACCOUNT,
+ MAX_PLAYERS_PER_ACCOUNT,
MAX_SPEED_ATTACKONFIST,
METRICS_ENABLE_OSTREAM,
METRICS_ENABLE_PROMETHEUS,
diff --git a/src/config/configmanager.cpp b/src/config/configmanager.cpp
index ecfdad1defa..50cd1d7e63f 100644
--- a/src/config/configmanager.cpp
+++ b/src/config/configmanager.cpp
@@ -83,7 +83,8 @@ bool ConfigManager::load() {
}
loadBoolConfig(L, ALLOW_CHANGEOUTFIT, "allowChangeOutfit", true);
- loadBoolConfig(L, ONE_PLAYER_ON_ACCOUNT, "onePlayerOnlinePerAccount", true);
+ loadIntConfig(L, MAX_PLAYERS_PER_ACCOUNT, "maxPlayersOnlinePerAccount", 1);
+ loadIntConfig(L, MAX_PLAYERS_OUTSIDE_PZ_PER_ACCOUNT, "maxPlayersOutsidePZPerAccount", 1);
loadBoolConfig(L, AIMBOT_HOTKEY_ENABLED, "hotkeyAimbotEnabled", true);
loadBoolConfig(L, REMOVE_RUNE_CHARGES, "removeChargesFromRunes", true);
loadBoolConfig(L, EXPERIENCE_FROM_PLAYERS, "experienceByKillingPlayers", false);
diff --git a/src/creatures/combat/spells.cpp b/src/creatures/combat/spells.cpp
index 8460feb722b..d684b5433ff 100644
--- a/src/creatures/combat/spells.cpp
+++ b/src/creatures/combat/spells.cpp
@@ -20,6 +20,25 @@ Spells::Spells() = default;
Spells::~Spells() = default;
TalkActionResult_t Spells::playerSaySpell(std::shared_ptr player, std::string &words) {
+ auto maxOnline = g_configManager().getNumber(MAX_PLAYERS_PER_ACCOUNT, __FUNCTION__);
+ auto tile = player->getTile();
+ if (maxOnline > 1 && player->getAccountType() < account::ACCOUNT_TYPE_GAMEMASTER && tile && !tile->hasFlag(TILESTATE_PROTECTIONZONE)) {
+ auto maxOutsizePZ = g_configManager().getNumber(MAX_PLAYERS_OUTSIDE_PZ_PER_ACCOUNT, __FUNCTION__);
+ auto accountPlayers = g_game().getPlayersByAccount(player->getAccount());
+ int countOutsizePZ = 0;
+ for (const auto &accountPlayer : accountPlayers) {
+ if (accountPlayer == player || accountPlayer->isOffline()) {
+ continue;
+ }
+ if (accountPlayer->getTile() && !accountPlayer->getTile()->hasFlag(TILESTATE_PROTECTIONZONE)) {
+ ++countOutsizePZ;
+ }
+ }
+ if (countOutsizePZ >= maxOutsizePZ) {
+ player->sendTextMessage(MESSAGE_FAILURE, fmt::format("You cannot cast spells while you have {} character(s) outside of a protection zone.", maxOutsizePZ));
+ return TALKACTION_FAILED;
+ }
+ }
std::string str_words = words;
if (player->hasCondition(CONDITION_FEARED)) {
diff --git a/src/creatures/creature.cpp b/src/creatures/creature.cpp
index 4720b903233..bc77050268d 100644
--- a/src/creatures/creature.cpp
+++ b/src/creatures/creature.cpp
@@ -800,23 +800,23 @@ bool Creature::dropCorpse(std::shared_ptr lastHitCreature, std::shared
corpse->startDecaying();
bool corpses = corpse->isRewardCorpse() || (corpse->getID() == ITEM_MALE_CORPSE || corpse->getID() == ITEM_FEMALE_CORPSE);
const auto player = mostDamageCreature ? mostDamageCreature->getPlayer() : nullptr;
- if (corpse->getContainer() && player && !corpses) {
+ auto corpseContainer = corpse->getContainer();
+ if (corpseContainer && player && !corpses) {
auto monster = getMonster();
if (monster && !monster->isRewardBoss()) {
std::ostringstream lootMessage;
- lootMessage << "Loot of " << getNameDescription() << ": " << corpse->getContainer()->getContentDescription(player->getProtocolVersion() < 1200) << ".";
- auto suffix = corpse->getContainer()->getAttribute(ItemAttribute_t::LOOTMESSAGE_SUFFIX);
+ lootMessage << "Loot of " << getNameDescription() << ": " << corpseContainer->getContentDescription(player->getProtocolVersion() < 1200) << ".";
+ auto suffix = corpseContainer->getAttribute(ItemAttribute_t::LOOTMESSAGE_SUFFIX);
if (!suffix.empty()) {
lootMessage << suffix;
}
player->sendLootMessage(lootMessage.str());
}
- if (player->checkAutoLoot()) {
- int32_t pos = tile->getStackposOfItem(player, corpse);
+ if (player->checkAutoLoot() && corpseContainer && mostDamageCreature->getPlayer()) {
g_dispatcher().addEvent(
- std::bind(&Game::playerQuickLoot, &g_game(), mostDamageCreature->getID(), this->getPosition(), corpse->getID(), pos - 1, nullptr, false, true),
- "Game::playerQuickLoot"
+ std::bind(&Game::playerQuickLootCorpse, &g_game(), player, corpseContainer),
+ "Game::playerQuickLootCorpse"
);
}
}
diff --git a/src/creatures/monsters/monsters.cpp b/src/creatures/monsters/monsters.cpp
index 9230d6bde58..463238e913a 100644
--- a/src/creatures/monsters/monsters.cpp
+++ b/src/creatures/monsters/monsters.cpp
@@ -121,8 +121,6 @@ bool Monsters::deserializeSpell(const std::shared_ptr spell, spell
combatPtr->setParam(COMBAT_PARAM_TYPE, spell->combatType);
} else if (spellName == "speed") {
int32_t speedChange = 0;
- int32_t speedChangeValue = 0;
- int32_t speedChangeRange = 0;
int32_t duration = 10000;
if (spell->duration != 0) {
@@ -146,9 +144,8 @@ bool Monsters::deserializeSpell(const std::shared_ptr spell, spell
}
std::shared_ptr condition = Condition::createCondition(CONDITIONID_COMBAT, conditionType, duration, 0)->static_self_cast();
- speedChangeRange = speedChange / 2;
- speedChangeValue = uniform_random(speedChangeRange, speedChange);
- condition->setFormulaVars(speedChangeValue / 1000.0, 40, speedChangeValue / 1000.0, 40);
+ float multiplier = 1.0f + static_cast(speedChange) / 1000.0f;
+ condition->setFormulaVars(multiplier / 2, 40, multiplier, 40);
combatPtr->addCondition(condition);
} else if (spellName == "outfit") {
int32_t duration = 10000;
diff --git a/src/creatures/players/player.cpp b/src/creatures/players/player.cpp
index 4d26878c9a5..cdf3e495090 100644
--- a/src/creatures/players/player.cpp
+++ b/src/creatures/players/player.cpp
@@ -1685,6 +1685,12 @@ void Player::onCreatureAppear(std::shared_ptr creature, bool isLogin)
}
sendBlessStatus();
}
+
+ if (getCurrentMount() != 0) {
+ toggleMount(true);
+ }
+
+ g_game().changePlayerSpeed(static_self_cast(), 0);
}
}
@@ -1717,6 +1723,12 @@ void Player::onChangeZone(ZoneType_t zone) {
wasMounted = true;
}
} else {
+ int32_t ticks = g_configManager().getNumber(STAIRHOP_DELAY, __FUNCTION__);
+ if (ticks > 0) {
+ if (const auto &condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_PACIFIED, ticks, 0)) {
+ addCondition(condition);
+ }
+ }
if (wasMounted) {
toggleMount(true);
wasMounted = false;
@@ -4393,6 +4405,7 @@ void Player::onAddCondition(ConditionType_t type) {
if (type == CONDITION_OUTFIT && isMounted()) {
dismount();
+ wasMounted = true;
}
sendIcons();
@@ -4466,6 +4479,10 @@ void Player::onEndCondition(ConditionType_t type) {
}
}
+ if (type == CONDITION_OUTFIT && wasMounted) {
+ toggleMount(true);
+ }
+
sendIcons();
}
@@ -4675,7 +4692,7 @@ bool Player::onKilledMonster(const std::shared_ptr &monster) {
if (hasFlag(PlayerFlags_t::NotGenerateLoot)) {
monster->setDropLoot(false);
}
- if (monster->isSummon()) {
+ if (monster->hasBeenSummoned()) {
return false;
}
auto mType = monster->getMonsterType();
@@ -5610,6 +5627,14 @@ void Player::sendUnjustifiedPoints() {
}
}
+uint8_t Player::getLastMount() const {
+ int32_t value = getStorageValue(PSTRG_MOUNTS_CURRENTMOUNT);
+ if (value > 0) {
+ return value;
+ }
+ return static_cast(kv()->get("last-mount")->get());
+}
+
uint8_t Player::getCurrentMount() const {
int32_t value = getStorageValue(PSTRG_MOUNTS_CURRENTMOUNT);
if (value > 0) {
@@ -5668,7 +5693,7 @@ bool Player::toggleMount(bool mount) {
return false;
}
- uint8_t currentMountId = getCurrentMount();
+ uint8_t currentMountId = getLastMount();
if (currentMountId == 0) {
sendOutfitWindow();
return false;
@@ -5685,6 +5710,7 @@ bool Player::toggleMount(bool mount) {
if (!hasMount(currentMount)) {
setCurrentMount(0);
+ kv()->set("last-mount", 0);
sendOutfitWindow();
return false;
}
@@ -5701,6 +5727,7 @@ bool Player::toggleMount(bool mount) {
defaultOutfit.lookMount = currentMount->clientId;
setCurrentMount(currentMount->id);
+ kv()->set("last-mount", currentMount->id);
if (currentMount->speed != 0) {
g_game().changeSpeed(static_self_cast(), currentMount->speed);
@@ -5760,6 +5787,7 @@ bool Player::untameMount(uint8_t mountId) {
}
setCurrentMount(0);
+ kv()->set("last-mount", 0);
}
return true;
@@ -5791,6 +5819,7 @@ void Player::dismount() {
}
defaultOutfit.lookMount = 0;
+ setCurrentMount(0);
}
bool Player::addOfflineTrainingTries(skills_t skill, uint64_t tries) {
@@ -5958,32 +5987,28 @@ void Player::clearModalWindows() {
}
uint16_t Player::getHelpers() const {
- uint16_t helpers;
-
if (guild && party) {
- phmap::flat_hash_set> helperSet;
+ const auto &guildMembers = guild->getMembersOnline();
- const auto guildMembers = guild->getMembersOnline();
- helperSet.insert(guildMembers.begin(), guildMembers.end());
+ stdext::vector_set> helperSet;
+ helperSet.insert(helperSet.end(), guildMembers.begin(), guildMembers.end());
+ helperSet.insertAll(party->getMembers());
+ helperSet.insertAll(party->getInvitees());
- const auto partyMembers = party->getMembers();
- helperSet.insert(partyMembers.begin(), partyMembers.end());
+ helperSet.emplace(party->getLeader());
- const auto partyInvitees = party->getInvitees();
- helperSet.insert(partyInvitees.begin(), partyInvitees.end());
+ return static_cast(helperSet.size());
+ }
- helperSet.insert(party->getLeader());
+ if (guild) {
+ return static_cast(guild->getMemberCountOnline());
+ }
- helpers = helperSet.size();
- } else if (guild) {
- helpers = guild->getMemberCountOnline();
- } else if (party) {
- helpers = party->getMemberCount() + party->getInvitationCount() + 1;
- } else {
- helpers = 0;
+ if (party) {
+ return static_cast(party->getMemberCount() + party->getInvitationCount() + 1);
}
- return helpers;
+ return 0u;
}
void Player::sendClosePrivate(uint16_t channelId) {
diff --git a/src/creatures/players/player.hpp b/src/creatures/players/player.hpp
index 9f6c01252b2..a33c538c814 100644
--- a/src/creatures/players/player.hpp
+++ b/src/creatures/players/player.hpp
@@ -159,6 +159,7 @@ class Player final : public Creature, public Cylinder, public Bankable {
return CREATURETYPE_PLAYER;
}
+ uint8_t getLastMount() const;
uint8_t getCurrentMount() const;
void setCurrentMount(uint8_t mountId);
bool isMounted() const {
diff --git a/src/game/game.cpp b/src/game/game.cpp
index 290f24ad2e8..a9280eab178 100644
--- a/src/game/game.cpp
+++ b/src/game/game.cpp
@@ -296,6 +296,7 @@ void Game::start(ServiceManager* manager) {
g_dispatcher().cycleEvent(
EVENT_LUA_GARBAGE_COLLECTION, [this] { g_luaEnvironment().collectGarbage(); }, "Calling GC"
);
+ g_dispatcher().cycleEvent(EVENT_REFRESH_MARKET_PRICES, std::bind_front(&Game::loadItemsPrice, this), "Game::loadItemsPrice");
}
GameState_t Game::getGameState() const {
@@ -388,7 +389,7 @@ void Game::setGameState(GameState_t newState) {
}
bool Game::loadItemsPrice() {
- itemsSaleCount = 0;
+ IOMarket::getInstance().updateStatistics();
std::ostringstream query, marketQuery;
query << "SELECT DISTINCT `itemtype` FROM `market_offers`;";
@@ -398,20 +399,19 @@ bool Game::loadItemsPrice() {
return false;
}
- do {
- marketQuery.str(std::string());
- uint16_t itemId = result->getNumber("itemtype");
- marketQuery << "SELECT `price`, `tier` FROM `market_offers` WHERE `itemtype` = " << itemId << " ORDER BY `price` DESC LIMIT 1";
- DBResult_ptr marketOffersResult = db.storeQuery(marketQuery.str());
- if (marketOffersResult) {
- std::map tierAndCount;
- auto tier = marketOffersResult->getNumber("tier");
- auto price = marketOffersResult->getNumber("price");
- tierAndCount[tier] = price;
- itemsPriceMap[itemId] = tierAndCount;
- itemsSaleCount++;
- }
- } while (result->next());
+ auto stats = IOMarket::getInstance().getPurchaseStatistics();
+ for (const auto &[itemId, itemStats] : stats) {
+ std::map tierToPrice;
+ for (const auto &[tier, tierStats] : itemStats) {
+ auto averagePrice = tierStats.totalPrice / tierStats.numTransactions;
+ tierToPrice[tier] = averagePrice;
+ }
+ itemsPriceMap[itemId] = tierToPrice;
+ }
+ auto offers = IOMarket::getInstance().getActiveOffers(MARKETACTION_BUY);
+ for (const auto &offer : offers) {
+ itemsPriceMap[offer.itemId][offer.tier] = std::max(itemsPriceMap[offer.itemId][offer.tier], offer.price);
+ }
return true;
}
@@ -748,7 +748,7 @@ std::shared_ptr Game::getNpcByName(const std::string &s) {
return nullptr;
}
-std::shared_ptr Game::getPlayerByName(const std::string &s, bool allowOffline /* = false */) {
+std::shared_ptr Game::getPlayerByName(const std::string &s, bool allowOffline /* = false */, bool isNewName /* = false */) {
if (s.empty()) {
return nullptr;
}
@@ -760,7 +760,11 @@ std::shared_ptr Game::getPlayerByName(const std::string &s, bool allowOf
}
std::shared_ptr tmpPlayer = std::make_shared(nullptr);
if (!IOLoginData::loadPlayerByName(tmpPlayer, s)) {
- g_logger().error("Failed to load player {} from database", s);
+ if (!isNewName) {
+ g_logger().error("Failed to load player {} from database", s);
+ } else {
+ g_logger().info("New name {} is available", s);
+ }
return nullptr;
}
tmpPlayer->setOnline(false);
@@ -830,13 +834,19 @@ ReturnValue Game::getPlayerByNameWildcard(const std::string &s, std::shared_ptr<
return RETURNVALUE_NOERROR;
}
-std::shared_ptr Game::getPlayerByAccount(uint32_t acc) {
- for (const auto &it : players) {
- if (it.second->getAccountId() == acc) {
- return it.second;
+std::vector> Game::getPlayersByAccount(std::shared_ptr acc, bool allowOffline /* = false */) {
+ auto [accountPlayers, error] = acc->getAccountPlayers();
+ if (error != account::ERROR_NO) {
+ return {};
+ }
+ std::vector> ret;
+ for (const auto &[name, _] : accountPlayers) {
+ auto player = getPlayerByName(name, allowOffline);
+ if (player) {
+ ret.push_back(player);
}
}
- return nullptr;
+ return ret;
}
bool Game::internalPlaceCreature(std::shared_ptr creature, const Position &pos, bool extendedPos /*=false*/, bool forced /*= false*/, bool creatureCheck /*= false*/) {
@@ -2539,7 +2549,7 @@ ReturnValue Game::internalTeleport(const std::shared_ptr &thing, const Po
return RETURNVALUE_NOTPOSSIBLE;
}
-void Game::internalQuickLootCorpse(std::shared_ptr player, std::shared_ptr corpse) {
+void Game::playerQuickLootCorpse(std::shared_ptr player, std::shared_ptr corpse) {
if (!player || !corpse) {
return;
}
@@ -4994,11 +5004,11 @@ void Game::playerQuickLoot(uint32_t playerId, const Position &pos, uint16_t item
auto rewardId = corpse->getAttribute(ItemAttribute_t::DATE);
auto reward = player->getReward(rewardId, false);
if (reward) {
- internalQuickLootCorpse(player, reward->getContainer());
+ playerQuickLootCorpse(player, reward->getContainer());
}
} else {
if (!lootAllCorpses) {
- internalQuickLootCorpse(player, corpse);
+ playerQuickLootCorpse(player, corpse);
} else {
playerLootAllCorpses(player, pos, lootAllCorpses);
}
@@ -5035,7 +5045,7 @@ void Game::playerLootAllCorpses(std::shared_ptr player, const Position &
}
corpses++;
- internalQuickLootCorpse(player, tileCorpse);
+ playerQuickLootCorpse(player, tileCorpse);
if (corpses >= 30) {
break;
}
@@ -5479,7 +5489,7 @@ void Game::playerChangeOutfit(uint32_t playerId, Outfit_t outfit, uint8_t isMoun
auto deltaSpeedChange = mount->speed;
if (player->isMounted()) {
- const auto prevMount = mounts.getMountByID(player->getCurrentMount());
+ const auto prevMount = mounts.getMountByID(player->getLastMount());
if (prevMount) {
deltaSpeedChange -= prevMount->speed;
}
@@ -8523,17 +8533,6 @@ void Game::playerCreateMarketOffer(uint32_t playerId, uint8_t type, uint16_t ite
IOMarket::createOffer(player->getGUID(), static_cast(type), it.id, amount, price, tier, anonymous);
- // uint8_t = tier, uint64_t price
- std::map tierAndPriceMap;
- tierAndPriceMap[tier] = price;
- auto ColorItem = itemsPriceMap.find(it.id);
- if (ColorItem == itemsPriceMap.end()) {
- itemsPriceMap[it.id] = tierAndPriceMap;
- itemsSaleCount++;
- } else if (auto priceIt = ColorItem->second.find(tier); priceIt->second < price) {
- itemsPriceMap[it.id] = tierAndPriceMap;
- }
-
const MarketOfferList &buyOffers = IOMarket::getActiveOffers(MARKETACTION_BUY, it.id, tier);
const MarketOfferList &sellOffers = IOMarket::getActiveOffers(MARKETACTION_SELL, it.id, tier);
player->sendMarketBrowseItem(it.id, buyOffers, sellOffers, tier);
diff --git a/src/game/game.hpp b/src/game/game.hpp
index 0ae4065ab06..9fb56f8b88c 100644
--- a/src/game/game.hpp
+++ b/src/game/game.hpp
@@ -45,6 +45,7 @@ static constexpr int32_t EVENT_DECAYINTERVAL = 250;
static constexpr int32_t EVENT_DECAY_BUCKETS = 4;
static constexpr int32_t EVENT_FORGEABLEMONSTERCHECKINTERVAL = 300000;
static constexpr int32_t EVENT_LUA_GARBAGE_COLLECTION = 60000 * 10; // 10min
+static constexpr int32_t EVENT_REFRESH_MARKET_PRICES = 60000; // 1min
static constexpr std::chrono::minutes CACHE_EXPIRATION_TIME { 10 }; // 10min
static constexpr std::chrono::minutes HIGHSCORE_CACHE_EXPIRATION_TIME { 10 }; // 10min
@@ -152,7 +153,7 @@ class Game {
std::shared_ptr getPlayerByID(uint32_t id, bool allowOffline = false);
- std::shared_ptr getPlayerByName(const std::string &s, bool allowOffline = false);
+ std::shared_ptr getPlayerByName(const std::string &s, bool allowOffline = false, bool isNewName = false);
std::shared_ptr getPlayerByGUID(const uint32_t &guid, bool allowOffline = false);
@@ -160,7 +161,7 @@ class Game {
ReturnValue getPlayerByNameWildcard(const std::string &s, std::shared_ptr &player);
- std::shared_ptr getPlayerByAccount(uint32_t acc);
+ std::vector> getPlayersByAccount(std::shared_ptr acc, bool allowOffline = false);
bool internalPlaceCreature(std::shared_ptr creature, const Position &pos, bool extendedPos = false, bool forced = false, bool creatureCheck = false);
@@ -184,9 +185,6 @@ class Game {
uint32_t getPlayersRecord() const {
return playersRecord;
}
- uint16_t getItemsPriceCount() const {
- return itemsSaleCount;
- }
void addItemsClassification(ItemClassification* itemsClassification) {
itemsClassifications.push_back(itemsClassification);
@@ -352,6 +350,7 @@ class Game {
void playerSetFightModes(uint32_t playerId, FightMode_t fightMode, bool chaseMode, bool secureMode);
void playerLookAt(uint32_t playerId, uint16_t itemId, const Position &pos, uint8_t stackPos);
void playerLookInBattleList(uint32_t playerId, uint32_t creatureId);
+ void playerQuickLootCorpse(std::shared_ptr player, std::shared_ptr corpse);
void playerQuickLoot(uint32_t playerId, const Position &pos, uint16_t itemId, uint8_t stackPos, std::shared_ptr
- defaultItem = nullptr, bool lootAllCorpses = false, bool autoLoot = false);
void playerLootAllCorpses(std::shared_ptr player, const Position &pos, bool lootAllCorpses);
void playerSetLootContainer(uint32_t playerId, ObjectCategory_t category, const Position &pos, uint16_t itemId, uint8_t stackPos);
@@ -699,13 +698,6 @@ class Game {
void playerSpeakToNpc(std::shared_ptr player, const std::string &text);
std::shared_ptr createPlayerTask(uint32_t delay, std::function f, std::string context) const;
- /**
- * Player wants to loot a corpse
- * \param player Player pointer
- * \param corpse Container pointer to be looted
- */
- void internalQuickLootCorpse(std::shared_ptr player, std::shared_ptr corpse);
-
/**
* @brief Finds the container for loot based on the given parameters.
*
@@ -860,7 +852,6 @@ class Game {
uint32_t motdNum = 0;
std::map> itemsPriceMap;
- uint16_t itemsSaleCount;
std::vector itemsClassifications;
diff --git a/src/io/iomarket.cpp b/src/io/iomarket.cpp
index ad045998375..f308e10e687 100644
--- a/src/io/iomarket.cpp
+++ b/src/io/iomarket.cpp
@@ -26,6 +26,35 @@ uint8_t IOMarket::getTierFromDatabaseTable(const std::string &string) {
return tier;
}
+MarketOfferList IOMarket::getActiveOffers(MarketAction_t action) {
+ MarketOfferList offerList;
+
+ std::ostringstream query;
+ query << "SELECT `id`, `amount`, `price`, `tier`, `created`, `anonymous`, (SELECT `name` FROM `players` WHERE `id` = `player_id`) AS `player_name` FROM `market_offers` WHERE `sale` = " << action;
+
+ DBResult_ptr result = Database::getInstance().storeQuery(query.str());
+ if (!result) {
+ return offerList;
+ }
+
+ const int32_t marketOfferDuration = g_configManager().getNumber(MARKET_OFFER_DURATION, __FUNCTION__);
+
+ do {
+ MarketOffer offer;
+ offer.amount = result->getNumber("amount");
+ offer.price = result->getNumber("price");
+ offer.timestamp = result->getNumber("created") + marketOfferDuration;
+ offer.counter = result->getNumber("id") & 0xFFFF;
+ if (result->getNumber("anonymous") == 0) {
+ offer.playerName = result->getString("player_name");
+ } else {
+ offer.playerName = "Anonymous";
+ }
+ offer.tier = getTierFromDatabaseTable(result->getString("tier"));
+ offerList.push_back(offer);
+ } while (result->next());
+ return offerList;
+}
MarketOfferList IOMarket::getActiveOffers(MarketAction_t action, uint16_t itemId, uint8_t tier) {
MarketOfferList offerList;
diff --git a/src/io/iomarket.hpp b/src/io/iomarket.hpp
index f192acca5fe..b02fba0ce6a 100644
--- a/src/io/iomarket.hpp
+++ b/src/io/iomarket.hpp
@@ -23,6 +23,7 @@ class IOMarket {
return inject();
}
+ static MarketOfferList getActiveOffers(MarketAction_t action);
static MarketOfferList getActiveOffers(MarketAction_t action, uint16_t itemId, uint8_t tier);
static MarketOfferList getOwnOffers(MarketAction_t action, uint32_t playerId);
static HistoryMarketOfferList getOwnHistory(MarketAction_t action, uint32_t playerId);
diff --git a/src/items/tile.cpp b/src/items/tile.cpp
index 787c5ed9b31..2b9527095dd 100644
--- a/src/items/tile.cpp
+++ b/src/items/tile.cpp
@@ -668,6 +668,27 @@ ReturnValue Tile::queryAdd(int32_t, const std::shared_ptr &thing, uint32_
}
const auto playerTile = player->getTile();
+ // moving from a pz tile to a non-pz tile
+ if (playerTile && playerTile->hasFlag(TILESTATE_PROTECTIONZONE)) {
+ auto maxOnline = g_configManager().getNumber(MAX_PLAYERS_PER_ACCOUNT, __FUNCTION__);
+ if (maxOnline > 1 && player->getAccountType() < account::ACCOUNT_TYPE_GAMEMASTER && !hasFlag(TILESTATE_PROTECTIONZONE)) {
+ auto maxOutsizePZ = g_configManager().getNumber(MAX_PLAYERS_OUTSIDE_PZ_PER_ACCOUNT, __FUNCTION__);
+ auto accountPlayers = g_game().getPlayersByAccount(player->getAccount());
+ int countOutsizePZ = 0;
+ for (const auto &accountPlayer : accountPlayers) {
+ if (accountPlayer == player || accountPlayer->isOffline()) {
+ continue;
+ }
+ if (accountPlayer->getTile() && !accountPlayer->getTile()->hasFlag(TILESTATE_PROTECTIONZONE)) {
+ ++countOutsizePZ;
+ }
+ }
+ if (countOutsizePZ >= maxOutsizePZ) {
+ player->sendCreatureSay(player, TALKTYPE_MONSTER_SAY, fmt::format("You can only have {} character{} from your account outside of a protection zone.", maxOutsizePZ == 1 ? "one" : std::to_string(maxOutsizePZ), maxOutsizePZ > 1 ? "s" : ""), &getPosition());
+ return RETURNVALUE_NOTPOSSIBLE;
+ }
+ }
+ }
if (playerTile && player->isPzLocked()) {
if (!playerTile->hasFlag(TILESTATE_PVPZONE)) {
// player is trying to enter a pvp zone while being pz-locked
diff --git a/src/kv/kv.cpp b/src/kv/kv.cpp
index 0e2f4b2f836..f3133dec9ca 100644
--- a/src/kv/kv.cpp
+++ b/src/kv/kv.cpp
@@ -32,7 +32,7 @@ void KVStore::set(const std::string &key, const ValueWrapper &value) {
}
void KVStore::setLocked(const std::string &key, const ValueWrapper &value) {
- logger.debug("KVStore::set({})", key);
+ logger.trace("KVStore::set({})", key);
auto it = store_.find(key);
if (it != store_.end()) {
it->second.first = value;
@@ -53,7 +53,7 @@ void KVStore::setLocked(const std::string &key, const ValueWrapper &value) {
}
std::optional KVStore::get(const std::string &key, bool forceLoad /*= false */) {
- logger.debug("KVStore::get({})", key);
+ logger.trace("KVStore::get({})", key);
std::scoped_lock lock(mutex_);
if (forceLoad || !store_.contains(key)) {
auto value = load(key);
@@ -72,11 +72,26 @@ std::optional KVStore::get(const std::string &key, bool forceLoad
return value;
}
+std::unordered_set KVStore::keys(const std::string &prefix /*= ""*/) {
+ std::scoped_lock lock(mutex_);
+ std::unordered_set keys;
+ for (const auto &[key, value] : store_) {
+ if (key.find(prefix) == 0) {
+ std::string suffix = key.substr(prefix.size());
+ keys.insert(suffix);
+ }
+ }
+ for (const auto &key : loadPrefix(prefix)) {
+ keys.insert(key);
+ }
+ return keys;
+}
+
void KV::remove(const std::string &key) {
set(key, ValueWrapper::deleted());
}
std::shared_ptr KVStore::scoped(const std::string &scope) {
- logger.debug("KVStore::scoped({})", scope);
+ logger.trace("KVStore::scoped({})", scope);
return std::make_shared(logger, *this, scope);
}
diff --git a/src/kv/kv.hpp b/src/kv/kv.hpp
index 40fe449834f..99bc1f695a6 100644
--- a/src/kv/kv.hpp
+++ b/src/kv/kv.hpp
@@ -32,6 +32,8 @@ class KV : public std::enable_shared_from_this {
virtual std::shared_ptr scoped(const std::string &scope) = 0;
+ virtual std::unordered_set keys(const std::string &prefix = "") = 0;
+
void remove(const std::string &key);
virtual void flush() {
@@ -60,6 +62,7 @@ class KVStore : public KV {
}
std::shared_ptr scoped(const std::string &scope) override final;
+ std::unordered_set keys(const std::string &prefix = "");
protected:
phmap::parallel_flat_hash_map::iterator>> getStore() {
@@ -76,6 +79,7 @@ class KVStore : public KV {
virtual std::optional load(const std::string &key) = 0;
virtual bool save(const std::string &key, const ValueWrapper &value) = 0;
+ virtual std::vector loadPrefix(const std::string &prefix = "") = 0;
private:
void setLocked(const std::string &key, const ValueWrapper &value);
@@ -118,10 +122,14 @@ class ScopedKV final : public KV {
}
std::shared_ptr scoped(const std::string &scope) override final {
- logger.debug("ScopedKV::scoped({})", buildKey(scope));
+ logger.trace("ScopedKV::scoped({})", buildKey(scope));
return std::make_shared(logger, rootKV_, buildKey(scope));
}
+ std::unordered_set keys(const std::string &prefix = "") override {
+ return rootKV_.keys(buildKey(prefix));
+ }
+
private:
std::string buildKey(const std::string &key) const {
return fmt::format("{}.{}", prefix_, key);
diff --git a/src/kv/kv_sql.cpp b/src/kv/kv_sql.cpp
index a0f1623ed2c..4784efa5c9e 100644
--- a/src/kv/kv_sql.cpp
+++ b/src/kv/kv_sql.cpp
@@ -41,6 +41,24 @@ std::optional KVSQL::load(const std::string &key) {
return std::nullopt;
}
+std::vector KVSQL::loadPrefix(const std::string &prefix /* = ""*/) {
+ std::vector keys;
+ std::string keySearch = db.escapeString(prefix + "%");
+ auto query = fmt::format("SELECT `key_name` FROM `kv_store` WHERE `key_name` LIKE {}", keySearch);
+ auto result = db.storeQuery(query);
+ if (result == nullptr) {
+ return keys;
+ }
+
+ do {
+ std::string key = result->getString("key_name");
+ replaceString(key, prefix, "");
+ keys.push_back(key);
+ } while (result->next());
+
+ return keys;
+}
+
bool KVSQL::save(const std::string &key, const ValueWrapper &value) {
auto update = dbUpdate();
prepareSave(key, value, update);
@@ -58,7 +76,7 @@ bool KVSQL::prepareSave(const std::string &key, const ValueWrapper &value, DBIns
return db.executeQuery(query);
}
- update.addRow(fmt::format("{}, {}, {}", db.escapeString(key), getTimeMsNow(), db.escapeString(data)));
+ update.addRow(fmt::format("{}, {}, {}", db.escapeString(key), value.getTimestamp(), db.escapeString(data)));
return true;
}
diff --git a/src/kv/kv_sql.hpp b/src/kv/kv_sql.hpp
index 8cb4dce89f7..fd181b1cef7 100644
--- a/src/kv/kv_sql.hpp
+++ b/src/kv/kv_sql.hpp
@@ -25,6 +25,7 @@ class KVSQL final : public KVStore {
bool saveAll() override;
private:
+ std::vector loadPrefix(const std::string &prefix = "") override;
std::optional load(const std::string &key) override;
bool save(const std::string &key, const ValueWrapper &value) override;
bool prepareSave(const std::string &key, const ValueWrapper &value, DBInsert &update);
diff --git a/src/kv/value_wrapper.cpp b/src/kv/value_wrapper.cpp
index 023beba1595..af304eeacad 100644
--- a/src/kv/value_wrapper.cpp
+++ b/src/kv/value_wrapper.cpp
@@ -1,30 +1,31 @@
#include "kv/value_wrapper.hpp"
+#include "utils/tools.hpp"
ValueWrapper::ValueWrapper(uint64_t timestamp) :
- timestamp_(timestamp) { }
+ timestamp_(timestamp == 0 ? getTimeMsNow() : timestamp) { }
ValueWrapper::ValueWrapper(const ValueVariant &value, uint64_t timestamp) :
- data_(value), timestamp_(timestamp) { }
+ data_(value), timestamp_(timestamp == 0 ? getTimeMsNow() : timestamp) { }
ValueWrapper::ValueWrapper(const std::string &value, uint64_t timestamp) :
- data_(value), timestamp_(timestamp) { }
+ data_(value), timestamp_(timestamp == 0 ? getTimeMsNow() : timestamp) { }
ValueWrapper::ValueWrapper(bool value, uint64_t timestamp) :
- data_(value), timestamp_(timestamp) { }
+ data_(value), timestamp_(timestamp == 0 ? getTimeMsNow() : timestamp) { }
ValueWrapper::ValueWrapper(int value, uint64_t timestamp) :
- data_(value), timestamp_(timestamp) { }
+ data_(value), timestamp_(timestamp == 0 ? getTimeMsNow() : timestamp) { }
ValueWrapper::ValueWrapper(double value, uint64_t timestamp) :
- data_(value), timestamp_(timestamp) { }
+ data_(value), timestamp_(timestamp == 0 ? getTimeMsNow() : timestamp) { }
ValueWrapper::ValueWrapper(const phmap::flat_hash_map &value, uint64_t timestamp) :
data_(createMapFromRange(value.begin(), value.end(), timestamp)),
- timestamp_(timestamp) { }
+ timestamp_(timestamp == 0 ? getTimeMsNow() : timestamp) { }
ValueWrapper::ValueWrapper(const std::initializer_list> &init_list, uint64_t timestamp) :
data_(createMapFromRange(init_list.begin(), init_list.end(), timestamp)),
- timestamp_(timestamp) { }
+ timestamp_(timestamp == 0 ? getTimeMsNow() : timestamp) { }
std::optional ValueWrapper::get(const std::string &key) const {
auto pval = std::get_if(&data_);
diff --git a/src/lua/functions/core/game/game_functions.cpp b/src/lua/functions/core/game/game_functions.cpp
index 633f39489de..5221d2c9e4f 100644
--- a/src/lua/functions/core/game/game_functions.cpp
+++ b/src/lua/functions/core/game/game_functions.cpp
@@ -635,9 +635,10 @@ int GameFunctions::luaGameGetOfflinePlayer(lua_State* L) {
}
int GameFunctions::luaGameGetNormalizedPlayerName(lua_State* L) {
- // Game.getNormalizedPlayerName(name)
+ // Game.getNormalizedPlayerName(name[, isNewName = false])
auto name = getString(L, 1);
- std::shared_ptr player = g_game().getPlayerByName(name, true);
+ auto isNewName = getBoolean(L, 2, false);
+ std::shared_ptr player = g_game().getPlayerByName(name, true, isNewName);
if (player) {
pushString(L, player->getName());
} else {
diff --git a/src/lua/functions/core/libs/kv_functions.cpp b/src/lua/functions/core/libs/kv_functions.cpp
index 769c20bff8a..dbef916364d 100644
--- a/src/lua/functions/core/libs/kv_functions.cpp
+++ b/src/lua/functions/core/libs/kv_functions.cpp
@@ -72,7 +72,7 @@ int KVFunctions::luaKVGet(lua_State* L) {
valueWrapper = g_kv().get(key, forceLoad);
}
- if (valueWrapper) {
+ if (valueWrapper.has_value()) {
pushValueWrapper(L, *valueWrapper);
} else {
lua_pushnil(L);
@@ -80,6 +80,44 @@ int KVFunctions::luaKVGet(lua_State* L) {
return 1;
}
+int KVFunctions::luaKVRemove(lua_State* L) {
+ // KV.remove(key) | scopedKV:remove(key)
+ auto key = getString(L, -1);
+ if (isUserdata(L, 1)) {
+ auto scopedKV = getUserdataShared(L, 1);
+ scopedKV->remove(key);
+ } else {
+ g_kv().remove(key);
+ }
+ lua_pushnil(L);
+ return 1;
+}
+
+int KVFunctions::luaKVKeys(lua_State* L) {
+ // KV.keys([prefix = ""]) | scopedKV:keys([prefix = ""])
+ std::unordered_set keys;
+ std::string prefix = "";
+
+ if (isString(L, -1)) {
+ prefix = getString(L, -1);
+ }
+
+ if (isUserdata(L, 1)) {
+ auto scopedKV = getUserdataShared(L, 1);
+ keys = scopedKV->keys();
+ } else {
+ keys = g_kv().keys(prefix);
+ }
+
+ int index = 0;
+ lua_createtable(L, static_cast(keys.size()), 0);
+ for (const auto &key : keys) {
+ pushString(L, key);
+ lua_rawseti(L, -2, ++index);
+ }
+ return 1;
+}
+
std::optional KVFunctions::getValueWrapper(lua_State* L) {
if (isBoolean(L, -1)) {
return ValueWrapper(getBoolean(L, -1));
diff --git a/src/lua/functions/core/libs/kv_functions.hpp b/src/lua/functions/core/libs/kv_functions.hpp
index 243a0ed36e3..3abddfb0b53 100644
--- a/src/lua/functions/core/libs/kv_functions.hpp
+++ b/src/lua/functions/core/libs/kv_functions.hpp
@@ -18,17 +18,23 @@ class KVFunctions final : LuaScriptInterface {
registerMethod(L, "kv", "scoped", KVFunctions::luaKVScoped);
registerMethod(L, "kv", "set", KVFunctions::luaKVSet);
registerMethod(L, "kv", "get", KVFunctions::luaKVGet);
+ registerMethod(L, "kv", "keys", KVFunctions::luaKVKeys);
+ registerMethod(L, "kv", "remove", KVFunctions::luaKVRemove);
registerClass(L, "KV", "");
registerMethod(L, "KV", "scoped", KVFunctions::luaKVScoped);
registerMethod(L, "KV", "set", KVFunctions::luaKVSet);
registerMethod(L, "KV", "get", KVFunctions::luaKVGet);
+ registerMethod(L, "KV", "keys", KVFunctions::luaKVKeys);
+ registerMethod(L, "KV", "remove", KVFunctions::luaKVRemove);
}
private:
static int luaKVScoped(lua_State* L);
static int luaKVSet(lua_State* L);
static int luaKVGet(lua_State* L);
+ static int luaKVKeys(lua_State* L);
+ static int luaKVRemove(lua_State* L);
static std::optional getValueWrapper(lua_State* L);
static void pushStringValue(lua_State* L, const StringType &value);
diff --git a/src/lua/functions/creatures/npc/npc_functions.cpp b/src/lua/functions/creatures/npc/npc_functions.cpp
index 0df0b55041a..c4f447c8823 100644
--- a/src/lua/functions/creatures/npc/npc_functions.cpp
+++ b/src/lua/functions/creatures/npc/npc_functions.cpp
@@ -384,7 +384,6 @@ int NpcFunctions::luaNpcOpenShopWindowTable(lua_State* L) {
lua_pushnil(L);
while (lua_next(L, 3) != 0) {
const auto tableIndex = lua_gettop(L);
- ShopBlock item;
auto itemId = getField(L, tableIndex, "clientId");
auto subType = getField(L, tableIndex, "subType");
@@ -397,10 +396,11 @@ int NpcFunctions::luaNpcOpenShopWindowTable(lua_State* L) {
auto sellPrice = getField(L, tableIndex, "sell");
auto storageKey = getField(L, tableIndex, "storageKey");
auto storageValue = getField(L, tableIndex, "storageValue");
- auto realName = getFieldString(L, tableIndex, "name");
- g_logger().debug("[{}] item '{}' sell price '{}', buyprice '{}'", __FUNCTION__, realName, sellPrice, buyPrice);
-
- items.emplace_back(itemId, subType, buyPrice, sellPrice, storageKey, storageValue, std::move(realName));
+ auto itemName = getFieldString(L, tableIndex, "itemName");
+ if (itemName.empty()) {
+ itemName = Item::items[itemId].name;
+ }
+ items.emplace_back(itemId, subType, buyPrice, sellPrice, storageKey, storageValue, itemName);
lua_pop(L, 8);
}
lua_pop(L, 3);
diff --git a/src/lua/functions/creatures/player/player_functions.cpp b/src/lua/functions/creatures/player/player_functions.cpp
index df80a42b13c..b50d62c7d2a 100644
--- a/src/lua/functions/creatures/player/player_functions.cpp
+++ b/src/lua/functions/creatures/player/player_functions.cpp
@@ -3700,6 +3700,24 @@ int PlayerFunctions::luaPlayerGetName(lua_State* L) {
return 1;
}
+int PlayerFunctions::luaPlayerChangeName(lua_State* L) {
+ // player:changeName(newName)
+ const auto player = getUserdataShared(L, 1);
+ if (!player) {
+ reportErrorFunc(getErrorDesc(LUA_ERROR_PLAYER_NOT_FOUND));
+ pushBoolean(L, false);
+ return 0;
+ }
+ if (player->isOnline()) {
+ player->removePlayer(true, true);
+ }
+ player->kv()->remove("namelock");
+ auto newName = getString(L, 2);
+ player->setName(newName);
+ g_saveManager().savePlayer(player);
+ return 1;
+}
+
int PlayerFunctions::luaPlayerHasGroupFlag(lua_State* L) {
// player:hasGroupFlag(flag)
std::shared_ptr player = getUserdataShared(L, 1);
diff --git a/src/lua/functions/creatures/player/player_functions.hpp b/src/lua/functions/creatures/player/player_functions.hpp
index 89bf59b2740..60458816487 100644
--- a/src/lua/functions/creatures/player/player_functions.hpp
+++ b/src/lua/functions/creatures/player/player_functions.hpp
@@ -330,6 +330,7 @@ class PlayerFunctions final : LuaScriptInterface {
registerMethod(L, "Player", "sendDoubleSoundEffect", PlayerFunctions::luaPlayerSendDoubleSoundEffect);
registerMethod(L, "Player", "getName", PlayerFunctions::luaPlayerGetName);
+ registerMethod(L, "Player", "changeName", PlayerFunctions::luaPlayerChangeName);
registerMethod(L, "Player", "hasGroupFlag", PlayerFunctions::luaPlayerHasGroupFlag);
registerMethod(L, "Player", "setGroupFlag", PlayerFunctions::luaPlayerSetGroupFlag);
@@ -674,6 +675,7 @@ class PlayerFunctions final : LuaScriptInterface {
static int luaPlayerSendDoubleSoundEffect(lua_State* L);
static int luaPlayerGetName(lua_State* L);
+ static int luaPlayerChangeName(lua_State* L);
static int luaPlayerHasGroupFlag(lua_State* L);
static int luaPlayerSetGroupFlag(lua_State* L);
diff --git a/src/server/network/connection/connection.cpp b/src/server/network/connection/connection.cpp
index f0046f0aa3a..5f007df6b6b 100644
--- a/src/server/network/connection/connection.cpp
+++ b/src/server/network/connection/connection.cpp
@@ -26,15 +26,17 @@ void ConnectionManager::releaseConnection(const Connection_ptr &connection) {
}
void ConnectionManager::closeAll() {
- connections.for_each([](const Connection_ptr &connection) {
- try {
- std::error_code error;
- connection->socket.shutdown(asio::ip::tcp::socket::shutdown_both, error);
- if (error) {
- g_logger().error("[ConnectionManager::closeAll] - Failed to close connection, system error code {}", error.message());
+ connections.for_each([&](const Connection_ptr &connection) {
+ if (connection->socket.is_open()) {
+ try {
+ std::error_code error;
+ connection->socket.shutdown(asio::ip::tcp::socket::shutdown_both, error);
+ if (error) {
+ g_logger().error("[ConnectionManager::closeAll] - Failed to close connection, system error code {}", error.message());
+ }
+ } catch (const std::system_error &systemError) {
+ g_logger().error("[ConnectionManager::closeAll] - Exception caught: {}", systemError.what());
}
- } catch (const std::system_error &systemError) {
- g_logger().error("[ConnectionManager::closeAll] - Exception caught: {}", systemError.what());
}
});
@@ -45,8 +47,7 @@ Connection::Connection(asio::io_service &initIoService, ConstServicePort_ptr ini
readTimer(initIoService),
writeTimer(initIoService),
service_port(std::move(initservicePort)),
- socket(initIoService),
- timeConnected(std::chrono::system_clock::to_time_t(std::chrono::system_clock::now())) {
+ socket(initIoService) {
}
void Connection::close(bool force) {
@@ -61,7 +62,7 @@ void Connection::close(bool force) {
connectionState = CONNECTION_STATE_CLOSED;
if (protocol) {
- g_dispatcher().addEvent(std::bind_front(&Protocol::release, protocol), "Protocol::release", std::chrono::milliseconds(1000).count());
+ g_dispatcher().addEvent(std::bind_front(&Protocol::release, protocol), "Protocol::release", std::chrono::milliseconds(CONNECTION_WRITE_TIMEOUT * 1000).count());
}
if (messageQueue.empty() || force) {
@@ -74,26 +75,30 @@ void Connection::closeSocket() {
return;
}
- readTimer.cancel();
- writeTimer.cancel();
- socket.cancel();
+ try {
+ readTimer.cancel();
+ writeTimer.cancel();
+ socket.cancel();
- std::error_code error;
- socket.shutdown(asio::ip::tcp::socket::shutdown_both, error);
- if (error) {
- g_logger().error("[Connection::closeSocket] - Failed to shutdown socket: {}", error.message());
- }
+ std::error_code error;
+ socket.shutdown(asio::ip::tcp::socket::shutdown_both, error);
+ if (error && error != asio::error::not_connected) {
+ g_logger().error("[Connection::closeSocket] - Failed to shutdown socket: {}", error.message());
+ }
- socket.close(error);
- if (error) {
- g_logger().error("[Connection::closeSocket] - Failed to close socket: {}", error.message());
+ socket.close(error);
+ if (error && error != asio::error::not_connected) {
+ g_logger().error("[Connection::closeSocket] - Failed to close socket: {}", error.message());
+ }
+ } catch (const std::system_error &e) {
+ g_logger().error("[Connection::closeSocket] - error closeSocket: {}", e.what());
}
}
void Connection::accept(Protocol_ptr protocolPtr) {
connectionState = CONNECTION_STATE_IDENTIFYING;
protocol = std::move(protocolPtr);
- g_dispatcher().addEvent(std::bind_front(&Protocol::onConnect, protocol), "Protocol::onConnect", std::chrono::milliseconds(1000).count());
+ g_dispatcher().addEvent(std::bind_front(&Protocol::onConnect, protocol), "Protocol::onConnect", std::chrono::milliseconds(CONNECTION_WRITE_TIMEOUT * 1000).count());
acceptInternal(false);
}
@@ -102,17 +107,21 @@ void Connection::acceptInternal(bool toggleParseHeader) {
readTimer.expires_from_now(std::chrono::seconds(CONNECTION_READ_TIMEOUT));
readTimer.async_wait(std::bind(&Connection::handleTimeout, std::weak_ptr(shared_from_this()), std::placeholders::_1));
- auto readCallback = toggleParseHeader ? std::bind(&Connection::parseHeader, shared_from_this(), std::placeholders::_1)
- : std::bind(&Connection::parseProxyIdentification, shared_from_this(), std::placeholders::_1);
- asio::async_read(socket, asio::buffer(msg.getBuffer(), HEADER_LENGTH), readCallback);
+ try {
+ auto readCallback = toggleParseHeader ? std::bind(&Connection::parseHeader, shared_from_this(), std::placeholders::_1)
+ : std::bind(&Connection::parseProxyIdentification, shared_from_this(), std::placeholders::_1);
+ asio::async_read(socket, asio::buffer(msg.getBuffer(), HEADER_LENGTH), readCallback);
+ } catch (const std::system_error &e) {
+ g_logger().error("[Connection::acceptInternal] - Exception in async_read: {}", e.what());
+ close(FORCE_CLOSE);
+ }
}
-
void Connection::parseProxyIdentification(const std::error_code &error) {
std::scoped_lock lock(connectionLock);
readTimer.cancel();
if (error || connectionState == CONNECTION_STATE_CLOSED) {
- if (error) {
+ if (error != asio::error::operation_aborted && error != asio::error::eof && error != asio::error::connection_reset) {
g_logger().error("[Connection::parseProxyIdentification] - Read error: {}", error.message());
}
close(FORCE_CLOSE);
@@ -166,7 +175,7 @@ void Connection::parseHeader(const std::error_code &error) {
readTimer.cancel();
if (error || connectionState == CONNECTION_STATE_CLOSED) {
- if (error != asio::error::operation_aborted) {
+ if (error != asio::error::operation_aborted && error != asio::error::eof && error != asio::error::connection_reset) {
g_logger().error("[Connection::parseHeader] - Read error: {}", error.message());
}
close(FORCE_CLOSE);
@@ -275,7 +284,12 @@ void Connection::resumeWork() {
readTimer.expires_from_now(std::chrono::seconds(CONNECTION_READ_TIMEOUT));
readTimer.async_wait(std::bind(&Connection::handleTimeout, std::weak_ptr(shared_from_this()), std::placeholders::_1));
- asio::async_read(socket, asio::buffer(msg.getBuffer(), HEADER_LENGTH), std::bind(&Connection::parseHeader, shared_from_this(), std::placeholders::_1));
+ try {
+ asio::async_read(socket, asio::buffer(msg.getBuffer(), HEADER_LENGTH), std::bind(&Connection::parseHeader, shared_from_this(), std::placeholders::_1));
+ } catch (const std::system_error &e) {
+ g_logger().error("[Connection::resumeWork] - Exception in async_read: {}", e.what());
+ close(FORCE_CLOSE);
+ }
}
void Connection::send(const OutputMessage_ptr &outputMessage) {
@@ -286,9 +300,15 @@ void Connection::send(const OutputMessage_ptr &outputMessage) {
bool noPendingWrite = messageQueue.empty();
messageQueue.emplace_back(outputMessage);
+
if (noPendingWrite) {
if (socket.is_open()) {
- asio::post(socket.get_executor(), std::bind(&Connection::internalWorker, shared_from_this()));
+ try {
+ asio::post(socket.get_executor(), std::bind(&Connection::internalWorker, shared_from_this()));
+ } catch (const std::system_error &e) {
+ g_logger().error("[Connection::send] - Exception in posting write operation: {}", e.what());
+ close(FORCE_CLOSE);
+ }
} else {
g_logger().error("[Connection::send] - Socket is not open for writing.");
close(FORCE_CLOSE);
@@ -326,7 +346,6 @@ uint32_t Connection::getIP() {
ip = htonl(endpoint.address().to_v4().to_uint());
}
}
-
return ip;
}
@@ -334,7 +353,12 @@ void Connection::internalSend(const OutputMessage_ptr &outputMessage) {
writeTimer.expires_from_now(std::chrono::seconds(CONNECTION_WRITE_TIMEOUT));
writeTimer.async_wait(std::bind(&Connection::handleTimeout, std::weak_ptr(shared_from_this()), std::placeholders::_1));
- asio::async_write(socket, asio::buffer(outputMessage->getOutputBuffer(), outputMessage->getLength()), std::bind(&Connection::onWriteOperation, shared_from_this(), std::placeholders::_1));
+ try {
+ asio::async_write(socket, asio::buffer(outputMessage->getOutputBuffer(), outputMessage->getLength()), std::bind(&Connection::onWriteOperation, shared_from_this(), std::placeholders::_1));
+ } catch (const std::system_error &e) {
+ g_logger().error("[Connection::internalSend] - Exception in async_write: {}", e.what());
+ close(FORCE_CLOSE);
+ }
}
void Connection::onWriteOperation(const std::error_code &error) {
@@ -362,12 +386,16 @@ void Connection::onWriteOperation(const std::error_code &error) {
}
void Connection::handleTimeout(ConnectionWeak_ptr connectionWeak, const std::error_code &error) {
- if (error) {
- if (error != asio::error::operation_aborted) {
- g_logger().warn("[Connection::handleTimeout] - Timeout or error: {}", error.message());
- if (auto connection = connectionWeak.lock()) {
- connection->close(FORCE_CLOSE);
- }
+ if (error == asio::error::operation_aborted) {
+ return;
+ }
+
+ if (auto connection = connectionWeak.lock()) {
+ if (!error) {
+ g_logger().warn("Connection Timeout, IP: {}", convertIPToString(connection->getIP()));
+ } else {
+ g_logger().warn("Connection Timeout or error: {}, IP: {}", error.message(), convertIPToString(connection->getIP()));
}
+ connection->close(FORCE_CLOSE);
}
}
diff --git a/src/server/network/connection/connection.hpp b/src/server/network/connection/connection.hpp
index d7d0f4b005f..2054cf69f9e 100644
--- a/src/server/network/connection/connection.hpp
+++ b/src/server/network/connection/connection.hpp
@@ -100,7 +100,7 @@ class Connection : public std::enable_shared_from_this {
asio::ip::tcp::socket socket;
- time_t timeConnected;
+ std::time_t timeConnected = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
uint32_t packetsSent = 0;
uint32_t ip = 1;
diff --git a/src/server/network/protocol/protocolgame.cpp b/src/server/network/protocol/protocolgame.cpp
index ad8b728ed05..a7e42e60d40 100644
--- a/src/server/network/protocol/protocolgame.cpp
+++ b/src/server/network/protocol/protocolgame.cpp
@@ -515,9 +515,11 @@ void ProtocolGame::login(const std::string &name, uint32_t accountId, OperatingS
return;
}
- if (g_configManager().getBoolean(ONE_PLAYER_ON_ACCOUNT, __FUNCTION__) && player->getAccountType() < account::ACCOUNT_TYPE_GAMEMASTER && g_game().getPlayerByAccount(player->getAccountId())) {
+ auto onlineCount = g_game().getPlayersByAccount(player->getAccount()).size();
+ auto maxOnline = g_configManager().getNumber(MAX_PLAYERS_PER_ACCOUNT, __FUNCTION__);
+ if (player->getAccountType() < account::ACCOUNT_TYPE_GAMEMASTER && onlineCount >= maxOnline) {
g_game().removePlayerUniqueLogin(player);
- disconnectClient("You may only login with one character\nof your account at the same time.");
+ disconnectClient(fmt::format("You may only login with {} character{}\nof your account at the same time.", maxOnline, maxOnline > 1 ? "s" : ""));
return;
}
@@ -570,6 +572,24 @@ void ProtocolGame::login(const std::string &name, uint32_t accountId, OperatingS
player->setOperatingSystem(operatingSystem);
+ const auto tile = g_game().map.getOrCreateTile(player->getLoginPosition());
+ // moving from a pz tile to a non-pz tile
+ if (maxOnline > 1 && player->getAccountType() < account::ACCOUNT_TYPE_GAMEMASTER && !tile->hasFlag(TILESTATE_PROTECTIONZONE)) {
+ auto maxOutsizePZ = g_configManager().getNumber(MAX_PLAYERS_OUTSIDE_PZ_PER_ACCOUNT, __FUNCTION__);
+ auto accountPlayers = g_game().getPlayersByAccount(player->getAccount());
+ int countOutsizePZ = 0;
+ for (const auto &accountPlayer : accountPlayers) {
+ if (accountPlayer != player && accountPlayer->getTile() && !accountPlayer->getTile()->hasFlag(TILESTATE_PROTECTIONZONE)) {
+ ++countOutsizePZ;
+ }
+ }
+ if (countOutsizePZ >= maxOutsizePZ) {
+ g_game().removePlayerUniqueLogin(player);
+ disconnectClient(fmt::format("You can only have {} character{} from your account outside of a protection zone.", maxOutsizePZ == 1 ? "one" : std::to_string(maxOutsizePZ), maxOutsizePZ > 1 ? "s" : ""));
+ return;
+ }
+ }
+
if (!g_game().placeCreature(player, player->getLoginPosition()) && !g_game().placeCreature(player, player->getTemplePosition(), false, true)) {
g_game().removePlayerUniqueLogin(player);
disconnectClient("Temple position is wrong. Please, contact the administrator.");
@@ -6411,7 +6431,7 @@ void ProtocolGame::sendOutfitWindow() {
if (oldProtocol) {
Outfit_t currentOutfit = player->getDefaultOutfit();
- const auto currentMount = g_game().mounts.getMountByID(player->getCurrentMount());
+ const auto currentMount = g_game().mounts.getMountByID(player->getLastMount());
if (currentMount) {
currentOutfit.lookMount = currentMount->clientId;
}
@@ -6471,7 +6491,7 @@ void ProtocolGame::sendOutfitWindow() {
bool mounted = false;
Outfit_t currentOutfit = player->getDefaultOutfit();
- const auto currentMount = g_game().mounts.getMountByID(player->getCurrentMount());
+ const auto currentMount = g_game().mounts.getMountByID(player->getLastMount());
if (currentMount) {
mounted = (currentOutfit.lookMount == currentMount->clientId);
currentOutfit.lookMount = currentMount->clientId;
@@ -7802,18 +7822,21 @@ void ProtocolGame::sendItemsPrice() {
NetworkMessage msg;
msg.addByte(0xCD);
- msg.add(g_game().getItemsPriceCount());
- if (g_game().getItemsPriceCount() > 0) {
- for (const auto &[itemId, tierAndPriceMap] : g_game().getItemsPrice()) {
- for (const auto &[tier, price] : tierAndPriceMap) {
- msg.add(itemId);
- if (Item::items[itemId].upgradeClassification > 0) {
- msg.addByte(tier);
- }
- msg.add(price);
+ auto countBuffer = msg.getBufferPosition();
+ uint16_t count = 0;
+ msg.skipBytes(2);
+ for (const auto &[itemId, tierAndPriceMap] : g_game().getItemsPrice()) {
+ for (const auto &[tier, price] : tierAndPriceMap) {
+ msg.add(itemId);
+ if (Item::items[itemId].upgradeClassification > 0) {
+ msg.addByte(tier);
}
+ msg.add(price);
+ count++;
}
}
+ msg.setBufferPosition(countBuffer);
+ msg.add(count);
writeToOutputBuffer(msg);
}
@@ -8450,7 +8473,7 @@ void ProtocolGame::parseSetMonsterPodium(NetworkMessage &msg) const {
}
void ProtocolGame::sendBosstiaryCooldownTimer() {
- if (oldProtocol) {
+ if (!player || oldProtocol) {
return;
}
diff --git a/src/utils/tools.cpp b/src/utils/tools.cpp
index ce42c04ad50..39ca687f06a 100644
--- a/src/utils/tools.cpp
+++ b/src/utils/tools.cpp
@@ -1525,7 +1525,7 @@ NameEval_t validateName(const std::string &name) {
std::istream_iterator end;
std::copy(begin, end, std::back_inserter(toks));
- if (name.length() < 3 || name.length() > 14) {
+ if (name.length() < 3 || name.length() > 18) {
return INVALID_LENGTH;
}
diff --git a/tests/fixture/kv/in_memory_kv.hpp b/tests/fixture/kv/in_memory_kv.hpp
index b738a98470a..84a84ba8dff 100644
--- a/tests/fixture/kv/in_memory_kv.hpp
+++ b/tests/fixture/kv/in_memory_kv.hpp
@@ -35,6 +35,9 @@ class KVMemory final : public KVStore {
}
protected:
+ std::vector loadPrefix(const std::string &prefix = "") override {
+ return {};
+ }
std::optional load(const std::string &key) override {
return std::nullopt;
}
diff --git a/vcproj/canary.vcxproj b/vcproj/canary.vcxproj
index e387dbddbea..8e779cf57fd 100644
--- a/vcproj/canary.vcxproj
+++ b/vcproj/canary.vcxproj
@@ -129,7 +129,6 @@
-
@@ -559,4 +558,4 @@
-
\ No newline at end of file
+