• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

[MyAAC][Plugin] Gesior Shop System

hello i have installed the latest gesior shop system from my-aac page but now when i click the PayPal button nothing happens, also the buttons on Gifts page doesnt respond

1738595155514.webp

1738595184852.webp
 
hello i have installed the latest gesior shop system from my-aac page but now when i click the PayPal button nothing happens, also the buttons on Gifts page doesnt respond

View attachment 89973

View attachment 89974

Hello,

is that localhost or can I reach your website over internet? If so, show me the link, so I can look. If you do not wish to post it publicly, then write me private message.

I think you installed wrong gesior shop for your myaac.

6.0.3 is for 1.0+
and
5.0.2 is for 0.8
 
hello i have installed the latest gesior shop system from my-aac page but now when i click the PayPal button nothing happens, also the buttons on Gifts page doesnt respond

View attachment 89973

View attachment 89974

So, your problem is with nginx configuration.

You need to adjust following line:
Code:
try_files $uri $uri/ /index.php?$query_string;

The ?query_string is important.
 
Last edited:
Hello, I have a problem when I wait for an item from the shop, an error appears in the console

1739703354935.webp
2025-02-16 11:11:54 - >> Shopsystem, added 0 items. Still waiting with 11 items.
2025-02-16 11:11:54 - >> Shopsystem, added 0 items. Still waiting with 11 items.
2025-02-16 11:11:54 - >> Shopsystem, added 0 items. Still waiting with 11 items.


gesior-shop-system-revscript.lua

LUA:
--[[
    Gesior Shop System Revscript v3.0

    Originally written by Gesior, modified by slawkens for MyAAC.
    This script works with TFS 1.3+, otservbr-global and canary
]]--

local messageType = MESSAGE_EVENT_ADVANCE

-- don't edit anything below this line
if(not messageType) then
    messageType = MESSAGE_STATUS_CONSOLE_ORANGE
    if(not messageType) then
        messageType = MESSAGE_EVENT_ADVANCE
    end
end

function getResults()
    local resultId = db.storeQuery("SELECT * FROM z_ots_comunication;")
    if(resultId == false) then
        return false
    end

    local results = {}
    repeat
        local tmp = {}
        tmp.name = result.getString(resultId, "name")

        -- better performance when no player found
        tmp.exist = false
        tmp.player = nil

        local player = Player(tmp.name)
        if(player) then
            tmp.exist = true
            tmp.player = player

            tmp.id = result.getNumber(resultId, "id")
            tmp.action = result.getString(resultId, "action")
            tmp.delete_it = result.getNumber(resultId, "delete_it")

            tmp.param1 = result.getNumber(resultId, "param1")
            tmp.param2 = result.getNumber(resultId, "param2")
            tmp.param3 = result.getNumber(resultId, "param3")
            tmp.param4 = result.getNumber(resultId, "param4")
            tmp.param5 = result.getString(resultId, "param5")
            tmp.param6 = result.getString(resultId, "param6")
        end

        table.insert(results, tmp)
    until not result.next(resultId)
    result.free(resultId)

    return results
end

