Ir para conteúdo

Featured Replies

Postado

Qual o motivo deste tópico? 

Opa pessoal estou aqui mais uma vez para pedir um suporte!

É o seguinte, estou com um npc que ele da task daily, ok, ele te da 2 opções de task, até ai normal.
Da para você escolher as duas normal.
O problema vem a seguir, exemplo:
* Supondo que eu escolhi a Opção 1, tendo que matar 500 Rat, se o servidor cair ou reiniciar antes que eu termine os 500 Rat, o personagem buga.
* O bug consiste em ficar preso na missão de 500 Rat para sempre, não tem como entregar pois o comando para entrar "reward" não funciona, e não tem como tentar começar outra task pois ele fala que você tem que terminar essa de 500 Rat primeiro. ( Tasker: Voce ja escolheu uma task hoje, termine-a primeiro. )

*Resumindo tudo: Se o player esta no meio da task, e o servidor cai ou reinicia, ele trava naquela task, não consegue entregar e nem tentar entrar em outra.
 

Irei postar a script e xml do npc, foi modificada um pouco por mim, mas total Crédito ao: @MatteusDeli

Citar

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Tasker" script="data/npc/scripts/tasker.lua" walkinterval="2000" speed="0" floorchange="0">
<health now="100" max="100"/>
<look type="10" head="19" body="113" legs="95" feet="115" addons="0"/>
    <parameters>
        <parameter key="message_greet" value="|PLAYERNAME|! Eu tenho uma tarefa para você, diga {daily} pra saber mais. Caso tenha finalizado diga {reward}." />
    </parameters>
</npc>

 

Citar

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

local opcao1 = nil
local opcao2 = nil
local pokemonNameOpcao1 = ''
local pokemonNameOpcao2 = ''
local opcaoSelecionada = nil

function creatureSayCallback(cid, type, msg)

    if(not npcHandler:isFocused(cid)) then
        return false
    end

    if msgcontains(msg, 'daily') then

        if (getPlayerStorageValue(cid, task_start) >= 1) then
            return selfSay("Voce ja escolheu uma task hoje, termine-a primeiro.")
        end

        if (getPlayerStorageValue(cid, task_storage_time) > os.time()) then
            return  selfSay("Voce ja terminou a sua task hoje, volte amanha.")
        end

        setPlayerStorageValue(cid, task_storage_time, -1)
        selfSay("Diga 'monsters' para saber quais monsters estao disponiveis hoje.")
        talkState[cid] = 0
    end

    if (getPlayerStorageValue(cid, task_storage_time) < os.time()) then
        if msgcontains(msg, 'monsters') and talkState[cid] == 0 and pokemonNameOpcao1 == '' and pokemonNameOpcao2 == '' then
            
            opcao1 = PokemonOpcao1()
            opcao2 = PokemonOpcao2()

            pokemonNameOpcao1 = opcao1.PokemonName
            pokemonNameOpcao2 = opcao2.PokemonName

            selfSay("Opcao 1: Voce tera que derrotar "..opcao1.Count.." "..opcao1.PokemonName.."(s).")
            selfSay("Opcao 2: Voce tera que derrotar "..opcao2.Count.." "..opcao2.PokemonName.."(s).")
            
            talkState[cid] = 1
        end

        if msgcontains(msg, 'monsters') and talkState[cid] == 0 and pokemonNameOpcao1 ~= '' and pokemonNameOpcao2 ~= '' then

            selfSay("Essas sao as opcoes de monsters para voce hoje.")
            selfSay("Opcao 1: Voce tera que derrotar "..opcao1.Count.." "..opcao1.PokemonName.."(s).")
            selfSay("Opcao 2: Voce tera que derrotar "..opcao2.Count.." "..opcao2.PokemonName.."(s).")
            talkState[cid] = 1

        end

    end

    if msgcontains(string.lower(msg), string.lower(pokemonNameOpcao1)) and talkState[cid] == 1 then
        opcaoSelecionada = opcao1
        GetOpcaoSelecionada(cid, msg, opcao1)
        StorageStartTaskOpcao1 = opcao1
        setPlayerStorageValue(cid, task_start_opcao1, task_info_table_opcao1)
        talkState[cid] = 0
    end

    if msgcontains(string.lower(msg), string.lower(pokemonNameOpcao2)) and talkState[cid] == 1 then
        opcaoSelecionada = opcao2
        GetOpcaoSelecionada(cid, msg, opcao2)
        setPlayerStorageValue(cid, task_start_opcao2, task_info_table_opcao2)
        talkState[cid] = 0
    end

    if (getPlayerStorageValue(cid, task_finish) >= 1) then
        if (msgcontains(msg, 'reward')) then
            if (opcaoSelecionada ~= nil) then 
                selfSay("Parabens voce acabou a task diaria de hoje. Voce ganhou "..opcaoSelecionada.Experience.." de experiencia e "..opcaoSelecionada.Reward..".")
                doPlayerAddExperience(cid, opcaoSelecionada.Experience)
                doPlayerAddItem(cid, opcaoSelecionada.Reward)
                setPlayerStorageValue(cid, task_storage_time, os.time() + (60 * 60 * task_time))
                setPlayerStorageValue(cid, task_start, -1)
                setPlayerStorageValue(cid, task_finish, -1)
                pokemonNameOpcao1 = ''
                pokemonNameOpcao2 = ''
                opcaoSelecionada = nil
                talkState[cid] = 0
            end
        end
    end

    return TRUE
