Ir para conteúdo
  • 0

Vip System - Comprar Item E Checar Pontos


mateuslp01

Pergunta

Olá, estou adaptando alguns sistemas de Pontos e Comprar por Talkactions, e encontrei alguns problemas...

 

 

1- Fiz o sistema de comprar itens por talkaction, mas quando o player compra, ao invés de ter retirado o preço do item, seus pontos simplesmente resetam para um valor que está em

 

 

 

function onSay(cid, words, param)

local Points= Info:getDataInt("premium_points")

if getAccountPoints(cid) >= 5 then

doPlayerAddItem(cid,2494,1)

doRemovePoints(cid, 5)

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You exchanged 5 Premium Points for 1 demon armor!")

else

doPlayerSendCancel(cid, "You don\'t have enough Premium Points!")

doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)

end

return TRUE

end

 

O 5 em negrito é o valor que é substituído.

Ex: tenho 100 pontos, digito !buy1, a Demon Armor é adicionada ao inventário e os pontos são setados em 5. Se eu digitar !buy1 novamente, o valor de pontos continua em 5, e o item é adicionado novamente ao inventário.

 

Aqui está a talkaction:

 

<talkaction words="!buy1" event="script" value="buy1.lua"/>

Aqui está a função na lib

 

 

function doRemovePoints(cid, points)

local Info = db.getResult("SELECT `premium_points` FROM `accounts` WHERE `id` = " .. getPlayerAccountId(cid) .. " LIMIT 1")

if Info:getID() ~= LUA_ERROR then

db.executeQuery("UPDATE accounts SET premium_points = - " .. points .. " WHERE id=" .. getPlayerAccountId(cid) .. ";")

Info:free()

return 1

end

end

 

Como fazer para que seja retiardo 5 pontos do total disponível ao invés de colocar este valor em 5?

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Olha , vou criar um sistema de pontos diferente aqui . ,

 

function onUse(cid, words, param)

dinheiro = 2160

points = 12512

quantpoints = 100

 

if isPlayer(cid) and getPlayerStorageValue(cid,points) <= 0 then

if getPlayerItemCount(cid,dinheiro) >= 100 then

doPlayerRemoveItem(cid,dinheiro,100)

setPlayerStorageValue(cid,points,quantpoints)

doPlayerSendTextMessage(cid,27,Voce comprou "..quantpoints.." Pontos.")

elseif getPlayerStorageValue(cid,points) >= 1 then

setPlayerStorageValue(cid,getPlayerStorageValue(cid,points) + quantpoints)

doPlayerSendTextMessage(cid,27,Voce Comprou "..quantpoints.." Pontos")

elseif getPlayerItemCount(cid,dinheiro) < 100 then

doPlayerSendTextMessage(cid,27,Voce não tem dinheiro suficiente")

end

end

return true

end

Link para o comentário
Compartilhar em outros sites

  • 0

Acabei desistindo de fazer por talkactions e fiz por NPC... mas continua dando problema. será que alguém pode dar uma ajuda?

Aqui estão os codes do npc

data\npc\scripts\Vip Seller.lua

 

local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)

NpcSystem.parseParameters(npcHandler)

local talkState = {}

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end

function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end

function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end

function onThink() npcHandler:onThink() end

function creatureSayCallback(cid, type, msg)

if(not npcHandler:isFocused(cid)) then

return false

end

local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid

local shopWindow = {}

local t = {

[2195] = {price = 15},

[2493] = {price = 25},

[2361] = {price = 30},

[8851] = {price = 20},

[8925] = {price = 30},

[2640] = {price = 50},

[2494] = {price = 100},

[9932] = {price = 50},

[2472] = {price = 70},

[8931] = {price = 48}

}

local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks)

if t[item] and getAccountPoints(cid) < t[item].price then

selfSay("You dont have "..t[item].price.." points", cid)

else

doPlayerAddItem(cid, item)

doAccountRemovePoints(cid, t[item].price)

selfSay("Here is you item!", cid)

end

return true

end

if (msgcontains(msg, 'trade') or msgcontains(msg, 'TRADE'))then

for var, ret in pairs(t) do

table.insert(shopWindow, {id = var, subType = 0, buy = ret.price, sell = 0, name = getItemNameById(var)})

end

openShopWindow(cid, shopWindow, onBuy, onSell)

end

return true

end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

 

data\npc\VIP.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<npc name="VIP ITEMS" script="loot.lua" walkinterval="2000" floorchange="0">
<health now="150" max="150"/>
<look type="235" head="132" body="40" legs="100" feet="70" corpse="2212"/>
<parameters>
<parameter key="module_shop" value="1"/>
<parameter key="message_greet" value="Hello |PLAYERNAME|. I buy items there is my offer! .. and also sells some. Say {trade}."/>
<parameter key="shop_buyable" value="pedra do refinamento, [b]8306[/b], 5"/>
</parameters>
</npc>

 

 

O que acontece nesse caso é que abre o trade channel, porém vende o item de id 8306 por 5 gold coins, como se fosse um item normal... o que quero é que ao invés de 5 golds, sejam retirados do player 5 premium_points...

Agradeço a atenção.

Editado por mateuslp01
Link para o comentário
Compartilhar em outros sites

  • 0

no VIP.XML troque O 5 PELO PREÇO DE CADA...

 

<parameterkey="shop_sellable"value="pedra do refinamento, 8306, 5"/>

 

VERMELHO = ID DO SEU POINT... teria que ser algum item..

VERDE = VALOR DE CADA ( 1x ) do seu item...

 

A parte do LUA... nem precisa dai...

Editado por Cleberadm
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...