• 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 1.X+ Znote script not giving Outfits

Joriku

Working in the mines, need something?
Joined
Jul 16, 2016
Messages
1,078
Solutions
15
Reaction score
370
Location
Sweden
YouTube
Joriku
This script is giving items/holding them in if no space.

It gives mount, but how would I make the website check if the player already owns the outfit/mount?
Lua:
<?php require_once 'engine/init.php';
include 'layout/overall/header.php';

if (isset($_GET['callback']) && $_GET['callback'] === 'processing') {
    echo '<script>alert("Seu pagamento está sendo processado pelo PagSeguro...");</script>';
}

// Import from config:
$shop = $config['shop'];
if ($shop['loginToView'] === true) protect_page();
$loggedin = user_logged_in();

$shop_list = $config['shop_offers'];

if ($loggedin === true) {
    if (!empty($_POST['buy']) && $_SESSION['shop_session'] == $_POST['session']) {
        $time = time();
        $player_points = (int)$user_znote_data['points'];
        $cid = (int)$user_data['id'];
        // Sanitizing post, setting default buy value
        $buy = false;
        $post = (int)$_POST['buy'];
        
        foreach ($shop_list as $key => $value) {
            if ($key === $post) {
                $buy = $value;
            }
        }
        if ($buy === false) die("Error: Shop offer ID mismatch.");
        
        // Verify that user can afford this offer.
        if ($player_points >= $buy['points']) {
            $data = mysql_select_single("SELECT `points` FROM `znote_accounts` WHERE `account_id`='$cid';");
            if (!$data) die("0: Account is not converted to work with Znote AAC");
            $old_points = $data['points'];
            if ((int)$old_points != (int)$player_points) die("1: Failed to equalize your points.");
            // Remove points if they can afford
            // Give points to user
            $expense_points = $buy['points'];
            $new_points = $old_points - $expense_points;
            $update_account = mysql_update("UPDATE `znote_accounts` SET `points`='$new_points' WHERE `account_id`='$cid'");
            
            $data = mysql_select_single("SELECT `points` FROM `znote_accounts` WHERE `account_id`='$cid';");
            $verify = $data['points'];
            if ((int)$old_points == (int)$verify) die("2: Failed to equalize your points.". var_dump((int)$old_points, (int)$verify, $new_points, $expense_points));
            
            // If this is an outfit offer, convert array into an integer. 
            if ($buy['type'] == 5) {
                if (is_array($buy['itemid'])) {
                    if (COUNT($buy['itemid']) == 2) $buy['itemid'] = ($buy['itemid'][0] * 1000) + $buy['itemid'][1];
                    else $buy['itemid'] = $buy['itemid'][0];
                }
            }

            // Do the magic (insert into db, or change sex etc)
            // If type is 2 or 3
            if ($buy['type'] == 2) {
                // Add premium days to account
                user_account_add_premdays($cid, $buy['count']);
                echo '<font color="green" size="4">You now have '.$buy['count'].' additional days of premium membership.</font>';
            } else if ($buy['type'] == 3) {
                // Character Gender
                mysql_insert("INSERT INTO `znote_shop_orders` (`account_id`, `type`, `itemid`, `count`, `time`) VALUES ('$cid', '". $buy['type'] ."', '". $buy['itemid'] ."', '". $buy['count'] ."', '$time')");
                echo '<font color="green" size="4">You now have access to change character gender on your characters. Visit <a href="myaccount.php">My Account</a> to select character and change the gender.</font>';
            } else if ($buy['type'] == 4) {
                // Character Name
                mysql_insert("INSERT INTO `znote_shop_orders` (`account_id`, `type`, `itemid`, `count`, `time`) VALUES ('$cid', '". $buy['type'] ."', '". $buy['itemid'] ."', '". $buy['count'] ."', '$time')");
                echo '<font color="green" size="4">You now have access to change character name on your characters. Visit <a href="myaccount.php">My Account</a> to select character and change the name.</font>';
            } else {
                mysql_insert("INSERT INTO `znote_shop_orders` (`account_id`, `type`, `itemid`, `count`, `time`) VALUES ('$cid', '". $buy['type'] ."', '". $buy['itemid'] ."', '". $buy['count'] ."', '$time')");
                echo '<font color="green" size="4">Your order is being delivered...<br>Make sure you have space in your backpack and can carry it.</font>';
            }
            
            // No matter which type, we will always log it.
            mysql_insert("INSERT INTO `znote_shop_logs` (`account_id`, `player_id`, `type`, `itemid`, `count`, `points`, `time`) VALUES ('$cid', '0', '". $buy['type'] ."', '". $buy['itemid'] ."', '". $buy['count'] ."', '". $buy['points'] ."', '$time')");
            
        } else echo '<font color="red" size="4">You need more points, this offer cost '.$buy['points'].' points.</font>';
        //var_dump($buy);
        //echo '<font color="red" size="4">'. $_POST['buy'] .'</font>';
    }
}

if ($shop['enabled']) {
?>

<h1>Shop Offers</h1>
<?php
if ($loggedin === true) {
    if (!empty($_POST['buy']) && $_SESSION['shop_session'] == $_POST['session']) {
        if ($user_znote_data['points'] >= $buy['points']) {
            ?><td>You have <?php echo (int)($user_znote_data['points'] - $buy['points']); ?> points. (<a href="buypoints.php">Buy Points</a>).</td><?php
        } else {
            ?><td>You have <?php echo $user_znote_data['points']; ?> points. (<a href="buypoints.php">Buy Points</a>).</td><?php
        }
    } else {
        ?><td>You have <?php echo $user_znote_data['points']; ?> points. (<a href="buypoints.php">Buy Points</a>).</td><?php
    }
    if ($config['shop_auction']['characterAuction']) {
        ?>
        <p>Interested in buying characters? View the <a href="auctionChar.php">character auction page!</a></p>
        <?php
    }
} else {
    ?><p>You need to be logged in to use the shop.</p><?php
}

$outfitsIds = array(136,137,138,139,140,141,142,147,148,149,150,155,156,157,158,252,269,270,279,288,324,336,366,431,433,464,466,471,513,514,542,128,129,130,131,132,133,134,143,144,145,146,151,152,153,154,251,268,273,278,289,325,335,367,430,432,463,465,472,512,516,541);
$category_items = array();
$category_premium = array();
$category_outfits = array();
$category_mounts = array();
$category_misc = array();
foreach ($shop_list as $key => $offer) {
    
    switch ($offer['type']) {
        case 1:
            $category_items[$key] = $offer;
        break;
        case 2:
            $category_premium[$key] = $offer;
        break;
        case 3:
            $category_misc[$key] = $offer;
        break;
        case 4:
            $category_misc[$key] = $offer;
        break;
        case 5:
            $category_outfits[$key] = $offer;
        break;
        case 6:
            $category_mounts[$key] = $offer;
        break;
        default:
            $category_misc[$key] = $offer;
        break;
    }
}

// Render a bunch of tables (one for each category)
?>
<div id="categoryNavigator">
    <a class="nav_link" href="#all">ALL</a>
    <?php if (!empty($category_items)): ?><a class="nav_link" href="#cat_itemids">ITEMS</a><?php endif; ?>
    <?php if (!empty($category_premium)): ?><a class="nav_link" href="#cat_premium">PREMIUM</a><?php endif; ?>
    <?php if (!empty($category_outfits)): ?><a class="nav_link" href="#cat_outfits">OUTFITS</a><?php endif; ?>
    <?php if (!empty($category_mounts)): ?><a class="nav_link" href="#cat_mounts">MOUNTS</a><?php endif; ?>
    <?php if (!empty($category_misc)): ?><a class="nav_link" href="#cat_misc">MISC</a><?php endif; ?>
</div>
<script type="text/javascript">
    function domReady () {
        var links = document.getElementsByClassName("nav_link");
        for (var i=0; i < links.length; i++) {
            links[i].addEventListener('click', function(e){
                e.preventDefault();
                // Hide all tables
                for (var x=0; x < links.length; x++) {
                    var hash = links[x].hash.substr(1);
                    if (hash != 'all') {
                        var table = document.getElementById(hash);
                        if (table.classList.contains("show")) {
                            table.classList.remove("show");
                            table.classList.add("hide");
                        }
                    }
                }
                // Display only the one we selected
                var hash = this.hash.substr(1);
                if (hash != 'all') {
                    var target = document.getElementById(hash);
                    if (target.classList.contains('hide')) {
                        target.classList.remove("hide");
                        target.classList.add("show");
                    }
                } else { // We clicked to show all tables
                    // Show all tables
                    for (var x=0; x < links.length; x++) {
                        var hash = links[x].hash.substr(1);
                        if (hash != 'all') {
                            var table = document.getElementById(hash);
                            if (table.classList.contains("hide")) {
                                table.classList.remove("hide");
                                table.classList.add("show");
                            }
                        }
                    }
                }
            });
        }
    }
    // Mozilla, Opera, Webkit 
    if ( document.addEventListener ) {
        document.addEventListener( "DOMContentLoaded", function(){
        document.removeEventListener( "DOMContentLoaded", arguments.callee, false);
        domReady();
      }, false );
    // If IE event model is used
    } else if ( document.attachEvent ) {
        // ensure firing before onload
        document.attachEvent("onreadystatechange", function(){
        if ( document.readyState === "complete" ) {
            document.detachEvent( "onreadystatechange", arguments.callee );
            domReady();
        }
        });
    }
</script>

<?php if (!empty($category_items)): ?>
    <!-- ITEMIDS -->
    <table class="show" id="cat_itemids">
        <tr class="yellow">
            <td>Item:</td>
            <?php if ($config['shop']['showImage']) { ?><td>Image:</td><?php } ?>
            <td>Count:</td>
            <td>Points:</td>
            <?php if ($loggedin === true): ?><td>Action:</td><?php endif; ?>
        </tr>
        <?php foreach ($category_items as $key => $offers): ?>
            <tr class="special">
                <td><?php echo $offers['description']; ?></td>
                <?php if ($config['shop']['showImage']):?>
                    <td><img src="http://<?php echo $config['shop']['imageServer']; ?>/<?php echo $offers['itemid']; ?>.<?php echo $config['shop']['imageType']; ?>" alt="img"></td>
                <?php endif; ?>
                <td><?php echo $offers['count']; ?>x</td>
                <td><?php echo $offers['points']; ?></td>
                <?php if ($loggedin === true): ?>
                <td>
                    <form action="" method="POST">
                        <input type="hidden" name="buy" value="<?php echo (int)$key; ?>">
                        <input type="hidden" name="session" value="<?php echo time(); ?>">
                        <input type="submit" value="  PURCHASE  "  class="needconfirmation" data-item-name="<?php echo $offers['description']; ?>" data-item-cost="<?php echo $offers['points']; ?>">
                    </form>
                </td>
                <?php endif; ?>
            </tr>
        <?php endforeach; ?>
    </table>
<?php endif; ?>
<?php if (!empty($category_premium)): ?>
<!-- PREMIUM DURATION -->
<table class="show" id="cat_premium">
    <tr class="yellow">
        <td>Description:</td>
        <?php if ($config['shop']['showImage']) { ?><td>Image:</td><?php } ?>
        <td>Duration:</td>
        <td>Points:</td>
        <?php if ($loggedin === true): ?><td>Action:</td><?php endif; ?>
    </tr>
    <?php foreach ($category_premium as $key => $offers): ?>
        <tr class="special">
            <td><?php echo $offers['description']; ?></td>
            <?php if ($config['shop']['showImage']):?>
                <td><img src="http://<?php echo $config['shop']['imageServer']; ?>/<?php echo $offers['itemid']; ?>.<?php echo $config['shop']['imageType']; ?>" alt="img"></td>
            <?php endif; ?>
            <td><?php echo $offers['count']; ?> Days</td>
            <td><?php echo $offers['points']; ?></td>
            <?php if ($loggedin === true): ?>
            <td>
                <form action="" method="POST">
                    <input type="hidden" name="buy" value="<?php echo (int)$key; ?>">
                    <input type="hidden" name="session" value="<?php echo time(); ?>">
                    <input type="submit" value="  PURCHASE  "  class="needconfirmation" data-item-name="<?php echo $offers['description']; ?>" data-item-cost="<?php echo $offers['points']; ?>">
                </form>
            </td>
            <?php endif; ?>
        </tr>
    <?php endforeach; ?>
</table>
<?php endif; ?>
<?php if (!empty($category_outfits)): ?>
<!-- OUTFITS -->
<table class="show" id="cat_outfits">
    <tr class="yellow">
        <td>Description:</td>
        <?php if ($config['shop']['showImage']) { ?><td>Image:</td><?php } ?>
        <td>Points:</td>
        <?php if ($loggedin === true): ?><td>Action:</td><?php endif; ?>
    </tr>
    <?php foreach ($category_outfits as $key => $offers): 
        if (!is_array($offers['itemid'])) $offers['itemid'] = [$offers['itemid']];
        if (COUNT($offers['itemid']) > 2): ?>
            <tr class="special">
                <td colspan="2">
                    <p><strong>Error:</strong> Outfit offer don't support more than 2 outfits. <?php echo COUNT($offers['itemid']); ?> configured.
                        <br>[<?php echo implode(',', $offers['itemid']); ?>]</p>
                </td>
            </tr>
        <?php endif; ?>
        <tr class="special">
            <td><?php echo $offers['description']; ?></td>
            <?php if ($config['show_outfits']['shop']):?>
                <td><?php foreach($offers['itemid'] as $outfitId): ?>
                    <img src="<?php echo $config['show_outfits']['imageServer']; ?>?id=<?php echo $outfitId; ?>&addons=<?php echo $offers['count']; ?>&head=<?php echo rand(1, 132); ?>&body=<?php echo rand(1, 132); ?>&legs=<?php echo rand(1, 132); ?>&feet=<?php echo rand(1, 132); ?>" alt="img">
                <?php endforeach; ?></td>
            <?php endif; ?>
            <td><?php echo $offers['points']; ?></td>
            <?php if ($loggedin === true): ?>
            <td>
                <form action="" method="POST">
                    <input type="hidden" name="buy" value="<?php echo (int)$key; ?>">
                    <input type="hidden" name="session" value="<?php echo time(); ?>">
                    <input type="submit" value="  PURCHASE  "  class="needconfirmation" data-item-name="<?php echo $offers['description']; ?>" data-item-cost="<?php echo $offers['points']; ?>">
                </form>
            </td>
            <?php endif; ?>
        </tr>
    <?php endforeach; ?>
</table>
<?php endif; ?>
<?php if (!empty($category_mounts)): ?>
<!-- MOUNTS -->
<table class="show" id="cat_mounts">
    <tr class="yellow">
        <td>Description:</td>
        <?php if ($config['show_outfits']['shop']) { ?><td>Image:</td><?php } ?>
        <td>Points:</td>
        <?php if ($loggedin === true): ?><td>Action:</td><?php endif; ?>
    </tr>
    <?php foreach ($category_mounts as $key => $offers): ?>
        <tr class="special">
            <td><?php echo $offers['description']; ?></td>
            <?php if ($config['shop']['showImage']):?>
                <td><img src="<?php echo $config['show_outfits']['imageServer']; ?>?id=<?php echo $outfitsIds[rand(0,count($outfitsIds)-1)]; ?>&addons=<?php echo rand(1, 3); ?>&head=<?php echo rand(1, 132); ?>&body=<?php echo rand(1, 132); ?>&legs=<?php echo rand(1, 132); ?>&feet=<?php echo rand(1, 132); ?>&mount=<?php echo $offers['itemid']; ?>&direction=2" alt="img"></td>
            <?php endif; ?>
            <td><?php echo $offers['points']; ?></td>
            <?php if ($loggedin === true): ?>
            <td>
                <form action="" method="POST">
                    <input type="hidden" name="buy" value="<?php echo (int)$key; ?>">
                    <input type="hidden" name="session" value="<?php echo time(); ?>">
                    <input type="submit" value="  PURCHASE  "  class="needconfirmation" data-item-name="<?php echo $offers['description']; ?>" data-item-cost="<?php echo $offers['points']; ?>">
                </form>
            </td>
            <?php endif; ?>
        </tr>
    <?php endforeach; ?>
</table>
<?php endif; ?>
<?php if (!empty($category_misc)): ?>
<!-- MISCELLANEOUS -->
<table class="show" id="cat_misc">
    <tr class="yellow">
        <td>Description:</td>
        <?php if ($config['shop']['showImage']) { ?><td>Image:</td><?php } ?>
        <td>Count/duration:</td>
        <td>Points:</td>
        <?php if ($loggedin === true): ?><td>Action:</td><?php endif; ?>
    </tr>
    <?php foreach ($category_misc as $key => $offers): ?>
        <tr class="special">
            <td><?php echo $offers['description']; ?></td>
            <?php if ($config['shop']['showImage']):?>
                <td><img src="http://<?php echo $config['shop']['imageServer']; ?>/<?php echo $offers['itemid']; ?>.<?php echo $config['shop']['imageType']; ?>" alt="img"></td>
            <?php endif;
            if ($offers['count'] === 0): ?>
                <td>Unlimited</td>
            <?php else: ?>
                <td><?php echo $offers['count']; ?>x</td>
            <?php endif; ?>
            <td><?php echo $offers['points']; ?></td>
            <?php if ($loggedin === true): ?>
            <td>
                <form action="" method="POST">
                    <input type="hidden" name="buy" value="<?php echo (int)$key; ?>">
                    <input type="hidden" name="session" value="<?php echo time(); ?>">
                    <input type="submit" value="  PURCHASE  "  class="needconfirmation" data-item-name="<?php echo $offers['description']; ?>" data-item-cost="<?php echo $offers['points']; ?>">
                </form>
            </td>
            <?php endif; ?>
        </tr>
    <?php endforeach; ?>
</table>
<?php endif; ?>

<?php if ($shop['enableShopConfirmation']) { ?>
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script>
    $(document).ready(function(){
        $(".needconfirmation").each(function(e){
            $(this).click(function(e){
                var itemname = $(this).attr("data-item-name");
                var itemcost = $(this).attr("data-item-cost");
                var r = confirm("Do you really want to purchase "+itemname+" for "+itemcost+" points?")
                if(r == false){
                    e.preventDefault();
                }            
            });
        });
    });
</script>
<?php }

    // Store current timestamp to prevent page-reload from processing old purchase
    $_SESSION['shop_session'] = time();

} else echo '<h1>Buy Points system disabled.</h1><p>Sorry, this functionality is disabled.</p>';
include 'layout/overall/footer.php'; ?>

Outfits:
Console, clean
a65ec7eb0fc303fcb8689836a25eb625.png


Ingame:
f05802b843505e180b9b343c63d547c3.png


Result:
No outfit added to the player
(Script attached - znoteshop.lua)
 

Attachments

Solution
Use the latest version: (Lua script)

It supports multiple outfit ids, and implements a new shop type (7) - direct house purchase.
Use the latest version: (Lua script)

It supports multiple outfit ids, and implements a new shop type (7) - direct house purchase.
 
Last edited:
Solution
Back
Top