Ir para conteúdo
  • Cadastre-se

(Resolvido)Duplicar Script TASK


Ir para solução Resolvido por Skydrowz,

Posts Recomendados

E ae galera BLZ?
 

Gostaria que alguém me explicasse o pq que não da para duplicar esse NPC de task:

E se possível cria um similar ou igual que de para modificar os monstros que é necessário matar e as storage .

 

OBS: NÃO POSTEM COISAS DESNECESSÁRIAS COMO: - "É SO MUDAR OS NÚMEROS DAS STORAGE QUE FUNCIONA."

 

Npc:

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

local talkState = {}
local quest = 76669
local reward = 70000

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, "ajudar") and talkState[talkUser] == 1 then
	npcHandler:say("Agradeco, por se empenhar em ajudar a vila, tenha cuidado {ok} ?", cid)
	talkState[talkUser] = 2
elseif msgcontains(msg, "ok") and talkState[talkUser] == 2 then
	npcHandler:say("Tenha cuidado nao se esforce muito!", cid)
	setPlayerStorageValue(cid, quest, 2)
	talkState[talkUser] = 0
elseif msgcontains(msg, "favor") then
	local str = getPlayerStorageValue(cid, quest)
	if(str < 2) then
		npcHandler:say("msg.", cid) 
		talkState[talkUser] = 1
		return true
	elseif(str == 2) then
		npcHandler:say("msg!", cid)
	elseif(str == 3) then
		npcHandler:say("msg.", cid)
		doPlayerAddItem(cid, 2148, 75)
		doPlayerAddExp(cid, 1300)
		doPlayerSendTextMessage(cid, 22, 'exp.')
		setPlayerStorageValue(cid, quest, 4)
	elseif(str == 4) then
		npcHandler:say("msg.", cid)
	end
	talkState[talkUser] = 0
end
return TRUE
end

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

Creature:
 

local monsters = {
--name = storage
["Monstro"] = 55004,
}

function onKill(cid, target)
local monster = monsters[getCreatureName(target):lower()]
if(isPlayer(target) == FALSE and monster and getPlayerStorageValue(cid, 76669) == 2) then
	if getPlayerStorageValue(cid, monster) < 50 then 
		local killedMonsters = getPlayerStorageValue(cid, monster)
           if(killedMonsters == -1) then
               killedMonsters = 1
		end
		setPlayerStorageValue(cid, monster, killedMonsters + 1)
		doPlayerSendTextMessage(cid,1, "msg.")
	else
		doPlayerSendTextMessage(cid,22, "msg.")
		setPlayerStorageValue(cid, 76669, 3)
	end
end
return TRUE
end


Creature.xml:

	<event type="kill" name="nome" script="script.lua"/>



Desde já Grato!!

 

 

Editado por peterson18 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
3 minutos atrás, FlavioHulk disse:

Mas cara, é só mudar as storages, e nome dos monstros ! Tu registrou os eventos distintamente?

:7943e5822524b7fb194f46d626fb2fb7: Sim manow, já tentei de toda as formas. 
E no mesmo lugar que peguei tinha alguém com a mesma dúvida, pois dps que você pega uma task desse npc não consegue pegar a outra, não da erro nem nada, mas também não conta os monstros.

Tentativas:
Tentei mudar todos os numeros de Storage, reward e quests.

Registrei no login a nova script, registrei no monstro a script.

 

Tentei mudar as sequencias do NPC.

Se possível teste, o primeiro funciona 100%, mas o segundo meio que "Buga" mas não da erro na distro.

Link para o post
Compartilhar em outros sites
Agora, FlavioHulk disse:

Como assim o primeiro funciona e o segundo não? O NPC tá pra fazer apenas uma task


Será? Eu não entendo muito de Script.

Mas o que eu quero é duplicar a script, ou seja sera um outro NPC que vai dar a task...

Ele ate da a quest storage, mas quando mata os monstros não conta... Provavelmente é alguma coisa no Creature....

Obs: Já tentei editar a estrutura da script, mas sem sucesso...

 

Link para o post
Compartilhar em outros sites
2 minutos atrás, Sttorm disse:

Você cria um novo NPC com essa mesma script e apenas adiciona na tabela da creaturescripts , nada além disso.


Não teria que criar outro script no Creature/script ?
Exemplo:

creature.xml
 

<event type="kill" name="nome1" script="script1.lua"/>

Equando for criar o outro npc criar um novo script e uma nova tag certo?
 