end

function GetOpcaoSelecionada(cid, msg, opcao)

    if (string.lower(msg) == string.lower(opcao.PokemonName)) then

        setPlayerStorageValue(cid, task_start, 1)
        selfSay("Voce comecou a task, voce precisa matar ["..opcao.Count.." "..opcao.PokemonName.."]. Boa Sorte!")
        npcHandler:releaseFocus(cid)
        talkState[cid] = 0

    end

end

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


+REP, para quem conseguir me ajudar!
Grato desde já!

Resolvido por MatteusDeli

Ir para solução
  • Respostas 6
  • Visualizações 992
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • @knepperzik   Boa tarde, vá até a pasta data/creaturescripts/scripts abra o arquivo login.lua e embaixo aonde está function onLogin(cid) coloque este trecho de código:   if getPlaye

  • @knepperzik   Então o jeito que eu tinha feito é que toda fez que o player logar iria resetar as storages da task, então ele teria que finalizar a task sempre online. Eu fiz uma alteração no

Postado

@knepperzik

 

Boa tarde, vá até a pasta data/creaturescripts/scripts abra o arquivo login.lua e embaixo aonde está function onLogin(cid) coloque este trecho de código:

 

if getPlayerStorageValue(cid, task_start) > 0 then
		ClearAllStoragePlayer(cid)
        setPlayerStorageValue(cid, task_start, -1)
    end

if getPlayerStorageValue(cid, task_finish) > 0 then
   setPlayerStorageValue(cid, task_finish , -1)
end

if getPlayerStorageValue(cid, task_start_opcao1) > 0 then
        setPlayerStorageValue(cid, task_start_opcao1, -1)
    end

if getPlayerStorageValue(cid, task_start_opcao2) > 0 then
        setPlayerStorageValue(cid, task_start_opcao2, -1)
    end

 

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

Postado
  • Autor
Em 11/02/2021 em 16:22, MatteusDeli disse:

@knepperzik

 

Boa tarde, vá até a pasta data/creaturescripts/scripts abra o arquivo login.lua e embaixo aonde está function onLogin(cid) coloque este trecho de código:

 


if getPlayerStorageValue(cid, task_start) > 0 then
		ClearAllStoragePlayer(cid)
        setPlayerStorageValue(cid, task_start, -1)
    end

if getPlayerStorageValue(cid, task_finish) > 0 then
   setPlayerStorageValue(cid, task_finish , -1)
end

if getPlayerStorageValue(cid, task_start_opcao1) > 0 then
        setPlayerStorageValue(cid, task_start_opcao1, -1)
    end

if getPlayerStorageValue(cid, task_start_opcao2) > 0 then
        setPlayerStorageValue(cid, task_start_opcao2, -1)
    end

 

Funcionou de certa forma, ao dar o Server Save ele reseta as tasks, então ele teria que terminar a task antes do Server Save?

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.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo