Ir para conteúdo

Featured Replies

  • Respostas 30
  • Visualizações 1.3k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • É só por nos comandos que quer vender um requisito de storage. (O player precisa de storage para usar tal comando) E no NPC, colocar pra dar tal storage pro player valendo certa quantia.  

  • Tudo bem. Faz o seguinte. Me dê as seguintes coisas:   - O Script de um comando que você planeja vender. - A ID de um item qualquer que você não use no servidor para por a venda no NPC.

  • Ok, então vejamos. Fiz um aqui sem testar. Vejamos como fica. Começando com o NPC:   Ana.xml <?xml version="1.0"?> <npc name="Ana" script="Ana.lua" walkinterval="2000">

Postado
  • Autor
45 minutos atrás, Frenesy disse:

Seu TFS não é o 0.4? Pesquisei e vi que os 0.4 tem o comando "getPlayerPVPBlessing(cid)"

O Tópico da qual me mandou também se encontra essa função.

Sim é TFS 0.4, porem da este erro o.O...eu não teria que colocar este comando "getPlayerPVPBlessing" em algum outro local?

 

                                                           

55f6tc.gif                     

Postado

Ele faz a verificação da Bless pra você não ter que comprar de novo. Sem essa verificação, ficaria assim:

 

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 doCreatureSayWithDelay(cid,text,type,delay,e)
   if delay<=0 then
      doCreatureSay(cid,text,type)
   else
      local func=function(pars)
                    doCreatureSay(pars.cid,pars.text,pars.type)
                    pars.e.done=TRUE
                 end
      e.done=FALSE
      e.event=addEvent(func,delay,{cid=cid, text=text, type=type, e=e})
   end
end

function cancelNPCTalk(events)
  local ret=1
  for aux=1,table.getn(events) do
     if events[aux].done==FALSE then
        stopEvent(events[aux].event)
     else
        ret=ret+1
     end
  end
  events=nil
  return(ret)
end

