Ir para conteúdo
  • Cadastre-se

(Resolvido)Erro na Task Magnus


Ir para solução Resolvido por Kemmlly,

Posts Recomendados

Boa Noite, estou com um "pequeno" problema com a Task Magnus Challenger...

 

Citar

 

 

Sem título.png

Se alguém puder me dar um Help aqui ficarei grato!

No aguardo...

Link para o post
Compartilhar em outros sites
51 minutos atrás, cliverson disse:

Boa Noite, estou com um "pequeno" problema com a Task Magnus Challenger...

 

 

Sem título.png

Se alguém puder me dar um Help aqui ficarei grato!

No aguardo...

 

Mande pra mim o conteúdo do zezeniaa.lua e o xml do npc.

Esse erro geralmente acontece quando o script.lua está com nome diferente do que está declarado no xml do npc ou no proprio xml está com o nome do script errado. Verifica os dois se estão corretos, se estiverem me manda o conteúdo que dou uma olhada.

Link para o post
Compartilhar em outros sites
Citar

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

-- OTServ event handling functions start
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

-------------------------------- EXTERN CONFIG --------------------------------
local config = {
    levelcollect = 30, --- level pra poder fazer tasks do tipo collect
    time = 8 * 60 * 60, --- tempo que vc vai ficar sem poder falar com ele caso abandone uma task (em segundos)
    bonus = 1.2, --- bonus de exp/gold caso a task escolhida seja random (1.2 = 20% a mais)
    multiplicator = 1 --- multiplicador de exp/gold/skills (coloque de acordo com a necessidade do seu server)
}

local easy = {
    [1] = "Goblin",
    [2] = "Troll",
    [3] = "Rotworm",
    [4] = "Dwarf",
    [5] = "Amazon",
    [6] = "Elf",
    [7] = "Wolf",
    [8] = "Orc",
    [9] = "Minotaur"
}

local eacollect = {
    [1] = {id = 5880, count = 20}, -- iron ore
    [2] = {id = 5902, count = 15}, -- honeycomb
    [3] = {id = 5878, count = 10}, -- minotaur leather
    [4] = {id = 5890, count = 20}, -- chicken feather
    [5] = {id = 5894, count = 15}, -- bat wing
    [6] = {id = 5896, count = 10}, -- bear pawn
    [7] = {id = 5897, count = 20}, -- wolf pawn
    [8] = {id = 5921, count = 15}, -- heaven blossom
    [9] = {id = 3956, count = 10} --  elephant tusk
}


local medium = {
    [1] = "Cyclops",
    [2] = "Ghoul",
    [3] = "Dragon",
    [4] = "Mammoth",
    [5] = "Vampire",
    [6] = "Fire Devil",
    [7] = "Fire Elemental",
    [8] = "Valkyrie",
    [9] = "Monk"
}

local medcollect = {
    [1] = {id = 5876, count = 35}, -- lizard leather
    [2] = {id = 5678, count = 30}, -- tortoise egg
    [3] = {id = 5898, count = 25}, -- beholder eye
    [4] = {id = 5899, count = 35}, -- turtle shell
    [5] = {id = 2229, count = 30}, -- skull
    [6] = {id = 5877, count = 25}, -- dragon leather
    [7] = {id = 5920, count = 30} -- dragon scale
}

local hard = {
    [1] = "Giant Spider",
    [2] = "Dragon Lord",
    [3] = "Grim Reaper",
    [4] = "Demon",
    [5] = "Crystal Spider",
    [6] = "Demon Skeleton",
    [7] = "Juggernaut",
    [8] = "Destroyer",
    [9] = "Hand of Cursed Fate"
}

local hardcollect = {
    [1] = {id = 5882, count = 50}, -- red dragon scale
    [2] = {id = 5948, count = 45}, -- red dragon leather
    [3] = {id = 5930, count = 40}, -- behemoth claw
    [4] = {id = 5879, count = 50}, -- giant spider silk
    [5] = {id = 5954, count = 45}, -- demon horn
    [6] = {id = 6500, count = 40}, -- demoniac essence
    [7] = {id = 5944, count = 45}, -- soul orb
}

local storages = {
    name = 95672,
    count = 95673,
    maxcount = 95674,
    difficult = 95675,
    length = 95676,
    delay = 95677,
    type = 95678,
}
-------------------------------- END OF EXTERN CONFIG --------------------------------
function creatureSayCallback(cid, type, msg)
    if (not npcHandler:isFocused(cid)) then
        return false
    end
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
-------------------------------- INTERN CONFIG CAN BE DONE HERE --------------------------
local short = 0 + (math.random(1,3) * 50) -- quantidade de monstros no curto
local median = 100 + (math.random(1,3) * 50) -- quantidade de monstros no mediano
local long = 200 + (math.random(1,3) * 100) -- quantidade de monstros no longo

local gold = 1000 * ((getPlayerStorageValue(cid, storages.length)) + (getPlayerStorageValue(cid, storages.difficult))) * config.multiplicator
local experience = ((getExperienceForLevel(getPlayerLevel(cid) + 1) - getExperienceForLevel(getPlayerLevel(cid))) / 100) * ((getPlayerStorageValue(cid, storages.length)) * (getPlayerStorageValue(cid, storages.difficult))) * config.multiplicator
-------------------------------- END OF INTERN CONFIG --------------------------

local type = getPlayerStorageValue(cid, storages.type)
    if (msgcontains(msg, 'task') or msgcontains(msg, 'challenge')) and (getPlayerStorageValue(cid, storages.delay) - os.time()) <= 0 then
        if getPlayerStorageValue(cid, storages.maxcount) > 3 and getPlayerStorageValue(cid, storages.type) == 1 then
            talkState[talkUser] = 6
            selfSay('Your task is to kill {'..getPlayerStorageValue(cid, storages.maxcount)..' '..getPlayerStorageValue(cid, storages.name)..'s}. Hurry with this or you want to {give up}?!', cid)
        elseif getPlayerStorageValue(cid, storages.maxcount) > 3 and getPlayerStorageValue(cid, storages.type) == 2 then
            talkState[talkUser] = 6
            selfSay('Your task is to collect {'.. getPlayerStorageValue(cid, storages.maxcount)..' '.. getItemNameById(getPlayerStorageValue(cid, storages.name)) ..'s}. Hurry with this or you want to {give up}?!', cid)
        else
            talkState[talkUser] = 1
            selfSay('I have two types of tasks, you want to {kill} monsters or to {collect} some items for me? You can also let me choose a {random} one for you, garanting a final bonus in your reward.', cid)
        end
    elseif (msgcontains(msg, 'kill') and talkState[talkUser] == 1) then
        talkState[talkUser] = 2
        setPlayerStorageValue(cid, storages.type, 1)
        selfSay('I have all kinds of tasks, you want a {easy}, {medium} or are you up to a {hard} one?', cid)
    elseif (msgcontains(msg, 'collect') and talkState[talkUser] == 1 and getPlayerLevel(cid) >= config.levelcollect) then
        talkState[talkUser] = 2
        setPlayerStorageValue(cid, storages.type, 2)
        selfSay('I have all kinds of tasks, you want a {easy}, {medium} or are you up to a {hard} one?', cid)
    elseif (msgcontains(msg, 'collect') and talkState[talkUser] == 1 and getPlayerLevel(cid) < config.levelcollect) then
        talkState[talkUser] = 1
        selfSay('You can only do collect tasks once you reach level '..config.levelcollect..'.', cid)
    ------- difficult ---------
    elseif (msgcontains(msg, 'random') and talkState[talkUser] == 1) then
        talkState[talkUser] = 4
        selfSay('Are you sure about this?', cid)
        setPlayerStorageValue(cid, storages.type, math.random(1,2))
        setPlayerStorageValue(cid, storages.difficult, math.random(2,4) * config.bonus)
        setPlayerStorageValue(cid, storages.length, math.random(2,4) * config.bonus)
    elseif (msgcontains(msg, 'hard') and talkState[talkUser] == 2) then
        talkState[talkUser] = 3
        selfSay('I have all kinds of tasks, you want a {short}, {median} or are you up to a {long} one?.', cid)
        setPlayerStorageValue(cid, storages.difficult, 4)
    elseif (msgcontains(msg, 'medium') and talkState[talkUser] == 2) then
        talkState[talkUser] = 3
        selfSay('I have all kinds of tasks, you want a {short}, {median} or are you up to a {long} one?.', cid)
        setPlayerStorageValue(cid, storages.difficult, 3)
    elseif (msgcontains(msg, 'easy') and talkState[talkUser] == 2) then
        talkState[talkUser] = 3
        selfSay('I have all kinds of tasks, you want a {short}, {median} or are you up to a {long} one?.', cid)
        setPlayerStorageValue(cid, storages.difficult, 2)
    ------- bye ---------
    elseif (msgcontains(msg, 'no')) and isInArray({1, 6, 7}, talkState[talkUser]) then
        talkState[talkUser] = 0
        selfSay('Clearly you are not ready. We can talk later...', cid)
    ------- length ---------
    elseif (msgcontains(msg, 'short') and talkState[talkUser] == 3) then
        talkState[talkUser] = 4
        selfSay('Are you sure about this?', cid)
        setPlayerStorageValue(cid, storages.length, 2)
    elseif (msgcontains(msg, 'median') and talkState[talkUser] == 3) then
        talkState[talkUser] = 4
        selfSay('Are you sure about this?', cid)
        setPlayerStorageValue(cid, storages.length, 3)
    elseif (msgcontains(msg, 'long') and talkState[talkUser] == 3) then
        talkState[talkUser] = 4
        selfSay('Are you sure about this?', cid)
        setPlayerStorageValue(cid, storages.length, 4)
    ----------- give up option -----------
    elseif (msgcontains(msg, 'give up') and talkState[talkUser] == 6) then
        selfSay('Are you saying that you want to give up this task? I will not give you any other task in the next '.. (config.time/3600) ..' hour(s).', cid)
        talkState[talkUser] = 7
    elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 7) then
        selfSay('Since you will not help me, get out of here.', cid)
        setPlayerStorageValue(cid, storages.maxcount, 0)
        setPlayerStorageValue(cid, storages.delay, os.time() + config.time)
        talkState[talkUser] = 0
    -----------------------
    ------- checking ---------
    elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 4) then
        local length = getPlayerStorageValue(cid, storages.length)
        local difficult = getPlayerStorageValue(cid, storages.difficult)
        if type == 1 then
            if length == 2 then
                setPlayerStorageValue(cid, storages.maxcount, short)
            elseif length == 3 then
                setPlayerStorageValue(cid, storages.maxcount, median)
            else
                setPlayerStorageValue(cid, storages.maxcount, long)
            end
            if difficult == 2 then
                setPlayerStorageValue(cid, storages.name, easy[math.random(1, #easy)])
            elseif difficult == 3 then
                setPlayerStorageValue(cid, storages.name, medium[math.random(1, #medium)])
            else
                setPlayerStorageValue(cid, storages.name, hard[math.random(1, #hard)])
            end
            setPlayerStorageValue(cid, storages.count, 0)    
            talkState[talkUser] = 0
            selfSay('OK then.. your task is to kill '..getPlayerStorageValue(cid, storages.maxcount)..' '..getPlayerStorageValue(cid, storages.name)..'s. Do not spare any monster!', cid)
        elseif type == 2 then
            if length == 2 then
                setPlayerStorageValue(cid, storages.maxcount, eacollect[math.random(1, #eacollect)].count)
            elseif length == 3 then
                setPlayerStorageValue(cid, storages.maxcount, medcollect[math.random(1, #medcollect)].count)
            else
                setPlayerStorageValue(cid, storages.maxcount, hardcollect[math.random(1, #hardcollect)].count)
            end
            if difficult == 2 then
                setPlayerStorageValue(cid, storages.name, eacollect[math.random(1, #eacollect)].id)
            elseif difficult == 3 then
                setPlayerStorageValue(cid, storages.name, medcollect[math.random(1, #medcollect)].id)
            else
                setPlayerStorageValue(cid, storages.name, hardcollect[math.random(1, #hardcollect)].id)
            end
            setPlayerStorageValue(cid, storages.count, 0)    
            talkState[talkUser] = 0
            selfSay('OK then.. your task is to collect {'.. getPlayerStorageValue(cid, storages.maxcount)..' '.. getItemNameById(getPlayerStorageValue(cid, storages.name)) ..'s}. Bring me the proof that you made it!', cid)
        end
    elseif (msgcontains(msg, 'no') and talkState[talkUser] == 4) then
        talkState[talkUser] = 0
        selfSay('Ok, come back when you have the guts.', cid)
    ------- reward ---------
    elseif msgcontains(msg, 'reward') then
        if type == 1 then
            if getPlayerStorageValue(cid, storages.count) >= getPlayerStorageValue(cid, storages.maxcount) and getPlayerStorageValue(cid, storages.maxcount) > 3  then
                selfSay('You finished the quest, now you want to receive your reward in {gold}, {trainning} or in {experience}?', cid)
                talkState[talkUser] = 5
            else
                selfSay('There is no reward for those who did not complete a challenge.', cid)
                talkState[talkUser] = 0
            end
        elseif type == 2 then
            if getPlayerItemCount(cid, getPlayerStorageValue(cid, storages.name)) >= getPlayerStorageValue(cid, storages.maxcount) and getPlayerStorageValue(cid, storages.maxcount) > 3  then
                selfSay('You finished the quest, now you want to receive your reward in {gold}, {trainning} or in {experience}?', cid)
                talkState[talkUser] = 5
            else
                selfSay('There is no reward for those who did not complete a challenge.', cid)
                talkState[talkUser] = 0
            end
        else
            selfSay('There is no reward for those who did not complete a challenge.', cid)
            talkState[talkUser] = 0
        end
        ---------- checking rewards ---------------
    elseif (msgcontains(msg, 'gold') and talkState[talkUser] == 5 ) then
        if (type == 1) or (doPlayerRemoveItem(cid, getPlayerStorageValue(cid, storages.name), getPlayerStorageValue(cid, storages.maxcount)) and type == 2) then
            for k, v in pairs(storages) do
                setPlayerStorageValue(cid, v, 0)
            end
            doPlayerAddMoney(cid, gold)
            talkState[talkUser] = 0
            selfSay('Thanks for your help, here is your prize..', cid)
        else
            selfSay('Something went wrong..', cid)
        end
    elseif (msgcontains(msg, 'experience') and talkState[talkUser] == 5) then
            if (type == 1) or (doPlayerRemoveItem(cid, getPlayerStorageValue(cid, storages.name), getPlayerStorageValue(cid, storages.maxcount)) and type == 2) then
                for k, v in pairs(storages) do
                    setPlayerStorageValue(cid, v, 0)
                end
                doPlayerAddExperience(cid, experience)
                talkState[talkUser] = 0    
                selfSay('Thanks for your help, here is your prize..', cid)
            else
                selfSay('Something went wrong..', cid)
            end            
    elseif (msgcontains(msg, 'trainning') and talkState[talkUser] == 5) then
        talkState[talkUser] = 8
        selfSay('Which skill you want to train with me? choose between {axe}, {distance}, {club}, {sword}, {shield} and {magic}', cid)
    ----------------------- SKILL REWARD -----------------------    
    elseif (SKILL_IDS[msg] and talkState[talkUser] == 8) then
        if (type == 1) or (doPlayerRemoveItem(cid, getPlayerStorageValue(cid, storages.name), getPlayerStorageValue(cid, storages.maxcount)) and type == 2) then
        -- a divisao por 3000 foi porque cada ponto de skill try equivale a 30 tries de skill e nos naturalmente dividimos por 100. 1/30 * 1/100 = 1/3000
        local qnt = math.ceil(getPlayerRequiredSkillTries(cid, SKILL_IDS[msg], getPlayerSkillLevel(cid, SKILL_IDS[msg]) + 1)/3000) * ((getPlayerStorageValue(cid, storages.length)) * (getPlayerStorageValue(cid, storages.difficult)) * config.multiplicator) 
            for k, v in pairs(storages) do
                setPlayerStorageValue(cid, v, 0)
            end
            doPlayerAddSkillTry(cid, SKILL_IDS[msg], qnt)
            doSendMagicEffect(getCreaturePosition(cid), 39)
            talkState[talkUser] = 0    
            selfSay('Thanks for your help, here is your prize..', cid)
        else
            selfSay('Something went wrong..', cid)
        end        
    ----------------------- msg when blocked --------------
    elseif (msgcontains(msg, 'task') or msgcontains(msg, 'challenge')) and (getPlayerStorageValue(cid, storages.delay) - os.time()) > 0 then
        talkState[talkUser] = 0    
        selfSay('I can not trust you since you failed in the last job. You will have to wait until I feel that I can trust you again..', cid)
    end
return true
end

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

 

Citar

<npc name="Magnus" script="data/npc/scripts/zezeniaa.lua" access="5" lookdir="1">
<health now="1000" max="1000"/>
<look type="134" head="39" body="113" legs="38" feet="0" addons="3"/>
    <parameters>
        <parameter key="message_greet" value="Hello |PLAYERNAME|.I've been wondering if you would never appear.. Are you interested in a {challenge} or you're just looking for your {reward}?" />
    </parameters>
</npc>

Kemmlly

Editado por cliverson (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Solução

Primeiro vê se o script ta com o nome zezeniaa.lua mesmo ou tem alguma letra ou espaço a mais, vê se ele está realmente em data/npc/scripts, depois verifica se a extensão está .lua mesmo ou vc salvou em outra sem querer. Esse erro é quando o XML do NPC não  acha o arquivo que você declarou em script="", acredito q um desse motivos seja o causador do problema.

Link para o post
Compartilhar em outros sites

hahaha...

Pois é você tinha razão! kk

o Npc não estava em Script! -.- e o .lua estava errado!

Descuido meu rsrs

 

Obrigado de novo Kemmlly!

Rep+

 

@Edit

Agora o erro é esse! \/

Quando completo a task tem a opção de ganhar um skill (axe, club...)

quando escolho a skill da esse erro :c

Help d novo! :(

erro task.png

Editado por cliverson (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
9 horas atrás, cliverson disse:

hahaha...

Pois é você tinha razão! kk

o Npc não estava em Script! -.- e o .lua estava errado!

Descuido meu rsrs

 

Obrigado de novo Kemmlly!

Rep+

 

@Edit

Agora o erro é esse! \/

Quando completo a task tem a opção de ganhar um skill (axe, club...)

quando escolho a skill da esse erro :c

Help d novo! :(

erro task.png

 

Pelo que vi aq, esse erro só da quando o jogador escolhe o skill "MAGIC" , os demais skills funcionam normalmente. Tem que adicionar um IF para se o skill selecionado for MAGIC fazer uma conta diferente para adicionar, só que agora estou meio sem tempo por estou no trabalho, se você não conseguir, eu posso fazer pra você amanhã a tarde.

Link para o post
Compartilhar em outros sites
6 horas atrás, Kemmlly disse:

 

Pelo que vi aq, esse erro só da quando o jogador escolhe o skill "MAGIC" , os demais skills funcionam normalmente. Tem que adicionar um IF para se o skill selecionado for MAGIC fazer uma conta diferente para adicionar, só que agora estou meio sem tempo por estou no trabalho, se você não conseguir, eu posso fazer pra você amanhã a tarde.

6 horas atrás, Kemmlly disse:

Realmente é o MAGIC mesmo, se vc puder me ajudar ficarei grato ☺

No aguardo e obrigado pela força!  Abraço.. 

 

Editado por cliverson (veja o histórico de edições)
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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo