Ir para conteúdo

Featured Replies

Postado

0.4

 

Bom dia galera, eu preciso de ajuda em um npc de task.

Ele é bem simples, você fala as palavras, ele te da a storage, no creaturescripts pega a storage e conta os monstros na tabela, ai ele te da a storage maior e quando voltar pro npc, ele te da a recompensa. Até ai funciona 100%, o problema é que eu queria colocar pra esse npc dar 2 tasks, quando o player terminar uma, ele pode pegar outra com o mesmo npc. (Lembrando que se eu fizer 2 npcs, funciona normal, mas eu queria fazer em um só)

 

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

local talkState = {}
local quest = 845710


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)
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if(not npcHandler:isFocused(cid)) then
	return false
elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then
	npcHandler:say("OK2", cid)
	talkState[talkUser] = 2
elseif msgcontains(msg, "yes") and talkState[talkUser] == 2 then
	npcHandler:say("OK3", cid)
	setPlayerStorageValue(cid, quest, 2)
	setPlayerStorageValue(cid, 12672, 1)
	talkState[talkUser] = 0
elseif msgcontains(msg, "quest1") then
	local str = getPlayerStorageValue(cid, quest)
	if(str < 2) then
		npcHandler:say("OK1", cid) 
		talkState[talkUser] = 1
		return true
	elseif(str == 2) then
		npcHandler:say("OK4", cid)
	elseif(str == 3) then
		npcHandler:say("Finish", cid)
		setPlayerStorageValue(cid, quest, 4)
		setPlayerStorageValue(cid, 555140, 4)
	elseif(str == 4) then
		npcHandler:say("Over", cid)
	end
	talkState[talkUser] = 0
end
return true
end

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







local keywordHandler2 = keywordHandler:new()
local npcHandler2 = npcHandler:new(keywordHandler2)
NpcSystem.parseParameters(npcHandler2)


function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg2) npcHandler:onCreatureSay(cid, type, msg2) end
function onThink() npcHandler:onThink() end


local talkState2 = {}
local quest2 = 685740

function creatureSayCallback2(cid, type, msg2)
local talkUser2 = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if(not npcHandler:isFocused(cid)) then
	return false
elseif msgcontains(msg2, "yes") and talkState2[talkUser2] == 1 then
	npcHandler:say("sim2", cid)
	talkState2[talkUser2] = 2
elseif msgcontains(msg2, "yes") and talkState2[talkUser2] == 2 then
	npcHandler:say("Sim3", cid)
	setPlayerStorageValue(cid, quest2, 2)
	talkState2[talkUser2] = 0
elseif msgcontains(msg2, "quest2") then
local str2 = getPlayerStorageValue(cid, 555140)
	if(str2 == 1) then
	local stro = getPlayerStorageValue(cid, quest2)
	if(stro < 2) then
		npcHandler:say("Sim", cid) 
		talkState2[talkUser2] = 1
		return true
	elseif(stro == 2) then
		npcHandler:say("Sim4", cid)
	elseif(stro == 3) then
		npcHandler:say("Sim5!", cid)
		setPlayerStorageValue(cid, quest2, 4)
	elseif(stro == 4) then
		npcHandler:say("Over2", cid)
	end
	talkState2[talkUser2] = 0
	else
	npcHandler:say("Nop", cid)
	end
end
return true
end

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

 

Eu tentei fazer isso, que foi colocar 2x o script dele da task e mudar algumas coisas, colocando um "2" na frente. O problema é que ele só reconhece a segunda task, ou seja, a "quest2". Se falar "quest1", ele não diz nada e não da nem um erro no console.

Alguém sabe como colocar 2 tasks nesse npc?

Obrigado.

 

Postado

N sei se é oq vc precisa mas isso aqui é um mod q vou enviar, os creditos ja estao no codigo. 

 

 