function doNPCTalkALot(msgs,interval)
  local e={}
  local ret={}
  if interval==nil then interval=3000 end --3 seconds is default time between messages
  for aux=1,table.getn(msgs) do
      e[aux]={}
      doCreatureSayWithDelay(getNpcCid(),msgs[aux],TALKTYPE_PRIVATE_NP,(aux-1)*interval,e[aux])
      table.insert(ret,e[aux])
  end
  return(ret)
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
    
    if(msgcontains(msg, 'Blessing') or msgcontains(msg, 'blessing')) then
    selfSay('Vejamos, posso vender pra você {Bless} e também {Bless PvP}, o que deseja?', cid)
    talkState[talkUser] = 1
    
    elseif(msgcontains(msg, 'Comando') or msgcontains(msg, 'comando') or msgcontains(msg, 'Comando Bless') or msgcontains(msg, 'comando bless')) then
    selfSay('Eu posso vender para você o comando "!bless full". No entanto, ele custa {120.000 gold coin}. Deseja comprar?', cid)
    talkState[talkUser] = 2
    
    elseif((msgcontains(msg, 'Yes') or msgcontains(msg, 'yes')) and talkState[talkUser] == 2) then
        if getPlayerStorageValue(cid,834005) == 1 then
            selfSay('Você já comprou esse comando.', cid)
            talkState[talkUser] = 0
        else
            if doPlayerRemoveMoney(cid, 120000) == TRUE then
                selfSay('Pronto! Agora você pode usar o comando {!bless}', cid)
                doSendMagicEffect(getPlayerPosition(cid), 49)
                setPlayerStorageValue(cid, 834005, 1)
                talkState[talkUser] = 0
            else
            selfSay('Você não tem o dinheiro necessário.', cid)
            talkState[talkUser] = 0
            end
        end
        
    elseif((msgcontains(msg, 'No') or msgcontains(msg, 'no')) and talkState[talkUser] == 2) then
            selfSay('Sem problemas.', cid)
            talkState[talkUser] = 0
    
    elseif(msgcontains(msg, 'Bless') or msgcontains(msg, 'bless')) then
        selfSay('Eu posso lhe conceder todas as benções por {50.000 gold coin}. Deseja comprar? - [{Yes} | {No}]', cid)
        talkState[talkUser] = 3
    
        elseif((msgcontains(msg, 'Yes') or msgcontains(msg, 'yes')) and talkState[talkUser] == 3) then
            if getPlayerBlessing(cid, 1) or getPlayerBlessing(cid, 2) or getPlayerBlessing(cid, 3) or getPlayerBlessing(cid, 4) or getPlayerBlessing(cid, 5) then
                selfSay('Você já tem todas as benções.', cid)
                talkState[talkUser] = 0
            else
            if doPlayerRemoveMoney(cid, 50000) == TRUE then
                selfSay('Você agora está protegido!', cid)
                doSendMagicEffect(getPlayerPosition(cid), 49)
                doPlayerAddBlessing(cid, 1)
                doPlayerAddBlessing(cid, 2)
                doPlayerAddBlessing(cid, 3)
                doPlayerAddBlessing(cid, 4)
                doPlayerAddBlessing(cid, 5)
                talkState[talkUser] = 0
            else
            selfSay('Você não tem o dinheiro necessário.', cid)
            end
        end
    
    elseif((msgcontains(msg, 'No') or msgcontains(msg, 'no')) and talkState[talkUser] == 3) then
            selfSay('Tudo bem, mas tenho novas coisas para vender.', cid)
            talkState[talkUser] = 0
			
	elseif(msgcontains(msg, 'Bless PvP') or msgcontains(msg, 'bless pvp')) then
        selfSay('Eu posso lhe conceder a Bless PvP por {50.000 gold coin}. Deseja comprar? - [{Yes} | {No}]', cid)
        talkState[talkUser] = 4
    
        elseif((msgcontains(msg, 'Yes') or msgcontains(msg, 'yes')) and talkState[talkUser] == 4) then
            if doPlayerRemoveMoney(cid, 50000) == TRUE then
                selfSay('Você agora está protegido!', cid)
                doSendMagicEffect(getPlayerPosition(cid), 49)
                doPlayerSetPVPBlessing(cid)
                talkState[talkUser] = 0
            else
            selfSay('Você não tem o dinheiro necessário.', cid)
            end
    
    elseif((msgcontains(msg, 'No') or msgcontains(msg, 'no')) and talkState[talkUser] == 4) then
            selfSay('Volte quando tiver interesse.', cid)
            talkState[talkUser] = 0
    
        end      
    return TRUE
end

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

 

cms1-pr%C3%AAmio.png

Postado
  • Autor
50 minutos atrás, Frenesy disse:

Ele faz a verificação da Bless pra você não ter que comprar de novo. Sem essa verificação, ficaria assim:

 


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 doCreatureSayWithDelay(cid,text,type,delay,e)
   if delay<=0 then
      doCreatureSay(cid,text,type)
   else
      local func=function(pars)
                    doCreatureSay(pars.cid,pars.text,pars.type)
                    pars.e.done=TRUE
                 end
      e.done=FALSE
      e.event=addEvent(func,delay,{cid=cid, text=text, type=type, e=e})
   end
end

function cancelNPCTalk(events)
  local ret=1
  for aux=1,table.getn(events) do
     if events[aux].done==FALSE then
        stopEvent(events[aux].event)
     else
        ret=ret+1
     end
  end
  events=nil
  return(ret)
end

