Ir para conteúdo

Featured Replies

Postado

Precisaria de ajuda em um npc, pra ele vender "montaria, items" por tokens que são armazenadas pela database, achei um exemplo mas é pra 0.4

minha tabela fica em accounts.

 

function getAccountPoints(cid)
local res = db.getResult('select `premium_points` from accounts where name = \''..getPlayerAccount(cid)..'\'')
return res:getDataInt("premium_points") < 0 and 0 or res:getDataInt("premium_points")
end
 
function doAccountRemovePoints(cid, count)
        return db.executeQuery("UPDATE `accounts` SET `premium_points` = '".. getAccountPoints(cid) - count .."' WHERE `name` ='"..getPlayerAccount(cid).."'")
end
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] = 1,
      [2493] = 25,
      [2361] = 30,
      [8851] = 20,
      [8925] = 30,
      [2640] = 50,
      [2494] = 100,
      [9932] = 50,
      [2472] = 70,
      [8931] = 100
      }
local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks)
    if  t[item] and getAccountPoints(cid) < t[item] then
          selfSay("You need "..t[item].." points to buy this item.", cid)
             else
          doAccountRemovePoints(cid, t[item])
        doPlayerAddItem(cid, item)
        selfSay("Here your 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, 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())

 

Editado por Jobs (veja o histórico de edições)

Resolvido por Coltera

Ir para solução
Postado
  • Solução

Não fiz a dos items porque estou sem tempo.

Mas ta aí a das montarias.

Não testado 100%.

 

LIB:

function Player.getTokens(self)
	local query = db.storeQuery("SELECT `tokens` FROM accounts WHERE `id` = "..self:getAccountId())
	if not query then
		return 0
	end
	
	local tokens = result.getDataInt(query, "tokens") or 0
	result.free(query)
	return tokens
end
 
function Player.removeTokens(self, count)
	return db.query("UPDATE `accounts` SET `tokens` = "..self:getTokens() - count.." WHERE `id` = "..self:getAccountId())
end

NPC:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

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)
	local player = Player(cid)
    local mounts =
    {
        ["Widow Queen"] = {tokens = 500, mountId = 1},
        ["Racing Bird"] = {tokens = 500, mountId = 2},
    }
	
    if(not npcHandler:isFocused(cid)) then
		return false
    end
	
	if msg == "montarias" then
		npcHandler:say("Montarias disponível no momento {Widow Queen} e {Racing Bird}.", cid)
		return true
	end
	
	if mounts[msg] then
		if not player:hasMount(mounts[msg].mountId) then
			if player:getTokens() >= mounts[msg].tokens then
				npcHandler:say("Você comprou a montaria {"..msg.."} por "..mounts[msg].tokens.." tokens", cid)
				player:removeTokens(mounts[msg].tokens)
				player:addMount(mounts[msg].mountId)
			else
				npcHandler:say("Você precisa de {"..mounts[msg].tokens.." tokens} para comprar esta montaria.", cid)
			end
		else
			npcHandler:say("Você já possui esta montaria.", cid)
		end
	else
		npcHandler:say("A montaria {"..msg.."} não existe.", cid)
	end
    return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Editado por Coltera (veja o histórico de edições)

Postado
  • Autor
14 horas atrás, Coltera disse:

Não fiz a dos items porque estou sem tempo.

Mas ta aí a das montarias.

Não testado 100%.

 

LIB:


function Player.getTokens(self)
	local query = db.storeQuery("SELECT `tokens` FROM accounts WHERE `id` = "..self:getAccountId())
	if not query then
		return 0
	end
	
	local tokens = result.getDataInt(query, "tokens") or 0
	result.free(query)
	return tokens
end
 
function Player.removeTokens(self, count)
	return db.query("UPDATE `accounts` SET `tokens` = "..self:getTokens() - count.." WHERE `id` = "..self:getAccountId())
end

NPC:


local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

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)
	local player = Player(cid)
    local mounts =
    {
        ["Widow Queen"] = {tokens = 500, mountId = 1},
        ["Racing Bird"] = {tokens = 500, mountId = 2},
    }
	
    if(not npcHandler:isFocused(cid)) then
		return false
    end
	
	if msg == "montarias" then
		npcHandler:say("Montarias disponível no momento {Widow Queen} e {Racing Bird}.", cid)
		return true
	end
	
	if mounts[msg] then
		if not player:hasMount(mounts[msg].mountId) then
			if player:getTokens() >= mounts[msg].tokens then
				npcHandler:say("Você comprou a montaria {"..msg.."} por "..mounts[msg].tokens.." tokens", cid)
				player:removeTokens(mounts[msg].tokens)
				player:addMount(mounts[msg].mountId)
			else
				npcHandler:say("Você precisa de {"..mounts[msg].tokens.." tokens} para comprar esta montaria.", cid)
			end
		else
			npcHandler:say("Você já possui esta montaria.", cid)
		end
	else
		npcHandler:say("A montaria {"..msg.."} não existe.", cid)
	end
    return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

Valeu meninão por me salvar again <3 só agradece.

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo