Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: datapacks tools actions #2851

Merged
merged 2 commits into from
Aug 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
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
Loading