Ir para conteúdo
  • 0

Npc Que Venda Items Por Ppoints


blumaster

Pergunta

Galera

eu uso um sistema de p_points em meu OTserv porem queria poder esses points para vende itens exclusivos

 

alguem poderia me ajudar?

 

 

um amigo me mando esta resposta porem nao entendo muito em scripts muito menos em banco de dados...

 

 

usa as funções da lib né vei ¬¬

 

 

Código:

 

function getPoints(cid)

local res = db.getResult('select `p_points` from accounts where name = \''..getPlayerAccount(cid)..'\'')

if(res:getID() == -1) then

return false

end

local ret = res:getDataInt("p_points")

res:free()

return tonumber(ret)

end

 

 

function doPlayerAddPoints(cid, quant)

return db.executeQuery("UPDATE `accounts` SET `p_points` = '".. getPoints(cid) + quant .."' WHERE `name` ='"..getPlayerAccount(cid).."'")

end

 

 

function doPlayerRemovePoints(cid, quant)

return db.executeQuery("UPDATE `accounts` SET `p_points` = '".. getPoints(cid) - quant .."' WHERE `name` ='"..getPlayerAccount(cid).."'")

end

tem tudo que tu precisa ai, é so montar um npc como qualquer outro e usar destas libs para manipular os ppoints

acabei de olhar uma coisa, tem uma consulta desnecessária nas funções, chamar esse getPoints é besteira, melhor usar desta forma:

 

 

Código:

 

function getPoints(cid)

local res = db.getResult("select `p_points` from accounts where name = " .. getPlayerAccount(cid) ..";")

if(res:getID() == -1) then

return false

end

local ret = res:getDataInt("p_points")

res:free()

return tonumber(ret)

end

 

 

function doPlayerAddPoints(cid, quant)

return db.executeQuery("UPDATE `accounts` SET p_points = p_points + ".. tostring(quant) .." WHERE `name` ="..getPlayerAccount(cid)..";")

end

 

 

function doPlayerRemovePoints(cid, quant)

return db.executeQuery("UPDATE `accounts` SET p_points = p_points - ".. tostring(quant) .. "WHERE `name` = "..getPlayerAccount(cid)..";")

end

muda pouca coisa, é mais em relação a processo

mas uma dica, bote um delay nesse npc, não é muito bom fazer muitas consultas sql, pode até crashar se forem em intervalos muito curtos

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Fiz aqui bem corrido.

 

Para testar, utilize essa query que eu fiz

 

UPDATE `accounts` SET `p_points` = 5;    

 

Ela fará que todos fiquem com 5 p_points.

 

Depois para testar

 

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 removePoint = 5
       local itemId = 2160


       if msgcontains(msg, 'test') or msgcontains (msg, 'test1') then
                  if getPoints(cid) >= removePoint then
                    selfSay("Você quer comprar um item por "..removePoint.." points?", cid)
                     talkState[talkUser] = 1

                   else
                        selfSay("Desculpe, voce nao tem pontos suficiente para trocar", cid)
                       end




       elseif talkState[talkUser] == 1 then
               if msgcontains(msg, 'yes') then
                               selfSay('Parabéns, obrigado pela troca.', cid)
                               doPlayerAddItem(cid,itemId)
                               doPlayerRemovePoints(cid,removePoint)
                               doSendMagicEffect(getCreaturePosition(cid),17)
                               talkState[talkUser] = 0
               else
                               selfSay('You don\'t have nothing!', cid)
               end

       end

       return true
end

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

 

Ta bem simples, mas só pra ter uma noção

 

Testei e ta certinho ;D

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

  • 0

Mano muito Obrigado voce salvo meu OT

 

estava desistindo disso ja.

 

Mas graças a voce vlws

 

Mano Rep+

 

 

Se nao for abusar da boa vontade

 

Tem como ele vender estes items?

 

12620

12621

12622

12623

12624

12625

12626

12627

12628

12629

 

 

 

Se voce me der este ajuda

 

Serei eternamente grato =P

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

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...