<event type="kill" name="nome2" script="script2.lua"/>
Link para o post
Compartilhar em outros sites
Agora, peterson18 disse:


Não teria que criar outro script no Creature/script ?
Exemplo:

creature.xml
 


<event type="kill" name="nome1" script="script1.lua"/>

Equando for criar o outro npc criar um novo script e uma nova tag certo?
 


<event type="kill" name="nome2" script="script2.lua"/>


Não cara , não tem .

Link para o post
Compartilhar em outros sites
Em 24/05/2018 em 20:36, Sttorm disse:


Não cara , não tem .


Entendi, mas desculpe minha ignorância...

 

Onde estaria colocando a outra storage?

 

Pois esse é um novo npc que estará dando uma nova quest 

 

ficaria assim?

local monsters = {
--name = storage
["Monstro1"] = 55004, -- Quest de um NPC
[Monstro2] = 55005, -- De outra quest de outro NPC
}

function onKill(cid, target)
local monster = monsters[getCreatureName(target):lower()]
if(isPlayer(target) == FALSE and monster and getPlayerStorageValue(cid, 76669) == 2) then -- Storage do 1 npc ou do 2 npc? ou 76669, 76670?
	if getPlayerStorageValue(cid, monster) < 50 then -- matar 50 monstro do 1 npc ou do 2 NPC???????
		local killedMonsters = getPlayerStorageValue(cid, monster)
           if(killedMonsters == -1) then
               killedMonsters = 1
		end
		setPlayerStorageValue(cid, monster, killedMonsters + 1)
		doPlayerSendTextMessage(cid,1, "Voce matou " .. killedMonsters .. " de 50 insetos.")
	else
		doPlayerSendTextMessage(cid,22, "Parabens voce matou insetos suficiente.")
		setPlayerStorageValue(cid, 76669, 3) -- idem a duvida de cima
	end
end
return TRUE
end


Se possível fazer um exemplo, Grato!
@Sttorm

 

Editado por peterson18 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
Em 24/05/2018 em 20:35, peterson18 disse:


Não teria que criar outro script no Creature/script ?
Exemplo:

creature.xml
 


<event type="kill" name="nome1" script="script1.lua"/>

Equando for criar o outro npc criar um novo script e uma nova tag certo?
 


<event type="kill" name="nome2" script="script2.lua"/>

 

Você se importaria de ter que criar outra tag no xml e outro script para contar a task? Seria mais fácil para você.

Se sim, adicione: 

 

Creaturescripts.xml:

<event type="kill" name="taskCount2" script="taskCount2.lua"/>

No NPC:

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

local talkState = {}
local quest = 76670 <!-- Alterei aqui para 76670, que seria a OUTRA storage de task -->
local reward = 70000 <!-- Aqui você altera a reward -->

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, "ajudar") and talkState[talkUser] == 1 then
	npcHandler:say("Agradeco, por se empenhar em ajudar a vila, tenha cuidado {ok} ?", cid)
	talkState[talkUser] = 2
elseif msgcontains(msg, "ok") and talkState[talkUser] == 2 then
	npcHandler:say("Tenha cuidado nao se esforce muito!", cid)
	setPlayerStorageValue(cid, quest, 2) <!-- Aqui ele vai usar a storage que mudei lá em cima (76670) -->
	talkState[talkUser] = 0
elseif msgcontains(msg, "favor") then
	local str = getPlayerStorageValue(cid, quest)
	if(str < 2) then
		npcHandler:say("msg.", cid) 
		talkState[talkUser] = 1
		return true
	elseif(str == 2) then
		npcHandler:say("msg!", cid)
	elseif(str == 3) then
		npcHandler:say("msg.", cid)
		doPlayerAddItem(cid, 2148, 75)
		doPlayerAddExp(cid, 1300)
		doPlayerSendTextMessage(cid, 22, 'exp.')
		setPlayerStorageValue(cid, quest, 4)
	elseif(str == 4) then
		npcHandler:say("msg.", cid)
	end
	talkState[talkUser] = 0
end
return TRUE
end

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

Em creaturescripts/scripts/taskCount2.lua

local monsters = {
--name = storage
["Monstro2"] = 55005, <!-- Acho que esse é o monstro que você quer -->
}

function onKill(cid, target)
local monster = monsters[getCreatureName(target):lower()]
if(isPlayer(target) == FALSE and monster and getPlayerStorageValue(cid, 76670) == 2) then <!-- Storage da segunda task -->
	if getPlayerStorageValue(cid, monster) < 50 then <!-- Aqui ele pega a storage de dentro da tabela monsters, então ele vai pegar a de ["Monstro2"], não precisa se preocupar. -->
		local killedMonsters = getPlayerStorageValue(cid, monster)
           if(killedMonsters == -1) then
               killedMonsters = 1
		end
		setPlayerStorageValue(cid, monster, killedMonsters + 1)
		doPlayerSendTextMessage(cid,1, "Voce matou " .. killedMonsters .. " de 50 insetos.")
	else
		doPlayerSendTextMessage(cid,22, "Parabens voce matou insetos suficiente.")
		setPlayerStorageValue(cid, 76669, 3) -- idem a duvida de cima
	end
end
return TRUE
end

Em creaturescripts/scripts/login.lua (crie o login.lua dentro da pasta do taskCount)

function onLogin(player)
	player:registerEvent("taskCount2")
	return true
end


 

 

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

Master yourself, master the enemy.

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

 

Você se importaria de ter que criar outra tag no xml e outro script para contar a task? Seria mais fácil para você.

Se sim, adicione: 

 

Creaturescripts.xml:


<event type="kill" name="taskCount2" script="taskCount2.lua"/>

No NPC:


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

local talkState = {}
local quest = 76670 <!-- Alterei aqui para 76670, que seria a OUTRA storage de task -->
local reward = 70000 <!-- Aqui você altera a reward -->

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, "ajudar") and talkState[talkUser] == 1 then
	npcHandler:say("Agradeco, por se empenhar em ajudar a vila, tenha cuidado {ok} ?", cid)
	talkState[talkUser] = 2
elseif msgcontains(msg, "ok") and talkState[talkUser] == 2 then
	npcHandler:say("Tenha cuidado nao se esforce muito!", cid)
	setPlayerStorageValue(cid, quest, 2) <!-- Aqui ele vai usar a storage que mudei lá em cima (76670) -->
	talkState[talkUser] = 0
elseif msgcontains(msg, "favor") then
	local str = getPlayerStorageValue(cid, quest)
	if(str < 2) then
		npcHandler:say("msg.", cid) 
		talkState[talkUser] = 1
		return true
	elseif(str == 2) then
		npcHandler:say("msg!", cid)
	elseif(str == 3) then
		npcHandler:say("msg.", cid)
		doPlayerAddItem(cid, 2148, 75)
		doPlayerAddExp(cid, 1300)
		doPlayerSendTextMessage(cid, 22, 'exp.')
		setPlayerStorageValue(cid, quest, 4)
	elseif(str == 4) then
		npcHandler:say("msg.", cid)
	end
	talkState[talkUser] = 0
end
return TRUE
end

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

Em creaturescripts/scripts/taskCount2.lua


local monsters = {
--name = storage
["Monstro2"] = 55005, <!-- Acho que esse é o monstro que você quer -->
}

function onKill(cid, target)
local monster = monsters[getCreatureName(target):lower()]
if(isPlayer(target) == FALSE and monster and getPlayerStorageValue(cid, 76670) == 2) then <!-- Storage da segunda task -->
	if getPlayerStorageValue(cid, monster) < 50 then <!-- Aqui ele pega a storage de dentro da tabela monsters, então ele vai pegar a de ["Monstro2"], não precisa se preocupar. -->
		local killedMonsters = getPlayerStorageValue(cid, monster)
           if(killedMonsters == -1) then
               killedMonsters = 1
		end
		setPlayerStorageValue(cid, monster, killedMonsters + 1)
		doPlayerSendTextMessage(cid,1, "Voce matou " .. killedMonsters .. " de 50 insetos.")
	else
		doPlayerSendTextMessage(cid,22, "Parabens voce matou insetos suficiente.")
		setPlayerStorageValue(cid, 76669, 3) -- idem a duvida de cima
	end
end
return TRUE
end

Em creaturescripts/scripts/login.lua (crie o login.lua dentro da pasta do taskCount)


function onLogin(player)
	player:registerEvent("taskCount2")
	return true
end


 

 


Eu teste dessa forma e não deu erro na distro, mas o NPC não responde depois do "HI" ele fala a msg que esta no .xml e quando você fala a palavra X para ir para o .lua ele não responde.
 

Link para o post
Compartilhar em outros sites
  • Solução
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

