• 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

Last edited by a moderator:
Any fix for that?

unknown.png

unknown.png



* EDIT *

Fixed.
The plugin directories are out of date, the paths have changed and it is no longer system/pages/admin but admin/pages/gift.php
 
Last edited:
hello see this error when importing plugin

This plugin requires php extension: curl to be installed. <-- this is solved.

--> but now that it is installed I don't get any tab to add offers and this appears on the administrator page when I click on Fifts. >The requested URL /admin/?p=gifts was not found on this server.< Some help would be welcome.
Thanks in advance.
 
Last edited:
any tutorial how add other categories? i need create 2 new category for sell items enchanted, y need offer type enchanted, to add in script globalevent
 
Hi! I have a problem with the Gesior Shop System in MyAAC. Everything is elegantly configured (paypal payment only), goes to payment, the payment on the PayPal side is successful, then after clicking "Back to the merchant's website" he puts us at https://domain.net/gifts, and the purchased coins are not added. Where could the error lie? Is there something to configure in my paypal account? Maybe automatic return url? But what url i need to paste here.

EDIT: At Paypal IPNs History all transactions have status "Trying to send again/Reply"

EDIT2: I set the return url to: https://domain.net/ at PayPal settings and the notification url https://domain.net/payments/paypal.php and after purchase still PayPal returning buyer to https://domain.net/gifts and doesnt adding coins. Still all transactions have status "Trying to send again/Reply"
 
Last edited:
Hi! I have a problem with the Gesior Shop System in MyAAC. Everything is elegantly configured (paypal payment only), goes to payment, the payment on the PayPal side is successful, then after clicking "Back to the merchant's website" he puts us at https://domain.net/gifts, and the purchased coins are not added. Where could the error lie? Is there something to configure in my paypal account? Maybe automatic return url? But what url i need to paste here.

EDIT: At Paypal IPNs History all transactions have status "Trying to send again/Reply"

EDIT2: I set the return url to: https://domain.net/ at PayPal settings and the notification url https://domain.net/payments/paypal.php and after purchase still PayPal returning buyer to https://domain.net/gifts and doesnt adding coins. Still all transactions have status "Trying to send again/Reply"

Solved per Discord. Was problem with SSL certificate. Paypal could not have connect per https://. Letting IPN notification per http fixed the issue.
 
Last edited:
It works with Nostalrius files? I already made two transactions (paypal and pagseguro) but it's not delivering the points after the purchase. Any idea on how to fix that?
 
It works with Nostalrius files? I already made two transactions (paypal and pagseguro) but it's not delivering the points after the purchase. Any idea on how to fix that?

You may check system/logs folder if there are any paypal.log files, with errors.

Another thing to check is: IPN history in paypal.com account. There should be status code of the transaction.
 
You may check system/logs folder if there are any paypal.log files, with errors.

Another thing to check is: IPN history in paypal.com account. There should be status code of the transaction.
hello! I'm new to editing this, but my server is MyAcc and when buying I don't receive the items to the player, any way to fix that? tutorials??
Post automatically merged:

I already installed the plugin on my myaac page but when buying an item, it is not delivered within the client.
and add into my globalevents
Lua:
<globalevent name="gesior-shop-system" type="startup" script="gesior-shop-system.lua" />
Hello, I have the same problem, were you able to solve it?
1666408877021.png
 
Last edited:
There's a little issue, I'm testing buying items on shop and I can see players can recive their purchase but at shop history table still marks as "not realized yet." What am I doing wrong?
View attachment 45239

Code:
-----------------------------------------------------------------------------------------------------------------------------------------

--[[
    Gesior Shop System v2.0
    
    Originally written by Gesior, modified by slawkens for MyAAC.    
    Converted to Revscriptsys by Majesty.
    
    change interval 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 isPlayer(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 [URL="http://www.otland.net"]www.otland.net[/URL]")
        end
    end
end

local gesiorShopSystem = GlobalEvent("GesiorShopSystem")
function gesiorShopSystem.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 [ICODE]itemid1[/ICODE] in [ICODE]z_shop_offers[/ICODE] then delete it from [ICODE]z_ots_comunication[/ICODE]")
                    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 [ICODE]itemid2[/ICODE] in [ICODE]z_shop_offers[/ICODE] then delete it from [ICODE]z_ots_comunication[/ICODE]")
                            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 [ICODE]z_ots_comunication[/ICODE] WHERE [ICODE]id[/ICODE] = " .. id .. ";")
                            doQuery("UPDATE [ICODE]z_shop_history[/ICODE] SET [ICODE]trans_state[/ICODE]='realized', [ICODE]trans_real[/ICODE]=" .. 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 [ICODE]z_ots_comunication[/ICODE] WHERE [ICODE]id[/ICODE] = " .. id .. ";")
                doQuery("UPDATE [ICODE]z_shop_history[/ICODE] SET [ICODE]trans_state[/ICODE]='realized', [ICODE]trans_real[/ICODE]=" .. 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 [ICODE]z_shop_offers[/ICODE] table where [ICODE]offer_type[/ICODE] = mount and also in [ICODE]z_ots_comunication[/ICODE] where [ICODE]param5[/ICODE] = 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 [ICODE]z_ots_comunication[/ICODE] WHERE [ICODE]id[/ICODE] = " .. id .. ";")
                    doQuery("UPDATE [ICODE]z_shop_history[/ICODE] SET [ICODE]trans_state[/ICODE]='realized', [ICODE]trans_real[/ICODE]=" .. 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

gesiorShopSystem:interval(30000)
gesiorShopSystem:register()
Post automatically merged:

I have a New bug, is need shutdown server to new player, push bug.

[2022-23-10 16:15:08.769] [error] Lua script error:
scriptInterface: [Scripts Interface]
scriptId: [C:\IMPERIO\data\scripts\globalevents\gesior-shop-system.lua:callback]
timerEvent: []
callbackId:[]
function: []
error [data/lib/compat/compat.lua:1023: attempt to call method 'getUniqueId' (a nil value)
stack traceback:
[C]: in function 'getUniqueId'
data/lib/compat/compat.lua:1023: in function 'doCreateItemEx'
C:\IMPERIO\data\scripts\globalevents\gesior-shop-system.lua:230: in function <C:\IMPERIO\data\scripts\globalevents\gesior-shop-system.lua:164>]
[2022-23-10 16:15:08.770] [error] [GlobalEvents::think] - Failed to execute event: GesiorShopSystem

---------------------------------------------------------------------------------------------------------------------------------------------------------

I use the Canary Server Global. 1291
 
Last edited by a moderator:
Last edited:
Yes, use Myacc, and it has successfully imported the characters. The only thing I have added to the characters is a basic-set.
so store, that new file, and replace it with "stock" one and try then, if it works, paste here You basic-set file
 
Back
Top