function doNPCTalkALot(msgs,interval)
  local e={}
  local ret={}
  if interval==nil then interval=3000 end --3 seconds is default time between messages
  for aux=1,table.getn(msgs) do
      e[aux]={}
      doCreatureSayWithDelay(getNpcCid(),msgs[aux],TALKTYPE_PRIVATE_NP,(aux-1)*interval,e[aux])
      table.insert(ret,e[aux])
  end
  return(ret)
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
    
    if(msgcontains(msg, 'Blessing') or msgcontains(msg, 'blessing')) then
    selfSay('Vejamos, posso vender pra você {Bless} e também {Bless PvP}, o que deseja?', cid)
    talkState[talkUser] = 1
    
    elseif(msgcontains(msg, 'Comando') or msgcontains(msg, 'comando') or msgcontains(msg, 'Comando Bless') or msgcontains(msg, 'comando bless')) then
    selfSay('Eu posso vender para você o comando "!bless full". No entanto, ele custa {120.000 gold coin}. Deseja comprar?', cid)
    talkState[talkUser] = 2
    
    elseif((msgcontains(msg, 'Yes') or msgcontains(msg, 'yes')) and talkState[talkUser] == 2) then
        if getPlayerStorageValue(cid,834005) == 1 then
            selfSay('Você já comprou esse comando.', cid)
            talkState[talkUser] = 0
        else
            if doPlayerRemoveMoney(cid, 120000) == TRUE then
                selfSay('Pronto! Agora você pode usar o comando {!bless}', cid)
                doSendMagicEffect(getPlayerPosition(cid), 49)
                setPlayerStorageValue(cid, 834005, 1)
                talkState[talkUser] = 0
            else
            selfSay('Você não tem o dinheiro necessário.', cid)
            talkState[talkUser] = 0
            end
        end
        
    elseif((msgcontains(msg, 'No') or msgcontains(msg, 'no')) and talkState[talkUser] == 2) then
            selfSay('Sem problemas.', cid)
            talkState[talkUser] = 0
    
    elseif(msgcontains(msg, 'Bless') or msgcontains(msg, 'bless')) then
        selfSay('Eu posso lhe conceder todas as benções por {50.000 gold coin}. Deseja comprar? - [{Yes} | {No}]', cid)
        talkState[talkUser] = 3
    
        elseif((msgcontains(msg, 'Yes') or msgcontains(msg, 'yes')) and talkState[talkUser] == 3) then
            if getPlayerBlessing(cid, 1) or getPlayerBlessing(cid, 2) or getPlayerBlessing(cid, 3) or getPlayerBlessing(cid, 4) or getPlayerBlessing(cid, 5) then
                selfSay('Você já tem todas as benções.', cid)
                talkState[talkUser] = 0
            else
            if doPlayerRemoveMoney(cid, 50000) == TRUE then
                selfSay('Você agora está protegido!', cid)
                doSendMagicEffect(getPlayerPosition(cid), 49)
                doPlayerAddBlessing(cid, 1)
                doPlayerAddBlessing(cid, 2)
                doPlayerAddBlessing(cid, 3)
                doPlayerAddBlessing(cid, 4)
                doPlayerAddBlessing(cid, 5)
                talkState[talkUser] = 0
            else
            selfSay('Você não tem o dinheiro necessário.', cid)
            end
        end
    
    elseif((msgcontains(msg, 'No') or msgcontains(msg, 'no')) and talkState[talkUser] == 3) then
            selfSay('Tudo bem, mas tenho novas coisas para vender.', cid)
            talkState[talkUser] = 0
			
	elseif(msgcontains(msg, 'Bless PvP') or msgcontains(msg, 'bless pvp')) then
        selfSay('Eu posso lhe conceder a Bless PvP por {50.000 gold coin}. Deseja comprar? - [{Yes} | {No}]', cid)
        talkState[talkUser] = 4
    
        elseif((msgcontains(msg, 'Yes') or msgcontains(msg, 'yes')) and talkState[talkUser] == 4) then
            if doPlayerRemoveMoney(cid, 50000) == TRUE then
                selfSay('Você agora está protegido!', cid)
                doSendMagicEffect(getPlayerPosition(cid), 49)
                doPlayerSetPVPBlessing(cid)
                talkState[talkUser] = 0
            else
            selfSay('Você não tem o dinheiro necessário.', cid)
            end
    
    elseif((msgcontains(msg, 'No') or msgcontains(msg, 'no')) and talkState[talkUser] == 4) then
            selfSay('Volte quando tiver interesse.', cid)
            talkState[talkUser] = 0
    
        end      
    return TRUE
