diff --git a/data-otxserver/monster/constructs/animated_snowman.lua b/data-otxserver/monster/constructs/animated_snowman.lua index 72f7c5c9d..6fcf98830 100644 --- a/data-otxserver/monster/constructs/animated_snowman.lua +++ b/data-otxserver/monster/constructs/animated_snowman.lua @@ -78,7 +78,7 @@ monster.loot = { { name = "shiver arrow", chance = 7310 }, { name = "ice rapier", chance = 4750 }, { name = "glacier mask", chance = 4570 }, - { name = "snowball", chance = 4000, maxCount = 5 }, + { id = 2992, chance = 4000, maxCount = 5 }, -- snowball { name = "hailstorm rod", chance = 3470 }, { name = "glacier mask", chance = 250 }, { name = "glacier amulet", chance = 3290 }, diff --git a/data-otxserver/monster/demons/brachiodemon.lua b/data-otxserver/monster/demons/brachiodemon.lua index 88c09c550..930ecfe46 100644 --- a/data-otxserver/monster/demons/brachiodemon.lua +++ b/data-otxserver/monster/demons/brachiodemon.lua @@ -108,6 +108,7 @@ monster.attacks = { { name = "combat", interval = 2000, chance = 22, type = COMBAT_DEATHDAMAGE, minDamage = -900, maxDamage = -1280, radius = 4, effect = CONST_ME_EXPLOSIONHIT, target = false }, { name = "combat", interval = 2000, chance = 10, type = COMBAT_DEATHDAMAGE, minDamage = -1150, maxDamage = -1460, range = 7, effect = CONST_ANI_SUDDENDEATH, target = true }, { name = "combat", interval = 2000, chance = 15, type = COMBAT_DEATHDAMAGE, minDamage = -950, maxDamage = -1100, range = 7, radius = 4, shootEffect = CONST_ANI_SUDDENDEATH, effect = CONST_ME_MORTAREA, target = true }, + { name = "destroy magic walls", interval = 1000, chance = 30 }, } monster.defenses = { diff --git a/data-otxserver/monster/demons/many_faces.lua b/data-otxserver/monster/demons/many_faces.lua index e557770d9..8b9724a62 100644 --- a/data-otxserver/monster/demons/many_faces.lua +++ b/data-otxserver/monster/demons/many_faces.lua @@ -104,6 +104,7 @@ monster.attacks = { { name = "combat", interval = 5000, chance = 44, type = COMBAT_ICEDAMAGE, minDamage = -1000, maxDamage = -1450, range = 7, radius = 5, shootEffect = CONST_ANI_ICE, effect = CONST_ME_ICEAREA, target = true }, { name = "combat", interval = 9500, chance = 59, type = COMBAT_HOLYDAMAGE, minDamage = -1050, maxDamage = -1300, radius = 4, effect = CONST_ME_HOLYAREA, target = false }, { name = "extended holy chain", interval = 10000, chance = 59, minDamage = -1150, maxDamage = -1300, range = 7 }, + { name = "destroy magic walls", interval = 1000, chance = 30 }, } monster.defenses = { diff --git a/data-otxserver/monster/event_creatures/grynch_clan_goblin.lua b/data-otxserver/monster/event_creatures/grynch_clan_goblin.lua index 3c852794a..d13e2a3d4 100644 --- a/data-otxserver/monster/event_creatures/grynch_clan_goblin.lua +++ b/data-otxserver/monster/event_creatures/grynch_clan_goblin.lua @@ -106,7 +106,7 @@ monster.loot = { { id = 2639, chance = 4000 }, -- picture { id = 2950, chance = 5000 }, -- lute { id = 2983, chance = 500 }, -- flower bowl - { name = "snowball", chance = 7000, maxCount = 5 }, + { id = 2992, chance = 7000, maxCount = 5 }, -- snowball { name = "piggy bank", chance = 1000 }, { name = "gold coin", chance = 22500, maxCount = 22 }, { name = "scarab coin", chance = 500, maxCount = 2 }, diff --git a/data-otxserver/monster/mammals/yeti.lua b/data-otxserver/monster/mammals/yeti.lua index 7ef601194..890751bbc 100644 --- a/data-otxserver/monster/mammals/yeti.lua +++ b/data-otxserver/monster/mammals/yeti.lua @@ -76,7 +76,7 @@ monster.voices = { } monster.loot = { - { name = "snowball", chance = 10000, maxCount = 22 }, + { id = 2992, chance = 10000, maxCount = 22 }, -- snowball { name = "gold coin", chance = 100000, maxCount = 60 }, { name = "gold coin", chance = 100000, maxCount = 40 }, { name = "bunnyslippers", chance = 1333 }, diff --git a/data-otxserver/monster/plants/cloak_of_terror.lua b/data-otxserver/monster/plants/cloak_of_terror.lua index fd9dbf2a9..184ba93fa 100644 --- a/data-otxserver/monster/plants/cloak_of_terror.lua +++ b/data-otxserver/monster/plants/cloak_of_terror.lua @@ -102,6 +102,7 @@ monster.attacks = { { name = "combat", interval = 3000, chance = 20, type = COMBAT_ENERGYDAMAGE, minDamage = -1150, maxDamage = -1300, range = 7, radius = 4, effect = CONST_ME_ENERGYHIT, target = true }, { name = "combat", interval = 2000, chance = 14, type = COMBAT_HOLYDAMAGE, minDamage = -1000, maxDamage = -1300, range = 7, shootEffect = CONST_ANI_SPECTRALBOLT, effect = CONST_ME_HOLYDAMAGE, target = true }, { name = "combat", interval = 2000, chance = 24, type = COMBAT_HOLYDAMAGE, minDamage = -800, maxDamage = -1200, range = 7, radius = 3, shootEffect = CONST_ANI_SMALLHOLY, effect = CONST_ME_YELLOW_ENERGY_SPARK, target = true }, + { name = "destroy magic walls", interval = 1000, chance = 30 }, } monster.defenses = { diff --git a/data-otxserver/monster/quests/dangerous_depth/bosses/the_baron_from_below.lua b/data-otxserver/monster/quests/dangerous_depth/bosses/the_baron_from_below.lua index e780ac65c..a381c3b07 100644 --- a/data-otxserver/monster/quests/dangerous_depth/bosses/the_baron_from_below.lua +++ b/data-otxserver/monster/quests/dangerous_depth/bosses/the_baron_from_below.lua @@ -112,6 +112,8 @@ monster.loot = { { name = "slimy leg", chance = 4170 }, { name = "badger boots", chance = 4170 }, { name = "spellbook of warding", chance = 2080 }, + { name = "gnome sword", chance = 4170 }, + { name = "gnome armor", chance = 3390 }, } monster.attacks = { diff --git a/data-otxserver/monster/quests/dangerous_depth/bosses/the_duke_of_the_depths.lua b/data-otxserver/monster/quests/dangerous_depth/bosses/the_duke_of_the_depths.lua index 31c354f76..d654288c4 100644 --- a/data-otxserver/monster/quests/dangerous_depth/bosses/the_duke_of_the_depths.lua +++ b/data-otxserver/monster/quests/dangerous_depth/bosses/the_duke_of_the_depths.lua @@ -111,6 +111,7 @@ monster.loot = { { name = "gnome sword", chance = 4170 }, { name = "terra mantle", chance = 2080 }, { name = "violet gem", chance = 2080 }, + { name = "gnome legs", chance = 3390 }, } monster.attacks = { diff --git a/data-otxserver/monster/quests/the_inquisition/ushuriel.lua b/data-otxserver/monster/quests/the_inquisition/ushuriel.lua index 35c7d81b0..6d1bb8f99 100644 --- a/data-otxserver/monster/quests/the_inquisition/ushuriel.lua +++ b/data-otxserver/monster/quests/the_inquisition/ushuriel.lua @@ -93,7 +93,7 @@ monster.loot = { { name = "mysterious voodoo skull", chance = 12500 }, { name = "skull helmet", chance = 20000 }, { name = "iron ore", chance = 33333 }, - { name = "spirit container", chance = 4761 }, + { id = 5884, chance = 4761 }, -- spirit container { name = "flask of warrior's sweat", chance = 5555 }, { name = "enchanted chicken wing", chance = 7692 }, { name = "huge chunk of crude iron", chance = 14285 }, diff --git a/data-otxserver/monster/reptiles/corrupt_naga.lua b/data-otxserver/monster/reptiles/corrupt_naga.lua index bcdd68ee8..729245242 100644 --- a/data-otxserver/monster/reptiles/corrupt_naga.lua +++ b/data-otxserver/monster/reptiles/corrupt_naga.lua @@ -5,10 +5,10 @@ monster.description = "a corrupt naga" monster.experience = 4380 monster.outfit = { lookType = 1538, - lookHead = 55, - lookBody = 6, - lookLegs = 0, - lookFeet = 78, + lookHead = 86, + lookBody = 57, + lookLegs = 75, + lookFeet = 94, lookAddons = 3, lookMount = 0, } @@ -16,7 +16,7 @@ monster.outfit = { monster.health = 5990 monster.maxHealth = 5990 monster.race = "blood" -monster.corpse = 0 +monster.corpse = 39217 monster.speed = 182 monster.manaCost = 0 @@ -60,15 +60,14 @@ monster.voices = { } monster.loot = { - { name = "Platinum Coin", chance = 75420, minCount = 1, maxCount = 8 }, - { name = "Violet Crystal Shard", chance = 24580, minCount = 1, maxCount = 2 }, - { name = "Corrupt Naga Scales", chance = 17720 }, + { name = "corrupt naga scales", chance = 17720 }, } monster.attacks = { - { name = "combat", interval = 2000, chance = 100, minDamage = -300, maxDamage = -600, shootEffect = CONST_ANI_EXPLOSION, effect = CONST_ME_PURPLEENERGY, target = true }, - { name = "nagadeath", interval = 6000, chance = 39, target = false, minDamage = -1000, maxDamage = -2200 }, - { name = "nagadeathattack", interval = 3000, chance = 68, target = true, minDamage = -400, maxDamage = -600 }, + { name = "combat", interval = 2000, chance = 100, type = COMBAT_PHYSICALDAMAGE, minDamage = -120, maxDamage = -340, target = true }, -- basic_attack + { name = "combat", interval = 2500, chance = 30, type = COMBAT_PHYSICALDAMAGE, minDamage = -320, maxDamage = -430, effect = CONST_ME_YELLOWSMOKE, range = 3, target = true }, -- eruption_strike + { name = "nagadeathattack", interval = 3000, chance = 35, minDamage = -360, maxDamage = -415, target = true }, -- death_strike + { name = "combat", interval = 3500, chance = 35, type = COMBAT_LIFEDRAIN, minDamage = -360, maxDamage = -386, radius = 4, effect = CONST_ME_DRAWBLOOD, target = false }, -- great_blood_ball } monster.defenses = { diff --git a/data-otxserver/monster/reptiles/rogue_naga.lua b/data-otxserver/monster/reptiles/rogue_naga.lua index 25ec8c56c..e3e7e662f 100644 --- a/data-otxserver/monster/reptiles/rogue_naga.lua +++ b/data-otxserver/monster/reptiles/rogue_naga.lua @@ -5,10 +5,10 @@ monster.description = "a rogue naga" monster.experience = 4510 monster.outfit = { lookType = 1543, - lookHead = 55, - lookBody = 6, - lookLegs = 0, - lookFeet = 78, + lookHead = 75, + lookBody = 13, + lookLegs = 95, + lookFeet = 109, lookAddons = 3, lookMount = 0, } @@ -16,7 +16,7 @@ monster.outfit = { monster.health = 6200 monster.maxHealth = 6200 monster.race = "blood" -monster.corpse = 0 +monster.corpse = 39221 monster.speed = 182 monster.manaCost = 0 @@ -64,15 +64,15 @@ monster.voices = { } monster.loot = { - { name = "Platinum Coin", chance = 85600, minCount = 1, maxCount = 12 }, - { name = "Rogue Naga Scales", chance = 15450 }, - { name = "Green Crystal Shard", chance = 14400, minCount = 1, maxCount = 2 }, + { name = "rogue naga scales", chance = 15450 }, } monster.attacks = { - { name = "combat", interval = 2000, chance = 100, minDamage = -300, maxDamage = -600, shootEffect = CONST_ANI_EXPLOSION, effect = CONST_ME_PURPLEENERGY, target = true }, - { name = "combat", interval = 2000, chance = 47, type = COMBAT_PHYSICALDAMAGE, minDamage = -350, maxDamage = -400, effect = CONST_ME_BIG_SCRATCH, target = true }, - { name = "combat", interval = 1000, chance = 10, type = COMBAT_PHYSICALDAMAGE, minDamage = -380, maxDamage = -470, length = 5, spread = 3, effect = CONST_ME_GROUNDSHAKER, target = false }, + { name = "combat", interval = 2000, chance = 50, type = COMBAT_PHYSICALDAMAGE, minDamage = -95, maxDamage = -390, shootEffect = CONST_ANI_EXPLOSION, effect = CONST_ME_PURPLEENERGY, range = 6, target = true }, -- basic_attack + { name = "nagadeathattack", interval = 2500, chance = 20, minDamage = -430, maxDamage = -505, range = 6, target = true }, -- death_strike + { name = "nagadeath", interval = 3000, chance = 20, minDamage = -380, maxDamage = -470, target = false }, -- short_death_wave + { name = "death chain", interval = 3500, chance = 20, minDamage = -460, maxDamage = -520, range = 6, target = true }, -- death_chain + { name = "combat", interval = 4000, chance = 20, type = COMBAT_PHYSICALDAMAGE, minDamage = -85, maxDamage = -190, shootEffect = CONST_ANI_EXPLOSION, effect = CONST_ME_PURPLEENERGY, range = 6, target = true }, -- explosion_strike } monster.defenses = { diff --git a/data-otxserver/monster/undeads/bony_sea_devil.lua b/data-otxserver/monster/undeads/bony_sea_devil.lua index 5e57027cc..1199240df 100644 --- a/data-otxserver/monster/undeads/bony_sea_devil.lua +++ b/data-otxserver/monster/undeads/bony_sea_devil.lua @@ -107,6 +107,7 @@ monster.attacks = { { name = "combat", interval = 2000, chance = 25, type = COMBAT_ICEDAMAGE, minDamage = -950, maxDamage = -1100, range = 7, radius = 5, shootEffect = CONST_ANI_ICE, effect = CONST_ME_ICEAREA, target = true }, { name = "ice chain", interval = 2000, chance = 15, minDamage = -1100, maxDamage = -1300, range = 7 }, { name = "soulwars fear", interval = 2000, chance = 1, target = true }, + { name = "destroy magic walls", interval = 1000, chance = 30 }, } monster.defenses = { diff --git a/data-otxserver/monster/undeads/souleater.lua b/data-otxserver/monster/undeads/souleater.lua index 987e34523..dd0912cfd 100644 --- a/data-otxserver/monster/undeads/souleater.lua +++ b/data-otxserver/monster/undeads/souleater.lua @@ -83,7 +83,7 @@ monster.loot = { { name = "platinum coin", chance = 49610, maxCount = 6 }, { name = "necrotic rod", chance = 980 }, { name = "wand of cosmic energy", chance = 910 }, - { name = "spirit container", chance = 140 }, + { id = 5884, chance = 140 }, -- spirit container { id = 6299, chance = 300 }, -- death ring { name = "great mana potion", chance = 8000 }, { name = "ultimate health potion", chance = 9400 }, diff --git a/data-otxserver/monster/vermins/afflicted_strider.lua b/data-otxserver/monster/vermins/afflicted_strider.lua index 9ffbe3884..2d0f9b0e5 100644 --- a/data-otxserver/monster/vermins/afflicted_strider.lua +++ b/data-otxserver/monster/vermins/afflicted_strider.lua @@ -29,7 +29,7 @@ monster.Bestiary = { monster.health = 10000 monster.maxHealth = 10000 monster.race = "blood" -monster.corpse = 36716 +monster.corpse = 36719 monster.speed = 135 monster.manaCost = 0 diff --git a/data-otxserver/monster/vermins/blemished_spawn.lua b/data-otxserver/monster/vermins/blemished_spawn.lua index e99cd0a57..b646b60c2 100644 --- a/data-otxserver/monster/vermins/blemished_spawn.lua +++ b/data-otxserver/monster/vermins/blemished_spawn.lua @@ -29,7 +29,7 @@ monster.Bestiary = { monster.health = 9000 monster.maxHealth = 9000 monster.race = "blood" -monster.corpse = 36698 +monster.corpse = 36701 monster.speed = 140 monster.manaCost = 0 diff --git a/data-otxserver/scripts/actions/other/bag_you_covet.lua b/data-otxserver/scripts/actions/other/bag_you_covet.lua index e332d9fd3..bb62da593 100644 --- a/data-otxserver/scripts/actions/other/bag_you_covet.lua +++ b/data-otxserver/scripts/actions/other/bag_you_covet.lua @@ -27,6 +27,13 @@ function bagyouCovet.onUse(player, item, fromPosition, target, toPosition, isHot item:remove(1) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You received a " .. rewardItem.name .. ".") + + local text = player:getName() .. " received a " .. rewardItem.name .. " from a " .. item:getName() .. "." + local vocation = player:vocationAbbrev() + Webhook.sendMessage(":game_die: " .. player:getMarkdownLink() .. " received a **" .. rewardItem.name .. "** from a _" .. item:getName() .. "_.") + Broadcast(text, function(targetPlayer) + return targetPlayer ~= player + end) return true end diff --git a/data-otxserver/scripts/actions/other/bag_you_desire.lua b/data-otxserver/scripts/actions/other/bag_you_desire.lua index be25529c0..6716d58ee 100644 --- a/data-otxserver/scripts/actions/other/bag_you_desire.lua +++ b/data-otxserver/scripts/actions/other/bag_you_desire.lua @@ -33,6 +33,13 @@ function bagyouDesire.onUse(player, item, fromPosition, target, toPosition, isHo item:remove(1) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You received a " .. rewardItem.name .. ".") + + local text = player:getName() .. " received a " .. rewardItem.name .. " from a " .. item:getName() .. "." + local vocation = player:vocationAbbrev() + Webhook.sendMessage(":game_die: " .. player:getMarkdownLink() .. " received a **" .. rewardItem.name .. "** from a _" .. item:getName() .. "_.") + Broadcast(text, function(targetPlayer) + return targetPlayer ~= player + end) return true end diff --git a/data-otxserver/scripts/actions/other/magic_gold_converter.lua b/data-otxserver/scripts/actions/other/magic_gold_converter.lua index f64ab905e..d5b9b9d93 100644 --- a/data-otxserver/scripts/actions/other/magic_gold_converter.lua +++ b/data-otxserver/scripts/actions/other/magic_gold_converter.lua @@ -12,7 +12,7 @@ local data = { local function finditem(self, cylinder, conv) if cylinder == 0 then cylinder = self:getSlotItem(CONST_SLOT_BACKPACK) - finditem(self, self:getSlotItem(CONST_SLOT_STORE_INBOX), conv) + finditem(self, self:getStoreInbox(), conv) end if cylinder and cylinder:isContainer() then diff --git a/data-otxserver/scripts/actions/other/primal_bag.lua b/data-otxserver/scripts/actions/other/primal_bag.lua index 5837caa08..ab9f44cdb 100644 --- a/data-otxserver/scripts/actions/other/primal_bag.lua +++ b/data-otxserver/scripts/actions/other/primal_bag.lua @@ -26,7 +26,13 @@ function primalBag.onUse(player, item, fromPosition, target, toPosition, isHotke player:addItem(rewardItem.id, 1) item:remove(1) - player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You received one " .. rewardItem.name .. ".") + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You received a " .. rewardItem.name .. ".") + local text = player:getName() .. " received a " .. rewardItem.name .. " from a " .. item:getName() .. "." + local vocation = player:vocationAbbrev() + Webhook.sendMessage(":game_die: " .. player:getMarkdownLink() .. " received a **" .. rewardItem.name .. "** from a _" .. item:getName() .. "_.") + Broadcast(text, function(targetPlayer) + return targetPlayer ~= player + end) return true end diff --git a/data-otxserver/scripts/actions/tibiadrome/concoctions.lua b/data-otxserver/scripts/actions/tibiadrome/concoctions.lua index 8e7a23d85..fe17dfef0 100644 --- a/data-otxserver/scripts/actions/tibiadrome/concoctions.lua +++ b/data-otxserver/scripts/actions/tibiadrome/concoctions.lua @@ -17,7 +17,7 @@ local configs = { player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Your spells are no longer on cooldown.") end, }, - [Concoction.Ids.StrikeEnhancement] = { condition = { CONDITION_PARAM_SKILL_CRITICAL_HIT_CHANCE, 5 } }, + [Concoction.Ids.StrikeEnhancement] = { condition = { CONDITION_PARAM_SKILL_CRITICAL_HIT_CHANCE, 500 } }, [Concoction.Ids.CharmUpgrade] = { condition = { CONDITION_PARAM_CHARM_CHANCE_MODIFIER, 5 } }, [Concoction.Ids.WealthDuplex] = { rate = 100 }, [Concoction.Ids.BestiaryBetterment] = { multiplier = 2.0 }, diff --git a/data-otxserver/scripts/item_classification/item_tiers.lua b/data-otxserver/scripts/item_classification/item_tiers.lua index 8551624c9..c199f81a3 100644 --- a/data-otxserver/scripts/item_classification/item_tiers.lua +++ b/data-otxserver/scripts/item_classification/item_tiers.lua @@ -2,33 +2,115 @@ local itemTierClassifications = { -- Upgrade classification 1 [1] = { -- Update tier 0 - [1] = { price = 25000, core = 1 }, + [1] = { + regular = 25000, + core = 1, + }, + [2] = { + regular = 50000, + core = 1, + }, + [3] = { + regular = 100000, + core = 1, + }, }, -- Upgrade classification 2 [2] = { -- Update tier 0 - [1] = { price = 750000, core = 1 }, + [1] = { + regular = 50000, + core = 1, + }, -- Update tier 1 - [2] = { price = 5000000, core = 1 }, + [2] = { + regular = 100000, + core = 1, + }, + [3] = { + regular = 200000, + core = 2, + }, + [4] = { + regular = 400000, + core = 2, + }, }, -- Upgrade classification 3 [3] = { - [1] = { price = 4000000, core = 1 }, - [2] = { price = 10000000, core = 1 }, - [3] = { price = 20000000, core = 2 }, + [1] = { + regular = 200000, + core = 1, + }, + [2] = { + regular = 400000, + core = 2, + }, + [3] = { + regular = 800000, + core = 3, + }, + [4] = { + regular = 1600000, + core = 4, + }, + [5] = { + regular = 3200000, + core = 5, + }, }, -- Upgrade classification 4 [4] = { - [1] = { price = 8000000, core = 1 }, - [2] = { price = 20000000, core = 1 }, - [3] = { price = 40000000, core = 2 }, - [4] = { price = 65000000, core = 5 }, - [5] = { price = 100000000, core = 10 }, - [6] = { price = 250000000, core = 15 }, - [7] = { price = 750000000, core = 25 }, - [8] = { price = 2500000000, core = 35 }, - [9] = { price = 8000000000, core = 50 }, - [10] = { price = 15000000000, core = 65 }, + [1] = { + regular = 1500000, + core = 1, + convergence = { fusion = { price = 6000000 }, transfer = { price = 12000000 } }, + }, + [2] = { + regular = 3000000, + core = 2, + convergence = { fusion = { price = 12000000 }, transfer = { price = 24000000 } }, + }, + [3] = { + regular = 6000000, + core = 5, + convergence = { fusion = { price = 24000000 }, transfer = { price = 48000000 } }, + }, + [4] = { + regular = 15000000, + core = 10, + convergence = { fusion = { price = 48000000 }, transfer = { price = 100000000 } }, + }, + [5] = { + regular = 30000000, + core = 15, + convergence = { fusion = { price = 100000000 }, transfer = { price = 200000000 } }, + }, + [6] = { + regular = 80000000, + core = 25, + convergence = { fusion = { price = 200000000 }, transfer = { price = 400000000 } }, + }, + [7] = { + regular = 200000000, + core = 35, + convergence = { fusion = { price = 400000000 }, transfer = { price = 800000000 } }, + }, + [8] = { + regular = 400000000, + core = 50, + convergence = { fusion = { price = 800000000 }, transfer = { price = 1600000000 } }, + }, + [9] = { + regular = 800000000, + core = 60, + convergence = { fusion = { price = 1600000000 }, transfer = { price = 3200000000 } }, + }, + [10] = { + regular = 1600000000, + core = 85, + convergence = { fusion = { price = 3200000000 }, transfer = { price = 6400000000 } }, + }, }, } @@ -40,9 +122,13 @@ for classificationId, classificationTable in ipairs(itemTierClassifications) do -- Registers table for register_item_tier.lua interface classification.Upgrades = {} for tierId, tierTable in ipairs(classificationTable) do - if tierId and tierTable.price and tierTable.core ~= nil then - table.insert(classification.Upgrades, { TierId = tierId - 1, Price = tierTable.price, Core = tierTable.core }) - end + table.insert(classification.Upgrades, { + TierId = tierId, + Core = tierTable.core, + RegularPrice = tierTable.regular, + ConvergenceFustionPrice = tierTable.convergence and tierTable.convergence.fusion.price or 0, + ConvergenceTransferPrice = tierTable.convergence and tierTable.convergence.transfer.price or 0, + }) end -- Create item classification and register classification table itemClassification:register(classification) diff --git a/data-otxserver/scripts/lib/register_item_tier.lua b/data-otxserver/scripts/lib/register_item_tier.lua index 51ad62ccc..b869dd229 100644 --- a/data-otxserver/scripts/lib/register_item_tier.lua +++ b/data-otxserver/scripts/lib/register_item_tier.lua @@ -14,8 +14,9 @@ end registerItemClassification.Upgrades = function(itemClassification, mask) if mask.Upgrades then for _, value in ipairs(mask.Upgrades) do - if value.TierId and value.Price then - itemClassification:addTier(value.TierId, value.Price, value.Core) + if value.TierId then + logger.debug("Registering tier {}, core {}, regular price {}, fusion price {}, transfer price {}", value.TierId, value.Core, value.RegularPrice, value.ConvergenceFustionPrice, value.ConvergenceTransferPrice) + itemClassification:addTier(value.TierId, value.Core, value.RegularPrice, value.ConvergenceFustionPrice, value.ConvergenceTransferPrice) else logger.warn("[registerItemClassification.Upgrades] - Item classification failed on adquire TierID or Price attribute.") end diff --git a/data-otxserver/scripts/lib/shops.lua b/data-otxserver/scripts/lib/shops.lua index 849028994..af19fd803 100644 --- a/data-otxserver/scripts/lib/shops.lua +++ b/data-otxserver/scripts/lib/shops.lua @@ -1334,17 +1334,28 @@ LootShopConfigTable = { { itemName = "golden skull", clientId = 35580, sell = 9000 }, { itemName = "golden sun coin", clientId = 43734, sell = 11000 }, { itemName = "golden tiger coin", clientId = 43735, sell = 11000 }, + { itemName = "greater guardian gem", clientId = 44604, sell = 10000 }, + { itemName = "greater marksman gem", clientId = 44607, sell = 10000 }, + { itemName = "greater mystic gem", clientId = 44613, sell = 10000 }, + { itemName = "greater sage gem", clientId = 44610, sell = 10000 }, { 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 = "guardian gem", clientId = 44603, sell = 5000 }, { itemName = "hexagonal ruby", clientId = 30180, sell = 30000 }, + { itemName = "lesser guardian gem", clientId = 44602, sell = 1000 }, + { itemName = "lesser marksman gem", clientId = 44605, sell = 1000 }, + { itemName = "lesser mystic gem", clientId = 44611, sell = 1000 }, + { itemName = "lesser sage gem", clientId = 44608, sell = 1000 }, { itemName = "life crystal", clientId = 3061, sell = 85 }, { itemName = "magic light wand", clientId = 3046, sell = 35 }, + { itemName = "marksman gem", clientId = 44606, sell = 5000 }, { itemName = "medal of valiance", clientId = 31591, sell = 410000 }, { itemName = "mind stone", clientId = 3062, sell = 100 }, { itemName = "moonstone", clientId = 32771, sell = 13000 }, + { itemName = "mystic gem", clientId = 44612, sell = 5000 }, { itemName = "onyx chip", clientId = 22193, sell = 500 }, { itemName = "opal", clientId = 22194, sell = 500 }, { itemName = "orb", clientId = 3060, sell = 750 }, @@ -1358,6 +1369,7 @@ LootShopConfigTable = { { itemName = "red gem", clientId = 3039, sell = 1000 }, { itemName = "red tome", clientId = 2852, sell = 2000 }, { itemName = "royal almandine", clientId = 39038, sell = 460000 }, + { itemName = "sage gem", clientId = 44609, sell = 5000 }, { itemName = "scarab coin", clientId = 3042, sell = 100 }, { itemName = "sea horse figurine", clientId = 31323, sell = 42000 }, { itemName = "seacrest pearl", clientId = 21747, sell = 400 }, diff --git a/data-otxserver/scripts/weapons/unscripted_weapons.lua b/data-otxserver/scripts/weapons/unscripted_weapons.lua index 667e242af..5e6232836 100644 --- a/data-otxserver/scripts/weapons/unscripted_weapons.lua +++ b/data-otxserver/scripts/weapons/unscripted_weapons.lua @@ -233,7 +233,7 @@ local weapons = { }, { -- broken macuahuitl - itemid = 40530, + itemId = 40530, type = WEAPON_SWORD, }, { @@ -705,7 +705,7 @@ local weapons = { }, { -- phantasmal axe - itemid = 32616, + itemId = 32616, type = WEAPON_AXE, level = 180, unproperly = true, @@ -716,12 +716,12 @@ local weapons = { }, { -- meat hammer - itemid = 32093, + itemId = 32093, type = WEAPON_CLUB, }, { -- tagralt blade - itemid = 31614, + itemId = 31614, type = WEAPON_SWORD, level = 250, unproperly = true, @@ -732,7 +732,7 @@ local weapons = { }, { -- bow of cataclysm - itemid = 31581, + itemId = 31581, type = WEAPON_DISTANCE, level = 250, unproperly = true, @@ -743,7 +743,7 @@ local weapons = { }, { -- mortal mace - itemid = 31580, + itemId = 31580, type = WEAPON_CLUB, level = 220, unproperly = true, @@ -754,7 +754,7 @@ local weapons = { }, { -- cobra rod - itemid = 30400, + itemId = 30400, type = WEAPON_WAND, wandType = "earth", level = 220, @@ -767,7 +767,7 @@ local weapons = { }, { -- cobra wand - itemid = 30399, + itemId = 30399, type = WEAPON_WAND, wandType = "energy", level = 270, @@ -780,7 +780,7 @@ local weapons = { }, { -- cobra sword - itemid = 30398, + itemId = 30398, type = WEAPON_SWORD, level = 220, unproperly = true, @@ -791,7 +791,7 @@ local weapons = { }, { -- cobra axe - itemid = 30396, + itemId = 30396, type = WEAPON_AXE, level = 220, unproperly = true, @@ -802,7 +802,7 @@ local weapons = { }, { -- cobra club - itemid = 30395, + itemId = 30395, type = WEAPON_CLUB, level = 220, unproperly = true, @@ -813,7 +813,7 @@ local weapons = { }, { -- cobra crossbow - itemid = 30393, + itemId = 30393, type = WEAPON_DISTANCE, level = 220, unproperly = true, @@ -824,12 +824,12 @@ local weapons = { }, { -- ice hatchet - itemid = 30283, + itemId = 30283, type = WEAPON_AXE, }, { -- energized limb - itemid = 29425, + itemId = 29425, type = WEAPON_WAND, wandType = "fire", level = 180, @@ -844,7 +844,7 @@ local weapons = { }, { -- winterblade - itemid = 29422, + itemId = 29422, type = WEAPON_SWORD, level = 200, unproperly = true, @@ -855,7 +855,7 @@ local weapons = { }, { -- summerblade - itemid = 29421, + itemId = 29421, type = WEAPON_SWORD, level = 200, unproperly = true, @@ -866,7 +866,7 @@ local weapons = { }, { -- resizer - itemid = 29419, + itemId = 29419, type = WEAPON_CLUB, level = 230, unproperly = true, @@ -877,7 +877,7 @@ local weapons = { }, { -- living vine bow - itemid = 29417, + itemId = 29417, type = WEAPON_DISTANCE, level = 220, unproperly = true, @@ -888,65 +888,65 @@ local weapons = { }, { -- golden axe - itemid = 29286, + itemId = 29286, type = WEAPON_AXE, }, { -- wand of destruction test - itemid = 28479, + itemId = 28479, type = WEAPON_WAND, }, { -- umbral master bow test - itemid = 28478, + itemId = 28478, type = WEAPON_DISTANCE, }, { -- sorcerer test weapon - itemid = 28466, + itemId = 28466, type = WEAPON_WAND, }, { -- bow of destruction test - itemid = 28465, + itemId = 28465, type = WEAPON_DISTANCE, }, { -- test weapon for knights - itemid = 28464, + itemId = 28464, type = WEAPON_SWORD, }, { -- sulphurous demonbone - itemid = 28832, + itemId = 28832, type = WEAPON_CLUB, level = 80, unproperly = true, }, { -- unliving demonbone - itemid = 28831, + itemId = 28831, type = WEAPON_CLUB, level = 80, unproperly = true, }, { -- energized demonbone - itemid = 28830, + itemId = 28830, type = WEAPON_CLUB, level = 80, unproperly = true, }, { -- rotten demonbone - itemid = 28829, + itemId = 28829, type = WEAPON_CLUB, level = 80, unproperly = true, }, { -- deepling fork - itemid = 28826, + itemId = 28826, type = WEAPON_WAND, wandType = "ice", level = 230, @@ -961,7 +961,7 @@ local weapons = { }, { -- deepling ceremonial dagger - itemid = 28825, + itemId = 28825, type = WEAPON_WAND, wandType = "ice", level = 180, @@ -976,7 +976,7 @@ local weapons = { }, { -- falcon mace - itemid = 28725, + itemId = 28725, type = WEAPON_CLUB, level = 300, unproperly = true, @@ -987,7 +987,7 @@ local weapons = { }, { -- falcon battleaxe - itemid = 28724, + itemId = 28724, type = WEAPON_AXE, level = 300, unproperly = true, @@ -998,7 +998,7 @@ local weapons = { }, { -- falcon longsword - itemid = 28723, + itemId = 28723, type = WEAPON_SWORD, level = 300, unproperly = true, @@ -1009,7 +1009,7 @@ local weapons = { }, { -- falcon bow - itemid = 28718, + itemId = 28718, type = WEAPON_DISTANCE, level = 300, unproperly = true, @@ -1020,7 +1020,7 @@ local weapons = { }, { -- falcon wand - itemid = 28717, + itemId = 28717, type = WEAPON_WAND, wandType = "energy", level = 300, @@ -1033,7 +1033,7 @@ local weapons = { }, { -- falcon rod - itemid = 28716, + itemId = 28716, type = WEAPON_WAND, wandType = "earth", level = 300, @@ -1046,7 +1046,7 @@ local weapons = { }, { -- gnome sword - itemid = 27651, + itemId = 27651, type = WEAPON_SWORD, level = 250, unproperly = true, @@ -1057,17 +1057,17 @@ local weapons = { }, { -- mallet handle - itemid = 27525, + itemId = 27525, type = WEAPON_CLUB, }, { -- strange mallet - itemid = 27523, + itemId = 27523, type = WEAPON_CLUB, }, { -- rod of destruction - itemid = 27458, + itemId = 27458, type = WEAPON_WAND, wandType = "ice", level = 200, @@ -1080,7 +1080,7 @@ local weapons = { }, { -- wand of destruction - itemid = 27457, + itemId = 27457, type = WEAPON_WAND, wandType = "energy", level = 200, @@ -1093,7 +1093,7 @@ local weapons = { }, { -- crossbow of destruction - itemid = 27456, + itemId = 27456, type = WEAPON_DISTANCE, level = 200, unproperly = true, @@ -1104,7 +1104,7 @@ local weapons = { }, { -- bow of destruction - itemid = 27455, + itemId = 27455, type = WEAPON_DISTANCE, level = 200, unproperly = true, @@ -1115,7 +1115,7 @@ local weapons = { }, { -- hammer of destruction - itemid = 27454, + itemId = 27454, type = WEAPON_CLUB, level = 200, unproperly = true, @@ -1126,7 +1126,7 @@ local weapons = { }, { -- mace of destruction - itemid = 27453, + itemId = 27453, type = WEAPON_CLUB, level = 200, unproperly = true, @@ -1137,7 +1137,7 @@ local weapons = { }, { -- chopper of destruction - itemid = 27452, + itemId = 27452, type = WEAPON_AXE, level = 200, unproperly = true, @@ -1148,7 +1148,7 @@ local weapons = { }, { -- axe of destruction - itemid = 27451, + itemId = 27451, type = WEAPON_AXE, level = 200, unproperly = true, @@ -1159,7 +1159,7 @@ local weapons = { }, { -- slayer of destruction - itemid = 27450, + itemId = 27450, type = WEAPON_SWORD, level = 200, unproperly = true, @@ -1170,7 +1170,7 @@ local weapons = { }, { -- blade of destruction - itemid = 27449, + itemId = 27449, type = WEAPON_SWORD, level = 200, unproperly = true, @@ -1181,577 +1181,577 @@ local weapons = { }, { -- ornate carving hammer - itemid = 26061, + itemId = 26061, type = WEAPON_CLUB, }, { -- valuable carving hammer - itemid = 26060, + itemId = 26060, type = WEAPON_CLUB, }, { -- plain carving hammer - itemid = 26059, + itemId = 26059, type = WEAPON_CLUB, }, { -- ornate carving mace - itemid = 26058, + itemId = 26058, type = WEAPON_CLUB, }, { -- valuable carving mace - itemid = 26057, + itemId = 26057, type = WEAPON_CLUB, }, { -- plain carving mace - itemid = 26056, + itemId = 26056, type = WEAPON_CLUB, }, { -- ornate carving chopper - itemid = 26055, + itemId = 26055, type = WEAPON_AXE, }, { -- valuable carving chopper - itemid = 26054, + itemId = 26054, type = WEAPON_AXE, }, { -- plain carving chopper - itemid = 26053, + itemId = 26053, type = WEAPON_AXE, }, { -- ornate carving axe - itemid = 26052, + itemId = 26052, type = WEAPON_AXE, }, { -- valuable carving axe - itemid = 26051, + itemId = 26051, type = WEAPON_AXE, }, { -- plain carving axe - itemid = 26050, + itemId = 26050, type = WEAPON_AXE, }, { -- ornate carving slayer - itemid = 26049, + itemId = 26049, type = WEAPON_SWORD, }, { -- valuable carving slayer - itemid = 26048, + itemId = 26048, type = WEAPON_SWORD, }, { -- plain carving slayer - itemid = 26047, + itemId = 26047, type = WEAPON_SWORD, }, { -- ornate carving blade - itemid = 26046, + itemId = 26046, type = WEAPON_SWORD, }, { -- valuable carving blade - itemid = 26045, + itemId = 26045, type = WEAPON_SWORD, }, { -- plain carving blade - itemid = 26044, + itemId = 26044, type = WEAPON_SWORD, }, { -- ornate remedy hammer - itemid = 26031, + itemId = 26031, type = WEAPON_CLUB, }, { -- valuable remedy hammer - itemid = 26030, + itemId = 26030, type = WEAPON_CLUB, }, { -- plain remedy hammer - itemid = 26029, + itemId = 26029, type = WEAPON_CLUB, }, { -- ornate remedy mace - itemid = 26028, + itemId = 26028, type = WEAPON_CLUB, }, { -- valuable remedy mace - itemid = 26027, + itemId = 26027, type = WEAPON_CLUB, }, { -- plain remedy mace - itemid = 26026, + itemId = 26026, type = WEAPON_CLUB, }, { -- ornate remedy chopper - itemid = 26025, + itemId = 26025, type = WEAPON_AXE, }, { -- valuable remedy chopper - itemid = 26024, + itemId = 26024, type = WEAPON_AXE, }, { -- plain remedy chopper - itemid = 26023, + itemId = 26023, type = WEAPON_AXE, }, { -- ornate remedy axe - itemid = 26022, + itemId = 26022, type = WEAPON_AXE, }, { -- valuable remedy axe - itemid = 26021, + itemId = 26021, type = WEAPON_AXE, }, { -- plain remedy axe - itemid = 26020, + itemId = 26020, type = WEAPON_AXE, }, { -- ornate remedy slayer - itemid = 26019, + itemId = 26019, type = WEAPON_SWORD, }, { -- valuable remedy slayer - itemid = 26018, + itemId = 26018, type = WEAPON_SWORD, }, { -- plain remedy slayer - itemid = 26017, + itemId = 26017, type = WEAPON_SWORD, }, { -- ornate remedy blade - itemid = 26016, + itemId = 26016, type = WEAPON_SWORD, }, { -- valuable remedy blade - itemid = 26015, + itemId = 26015, type = WEAPON_SWORD, }, { -- plain remedy blade - itemid = 26014, + itemId = 26014, type = WEAPON_SWORD, }, { -- ornate mayhem hammer - itemid = 26000, + itemId = 26000, type = WEAPON_CLUB, }, { -- valuable mayhem hammer - itemid = 25999, + itemId = 25999, type = WEAPON_CLUB, }, { -- plain mayhem hammer - itemid = 25998, + itemId = 25998, type = WEAPON_CLUB, }, { -- ornate mayhem mace - itemid = 25997, + itemId = 25997, type = WEAPON_CLUB, }, { -- valuable mayhem mace - itemid = 25996, + itemId = 25996, type = WEAPON_CLUB, }, { -- plain mayhem mace - itemid = 25995, + itemId = 25995, type = WEAPON_CLUB, }, { -- ornate mayhem chopper - itemid = 25994, + itemId = 25994, type = WEAPON_AXE, }, { -- valuable mayhem chopper - itemid = 25993, + itemId = 25993, type = WEAPON_AXE, }, { -- plain mayhem chopper - itemid = 25992, + itemId = 25992, type = WEAPON_AXE, }, { -- ornate mayhem axe - itemid = 25991, + itemId = 25991, type = WEAPON_AXE, }, { -- valuable mayhem axe - itemid = 25990, + itemId = 25990, type = WEAPON_AXE, }, { -- plain mayhem axe - itemid = 25989, + itemId = 25989, type = WEAPON_AXE, }, { -- ornate mayhem slayer - itemid = 25988, + itemId = 25988, type = WEAPON_SWORD, }, { -- valuable mayhem slayer - itemid = 25987, + itemId = 25987, type = WEAPON_SWORD, }, { -- plain mayhem slayer - itemid = 25986, + itemId = 25986, type = WEAPON_SWORD, }, { -- ornate mayhem blade - itemid = 25985, + itemId = 25985, type = WEAPON_SWORD, }, { -- valuable mayhem blade - itemid = 25984, + itemId = 25984, type = WEAPON_SWORD, }, { -- plain mayhem blade - itemid = 25983, + itemId = 25983, type = WEAPON_SWORD, }, { -- energy war hammer replica - itemid = 25974, + itemId = 25974, type = WEAPON_CLUB, }, { -- energy orcish maul replica - itemid = 25973, + itemId = 25973, type = WEAPON_CLUB, }, { -- energy basher replica - itemid = 25972, + itemId = 25972, type = WEAPON_CLUB, }, { -- energy crystal mace replica - itemid = 25971, + itemId = 25971, type = WEAPON_CLUB, }, { -- energy clerical mace replica - itemid = 25970, + itemId = 25970, type = WEAPON_CLUB, }, { -- energy war axe replica - itemid = 25969, + itemId = 25969, type = WEAPON_AXE, }, { -- energy headchopper replica - itemid = 25968, + itemId = 25968, type = WEAPON_AXE, }, { -- energy heroic axe replica - itemid = 25967, + itemId = 25967, type = WEAPON_AXE, }, { -- energy knight axe replica - itemid = 25966, + itemId = 25966, type = WEAPON_AXE, }, { -- energy barbarian axe replica - itemid = 25965, + itemId = 25965, type = WEAPON_AXE, }, { -- energy dragon slayer replica - itemid = 25964, + itemId = 25964, type = WEAPON_SWORD, }, { -- energy blacksteel replica - itemid = 25963, + itemId = 25963, type = WEAPON_SWORD, }, { -- energy mystic blade replica - itemid = 25962, + itemId = 25962, type = WEAPON_SWORD, }, { -- energy relic sword replica - itemid = 25961, + itemId = 25961, type = WEAPON_SWORD, }, { -- energy spike sword replica - itemid = 25960, + itemId = 25960, type = WEAPON_SWORD, }, { -- earth war hammer replica - itemid = 25959, + itemId = 25959, type = WEAPON_CLUB, }, { -- earth orcish maul replica - itemid = 25958, + itemId = 25958, type = WEAPON_CLUB, }, { -- earth basher replica - itemid = 25957, + itemId = 25957, type = WEAPON_CLUB, }, { -- earth crystal mace replica - itemid = 25956, + itemId = 25956, type = WEAPON_CLUB, }, { -- earth clerical mace replica - itemid = 25955, + itemId = 25955, type = WEAPON_CLUB, }, { -- earth war axe replica - itemid = 25954, + itemId = 25954, type = WEAPON_AXE, }, { -- earth headchopper replica - itemid = 25953, + itemId = 25953, type = WEAPON_AXE, }, { -- earth heroic axe replica - itemid = 25952, + itemId = 25952, type = WEAPON_AXE, }, { -- earth knight axe replica - itemid = 25951, + itemId = 25951, type = WEAPON_AXE, }, { -- earth barbarian axe replica - itemid = 25950, + itemId = 25950, type = WEAPON_AXE, }, { -- earth dragon slayer replica - itemid = 25949, + itemId = 25949, type = WEAPON_SWORD, }, { -- earth blacksteel replica - itemid = 25948, + itemId = 25948, type = WEAPON_SWORD, }, { -- earth mystic blade replica - itemid = 25947, + itemId = 25947, type = WEAPON_SWORD, }, { -- earth relic sword replica - itemid = 25946, + itemId = 25946, type = WEAPON_SWORD, }, { -- earth spike sword replica - itemid = 25945, + itemId = 25945, type = WEAPON_SWORD, }, { -- icy war hammer replica - itemid = 25944, + itemId = 25944, type = WEAPON_CLUB, }, { -- icy orcish maul replica - itemid = 25943, + itemId = 25943, type = WEAPON_CLUB, }, { -- icy basher replica - itemid = 25942, + itemId = 25942, type = WEAPON_CLUB, }, { -- icy crystal mace replica - itemid = 25941, + itemId = 25941, type = WEAPON_CLUB, }, { -- icy clerical mace replica - itemid = 25940, + itemId = 25940, type = WEAPON_CLUB, }, { -- icy war axe replica - itemid = 25939, + itemId = 25939, type = WEAPON_AXE, }, { -- icy headchopper replica - itemid = 25938, + itemId = 25938, type = WEAPON_AXE, }, { -- icy heroic axe replica - itemid = 25937, + itemId = 25937, type = WEAPON_AXE, }, { -- icy knight axe replica - itemid = 25936, + itemId = 25936, type = WEAPON_AXE, }, { -- icy barbarian axe replica - itemid = 25935, + itemId = 25935, type = WEAPON_AXE, }, { -- icy dragon slayer replica - itemid = 25934, + itemId = 25934, type = WEAPON_SWORD, }, { -- icy blacksteel replica - itemid = 25933, + itemId = 25933, type = WEAPON_SWORD, }, { -- icy mystic blade replica - itemid = 25932, + itemId = 25932, type = WEAPON_SWORD, }, { -- icy relic sword replica - itemid = 25931, + itemId = 25931, type = WEAPON_SWORD, }, { -- icy spike sword replica - itemid = 25930, + itemId = 25930, type = WEAPON_SWORD, }, { -- fiery war hammer replica - itemid = 25929, + itemId = 25929, type = WEAPON_CLUB, }, { -- fiery orcish maul replica - itemid = 25928, + itemId = 25928, type = WEAPON_CLUB, }, { -- fiery basher replica - itemid = 25927, + itemId = 25927, type = WEAPON_CLUB, }, { -- fiery crystal mace replica - itemid = 25926, + itemId = 25926, type = WEAPON_CLUB, }, { -- fiery clerical mace replica - itemid = 25925, + itemId = 25925, type = WEAPON_CLUB, }, { -- fiery war axe replica - itemid = 25924, + itemId = 25924, type = WEAPON_AXE, }, { -- fiery headchopper replica - itemid = 25923, + itemId = 25923, type = WEAPON_AXE, }, { -- fiery heroic axe replica - itemid = 25922, + itemId = 25922, type = WEAPON_AXE, }, { -- fiery knight axe replica - itemid = 25921, + itemId = 25921, type = WEAPON_AXE, }, { -- fiery barbarian axe replica - itemid = 25920, + itemId = 25920, type = WEAPON_AXE, }, { -- fiery dragon slayer replica - itemid = 25919, + itemId = 25919, type = WEAPON_SWORD, }, { -- fiery blacksteel replica - itemid = 25918, + itemId = 25918, type = WEAPON_SWORD, }, { -- fiery mystic blade replica - itemid = 25917, + itemId = 25917, type = WEAPON_SWORD, }, { -- fiery relic sword replica - itemid = 25916, + itemId = 25916, type = WEAPON_SWORD, }, { -- fiery spike sword replica - itemid = 25915, + itemId = 25915, type = WEAPON_SWORD, }, { -- wand of darkness - itemid = 25760, + itemId = 25760, type = WEAPON_WAND, wandType = "death", level = 41, @@ -1772,7 +1772,7 @@ local weapons = { }, { -- spectral bolt - itemid = 25758, + itemId = 25758, type = WEAPON_AMMO, level = 150, unproperly = true, @@ -1788,7 +1788,7 @@ local weapons = { }, { -- dream blossom staff - itemid = 25700, + itemId = 25700, type = WEAPON_WAND, wandType = "energy", level = 80, @@ -1803,7 +1803,7 @@ local weapons = { }, { -- rod of carving - itemid = 23339, + itemId = 23339, type = WEAPON_WAND, wandType = "ice", level = 100, @@ -1816,7 +1816,7 @@ local weapons = { }, { -- wand of carving - itemid = 23335, + itemId = 23335, type = WEAPON_WAND, wandType = "energy", level = 100, @@ -1829,7 +1829,7 @@ local weapons = { }, { -- crossbow of carving - itemid = 23331, + itemId = 23331, type = WEAPON_DISTANCE, level = 100, unproperly = true, @@ -1840,7 +1840,7 @@ local weapons = { }, { -- bow of carving - itemid = 23327, + itemId = 23327, type = WEAPON_DISTANCE, level = 100, unproperly = true, @@ -1851,7 +1851,7 @@ local weapons = { }, { -- hammer of carving - itemid = 23323, + itemId = 23323, type = WEAPON_CLUB, level = 100, unproperly = true, @@ -1862,7 +1862,7 @@ local weapons = { }, { -- mace of carving - itemid = 23319, + itemId = 23319, type = WEAPON_CLUB, level = 100, unproperly = true, @@ -1873,7 +1873,7 @@ local weapons = { }, { -- chopper of carving - itemid = 23315, + itemId = 23315, type = WEAPON_AXE, level = 100, unproperly = true, @@ -1884,7 +1884,7 @@ local weapons = { }, { -- axe of carving - itemid = 23311, + itemId = 23311, type = WEAPON_AXE, level = 100, unproperly = true, @@ -1895,7 +1895,7 @@ local weapons = { }, { -- slayer of carving - itemid = 23307, + itemId = 23307, type = WEAPON_SWORD, level = 100, unproperly = true, @@ -1906,7 +1906,7 @@ local weapons = { }, { -- blade of carving - itemid = 23303, + itemId = 23303, type = WEAPON_SWORD, level = 100, unproperly = true, @@ -1917,7 +1917,7 @@ local weapons = { }, { -- rod of remedy - itemid = 23299, + itemId = 23299, type = WEAPON_WAND, wandType = "ice", level = 100, @@ -1930,7 +1930,7 @@ local weapons = { }, { -- wand of remedy - itemid = 23295, + itemId = 23295, type = WEAPON_WAND, wandType = "energy", level = 100, @@ -1943,7 +1943,7 @@ local weapons = { }, { -- crossbow of remedy - itemid = 23291, + itemId = 23291, type = WEAPON_DISTANCE, level = 100, unproperly = true, @@ -1954,7 +1954,7 @@ local weapons = { }, { -- bow of remedy - itemid = 23287, + itemId = 23287, type = WEAPON_DISTANCE, level = 100, unproperly = true, @@ -1965,7 +1965,7 @@ local weapons = { }, { -- hammer of remedy - itemid = 23283, + itemId = 23283, type = WEAPON_CLUB, level = 100, unproperly = true, @@ -1976,7 +1976,7 @@ local weapons = { }, { -- mace of remedy - itemid = 23279, + itemId = 23279, type = WEAPON_CLUB, level = 100, unproperly = true, @@ -1987,7 +1987,7 @@ local weapons = { }, { -- chopper of remedy - itemid = 23275, + itemId = 23275, type = WEAPON_AXE, level = 100, unproperly = true, @@ -1998,7 +1998,7 @@ local weapons = { }, { -- axe of remedy - itemid = 23271, + itemId = 23271, type = WEAPON_AXE, level = 100, unproperly = true, @@ -2009,7 +2009,7 @@ local weapons = { }, { -- slayer of remedy - itemid = 23267, + itemId = 23267, type = WEAPON_SWORD, level = 100, unproperly = true, @@ -2020,7 +2020,7 @@ local weapons = { }, { -- blade of remedy - itemid = 23263, + itemId = 23263, type = WEAPON_SWORD, level = 100, unproperly = true, @@ -2031,7 +2031,7 @@ local weapons = { }, { -- rod of mayhem - itemid = 23232, + itemId = 23232, type = WEAPON_WAND, wandType = "ice", level = 100, @@ -2044,7 +2044,7 @@ local weapons = { }, { -- wand of mayhem - itemid = 23231, + itemId = 23231, type = WEAPON_WAND, wandType = "energy", level = 100, @@ -2057,7 +2057,7 @@ local weapons = { }, { -- crossbow of mayhem - itemid = 23230, + itemId = 23230, type = WEAPON_DISTANCE, level = 100, unproperly = true, @@ -2068,7 +2068,7 @@ local weapons = { }, { -- bow of mayhem - itemid = 23229, + itemId = 23229, type = WEAPON_DISTANCE, level = 100, unproperly = true, @@ -2079,7 +2079,7 @@ local weapons = { }, { -- hammer of mayhem - itemid = 23228, + itemId = 23228, type = WEAPON_CLUB, level = 100, unproperly = true, @@ -2090,7 +2090,7 @@ local weapons = { }, { -- mace of mayhem - itemid = 23227, + itemId = 23227, type = WEAPON_CLUB, level = 100, unproperly = true, @@ -2101,7 +2101,7 @@ local weapons = { }, { -- chopper of mayhem - itemid = 23226, + itemId = 23226, type = WEAPON_AXE, level = 100, unproperly = true, @@ -2112,7 +2112,7 @@ local weapons = { }, { -- axe of mayhem - itemid = 23225, + itemId = 23225, type = WEAPON_AXE, level = 100, unproperly = true, @@ -2123,7 +2123,7 @@ local weapons = { }, { -- slayer of mayhem - itemid = 23224, + itemId = 23224, type = WEAPON_SWORD, level = 100, unproperly = true, @@ -2134,7 +2134,7 @@ local weapons = { }, { -- blade of mayhem - itemid = 23223, + itemId = 23223, type = WEAPON_SWORD, level = 100, unproperly = true, @@ -2145,7 +2145,7 @@ local weapons = { }, { -- rift crossbow - itemid = 22867, + itemId = 22867, type = WEAPON_DISTANCE, level = 120, unproperly = true, @@ -2156,7 +2156,7 @@ local weapons = { }, { -- rift bow - itemid = 22866, + itemId = 22866, type = WEAPON_DISTANCE, level = 120, unproperly = true, @@ -2167,7 +2167,7 @@ local weapons = { }, { -- ferumbras' staff (enchanted) - itemid = 22766, + itemId = 22766, type = WEAPON_WAND, wandType = "energy", level = 100, @@ -2180,7 +2180,7 @@ local weapons = { }, { -- ferumbras' staff (failed) - itemid = 22765, + itemId = 22765, type = WEAPON_WAND, wandType = "energy", level = 65, @@ -2193,42 +2193,42 @@ local weapons = { }, { -- Ferumbras' staff - itemid = 22764, + itemId = 22764, type = WEAPON_CLUB, level = 100, unproperly = true, }, { -- maimer - itemid = 22762, + itemId = 22762, type = WEAPON_CLUB, level = 150, unproperly = true, }, { -- Impaler of the igniter - itemid = 22760, + itemId = 22760, type = WEAPON_SWORD, level = 150, unproperly = true, }, { -- plague bite - itemid = 22759, + itemId = 22759, type = WEAPON_AXE, level = 150, unproperly = true, }, { -- rift lance - itemid = 22727, + itemId = 22727, type = WEAPON_AXE, level = 70, unproperly = true, }, { -- ogre sceptra - itemid = 22183, + itemId = 22183, type = WEAPON_WAND, wandType = "earth", level = 37, @@ -2241,27 +2241,27 @@ local weapons = { }, { -- ogre choppa - itemid = 22172, + itemId = 22172, type = WEAPON_AXE, level = 25, unproperly = true, }, { -- ogre klubba - itemid = 22171, + itemId = 22171, type = WEAPON_AXE, level = 50, unproperly = true, }, { -- simple arrow - itemid = 21470, + itemId = 21470, type = WEAPON_AMMO, action = "removecount", }, { -- the chiller - itemid = 21350, + itemId = 21350, type = WEAPON_WAND, wandType = "ice", level = 1, @@ -2274,7 +2274,7 @@ local weapons = { }, { -- the scorcher - itemid = 21348, + itemId = 21348, type = WEAPON_WAND, wandType = "fire", level = 1, @@ -2287,14 +2287,14 @@ local weapons = { }, { -- one hit wonder - itemid = 21219, + itemId = 21219, type = WEAPON_CLUB, level = 70, unproperly = true, }, { -- glooth axe - itemid = 21180, + itemId = 21180, type = WEAPON_AXE, level = 75, unproperly = true, @@ -2306,7 +2306,7 @@ local weapons = { }, { -- glooth blade - itemid = 21179, + itemId = 21179, type = WEAPON_SWORD, level = 75, unproperly = true, @@ -2318,7 +2318,7 @@ local weapons = { }, { -- glooth club - itemid = 21178, + itemId = 21178, type = WEAPON_CLUB, level = 75, unproperly = true, @@ -2330,42 +2330,42 @@ local weapons = { }, { -- cowtana - itemid = 21177, + itemId = 21177, type = WEAPON_SWORD, level = 25, unproperly = true, }, { -- execowtioner axe - itemid = 21176, + itemId = 21176, type = WEAPON_AXE, level = 55, unproperly = true, }, { -- mino lance - itemid = 21174, + itemId = 21174, type = WEAPON_AXE, level = 45, unproperly = true, }, { -- moohtant cudgel - itemid = 21173, + itemId = 21173, type = WEAPON_CLUB, level = 60, unproperly = true, }, { -- glooth whip - itemid = 21172, + itemId = 21172, type = WEAPON_CLUB, level = 25, unproperly = true, }, { -- metal bat - itemid = 21171, + itemId = 21171, type = WEAPON_CLUB, level = 55, unproperly = true, @@ -2380,7 +2380,7 @@ local weapons = { }, { -- umbral master crossbow - itemid = 20087, + itemId = 20087, type = WEAPON_DISTANCE, level = 250, unproperly = true, @@ -2391,7 +2391,7 @@ local weapons = { }, { -- umbral crossbow - itemid = 20086, + itemId = 20086, type = WEAPON_DISTANCE, level = 120, unproperly = true, @@ -2402,7 +2402,7 @@ local weapons = { }, { -- crude umbral crossbow - itemid = 20085, + itemId = 20085, type = WEAPON_DISTANCE, level = 75, unproperly = true, @@ -2413,7 +2413,7 @@ local weapons = { }, { -- umbral master bow - itemid = 20084, + itemId = 20084, type = WEAPON_DISTANCE, level = 250, unproperly = true, @@ -2424,7 +2424,7 @@ local weapons = { }, { -- umbral bow - itemid = 20083, + itemId = 20083, type = WEAPON_DISTANCE, level = 120, unproperly = true, @@ -2435,7 +2435,7 @@ local weapons = { }, { -- crude umbral bow - itemid = 20082, + itemId = 20082, type = WEAPON_DISTANCE, level = 75, unproperly = true, @@ -2446,7 +2446,7 @@ local weapons = { }, { -- umbral master hammer - itemid = 20081, + itemId = 20081, type = WEAPON_CLUB, level = 250, unproperly = true, @@ -2457,7 +2457,7 @@ local weapons = { }, { -- umbral hammer - itemid = 20080, + itemId = 20080, type = WEAPON_CLUB, level = 120, unproperly = true, @@ -2468,7 +2468,7 @@ local weapons = { }, { -- crude umbral hammer - itemid = 20079, + itemId = 20079, type = WEAPON_CLUB, level = 75, unproperly = true, @@ -2479,7 +2479,7 @@ local weapons = { }, { -- umbral master mace - itemid = 20078, + itemId = 20078, type = WEAPON_CLUB, level = 250, unproperly = true, @@ -2490,7 +2490,7 @@ local weapons = { }, { -- umbral mace - itemid = 20077, + itemId = 20077, type = WEAPON_CLUB, level = 120, unproperly = true, @@ -2501,7 +2501,7 @@ local weapons = { }, { -- crude umbral mace - itemid = 20076, + itemId = 20076, type = WEAPON_CLUB, level = 75, unproperly = true, @@ -2512,7 +2512,7 @@ local weapons = { }, { -- umbral master chopper - itemid = 20075, + itemId = 20075, type = WEAPON_AXE, level = 250, unproperly = true, @@ -2523,7 +2523,7 @@ local weapons = { }, { -- umbral chopper - itemid = 20074, + itemId = 20074, type = WEAPON_AXE, level = 120, unproperly = true, @@ -2534,7 +2534,7 @@ local weapons = { }, { -- crude umbral chopper - itemid = 20073, + itemId = 20073, type = WEAPON_AXE, level = 75, unproperly = true, @@ -2545,7 +2545,7 @@ local weapons = { }, { -- umbral master axe - itemid = 20072, + itemId = 20072, type = WEAPON_AXE, level = 250, unproperly = true, @@ -2556,7 +2556,7 @@ local weapons = { }, { -- umbral axe - itemid = 20071, + itemId = 20071, type = WEAPON_AXE, level = 120, unproperly = true, @@ -2567,7 +2567,7 @@ local weapons = { }, { -- crude umbral axe - itemid = 20070, + itemId = 20070, type = WEAPON_AXE, level = 75, unproperly = true, @@ -2578,7 +2578,7 @@ local weapons = { }, { -- umbral master slayer - itemid = 20069, + itemId = 20069, type = WEAPON_SWORD, level = 250, unproperly = true, @@ -2589,7 +2589,7 @@ local weapons = { }, { -- umbral slayer - itemid = 20068, + itemId = 20068, type = WEAPON_SWORD, level = 120, unproperly = true, @@ -2600,7 +2600,7 @@ local weapons = { }, { -- crude umbral slayer - itemid = 20067, + itemId = 20067, type = WEAPON_SWORD, level = 75, unproperly = true, @@ -2611,7 +2611,7 @@ local weapons = { }, { -- umbral masterblade - itemid = 20066, + itemId = 20066, type = WEAPON_SWORD, level = 250, unproperly = true, @@ -2622,7 +2622,7 @@ local weapons = { }, { -- umbral blade - itemid = 20065, + itemId = 20065, type = WEAPON_SWORD, level = 120, unproperly = true, @@ -2633,7 +2633,7 @@ local weapons = { }, { -- crude umbral blade - itemid = 20064, + itemId = 20064, type = WEAPON_SWORD, level = 75, unproperly = true, @@ -2644,13 +2644,13 @@ local weapons = { }, { -- icicle bow - itemid = 19362, + itemId = 19362, type = WEAPON_DISTANCE, unproperly = true, }, { -- triple bolt crossbow - itemid = 19356, + itemId = 19356, type = WEAPON_DISTANCE, level = 70, unproperly = true, @@ -2661,14 +2661,14 @@ local weapons = { }, { -- spiky club - itemid = 17859, + itemId = 17859, type = WEAPON_CLUB, level = 20, unproperly = true, }, { -- pair of iron fists - itemid = 17828, + itemId = 17828, type = WEAPON_CLUB, level = 50, unproperly = true, @@ -2679,26 +2679,26 @@ local weapons = { }, { -- swampling club - itemid = 17824, + itemId = 17824, type = WEAPON_CLUB, }, { -- life preserver - itemid = 17813, + itemId = 17813, type = WEAPON_CLUB, level = 15, unproperly = true, }, { -- ratana - itemid = 17812, + itemId = 17812, type = WEAPON_SWORD, level = 15, unproperly = true, }, { -- sorc and druid staff - itemid = 17111, + itemId = 17111, type = WEAPON_WAND, wandType = "energy", level = 1, @@ -2719,7 +2719,7 @@ local weapons = { }, { -- mean knight sword - itemid = 17109, + itemId = 17109, type = WEAPON_SWORD, unproperly = true, vocation = { @@ -2728,14 +2728,14 @@ local weapons = { }, { -- shiny blade - itemid = 16175, + itemId = 16175, type = WEAPON_SWORD, level = 120, unproperly = true, }, { -- mycological bow - itemid = 16164, + itemId = 16164, type = WEAPON_DISTANCE, level = 105, unproperly = true, @@ -2746,7 +2746,7 @@ local weapons = { }, { -- crystal crossbow - itemid = 16163, + itemId = 16163, type = WEAPON_DISTANCE, level = 90, unproperly = true, @@ -2757,21 +2757,21 @@ local weapons = { }, { -- mycological mace - itemid = 16162, + itemId = 16162, type = WEAPON_CLUB, level = 120, unproperly = true, }, { -- crystalline axe - itemid = 16161, + itemId = 16161, type = WEAPON_AXE, level = 120, unproperly = true, }, { -- crystalline sword - itemid = 16160, + itemId = 16160, type = WEAPON_SWORD, level = 62, unproperly = true, @@ -2786,7 +2786,7 @@ local weapons = { }, { -- drill bolt - itemid = 16142, + itemId = 16142, type = WEAPON_AMMO, level = 70, unproperly = true, @@ -2794,7 +2794,7 @@ local weapons = { }, { -- prismatic bolt - itemid = 16141, + itemId = 16141, type = WEAPON_AMMO, level = 90, unproperly = true, @@ -2802,7 +2802,7 @@ local weapons = { }, { -- glacial rod - itemid = 16118, + itemId = 16118, type = WEAPON_WAND, wandType = "ice", level = 65, @@ -2815,7 +2815,7 @@ local weapons = { }, { -- muck rod - itemid = 16117, + itemId = 16117, type = WEAPON_WAND, wandType = "earth", level = 65, @@ -2828,7 +2828,7 @@ local weapons = { }, { -- wand of everblazing - itemid = 16115, + itemId = 16115, type = WEAPON_WAND, wandType = "fire", level = 65, @@ -2841,7 +2841,7 @@ local weapons = { }, { -- wand of defiance - itemid = 16096, + itemId = 16096, type = WEAPON_WAND, wandType = "energy", level = 65, @@ -2862,13 +2862,13 @@ local weapons = { }, { -- crystal bolt - itemid = 15792, + itemId = 15792, type = WEAPON_AMMO, action = "removecount", }, { -- thorn spitter - itemid = 14768, + itemId = 14768, type = WEAPON_DISTANCE, level = 150, unproperly = true, @@ -2879,7 +2879,7 @@ local weapons = { }, { -- vortex bolt - itemid = 14252, + itemId = 14252, type = WEAPON_AMMO, level = 40, unproperly = true, @@ -2895,14 +2895,14 @@ local weapons = { }, { -- deepling squelcher - itemid = 14250, + itemId = 14250, type = WEAPON_CLUB, level = 48, unproperly = true, }, { -- ornate crossbow - itemid = 14247, + itemId = 14247, type = WEAPON_DISTANCE, level = 50, unproperly = true, @@ -2913,7 +2913,7 @@ local weapons = { }, { -- hive bow - itemid = 14246, + itemId = 14246, type = WEAPON_DISTANCE, level = 85, unproperly = true, @@ -2924,49 +2924,49 @@ local weapons = { }, { -- hive scythe - itemid = 14089, + itemId = 14089, type = WEAPON_AXE, level = 70, unproperly = true, }, { -- guardian axe - itemid = 14043, + itemId = 14043, type = WEAPON_AXE, level = 50, unproperly = true, }, { -- warrior's axe - itemid = 14040, + itemId = 14040, type = WEAPON_AXE, level = 40, unproperly = true, }, { -- ornate mace - itemid = 14001, + itemId = 14001, type = WEAPON_CLUB, level = 90, unproperly = true, }, { -- deepling axe - itemid = 13991, + itemId = 13991, type = WEAPON_AXE, level = 80, unproperly = true, }, { -- deepling staff - itemid = 13987, + itemId = 13987, type = WEAPON_CLUB, level = 38, unproperly = true, }, { -- shimmer wand - itemid = 12741, + itemId = 12741, type = WEAPON_WAND, wandType = "energy", level = 40, @@ -2979,7 +2979,7 @@ local weapons = { }, { -- shimmer bow - itemid = 12733, + itemId = 12733, type = WEAPON_DISTANCE, level = 40, unproperly = true, @@ -2990,7 +2990,7 @@ local weapons = { }, { -- shimmer rod - itemid = 12732, + itemId = 12732, type = WEAPON_WAND, wandType = "ice", level = 40, @@ -3003,26 +3003,26 @@ local weapons = { }, { -- shimmer sword - itemid = 12731, + itemId = 12731, type = WEAPON_SWORD, level = 40, unproperly = true, }, { -- heavy trident - itemid = 12683, + itemId = 12683, type = WEAPON_AXE, level = 25, unproperly = true, }, { -- wooden sword - itemid = 12673, + itemId = 12673, type = WEAPON_SWORD, }, { -- wand of dimensions - itemid = 12603, + itemId = 12603, type = WEAPON_WAND, wandType = "death", level = 37, @@ -3035,21 +3035,21 @@ local weapons = { }, { -- blade of corruption - itemid = 11693, + itemId = 11693, type = WEAPON_SWORD, level = 82, unproperly = true, }, { -- snake god's sceptre - itemid = 11692, + itemId = 11692, type = WEAPON_CLUB, level = 82, unproperly = true, }, { -- twiceslicer - itemid = 11657, + itemId = 11657, type = WEAPON_SWORD, level = 58, unproperly = true, @@ -3060,14 +3060,14 @@ local weapons = { }, { -- Zaoan halberd - itemid = 10406, + itemId = 10406, type = WEAPON_AXE, level = 25, unproperly = true, }, { -- twin hooks - itemid = 10392, + itemId = 10392, type = WEAPON_SWORD, level = 20, unproperly = true, @@ -3078,7 +3078,7 @@ local weapons = { }, { -- drachaku - itemid = 10391, + itemId = 10391, type = WEAPON_CLUB, level = 55, unproperly = true, @@ -3089,14 +3089,14 @@ local weapons = { }, { -- Zaoan sword - itemid = 10390, + itemId = 10390, type = WEAPON_SWORD, level = 55, unproperly = true, }, { -- sai - itemid = 10389, + itemId = 10389, type = WEAPON_SWORD, level = 50, unproperly = true, @@ -3107,59 +3107,59 @@ local weapons = { }, { -- drakinata - itemid = 10388, + itemId = 10388, type = WEAPON_AXE, level = 60, unproperly = true, }, { -- incredible mumpiz slayer - itemid = 9396, + itemId = 9396, type = WEAPON_SWORD, }, { -- poet's fencing quill - itemid = 9387, + itemId = 9387, type = WEAPON_SWORD, }, { -- farmer's avenger - itemid = 9386, + itemId = 9386, type = WEAPON_AXE, }, { -- club of the fury - itemid = 9385, + itemId = 9385, type = WEAPON_CLUB, }, { -- scythe of the reaper - itemid = 9384, + itemId = 9384, type = WEAPON_AXE, }, { -- musician's bow - itemid = 9378, + itemId = 9378, type = WEAPON_DISTANCE, }, { -- stale bread of ancientness - itemid = 9376, + itemId = 9376, type = WEAPON_CLUB, }, { -- pointed rabbitslayer - itemid = 9375, + itemId = 9375, type = WEAPON_SWORD, }, { -- glutton's mace - itemid = 9373, + itemId = 9373, type = WEAPON_CLUB, }, { -- the calamity - itemid = 8104, + itemId = 8104, type = WEAPON_SWORD, level = 100, unproperly = true, @@ -3170,21 +3170,21 @@ local weapons = { }, { -- the epiphany - itemid = 8103, + itemId = 8103, type = WEAPON_SWORD, level = 120, unproperly = true, }, { -- emerald sword - itemid = 8102, + itemId = 8102, type = WEAPON_SWORD, level = 100, unproperly = true, }, { -- the stomper - itemid = 8101, + itemId = 8101, type = WEAPON_CLUB, level = 100, unproperly = true, @@ -3195,21 +3195,21 @@ local weapons = { }, { -- obsidian truncheon - itemid = 8100, + itemId = 8100, type = WEAPON_CLUB, level = 100, unproperly = true, }, { -- dark trinity mace - itemid = 8099, + itemId = 8099, type = WEAPON_CLUB, level = 120, unproperly = true, }, { -- demonwing axe - itemid = 8098, + itemId = 8098, type = WEAPON_AXE, level = 120, unproperly = true, @@ -3220,21 +3220,21 @@ local weapons = { }, { -- solar axe - itemid = 8097, + itemId = 8097, type = WEAPON_AXE, level = 130, unproperly = true, }, { -- hellforged axe - itemid = 8096, + itemId = 8096, type = WEAPON_AXE, level = 110, unproperly = true, }, { -- wand of voodoo - itemid = 8094, + itemId = 8094, type = WEAPON_WAND, wandType = "death", level = 42, @@ -3247,7 +3247,7 @@ local weapons = { }, { -- wand of draconia - itemid = 8093, + itemId = 8093, type = WEAPON_WAND, wandType = "fire", level = 22, @@ -3260,7 +3260,7 @@ local weapons = { }, { -- wand of starmstorm - itemid = 8092, + itemId = 8092, type = WEAPON_WAND, wandType = "energy", level = 37, @@ -3273,7 +3273,7 @@ local weapons = { }, { -- springsprout rod - itemid = 8084, + itemId = 8084, type = WEAPON_WAND, wandType = "earth", level = 37, @@ -3286,7 +3286,7 @@ local weapons = { }, { -- northwind rod - itemid = 8083, + itemId = 8083, type = WEAPON_WAND, wandType = "ice", level = 22, @@ -3299,7 +3299,7 @@ local weapons = { }, { -- underworld rod - itemid = 8082, + itemId = 8082, type = WEAPON_WAND, wandType = "death", level = 42, @@ -3312,7 +3312,7 @@ local weapons = { }, { -- elethriel's elemental bow - itemid = 8030, + itemId = 8030, type = WEAPON_DISTANCE, level = 70, unproperly = true, @@ -3323,7 +3323,7 @@ local weapons = { }, { -- silkweaver bow - itemid = 8029, + itemId = 8029, type = WEAPON_DISTANCE, level = 40, unproperly = true, @@ -3334,7 +3334,7 @@ local weapons = { }, { -- yol's bow - itemid = 8028, + itemId = 8028, type = WEAPON_DISTANCE, level = 60, unproperly = true, @@ -3345,7 +3345,7 @@ local weapons = { }, { -- composite hornbow - itemid = 8027, + itemId = 8027, type = WEAPON_DISTANCE, level = 50, unproperly = true, @@ -3356,7 +3356,7 @@ local weapons = { }, { -- warsinger bow - itemid = 8026, + itemId = 8026, type = WEAPON_DISTANCE, level = 80, unproperly = true, @@ -3367,7 +3367,7 @@ local weapons = { }, { -- ironworker - itemid = 8025, + itemId = 8025, type = WEAPON_DISTANCE, level = 80, unproperly = true, @@ -3378,7 +3378,7 @@ local weapons = { }, { -- devileye - itemid = 8024, + itemId = 8024, type = WEAPON_DISTANCE, level = 100, unproperly = true, @@ -3389,7 +3389,7 @@ local weapons = { }, { -- royal crossbow - itemid = 8023, + itemId = 8023, type = WEAPON_DISTANCE, level = 130, unproperly = true, @@ -3400,7 +3400,7 @@ local weapons = { }, { -- chain bolter - itemid = 8022, + itemId = 8022, type = WEAPON_DISTANCE, level = 60, unproperly = true, @@ -3411,7 +3411,7 @@ local weapons = { }, { -- modified crossbow - itemid = 8021, + itemId = 8021, type = WEAPON_DISTANCE, level = 45, unproperly = true, @@ -3422,22 +3422,22 @@ local weapons = { }, { -- jagged sword - itemid = 7774, + itemId = 7774, type = WEAPON_SWORD, }, { -- steel axe - itemid = 7773, + itemId = 7773, type = WEAPON_AXE, }, { -- crimson sword - itemid = 860, + itemId = 860, type = WEAPON_SWORD, }, { -- energy war hammer - itemid = 810, + itemId = 810, type = WEAPON_CLUB, level = 50, unproperly = true, @@ -3449,7 +3449,7 @@ local weapons = { }, { -- energy orcish maul - itemid = 809, + itemId = 809, type = WEAPON_CLUB, level = 35, unproperly = true, @@ -3457,7 +3457,7 @@ local weapons = { }, { -- energy cranial basher - itemid = 808, + itemId = 808, type = WEAPON_CLUB, level = 60, unproperly = true, @@ -3465,7 +3465,7 @@ local weapons = { }, { -- energy crystal mace - itemid = 807, + itemId = 807, type = WEAPON_CLUB, level = 35, unproperly = true, @@ -3473,7 +3473,7 @@ local weapons = { }, { -- energy clerical mace - itemid = 806, + itemId = 806, type = WEAPON_CLUB, level = 20, unproperly = true, @@ -3481,7 +3481,7 @@ local weapons = { }, { -- energy war axe - itemid = 805, + itemId = 805, type = WEAPON_AXE, level = 65, unproperly = true, @@ -3493,7 +3493,7 @@ local weapons = { }, { -- energy headchopper - itemid = 804, + itemId = 804, type = WEAPON_AXE, level = 35, unproperly = true, @@ -3505,7 +3505,7 @@ local weapons = { }, { -- energy heroic axe - itemid = 803, + itemId = 803, type = WEAPON_AXE, level = 60, unproperly = true, @@ -3513,7 +3513,7 @@ local weapons = { }, { -- energy knight axe - itemid = 802, + itemId = 802, type = WEAPON_AXE, level = 25, unproperly = true, @@ -3521,7 +3521,7 @@ local weapons = { }, { -- energy barbarian axe - itemid = 801, + itemId = 801, type = WEAPON_AXE, level = 20, unproperly = true, @@ -3529,7 +3529,7 @@ local weapons = { }, { -- energy dragon slayer - itemid = 798, + itemId = 798, type = WEAPON_SWORD, level = 45, unproperly = true, @@ -3541,7 +3541,7 @@ local weapons = { }, { -- energy blacksteel sword - itemid = 797, + itemId = 797, type = WEAPON_SWORD, level = 35, unproperly = true, @@ -3553,7 +3553,7 @@ local weapons = { }, { -- energy mystic blade - itemid = 796, + itemId = 796, type = WEAPON_SWORD, level = 60, unproperly = true, @@ -3561,7 +3561,7 @@ local weapons = { }, { -- energy relic sword - itemid = 795, + itemId = 795, type = WEAPON_SWORD, level = 50, unproperly = true, @@ -3569,13 +3569,13 @@ local weapons = { }, { -- energy spike sword - itemid = 794, + itemId = 794, type = WEAPON_SWORD, action = "removecharge", }, { -- earth war hammer - itemid = 793, + itemId = 793, type = WEAPON_CLUB, level = 50, unproperly = true, @@ -3587,7 +3587,7 @@ local weapons = { }, { -- earth orcish maul - itemid = 792, + itemId = 792, type = WEAPON_CLUB, level = 35, unproperly = true, @@ -3595,7 +3595,7 @@ local weapons = { }, { -- earth cranial basher - itemid = 791, + itemId = 791, type = WEAPON_CLUB, level = 60, unproperly = true, @@ -3603,7 +3603,7 @@ local weapons = { }, { -- earth crystal mace - itemid = 790, + itemId = 790, type = WEAPON_CLUB, level = 35, unproperly = true, @@ -3611,7 +3611,7 @@ local weapons = { }, { -- earth clerical mace - itemid = 789, + itemId = 789, type = WEAPON_CLUB, level = 20, unproperly = true, @@ -3619,7 +3619,7 @@ local weapons = { }, { -- earth war axe - itemid = 788, + itemId = 788, type = WEAPON_AXE, level = 65, unproperly = true, @@ -3631,7 +3631,7 @@ local weapons = { }, { -- earth headchopper - itemid = 787, + itemId = 787, type = WEAPON_AXE, level = 35, unproperly = true, @@ -3643,7 +3643,7 @@ local weapons = { }, { -- earth heroic axe - itemid = 786, + itemId = 786, type = WEAPON_AXE, level = 60, unproperly = true, @@ -3651,7 +3651,7 @@ local weapons = { }, { -- earth knight axe - itemid = 785, + itemId = 785, type = WEAPON_AXE, level = 25, unproperly = true, @@ -3659,7 +3659,7 @@ local weapons = { }, { -- earth barbarian axe - itemid = 784, + itemId = 784, type = WEAPON_AXE, level = 20, unproperly = true, @@ -3667,7 +3667,7 @@ local weapons = { }, { -- earth dragon slayer - itemid = 783, + itemId = 783, type = WEAPON_SWORD, level = 45, unproperly = true, @@ -3679,7 +3679,7 @@ local weapons = { }, { -- earth blacksteel sword - itemid = 782, + itemId = 782, type = WEAPON_SWORD, level = 35, unproperly = true, @@ -3691,7 +3691,7 @@ local weapons = { }, { -- earth mystic blade - itemid = 781, + itemId = 781, type = WEAPON_SWORD, level = 60, unproperly = true, @@ -3699,7 +3699,7 @@ local weapons = { }, { -- earth relic sword - itemid = 780, + itemId = 780, type = WEAPON_SWORD, level = 50, unproperly = true, @@ -3707,7 +3707,7 @@ local weapons = { }, { -- earth spike sword - itemid = 779, + itemId = 779, type = WEAPON_SWORD, action = "removecharge", }, @@ -3745,7 +3745,7 @@ local weapons = { }, { -- icy war hammer - itemid = 693, + itemId = 693, type = WEAPON_CLUB, level = 50, unproperly = true, @@ -3757,7 +3757,7 @@ local weapons = { }, { -- icy orcish maul - itemid = 692, + itemId = 692, type = WEAPON_CLUB, level = 35, unproperly = true, @@ -3765,7 +3765,7 @@ local weapons = { }, { -- icy cranial basher - itemid = 691, + itemId = 691, type = WEAPON_CLUB, level = 60, unproperly = true, @@ -3773,7 +3773,7 @@ local weapons = { }, { -- icy crystal mace - itemid = 690, + itemId = 690, type = WEAPON_CLUB, level = 35, unproperly = true, @@ -3781,7 +3781,7 @@ local weapons = { }, { -- icy clerical mace - itemid = 689, + itemId = 689, type = WEAPON_CLUB, level = 20, unproperly = true, @@ -3789,7 +3789,7 @@ local weapons = { }, { -- icy war axe - itemid = 688, + itemId = 688, type = WEAPON_AXE, level = 65, unproperly = true, @@ -3801,7 +3801,7 @@ local weapons = { }, { -- icy headchopper - itemid = 687, + itemId = 687, type = WEAPON_AXE, level = 35, unproperly = true, @@ -3813,7 +3813,7 @@ local weapons = { }, { -- icy heroic axe - itemid = 686, + itemId = 686, type = WEAPON_AXE, level = 60, unproperly = true, @@ -3821,7 +3821,7 @@ local weapons = { }, { -- icy knight axe - itemid = 685, + itemId = 685, type = WEAPON_AXE, level = 25, unproperly = true, @@ -3829,7 +3829,7 @@ local weapons = { }, { -- icy barbarian axe - itemid = 684, + itemId = 684, type = WEAPON_AXE, level = 20, unproperly = true, @@ -3837,7 +3837,7 @@ local weapons = { }, { -- icy dragon slayer - itemid = 683, + itemId = 683, type = WEAPON_SWORD, level = 45, unproperly = true, @@ -3849,7 +3849,7 @@ local weapons = { }, { -- icy blacksteel sword - itemid = 682, + itemId = 682, type = WEAPON_SWORD, level = 35, unproperly = true, @@ -3861,7 +3861,7 @@ local weapons = { }, { -- icy mystic blade - itemid = 681, + itemId = 681, type = WEAPON_SWORD, level = 60, unproperly = true, @@ -3869,7 +3869,7 @@ local weapons = { }, { -- icy relic sword - itemid = 680, + itemId = 680, type = WEAPON_SWORD, level = 50, unproperly = true, @@ -3877,13 +3877,13 @@ local weapons = { }, { -- icy spike sword - itemid = 679, + itemId = 679, type = WEAPON_SWORD, action = "removecharge", }, { -- fiery war hammer - itemid = 674, + itemId = 674, type = WEAPON_CLUB, level = 50, unproperly = true, @@ -3895,7 +3895,7 @@ local weapons = { }, { -- fiery orcish maul - itemid = 673, + itemId = 673, type = WEAPON_CLUB, level = 35, unproperly = true, @@ -3903,7 +3903,7 @@ local weapons = { }, { -- fiery cranial basher - itemid = 672, + itemId = 672, type = WEAPON_CLUB, level = 60, unproperly = true, @@ -3911,7 +3911,7 @@ local weapons = { }, { -- fiery crystal mace - itemid = 671, + itemId = 671, type = WEAPON_CLUB, level = 35, unproperly = true, @@ -3919,7 +3919,7 @@ local weapons = { }, { -- fiery clerical mace - itemid = 670, + itemId = 670, type = WEAPON_CLUB, level = 20, unproperly = true, @@ -3927,7 +3927,7 @@ local weapons = { }, { -- fiery war axe - itemid = 669, + itemId = 669, type = WEAPON_AXE, level = 65, unproperly = true, @@ -3939,7 +3939,7 @@ local weapons = { }, { -- fiery headchopper - itemid = 668, + itemId = 668, type = WEAPON_AXE, level = 35, unproperly = true, @@ -3951,7 +3951,7 @@ local weapons = { }, { -- fiery heroic axe - itemid = 667, + itemId = 667, type = WEAPON_AXE, level = 60, unproperly = true, @@ -3959,7 +3959,7 @@ local weapons = { }, { -- fiery knight axe - itemid = 666, + itemId = 666, type = WEAPON_AXE, level = 25, unproperly = true, @@ -3967,7 +3967,7 @@ local weapons = { }, { -- fiery barbarian axe - itemid = 665, + itemId = 665, type = WEAPON_AXE, level = 20, unproperly = true, @@ -3975,7 +3975,7 @@ local weapons = { }, { -- fiery dragon slayer - itemid = 664, + itemId = 664, type = WEAPON_SWORD, level = 45, unproperly = true, @@ -3987,7 +3987,7 @@ local weapons = { }, { -- fiery blacksteel sword - itemid = 663, + itemId = 663, type = WEAPON_SWORD, level = 35, unproperly = true, @@ -3999,7 +3999,7 @@ local weapons = { }, { -- fiery mystic blade - itemid = 662, + itemId = 662, type = WEAPON_SWORD, level = 60, unproperly = true, @@ -4007,7 +4007,7 @@ local weapons = { }, { -- fiery relic sword - itemid = 661, + itemId = 661, type = WEAPON_SWORD, level = 50, unproperly = true, @@ -4015,27 +4015,27 @@ local weapons = { }, { -- fiery spike sword - itemid = 660, + itemId = 660, type = WEAPON_SWORD, action = "removecharge", }, { -- noble axe - itemid = 7456, + itemId = 7456, type = WEAPON_AXE, level = 35, unproperly = true, }, { -- mythril axe - itemid = 7455, + itemId = 7455, type = WEAPON_AXE, level = 80, unproperly = true, }, { -- glorious axe - itemid = 7454, + itemId = 7454, type = WEAPON_AXE, level = 30, unproperly = true, @@ -4046,7 +4046,7 @@ local weapons = { }, { -- executioner - itemid = 7453, + itemId = 7453, type = WEAPON_AXE, level = 85, unproperly = true, @@ -4057,7 +4057,7 @@ local weapons = { }, { -- spiked squelcher - itemid = 7452, + itemId = 7452, type = WEAPON_CLUB, level = 30, unproperly = true, @@ -4068,14 +4068,14 @@ local weapons = { }, { -- shadow sceptre - itemid = 7451, + itemId = 7451, type = WEAPON_CLUB, level = 35, unproperly = true, }, { -- hammer of prophecy - itemid = 7450, + itemId = 7450, type = WEAPON_CLUB, level = 120, unproperly = true, @@ -4086,7 +4086,7 @@ local weapons = { }, { -- crystal sword - itemid = 7449, + itemId = 7449, type = WEAPON_SWORD, level = 25, unproperly = true, @@ -4097,19 +4097,19 @@ local weapons = { }, { -- elvish bow - itemid = 7438, + itemId = 7438, type = WEAPON_DISTANCE, }, { -- sapphire hammer - itemid = 7437, + itemId = 7437, type = WEAPON_CLUB, level = 30, unproperly = true, }, { -- angelic axe - itemid = 7436, + itemId = 7436, type = WEAPON_AXE, level = 45, unproperly = true, @@ -4120,56 +4120,56 @@ local weapons = { }, { -- impaler - itemid = 7435, + itemId = 7435, type = WEAPON_AXE, level = 85, unproperly = true, }, { -- royal axe - itemid = 7434, + itemId = 7434, type = WEAPON_AXE, level = 75, unproperly = true, }, { -- ravenwing - itemid = 7433, + itemId = 7433, type = WEAPON_AXE, level = 65, unproperly = true, }, { -- furry club - itemid = 7432, + itemId = 7432, type = WEAPON_CLUB, level = 20, unproperly = true, }, { -- demonbone - itemid = 7431, + itemId = 7431, type = WEAPON_CLUB, level = 80, unproperly = true, }, { -- dragonbone staff - itemid = 7430, + itemId = 7430, type = WEAPON_CLUB, level = 30, unproperly = true, }, { -- blessed sceptre - itemid = 7429, + itemId = 7429, type = WEAPON_CLUB, level = 75, unproperly = true, }, { -- bonebreaker - itemid = 7428, + itemId = 7428, type = WEAPON_CLUB, level = 55, unproperly = true, @@ -4180,35 +4180,35 @@ local weapons = { }, { -- chaos mace - itemid = 7427, + itemId = 7427, type = WEAPON_CLUB, level = 45, unproperly = true, }, { -- amber staff - itemid = 7426, + itemId = 7426, type = WEAPON_CLUB, level = 40, unproperly = true, }, { -- taurus mace - itemid = 7425, + itemId = 7425, type = WEAPON_CLUB, level = 20, unproperly = true, }, { -- lunar staff - itemid = 7424, + itemId = 7424, type = WEAPON_CLUB, level = 30, unproperly = true, }, { -- skullcrusher - itemid = 7423, + itemId = 7423, type = WEAPON_CLUB, level = 85, unproperly = true, @@ -4219,63 +4219,63 @@ local weapons = { }, { -- jade hammer - itemid = 7422, + itemId = 7422, type = WEAPON_CLUB, level = 70, unproperly = true, }, { -- onyx flail - itemid = 7421, + itemId = 7421, type = WEAPON_CLUB, level = 65, unproperly = true, }, { -- reaper's axe - itemid = 7420, + itemId = 7420, type = WEAPON_AXE, level = 70, unproperly = true, }, { -- dreaded cleaver - itemid = 7419, + itemId = 7419, type = WEAPON_AXE, level = 40, unproperly = true, }, { -- nightmare blade - itemid = 7418, + itemId = 7418, type = WEAPON_SWORD, level = 70, unproperly = true, }, { -- runed sword - itemid = 7417, + itemId = 7417, type = WEAPON_SWORD, level = 65, unproperly = true, }, { -- bloody edge - itemid = 7416, + itemId = 7416, type = WEAPON_SWORD, level = 55, unproperly = true, }, { -- cranial basher - itemid = 7415, + itemId = 7415, type = WEAPON_CLUB, level = 60, unproperly = true, }, { -- abyss hammer - itemid = 7414, + itemId = 7414, type = WEAPON_CLUB, level = 60, unproperly = true, @@ -4286,7 +4286,7 @@ local weapons = { }, { -- titan axe - itemid = 7413, + itemId = 7413, type = WEAPON_AXE, level = 40, unproperly = true, @@ -4297,42 +4297,42 @@ local weapons = { }, { -- butcher's axe - itemid = 7412, + itemId = 7412, type = WEAPON_AXE, level = 45, unproperly = true, }, { -- ornamented axe - itemid = 7411, + itemId = 7411, type = WEAPON_AXE, level = 50, unproperly = true, }, { -- queen's sceptre - itemid = 7410, + itemId = 7410, type = WEAPON_CLUB, level = 55, unproperly = true, }, { -- northern star - itemid = 7409, + itemId = 7409, type = WEAPON_CLUB, level = 50, unproperly = true, }, { -- wyvern fang - itemid = 7408, + itemId = 7408, type = WEAPON_SWORD, level = 25, unproperly = true, }, { -- haunted blade - itemid = 7407, + itemId = 7407, type = WEAPON_SWORD, level = 30, unproperly = true, @@ -4343,7 +4343,7 @@ local weapons = { }, { -- blacksteel sword - itemid = 7406, + itemId = 7406, type = WEAPON_SWORD, level = 35, unproperly = true, @@ -4354,7 +4354,7 @@ local weapons = { }, { -- havoc blade - itemid = 7405, + itemId = 7405, type = WEAPON_SWORD, level = 70, unproperly = true, @@ -4365,14 +4365,14 @@ local weapons = { }, { -- assassin dagger - itemid = 7404, + itemId = 7404, type = WEAPON_SWORD, level = 40, unproperly = true, }, { -- berserker - itemid = 7403, + itemId = 7403, type = WEAPON_SWORD, level = 65, unproperly = true, @@ -4383,7 +4383,7 @@ local weapons = { }, { -- dragon slayer - itemid = 7402, + itemId = 7402, type = WEAPON_SWORD, level = 45, unproperly = true, @@ -4394,14 +4394,14 @@ local weapons = { }, { -- orcish maul - itemid = 7392, + itemId = 7392, type = WEAPON_CLUB, level = 35, unproperly = true, }, { -- thaian sword - itemid = 7391, + itemId = 7391, type = WEAPON_SWORD, level = 50, unproperly = true, @@ -4412,35 +4412,35 @@ local weapons = { }, { -- the justice seeker - itemid = 7390, + itemId = 7390, type = WEAPON_SWORD, level = 75, unproperly = true, }, { -- heroic axe - itemid = 7389, + itemId = 7389, type = WEAPON_AXE, level = 60, unproperly = true, }, { -- vile axe - itemid = 7388, + itemId = 7388, type = WEAPON_AXE, level = 55, unproperly = true, }, { -- diamond sceptre - itemid = 7387, + itemId = 7387, type = WEAPON_CLUB, level = 25, unproperly = true, }, { -- mercenary sword - itemid = 7386, + itemId = 7386, type = WEAPON_SWORD, level = 40, unproperly = true, @@ -4451,28 +4451,28 @@ local weapons = { }, { -- crimson sword - itemid = 7385, + itemId = 7385, type = WEAPON_SWORD, level = 20, unproperly = true, }, { -- mystic blade - itemid = 7384, + itemId = 7384, type = WEAPON_SWORD, level = 60, unproperly = true, }, { -- relic sword - itemid = 7383, + itemId = 7383, type = WEAPON_SWORD, level = 50, unproperly = true, }, { -- demonrage sword - itemid = 7382, + itemId = 7382, type = WEAPON_SWORD, level = 60, unproperly = true, @@ -4483,14 +4483,14 @@ local weapons = { }, { -- mammoth whopper - itemid = 7381, + itemId = 7381, type = WEAPON_CLUB, level = 20, unproperly = true, }, { -- headchopper - itemid = 7380, + itemId = 7380, type = WEAPON_AXE, level = 35, unproperly = true, @@ -4501,7 +4501,7 @@ local weapons = { }, { -- brutetamer's staff - itemid = 7379, + itemId = 7379, type = WEAPON_CLUB, level = 25, unproperly = true, @@ -4548,7 +4548,7 @@ local weapons = { }, { -- piercing bolt - itemid = 7363, + itemId = 7363, type = WEAPON_AMMO, level = 30, unproperly = true, @@ -4556,7 +4556,7 @@ local weapons = { }, { -- ruthless axe - itemid = 6553, + itemId = 6553, type = WEAPON_AXE, level = 75, unproperly = true, @@ -4567,7 +4567,7 @@ local weapons = { }, { -- infernal bolt - itemid = 6528, + itemId = 6528, type = WEAPON_AMMO, level = 110, unproperly = true, @@ -4575,7 +4575,7 @@ local weapons = { }, { -- the avenger - itemid = 6527, + itemId = 6527, type = WEAPON_SWORD, level = 75, unproperly = true, @@ -4586,12 +4586,12 @@ local weapons = { }, { -- Ron the Ripper's sabre - itemid = 6101, + itemId = 6101, type = WEAPON_SWORD, }, { -- arbalest - itemid = 5803, + itemId = 5803, type = WEAPON_DISTANCE, level = 75, unproperly = true, @@ -4602,12 +4602,12 @@ local weapons = { }, { -- banana staff - itemid = 3348, + itemId = 3348, type = WEAPON_CLUB, }, { -- hunting spear - itemid = 3347, + itemId = 3347, type = WEAPON_MISSILE, level = 20, unproperly = true, @@ -4615,36 +4615,36 @@ local weapons = { }, { -- ripper lance - itemid = 3346, + itemId = 3346, type = WEAPON_AXE, }, { -- templar scytheblade - itemid = 3345, + itemId = 3345, type = WEAPON_SWORD, }, { -- beastslayer axe - itemid = 3344, + itemId = 3344, type = WEAPON_AXE, level = 30, unproperly = true, }, { -- lich staff - itemid = 3343, + itemId = 3343, type = WEAPON_CLUB, level = 40, unproperly = true, }, { -- scythe - itemid = 3453, + itemId = 3453, type = WEAPON_CLUB, }, { -- power bolt - itemid = 3450, + itemId = 3450, type = WEAPON_AMMO, level = 55, unproperly = true, @@ -4652,29 +4652,29 @@ local weapons = { }, { -- arrow - itemid = 3447, + itemId = 3447, type = WEAPON_AMMO, action = "removecount", }, { -- bolt - itemid = 3446, + itemId = 3446, type = WEAPON_AMMO, action = "removecount", }, { -- bow - itemid = 3350, + itemId = 3350, type = WEAPON_DISTANCE, }, { -- crossbow - itemid = 3349, + itemId = 3349, type = WEAPON_DISTANCE, }, { -- war axe - itemid = 3342, + itemId = 3342, type = WEAPON_AXE, level = 65, unproperly = true, @@ -4685,43 +4685,43 @@ local weapons = { }, { -- arcane staff - itemid = 3341, + itemId = 3341, type = WEAPON_CLUB, level = 75, unproperly = true, }, { -- heavy mace - itemid = 3340, + itemId = 3340, type = WEAPON_CLUB, level = 70, unproperly = true, }, { -- djinn blade - itemid = 3339, + itemId = 3339, type = WEAPON_SWORD, level = 35, unproperly = true, }, { -- bone sword - itemid = 3338, + itemId = 3338, type = WEAPON_SWORD, }, { -- bone club - itemid = 3337, + itemId = 3337, type = WEAPON_CLUB, }, { -- studded club - itemid = 3336, + itemId = 3336, type = WEAPON_CLUB, }, { -- twin axe - itemid = 3335, + itemId = 3335, type = WEAPON_AXE, level = 50, unproperly = true, @@ -4732,21 +4732,21 @@ local weapons = { }, { -- pharaoh sword - itemid = 3334, + itemId = 3334, type = WEAPON_SWORD, level = 45, unproperly = true, }, { -- crystal mace - itemid = 3333, + itemId = 3333, type = WEAPON_CLUB, level = 35, unproperly = true, }, { -- hammer of wrath - itemid = 3332, + itemId = 3332, type = WEAPON_CLUB, level = 65, unproperly = true, @@ -4757,24 +4757,24 @@ local weapons = { }, { -- ravager's axe - itemid = 3331, + itemId = 3331, type = WEAPON_AXE, level = 70, unproperly = true, }, { -- heavy machete - itemid = 3330, + itemId = 3330, type = WEAPON_SWORD, }, { -- daramian axe - itemid = 3329, + itemId = 3329, type = WEAPON_AXE, }, { -- daramian waraxe - itemid = 3328, + itemId = 3328, type = WEAPON_AXE, level = 25, unproperly = true, @@ -4785,155 +4785,155 @@ local weapons = { }, { -- daramian mace - itemid = 3327, + itemId = 3327, type = WEAPON_CLUB, }, { -- epee - itemid = 3326, + itemId = 3326, type = WEAPON_SWORD, level = 30, unproperly = true, }, { -- light mace - itemid = 3325, + itemId = 3325, type = WEAPON_CLUB, }, { -- skull staff - itemid = 3324, + itemId = 3324, type = WEAPON_CLUB, level = 30, unproperly = true, }, { -- dwarven axe - itemid = 3323, + itemId = 3323, type = WEAPON_AXE, level = 20, unproperly = true, }, { -- dragon hammer - itemid = 3322, + itemId = 3322, type = WEAPON_CLUB, level = 25, unproperly = true, }, { -- enchanted staff - itemid = 3321, + itemId = 3321, type = WEAPON_CLUB, }, { -- fire axe - itemid = 3320, + itemId = 3320, type = WEAPON_AXE, level = 35, unproperly = true, }, { -- stonecutter axe - itemid = 3319, + itemId = 3319, type = WEAPON_AXE, level = 90, unproperly = true, }, { -- knight axe - itemid = 3318, + itemId = 3318, type = WEAPON_AXE, level = 25, unproperly = true, }, { -- barbarian axe - itemid = 3317, + itemId = 3317, type = WEAPON_AXE, level = 20, unproperly = true, }, { -- orcish axe - itemid = 3316, + itemId = 3316, type = WEAPON_AXE, }, { -- guardian halberd - itemid = 3315, + itemId = 3315, type = WEAPON_AXE, level = 55, unproperly = true, }, { -- naginata - itemid = 3314, + itemId = 3314, type = WEAPON_AXE, level = 25, unproperly = true, }, { -- obsidian lance - itemid = 3313, + itemId = 3313, type = WEAPON_AXE, level = 20, unproperly = true, }, { -- silver mace - itemid = 3312, + itemId = 3312, type = WEAPON_CLUB, level = 45, unproperly = true, }, { -- clerical mace - itemid = 3311, + itemId = 3311, type = WEAPON_CLUB, level = 20, unproperly = true, }, { -- iron hammer - itemid = 3310, + itemId = 3310, type = WEAPON_CLUB, }, { -- thunder hammer - itemid = 3309, + itemId = 3309, type = WEAPON_CLUB, level = 85, unproperly = true, }, { -- machete - itemid = 3308, + itemId = 3308, type = WEAPON_SWORD, }, { -- scimitar - itemid = 3307, + itemId = 3307, type = WEAPON_SWORD, }, { -- golden sickle - itemid = 3306, + itemId = 3306, type = WEAPON_AXE, }, { -- battle hammer - itemid = 3305, + itemId = 3305, type = WEAPON_CLUB, }, { -- crowbar - itemid = 3304, + itemId = 3304, type = WEAPON_CLUB, }, { -- great axe - itemid = 3303, + itemId = 3303, type = WEAPON_AXE, level = 95, unproperly = true, @@ -4944,14 +4944,14 @@ local weapons = { }, { -- dragon lance - itemid = 3302, + itemId = 3302, type = WEAPON_AXE, level = 60, unproperly = true, }, { -- broadsword - itemid = 3301, + itemId = 3301, type = WEAPON_SWORD, vocation = { { "Knight", true }, @@ -4960,7 +4960,7 @@ local weapons = { }, { -- katana - itemid = 3300, + itemId = 3300, type = WEAPON_SWORD, }, { @@ -4976,12 +4976,12 @@ local weapons = { }, { -- serpent sword - itemid = 3297, + itemId = 3297, type = WEAPON_SWORD, }, { -- warlord sword - itemid = 3296, + itemId = 3296, type = WEAPON_SWORD, level = 120, unproperly = true, @@ -4992,83 +4992,81 @@ local weapons = { }, { -- bright sword - itemid = 3295, + itemId = 3295, type = WEAPON_SWORD, - level = 30, - unproperly = true, }, { -- short sword - itemid = 3294, + itemId = 3294, type = WEAPON_SWORD, }, { -- sickle - itemid = 3293, + itemId = 3293, type = WEAPON_AXE, }, { -- combat knife - itemid = 3292, + itemId = 3292, type = WEAPON_SWORD, }, { -- knife - itemid = 3291, + itemId = 3291, type = WEAPON_SWORD, }, { -- silver dagger - itemid = 3290, + itemId = 3290, type = WEAPON_SWORD, }, { -- staff - itemid = 3289, + itemId = 3289, type = WEAPON_CLUB, }, { -- magic sword - itemid = 3288, + itemId = 3288, type = WEAPON_SWORD, level = 80, unproperly = true, }, { -- throwing star - itemid = 3287, + itemId = 3287, type = WEAPON_MISSILE, breakchance = 10, }, { -- mace - itemid = 3286, + itemId = 3286, type = WEAPON_CLUB, }, { -- longsword - itemid = 3285, + itemId = 3285, type = WEAPON_SWORD, }, { -- ice rapier - itemid = 3284, + itemId = 3284, type = WEAPON_SWORD, action = "removecharge", }, { -- carlin sword - itemid = 3283, + itemId = 3283, type = WEAPON_SWORD, }, { -- morning star - itemid = 3282, + itemId = 3282, type = WEAPON_CLUB, }, { -- giant sword - itemid = 3281, + itemId = 3281, type = WEAPON_SWORD, level = 55, unproperly = true, @@ -5079,14 +5077,14 @@ local weapons = { }, { -- fire sword - itemid = 3280, + itemId = 3280, type = WEAPON_SWORD, level = 30, unproperly = true, }, { -- war hammer - itemid = 3279, + itemId = 3279, type = WEAPON_CLUB, level = 50, unproperly = true, @@ -5097,7 +5095,7 @@ local weapons = { }, { -- magic longsword - itemid = 3278, + itemId = 3278, type = WEAPON_SWORD, level = 140, unproperly = true, @@ -5108,18 +5106,18 @@ local weapons = { }, { -- spear - itemid = 3277, + itemId = 3277, type = WEAPON_MISSILE, breakchance = 3, }, { -- hatchet - itemid = 3276, + itemId = 3276, type = WEAPON_AXE, }, { -- double axe - itemid = 3275, + itemId = 3275, type = WEAPON_AXE, level = 25, unproperly = true, @@ -5130,49 +5128,49 @@ local weapons = { }, { -- axe - itemid = 3274, + itemId = 3274, type = WEAPON_AXE, }, { -- sabre - itemid = 3273, + itemId = 3273, type = WEAPON_SWORD, }, { -- rapier - itemid = 3272, + itemId = 3272, type = WEAPON_SWORD, }, { -- spike sword - itemid = 3271, + itemId = 3271, type = WEAPON_SWORD, }, { -- club - itemid = 3270, + itemId = 3270, type = WEAPON_CLUB, }, { -- halberd - itemid = 3269, + itemId = 3269, type = WEAPON_AXE, level = 25, unproperly = true, }, { -- hand axe - itemid = 3268, + itemId = 3268, type = WEAPON_AXE, }, { -- dagger - itemid = 3267, + itemId = 3267, type = WEAPON_SWORD, }, { -- battle axe - itemid = 3266, + itemId = 3266, type = WEAPON_AXE, unproperly = true, vocation = { @@ -5182,7 +5180,7 @@ local weapons = { }, { -- two handed sword - itemid = 3265, + itemId = 3265, type = WEAPON_SWORD, level = 20, unproperly = true, @@ -5193,17 +5191,17 @@ local weapons = { }, { -- sword - itemid = 3264, + itemId = 3264, type = WEAPON_SWORD, }, { -- giant smithhammer - itemid = 3208, + itemId = 3208, type = WEAPON_CLUB, }, { -- wand of dragonbreath - itemid = 3075, + itemId = 3075, type = WEAPON_WAND, wandType = "fire", level = 13, @@ -5216,7 +5214,7 @@ local weapons = { }, { -- wand of vortex - itemid = 3074, + itemId = 3074, type = WEAPON_WAND, wandType = "energy", level = 6, @@ -5229,7 +5227,7 @@ local weapons = { }, { -- wand of cosmic energy - itemid = 3073, + itemId = 3073, type = WEAPON_WAND, wandType = "energy", level = 26, @@ -5242,7 +5240,7 @@ local weapons = { }, { -- wand of decay - itemid = 3072, + itemId = 3072, type = WEAPON_WAND, wandType = "death", level = 19, @@ -5255,7 +5253,7 @@ local weapons = { }, { -- wand of inferno - itemid = 3071, + itemId = 3071, type = WEAPON_WAND, wandType = "fire", level = 33, @@ -5268,7 +5266,7 @@ local weapons = { }, { -- moonlight rod - itemid = 3070, + itemId = 3070, type = WEAPON_WAND, wandType = "ice", level = 13, @@ -5281,7 +5279,7 @@ local weapons = { }, { -- necrotic rod - itemid = 3069, + itemId = 3069, type = WEAPON_WAND, wandType = "death", level = 19, @@ -5294,7 +5292,7 @@ local weapons = { }, { -- hailstorm rod - itemid = 3067, + itemId = 3067, type = WEAPON_WAND, wandType = "ice", level = 33, @@ -5307,7 +5305,7 @@ local weapons = { }, { -- snakebit rod - itemid = 3066, + itemId = 3066, type = WEAPON_WAND, wandType = "earth", level = 6, @@ -5320,7 +5318,7 @@ local weapons = { }, { -- terra rod - itemid = 3065, + itemId = 3065, type = WEAPON_WAND, wandType = "earth", level = 26, diff --git a/data/XML/imbuements.xml b/data/XML/imbuements.xml index 867bab66f..74a06dbd9 100644 --- a/data/XML/imbuements.xml +++ b/data/XML/imbuements.xml @@ -155,18 +155,18 @@ - + - + - + diff --git a/data/XML/vocations.xml b/data/XML/vocations.xml index fd5ae77a3..8cbf8e4ec 100644 --- a/data/XML/vocations.xml +++ b/data/XML/vocations.xml @@ -12,7 +12,7 @@ - + @@ -24,7 +24,7 @@ - + @@ -36,7 +36,7 @@ - + @@ -48,7 +48,7 @@ - + @@ -60,7 +60,7 @@ - + @@ -71,8 +71,11 @@ + + + - + @@ -83,8 +86,11 @@ + + + - + @@ -95,8 +101,11 @@ + + + - + @@ -107,5 +116,8 @@ + + + diff --git a/data/global.lua b/data/global.lua index 3d67a1fb4..a497b9983 100644 --- a/data/global.lua +++ b/data/global.lua @@ -194,7 +194,7 @@ function addStamina(playerId, ...) 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")) + player:sendTextMessage(MESSAGE_FAILURE, 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/appearances.dat b/data/items/appearances.dat index 9f0de0ece..0c609c42b 100644 Binary files a/data/items/appearances.dat and b/data/items/appearances.dat differ diff --git a/data/items/items.xml b/data/items/items.xml index abbe27c06..c57bafaf7 100644 --- a/data/items/items.xml +++ b/data/items/items.xml @@ -12136,21 +12136,18 @@ - - - @@ -12158,7 +12155,6 @@ - @@ -12166,7 +12162,6 @@ - @@ -12215,7 +12210,6 @@ - @@ -15581,8 +15575,8 @@ - - + + @@ -21338,22 +21332,22 @@ - + - + - + - + @@ -24998,7 +24992,10 @@ - + + + + @@ -36642,8 +36639,8 @@ - - + + @@ -37181,10 +37178,10 @@ - + - + @@ -37360,18 +37357,18 @@ - + - + - - + + - - + + @@ -37425,18 +37422,18 @@ - + - + - - + + - - + + @@ -38282,7 +38279,6 @@ - @@ -38735,19 +38731,19 @@ - + - + - + - + @@ -38802,7 +38798,7 @@ - + @@ -40182,7 +40178,7 @@ - + @@ -40633,7 +40629,7 @@ - + @@ -41020,7 +41016,7 @@ - + @@ -44514,8 +44510,8 @@ - - + + @@ -49514,8 +49510,8 @@ - - + + @@ -51966,8 +51962,8 @@ - - + + @@ -55309,8 +55305,8 @@ - - + + @@ -55351,7 +55347,7 @@ - + @@ -58332,8 +58328,8 @@ - - + + @@ -58370,8 +58366,8 @@ - - + + @@ -58408,8 +58404,8 @@ - - + + @@ -58427,8 +58423,8 @@ - - + + @@ -58449,8 +58445,8 @@ - - + + @@ -58469,8 +58465,8 @@ - - + + @@ -58818,8 +58814,8 @@ - - + + @@ -60214,7 +60210,7 @@ - + @@ -61664,7 +61660,7 @@ - + @@ -61683,7 +61679,7 @@ - + @@ -65139,6 +65135,9 @@ + + + @@ -65333,7 +65332,7 @@ - + @@ -65366,7 +65365,7 @@ - + @@ -67594,6 +67593,11 @@ + + + + + @@ -68532,6 +68536,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -68544,6 +68615,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -68645,8 +68883,8 @@ - - + + @@ -68663,8 +68901,8 @@ - - + + @@ -68681,8 +68919,8 @@ - - + + @@ -68699,8 +68937,8 @@ - - + + @@ -68717,8 +68955,8 @@ - - + + @@ -68735,8 +68973,8 @@ - - + + @@ -68762,8 +69000,8 @@ - - + + @@ -68783,8 +69021,8 @@ - - + + @@ -68804,8 +69042,8 @@ - - + + @@ -68825,8 +69063,8 @@ - - + + @@ -68859,8 +69097,8 @@ - - + + @@ -68876,8 +69114,8 @@ - - + + @@ -68906,8 +69144,8 @@ - - + + @@ -68923,8 +69161,8 @@ - - + + @@ -68949,6 +69187,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -68973,4 +69249,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/libs/features_lib.lua b/data/libs/features_lib.lua new file mode 100644 index 000000000..3b8f283e8 --- /dev/null +++ b/data/libs/features_lib.lua @@ -0,0 +1,36 @@ +Features = { + AutoLoot = "autoloot", +} + +local function validateFeature(feature) + local found = false + for _, v in pairs(Features) do + if v == feature then + found = true + end + end + if not found then + error("Invalid feature: " .. feature) + end +end + +function Player:hasFeature(feature) + validateFeature(feature) + local kv = self:kv():scoped("features") + if kv:get(feature) then + return true + end + return false +end + +function Player:getFeature(feature) + validateFeature(feature) + local kv = self:kv():scoped("features") + return kv:get(feature) +end + +function Player:setFeature(feature, value) + validateFeature(feature) + local kv = self:kv():scoped("features") + kv:set(feature, value) +end diff --git a/data/libs/forge_lib.lua b/data/libs/forge_lib.lua index e232c60fe..986d9bf4a 100644 --- a/data/libs/forge_lib.lua +++ b/data/libs/forge_lib.lua @@ -45,7 +45,7 @@ function ForgeMonster:onDeath(creature, corpse, killer, mostDamageKiller, unjust return true end - local forgeAmountMultiplier = (configManager.getNumber(configKeys.FORGE_AMOUNT_MULTIPLIER) or 3) + local forgeAmountMultiplier = (configManager.getFloat(configKeys.FORGE_AMOUNT_MULTIPLIER) or 3) local stack = creature:getForgeStack() if stack > 0 then diff --git a/data/libs/functions/gematelier.lua b/data/libs/functions/gematelier.lua new file mode 100644 index 000000000..23b3f8b8f --- /dev/null +++ b/data/libs/functions/gematelier.lua @@ -0,0 +1,91 @@ +local config = { + lesser = { + names = { + "lesser guardian gem", + "lesser marksman gem", + "lesser sage gem", + "lesser mystic gem", + }, + chance = { + influenced = 9000, + fiendish = 3000, + archfoe = 0, + }, + maxCount = 2, + }, + regular = { + names = { + "guardian gem", + "marksman gem", + "sage gem", + "mystic gem", + }, + chance = { + influenced = 0, + fiendish = 3000, + archfoe = 9000, + }, + maxCount = 2, + }, + greater = { + names = { + "greater guardian gem", + "greater marksman gem", + "greater sage gem", + "greater mystic gem", + }, + chance = { + influenced = 0, + fiendish = 9000, + archfoe = 3000, + }, + maxCount = 1, + }, +} + +function Monster:generateGemAtelierLoot() + local mType = self:getType() + if not mType then + return {} + end + local category = "none" + local forgeClassification = self:getMonsterForgeClassification() + if forgeClassification == FORGE_INFLUENCED_MONSTER then + category = "influenced" + elseif forgeClassification == FORGE_FIENDISH_MONSTER then + category = "fiendish" + elseif (mType:bossRace() or ""):lower() == "archfoe" then + category = "archfoe" + end + if category == "none" then + return {} + end + + local loot = {} + for _, gemConfig in pairs(config) do + local chance = gemConfig.chance[category] or 0 + local names = gemConfig.names + local maxCount = gemConfig.maxCount + if chance > 0 then + for i = 1, maxCount do + local roll = math.random(1, 100000) + if roll > chance then + goto continue + end + + local name = names[math.random(1, #names)] + local itemType = ItemType(name) + if not itemType then + goto continue + end + if loot[itemType:getId()] then + loot[itemType:getId()].count = loot[itemType:getId()].count + 1 + else + loot[itemType:getId()] = { count = 1 } + end + end + end + ::continue:: + end + return loot +end diff --git a/data/libs/functions/load.lua b/data/libs/functions/load.lua index bedbbe84f..ef939a35f 100644 --- a/data/libs/functions/load.lua +++ b/data/libs/functions/load.lua @@ -5,6 +5,7 @@ dofile(CORE_DIRECTORY .. "/libs/functions/constants.lua") dofile(CORE_DIRECTORY .. "/libs/functions/container.lua") dofile(CORE_DIRECTORY .. "/libs/functions/creature.lua") dofile(CORE_DIRECTORY .. "/libs/functions/functions.lua") +dofile(CORE_DIRECTORY .. "/libs/functions/gematelier.lua") dofile(CORE_DIRECTORY .. "/libs/functions/fs.lua") dofile(CORE_DIRECTORY .. "/libs/functions/game.lua") dofile(CORE_DIRECTORY .. "/libs/functions/item.lua") diff --git a/data/libs/functions/player.lua b/data/libs/functions/player.lua index afd31ea01..7519af13d 100644 --- a/data/libs/functions/player.lua +++ b/data/libs/functions/player.lua @@ -1,10 +1,6 @@ -- Functions from The Forgotten Server local foodCondition = Condition(CONDITION_REGENERATION, CONDITIONID_DEFAULT) -local function firstToUpper(str) - return (str:gsub("^%l", string.upper)) -end - function Player.feed(self, food) local condition = self:getCondition(CONDITION_REGENERATION, CONDITIONID_DEFAULT) if condition then @@ -254,7 +250,7 @@ function Player.getMarriageDescription(thing) if self == thing then descr = descr .. " You are " else - descr = descr .. " " .. firstToUpper(thing:getSubjectPronoun()) .. " " .. thing:getSubjectVerb() .. " " + descr = descr .. " " .. thing:getSubjectPronoun():titleCase() .. " " .. thing:getSubjectVerb() .. " " end descr = descr .. "married to " .. getPlayerNameById(playerSpouse) .. "." end @@ -453,7 +449,7 @@ function Player.getSubjectVerb(self, past) end function Player.findItemInInbox(self, itemId) - local inbox = self:getSlotItem(CONST_SLOT_STORE_INBOX) + local inbox = self:getStoreInbox() local items = inbox:getItems() for _, item in pairs(items) do if item:getId() == itemId then @@ -470,25 +466,23 @@ function Player.updateHazard(self) return true end + self:setHazardSystemPoints(0) for _, zone in pairs(zones) do local hazard = Hazard.getByName(zone:getName()) - if not hazard then - self:setHazardSystemPoints(0) + if hazard then + if self:getParty() then + self:getParty():refreshHazard() + else + self:setHazardSystemPoints(hazard:getPlayerCurrentLevel(self)) + end return true end - - if self:getParty() then - self:getParty():refreshHazard() - else - self:setHazardSystemPoints(hazard:getPlayerCurrentLevel(self)) - end - return true end return true end function Player:addItemStoreInboxEx(item, movable, setOwner) - local inbox = self:getSlotItem(CONST_SLOT_STORE_INBOX) + local inbox = self:getStoreInbox() if not movable then item:setOwner(self) item:setAttribute(ITEM_ATTRIBUTE_STORE, systemTime()) @@ -595,7 +589,7 @@ function Player:setFiendish() end function Player:findItemInInbox(itemId, name) - local inbox = self:getSlotItem(CONST_SLOT_STORE_INBOX) + local inbox = self:getStoreInbox() local items = inbox:getItems() for _, item in pairs(items) do if item:getId() == itemId and (not name or item:getName() == name) then diff --git a/data/libs/functions/tables.lua b/data/libs/functions/tables.lua index 1c798ecb2..13fdb3e27 100644 --- a/data/libs/functions/tables.lua +++ b/data/libs/functions/tables.lua @@ -102,6 +102,14 @@ function table.unserialize(str) return loadstring("return " .. str)() end +function table.shallowCopy(oldTable) + local newTable = {} + for k, v in pairs(oldTable) do + newTable[k] = v + end + return newTable +end + function pairsByKeys(t, f) local a = {} for n in pairs(t) do diff --git a/data/libs/hazard_lib.lua b/data/libs/hazard_lib.lua index f9338299e..a1501b2d1 100644 --- a/data/libs/hazard_lib.lua +++ b/data/libs/hazard_lib.lua @@ -100,16 +100,7 @@ function Hazard:setPlayerCurrentLevel(player, level) if not zones then return true end - for _, zone in ipairs(zones) do - local hazard = Hazard.getByName(zone:getName()) - if hazard then - if hazard == self then - player:setHazardSystemPoints(level) - else - player:setHazardSystemPoints(0) - end - end - end + player:updateHazard() return true end diff --git a/data/libs/hireling_lib.lua b/data/libs/hireling_lib.lua index 528a903da..42390a2cc 100644 --- a/data/libs/hireling_lib.lua +++ b/data/libs/hireling_lib.lua @@ -92,7 +92,7 @@ local function checkHouseAccess(hireling) -- Player is not invited anymore, return to lamp logger.debug("Returning Hireling: {} to owner '{}' Inbox", hireling:getName(), player:getName()) - local inbox = player:getSlotItem(CONST_SLOT_STORE_INBOX) + local inbox = player:getStoreInbox() if not inbox then return false end @@ -359,8 +359,9 @@ function Hireling:returnToLamp(player_id) return owner:sendTextMessage(MESSAGE_FAILURE, "You do not have enough capacity.") end - local inbox = owner:getSlotItem(CONST_SLOT_STORE_INBOX) - if not inbox then + local inbox = owner:getStoreInbox() + local inboxItems = inbox:getItems() + if not inbox or #inboxItems > inbox:getMaxCapacity() then owner:getPosition():sendMagicEffect(CONST_ME_POFF) return owner:sendTextMessage(MESSAGE_FAILURE, "You don't have enough room in your inbox.") end @@ -537,8 +538,9 @@ function Player:addNewHireling(name, sex) return false end - local inbox = self:getSlotItem(CONST_SLOT_STORE_INBOX) - if not inbox then + local inbox = self:getStoreInbox() + local inboxItems = inbox:getItems() + if not inbox or #inboxItems > inbox:getMaxCapacity() then self:getPosition():sendMagicEffect(CONST_ME_POFF) self:sendTextMessage(MESSAGE_FAILURE, "You don't have enough room in your inbox.") return false @@ -628,7 +630,7 @@ function Player:hasHirelings() end function Player:findHirelingLamp(hirelingId) - local inbox = self:getSlotItem(CONST_SLOT_STORE_INBOX) + local inbox = self:getStoreInbox() if not inbox then return nil end diff --git a/data/libs/libs.lua b/data/libs/libs.lua index bd6164111..a3f9a3933 100644 --- a/data/libs/libs.lua +++ b/data/libs/libs.lua @@ -33,3 +33,4 @@ dofile(CORE_DIRECTORY .. "/libs/encounters_lib.lua") dofile(CORE_DIRECTORY .. "/libs/raids_lib.lua") dofile(CORE_DIRECTORY .. "/libs/concoctions_lib.lua") dofile(CORE_DIRECTORY .. "/libs/kill_lib.lua") +dofile(CORE_DIRECTORY .. "/libs/features_lib.lua") diff --git a/data/modules/scripts/blessings/blessings.lua b/data/modules/scripts/blessings/blessings.lua index 5a8e5e56c..adfa364e7 100644 --- a/data/modules/scripts/blessings/blessings.lua +++ b/data/modules/scripts/blessings/blessings.lua @@ -299,7 +299,7 @@ Blessings.DropLoot = function(player, corpse, chance, skulled) end end if skulled and Blessings.Config.SkulledDeathLoseStoreItem then - local inbox = player:getSlotItem(CONST_SLOT_STORE_INBOX) + local inbox = player:getStoreInbox() local toBeDeleted = {} if inbox and inbox:getSize() > 0 then for i = 0, inbox:getSize() do diff --git a/data/modules/scripts/daily_reward/daily_reward.lua b/data/modules/scripts/daily_reward/daily_reward.lua index 177b23cc9..815a7e261 100644 --- a/data/modules/scripts/daily_reward/daily_reward.lua +++ b/data/modules/scripts/daily_reward/daily_reward.lua @@ -452,8 +452,9 @@ function Player.selectDailyReward(self, msg) end -- Adding items to store inbox - local inbox = self:getSlotItem(CONST_SLOT_STORE_INBOX) - if not inbox then + local inbox = self:getStoreInbox() + local inboxItems = inbox:getItems() + if not inbox or #inboxItems > inbox:getMaxCapacity() then self:sendError("You do not have enough space in your store inbox.") return false end diff --git a/data/modules/scripts/gamestore/init.lua b/data/modules/scripts/gamestore/init.lua index f3959c3a1..439822a3f 100644 --- a/data/modules/scripts/gamestore/init.lua +++ b/data/modules/scripts/gamestore/init.lua @@ -1573,8 +1573,9 @@ function GameStore.processStackablePurchase(player, offerId, offerCount, offerNa return error({ code = 0, message = "Please make sure you have free capacity to hold this item." }) end - local inbox = player:getSlotItem(CONST_SLOT_STORE_INBOX) - if inbox then + local inbox = player:getStoreInbox() + local inboxItems = inbox:getItems() + if inbox and #inboxItems <= inbox:getMaxCapacity() then if (isKeg and offerCount > 500) or offerCount > 100 then local parcel = inbox:addItem(PARCEL_ID, 1) parcel:setAttribute(ITEM_ATTRIBUTE_STORE, systemTime()) @@ -1624,12 +1625,14 @@ function GameStore.processHouseRelatedPurchase(player, offer) return (itemId >= ITEM_HEALTH_CASK_START and itemId <= ITEM_HEALTH_CASK_END) or (itemId >= ITEM_MANA_CASK_START and itemId <= ITEM_MANA_CASK_END) or (itemId >= ITEM_SPIRIT_CASK_START and itemId <= ITEM_SPIRIT_CASK_END) end - local inbox = player:getSlotItem(CONST_SLOT_STORE_INBOX) local itemIds = offer.itemtype if type(itemIds) ~= "table" then itemIds = { itemIds } end - if inbox then + + local inbox = player:getStoreInbox() + local inboxItems = inbox:getItems() + if inbox and #inboxItems <= inbox:getMaxCapacity() then for _, itemId in ipairs(itemIds) do local decoKit = inbox:addItem(ITEM_DECORATION_KIT, 1) if decoKit then diff --git a/data/scripts/discord_webhook/discord_webhook.lua b/data/scripts/discord_webhook/discord_webhook.lua index 0aed824b2..f763ed90d 100644 --- a/data/scripts/discord_webhook/discord_webhook.lua +++ b/data/scripts/discord_webhook/discord_webhook.lua @@ -2,11 +2,15 @@ -- The URL layout is https://discord.com/api/webhooks/:id/:token -- Leave empty if you wish to disable. -announcementChannels = { - ["serverAnnouncements"] = "", -- Used for an announcement channel on your discord - ["raids"] = "", -- Used to isolate raids on your discord - ["player-kills"] = "", -- Self-explaining -} +if not announcementChannels then + announcementChannels = { + ["serverAnnouncements"] = "", -- Used for an announcement channel on your discord + ["raids"] = "", -- Used to isolate raids on your discord + ["player-kills"] = "", -- Self-explaining + ["player-levels"] = "", -- Self-explaining + ["reports"] = "", + } +end --[[ Example of notification (After you do the config): diff --git a/data/scripts/talkactions/gm/broadcast.lua b/data/scripts/talkactions/gm/broadcast.lua index ca8171e36..021f218eb 100644 --- a/data/scripts/talkactions/gm/broadcast.lua +++ b/data/scripts/talkactions/gm/broadcast.lua @@ -1,5 +1,15 @@ local broadcast = TalkAction("/b") +function Broadcast(text, filter) + for _, targetPlayer in ipairs(Game.getPlayers()) do + if filter and not filter(targetPlayer) then + goto continue + end + targetPlayer:sendTextMessage(MESSAGE_ADMINISTRADOR, text) + ::continue:: + end +end + function broadcast.onSay(player, words, param) -- create log logCommand(player, words, param) @@ -11,10 +21,7 @@ function broadcast.onSay(player, words, param) local text = player:getName() .. " broadcasted: " .. param logger.info(text) - Webhook.sendMessage("Broadcast", text, WEBHOOK_COLOR_WARNING, announcementChannels["serverAnnouncements"]) - for _, targetPlayer in ipairs(Game.getPlayers()) do - targetPlayer:sendPrivateMessage(player, param, TALKTYPE_BROADCAST) - end + Broadcast(param) return true end diff --git a/data/scripts/talkactions/god/forge_functions.lua b/data/scripts/talkactions/god/forge_functions.lua index b41943802..5ed33b41d 100644 --- a/data/scripts/talkactions/god/forge_functions.lua +++ b/data/scripts/talkactions/god/forge_functions.lua @@ -267,3 +267,54 @@ end forge:groupType("god") forge:register() + +---------------- // ---------------- +-- Add dust level +local addDustLevel = TalkAction("/adddustlevel") + +function addDustLevel.onSay(player, words, param) + -- create log + logCommand(player, words, param) + + -- Check the first param (player name) exists + if param == "" then + player:sendCancelMessage("Player name param required.") + -- Distro log + logger.error("[addDustLevel.onSay] - Player name param not found.") + return true + end + + local split = param:split(",") + local name = split[1] + + -- Check if player is online + local targetPlayer = Player(name) + if not targetPlayer then + player:sendCancelMessage("Player " .. string.titleCase(name) .. " is not online.") + -- Distro log + logger.error("[addDustLevel.onSay] - Player {} is not online.", string.titleCase(name)) + return true + end + + local dustLevel = nil + if split[2] then + dustLevel = tonumber(split[2]) + end + + -- Check if the dustAmount is valid + if dustLevel <= 0 or dustLevel == nil then + player:sendCancelMessage("Invalid dust level.") + return true + end + + targetPlayer:addForgeDustLevel(dustLevel) + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, string.format("Successful added %d dust level for the %s player.", dustLevel, targetPlayer:getName())) + targetPlayer:sendTextMessage(MESSAGE_EVENT_ADVANCE, string.format("%s adds %d dust level to your character.", player:getName(), dustLevel)) + -- Distro log + logger.info("{} added {} dust level to {} player.", player:getName(), dustLevel, targetPlayer:getName()) + return true +end + +addDustLevel:separator(" ") +addDustLevel:groupType("god") +addDustLevel:register() diff --git a/data/scripts/talkactions/god/inbox_command.lua b/data/scripts/talkactions/god/inbox_command.lua index bfc902b13..a080a2370 100644 --- a/data/scripts/talkactions/god/inbox_command.lua +++ b/data/scripts/talkactions/god/inbox_command.lua @@ -5,7 +5,7 @@ function inboxCommand.onSay(player, words, param) player:getPosition():sendMagicEffect(CONST_ME_TUTORIALSQUARE) local target = Creature(param[1]) if target then - local inbox = target:getSlotItem(CONST_SLOT_STORE_INBOX) + local inbox = target:getStoreInbox() local inboxSize = inbox:getSize() if inbox and inboxSize > 0 then if param[2] == "remove" then diff --git a/data/scripts/talkactions/god/test_send_message.lua b/data/scripts/talkactions/god/test_send_message.lua new file mode 100644 index 000000000..2db0ebcf3 --- /dev/null +++ b/data/scripts/talkactions/god/test_send_message.lua @@ -0,0 +1,25 @@ +local sendMessage = TalkAction("/testmessage") + +function sendMessage.onSay(player, words, param) + -- create log + logCommand(player, words, param) + + if param == "" or param == nil then + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Message type is missing, please enter a message type.") + return + end + + local split = param:split(",") + local messageType = tonumber(split[1]) + local textCollor = TEXTCOLOR_WHITE_EXP + if split[2] then + textCollor = tonumber(split[2]) + end + + player:sendTextMessage(messageType, "Testing message type.", player:getPosition(), 500, textCollor) + return true +end + +sendMessage:separator(" ") +sendMessage:groupType("god") +sendMessage:register() diff --git a/data/scripts/talkactions/player/auto_loot.lua b/data/scripts/talkactions/player/auto_loot.lua index a5541d514..927a5b100 100644 --- a/data/scripts/talkactions/player/auto_loot.lua +++ b/data/scripts/talkactions/player/auto_loot.lua @@ -1,6 +1,12 @@ -local autoLoot = TalkAction("!autoloot") +local feature = TalkAction("!autoloot") -function autoLoot.onSay(player, words, param) +local validValues = { + -- "all", + "on", + "off", +} + +function feature.onSay(player, words, param) if not configManager.getBoolean(configKeys.AUTOLOOT) then return true end @@ -8,20 +14,25 @@ function autoLoot.onSay(player, words, param) player:sendCancelMessage("You need to be VIP to use this command!") return true end - if param == "" then - player:sendCancelMessage("You need to specify on/off param.") + if not table.contains(validValues, param) then + local validValuesStr = table.concat(validValues, "/") + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Invalid param specified. Usage: !feature [" .. validValuesStr .. "]") return true end - if param == "on" then - player:setStorageValue(STORAGEVALUE_AUTO_LOOT, 1) - player:sendTextMessage(MESSAGE_LOOK, "You have successfully enabled your automatic looting!") + + if param == "all" then + player:setFeature(Features.AutoLoot, 2) + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "AutoLoot is now enabled for all kills (including bosses).") + elseif param == "on" then + player:setFeature(Features.AutoLoot, 1) + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "AutoLoot is now enabled for all regular kills (no bosses).") elseif param == "off" then - player:setStorageValue(STORAGEVALUE_AUTO_LOOT, -1) - player:sendTextMessage(MESSAGE_LOOK, "You have successfully disabled your automatic looting!") + player:setFeature(Features.AutoLoot, 0) + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "AutoLoot is now disabled.") end return true end -autoLoot:separator(" ") -autoLoot:groupType("normal") -autoLoot:register() +feature:separator(" ") +feature:groupType("normal") +feature:register() diff --git a/data/scripts/talkactions/player/reward.lua b/data/scripts/talkactions/player/reward.lua index 37255e71f..d198f60ef 100644 --- a/data/scripts/talkactions/player/reward.lua +++ b/data/scripts/talkactions/player/reward.lua @@ -24,8 +24,9 @@ local function sendExerciseRewardModal(player) return true end - local inbox = player:getSlotItem(CONST_SLOT_STORE_INBOX) - if inbox and inbox:getEmptySlots() > 0 and player:getFreeCapacity() >= iType:getWeight() then + local inbox = player:getStoreInbox() + local inboxItems = inbox:getItems() + if inbox and #inboxItems <= inbox:getMaxCapacity() and player:getFreeCapacity() >= iType:getWeight() then local item = inbox:addItem(it.id, it.charges) if item then item:setActionId(IMMOVABLE_ACTION_ID)