Anderson Fabris Posted June 25, 2019 at 02:17 AM Share Posted June 25, 2019 at 02:17 AM Boa Noite. Gostaria de tirar uma duvida com vocês. Minha itemshop, quando eu compro itens, os mesmos ficam por determinado tempo e acabam sumindo do inventário. Tentei diferentes correções, como botar valores de tempo no socket0 / 1 e 2. Também tentei editar o warflag para que puxasse direto , mas mesmo assim acaba por sumir os itens. Minha ´Programação do Shop' Spoiler <?php session_start(); if (!empty($_SESSION["shop"])) { if (!class_exists("Read")) { echo "<h1>Estamos confusos. Por favor volte para a pagina de login...</h1>"; } else { $idItem = filter_var($url[2], FILTER_VALIDATE_INT); $Qtd = (filter_var($url[3], FILTER_VALIDATE_INT) == null ? 1 : filter_var($url[3], FILTER_VALIDATE_INT)); $Qtd = ($Qtd > 5 ? 5 : $Qtd); $ReadPlayer = new Read; $ReadItem = new Read; $ReadPlayer->ExeRead("account.account", "WHERE id = :i LIMIT 1", "i={$_SESSION["shop"]["id"]}"); $ReadItem->ExeRead("account.ishop_item", "WHERE id = :i LIMIT 1", "i={$idItem}"); $CoinsAtual = ($ReadItem->getResult()[0]["tip_pret"] == "monede" ? $ReadPlayer->getResult()[0]["coins"] : $ReadPlayer->getResult()[0]["cash"]); if ($ReadPlayer->getRowCount() > 0) { //VALIDAR ITEM if ($ReadItem->getRowCount() > 0) { //VERIFICAR MOEDAS! //VERIFICAR SE O ITEM TEM DESCONTO ! $ValorItem = ( $ReadItem->getResult()[0]["reducere"] == 0 ? $ReadItem->getResult()[0]["pret"] : ($ReadItem->getResult()[0]["pret"] * (100 - $ReadItem->getResult()[0]["reducere"]) / 100) ); if ($CoinsAtual >= ($ValorItem * $Qtd )) { //CONTINUAR COMPRANDO! //REALIZAR COMPRA DE VÀRIOS ITENS! $QtpP = $ReadItem->getResult()[0]["comprado"]; for ($i = 0; $i < $Qtd; $i++): $getGroesse = Check::compareItems($ReadItem->getResult()[0]["vnum"]); $belPos = Check::checkPos($ReadPlayer->getResult()[0]["id"]); $possiblePos = Check::pozitie($ReadPlayer->getResult()[0]["id"]); if (!empty($possiblePos) && $possiblePos <= 45) { $CoinsAtual -= $ValorItem; //ATUALIZAR COINS! $Dados = ($ReadItem->getResult()[0]["tip_pret"] == "monede" ? array("coins" => $CoinsAtual) : array("cash" => $CoinsAtual)); $Update = new Update; $Update->ExeUpdate("account.account", $Dados, "WHERE id = :id", "id={$ReadPlayer->getResult()[0]["id"]}"); if ($ReadItem->getResult()[0]["tip_pret"] == "monede") { $_SESSION["shop"]["coins"] = $CoinsAtual; } else { $_SESSION["shop"]["cash"] = $CoinsAtual; } //INSERIR LOG $DadosLog = array("cont" => $ReadPlayer->getResult()[0]["id"], "vnum" => $ReadItem->getResult()[0]["vnum"]); $CreateLog = new Create; $CreateLog->ExeCreate("account.ishop_log", $DadosLog); //INSERIR ITEM $DadosItem = array("owner_id" => $ReadPlayer->getResult()[0]["id"], "window" => "MALL", "pos" => $possiblePos, "count" => $ReadItem->getResult()[0]["cantitate"], "vnum" => $ReadItem->getResult()[0]["vnum"], "socket0" => ($ReadItem->getResult()[0]["time"] != 0 ? ( (time() + ((24 * $ReadItem->getResult()[0]["time"]) * 60 * 60))) : $ReadItem->getResult()[0]["socket0"]), "socket1" => $ReadItem->getResult()[0]["socket1"], "socket2" => $ReadItem->getResult()[0]["socket2"]); $CreateItem = new Create; $CreateItem->ExeCreate("player.item", $DadosItem); //ATUALIZAR A QUANTIDADE DO PRODUTO COMPRADO ! $DadosP = array("comprado" => ( $QtpP += 1)); $AtualizarComprados = new Update; $AtualizarComprados->ExeUpdate("account.ishop_item", $DadosP, "WHERE id = :i", "i={$ReadItem->getResult()[0]["id"]}"); } else { header("Location: " . HOME . "/shop/armazem"); } endfor; header("Location: " . HOME . "/shop/compra-ok"); } else { header("Location: " . HOME . "/shop/moedas"); } } else { echo "Erro: Item não encontrado, volte e tente novamente"; } } else { echo "Conta não encotrada!"; } } } else { echo "<h1>Acesso restrito !</h1>"; } Alguém saberia me explicar o porque? Design Table do ishop_item Spoiler id int 11 0 0 -1 0 0 0 0 -1 0 nume varchar 100 0 0 0 0 0 0 '0' 0 latin1 latin1_swedish_ci 0 0 descriere text 0 0 0 0 0 0 0 0 latin1 latin1_swedish_ci 0 0 categorie int 11 0 0 0 -1 0 0 0 0 0 vnum int 11 0 0 0 -1 0 0 0 0 0 0 img varchar 50 0 0 0 0 0 0 '0' 0 latin1 latin1_swedish_ci 0 0 tip_pret enum 0 0 0 0 0 0 0 0 latin1 latin1_swedish_ci 'monede','jetoane' 0 0 pret int 10 0 0 0 -1 0 0 0 0 0 0 cantitate int 11 0 0 0 0 0 0 0 0 0 0 reducere int 11 0 0 0 0 0 0 0 0 0 0 anzeigen varchar 1 0 0 0 0 0 0 '0' 0 latin1 latin1_swedish_ci 0 0 attrtype0 tinyint 4 0 -1 0 0 0 0 0 0 0 0 attrvalue0 smallint 6 0 -1 0 0 0 0 0 0 0 0 attrtype1 tinyint 4 0 -1 0 0 0 0 0 0 0 0 attrvalue1 smallint 6 0 -1 0 0 0 0 0 0 0 0 attrtype2 tinyint 4 0 -1 0 0 0 0 0 0 0 0 attrvalue2 smallint 6 0 -1 0 0 0 0 0 0 0 0 attrtype3 tinyint 4 0 -1 0 0 0 0 0 0 0 0 attrvalue3 smallint 6 0 -1 0 0 0 0 0 0 0 0 attrtype4 tinyint 4 0 -1 0 0 0 0 0 0 0 0 attrvalue4 smallint 6 0 -1 0 0 0 0 0 0 0 0 attrtype5 tinyint 4 0 -1 0 0 0 0 0 0 0 0 attrvalue5 smallint 6 0 -1 0 0 0 0 0 0 0 0 attrtype6 tinyint 4 0 -1 0 0 0 0 0 0 0 0 attrvalue6 smallint 6 0 -1 0 0 0 0 0 0 0 0 socket0 int 10 0 0 0 -1 0 0 0 0 0 0 socket1 int 10 0 0 0 -1 0 0 0 0 0 0 socket2 int 10 0 0 0 -1 0 0 0 0 0 0 socket3 int 10 0 0 0 -1 0 0 0 0 0 0 socket4 int 10 0 0 0 -1 0 0 0 0 0 0 socket5 int 10 0 0 0 -1 0 0 0 0 0 0 comprado int 11 0 0 0 0 0 0 0 0 0 0 time int 11 0 -1 0 0 0 0 0 0 0 0 wearflag int 11 0 0 0 0 0 0 0 0 0 0 Obrigado. Link to comment
[Admin] tierrilopes Posted June 25, 2019 at 08:48 PM Share Posted June 25, 2019 at 08:48 PM Olá, ao dar itens utiliza a função ItemAward do jogo para dares itens aos jogadores pela itemshop Link to comment
Anderson Fabris Posted June 26, 2019 at 01:28 PM Author Share Posted June 26, 2019 at 01:28 PM 16 horas atrás, tierrilopes disse: Olá, ao dar itens utiliza a função ItemAward do jogo para dares itens aos jogadores pela itemshop Tens como ser mais especifico? Link to comment
[Admin] tierrilopes Posted June 26, 2019 at 03:18 PM Share Posted June 26, 2019 at 03:18 PM https://github.com/Vegas007/Metin2-Extended-Item-Award Na tabela item_award dá o item corretamente. (ao comprarem, podes não aparecer instantaneamente na conta e demorar até 5 minutos). Evita problemas de scripts de verificar espaços livres no itemmall (que apenas dá trabalho e não é muito bom). Não tens limite de items a colocar nessa tabela. Caso o utilizador compre por exemplo 500 itens e só tenha espaço para 20, os outros 480 não ficam perdidos, sendo colocados no inventário do itemmall à medida que houver espaço (o game gere isso tudo, não tens de fazer nada, é função já existente desde os primeiros leaks do metin2). Maioria (quiçá até mesmo a totalidade) dos websites de metin2 colocam diretamente no inventário do itemmall ao invés de usar o itemaward, presumo que por desconhecimento da função. Link to comment
CAMBOJA Posted January 26, 2020 at 07:11 PM Share Posted January 26, 2020 at 07:11 PM Vou tentar fazer isso tenho o mesmo problema Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now