Ir para conteúdo

Ajuda a arrumar esse script.


gabriel28

Posts Recomendados

Estou com um script de segunda promotion, é um script que está associado a um de segunda promotion, que se consegue fazendo essa task com o NPC., mas está dando um erro nesse script que é pra colocar em criaturescript, segue ele:

local Config = {
    Monsters = {
      -- ["Name"] = {amount = quantidade}
      ["Demon"] = {amount = 5},
      ["Hydra"] = {amount = 10},
    },
    StoragePro = 54661, -- Não mexer se não souber editar
    Money = 100 -- Dinheiro
}
function onKill(cid, target)
	if not isMonster(target) and getPlayerStorageValue(cid, Config.StoragePro) >= (2 + #Config.StoragePro) then
		return false
	end
	local monster = Config.Monsters[getCreatureName(target):lower]
	if monster then
		local sto = getPlayerStorageValue(cid, monster)
		if sto < (monster.amount - 1) then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Task message: ["  .. (sto + 1) ..  "/" .. monster.amount .. "] of " .. getCreatureName(target) .. ".")
			setPlayerStorageValue(cid, monster, (sto + 1))
		elseif sto == (monster.amount - 1)
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations!! you have killed"  .. (sto + 1) ..  "/" .. monster.amount .. "] of " .. getCreatureName(target) .. "s ands and completed the task.")
			setPlayerStorageValue(cid, monster, (sto + 1)) 
			setPlayerStorageValue(cid, Config.StoragePro, (getPlayerStorageValue(cid, Config.StoragePro) + 1))
		end
	end
	return true
end
function onLogin(cid)
	registerCreatureEvent('taskNpc')
	return true
end

O erro é esse : input:14: function arguments expected near ']' , nessa linha: local monster = Config.Monsters[getCreatureName(target):lower]

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

local Config = {
    Monsters = {
      -- ["Name"] = {amount = quantidade}
      ["Demon"] = {amount = 5},
      ["Hydra"] = {amount = 10},
    },
    StoragePro = 54661, -- Não mexer se não souber editar
    Money = 100 -- Dinheiro
}
function onKill(cid, target)
	if not isMonster(target) and getPlayerStorageValue(cid, Config.StoragePro) >= (2 + #Config.StoragePro) then
		return false
	end
	local monster = Config.Monsters[getCreatureName(target):lower]
	if monster then
		local sto = getPlayerStorageValue(cid, monster)
		if sto < (monster.amount - 1) then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Task message: ["  .. (sto + 1) ..  "/" .. monster.amount .. "] of " .. getCreatureName(target) .. ".")
			setPlayerStorageValue(cid, monster, (sto + 1))
		elseif sto == (monster.amount - 1)
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations!! you have killed"  .. (sto + 1) ..  "/" .. monster.amount .. "] of " .. getCreatureName(target) .. "s ands and completed the task.")
			setPlayerStorageValue(cid, monster, (sto + 1)) 
			setPlayerStorageValue(cid, Config.StoragePro, (getPlayerStorageValue(cid, Config.StoragePro) + 1))
		end
	end
	return true
end
function onLogin(cid)
	registerCreatureEvent('taskNpc')
	return true
end

não se esqueça em registra o script no login.lua

Link para o comentário
Compartilhar em outros sites

Vlw vocês dois, o erro tava onde o Zipter apontou e estava faltando um then no elseif. Esse script ta perfeito, o problema agora é no script do NPC, se puderem me ajudar, ta ai ele:

 

 

local Config = {

Monsters = {
-- ["Name"] = {amount = quantidade}
["Demon"] = {amount = 30},
["Hydra"] = {amount = 10},
},
StoragePro = 54661, -- Não mexer se não souber editar
Money = 100 -- Dinheiro
}
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 msg = msg:lower()
local release = talkState[talkUser]
if msgcontains(msg, "mission") then
if getPlayerStorageValue(cid, Config.StoragePro) < 1 then
selfSay("A missão para promovido custa " .. Config.Money .. " você aceita fazer ?", cid)
release = 1
elseif getPlayerStorageValue(cid, Config.StoragePro) == (2 + #Config.Monsters) then
selfSay("Você já cumpriu a missão peça pra ser {promovido}.", cid)
release = 2
elseif getPlayerStorageValue(cid, Config.StoragePro) == (3 + #Config.Monsters) then
selfSay("Voce já terminou as missões, pode ir em embora!", cid)
release = 0
end
elseif msgcontains(msg, "yes") and release == 1 then
if doPlayerRemoveMoney(cid, Config.Money) then
local text = ""
for monsters, v in pairs(Config.Monsters) do
txt = txt .. ", "
txt = txt .. v.amount .. " {" .. monsters .. "}"
end
npcHandler:say("A missão é matar esses monstros para mim" .. text .. ".", cid)
for i, _ in pairs(Config.Monsters) do
setPlayerStorageValue(cid, i, 0)
end
setPlayerStorageValue(cid, Config.StoragePro, 1)
release = 0
else
selfSay("Você não tem money suficiente!", cid)
release = 0
end
elseif msgcontains(msg, "no") and release == 2 then
selfSay("Até logo!", cid)
release = 0
end
if msgcontains(msg, "lista") and getPlayerStorageValue(cid, Config.StoragePro) < (#Config.Monster + 3) then
local text, n = "", 0
for monsters, v in pairs(Config.Monsters) do
local sto = getPlayerStorageValue(cid, monsters)
if sto < v.amount then
n = n + 1
text = text .. ", "
text = text .. (tostring(sto) < tostring(1) and v.amount or (tostring(v.amount) - tostring(sto))) .. " {" .. monsters .. "}"
end
end
text = text:sub(3)
if n > 1 then
selfSay("Para terminar sua missão você ainda tem que matar esses monstros : " .. text, cid)
release = 0
elseif n == 1 then
selfSay("Você só tem mais um monstro à matar : " .. text, cid)
release = 0
else
selfSay("Você já terminou de matar os monstro que lhe pedi, agora sim tu é digno de ser {promovido}.", cid)
release = 2
end
elseif msgcontains(msg, "promovido") and release == 2 then
selfSay("Aqui está sua promoção jovem soldado!!", cid)
setPlayerVocation(cid, (getPlayerVocation(cid) + 4))
setPlayerStorageValue(cid, Config.StoragePro, (#Config.Monsters + 3))
-- Para deixar em utilizavel a storage para outras coisas
for monsters, _ in pairs(Config.Monsters) do
setPlayerStorageValue(cid, monsters, -1)
end
release = 0
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Ta dando erro na linha 16 >function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end< e na 55 >if msgcontains(msg, "lista") and getPlayerStorageValue(cid, Config.StoragePro) < (#Config.Monster + 3) then<.
Pelo que diz na distro, tem haver com a linha 393 >if(callback ~= nil and callback(cid, class, msg)) then< do npchandler.lua.
Se puderem me ajudar de novo, agradeço.
Link para o comentário
Compartilhar em outros sites

Pelo que estou vendo aqui, esse script ta cheio de bug ainda. Ele não responde quando digo yes quando ele me pergunta se aceito fazer a missão por 100k e ainda da erro no onLogin do script do creaturescripts logo que algum char entre no jogo. Tem como ajudar?

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

Pelo que estou vendo aqui, esse script ta cheio de bug ainda. Ele não responde quando digo yes quando ele me pergunta se aceito fazer a missão por 100k e ainda da erro no onLogin do script do creaturescripts logo que algum char entre no jogo. Tem como ajudar?

 

o script tá registrado no login.lua?

 

e poste o script com as modificações e sem os outros bugs

Link para o comentário
Compartilhar em outros sites

Resgistrei os eventos no creaturescripts e mesmo assim, sempre que algum char entra, da esse erro no script (no onLogin, ResgistreCreatureEvent: Creature not found).

Segue o lua do creaturescript sem o primeiro erro que me fez vim aqui:

local Config = {
    Monsters = {
      -- ["Name"] = {amount = quantidade}
      ["Demon"] = {amount = 5},
      ["Hydra"] = {amount = 10},
    },
    StoragePro = 54661, -- Não mexer se não souber editar
    Money = 100 -- Dinheiro
}
function onKill(cid, target)
	if not isMonster(target) and getPlayerStorageValue(cid, Config.StoragePro) >= (2 + #Config.StoragePro) then
		return false
	end
	local monster = Config.Monsters[getCreatureName(target):lower()]
	if monster then
		local sto = getPlayerStorageValue(cid, monster)
		if sto < (monster.amount - 1) then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Task message: ["  .. (sto + 1) ..  "/" .. monster.amount .. "] of " .. getCreatureName(target) .. ".")
			setPlayerStorageValue(cid, monster, (sto + 1))
		elseif sto == (monster.amount - 1)
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations!! you have killed"  .. (sto + 1) ..  "/" .. monster.amount .. "] of " .. getCreatureName(target) .. "s ands and completed the task.")
			setPlayerStorageValue(cid, monster, (sto + 1)) 
			setPlayerStorageValue(cid, Config.StoragePro, (getPlayerStorageValue(cid, Config.StoragePro) + 1))
		end
	end
	return true
end
function onLogin(cid)
	registerCreatureEvent('taskNpc')
	return true
end
Editado por gabrielvs
Link para o comentário
Compartilhar em outros sites

local Config = {
Monsters = {
-- ["Name"] = {amount = quantidade}
["Demon"] = {amount = 5},
["Hydra"] = {amount = 10},
},
StoragePro = 54661, -- Não mexer se não souber editar
Money = 100 -- Dinheiro
}
function onKill(cid, target)
if not isMonster(target) and getPlayerStorageValue(cid, Config.StoragePro) >= (2 + #Config.StoragePro) then
return false
end
local monster = Config.Monsters[getCreatureName(target):lower()]
if monster then
local sto = getPlayerStorageValue(cid, monster)
if sto < (monster.amount - 1) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Task message: [" .. (sto + 1) .. "/" .. monster.amount .. "] of " .. getCreatureName(target) .. ".")
setPlayerStorageValue(cid, monster, (sto + 1))
elseif sto == (monster.amount - 1) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations!! you have killed" .. (sto + 1) .. "/" .. monster.amount .. "] of " .. getCreatureName(target) .. "s ands and completed the task.")
setPlayerStorageValue(cid, monster, (sto + 1)) 
setPlayerStorageValue(cid, Config.StoragePro, (getPlayerStorageValue(cid, Config.StoragePro) + 1))
end
end
return true
end
function onLogin(cid)
registerCreatureEvent('taskNpc')
return true
end 

utilize o script assim e poste seu login.lua aqui também

Link para o comentário
Compartilhar em outros sites

login.lua:

 

 

local config = {

loginMessage = getConfigValue('loginMessage'),
useFragHandler = getBooleanFromString(getConfigValue('useFragHandler'))
}
function onLogin(cid)
accountManager = "Account Manager"
managerCounter = 0
for i, player in ipairs(getOnlinePlayers()) do
if accountManager:lower() == player:lower() then
managerCounter = managerCounter + 1
end
end
if managerCounter >= 3 then
return false
end
local loss = getConfigValue('deathLostPercent')
if(loss ~= nil) then
doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, loss * 10)
end
local accountManager = getPlayerAccountManager(cid)
if(accountManager == MANAGER_NONE) then
local lastLogin, str = getPlayerLastLoginSaved(cid), config.loginMessage
if(lastLogin > 0) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
str = "Your last visit was on " .. os.date("%a %b %d %X %Y", lastLogin) .. "."
else
str = str .. " Please choose your outfit."
doPlayerSendOutfitWindow(cid)
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
elseif(accountManager == MANAGER_NAMELOCK) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, it appears that your character has been namelocked, what would you like as your new name?")
elseif(accountManager == MANAGER_ACCOUNT) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, type 'account' to manage your account and if you want to start over then type 'cancel'.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, type 'account' to create an account or type 'recover' to recover an account.")
end
if(not isPlayerGhost(cid)) then
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT)
end
registerCreatureEvent(cid, "Mail")
registerCreatureEvent(cid, "GuildMotd")
registerCreatureEvent(cid, "Idle")
if(config.useFragHandler) then
registerCreatureEvent(cid, "SkullCheck")
end
registerCreatureEvent(cid, "ReportBug")
registerCreatureEvent(cid, "AdvanceSave")
registerCreatureEvent(cid, "attackguild")
registerCreatureEvent(cid, "advance")
registerCreatureEvent(cid, "FimPremium")
registerCreatureEvent(cid, "SkullCheck")
registerCreatureEvent(cid, "demonOakLogout")
registerCreatureEvent(cid, "demonOakDeath")
registerCreatureEvent(cid, "ReportBug")
registerCreatureEvent(cid, VipReceive)
registerCreatureEvent(cid, "PlayerKill")
registerCreatureEvent(cid, "KillingInTheNameOf")
registerCreatureEvent(cid, "targetCreature")
registerCreatureEvent(cid, "DeathSystem")
registerCreatureEvent(cid, "KillPlayer")
registerCreatureEvent(cid, "showKD")
registerCreatureEvent(cid, "TiraBattle")
registerCreatureEvent(cid, "tp")
registerCreatureEvent(cid, "verf_taskNpc")
registerCreatureEvent(cid, "taskNpc")
if (InitArenaScript ~= 0) then
InitArenaScript = 1
for i = 42300, 42309 do
setGlobalStorageValue(i, 0)
setGlobalStorageValue(i+100, 0)
end
end
if getPlayerStorageValue(cid, 42309) < 1 then
for i = 42300, 42309 do
setPlayerStorageValue(cid, i, 0)
end
end
if getPlayerStorageValue(cid, 42319) < 1 then
for i = 42310, 42319 do
setPlayerStorageValue(cid, i, 0)
end
end
if getPlayerStorageValue(cid, 42329) < 1 then
for i = 42320, 42329 do
setPlayerStorageValue(cid, i, 0)
end
end
if getPlayerStorageValue(cid, 42355) == -1 then
setPlayerStorageValue(cid, 42355, 0)
end
setPlayerStorageValue(cid, 42350, 0)
setPlayerStorageValue(cid, 42352, 0)
-- attribute system by draky lucas
if getPlayerStorageValue(cid,storagesUtilizadas.storageLevelJaPego) == -1 then
for i = storagesUtilizadas.storageLevelJaPego,storagesUtilizadas.storageMana do
setPlayerStorageValue(cid,i,0)
end
end
registerCreatureEvent(cid,"avancarGanharPontos")
-------------- TASK SYSTEM --------------
registerCreatureEvent(cid,"tasksystem")
if getPlayerStorageValue(cid, 95673) < 0 then
setPlayerStorageValue(cid, 95673, 0)
end
if getPlayerStorageValue(cid, 95674) < 0 then
setPlayerStorageValue(cid, 95674, 0)
end
-----------------------------------
return true
end

E essas duas tags que foram no xml:
<event type="login" name="verf_taskNpc" event="script" value="promot.lua"/>
<event type="kill" name="taskNpc" event="script" value="promot.lua"/>
Link para o comentário
Compartilhar em outros sites

utilize o script do jeito que postei acima e coloque o login.lua assim

function onLogin(cid)
accountManager = "Account Manager"                       
managerCounter = 0

local config = {
loginMessage = getConfigValue('loginMessage'),
useFragHandler = getBooleanFromString(getConfigValue('useFragHandler'))
}  
 
   for i, player in ipairs(getOnlinePlayers()) do
      if accountManager:lower() == player:lower() then             
      managerCounter = managerCounter + 1
      end 
   end
 
   if managerCounter >= 3 then
      return false
   end
local loss = getConfigValue('deathLostPercent')
if(loss ~= nil) then
doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, loss * 10)
end
 
local accountManager = getPlayerAccountManager(cid)
if(accountManager == MANAGER_NONE) then
local lastLogin, str = getPlayerLastLoginSaved(cid), config.loginMessage
if(lastLogin > 0) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
str = "Your last visit was on " .. os.date("%a %b %d %X %Y", lastLogin) .. "."
else
str = str .. " Please choose your outfit."
doPlayerSendOutfitWindow(cid)
end
 
doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
elseif(accountManager == MANAGER_NAMELOCK) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, it appears that your character has been namelocked, what would you like as your new name?")
elseif(accountManager == MANAGER_ACCOUNT) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, type 'account' to manage your account and if you want to start over then type 'cancel'.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, type 'account' to create an account or type 'recover' to recover an account.")
end
 
if(not isPlayerGhost(cid)) then
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT)
end
 
registerCreatureEvent(cid, "Mail")
registerCreatureEvent(cid, "GuildMotd")
 
registerCreatureEvent(cid, "Idle")
if(config.useFragHandler) then
registerCreatureEvent(cid, "SkullCheck")
end
 
registerCreatureEvent(cid, "ReportBug")
registerCreatureEvent(cid, "AdvanceSave")
registerCreatureEvent(cid, "attackguild")
registerCreatureEvent(cid, "advance")
registerCreatureEvent(cid, "FimPremium")
registerCreatureEvent(cid, "SkullCheck")
registerCreatureEvent(cid, "demonOakLogout")
registerCreatureEvent(cid, "demonOakDeath")
registerCreatureEvent(cid, "ReportBug")
registerCreatureEvent(cid, VipReceive)
registerCreatureEvent(cid, "PlayerKill")
registerCreatureEvent(cid, "KillingInTheNameOf")
registerCreatureEvent(cid, "targetCreature")
registerCreatureEvent(cid, "DeathSystem")
registerCreatureEvent(cid, "KillPlayer")
registerCreatureEvent(cid, "showKD")
registerCreatureEvent(cid, "TiraBattle")
registerCreatureEvent(cid, "tp")
registerCreatureEvent(cid, "verf_taskNpc")
registerCreatureEvent(cid, "taskNpc")
 
    if (InitArenaScript ~= 0) then
    InitArenaScript = 1
 
        for i = 42300, 42309 do
            setGlobalStorageValue(i, 0)
            setGlobalStorageValue(i+100, 0)
        end
    end
 
    if getPlayerStorageValue(cid, 42309) < 1 then
        for i = 42300, 42309 do
            setPlayerStorageValue(cid, i, 0)
        end
    end
 
    if getPlayerStorageValue(cid, 42319) < 1 then
        for i = 42310, 42319 do
            setPlayerStorageValue(cid, i, 0)
        end
    end
 
    if getPlayerStorageValue(cid, 42329) < 1 then
        for i = 42320, 42329 do
            setPlayerStorageValue(cid, i, 0)
        end
    end
    if getPlayerStorageValue(cid, 42355) == -1 then
        setPlayerStorageValue(cid, 42355, 0)
    end
    setPlayerStorageValue(cid, 42350, 0)
    setPlayerStorageValue(cid, 42352, 0)
 
-- attribute system by draky lucas
                if getPlayerStorageValue(cid,storagesUtilizadas.storageLevelJaPego) == -1 then
                   for i = storagesUtilizadas.storageLevelJaPego,storagesUtilizadas.storageMana do
                        setPlayerStorageValue(cid,i,0)
                   end
                end
                registerCreatureEvent(cid,"avancarGanharPontos")
 
-------------- TASK SYSTEM --------------
registerCreatureEvent(cid,"tasksystem")
if getPlayerStorageValue(cid, 95673) < 0 then
        setPlayerStorageValue(cid, 95673, 0) 
end
if getPlayerStorageValue(cid, 95674) < 0 then
        setPlayerStorageValue(cid, 95674, 0) 
end
-----------------------------------
return true
end
Link para o comentário
Compartilhar em outros sites

O not onde fica o ot ficou sem net. Amanhã venho aqui e digo se funcionou. Vou dar um rep por agradecimento por está ajudando até agora.

 

EDIT: Ainda ta no mesmo problema. Sempre que algum char entra no jogo, da erro no onLogin do script, mesmo tirando essa função dele. E o NPC não responde quando falamos 'yes' pra aceitar a missão.

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

local Config = {
    Monsters = {
      -- ["Name"] = {amount = quantidade}
      ["Demon"] = {amount = 5},
      ["Hydra"] = {amount = 10},
    },
    StoragePro = 54661, -- Não mexer se não souber editar
    Money = 100 -- Dinheiro
}
function onKill(cid, target)
	if not isMonster(target) and getPlayerStorageValue(cid, Config.StoragePro) >= (2 + #Config.StoragePro) then
		return false
	end
	local monster = Config.Monsters[getCreatureName(target):lower()]
	if monster then
		local sto = getPlayerStorageValue(cid, monster)
		if sto < (monster.amount - 1) then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Task message: ["  .. (sto + 1) ..  "/" .. monster.amount .. "] of " .. getCreatureName(target) .. ".")
			setPlayerStorageValue(cid, monster, (sto + 1))
		elseif sto == (monster.amount - 1) then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations!! you have killed"  .. (sto + 1) ..  "/" .. monster.amount .. "] of " .. getCreatureName(target) .. "s ands and completed the task.")
			setPlayerStorageValue(cid, monster, (sto + 1)) 
			setPlayerStorageValue(cid, Config.StoragePro, (getPlayerStorageValue(cid, Config.StoragePro) + 1))
		end
	end
	return true
end
function onLogin(cid)
	registerCreatureEvent(cid, 'taskNpc')
	return true
end

NPC:

local Config = {
    Monsters = {
        -- ["Name"] = {amount = quantidade}
        ["Demon"] = {amount = 30},
        ["Hydra"] = {amount = 10},
    },
    StoragePro = 54661, -- Não mexer se não souber editar
    Money = 100 -- Dinheiro
}
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 msg = msg:lower()
    if msgcontains(msg, "mission") then
        if getPlayerStorageValue(cid, Config.StoragePro) < 1 then
            selfSay("A missão para promovido custa " .. Config.Money .. " você aceita fazer ?", cid)
            talkState[talkUser] = 1
        elseif getPlayerStorageValue(cid, Config.StoragePro) == (2 + #Config.Monsters) then
            selfSay("Você já cumpriu a missão peça pra ser {promovido}.", cid)
            talkState[talkUser] = 2 
        elseif getPlayerStorageValue(cid, Config.StoragePro) == (3 + #Config.Monsters) then
            selfSay("Voce já terminou as missões, pode ir em embora!", cid)
            talkState[talkUser] = 0
        end
    elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then
        if doPlayerRemoveMoney(cid, Config.Money) then
            local text = ""
            for monsters, v in pairs(Config.Monsters) do
                text = text .. ", "
                text = text .. v.amount .. " {" .. monsters .. "}"
            end
            npcHandler:say("A missão é matar esses monstros para mim" .. text .. ".", cid)
            for i, _ in pairs(Config.Monsters) do
                setPlayerStorageValue(cid, i, 0)
            end
            setPlayerStorageValue(cid, Config.StoragePro, 1)
            talkState[talkUser] = 0
        else
            selfSay("Você não tem money suficiente!", cid)
            talkState[talkUser] = 0
        end
    elseif msgcontains(msg, "no") and talkState[talkUser] == 2 then
        selfSay("Até logo!", cid)
        talkState[talkUser] = 0  
    end
    if msgcontains(msg, "lista") and getPlayerStorageValue(cid, Config.StoragePro) < (#Config.Monsters + 3) then
        local text, n = "", 0
        for monsters, v in pairs(Config.Monsters) do
            local sto = getPlayerStorageValue(cid, monsters)
            if  sto < v.amount then
                n = n + 1
                text = text .. ", "
                text = text .. (tostring(sto) < tostring(1) and v.amount or (tostring(v.amount) - tostring(sto))) .. " {" .. monsters .. "}"
            end
        end
        text = text:sub(3)
        if n > 1 then
            selfSay("Para terminar sua missão você ainda tem que matar esses monstros : " .. text, cid)
            talkState[talkUser] = 0
        elseif n == 1 then
            selfSay("Você só tem mais um monstro à matar : " .. text, cid)
            talkState[talkUser] = 0
        else
            selfSay("Você já terminou de matar os monstro que lhe pedi, agora sim tu é digno de ser {promovido}.", cid)
            talkState[talkUser] = 2
        end
    elseif msgcontains(msg, "promovido") and talkState[talkUser] == 2 then
        selfSay("Aqui está sua promoção jovem soldado!!", cid)
        setPlayerVocation(cid, (getPlayerVocation(cid) + 4))
        setPlayerStorageValue(cid, Config.StoragePro, (#Config.Monsters + 3))
        -- Para deixar em utilizavel a storage para outras coisas
        for monsters, _ in pairs(Config.Monsters) do
            setPlayerStorageValue(cid, monsters, -1)
        end
        talkState[talkUser] = 0
    end
    return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

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