local shopSystemGlobalEvent = GlobalEvent("myaac-gesior-shop-system")
function shopSystemGlobalEvent.onThink(interval)
    interval = interval / 1000

    local started = os.mtime and os.mtime() or os.time()
    local addedItems, waitingItems = 0, 0
    local added = false

    local results = getResults()
    if(not results) then
        return true
    end

    for i, v in ipairs(results) do
        added = false
        local id = v.id
        local action = v.action
        local delete = v.delete_it

        if(v.exist) then
            local player = v.player
            local param1, param2, param3, param4 = v.param1, v.param2, v.param3, v.param4
            local add_item_type = v.param5
            local add_item_name = v.param6
            local received_item, full_weight, items_weight, item_weigth = 0, 0, 0, 0
            local item_doesnt_exist = false

            if(add_item_type == 'container' or add_item_type == 'item') then
                local itemType = ItemType(param1)
                if(not itemType) then -- item doesn't exist
                    print("[ERROR - gesior-shop-system] Invalid item id: " .. param1 .. ". Change/Fix `itemid1` in `z_shop_offers` then delete it from `z_ots_comunication`")
                    item_doesnt_exist = true
                else
                    local item_weigth = itemType:getWeight()
                    if(add_item_type == 'container') then
                        local containerItemType = ItemType(param3)
                        if(not containerItemType) then -- container item doesn't exist
                            print("[ERROR - gesior-shop-system] Invalid container id: " .. param3 .. ". Change/Fix `itemid2` in `z_shop_offers` then delete it from `z_ots_comunication`")
                            item_doesnt_exist = true
                        else
                            local container_weight = containerItemType:getWeight()
                            if(itemType:isRune()) then
                                items_weight = param4 * item_weigth
                            else
                                items_weight = param4 * itemType:getWeight(param2)
                            end

                            full_weight = items_weight + container_weight
                        end
                    elseif(add_item_type == 'item') then
                        full_weight = itemType:getWeight(param2)
                        if(itemType:isRune()) then
                            full_weight = itemType:getWeight()
                        end
                    end
                end

                if(not item_doesnt_exist) then
                    local free_cap = player:getFreeCapacity()
                    if(full_weight <= free_cap) then
                        if(add_item_type == 'container') then
                            local new_container = Game.createItem(param3, 1)
                            for x = 1, param4 do
                                new_container:addItem(param1, param2)
                            end
                            received_item = player:addItemEx(new_container)
                        else
                            received_item = player:addItem(param1, param2)
                        end

                        if(received_item) then
                            player:sendTextMessage(messageType, "You received >> ".. add_item_name .." << from OTS shop.")
                            db.query("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
                            db.query("UPDATE `z_shop_history` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE comunication_id = " .. id .. ";")
                            player:save()
                            added = true
                        else
                            player:sendTextMessage(messageType, '>> '.. add_item_name ..' << from OTS shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. interval ..' seconds to get it.')
                        end
                    else
                        player:sendTextMessage(messageType, '>> '.. add_item_name ..' << from OTS shop is waiting for you. It weight is '.. (full_weight / 100) ..' oz., you have only '.. (free_cap / 100) ..' oz. free capacity. Put some items in depot and wait about '.. interval ..' seconds to get it.')
                    end
                end
            elseif(add_item_type == 'addon') then
                player:sendTextMessage(messageType, "You received >> ".. add_item_name .." << from OTS shop.")
                player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
                player:addOutfitAddon(param1, param3)
                player:addOutfitAddon(param2, param4)
                db.query("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
                db.query("UPDATE `z_shop_history` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE comunication_id = " .. id .. ";")
                player:save()
                added = true
            elseif(add_item_type == 'mount') then
                player:addMount(param1)
                player:sendTextMessage(messageType, "You received >> ".. add_item_name .." << from OTS shop.")
                player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)

                db.query("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
                db.query("UPDATE `z_shop_history` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE comunication_id = " .. id .. ";")
                player:save()
                added = true
            end
        end

        if(added) then
            addedItems = addedItems + 1
        else
            waitingItems = waitingItems + 1
        end
    end

    print(">> Shopsystem, added " .. addedItems .. " items. Still waiting with " .. waitingItems .. " items.")
    return true
end

shopSystemGlobalEvent:interval(30000)
shopSystemGlobalEvent:register()
 
Last edited:
Hello, I have a problem when I wait for an item from the shop, an error appears in the console

View attachment 90262
2025-02-16 11:11:54 - >> Shopsystem, added 0 items. Still waiting with 11 items.
2025-02-16 11:11:54 - >> Shopsystem, added 0 items. Still waiting with 11 items.
2025-02-16 11:11:54 - >> Shopsystem, added 0 items. Still waiting with 11 items.


gesior-shop-system-revscript.lua

LUA:
--[[
    Gesior Shop System Revscript v3.0

    Originally written by Gesior, modified by slawkens for MyAAC.
    This script works with TFS 1.3+, otservbr-global and canary
]]--

local messageType = MESSAGE_EVENT_ADVANCE

-- don't edit anything below this line
if(not messageType) then
    messageType = MESSAGE_STATUS_CONSOLE_ORANGE
    if(not messageType) then
        messageType = MESSAGE_EVENT_ADVANCE
    end
end

function getResults()
    local resultId = db.storeQuery("SELECT * FROM z_ots_comunication;")
    if(resultId == false) then
        return false
    end

    local results = {}
    repeat
        local tmp = {}
        tmp.name = result.getString(resultId, "name")

        -- better performance when no player found
        tmp.exist = false
        tmp.player = nil

        local player = Player(tmp.name)
        if(player) then
            tmp.exist = true
            tmp.player = player

            tmp.id = result.getNumber(resultId, "id")
            tmp.action = result.getString(resultId, "action")
            tmp.delete_it = result.getNumber(resultId, "delete_it")

            tmp.param1 = result.getNumber(resultId, "param1")
            tmp.param2 = result.getNumber(resultId, "param2")
            tmp.param3 = result.getNumber(resultId, "param3")
            tmp.param4 = result.getNumber(resultId, "param4")
            tmp.param5 = result.getString(resultId, "param5")
            tmp.param6 = result.getString(resultId, "param6")
        end

        table.insert(results, tmp)
    until not result.next(resultId)
    result.free(resultId)

    return results
end

local shopSystemGlobalEvent = GlobalEvent("myaac-gesior-shop-system")
function shopSystemGlobalEvent.onThink(interval)
    interval = interval / 1000

    local started = os.mtime and os.mtime() or os.time()
    local addedItems, waitingItems = 0, 0
    local added = false

    local results = getResults()
    if(not results) then
        return true
    end

    for i, v in ipairs(results) do
        added = false
        local id = v.id
        local action = v.action
        local delete = v.delete_it

        if(v.exist) then
            local player = v.player
            local param1, param2, param3, param4 = v.param1, v.param2, v.param3, v.param4
            local add_item_type = v.param5
            local add_item_name = v.param6
            local received_item, full_weight, items_weight, item_weigth = 0, 0, 0, 0
            local item_doesnt_exist = false

            if(add_item_type == 'container' or add_item_type == 'item') then
                local itemType = ItemType(param1)
                if(not itemType) then -- item doesn't exist
                    print("[ERROR - gesior-shop-system] Invalid item id: " .. param1 .. ". Change/Fix `itemid1` in `z_shop_offers` then delete it from `z_ots_comunication`")
                    item_doesnt_exist = true
                else
                    local item_weigth = itemType:getWeight()
                    if(add_item_type == 'container') then
                        local containerItemType = ItemType(param3)
                        if(not containerItemType) then -- container item doesn't exist
                            print("[ERROR - gesior-shop-system] Invalid container id: " .. param3 .. ". Change/Fix `itemid2` in `z_shop_offers` then delete it from `z_ots_comunication`")
                            item_doesnt_exist = true
                        else
                            local container_weight = containerItemType:getWeight()
                            if(itemType:isRune()) then
                                items_weight = param4 * item_weigth
                            else
                                items_weight = param4 * itemType:getWeight(param2)
                            end

                            full_weight = items_weight + container_weight
                        end
                    elseif(add_item_type == 'item') then
                        full_weight = itemType:getWeight(param2)
                        if(itemType:isRune()) then
                            full_weight = itemType:getWeight()
                        end
                    end
                end

                if(not item_doesnt_exist) then
                    local free_cap = player:getFreeCapacity()
                    if(full_weight <= free_cap) then
                        if(add_item_type == 'container') then
                            local new_container = Game.createItem(param3, 1)
                            for x = 1, param4 do
                                new_container:addItem(param1, param2)
                            end
                            received_item = player:addItemEx(new_container)
                        else
                            received_item = player:addItem(param1, param2)
                        end

                        if(received_item) then
                            player:sendTextMessage(messageType, "You received >> ".. add_item_name .." << from OTS shop.")
                            db.query("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
                            db.query("UPDATE `z_shop_history` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE comunication_id = " .. id .. ";")
                            player:save()
                            added = true
                        else
                            player:sendTextMessage(messageType, '>> '.. add_item_name ..' << from OTS shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. interval ..' seconds to get it.')
                        end
                    else
                        player:sendTextMessage(messageType, '>> '.. add_item_name ..' << from OTS shop is waiting for you. It weight is '.. (full_weight / 100) ..' oz., you have only '.. (free_cap / 100) ..' oz. free capacity. Put some items in depot and wait about '.. interval ..' seconds to get it.')
                    end
                end
            elseif(add_item_type == 'addon') then
                player:sendTextMessage(messageType, "You received >> ".. add_item_name .." << from OTS shop.")
                player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
                player:addOutfitAddon(param1, param3)
                player:addOutfitAddon(param2, param4)
                db.query("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
                db.query("UPDATE `z_shop_history` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE comunication_id = " .. id .. ";")
                player:save()
                added = true
            elseif(add_item_type == 'mount') then
                player:addMount(param1)
                player:sendTextMessage(messageType, "You received >> ".. add_item_name .." << from OTS shop.")
                player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)

                db.query("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
                db.query("UPDATE `z_shop_history` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE comunication_id = " .. id .. ";")
                player:save()
                added = true
            end
        end

        if(added) then
            addedItems = addedItems + 1
        else
            waitingItems = waitingItems + 1
        end
    end

    print(">> Shopsystem, added " .. addedItems .. " items. Still waiting with " .. waitingItems .. " items.")
    return true
end

shopSystemGlobalEvent:interval(30000)
shopSystemGlobalEvent:register()

Hi!

What distro is that? Also does it happen every time script executes, or does it happened only once?
 
Ubuntu Server 24.04 "Noble Numbat" LTS

This happens every time I log in to my character and try to add a new transaction from the store, but it happens all the time. The same error appears in the console every few seconds

There was another error like this before

LUA:
2025-02-16 09:14:45 - [2025-16-02 09:14:45.697] [warning] Deprecation Warning: The function 'isPlayer(cid)' is outdated. Please use the new format 'Player(cid)'. Update needed at: Line 72, Source: /home/ubuntu/canary/data/scripts/globalevents/gesior-shop-system.lua.

I changed it to the function 'Player(cid)' and there is only this error
maybe the distribution is actually wrong, because I also have a problem with charbazar, there are no errors and the characters are not added to the auction, I'm doing everything right
 
Last edited:
Ubuntu Server 24.04 "Noble Numbat" LTS

This happens every time I log in to my character and try to add a new transaction from the store, but it happens all the time. The same error appears in the console every few seconds

There was another error like this before

LUA:
2025-02-16 09:14:45 - [2025-16-02 09:14:45.697] [warning] Deprecation Warning: The function 'isPlayer(cid)' is outdated. Please use the new format 'Player(cid)'. Update needed at: Line 72, Source: /home/ubuntu/canary/data/scripts/globalevents/gesior-shop-system.lua.

I changed it to the function 'Player(cid)' and there is only this error
maybe the distribution is actually wrong, because I also have a problem with charbazar, there are no errors and the characters are not added to the auction, I'm doing everything right

Ah, so you modified the script, that explains a lot.

There is no isPlayer in the revscript script. So I don't know where that error comes from.

Post the full script that is causing the current error.

And with distro, I didn't meant the operating system, but otserv you are using.
 
I forgot to add that this isPlayer related bug was located in shopsystem.lua.

Here are my scripts
gesior-shop-system-revscript.lua

--[[
Gesior Shop System Revscript v3.0
Originally written by Gesior, modified by slawkens for MyAAC.
This script works with TFS 1.3+, otservbr-global and canary
]]--
local messageType = MESSAGE_EVENT_ADVANCE
-- don't edit anything below this line
if(not messageType) then
messageType = MESSAGE_STATUS_CONSOLE_ORANGE
if(not messageType) then
messageType = MESSAGE_EVENT_ADVANCE
end
end
function getResults()
local resultId = db.storeQuery("SELECT * FROM z_ots_comunication;")
if(resultId == false) then
return false
end
local results = {}
repeat
local tmp = {}
tmp.name = result.getString(resultId, "name")
-- better performance when no player found
tmp.exist = false
tmp.player = nil
local player = Player(tmp.name)
if(player) then
tmp.exist = true
tmp.player = player
tmp.id = result.getNumber(resultId, "id")
tmp.action = result.getString(resultId, "action")
tmp.delete_it = result.getNumber(resultId, "delete_it")
tmp.param1 = result.getNumber(resultId, "param1")
tmp.param2 = result.getNumber(resultId, "param2")
tmp.param3 = result.getNumber(resultId, "param3")
tmp.param4 = result.getNumber(resultId, "param4")
tmp.param5 = result.getString(resultId, "param5")
tmp.param6 = result.getString(resultId, "param6")
end
table.insert(results, tmp)
until not result.next(resultId)
result.free(resultId)
return results
end
local shopSystemGlobalEvent = GlobalEvent("myaac-gesior-shop-system")
function shopSystemGlobalEvent.onThink(interval)
interval = interval / 1000
local started = os.mtime and os.mtime() or os.time()
local addedItems, waitingItems = 0, 0
local added = false
local results = getResults()
if(not results) then
return true
end
for i, v in ipairs(results) do
added = false
local id = v.id
local action = v.action
local delete = v.delete_it
if(v.exist) then
local player = v.player
local param1, param2, param3, param4 = v.param1, v.param2, v.param3, v.param4
local add_item_type = v.param5
local add_item_name = v.param6
local received_item, full_weight, items_weight, item_weigth = 0, 0, 0, 0
local item_doesnt_exist = false
if(add_item_type == 'container' or add_item_type == 'item') then
local itemType = ItemType(param1)
if(not itemType) then -- item doesn't exist
print("[ERROR - gesior-shop-system] Invalid item id: " .. param1 .. ". Change/Fix itemid1 in z_shop_offers then delete it from z_ots_comunication")
item_doesnt_exist = true
else
local item_weigth = itemType:getWeight()
if(add_item_type == 'container') then
local containerItemType = ItemType(param3)
if(not containerItemType) then -- container item doesn't exist
print("[ERROR - gesior-shop-system] Invalid container id: " .. param3 .. ". Change/Fix itemid2 in z_shop_offers then delete it from z_ots_comunication")
item_doesnt_exist = true
else
local container_weight = containerItemType:getWeight()
if(itemType:isRune()) then
items_weight = param4 * item_weigth
else
items_weight = param4 * itemType:getWeight(param2)
end
full_weight = items_weight + container_weight
end
elseif(add_item_type == 'item') then
full_weight = itemType:getWeight(param2)
if(itemType:isRune()) then
full_weight = itemType:getWeight()
end
end
end
if(not item_doesnt_exist) then
local free_cap = player:getFreeCapacity()
if(full_weight <= free_cap) then
if(add_item_type == 'container') then
local new_container = Game.createItem(param3, 1)
for x = 1, param4 do
new_container:addItem(param1, param2)
end
received_item = player:addItemEx(new_container)
else
received_item = player:addItem(param1, param2)
end
if(received_item) then
player:sendTextMessage(messageType, "You received >> ".. add_item_name .." << from OTS shop.")
db.query("DELETE FROM z_ots_comunication WHERE id = " .. id .. ";")
db.query("UPDATE z_shop_history SET trans_state='realized', trans_real=" .. os.time() .. " WHERE comunication_id = " .. id .. ";")
player:save()
added = true
else
player:sendTextMessage(messageType, '>> '.. add_item_name ..' << from OTS shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. interval ..' seconds to get it.')
end
else
player:sendTextMessage(messageType, '>> '.. add_item_name ..' << from OTS shop is waiting for you. It weight is '.. (full_weight / 100) ..' oz., you have only '.. (free_cap / 100) ..' oz. free capacity. Put some items in depot and wait about '.. interval ..' seconds to get it.')
end
end
elseif(add_item_type == 'addon') then
player:sendTextMessage(messageType, "You received >> ".. add_item_name .." << from OTS shop.")
player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
player:addOutfitAddon(param1, param3)
player:addOutfitAddon(param2, param4)
db.query("DELETE FROM z_ots_comunication WHERE id = " .. id .. ";")
db.query("UPDATE z_shop_history SET trans_state='realized', trans_real=" .. os.time() .. " WHERE comunication_id = " .. id .. ";")
player:save()
added = true
elseif(add_item_type == 'mount') then
player:addMount(param1)
player:sendTextMessage(messageType, "You received >> ".. add_item_name .." << from OTS shop.")
player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
db.query("DELETE FROM z_ots_comunication WHERE id = " .. id .. ";")
db.query("UPDATE z_shop_history SET trans_state='realized', trans_real=" .. os.time() .. " WHERE comunication_id = " .. id .. ";")
player:save()
added = true
end
end
if(added) then
addedItems = addedItems + 1
else
waitingItems = waitingItems + 1
end
end
print(">> Shopsystem, added " .. addedItems .. " items. Still waiting with " .. waitingItems .. " items.")
return true
end
shopSystemGlobalEvent:interval(30000)
shopSystemGlobalEvent:register()

gesior-shop-system.lua
--[[
Gesior Shop System v2.0

Originally written by Gesior, modified by slawkens for MyAAC.
This script should work with ANY distro.

don't forget to paste this into globalevents.xml:

<globalevent name="gesior-shop-system" interval="30000" script="gesior-shop-system.lua" />

change 30000 to 30 if other values in this file are low
]]--
local messageType = MESSAGE_EVENT_ORANGE
local displayExecutionTime = true -- how time script took in console (true/false)
-- don't edit anything below this line
if(displayExecutionTime) then
function doSecondsFormat(i)
local str, found = string.gsub(i, "(%d)(%d%d%d)$", "%1.%2", 1), 0
repeat
str, found = string.gsub(str, "(%d)(%d%d%d),", "%1.%2,", 1)
until found == 0
return str
end
end
if(not messageType) then
messageType = MESSAGE_STATUS_CONSOLE_ORANGE
if(not messageType) then
messageType = MESSAGE_INFO_DESCR
end
end
if(not getPlayerByName) then
function getPlayerByName(name) local p = Player(name) return p ~= nil and p:getId() or false end
end

if(not isPlayer) then
function isPlayer(cid) return Player(cid) ~= nil end
end
if(not doPlayerSave) then
function doPlayerSave(cid)
if(Player and type(Player) == "table" and Player.save and type(Player.save) == "function") then
local player = Player(cid)
if(player) then
player:save()
end
end

return true
end
end
function getResults()
if(db.storeQuery ~= nil and result.free ~= nil) then -- TFS 1.0+
local resultId = db.storeQuery("SELECT * FROM z_ots_comunication;")
if(resultId == false) then
return false
end

local results = {}
repeat
local tmp = {}
tmp.name = result.getDataString(resultId, "name")

-- better performance when no player found
tmp.exist = false
tmp.cid = getPlayerByName(tmp.name)
if(tmp.cid and Player(tmp.cid)) then
tmp.exist = true

tmp.id = result.getDataInt(resultId, "id")
tmp.action = result.getDataString(resultId, "action")
tmp.delete_it = result.getDataInt(resultId, "delete_it")

tmp.param1 = result.getDataInt(resultId, "param1")
tmp.param2 = result.getDataInt(resultId, "param2")
tmp.param3 = result.getDataInt(resultId, "param3")
tmp.param4 = result.getDataInt(resultId, "param4")
tmp.param5 = result.getDataString(resultId, "param5")
tmp.param6 = result.getDataString(resultId, "param6")
end

table.insert(results, tmp)
until not result.next(resultId)
result.free(resultId)

return results
else -- TFS 0.3
if(db.getResult ~= nil) then
local result_plr = db.getResult("SELECT * FROM z_ots_comunication;")
if(result_plr:getID() == -1) then
return false
end
local results = {}
repeat
local tmp = {}
tmp.name = tostring(result_plr:getDataString("name"))
-- better performance when no player found
tmp.exist = false
tmp.cid = getPlayerByName(tmp.name)
if(tmp.cid and isPlayer(tmp.cid)) then
tmp.exist = true
tmp.id = tonumber(result_plr:getDataInt("id"))
tmp.action = tostring(result_plr:getDataString("action"))
tmp.delete_it = tonumber(result_plr:getDataInt("delete_it"))

tmp.param1 = tonumber(result_plr:getDataInt("param1"))
tmp.param2 = tonumber(result_plr:getDataInt("param2"))
tmp.param3 = tonumber(result_plr:getDataInt("param3"))
tmp.param4 = tonumber(result_plr:getDataInt("param4"))
tmp.param5 = tostring(result_plr:getDataString("param5"))
tmp.param6 = tostring(result_plr:getDataString("param6"))
end

table.insert(results, tmp)
until not(result_plr:next())
result_plr:free()
return results
else
print('[ERROR - gesior-shop-system.lua] Your distribution is not supported')
end
end

return false
end
function doQuery(query)
if(db.asyncQuery ~= nil) then
db.asyncQuery(query)
elseif(db.query ~= nil) then
db.query(query)
elseif(db.executeQuery ~= nil) then
db.executeQuery(query)
else
return false
end

return true
end
if(not getItemWeightById) then
getItemWeightById = getItemWeight
end
if(not doCreateItemEx) then
function doCreateItemEx(itemid, count)
if(Game and type(Game) == "table" and Game.createItem and type(Game.createItem) == "function") then
local item = Game.createItem(itemid, count)
if item then
return item:getUniqueId()
end
return false
else
print("[ERROR - gesior-shop-system] Error code: 1. Please contact slawkens at www.otland.net")
end
end
end
function onThink(interval)
if(interval > 1000) then
interval = interval / 1000
end
local started = os.mtime and os.mtime() or os.time()
local addedItems, waitingItems = 0, 0
local added = false
local results = getResults()
if(not results) then
return true
end

for i, v in ipairs(results) do
added = false
local id = v.id
local action = v.action
local delete = v.delete_it
if(v.exist) then
local cid = v.cid
local param1, param2, param3, param4 = v.param1, v.param2, v.param3, v.param4
local add_item_type = v.param5
local add_item_name = v.param6
local received_item, full_weight, items_weight, item_weigth = 0, 0, 0, 0
local item_doesnt_exist = false
if(add_item_type == 'container' or add_item_type == 'item') then
local item_weigth = getItemWeightById(param1, 1)
if(type(item_weigth) == 'boolean') then -- item doesn't exist
print("[ERROR - gesior-shop-system] Invalid item id: " .. param1 .. ". Change/Fix itemid1 in z_shop_offers then delete it from z_ots_comunication")
item_doesnt_exist = true
else
if(add_item_type == 'container') then
container_weight = getItemWeightById(param3, 1)
if(type(container_weight) == 'boolean') then -- container item doesn't exist
print("[ERROR - gesior-shop-system] Invalid container id: " .. param3 .. ". Change/Fix itemid2 in z_shop_offers then delete it from z_ots_comunication")
item_doesnt_exist = true
else
if(isItemRune(param1)) then
items_weight = param4 * item_weigth
else
items_weight = param4 * getItemWeightById(param1, param2)
end

full_weight = items_weight + container_weight
end
elseif(add_item_type == 'item') then
full_weight = getItemWeightById(param1, param2)
if(isItemRune(param1)) then
full_weight = getItemWeightById(param1, 1)
end
end
end

if(not item_doesnt_exist) then
local free_cap = getPlayerFreeCap(cid)
if(full_weight <= free_cap) then
if(add_item_type == 'container') then
local new_container = doCreateItemEx(param3, 1)
for x = 1, param4 do
doAddContainerItem(new_container, param1, param2)
end
received_item = doPlayerAddItemEx(cid, new_container)
else
local new_item = doCreateItemEx(param1, param2)
received_item = doPlayerAddItemEx(cid, new_item)
end
if(received_item == RETURNVALUE_NOERROR) then
doPlayerSendTextMessage(cid, messageType, "You received >> ".. add_item_name .." << from OTS shop.")
doQuery("DELETE FROM z_ots_comunication WHERE id = " .. id .. ";")
doQuery("UPDATE z_shop_history SET trans_state='realized', trans_real=" .. os.time() .. " WHERE comunication_id = " .. id .. ";")
doPlayerSave(cid)
added = true
else
doPlayerSendTextMessage(cid, messageType, '>> '.. add_item_name ..' << from OTS shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. interval ..' seconds to get it.')
end
else
doPlayerSendTextMessage(cid, messageType, '>> '.. add_item_name ..' << from OTS shop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot and wait about '.. interval ..' seconds to get it.')
end
end
elseif(add_item_type == 'addon') then
doPlayerSendTextMessage(cid, messageType, "You received >> ".. add_item_name .." << from OTS shop.")
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_GIFT_WRAPS)
doPlayerAddOutfit(cid, param1, param3)
doPlayerAddOutfit(cid, param2, param4)
doQuery("DELETE FROM z_ots_comunication WHERE id = " .. id .. ";")
doQuery("UPDATE z_shop_history SET trans_state='realized', trans_real=" .. os.time() .. " WHERE comunication_id = " .. id .. ";")
doPlayerSave(cid)
added = true
elseif(add_item_type == 'mount') then
if(not doPlayerAddMount) then
print("[ERROR - gesior-shop-system] Your server doesn't support mounts. Remove all items in database from your z_shop_offers table where offer_type = mount and also in z_ots_comunication where param5 = mount.")
else
doPlayerAddMount(cid, param1)
doPlayerSendTextMessage(cid, messageType, "You received >> ".. add_item_name .." << from OTS shop.")
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_GIFT_WRAPS)
doQuery("DELETE FROM z_ots_comunication WHERE id = " .. id .. ";")
doQuery("UPDATE z_shop_history SET trans_state='realized', trans_real=" .. os.time() .. " WHERE comunication_id = " .. id .. ";")
doPlayerSave(cid)
added = true
end
end
end
if(added) then
addedItems = addedItems + 1
else
waitingItems = waitingItems + 1
end
end
local message = ">> Shopsystem, added " .. addedItems .. " items. Still waiting with " .. waitingItems .. " items."
if(displayExecutionTime) then
local done, str = os.time() - started, ""
if(os.mtime) then
done = os.mtime() - started
if(done < 100) then
str = "0.0" .. done
elseif(done < 1000) then
str = "0." .. done
else
str = doSecondsFormat(done)
if(str:len() == 0) then str = "0.0" end
end
end
message = message .. " Done in: " .. str .. "s."
end
print(message)
return true
end

i use data-otservbr-global
 
Last edited:
I forgot to add that this isPlayer related bug was located in shopsystem.lua.

Here are my scripts
gesior-shop-system-revscript.lua



gesior-shop-system.lua


i use data-otservbr-global

If you use canary, then you only need the revscript version, the other one shouldn't be loaded.

Anyway, I have just tested the script with canary and it worked flawlessly, maybe there are other members more experienced than me who can tell the cause?
 
I uploaded two files to the globalevents folder :D gesior-shop-system.lua and gesior-shop-system-revscript.lua
that's why I was getting this error. now everything works, thx
 
The payment is processed and completed, but the transaction status remains "Repeating" and the points are not being delivered to the player.


Here are the details:

config['donation_type'] = 'points';

$config['paypal'] = array(
'enabled' => true,
'email' => '[email protected]',
'contact_email' => '', // if empty, email is used
'item_name' => 'jaca-otserver.com.br donations',
'payment_type' => '_xclick', // '_xclick' (Buy Now) or '_donations'
'currency_code' => 'BRL', // Currency codes (https://developer.paypal.com/docs/integration/direct/rest/currency-codes/)
'use_sandbox' => false, // set to true if you want to test IPN in sandbox mode
'terms' => true, // display terms?
'options' => array( // cost in EUR => points
'5.00' => 30,
'10.00' => 60,
'20.00' => 130
)
);
paypal log erros
[Mon, 17 Mar 2025 11:29:38 -0300] Missing POST Data.
[Mon, 17 Mar 2025 11:31:18 -0300] Missing POST Data.
[Mon, 17 Mar 2025 11:47:01 -0300] Missing POST Data.
[Mon, 17 Mar 2025 12:15:02 -0300] Missing POST Data.


Has anyone encountered this issue or have any suggestions on what might be causing this problem? Any help would be greatly appreciated!
 
Last edited:
MyAac 1.3, converted gesior system shop 6.0.4

If button "shop", is still not showing up,
go to admin panel>settings>MyAAC>shop>switch enable gifts system to no>save, and "switch back", to the yes, and save.shop button.webpshop gesior button gifts not showing up.webp
 
Last edited:
Back
Top