Ir para conteúdo
  • Cadastre-se

(Resolvido)NPC vendendo por Tokens TFS 1.2


Ir para solução Resolvido por Coltera,

Posts Recomendados

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)
Link para o post
Compartilhar em outros sites
  • 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)
Link para o post
Compartilhar em outros sites
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.

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo