Skip to content

Commit

Permalink
fix: datapacks tools actions (opentibiabr#2851)
Browse files Browse the repository at this point in the history
  • Loading branch information
majestyotbr authored Aug 29, 2024
1 parent a154773 commit 8056ca6
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 165 deletions.
8 changes: 0 additions & 8 deletions data-canary/scripts/actions/tools/kitchen_knife.lua

This file was deleted.

8 changes: 0 additions & 8 deletions data-canary/scripts/actions/tools/sickle.lua

This file was deleted.

100 changes: 54 additions & 46 deletions data-canary/scripts/lib/register_actions.lua
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
local holeId = { 294, 369, 370, 385, 394, 411, 412, 413, 432, 433, 435, 8709, 594, 595, 615, 609, 610, 615, 1156, 482, 483, 868, 874, 4824, 7768, 433, 432, 413, 7767, 411, 370, 369, 7737, 7755, 7768, 7767, 7515, 7516, 7517, 7518, 7519, 7520, 7521, 7522, 7762, 8144, 8690, 8709, 12203, 12961, 17239, 19220, 23364 } -- usable rope holes, for rope spots see global.lua
local wildGrowth = { 2130, 2130, 2982, 2524, 2030, 2029, 10182 } -- wild growth destroyable by machete
local jungleGrass = { [3696] = 3695, [3702] = 3701, [17153] = 17151 } -- grass destroyable by machete
local groundIds = { 354, 355 } -- pick usable ground
local holeId = { 294, 369, 370, 385, 394, 411, 412, 413, 432, 433, 435, 482, 483, 594, 595, 609, 610, 615, 868, 874, 1156, 4824, 7515, 7516, 7517, 7518, 7519, 7520, 7521, 7522, 7737, 7755, 7762, 7767, 7768, 8144, 8690, 8709, 12203, 12961, 17239, 19220, 23364 } -- usable rope holes, for rope spots see global.lua
local wildGrowth = { 3635, 30224 } -- wild growth destroyable by machete
local jungleGrass = { -- grass destroyable by machete
[3696] = 3695,
[3702] = 3701,
[17153] = 17151,
}
local groundIds = { 354, 355 } -- pick usable grounds
local sandIds = { 231 } -- desert sand
local fruits = { 2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2684, 2685, 5097, 8839, 8840, 8841 } -- fruits to make decorated cake with knife
local fruits = { 3584, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3595, 3596, 5096, 8011, 8012, 8013 } -- fruits to make decorated cake with knife
local holes = { 593, 606, 608, 867, 21341 } -- holes opened by shovel
local ropeSpots = { 386, 421, 12935, 12936, 14238, 17238, 21501, 21965, 21966, 21967, 21968, 23363 }

function destroyItem(player, target, toPosition)
function destroyItem(player, item, fromPosition, target, toPosition, isHotkey)
if type(target) ~= "userdata" or not target:isItem() then
return false
end
Expand Down Expand Up @@ -40,10 +45,8 @@ function destroyItem(player, target, toPosition)
end
end
end

target:remove(1)
end

toPosition:sendMagicEffect(CONST_ME_POFF)
return true
end
Expand All @@ -67,7 +70,7 @@ function onUseMachete(player, item, fromPosition, target, toPosition, isHotkey)
player:addAchievementProgress("Nothing Can Stop Me", 100)
return true
end
return destroyItem(player, target, toPosition)
return destroyItem(player, item, fromPosition, target, toPosition, isHotkey)
end

function onUsePick(player, item, fromPosition, target, toPosition, isHotkey)
Expand All @@ -82,7 +85,6 @@ function onUsePick(player, item, fromPosition, target, toPosition, isHotkey)
else
player:addItem(3028) -- 49% chance of getting small diamond
end

player:addAchievementProgress("Petrologist", 100)
target:getPosition():sendMagicEffect(CONST_ME_BLOCKHIT)
target:remove(1)
Expand All @@ -99,7 +101,7 @@ function onUsePick(player, item, fromPosition, target, toPosition, isHotkey)
return false
end

if table.contains(groundIds, ground.itemid) and ground.actionid == actionIds.pickHole then
if table.contains(groundIds, ground.itemid) and (ground:hasAttribute(ITEM_ATTRIBUTE_UNIQUEID) or ground:hasAttribute(ITEM_ATTRIBUTE_ACTIONID)) then
ground:transform(394)
ground:decay()
toPosition:sendMagicEffect(CONST_ME_POFF)
Expand Down Expand Up @@ -127,41 +129,28 @@ function onUseRope(player, item, fromPosition, target, toPosition, isHotkey)

local ground = tile:getGround()
if ground and table.contains(ropeSpots, ground:getId()) or tile:getItemById(12935) then
tile = Tile(toPosition:moveUpstairs())
if not tile then
return false
end

if tile:hasFlag(TILESTATE_PROTECTIONZONE) and player:isPzLocked() then
if Tile(toPosition:moveUpstairs()):hasFlag(TILESTATE_PROTECTIONZONE) and player:isPzLocked() then
player:sendCancelMessage(RETURNVALUE_PLAYERISPZLOCKED)
return true
end

player:teleportTo(toPosition, false)
return true
end

if table.contains(holeId, target.itemid) then
elseif table.contains(holeId, target.itemid) then
toPosition.z = toPosition.z + 1
tile = Tile(toPosition)
if not tile then
return false
end

local thing = tile:getTopVisibleThing()
if not thing then
return true
end

if thing:isPlayer() then
if Tile(toPosition:moveUpstairs()):queryAdd(thing) ~= RETURNVALUE_NOERROR then
return false
if tile then
local thing = tile:getTopVisibleThing()
if thing:isPlayer() then
if Tile(toPosition:moveUpstairs()):hasFlag(TILESTATE_PROTECTIONZONE) and thing:isPzLocked() then
return false
end
return thing:teleportTo(toPosition, false)
end
if thing:isItem() and thing:getType():isMovable() then
return thing:moveTo(toPosition:moveUpstairs())
end

return thing:teleportTo(toPosition, false)
elseif thing:isItem() and thing:getType():isMovable() then
return thing:moveTo(toPosition:moveUpstairs())
end
player:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
return true
end
return false
Expand All @@ -182,7 +171,13 @@ function onUseShovel(player, item, fromPosition, target, toPosition, isHotkey)
if table.contains(holes, groundId) then
ground:transform(groundId + 1)
ground:decay()

toPosition:moveDownstairs()
toPosition.y = toPosition.y - 1
if Tile(toPosition):hasFlag(TILESTATE_PROTECTIONZONE) and player:isPzLocked() then
player:sendCancelMessage(RETURNVALUE_PLAYERISPZLOCKED)
return true
end
player:teleportTo(toPosition, false)
toPosition.z = toPosition.z + 1
tile:relocateTo(toPosition)
player:addAchievementProgress("The Undertaker", 500)
Expand All @@ -192,14 +187,14 @@ function onUseShovel(player, item, fromPosition, target, toPosition, isHotkey)
player:addAchievementProgress("The Undertaker", 500)
elseif target.itemid == 17950 then -- swamp digging
if not player:hasExhaustion("swamp-digging") then
local chance = math.random(100)
if chance >= 1 and chance <= 42 then
local chance = math.random(1, 100)
if chance <= 42 then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You dug up a dead snake.")
player:addItem(4259)
elseif chance >= 43 and chance <= 79 then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You dug up a small diamond.")
player:addItem(3028)
elseif chance >= 80 then
else
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You dug up a leech.")
player:addItem(17858)
end
Expand All @@ -209,16 +204,15 @@ function onUseShovel(player, item, fromPosition, target, toPosition, isHotkey)
end
elseif table.contains(sandIds, groundId) then
local randomValue = math.random(1, 100)
if target.actionid == actionIds.sandHole and randomValue <= 20 then
if target.actionid == 100 and randomValue <= 20 then
ground:transform(615)
ground:decay()
elseif randomValue == 1 then
Game.createItem(3042, 1, toPosition)
Game.createItem(3042, 1, toPosition) -- Scarab Coin
player:addAchievementProgress("Gold Digger", 100)
elseif randomValue > 95 then
Game.createMonster("Scarab", toPosition)
end

toPosition:sendMagicEffect(CONST_ME_POFF)
else
return false
Expand All @@ -238,6 +232,13 @@ function onUseScythe(player, item, fromPosition, target, toPosition, isHotkey)
player:addAchievementProgress("Happy Farmer", 200)
return true
end
return destroyItem(player, item, fromPosition, target, toPosition, isHotkey)
end

function onUseSickle(player, item, fromPosition, target, toPosition, isHotkey)
if not table.contains({ 3293, 3306 }, item.itemid) then
return false
end

if target.itemid == 5464 then -- burning sugar cane
target:transform(5463)
Expand All @@ -246,14 +247,14 @@ function onUseScythe(player, item, fromPosition, target, toPosition, isHotkey)
player:addAchievementProgress("Natural Sweetener", 50)
return true
end
return destroyItem(player, target, toPosition)
return destroyItem(player, item, fromPosition, target, toPosition, isHotkey)
end

function onUseCrowbar(player, item, fromPosition, target, toPosition, isHotkey)
if not table.contains({ 3304, 9598 }, item.itemid) then
return false
end
return destroyItem(player, target, toPosition)
return destroyItem(player, item, fromPosition, target, toPosition, isHotkey)
end

function onUseKitchenKnife(player, item, fromPosition, target, toPosition, isHotkey)
Expand All @@ -269,3 +270,10 @@ function onUseKitchenKnife(player, item, fromPosition, target, toPosition, isHot
end
return false
end

function onUseSpoon(player, item, fromPosition, target, toPosition, isHotkey)
if not table.contains({ 3468, 3470 }, item.itemid) then
return false
end
return false
end
115 changes: 12 additions & 103 deletions data-otservbr-global/scripts/lib/register_actions.lua
Original file line number Diff line number Diff line change
@@ -1,106 +1,12 @@
local holeId = {
294,
369,
370,
385,
394,
411,
412,
413,
432,
433,
435,
8709,
594,
595,
615,
609,
610,
615,
1156,
482,
483,
868,
874,
4824,
7768,
433,
432,
413,
7767,
411,
370,
369,
7737,
7755,
7768,
7767,
7515,
7516,
7517,
7518,
7519,
7520,
7521,
7522,
7762,
8144,
8690,
8709,
12203,
12961,
17239,
19220,
23364,
}

local Itemsgrinder = {
local holeId = { 294, 369, 370, 385, 394, 411, 412, 413, 432, 433, 435, 482, 483, 594, 595, 609, 610, 615, 868, 874, 1156, 4824, 7515, 7516, 7517, 7518, 7519, 7520, 7521, 7522, 7737, 7755, 7762, 7767, 7768, 8144, 8690, 8709, 12203, 12961, 17239, 19220, 23364 }
local itemsGrinder = {
[675] = { item_id = 30004, effect = CONST_ME_BLUE_FIREWORKS }, -- Sapphire dust
[16122] = { item_id = 21507, effect = CONST_ME_GREENSMOKE }, -- Pinch of crystal dust
}

local holes = {
593,
606,
608,
867,
21341,
}

local JUNGLE_GRASS = {
3696,
3702,
17153,
}
local WILD_GROWTH = {
2130,
2130,
2982,
2524,
2030,
2029,
10182,
}

local fruits = {
3584,
3585,
3586,
3587,
3588,
3589,
3590,
3591,
3592,
3593,
3595,
3596,
5096,
8011,
8012,
8013,
}

local holes = { 593, 606, 608, 867, 21341 }
local jungleGrass = { 3696, 3702, 17153 }
local wildGrowth = { 3635, 30224 }
local fruits = { 3584, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3595, 3596, 5096, 8011, 8012, 8013 }
local lava = {
Position(32808, 32336, 11),
Position(32809, 32336, 11),
Expand Down Expand Up @@ -867,13 +773,13 @@ function onUsePick(player, item, fromPosition, target, toPosition, isHotkey)
end

function onUseMachete(player, item, fromPosition, target, toPosition, isHotkey)
if table.contains(JUNGLE_GRASS, target.itemid) then
if table.contains(jungleGrass, target.itemid) then
target:transform(target.itemid == 17153 and 17151 or target.itemid - 1)
target:decay()
return true
end

if table.contains(WILD_GROWTH, target.itemid) then
if table.contains(wildGrowth, target.itemid) then
toPosition:sendMagicEffect(CONST_ME_POFF)
target:remove()
return true
Expand Down Expand Up @@ -1035,14 +941,17 @@ function onUseScythe(player, item, fromPosition, target, toPosition, isHotkey)
target:transform(5463)
target:decay()
Game.createItem(5466, 1, toPosition)
return true
elseif target.itemid == 3653 then -- wheat
target:transform(3651)
target:decay()
Game.createItem(3605, 1, toPosition)
return true
elseif target.itemid == 30623 then -- reed
target:transform(30624)
target:decay()
Game.createItem(30975, 1, toPosition)
return true
-- The secret library
elseif toPosition == Position(32177, 31925, 7) then
player:teleportTo({ x = 32515, y = 32535, z = 12 })
Expand Down Expand Up @@ -1135,7 +1044,7 @@ function onGrindItem(player, item, fromPosition, target, toPosition)
if not (target.itemid == 21573) then
return false
end
for index, value in pairs(Itemsgrinder) do
for index, value in pairs(itemsGrinder) do
if item.itemid == index then
local topParent = item:getTopParent()
if topParent.isItem and (not topParent:isItem() or topParent.itemid ~= 470) then
Expand Down
File renamed without changes.
1 change: 1 addition & 0 deletions src/canary_server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,7 @@ void CanaryServer::loadModules() {
modulesLoadHelper(g_modules().loadFromXml(), "modules/modules.xml");

logger.debug("Loading datapack scripts on folder: {}/", datapackName);
modulesLoadHelper(g_scripts().loadScripts(datapackFolder + "/scripts/lib", true, false), datapackFolder + "/scripts/libs");
// Load scripts
modulesLoadHelper(g_scripts().loadScripts(datapackFolder + "/scripts", false, false), datapackFolder + "/scripts");
// Load monsters
Expand Down

0 comments on commit 8056ca6

Please sign in to comment.