<?xml version="1.0" encoding="UTF-8"?>  
<mod name="Simple Task" version="3.0" author="Vodkart" contact="xtibia.com" enabled="yes">  
<config name="task_func"><![CDATA[

tasktabble = {
["wolf"] = {monster_race={"wolf"}, storage_start = 200201, storage = 91001,count = 50,exp = 25000000,money = 100000, reward = {{}}},

["bandit Shinob"] = {monster_race={"bandit Shinob"}, storage_start = 200201, storage = 91002,count = 70,exp = 25000000,money = 100000, reward = {{}}},

["bandit human"] = {monster_race={"Bandit Human"}, storage_start = 200201, storage = 91003,count = 70,exp = 25000000,money = 100000, reward = {{}}},

["shinobi of sound"] = {monster_race={"Shinobi Of Sound"}, storage_start = 200201, storage = 91004,count = 100,exp = 25000000,money = 100000, reward = {{}}},

["bandit gun"] = {monster_race={"Bandit Gun"}, storage_start = 200201, storage = 91005,count = 100,exp = 25000000,money = 100000, reward = {{}}},

["great snake"] = {monster_race={"Great Snake"}, storage_start = 200201, storage = 91006,count = 120,exp = 25000000,money = 100000, reward = {{}}},

["bandit swordman"] = {monster_race={"Bandit Swordman"}, storage_start = 200201, storage = 91007,count = 120,exp = 25000000,money = 100000, reward = {{}}},

["dark snake"] = {monster_race={"Dark Snake"}, storage_start = 200201, storage = 91008,count = 150,exp = 25000000,money = 100000, reward = {{}}},

["fighter"] = {monster_race={"Fighter"}, storage_start = 200201, storage = 91009,count = 150,exp = 25000000,money = 100000, reward = {{}}},

["shinobi fire"] = {monster_race={"Shinobi Fire"}, storage_start = 200201, storage = 91010,count = 160,exp = 25000000,money = 100000, reward = {{}}},

["android"] = {monster_race={"Android"}, storage_start = 200201, storage = 91011,count = 160,exp = 25000000,money = 100000, reward = {{}}},

["ocult shinobi"] = {monster_race={"Ocult Shinobi"}, storage_start = 200201, storage = 91012,count = 180,exp = 25000000,money = 100000, reward = {{}}},

["destroyer"] = {monster_race={"destroyer"}, storage_start = 200201, storage = 91013,count = 180,exp = 25000000,money = 100000, reward = {{}}},

["renegade"] = {monster_race={"renegade"}, storage_start = 200201, storage = 91014,count = 200,exp = 25000000,money = 100000, reward = {{}}},

["wind elemental"] = {monster_race={"Wind Elemental"}, storage_start = 200201, storage = 91015,count = 200,exp = 25000000,money = 100000, reward = {{}}},


["nukenin"] = {monster_race={"Nukenin"}, storage_start = 200201, storage = 91016,count = 250,exp = 25000000,money = 100000, reward = {{}}},

}


configbosses_task = {
{race = "minotaur",Playerpos = {x = 189, y = 57, z = 7}, FromPosToPos = {{x = 186, y = 54, z = 7},{x = 193, y = 60, z = 7}},time = 5},
{race = "necromancer",Playerpos = {x = 196, y = 39, z = 7}, FromPosToPos = {{x = 195, y = 37, z = 7},{x = 198, y = 41, z = 7}}, time = 5},
{race = "dragon",Playerpos = {x = 208, y = 59, z = 7}, FromPosToPos = {{x = 206, y = 56, z = 7},{x = 209, y = 65, z = 7}}, time = 5}
}

function CheckTask(cid)
for k, v in pairs(tasktabble) do
if getPlayerStorageValue(cid,v.storage_start) >= 1 then return true end
end
return false
end
function finisheAllTask(cid)
local config = {
exp = {true,10000000},
money = {true,1000000},
items ={true,{{13393,1},{13424,1},{13425,1}}},
premium ={true,7}
}
local x = true
for k, v in pairs(tasktabble) do
if tonumber(getPlayerStorageValue(cid,v.storage)) then
x = false
end
end
if x == true then
setPlayerStorageValue(cid, 521456, 0)
local b = getGlobalStorageValue(63005) if b == -1 then b = 1 end
setGlobalStorageValue(63005,b+1)
doBroadcastMessage('[Task Mission Complete] '..getCreatureName(cid)..' was the '..b..' to finish the task!.')
doPlayerAddPremiumDays(cid, config.premium[1] == true and config.premium[2] or 0)
doPlayerAddExp(cid, config.exp[1] == true and config.exp[2] or 0)
doPlayerAddMoney(cid, config.money[1] == true and config.money[2] or 0)
if config.items[1] == true then doAddItemsFromList(cid,config.items[2]) end
local dolls = {
    [13401] = "C16 Doll",
    [13402] = "Goku Doll",
    [13403] = "Vegeta Doll",
    [13404] = "Trunks Doll",
    [13405] = "Majin Boo Doll",
    [13406] = "Piccolo Doll",
    [13407] = "Son Gohan Doll",
    [13408] = "Chibi Gohan Doll",
    [13409] = "Cell Doll",
    [13410] = "Uub Doll",
    [13411] = "C17 Doll",
    [13412] = "C18 Doll",
    [13413] = "Cooler Doll",
    [13414] = "Tsuful Doll",
    [13415] = "Dende Doll",
    [13416] = "Gotenks Doll",
    [13417] = "Freeza Doll",
    [13418] = "Jenk Doll",
    [13419] = "Kaio Doll",
    [13420] = "Bardock Doll",
    [13421] = "Broly Doll",
    [13422] = "Saiyan Goten Doll",
    [13423] = "Saiyan Trunks Doll",
}

local rand = {}
for itemid, _ in pairs(dolls) do
    table.insert(rand, itemid)
end
rand = rand[math.random(#rand)]
doItemSetAttribute(doPlayerAddItem(cid, rand), "name", ""..dolls[rand].." / "..getCreatureName(cid).." completou todas tasks")
end
end
function HavePlayerPosition(cid, from, to)
	return isInRange(getPlayerPosition(cid), from, to) and true or false
end
function getRankStorage(cid, value, max, RankName) -- by vodka
local str =""
str = "--[".. (RankName == nil and "RANK STORAGE" or ""..RankName.."") .."]--\n\n"
local query = db.getResult("SELECT `player_id`, `value` FROM `player_storage` WHERE `key` = "..value.." ORDER BY cast(value as INTEGER) DESC;")
if (query:getID() ~= -1) then k = 1 repeat if k > max then break end
str = str .. "\n " .. k .. ". "..getPlayerNameByGUID(query:getDataString("player_id")).." - [" .. query:getDataInt("value") .. "]"
k = k + 1 until not query:next() end return doShowTextDialog(cid, 2529, str)
end
function getItemsInContainerById(container, itemid) -- Function By Kydrai
			local items = {}
			if isContainer(container) and getContainerSize(container) > 0 then
							for slot=0, (getContainerSize(container)-1) do
											local item = getContainerItem(container, slot)
											if isContainer(item.uid) then
															local itemsbag = getItemsInContainerById(item.uid, itemid)
															for i=0, #itemsbag do
																			table.insert(items, itemsbag[i])
															end
											else
															if itemid == item.itemid then
																			table.insert(items, item.uid)
															end
											end
							end
			end
			return items
end
function doPlayerAddItemStacking(cid, itemid, quant) -- by mkalo
	local item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)
	local piles = 0
	if #item > 0 then
			for i,x in pairs(item) do
					if getThing(x).type < 100 then
							local it = getThing(x)
							doTransformItem(it.uid, itemid, it.type+quant)
							if it.type+quant > 100 then
									doPlayerAddItem(cid, itemid, it.type+quant-100)
							end
					else
						   piles = piles+1
					end
			end
	else
			return doPlayerAddItem(cid, itemid, quant)
	end
	if piles == #item then
			doPlayerAddItem(cid, itemid, quant)
	end
end
function getItemsFromList(items) -- by vodka
local str = ''
if table.maxn(items) > 0 then
for i = 1, table.maxn(items) do
str = str .. items[i][2] .. ' ' .. getItemNameById(items[i][1])
if i ~= table.maxn(items) then str = str .. ', ' end end end
return str
end
function doAddItemsFromList(cid,items) -- by vodka
if table.maxn(items) > 0 then
for i = 1, table.maxn(items) do
local count = items[i][2]
while count > 0 do
if isItemStackable(items[i][1]) then
doPlayerAddItemStacking(cid, items[i][1], 1)
else
doPlayerAddItem(cid, items[i][1],1)
end
count = count - 1
end
end
end
end
		function pairsByKeys(t, f)
		  local a = {}
		  for n in pairs(t) do table.insert(a, n) end
		  table.sort(a, f)
		  local i = 0
		  local iter = function ()
				i = i + 1
				if a[i] == nil then return nil
				else return a[i], t[a[i]]
				end
		  end
		  return iter
		end
]]></config>
<event type="login" name="TaskLogin" event="script"><![CDATA[
function onLogin(cid)
registerCreatureEvent(cid, "KillTask")
return true
end]]></event>
<talkaction words="/task;!task" event="buffer"><![CDATA[
domodlib('task_func')
local param = string.lower(param)
if param == "rank" then
getRankStorage(cid, 521456, 20, "Task Rank Finalizadas") return true
end
local str = ""
str = str .. "Tasks Completadas :\n\n"
for k, v in pairsByKeys(tasktabble) do
local contagem = getPlayerStorageValue(cid, v.storage)
if (contagem == -1) then contagem = 1 end
str = str..k.." = ".. (not tonumber(contagem) and "["..contagem.."]" or "["..((contagem)-1).."/"..v.count.."]") .."\n"
end
str = str .. ""
return doShowTextDialog(cid, 12749, str)
]]></talkaction>	
<event type="kill" name="KillTask" event="script"><![CDATA[
domodlib('task_func')
function onKill(cid, target, lastHit)
if(isMonster(target) == true) then
local n = string.lower(getCreatureName(target))
for race, mob in pairs(tasktabble) do
if getPlayerStorageValue(cid,mob .storage_start) >= 1 then
for i = 1,#mob.monster_race do
if n == mob.monster_race[i] then
local contagem = getPlayerStorageValue(cid, mob.storage)
if (contagem == -1) then contagem = 1 end
if not tonumber(contagem) then return true end
if contagem > mob.count then return true end
if contagem > mob.count then return true end
setPlayerStorageValue(cid, mob.storage, contagem+1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,""..(contagem == mob.count and "Parabéns! Voce finalizou a task de "..race.."." or "Total [" .. contagem .. "/" .. mob.count .. "] " .. race .. ".").."")
end
end
end
end
end
return true
end]]></event>
</mod>

 

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

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