mirror of
https://github.com/Znote/ZnoteAAC.git
synced 2025-10-14 10:14:55 +02:00
A few Lua scripts updates, converted Lua scripts to RevScriptSys (#431)
- changed folder name from LUA to Lua - Added installation instructions - fixed playerdeath variables (fixes #430) - Added outfit IDs up to Jouster outfit to the sync outfit script - Removed unecessary instruction - Added revscriptsys version of all scripts
This commit is contained in:
118
Lua/TFS_03/talkaction shopsystem/Alternatives/znoteshop.lua
Normal file
118
Lua/TFS_03/talkaction shopsystem/Alternatives/znoteshop.lua
Normal file
@@ -0,0 +1,118 @@
|
||||
-- Znote Shop v1.1 for Znote AAC on TFS 0.3.6+ Crying Damson. [Alternative]
|
||||
function onSay(cid, words, param)
|
||||
local storage = 54073 -- Make sure to select non-used storage. This is used to prevent SQL load attacks.
|
||||
local cooldown = 15 -- in seconds.
|
||||
|
||||
if getPlayerStorageValue(cid, storage) <= os.time() then
|
||||
setPlayerStorageValue(cid, storage, os.time() + cooldown)
|
||||
local accid = getAccountNumberByPlayerName(getCreatureName(cid))
|
||||
|
||||
local type_desc = {
|
||||
"itemids",
|
||||
"pending premium (skip)",
|
||||
"pending gender change (skip)",
|
||||
"pending character name change (skip)",
|
||||
"Outfit and addons",
|
||||
"Mounts",
|
||||
"Instant house purchase"
|
||||
}
|
||||
print("Player: " .. getCreatureName(cid) .. " triggered !shop talkaction.")
|
||||
-- Create the query
|
||||
local orderQuery = db.storeQuery("SELECT `id`, `type`, `itemid`, `count` FROM `znote_shop_orders` WHERE `account_id` = " .. accid .. ";")
|
||||
local served = false
|
||||
|
||||
-- Detect if we got any results
|
||||
if orderQuery ~= false then
|
||||
repeat
|
||||
-- Fetch order values
|
||||
local q_id = result.getDataInt(orderQuery, "id")
|
||||
local q_type = result.getDataInt(orderQuery, "type")
|
||||
local q_itemid = result.getDataInt(orderQuery, "itemid")
|
||||
local q_count = result.getDataInt(orderQuery, "count")
|
||||
|
||||
local description = "Unknown or custom type"
|
||||
if type_desc[q_type] ~= nil then
|
||||
description = type_desc[q_type]
|
||||
end
|
||||
print("Processing type "..q_type..": ".. description)
|
||||
|
||||
-- ORDER TYPE 1 (Regular item shop products)
|
||||
if q_type == 1 then
|
||||
served = true
|
||||
-- Get wheight
|
||||
local playerCap = getPlayerFreeCap(cid)
|
||||
local itemweight = getItemWeightById(q_itemid, q_count)
|
||||
if playerCap >= itemweight then
|
||||
local delete = db.storeQuery("DELETE FROM `znote_shop_orders` WHERE `id` = " .. q_id .. ";")
|
||||
result.free(delete)
|
||||
doPlayerAddItem(cid, q_itemid, q_count)
|
||||
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Congratulations! You have recieved ".. q_count .." "..getItemNameById(q_itemid).."(s)!")
|
||||
else
|
||||
doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Need more CAP!")
|
||||
end
|
||||
end
|
||||
-- ORDER TYPE 5 (Outfit and addon)
|
||||
if q_type == 5 then
|
||||
served = true
|
||||
|
||||
local itemid = q_itemid
|
||||
local outfits = {}
|
||||
|
||||
if itemid > 1000 then
|
||||
local first = math.floor(itemid/1000)
|
||||
table.insert(outfits, first)
|
||||
itemid = itemid - (first * 1000)
|
||||
end
|
||||
table.insert(outfits, itemid)
|
||||
|
||||
for _, outfitId in pairs(outfits) do
|
||||
-- Make sure player don't already have this outfit and addon
|
||||
if not canPlayerWearOutfit(cid, outfitId, q_count) then
|
||||
local delete = db.storeQuery("DELETE FROM `znote_shop_orders` WHERE `id` = " .. q_id .. ";")
|
||||
result.free(delete)
|
||||
doPlayerAddOutfit(cid,outfitId,q_count)
|
||||
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Congratulations! You have received a new outfit!")
|
||||
else
|
||||
doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "You already have this outfit and addon!")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- ORDER TYPE 6 (Mounts)
|
||||
if q_type == 6 then
|
||||
served = true
|
||||
-- Make sure player don't already have this outfit and addon
|
||||
if not getPlayerMount(cid, q_itemid) then -- Failed to find a proper hasMount 0.3 function?
|
||||
local delete = db.storeQuery("DELETE FROM `znote_shop_orders` WHERE `id` = " .. q_id .. ";")
|
||||
result.free(delete)
|
||||
doPlayerAddMount(cid, q_itemid)
|
||||
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Congratulations! You have received a new mount!")
|
||||
else
|
||||
doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "You already have this mount!")
|
||||
end
|
||||
end
|
||||
|
||||
-- Add custom order types here
|
||||
-- Type 1 is for itemids (Already coded here)
|
||||
-- Type 2 is for premium (Coded on web)
|
||||
-- Type 3 is for gender change (Coded on web)
|
||||
-- Type 4 is for character name change (Coded on web)
|
||||
-- Type 5 is for character outfit and addon (Already coded here)
|
||||
-- Type 6 is for mounts (Already coded here)
|
||||
-- Type 7 is for Instant house purchase (Not for TFS 0.3)
|
||||
-- So use type 8+ for custom stuff, like etc packages.
|
||||
-- if q_type == 8 then
|
||||
-- end
|
||||
until not result.next(orderQuery)
|
||||
result.free(orderQuery)
|
||||
if not served then
|
||||
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have no orders to process in-game.")
|
||||
end
|
||||
else
|
||||
doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "You have no orders.")
|
||||
end
|
||||
else
|
||||
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Can only be executed once every "..cooldown.." seconds. Remaining cooldown: ".. getPlayerStorageValue(cid, storage) - os.time())
|
||||
end
|
||||
return false
|
||||
end
|
1
Lua/TFS_03/talkaction shopsystem/talkaction XML.txt
Normal file
1
Lua/TFS_03/talkaction shopsystem/talkaction XML.txt
Normal file
@@ -0,0 +1 @@
|
||||
<talkaction words="!shop" event="script" value="znoteshop.lua"/>
|
128
Lua/TFS_03/talkaction shopsystem/znoteshop.lua
Normal file
128
Lua/TFS_03/talkaction shopsystem/znoteshop.lua
Normal file
@@ -0,0 +1,128 @@
|
||||
-- Znote Shop v1.1 for Znote AAC on TFS 0.3.6+ Crying Damson.
|
||||
function onSay(cid, words, param)
|
||||
local storage = 54073 -- Make sure to select non-used storage. This is used to prevent SQL load attacks.
|
||||
local cooldown = 15 -- in seconds.
|
||||
|
||||
if getPlayerStorageValue(cid, storage) <= os.time() then
|
||||
setPlayerStorageValue(cid, storage, os.time() + cooldown)
|
||||
local accid = getAccountNumberByPlayerName(getCreatureName(cid))
|
||||
|
||||
local type_desc = {
|
||||
"itemids",
|
||||
"pending premium (skip)",
|
||||
"pending gender change (skip)",
|
||||
"pending character name change (skip)",
|
||||
"Outfit and addons",
|
||||
"Mounts",
|
||||
"Instant house purchase"
|
||||
}
|
||||
print("Player: " .. getCreatureName(cid) .. " triggered !shop talkaction.")
|
||||
-- Create the query
|
||||
local orderQuery = db.storeQuery("SELECT `id`, `type`, `itemid`, `count` FROM `znote_shop_orders` WHERE `account_id` = " .. accid .. ";")
|
||||
local served = false
|
||||
|
||||
-- Detect if we got any results
|
||||
if orderQuery ~= false then
|
||||
repeat
|
||||
-- Fetch order values
|
||||
local q_id = result.getDataInt(orderQuery, "id")
|
||||
local q_type = result.getDataInt(orderQuery, "type")
|
||||
local q_itemid = result.getDataInt(orderQuery, "itemid")
|
||||
local q_count = result.getDataInt(orderQuery, "count")
|
||||
|
||||
local description = "Unknown or custom type"
|
||||
if type_desc[q_type] ~= nil then
|
||||
description = type_desc[q_type]
|
||||
end
|
||||
print("Processing type "..q_type..": ".. description)
|
||||
|
||||
-- ORDER TYPE 1 (Regular item shop products)
|
||||
if q_type == 1 then
|
||||
served = true
|
||||
-- Get weight
|
||||
local playerCap = getPlayerFreeCap(cid)
|
||||
local itemweight = getItemWeightById(q_itemid, q_count)
|
||||
if playerCap >= itemweight and getTileInfo(getCreaturePosition(cid)).protection then
|
||||
-- backpack check
|
||||
local backpack = getPlayerSlotItem(cid, 3)
|
||||
local gotItem = false
|
||||
if(backpack and backpack.itemid > 0) then
|
||||
local received = doAddContainerItem(getPlayerSlotItem(cid, 3).uid, q_itemid,q_count)
|
||||
if(received ~= false) then
|
||||
db.executeQuery("DELETE FROM `znote_shop_orders` WHERE `id` = " .. q_id .. ";")
|
||||
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Congratulations! You have received ".. q_count .." "..getItemNameById(q_itemid).."(s)!")
|
||||
gotItem = true
|
||||
end
|
||||
end
|
||||
|
||||
if(not gotItem) then
|
||||
doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "You have no available space in backpack to receive that item.")
|
||||
end
|
||||
else
|
||||
doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Need more CAP and Need ProtectZone!")
|
||||
end
|
||||
end
|
||||
-- ORDER TYPE 5 (Outfit and addon)
|
||||
if q_type == 5 then
|
||||
served = true
|
||||
|
||||
local itemid = q_itemid
|
||||
local outfits = {}
|
||||
|
||||
if itemid > 1000 then
|
||||
local first = math.floor(itemid/1000)
|
||||
table.insert(outfits, first)
|
||||
itemid = itemid - (first * 1000)
|
||||
end
|
||||
table.insert(outfits, itemid)
|
||||
|
||||
for _, outfitId in pairs(outfits) do
|
||||
-- Make sure player don't already have this outfit and addon
|
||||
if not canPlayerWearOutfit(cid, outfitId, q_count) then
|
||||
db.executeQuery("DELETE FROM `znote_shop_orders` WHERE `id` = " .. q_id .. ";")
|
||||
doPlayerAddOutfit(cid,outfitId,q_count)
|
||||
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Congratulations! You have received a new outfit!")
|
||||
else
|
||||
doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "You already have this outfit and addon!")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- ORDER TYPE 6 (Mounts)
|
||||
if q_type == 6 then
|
||||
served = true
|
||||
-- Make sure player don't already have this outfit and addon
|
||||
if not getPlayerMount(cid, q_itemid) then -- Failed to find a proper hasMount 0.3 function?
|
||||
db.executeQuery("DELETE FROM `znote_shop_orders` WHERE `id` = " .. q_id .. ";")
|
||||
doPlayerAddMount(cid, q_itemid)
|
||||
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Congratulations! You have received a new mount!")
|
||||
else
|
||||
doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "You already have this mount!")
|
||||
end
|
||||
end
|
||||
|
||||
-- Add custom order types here
|
||||
-- Type 1 is for itemids (Already coded here)
|
||||
-- Type 2 is for premium (Coded on web)
|
||||
-- Type 3 is for gender change (Coded on web)
|
||||
-- Type 4 is for character name change (Coded on web)
|
||||
-- Type 5 is for character outfit and addon (Already coded here)
|
||||
-- Type 6 is for mounts (Already coded here)
|
||||
-- Type 7 is for Instant house purchase (Not for TFS 0.3)
|
||||
-- So use type 8+ for custom stuff, like etc packages.
|
||||
-- if q_type == 8 then
|
||||
-- end
|
||||
until not result.next(orderQuery)
|
||||
result.free(orderQuery)
|
||||
if not served then
|
||||
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have no orders to process in-game.")
|
||||
end
|
||||
else
|
||||
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have no orders.")
|
||||
end
|
||||
|
||||
else
|
||||
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Can only be executed once every "..cooldown.." seconds. Remaining cooldown: ".. getPlayerStorageValue(cid, storage) - os.time())
|
||||
end
|
||||
return false
|
||||
end
|
Reference in New Issue
Block a user