Skip to content

Commit

Permalink
chore: move crushers to core
Browse files Browse the repository at this point in the history
  • Loading branch information
github-actions[bot] authored and omarcopires committed Oct 31, 2024
1 parent 6c76fcf commit b517479
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 91 deletions.
16 changes: 0 additions & 16 deletions data-otservbr-global/lib/others/fragment_gems.lua

This file was deleted.

1 change: 0 additions & 1 deletion data-otservbr-global/lib/others/load.lua
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
dofile(DATA_DIRECTORY .. "/lib/others/dawnport.lua")
dofile(DATA_DIRECTORY .. "/lib/others/fragment_gems.lua")
31 changes: 0 additions & 31 deletions data-otservbr-global/scripts/actions/tools/amber_crusher.lua

This file was deleted.

42 changes: 0 additions & 42 deletions data-otservbr-global/scripts/actions/tools/crusher.lua

This file was deleted.

86 changes: 86 additions & 0 deletions data/scripts/actions/tools/crushers.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
local config = {
maxGemBreak = 10,
fragmentGems = {
small = { ids = { 44602, 44605, 44608, 44611 }, fragment = 46625, range = { 1, 4 } },
medium = { ids = { 44603, 44606, 44609, 44612 }, fragment = 46625, range = { 2, 8 } },
great = { ids = { 44604, 44607, 44610, 44613 }, fragment = 46626, range = { 1, 4 } },
},
}

local function getGemData(gemId)
for _, gemData in pairs(config.fragmentGems) do
if table.contains(gemData.ids, gemId) then
return gemData.fragment, gemData.range
end
end
return nil
end

local amberCrusher = Action()

function amberCrusher.onUse(player, item, fromPosition, target, toPosition, isHotkey)
if not target or not target:isItem() or target:getId() == item:getId() or player:getItemCount(target:getId()) <= 0 then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You can only use the crusher on a valid gem in your inventory.")
return true
end

local fragmentType, fragmentRange = getGemData(target:getId())
if not fragmentType then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "This item can't be broken into fragments.")
return true
end

local breakAmount = (target:getCount() >= config.maxGemBreak) and config.maxGemBreak or 1
target:remove(breakAmount)

for _ = 1, breakAmount do
player:addItem(fragmentType, math.random(fragmentRange[1], fragmentRange[2]))
end

player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have broken the gem into fragments.")
return true
end

amberCrusher:id(46628)
amberCrusher:register()

local crusher = Action()

function crusher.onUse(player, item, fromPosition, target, toPosition, isHotkey)
if not target or not target:isItem() or target:getId() == item:getId() or player:getItemCount(target:getId()) <= 0 then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You can only use the crusher on a valid gem in your inventory.")
return true
end

local fragmentType, fragmentRange = getGemData(target:getId())
if not fragmentType then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "This item can't be broken into fragments.")
return true
end

local crusherCharges = item:getAttribute(ITEM_ATTRIBUTE_CHARGES)
if not crusherCharges or crusherCharges <= 0 then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Your crusher has no more charges.")
return true
end

target:remove(1)
player:addItem(fragmentType, math.random(fragmentRange[1], fragmentRange[2]))
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have broken the gem into fragments.")

crusherCharges = crusherCharges - 1
if crusherCharges > 0 then
local container = item:getParent()
item:setAttribute(ITEM_ATTRIBUTE_CHARGES, crusherCharges)
if container:isContainer() then
player:sendUpdateContainer(container)
end
else
item:remove()
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Your crusher has been consumed.")
end
return true
end

crusher:id(46627)
crusher:register()
2 changes: 1 addition & 1 deletion src/creatures/monsters/spawns/spawn_monster.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ void SpawnMonster::scheduleSpawn(uint32_t spawnMonsterId, spawnBlock_t &sb, cons
}

void SpawnMonster::cleanup() {
for (auto it = spawnedMonsterMap.begin(); it != spawnedMonsterMap.end(); ) {
for (auto it = spawnedMonsterMap.begin(); it != spawnedMonsterMap.end();) {
const auto &monster = it->second;
if (!monster || monster->isRemoved()) {
auto spawnIt = spawnMonsterMap.find(it->first);
Expand Down

0 comments on commit b517479

Please sign in to comment.