• 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!

TFS 0.X ZnoteACC Auction system payment types

Lurk

Active Member
Joined
Dec 4, 2017
Messages
336
Reaction score
48
Helo, I'm using this auction system and it works perfectly, but I want to add an option for the seller to decide if he'll charge event coins (id 10558), premium points (id 12597) or regular money (which the system already does) and to show on the php page which currency that offer asks

here's the talkactions
Lua:
--[[
        Offline player to player item trader (Auction System) by vDk
                Script version: 1.2a [ -- FIXED CLONE ITEMS BUG -- ]
]]--
local config = {
        levelRequiredToAdd = 20000,
        maxOffersPerPlayer = 5,
        SendOffersOnlyInPZ = true,
        blocked_items = {2165, 2152, 2148, 2160, 2166, 2167, 2168, 2169, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2343, 2433, 2640, 6132, 6300, 6301, 9932, 9933}
        }
function onSay(cid, words, param, channel)
        if(param == '') then
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")
                return true
        end
             
        local t = string.explode(param, ",")
        if(t[1] == "add") then
                if((not t[2]) or (not t[3]) or (not t[4])) then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")
                        return true
                end
                     
                if(not tonumber(t[3]) or (not tonumber(t[4]))) then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't set valid price or items count.")
                        return true
                end
             
                if(string.len(t[3]) > 7 or (string.len(t[4]) > 3)) then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This price or item count is too high.")
                        return true
                end
             
                local item = getItemIdByName(t[2], false)
                if(not item) then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item wich such name does not exists.")
                        return true
                end
             
                if(getPlayerLevel(cid) < config.levelRequiredToAdd) then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have required (" .. config.levelRequiredToAdd .. ") level.")
                        return true
                end
                             
                if(isInArray(config.blocked_items, item)) then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This item is blocked.")
                        return true
                end
             
                if(getPlayerItemCount(cid, item) < (tonumber(t[4]))) then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you don't have this item(s).")
                        return true
                end
             
                local check = db.getResult("SELECT `id` FROM `auction_system` WHERE `player` = " .. getPlayerGUID(cid) .. ";")
                if(check:getID() == -1) then
                elseif(check:getRows(true) >= config.maxOffersPerPlayer) then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry you can't add more offers (max. " .. config.maxOffersPerPlayer .. ")")
                        return true
                end
                             
                if(config.SendOffersOnlyInPZ) then  
                        if(not getTilePzInfo(getPlayerPosition(cid))) then
                                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you add offert to database.")
                                return true
                        end
                end
         
                if(tonumber(t[4]) < 1 or (tonumber(t[3]) < 1)) then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have to type a number higher than 0.")
                        return true
                end
                             
                local itemcount, costgp = math.floor(t[4]), math.floor(t[3])
                doPlayerRemoveItem(cid, item, itemcount)
                db.executeQuery("INSERT INTO `auction_system` (`player`, `item_name`, `item_id`, `count`, `cost`, `date`) VALUES (" .. getPlayerGUID(cid) .. ", \"" .. t[2] .. "\", " .. getItemIdByName(t[2]) .. ", " .. itemcount .. ", " .. costgp ..", " .. os.time() .. ")")
                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You successfully add " .. itemcount .." " .. t[2] .." for " .. costgp .. " gps to offerts database.")
        end
     
        if(t[1] == "buy") then
                if(not tonumber(t[2])) then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
                        return true
                end
             
                local buy = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";")
                if(buy:getID() ~= -1) then
                        if(getPlayerMoney(cid) < buy:getDataInt("cost")) then
                                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have enoguh GP.")
                                buy:free()
                                return true
                        end
                                     
                        if(getPlayerName(cid) == getPlayerNameByGUID(buy:getDataInt("player"))) then
                                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you can't buy your own items.")
                                buy:free()
                                return true
                        end
                     
                        if(getPlayerFreeCap(cid) < getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")))then
                                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You try to buy a " .. buy:getDataString("item_name") .. ". It weight " .. getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")) .. " cap oz. and you have only " .. getPlayerFreeCap(cid) .. " oz. free capacity. Put some items to depot and try again.")
                                buy:free()
                                return true
                        end
                             
                        if(isItemStackable((buy:getDataString("item_id")))) then
                                doPlayerAddItem(cid, buy:getDataString("item_id"), buy:getDataInt("count"))
                        else
                                for i = 1, buy:getDataInt("count") do
                                        doPlayerAddItem(cid, buy:getDataString("item_id"), 1)
                                end
                        end
                     
                        doPlayerRemoveMoney(cid, buy:getDataInt("cost"))
                        db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";")
                        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You bought " .. buy:getDataInt("count") .. " ".. buy:getDataString("item_name") .. " for " .. buy:getDataInt("cost") .. " gps!")
                        db.executeQuery("UPDATE `players` SET `auction_balance` = `auction_balance` + " .. buy:getDataInt("cost") .. " WHERE `id` = " .. buy:getDataInt("player") .. ";")
                        buy:free()
                else
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
                end
        end
     
        if(t[1] == "remove") then
                if((not tonumber(t[2]))) then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
                        return true
                end
             
                                if(config.SendOffersOnlyInPZ) then  
                                        if(not getTilePzInfo(getPlayerPosition(cid))) then
                                                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you remove offerts from database.")
                                                return true
                                        end
                end
                             
                local delete = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";")      
                if(delete:getID() ~= -1) then
                        if(getPlayerGUID(cid) == delete:getDataInt("player")) then
                                db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";")
                                if(isItemStackable(delete:getDataString("item_id"))) then
                                        doPlayerAddItem(cid, delete:getDataString("item_id"), delete:getDataInt("count"))
                                else
                                        for i = 1, delete:getDataInt("count") do
                                                doPlayerAddItem(cid, delete:getDataString("item_id"), 1)
                                        end
                                end
                             
                                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your offert has been deleted from offerts database.")
                        else
                                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This is not your offert!")
                        end
                delete:free()
                else
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
                end
        end
             
        if(t[1] == "withdraw") then
                local balance = db.getResult("SELECT `auction_balance` FROM `players` WHERE `id` = " .. getPlayerGUID(cid) .. ";")
                if(balance:getDataInt("auction_balance") < 1) then
                        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don't have money on your auction balance.")
                        balance:free()
                        return true
                end
                     
                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You got " .. balance:getDataInt("auction_balance") .. " gps from auction system!")
                doPlayerAddMoney(cid, balance:getDataInt("auction_balance"))
                db.executeQuery("UPDATE `players` SET `auction_balance` = '0' WHERE `id` = " .. getPlayerGUID(cid) .. ";")
                balance:free()
        end
        return true
end


and here's the php page
PHP:
<?php require_once 'engine/init.php'; include 'layout/overall/header.php';

    $cache = new Cache('engine/cache/ingmarket');
    if ($cache->hasExpired()) {
        $inGameAuctions = mysql_select_multi('SELECT `auction_system`.`player`, `auction_system`.`id`, `auction_system`.`item_name`, `auction_system`.`item_id`, `auction_system`.`count`, `auction_system`.`cost`, `auction_system`.`date`, `players`.`name` FROM `auction_system`, `players` WHERE `players`.`id` = `auction_system`.`player` ORDER BY `auction_system`.`id` DESC');
   
        $cache->setContent($inGameAuctions);
        $cache->save();
    } else {
        $inGameAuctions = $cache->load();
    }
    $players = 0;

    if (isset($_POST)) {
        if (isset($_POST['player']) && ! empty($_POST['player'])) {
            $name = getValue($_POST['player']);
            $player_id = user_character_exist($name);

            $inGameAuctions = array_filter($inGameAuctions, function($auction) use($player_id) {
                return $player_id == $auction['player'];
            });
        }

        if (isset($_POST['item']) && ! empty($_POST['item'])) {
            $item = getValue($_POST['item']);

            $inGameAuctions = array_filter($inGameAuctions, function($auction) use($item) {
                return strtolower($item) == strtolower($auction['item_name']);
            });
        }
    }
?>

    <table border="0" cellspacing="1" cellpadding="4" width="100%">
        <tr>
            <th>
                <b>Instruction<b>
            </th>
        </tr>
        <tr>
            <td align="center">
                <h2>Commands</h2><b>!offer add, itemName, itemPrice, itemCount</b><br/>
                    <small>example: !offer add, plate armor, 500, 1</small><br/><br/>
                    <b>!offer buy, AuctionID</b><br/><small>example: !offer buy, 1943</small><br /><br/>
                    <b>!offer remove, AuctionID</b><br/><small>example: !offer remove, 1943</small><br /><br/>
                    <b>!offer withdraw</b><br/><small>Use this command to get money for sold items.</small>
            </td>
        </tr>
    </table><br/>

    <form action="" method="POST">
        <input type="text" name="player" placeholder="Player..">
        <input type="text" name="item" placeholder="Item..">
        <input type="submit" value="Search">
    </form>

    <table width="100%" class="table table-striped table-bordered table-condensed">
        <tr>
            <th align="center">
                AuctionID
            </td>
            <th class="white">
                Image
            </td>
            <th class="white">
                Item Name
            </td>
            <th class="white">
                Player
            </td>
            <th class="white">
                Count
            </td>
            <th class="white">
                Price
            </td>
            <th class="white">
                Buy Command
            </td>
        </tr>
<?php
    if ($inGameAuctions) {
        foreach($inGameAuctions as $auction) {
            $players++;
            if(is_int($players / 2)) {
                $bgcolor = "black";
            } else {
                $bgcolor = "grey";
            }
            $cost = round($auction['cost']/1000, 2);
            ?>

                <tr>
                    <td>
                        <?php echo $auction['id']; ?>
                    </td>
                    <td>
                        <img src="http://items.************/<?php echo $auction['item_id']; ?>.gif"/>
                    </td>
                    <td>
                        <?php echo $auction['item_name']; ?>
                    </td>
                    <td>
                        <a href='characterprofile?name=<?php echo $auction['name']; ?>'>
                            <?php echo $auction['name']; ?>
                        </a>
                    </td>
                    <td>
                        <?php echo $auction['count']; ?>
                    </td>
                    <td>
                        <?php echo $cost;?>k<br/><small><?php echo $auction['cost']; ?>gp</small>
                    </td>
                    <td>
                        !offer buy, <?php echo $auction['id']; ?>
                    </td>
                </tr>
<?php
        }
    } else {
        echo '<tr><td colspan="7">Currently no auctions exists..</td></tr>';
    }
    echo '</table>';
    echo '<p align="right"><span style="font-size: 9px;">System originally created by <a href="https://otland.net/members/vdk.1553/">vDk</a>. | Converted to ZnoteAAC and edited by <a href="https://otland.net/members/halfaway.142275/">HalfAway</a>.</span></p>';

include 'layout/overall/footer.php'; ?>
 
Back
Top