diff --git a/data/scripts/lib/talkactions.lua b/data/scripts/lib/talkactions.lua new file mode 100644 index 0000000000..a4a8e6a49c --- /dev/null +++ b/data/scripts/lib/talkactions.lua @@ -0,0 +1,11 @@ +local logFormat = "[%s] %s %s\n" + +function logCommand(player, words, param) + local file = io.open("data/logs/" .. player:getName() .. " commands.log", "a") + if not file then + return + end + + file:write(logFormat:format(os.date("%d/%m/%Y %H:%M"), words, param:trim())) + file:close() +end diff --git a/data/talkactions/scripts/add_skill.lua b/data/scripts/talkactions/commands/add_skill.lua similarity index 90% rename from data/talkactions/scripts/add_skill.lua rename to data/scripts/talkactions/commands/add_skill.lua index e2af99e6b4..67acf48c2b 100644 --- a/data/talkactions/scripts/add_skill.lua +++ b/data/scripts/talkactions/commands/add_skill.lua @@ -1,3 +1,5 @@ +local talkaction = TalkAction("/addskill") + local function getSkillId(skillName) if skillName == "club" then return SKILL_CLUB @@ -22,7 +24,7 @@ local function getSkillId(skillName) return nil end -function onSay(player, words, param) +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -57,3 +59,6 @@ function onSay(player, words, param) target:addSkill(skillId, count) return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/add_tutor.lua b/data/scripts/talkactions/commands/add_tutor.lua similarity index 82% rename from data/talkactions/scripts/add_tutor.lua rename to data/scripts/talkactions/commands/add_tutor.lua index 782904ef9a..1a0c26464f 100644 --- a/data/talkactions/scripts/add_tutor.lua +++ b/data/scripts/talkactions/commands/add_tutor.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/addtutor") + +function talkaction.onSay(player, words, param) if player:getAccountType() <= ACCOUNT_TYPE_SENIORTUTOR then return true end @@ -19,3 +21,6 @@ function onSay(player, words, param) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have promoted " .. target:getName() .. " to a tutor.") return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/attributes.lua b/data/scripts/talkactions/commands/attributes.lua similarity index 91% rename from data/talkactions/scripts/attributes.lua rename to data/scripts/talkactions/commands/attributes.lua index ec47cfa568..522285a66c 100644 --- a/data/talkactions/scripts/attributes.lua +++ b/data/scripts/talkactions/commands/attributes.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/attr") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -46,3 +48,6 @@ function onSay(player, words, param) return false end end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/broadcast.lua b/data/scripts/talkactions/commands/broadcast.lua similarity index 68% rename from data/talkactions/scripts/broadcast.lua rename to data/scripts/talkactions/commands/broadcast.lua index d2ba260452..46e09765f5 100644 --- a/data/talkactions/scripts/broadcast.lua +++ b/data/scripts/talkactions/commands/broadcast.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/B") + +function talkaction.onSay(player, words, param) if not player:hasFlag(PlayerFlag_CanBroadcast) then return true end @@ -9,3 +11,6 @@ function onSay(player, words, param) end return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/chameleon.lua b/data/scripts/talkactions/commands/chameleon.lua similarity index 79% rename from data/talkactions/scripts/chameleon.lua rename to data/scripts/talkactions/commands/chameleon.lua index d3fcbe2f73..fa746268be 100644 --- a/data/talkactions/scripts/chameleon.lua +++ b/data/scripts/talkactions/commands/chameleon.lua @@ -1,7 +1,9 @@ +local talkaction = TalkAction("/chameleon") + local condition = Condition(CONDITION_OUTFIT, CONDITIONID_COMBAT) condition:setTicks(-1) -function onSay(player, words, param) +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -23,3 +25,6 @@ function onSay(player, words, param) player:addCondition(condition) return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/clean.lua b/data/scripts/talkactions/commands/clean.lua similarity index 75% rename from data/talkactions/scripts/clean.lua rename to data/scripts/talkactions/commands/clean.lua index 0d5f7aa951..30f5596a9e 100644 --- a/data/talkactions/scripts/clean.lua +++ b/data/scripts/talkactions/commands/clean.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/clean") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -13,3 +15,5 @@ function onSay(player, words, param) end return false end + +talkaction:register() diff --git a/data/talkactions/scripts/close_server.lua b/data/scripts/talkactions/commands/close_server.lua similarity index 70% rename from data/talkactions/scripts/close_server.lua rename to data/scripts/talkactions/commands/close_server.lua index b09af02f2e..513222804c 100644 --- a/data/talkactions/scripts/close_server.lua +++ b/data/scripts/talkactions/commands/close_server.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/closeserver") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -15,3 +17,6 @@ function onSay(player, words, param) end return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/create_item.lua b/data/scripts/talkactions/commands/create_item.lua similarity index 96% rename from data/talkactions/scripts/create_item.lua rename to data/scripts/talkactions/commands/create_item.lua index a3d9270957..d93e43f54d 100644 --- a/data/talkactions/scripts/create_item.lua +++ b/data/scripts/talkactions/commands/create_item.lua @@ -1,3 +1,5 @@ +local talkaction = TalkAction("/i") + local invalidIds = {1, 2, 3, 4, 5, 6, 7, 10, 11, 13, 14, 15, 19, 21, 26, 27, 28, 35, 43} local destinations = {"inbox", "storeinbox", "tile", "house", "depot"} @@ -61,7 +63,7 @@ local function sendPlayerItemInformation(player, data) return true end -function onSay(player, words, param) +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -150,3 +152,6 @@ function onSay(player, words, param) return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/down.lua b/data/scripts/talkactions/commands/down.lua similarity index 61% rename from data/talkactions/scripts/down.lua rename to data/scripts/talkactions/commands/down.lua index 460e0c490a..5cbbd40d3d 100644 --- a/data/talkactions/scripts/down.lua +++ b/data/scripts/talkactions/commands/down.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/down") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -8,3 +10,5 @@ function onSay(player, words, param) player:teleportTo(position) return false end + +talkaction:register() diff --git a/data/talkactions/scripts/ghost.lua b/data/scripts/talkactions/commands/ghost.lua similarity index 83% rename from data/talkactions/scripts/ghost.lua rename to data/scripts/talkactions/commands/ghost.lua index fa1fe48b06..fa92ea3dfa 100644 --- a/data/talkactions/scripts/ghost.lua +++ b/data/scripts/talkactions/commands/ghost.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/ghost") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -21,3 +23,5 @@ function onSay(player, words, param) end return false end + +talkaction:register() diff --git a/data/talkactions/scripts/hide.lua b/data/scripts/talkactions/commands/hide.lua similarity index 65% rename from data/talkactions/scripts/hide.lua rename to data/scripts/talkactions/commands/hide.lua index 1e84352f25..d4e8cf04dc 100644 --- a/data/talkactions/scripts/hide.lua +++ b/data/scripts/talkactions/commands/hide.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/hide") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -10,3 +12,5 @@ function onSay(player, words, param) player:setHiddenHealth(not player:isHealthHidden()) return false end + +talkaction:register() diff --git a/data/talkactions/scripts/info.lua b/data/scripts/talkactions/commands/info.lua similarity index 91% rename from data/talkactions/scripts/info.lua rename to data/scripts/talkactions/commands/info.lua index 4b23a248a8..eb150a2733 100644 --- a/data/talkactions/scripts/info.lua +++ b/data/scripts/talkactions/commands/info.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/info") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -35,3 +37,6 @@ function onSay(player, words, param) end return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/kick.lua b/data/scripts/talkactions/commands/kick.lua similarity index 71% rename from data/talkactions/scripts/kick.lua rename to data/scripts/talkactions/commands/kick.lua index ceb92d9b40..8817847945 100644 --- a/data/talkactions/scripts/kick.lua +++ b/data/scripts/talkactions/commands/kick.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/kick") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -17,3 +19,6 @@ function onSay(player, words, param) target:remove() return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/looktype.lua b/data/scripts/talkactions/commands/looktype.lua similarity index 94% rename from data/talkactions/scripts/looktype.lua rename to data/scripts/talkactions/commands/looktype.lua index d5c749d69e..89000db5fe 100644 --- a/data/talkactions/scripts/looktype.lua +++ b/data/scripts/talkactions/commands/looktype.lua @@ -1,3 +1,5 @@ +local talkaction = TalkAction("/looktype") + -- keep it ordered local invalidTypes = { 1, 135, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, @@ -28,7 +30,7 @@ local invalidTypes = { 1452, 1458, 1462 } -function onSay(player, words, param) +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -43,3 +45,6 @@ function onSay(player, words, param) end return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/mc_check.lua b/data/scripts/talkactions/commands/mc_check.lua similarity index 89% rename from data/talkactions/scripts/mc_check.lua rename to data/scripts/talkactions/commands/mc_check.lua index 74231c2248..8314d0d353 100644 --- a/data/talkactions/scripts/mc_check.lua +++ b/data/scripts/talkactions/commands/mc_check.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/mccheck") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -38,3 +40,5 @@ function onSay(player, words, param) end return false end + +talkaction:register() diff --git a/data/talkactions/scripts/open_server.lua b/data/scripts/talkactions/commands/open_server.lua similarity index 68% rename from data/talkactions/scripts/open_server.lua rename to data/scripts/talkactions/commands/open_server.lua index c9e0a27e86..666f18702a 100644 --- a/data/talkactions/scripts/open_server.lua +++ b/data/scripts/talkactions/commands/open_server.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/openserver") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -11,3 +13,5 @@ function onSay(player, words, param) player:sendTextMessage(MESSAGE_INFO_DESCR, "Server is now open.") return false end + +talkaction:register() diff --git a/data/talkactions/scripts/owner.lua b/data/scripts/talkactions/commands/owner.lua similarity index 81% rename from data/talkactions/scripts/owner.lua rename to data/scripts/talkactions/commands/owner.lua index ce4dd80460..0f4cff83a0 100644 --- a/data/talkactions/scripts/owner.lua +++ b/data/scripts/talkactions/commands/owner.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/owner") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -28,3 +30,6 @@ function onSay(player, words, param) house:setOwnerGuid(targetPlayer:getGuid()) return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/place_monster.lua b/data/scripts/talkactions/commands/place_monster.lua similarity index 78% rename from data/talkactions/scripts/place_monster.lua rename to data/scripts/talkactions/commands/place_monster.lua index b83aadd2bb..4f99be6876 100644 --- a/data/talkactions/scripts/place_monster.lua +++ b/data/scripts/talkactions/commands/place_monster.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/m") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -18,3 +20,6 @@ function onSay(player, words, param) end return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/place_npc.lua b/data/scripts/talkactions/commands/place_npc.lua similarity index 76% rename from data/talkactions/scripts/place_npc.lua rename to data/scripts/talkactions/commands/place_npc.lua index 7270c9bec6..a083e6b4b1 100644 --- a/data/talkactions/scripts/place_npc.lua +++ b/data/scripts/talkactions/commands/place_npc.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/s") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -18,3 +20,6 @@ function onSay(player, words, param) end return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/place_summon.lua b/data/scripts/talkactions/commands/place_summon.lua similarity index 76% rename from data/talkactions/scripts/place_summon.lua rename to data/scripts/talkactions/commands/place_summon.lua index d5562e0ec0..0ec3745a3f 100644 --- a/data/talkactions/scripts/place_summon.lua +++ b/data/scripts/talkactions/commands/place_summon.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/summon") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -18,3 +20,6 @@ function onSay(player, words, param) end return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/reload.lua b/data/scripts/talkactions/commands/reload.lua similarity index 93% rename from data/talkactions/scripts/reload.lua rename to data/scripts/talkactions/commands/reload.lua index 35c8cabafa..c6ae043bbe 100644 --- a/data/talkactions/scripts/reload.lua +++ b/data/scripts/talkactions/commands/reload.lua @@ -1,3 +1,5 @@ +local talkaction = TalkAction("/reload") + local reloadTypes = { ["all"] = RELOAD_TYPE_ALL, @@ -53,7 +55,7 @@ local reloadTypes = { ["libs"] = RELOAD_TYPE_GLOBAL } -function onSay(player, words, param) +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -85,3 +87,6 @@ function onSay(player, words, param) player:sendTextMessage(MESSAGE_INFO_DESCR, string.format("Reloaded %s.", param:lower())) return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/remove_thing.lua b/data/scripts/talkactions/commands/remove_thing.lua similarity index 84% rename from data/talkactions/scripts/remove_thing.lua rename to data/scripts/talkactions/commands/remove_thing.lua index 8216e03ba8..f360a6e329 100644 --- a/data/talkactions/scripts/remove_thing.lua +++ b/data/scripts/talkactions/commands/remove_thing.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/r") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -31,3 +33,6 @@ function onSay(player, words, param) position:sendMagicEffect(CONST_ME_MAGIC_RED) return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/remove_tutor.lua b/data/scripts/talkactions/commands/remove_tutor.lua similarity index 87% rename from data/talkactions/scripts/remove_tutor.lua rename to data/scripts/talkactions/commands/remove_tutor.lua index 033eaf5ec2..d6d222a768 100644 --- a/data/talkactions/scripts/remove_tutor.lua +++ b/data/scripts/talkactions/commands/remove_tutor.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/removetutor") + +function talkaction.onSay(player, words, param) if player:getAccountType() <= ACCOUNT_TYPE_SENIORTUTOR then return true end @@ -26,3 +28,6 @@ function onSay(player, words, param) result.free(resultId) return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/teleport_creature_here.lua b/data/scripts/talkactions/commands/teleport_creature_here.lua similarity index 83% rename from data/talkactions/scripts/teleport_creature_here.lua rename to data/scripts/talkactions/commands/teleport_creature_here.lua index ea36919913..e4cb6ead8f 100644 --- a/data/talkactions/scripts/teleport_creature_here.lua +++ b/data/scripts/talkactions/commands/teleport_creature_here.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/c") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -22,3 +24,6 @@ function onSay(player, words, param) end return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/teleport_home.lua b/data/scripts/talkactions/commands/teleport_home.lua similarity index 56% rename from data/talkactions/scripts/teleport_home.lua rename to data/scripts/talkactions/commands/teleport_home.lua index 64852301d0..3af8d93bb2 100644 --- a/data/talkactions/scripts/teleport_home.lua +++ b/data/scripts/talkactions/commands/teleport_home.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/t") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -6,3 +8,5 @@ function onSay(player, words, param) player:teleportTo(player:getTown():getTemplePosition()) return false end + +talkaction:register() diff --git a/data/talkactions/scripts/teleport_n_tiles.lua b/data/scripts/talkactions/commands/teleport_n_tiles.lua similarity index 76% rename from data/talkactions/scripts/teleport_n_tiles.lua rename to data/scripts/talkactions/commands/teleport_n_tiles.lua index 28cbccb0f5..63aadffa23 100644 --- a/data/talkactions/scripts/teleport_n_tiles.lua +++ b/data/scripts/talkactions/commands/teleport_n_tiles.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/a") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -20,3 +22,6 @@ function onSay(player, words, param) player:teleportTo(position) return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/teleport_to_creature.lua b/data/scripts/talkactions/commands/teleport_to_creature.lua similarity index 62% rename from data/talkactions/scripts/teleport_to_creature.lua rename to data/scripts/talkactions/commands/teleport_to_creature.lua index d8f7996022..046e558504 100644 --- a/data/talkactions/scripts/teleport_to_creature.lua +++ b/data/scripts/talkactions/commands/teleport_to_creature.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/goto") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -11,3 +13,6 @@ function onSay(player, words, param) end return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/teleport_to_town.lua b/data/scripts/talkactions/commands/teleport_to_town.lua similarity index 64% rename from data/talkactions/scripts/teleport_to_town.lua rename to data/scripts/talkactions/commands/teleport_to_town.lua index ab0664f5d6..69b48b96ac 100644 --- a/data/talkactions/scripts/teleport_to_town.lua +++ b/data/scripts/talkactions/commands/teleport_to_town.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/town") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -11,3 +13,6 @@ function onSay(player, words, param) end return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/up.lua b/data/scripts/talkactions/commands/up.lua similarity index 62% rename from data/talkactions/scripts/up.lua rename to data/scripts/talkactions/commands/up.lua index c48bfd726f..21cf5e887e 100644 --- a/data/talkactions/scripts/up.lua +++ b/data/scripts/talkactions/commands/up.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("/up") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -8,3 +10,5 @@ function onSay(player, words, param) player:teleportTo(position) return false end + +talkaction:register() diff --git a/data/talkactions/scripts/buy_house.lua b/data/scripts/talkactions/house/buy_house.lua similarity index 92% rename from data/talkactions/scripts/buy_house.lua rename to data/scripts/talkactions/house/buy_house.lua index 8d146c3c4e..9a7e52b6a7 100644 --- a/data/talkactions/scripts/buy_house.lua +++ b/data/scripts/talkactions/house/buy_house.lua @@ -3,7 +3,9 @@ local config = { onlyPremium = true } -function onSay(player, words, param) +local talkaction = TalkAction("!buyhouse") + +function talkaction.onSay(player, words, param) local housePrice = configManager.getNumber(configKeys.HOUSE_PRICE) if housePrice == -1 then return true @@ -49,3 +51,5 @@ function onSay(player, words, param) player:sendTextMessage(MESSAGE_INFO_DESCR, "You have successfully bought this house, be sure to have the money for the rent in the bank.") return false end + +talkaction:register() diff --git a/data/talkactions/scripts/leave_house.lua b/data/scripts/talkactions/house/leave_house.lua similarity index 83% rename from data/talkactions/scripts/leave_house.lua rename to data/scripts/talkactions/house/leave_house.lua index ea5fdb5ef3..314e30ddc0 100644 --- a/data/talkactions/scripts/leave_house.lua +++ b/data/scripts/talkactions/house/leave_house.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("!leavehouse") + +function talkaction.onSay(player, words, param) local position = player:getPosition() local tile = Tile(position) local house = tile and tile:getHouse() @@ -19,3 +21,5 @@ function onSay(player, words, param) position:sendMagicEffect(CONST_ME_POFF) return false end + +talkaction:register() diff --git a/data/talkactions/scripts/sell_house.lua b/data/scripts/talkactions/house/sell_house.lua similarity index 77% rename from data/talkactions/scripts/sell_house.lua rename to data/scripts/talkactions/house/sell_house.lua index 525d71c529..750fd24539 100644 --- a/data/talkactions/scripts/sell_house.lua +++ b/data/scripts/talkactions/house/sell_house.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("!sellhouse") + +function talkaction.onSay(player, words, param) local tradePartner = Player(param) if not tradePartner or tradePartner == player then player:sendCancelMessage("Trade player not found.") @@ -17,3 +19,6 @@ function onSay(player, words, param) end return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/buy_premium.lua b/data/scripts/talkactions/player/buy_premium.lua similarity index 87% rename from data/talkactions/scripts/buy_premium.lua rename to data/scripts/talkactions/player/buy_premium.lua index 821f758e72..16ba6e28ff 100644 --- a/data/talkactions/scripts/buy_premium.lua +++ b/data/scripts/talkactions/player/buy_premium.lua @@ -1,10 +1,12 @@ +local talkaction = TalkAction("!buypremium") + local config = { days = 90, maxDays = 365, price = 10000 } -function onSay(player, words, param) +function talkaction.onSay(player, words, param) if configManager.getBoolean(configKeys.FREE_PREMIUM) then return true end @@ -23,3 +25,5 @@ function onSay(player, words, param) end return false end + +talkaction:register() diff --git a/data/talkactions/scripts/change_sex.lua b/data/scripts/talkactions/player/change_sex.lua similarity index 87% rename from data/talkactions/scripts/change_sex.lua rename to data/scripts/talkactions/player/change_sex.lua index 3b71fe0ccb..7010db2e3e 100644 --- a/data/talkactions/scripts/change_sex.lua +++ b/data/scripts/talkactions/player/change_sex.lua @@ -1,6 +1,8 @@ +local talkaction = TalkAction("!changesex") + local premiumDaysCost = 3 -function onSay(player, words, param) +function talkaction.onSay(player, words, param) if player:getGroup():getAccess() then player:setSex(player:getSex() == PLAYERSEX_FEMALE and PLAYERSEX_MALE or PLAYERSEX_FEMALE) player:sendTextMessage(MESSAGE_INFO_DESCR, "You have changed your sex.") @@ -17,3 +19,5 @@ function onSay(player, words, param) end return false end + +talkaction:register() diff --git a/data/talkactions/scripts/death_list.lua b/data/scripts/talkactions/player/death_list.lua similarity index 93% rename from data/talkactions/scripts/death_list.lua rename to data/scripts/talkactions/player/death_list.lua index c2d96cbc03..234eed8b92 100644 --- a/data/talkactions/scripts/death_list.lua +++ b/data/scripts/talkactions/player/death_list.lua @@ -1,3 +1,5 @@ +local talkaction = TalkAction("!deathlist") + local function getArticle(str) return str:find("[AaEeIiOoUuYy]") == 1 and "an" or "a" end @@ -17,7 +19,7 @@ local function getMonthString(m) return os.date("%B", os.time{year = 1970, month = m, day = 1}) end -function onSay(player, words, param) +function talkaction.onSay(player, words, param) local resultId = db.storeQuery("SELECT `id`, `name` FROM `players` WHERE `name` = " .. db.escapeString(param)) if resultId then local targetGUID = result.getNumber(resultId, "id") @@ -59,3 +61,6 @@ function onSay(player, words, param) end return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/kills.lua b/data/scripts/talkactions/player/kills.lua similarity index 92% rename from data/talkactions/scripts/kills.lua rename to data/scripts/talkactions/player/kills.lua index d04df77d08..004e2f8197 100644 --- a/data/talkactions/scripts/kills.lua +++ b/data/scripts/talkactions/player/kills.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("!kills") + +function talkaction.onSay(player, words, param) local fragTime = configManager.getNumber(configKeys.FRAG_TIME) if fragTime <= 0 then player:sendTextMessage(MESSAGE_INFO_DESCR, "You do not have any unjustified kill.") @@ -44,3 +46,5 @@ function onSay(player, words, param) player:sendTextMessage(MESSAGE_INFO_DESCR, message) return false end + +talkaction:register() diff --git a/data/talkactions/scripts/online.lua b/data/scripts/talkactions/player/online.lua similarity index 84% rename from data/talkactions/scripts/online.lua rename to data/scripts/talkactions/player/online.lua index 09c79c9dbf..07b32511c5 100644 --- a/data/talkactions/scripts/online.lua +++ b/data/scripts/talkactions/player/online.lua @@ -1,6 +1,8 @@ +local talkaction = TalkAction("!online", "/online") + local maxPlayersPerMessage = 10 -function onSay(player, words, param) +function talkaction.onSay(player, words, param) local players = Game.getPlayers() local onlineList = {} @@ -20,3 +22,5 @@ function onSay(player, words, param) end return false end + +talkaction:register() diff --git a/data/talkactions/scripts/server_info.lua b/data/scripts/talkactions/player/server_info.lua similarity index 75% rename from data/talkactions/scripts/server_info.lua rename to data/scripts/talkactions/player/server_info.lua index fc6cc7a713..a24483ffff 100644 --- a/data/talkactions/scripts/server_info.lua +++ b/data/scripts/talkactions/player/server_info.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("!serverinfo") + +function talkaction.onSay(player, words, param) player:sendTextMessage(MESSAGE_INFO_DESCR, "Server Info:" .. "\nExp rate: " .. Game.getExperienceStage(player:getLevel()) .. "\nSkill rate: " .. configManager.getNumber(configKeys.RATE_SKILL) @@ -6,3 +8,5 @@ function onSay(player, words, param) .. "\nLoot rate: " .. configManager.getNumber(configKeys.RATE_LOOT)) return false end + +talkaction:register() diff --git a/data/talkactions/scripts/uptime.lua b/data/scripts/talkactions/player/uptime.lua similarity index 69% rename from data/talkactions/scripts/uptime.lua rename to data/scripts/talkactions/player/uptime.lua index b77f76daac..090f6e10e9 100644 --- a/data/talkactions/scripts/uptime.lua +++ b/data/scripts/talkactions/player/uptime.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("!uptime") + +function talkaction.onSay(player, words, param) local uptime = getWorldUpTime() local hours = math.floor(uptime / 3600) @@ -6,3 +8,5 @@ function onSay(player, words, param) player:sendTextMessage(MESSAGE_INFO_DESCR, "Uptime: " .. hours .. " hours and " .. minutes .. " minutes.") return false end + +talkaction:register() diff --git a/data/talkactions/scripts/animation_effect.lua b/data/scripts/talkactions/test/animation_effect.lua similarity index 85% rename from data/talkactions/scripts/animation_effect.lua rename to data/scripts/talkactions/test/animation_effect.lua index ba55558ce2..f1f9f78135 100644 --- a/data/talkactions/scripts/animation_effect.lua +++ b/data/scripts/talkactions/test/animation_effect.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("!x") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -27,3 +29,6 @@ function onSay(player, words, param) end return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/talkactions/scripts/magic_effect.lua b/data/scripts/talkactions/test/magic_effect.lua similarity index 59% rename from data/talkactions/scripts/magic_effect.lua rename to data/scripts/talkactions/test/magic_effect.lua index 0eb873c36c..35cae684fa 100644 --- a/data/talkactions/scripts/magic_effect.lua +++ b/data/scripts/talkactions/test/magic_effect.lua @@ -1,4 +1,6 @@ -function onSay(player, words, param) +local talkaction = TalkAction("!z") + +function talkaction.onSay(player, words, param) if not player:getGroup():getAccess() then return true end @@ -10,3 +12,6 @@ function onSay(player, words, param) return false end + +talkaction:separator(" ") +talkaction:register() diff --git a/data/scripts/xml/talkactions.lua b/data/scripts/xml/talkactions.lua new file mode 100644 index 0000000000..4be79ff6bb --- /dev/null +++ b/data/scripts/xml/talkactions.lua @@ -0,0 +1,69 @@ +-- If you don't intend to use talkactions.xml, you can delete this file. + +local function configureTalkActionEvent(node) + local talkactionWords = node:attribute("words") + if not talkactionWords then + io.write("[Error] Missing attribute words for talkaction.\n") + return nil + end + + local words = {} + for word in talkactionWords:gmatch("([^;]+)") do + table.insert(words, word) + end + + local separator = node:attribute("separator") + + local script = node:attribute("script") + if not script then + io.write("[Error] Missing attribute script, check data/talkactions/scripts/" .. filename .. "\n") + return nil + end + + local scriptFile = "data/talkactions/scripts/" .. script + + local env = {} + for k, v in pairs(_G) do + env[k] = v + end + + local f = assert(loadfile(scriptFile, "bt", env)) + f() + + if not env.onSay then + io.write("[Error] Can not load talkaction script, check " .. scriptFile .. " for a missing onSay callback\n") + return nil + end + + local talkaction = TalkAction(table.unpack(words)) + if separator then + talkaction:separator(separator) + end + talkaction.onSay = env.onSay + return talkaction +end + +local function loadXMLTalkActions() + local doc = XMLDocument("data/talkactions/talkactions.xml") + if not doc then + io.write("[Warning - Scripts::XML::loadXMLTalkActions] Could not load talkactions.xml.\n") + return + end + + local talkactions = doc:child("talkactions") + + io.write(">> Loading legacy XML talkactions from data/talkactions/talkactions.xml...\n") + + local loaded, start = 0, os.mtime() + for node in talkactions:children() do + local talkaction = configureTalkActionEvent(node) + if talkaction then + talkaction:register() + loaded = loaded + 1 + end + end + + io.write(">> Loaded " .. loaded .. " talkactions in " .. os.mtime() - start .. "ms.\n") +end + +loadXMLTalkActions() diff --git a/data/talkactions/lib/talkactions.lua b/data/talkactions/lib/talkactions.lua index a4a8e6a49c..c58a77a390 100644 --- a/data/talkactions/lib/talkactions.lua +++ b/data/talkactions/lib/talkactions.lua @@ -1,11 +1 @@ -local logFormat = "[%s] %s %s\n" - -function logCommand(player, words, param) - local file = io.open("data/logs/" .. player:getName() .. " commands.log", "a") - if not file then - return - end - - file:write(logFormat:format(os.date("%d/%m/%Y %H:%M"), words, param:trim())) - file:close() -end +-- See data/scripts/lib/talkactions.lua diff --git a/data/talkactions/talkactions.xml b/data/talkactions/talkactions.xml index bad913122b..6ee6a374aa 100644 --- a/data/talkactions/talkactions.xml +++ b/data/talkactions/talkactions.xml @@ -1,49 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/src/scriptmanager.cpp b/src/scriptmanager.cpp index c33d2071bc..5445d5fa35 100644 --- a/src/scriptmanager.cpp +++ b/src/scriptmanager.cpp @@ -70,12 +70,7 @@ bool ScriptingManager::loadScriptSystems() } g_actions = new Actions(); - g_talkActions = new TalkActions(); - if (!g_talkActions->loadFromXml()) { - std::cout << "> ERROR: Unable to load talk actions!" << std::endl; - return false; - } g_moveEvents = new MoveEvents(); if (!g_moveEvents->loadFromXml()) { diff --git a/src/talkaction.cpp b/src/talkaction.cpp index 25c5da7b72..c561b80984 100644 --- a/src/talkaction.cpp +++ b/src/talkaction.cpp @@ -116,25 +116,6 @@ TalkActionResult_t TalkActions::playerSaySpell(Player* player, SpeakClasses type return TALKACTION_CONTINUE; } -bool TalkAction::configureEvent(const pugi::xml_node& node) -{ - pugi::xml_attribute wordsAttribute = node.attribute("words"); - if (!wordsAttribute) { - std::cout << "[Error - TalkAction::configureEvent] Missing words for talk action or spell" << std::endl; - return false; - } - - pugi::xml_attribute separatorAttribute = node.attribute("separator"); - if (separatorAttribute) { - separator = separatorAttribute.as_string(); - } - - for (auto word : explodeString(wordsAttribute.as_string(), ";")) { - setWords(word); - } - return true; -} - bool TalkAction::executeSay(Player* player, const std::string& words, const std::string& param, SpeakClasses type) const { // onSay(player, words, param, type) diff --git a/src/talkaction.h b/src/talkaction.h index 4b28912a67..8d04531731 100644 --- a/src/talkaction.h +++ b/src/talkaction.h @@ -23,7 +23,7 @@ class TalkAction : public Event public: explicit TalkAction(LuaScriptInterface* interface) : Event(interface) {} - bool configureEvent(const pugi::xml_node& node) override; + bool configureEvent(const pugi::xml_node&) override { return false; } const std::string& getWords() const { return words; } const std::vector& getWordsMap() const { return wordsMap; }