end

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

 

Agora mostrou o efeito que comprei o Bless PvP, porem ainda assim deste jeito seria muito disperdicio de dinheiro a pessoa acabar gastando dinheiro com um tipo de bless que já tem, teria que dizer que o Player já tem, caso tenha ehhe...e ainda aparece esse erro na distro:

 

Spoiler

erro_bless.png

 

Sera que eu não teria que adicionar alguma função na pasta npc/lib/npcsystem/npchandler? Entendi que é algo na linha 390 certo?

de qualquer forma vou colocar um pedaço da lib npchandler, porque é muito grande...

 

Bom aqui está o meu npchandler apartir da linha 385:

 

Spoiler

385-                if(self.keywordHandler ~= nil) then
386-               if((self:isFocused(cid) and (class == TALKTYPE_PRIVATE_PN or NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT)) or not self:isFocused(cid)) then
387-                        local ret = self.keywordHandler:processMessage(cid, msg)
388-                        if(not ret) then
389-                           local callback = self:getCallback(CALLBACK_MESSAGE_DEFAULT)
390-                            if(callback ~= nil and callback(cid, class, msg)) then
391-                                if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then
392-                                    self.talkStart[cid] = os.time()
393-                                else
394-                                    self.talkStart = os.time()
395-                                end
396-                            end
397-                        else
398-                            if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then
399-                                self.talkStart[cid] = os.time()
400-                            else
401-                                self.talkStart = os.time()
402-                            end
403-                        end
404-                    end
405-                end

 

@Edite

 

Creio que não tenha nada ve a pasta Lib, verifiquei de outro TFS 0.4 e é a mesma coisa...que estranho este erro o.O

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

 

                                                           

55f6tc.gif                     

Postado
  • Solução
4 minutos atrás, Digoshow disse:

Agora mostrou o efeito que comprei o Bless PvP, porem ainda assim deste jeito seria muito disperdicio de dinheiro a pessoa acabar gastando dinheiro com um tipo de bless que já tem, teria que dizer que o Player já tem, caso tenha ehhe

 

kkkk Pois é, cara. A função "get" verificaria se ele já tem ou não a bless.

Cara, eu vou fazer o seguinte. Eu vou DEDUZIR que essa benção que você quer seja a 6. Eu não tenho certeza, mas olhando o script da Ceremonial Ankh, aparece essa Bless 6. Deve ser elam já que as 5 primeiras são as bless normais. Sendo assim, teste esse:

 

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 doCreatureSayWithDelay(cid,text,type,delay,e)
   if delay<=0 then
      doCreatureSay(cid,text,type)
   else
      local func=function(pars)
                    doCreatureSay(pars.cid,pars.text,pars.type)
                    pars.e.done=TRUE
                 end
      e.done=FALSE
      e.event=addEvent(func,delay,{cid=cid, text=text, type=type, e=e})
   end
end

function cancelNPCTalk(events)
  local ret=1
  for aux=1,table.getn(events) do
     if events[aux].done==FALSE then
        stopEvent(events[aux].event)
     else
        ret=ret+1
     end
  end
  events=nil
  return(ret)
end

function doNPCTalkALot(msgs,interval)
  local e={}
  local ret={}
  if interval==nil then interval=3000 end --3 seconds is default time between messages
  for aux=1,table.getn(msgs) do
      e[aux]={}
      doCreatureSayWithDelay(getNpcCid(),msgs[aux],TALKTYPE_PRIVATE_NP,(aux-1)*interval,e[aux])
      table.insert(ret,e[aux])
  end
  return(ret)
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
    
    if(msgcontains(msg, 'Blessing') or msgcontains(msg, 'blessing')) then
    selfSay('Vejamos, posso vender pra você {Bless} e também {Bless PvP}, o que deseja?', cid)
    talkState[talkUser] = 1
    
    elseif(msgcontains(msg, 'Comando') or msgcontains(msg, 'comando') or msgcontains(msg, 'Comando Bless') or msgcontains(msg, 'comando bless')) then
    selfSay('Eu posso vender para você o comando "!bless full". No entanto, ele custa {120.000 gold coin}. Deseja comprar?', cid)
    talkState[talkUser] = 2
    
    elseif((msgcontains(msg, 'Yes') or msgcontains(msg, 'yes')) and talkState[talkUser] == 2) then
        if getPlayerStorageValue(cid,834005) == 1 then
            selfSay('Você já comprou esse comando.', cid)
            talkState[talkUser] = 0
        else
            if doPlayerRemoveMoney(cid, 120000) == TRUE then
                selfSay('Pronto! Agora você pode usar o comando {!bless}', cid)
                doSendMagicEffect(getPlayerPosition(cid), 49)
                setPlayerStorageValue(cid, 834005, 1)
                talkState[talkUser] = 0
            else
            selfSay('Você não tem o dinheiro necessário.', cid)
            talkState[talkUser] = 0
            end
        end
        
    elseif((msgcontains(msg, 'No') or msgcontains(msg, 'no')) and talkState[talkUser] == 2) then
            selfSay('Sem problemas.', cid)
            talkState[talkUser] = 0
    
    elseif(msgcontains(msg, 'Bless') or msgcontains(msg, 'bless')) then
        selfSay('Eu posso lhe conceder todas as benções por {50.000 gold coin}. Deseja comprar? - [{Yes} | {No}]', cid)
        talkState[talkUser] = 3
    
        elseif((msgcontains(msg, 'Yes') or msgcontains(msg, 'yes')) and talkState[talkUser] == 3) then
            if getPlayerBlessing(cid, 1) or getPlayerBlessing(cid, 2) or getPlayerBlessing(cid, 3) or getPlayerBlessing(cid, 4) or getPlayerBlessing(cid, 5) then
                selfSay('Você já tem todas as benções.', cid)
                talkState[talkUser] = 0
            else
            if doPlayerRemoveMoney(cid, 50000) == TRUE then
                selfSay('Você agora está protegido!', cid)
                doSendMagicEffect(getPlayerPosition(cid), 49)
                doPlayerAddBlessing(cid, 1)
                doPlayerAddBlessing(cid, 2)
                doPlayerAddBlessing(cid, 3)
                doPlayerAddBlessing(cid, 4)
                doPlayerAddBlessing(cid, 5)
                talkState[talkUser] = 0
            else
            selfSay('Você não tem o dinheiro necessário.', cid)
            end
        end
    
    elseif((msgcontains(msg, 'No') or msgcontains(msg, 'no')) and talkState[talkUser] == 3) then
            selfSay('Tudo bem, mas tenho novas coisas para vender.', cid)
            talkState[talkUser] = 0
			
	elseif(msgcontains(msg, 'Bless PvP') or msgcontains(msg, 'bless pvp')) then
        selfSay('Eu posso lhe conceder a Bless PvP por {50.000 gold coin}. Deseja comprar? - [{Yes} | {No}]', cid)
        talkState[talkUser] = 4
    
        elseif((msgcontains(msg, 'Yes') or msgcontains(msg, 'yes')) and talkState[talkUser] == 4) then
            if getPlayerBlessing(cid, 6) then
                selfSay('Você já tem todas as benções.', cid)
                talkState[talkUser] = 0
            else
				if doPlayerRemoveMoney(cid, 50000) == TRUE then
					selfSay('Você agora está protegido!', cid)
					doSendMagicEffect(getPlayerPosition(cid), 49)
	 --             doPlayerSetPVPBlessing(cid)
					doPlayerAddBlessing(cid, 6)
					talkState[talkUser] = 0
				else
				selfSay('Você não tem o dinheiro necessário.', cid)
				end
			end
    
    elseif((msgcontains(msg, 'No') or msgcontains(msg, 'no')) and talkState[talkUser] == 4) then
            selfSay('Volte quando tiver interesse.', cid)
            talkState[talkUser] = 0
    
        end      
    return TRUE
end

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

 

cms1-pr%C3%AAmio.png

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.6k

Informação Importante

Confirmação de Termo