MA

Sistema DE Shop Para Site

Por Marshmello, 01 de set. de 2016 em Mods, funções e outros

shop para ot
16
4.6k
MarshmelloM
01 de setembro de 2016 às 17:05

Ola Pessoa Vim Aki Para Passar Para Vcs Siistema De shop Para Seu OTServ

 

Primeiro Vai Na Pasta Do Seu Server Vai Em Global Events e Crie Um Arquivo Chamado Shop Ficando Shop.lua e la ADD

Spoiler

function onThink(interval, lastExecution, thinkInterval)

    local result = db.getResult("SELECT * FROM shop_history WHERE `processed` = 0;")
    
        if(result:getID() ~= -1) then
            while(true) do
                cid = getCreatureByName(tostring(result:getDataString("player")))
                product = tonumber(result:getDataInt("product"))
                itemr = db.getResult("SELECT * FROM shop_offer WHERE `id` = "..product..";")
                    if isPlayer(cid) then
                        local id = tonumber(itemr:getDataInt("item"))
                        local tid = tonumber(result:getDataInt("id"))
                        local count = tonumber(itemr:getDataInt("count"))
                        local tipe = tonumber(itemr:getDataInt("type"))
                        local productn = tostring(itemr:getDataString("name"))
                            if isInArray({5,8},tipe) then
                                if getPlayerFreeCap(cid) >= getItemWeightById(id, count) then
                                    if isContainer(getPlayerSlotItem(cid, 3).uid) then
                                        received = doAddContainerItem(getPlayerSlotItem(cid, 3).uid, id,count)
                                        if received then
                                            doPlayerSendTextMessage(cid,19, "You have received >> "..productn.." << from our shop system")
                                            db.executeQuery("UPDATE `shop_history` SET `processed`='1' WHERE id = " .. tid .. ";")
                                        else
                                            doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough space on container to receive >> "..productn.." <<")
                                        end
                                    else
                                        doPlayerSendTextMessage(cid,19, "Sorry, you don't have a container to receive >> "..productn.." <<")
                                    end
                                else
                                    doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough capacity to receive >> "..productn.." << (You need: "..getItemWeightById(id, count).." Capacity)")
                                end
                            elseif isInArray({6,7},tipe) then
                                    if tipe == 6 then
                                        bcap = 8
                                        bid = 1987
                                    elseif tipe == 7 then
                                        bcap = 20
                                        bid = 1988
                                    end
                                    if isItemRune(id) then
                                        count = 1
                                    end
                                    if getPlayerFreeCap(cid) >= (getItemWeightById(1987, 1) + getItemWeightById(id,count * bcap)) then
                                        local bag = doCreateItemEx(bid, 1)
                                            for i = 1,bcap do
                                                doAddContainerItem(bag, id, count)
                                            end
                                        received = doPlayerAddItemEx(getPlayerSlotItem(cid, 3).uid, bag)
                                        if received == RETURNVALUE_NOERROR then
                                            doPlayerSendTextMessage(cid,19, "You have received >> "..productn.." << from our shop system")
                                            db.executeQuery("UPDATE `shop_history` SET `processed`='1' WHERE id = " .. tid .. ";")
                                        else
                                            doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough space to receive >> "..productn.." <<")
                                        end
                                    else
                                        doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough capacity to receive >> "..productn.." << (You need: "..getItemWeightById(id, count).." Capacity)")
                                    end
                            end
                    end
                itemr:free()
                if not(result:next()) then
                    break
                end
            end
            result:free()
        end
    return true
end

 

Depois Vai Em GlobalEvents.xml e add a tag

 

Spoiler

<globalevent name="shop" interval="200" script="shop.lua"/>

Pronto Seu Server Ja Ta Configurado Para o Shop Agr vamos Para o Site

 

Vai Na sua Pasta do Seu Site E coloque Essa Pasta la

 

Pasta Shop

 

Depois Vai Em htdocs/system/pages Crie um arquivo Chamado Shop.php e add

Spoiler

           <div class='message'>
            <div class='title'>Shop PokexMostyer</div>
            <div class='content'>
<?PHP
require("config.php");
$ots = POT::getInstance();
$ots->connect(POT::DB_MYSQL, connection());
$SQL = $ots->getDBHandle();
$ide = new IDE;
$light = '#151515';
$dark = '#070707';
if ($ide->isLogged() == true) {
include("shop/gifts.php");
}
else
echo '<div align="center"><br />Voce Precisa Estar Logado Para Ver Nosso Shop</div>';
?>
</div></div>

 

Agora Vamos Para Data Base Vai no Seu navegador e vai no Seu Phpmyadmin vai na sua DB Do Seu Server e add as Seguites Tabelas

 

Spoiler

CREATE TABLE IF NOT EXISTS `shop_offer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `points` int(11) NOT NULL DEFAULT '0',
  `category` int(11) NOT NULL DEFAULT '1',
  `type` int(11) NOT NULL DEFAULT '1',
  `item` int(11) NOT NULL DEFAULT '0',
  `count` int(11) NOT NULL DEFAULT '0',
  `description` text NOT NULL,
  `name` varchar(256) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;

 

Spoiler

CREATE TABLE IF NOT EXISTS `shop_history` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `product` int(11) NOT NULL,
  `session` varchar(256) NOT NULL,
  `player` varchar(256) NOT NULL,
  `date` int(10) NOT NULL,
  `processed` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=31 ;

 

Spoiler

CREATE TABLE IF NOT EXISTS `shop_donation_history` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `method` varchar(256) NOT NULL,
  `receiver` varchar(256) NOT NULL,
  `buyer` varchar(256) NOT NULL,
  `account` varchar(256) NOT NULL,
  `points` int(11) NOT NULL,
  `date` int(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

 

PRONTO AGR E SO COLOCAR OS ITEM NO SHOP OFFSER DA SUA DB :D

shop.rar

shop.rar

Ayron5A
01 de setembro de 2016 às 17:28

Serve para modern aac? 

MarshmelloM
01 de setembro de 2016 às 17:51

ss

FarathorF
03 de setembro de 2016 às 00:13

Teria como colocar para enviar os itens comprados para o dp do jogador invés de ir para o personagem?

MarshmelloM
03 de setembro de 2016 às 12:02

1 mês depois...
Hi im MellH
15 de outubro de 2016 às 16:19

Aqui deu esse erro:

 

3pB4Frf.png

DeadpoolD
15 de outubro de 2016 às 16:43
23 minutos atrás, Hi im Mell disse:

Aqui deu esse erro:

 

3pB4Frf.png

voce ta usando Gesior, o sistema postado é para modernacc, não sei.. mas acho que n funciona kk

Hi im MellH
15 de outubro de 2016 às 16:53

@Deadpool to usando o modern

MarshmelloM
16 de outubro de 2016 às 13:57
20 horas atrás, Hi im Mell disse:

@Deadpool to usando o modern

Vc coloca a pastinha shop q eu disponibilizei no topico?

Hi im MellH
16 de outubro de 2016 às 18:00

Sim, mas da esse erro, você saberia arrumar?

MarshmelloM
16 de outubro de 2016 às 18:21

vc colocou os codigos na db tmbn ?

 

test esse functions

Spoiler

<?php

    class shop {
        function connect() {
            $ots = POT::getInstance();
            $ots->connect(POT::DB_MYSQL, connection());
        return $ots->getDBHandle();
        }
        
        function isInstalled() {
        require('config.php');
            $con = mysql_connect($config['database']['host'], $config['database']['login'], $config['database']['password']);
            mysql_select_db($config['database']['database'],$con);
            if(mysql_query("SELECT * FROM shop_offer,shop_history"))
                return true;
            else
                return false;
        }
        
        function points($account) {
            $SQL = $this->connect();
            $points = $SQL->query('SELECT premium_points FROM accounts WHERE name = "'.$account.'"')->fetch();
            return $points['premium_points'];
        }
        
        function getPlayerAccount($name) {
            $SQL = $this->connect();
            $player = $SQL->query('SELECT account_id FROM players WHERE name = "'.$name.'"')->fetch();
            return $SQL->query('SELECT * from accounts WHERE id = '.$player['account_id'].'');
        }
        
        function AddPremium($name,$days) {
            $SQL = $this->connect();
            $account = $this->getPlayerAccount($name)->fetch();
            return $SQL->query('UPDATE accounts SET premdays = (premdays + '.$days.') WHERE name = "'.$account['name'].'"');
        }
        
        function CharacterList($account) {
            $SQL = $this->connect();
            $id = $SQL->query('SELECT id FROM accounts WHERE name = "'.$account.'"')->fetch();
            return $SQL->query('SELECT * FROM players WHERE account_id = '.$id['id'].'');
        }
        
        function isOnline($name) {
            $SQL = $this->connect();
            $player = $SQL->query('SELECT online FROM players WHERE name = "'.$name.'"')->fetch();
            return $player['online'];
        }
        
        
        function isBanned($name) {
            $SQL = $this->connect();
            $ID = $this->getPlayerAccount($name)->fetch();
            return $SQL->query('SELECT * FROM bans WHERE value = '.$ID['id'].'');
        }
        
        function UnBan($name) {
            $SQL = $this->connect();
            $ID = $this->getPlayerAccount($name)->fetch();
            return $SQL->query('DELETE FROM bans WHERE value = '.$ID['id'].'');
        }
        
        function execute_file($file) {
            if (!file_exists($file)) {
            $this->last_error = "The file $file does not exist.";
            return false;
            }
            $str = file_get_contents($file);
            if (!$str) {
            $this->last_error = "Unable to read the contents of $file.";
            return false;
            }

            // split all the queries into an array
            $quote = '';
            $line = '';
            $sql = array();
            $ignoreNextChar = '';
            for ($i = 0; $i < strlen($str); $i++) {
            if ( !$ignoreNextChar ) {
            $char = substr($str, $i, 1);
            $line .= $char;
            if ($char == ';' && $quote == '') {
            $sql[] = $line;
            $line = '';
            } else if ( $char == '\\' ) {
            // Escape char; ignore the next char in the string
            $ignoreNextChar = TRUE;
            } else if ($char == '"' || $char == "'" || $char == '`') {
            if ( $quote == '' ) // Start of a new quoted string; ends with same quote char
            $quote = $char;
            else if ( $char == $quote ) // Current char matches quote char; quoted string ends
            $quote = '';
            }
            }
            else
            $ignoreNextChar = FALSE;
            }

            if ($quote != '') return false;

            foreach ($sql as $query) {
            if (!empty($query)) {
            $r = mysql_query($query);

            if (!$r) {
            $this->last_error = mysql_error();
            return false;
            }
            }
            }
            return true;

        } 
        
        function install() {
            $SQL = $this->connect();
            if ($this->isInstalled())
                return false;
            else
                return $this->execute_file("gifts/config/Shop.sql");
        }
    }
?>

 

4 meses depois...
tavarbT
25 de fevereiro de 2017 às 15:13

Poderia me ajudar? estou com esse problema (JÁ FIZ ESSE PROCEDIMENTO DE MUDAR A FUNCTIONS, MAS NÃO DEU RESULTADO)error.png

 

OBS: Encontrei o local do erro:

Spoiler

        function isInstalled() {
        require('config.php');
            $con = mysql_connect($config['database']['host'], $config['database']['login'], $config['database']['password']);
            mysql_select_db($config['database']['database'],$con);
            if(mysql_query("SELECT * FROM shop_offer,shop_history"))
                return true;
            else
                return false;

 

error.png.070c47dc9f1f3edadf4c56ed6ca65a37.png

MarshmelloM
25 de fevereiro de 2017 às 15:26
16 minutos atrás, tavarb disse:

Poderia me ajudar? estou com esse problema (JÁ FIZ ESSE PROCEDIMENTO DE MUDAR A FUNCTIONS, MAS NÃO DEU RESULTADO)error.png

 

OBS: Encontrei o local do erro:

  Ocultar conteúdo

        function isInstalled() {

        require('config.php');

            $con = mysql_connect($config['database']['host'], $config['database']['login'], $config['database']['password']);

            mysql_select_db($config['database']['database'],$con);

            if(mysql_query("SELECT * FROM shop_offer,shop_history"))

                return true;

            else

                return false;

 

esse erro tmbn ta cmgh mais ja estou tentando resouver mais seu shop ja foi instalado

tavarbT
25 de fevereiro de 2017 às 15:28
Agora, BrendoGraphics0 disse:

esse erro tmbn ta cmgh mais ja estou tentando resouver mais seu shop ja foi instalado

Sim sim, instalei tudo certinho, com paciência. Só preciso arrumar esse bugzinho. Obrigado!

MarshmelloM
25 de fevereiro de 2017 às 15:29
4 minutos atrás, tavarb disse:

Sim sim, instalei tudo certinho, com paciência. Só preciso arrumar esse bugzinho. Obrigado!

se eu arrumaar posto aki no post