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; }