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 +