local talkState = {}
local quest = 76670 <!-- Alterei aqui para 76670, que seria a OUTRA storage de task -->
local reward = 70000 <!-- Aqui você altera a reward -->

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, "ajudar") then
	npcHandler:say("Agradeco, por se empenhar em ajudar a vila, tenha cuidado {ok} ?", cid)
	talkState[talkUser] = 2
elseif msgcontains(msg, "ok") and talkState[talkUser] == 2 then
	npcHandler:say("Tenha cuidado nao se esforce muito!", cid)
	setPlayerStorageValue(cid, quest, 2) <!-- Aqui ele vai usar a storage que mudei lá em cima (76670) -->
	talkState[talkUser] = 0
elseif msgcontains(msg, "favor") then
	local str = getPlayerStorageValue(cid, quest)
	if(str < 2) then
		npcHandler:say("msg.", cid) 
		talkState[talkUser] = 1
		return true
	elseif(str == 2) then
		npcHandler:say("msg!", cid)
	elseif(str == 3) then
		npcHandler:say("msg.", cid)
		doPlayerAddItem(cid, 2148, 75)
		doPlayerAddExp(cid, 1300)
		doPlayerSendTextMessage(cid, 22, 'exp.')
		setPlayerStorageValue(cid, quest, 4)
	elseif(str == 4) then
		npcHandler:say("msg.", cid)
	end
	talkState[talkUser] = 0
end
return TRUE
end

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

 

Tenta assim.

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

Master yourself, master the enemy.

Link para o post
Compartilhar em outros sites
  • 3 weeks later...

@Skydrowz Cara, eu coloquei sua script e ta dando esse erro:

[18/6/2018 19:5:8] >>> Loading creaturescripts... [Error - LuaInterface::loadFile] data/creaturescripts/scripts/tasktest.lua:3: unexpected symbol near '<'
[18/6/2018 19:5:10] [Error - Event::checkScript] Cannot load script (data/creaturescripts/scripts/tasktest.lua)
[18/6/2018 19:5:10] data/creaturescripts/scripts/tasktest.lua:3: unexpected symbol near '<'

Link para o post
Compartilhar em outros sites
1 hora atrás, Zazeros disse:

@Skydrowz Cara, eu coloquei sua script e ta dando esse erro:

[18/6/2018 19:5:8] >>> Loading creaturescripts... [Error - LuaInterface::loadFile] data/creaturescripts/scripts/tasktest.lua:3: unexpected symbol near '<'
[18/6/2018 19:5:10] [Error - Event::checkScript] Cannot load script (data/creaturescripts/scripts/tasktest.lua)
[18/6/2018 19:5:10] data/creaturescripts/scripts/tasktest.lua:3: unexpected symbol near '<'

@Zazeros
É porque ele usou códigos de XML para usar comentários e no arquivo .lua ele não reconhece;
Remova em todos os locais que tenha isso " <!-- "

Spoiler

<!-- Alterei aqui para 76670, que seria a OUTRA storage de task -->

 

 

Link para o post
Compartilhar em outros sites

@peterson18 Cara, eu fiz oq tu falou e deu esse erro agr:

>>> Loading creaturescripts... [Error - LuaInterface::loadFile] data/creaturescripts/scripts/tasktest.lua:4: unexpected symbol near 'ï'
[Error - Event::checkScript] Cannot load script (data/creaturescripts/scripts/tasktest.lua)
data/creaturescripts/scripts/tasktest.lua:4: unexpected symbol near 'ï'

 

 

E mais uma coisa, essa script ta contando cada vez que o monstro morre? tipo, ta aparecendo "voce matou 3 de 200" algo assim?

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

@peterson18 Cara, eu fiz oq tu falou e deu esse erro agr:

>>> Loading creaturescripts... [Error - LuaInterface::loadFile] data/creaturescripts/scripts/tasktest.lua:4: unexpected symbol near 'ï'
[Error - Event::checkScript] Cannot load script (data/creaturescripts/scripts/tasktest.lua)
data/creaturescripts/scripts/tasktest.lua:4: unexpected symbol near 'ï'

 

 

E mais uma coisa, essa script ta contando cada vez que o monstro morre? tipo, ta aparecendo "voce matou 3 de 200" algo assim?

@Zazeros
Isso ocorre pq quando você vai copiar aparece uns caracteres extra (não sei explicar o pq) se você usa o Notepad++ vai em: formatar --> Converter para ANSI 
Feito isso ira aparecer '?' aperte CTRL+H e localize-os e os apague!

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.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo