Ir para conteúdo
Entre para seguir isso  
Eratsu

Missão por experiencia

Recommended Posts

Eratsu    37
Eratsu

NPC Mission

Servidor testado: TFS

Autor: kawon

Retirado: Otland

 

Primeiro crie um arquivo npc_mission.xml dentro da pasta data/npc/.

E coloque isso:

[color=#000000][color=#007700]<[/color][color=#0000BB]npc name[/color][color=#007700]=[/color][color=#DD0000]"Npc Mission" [/color][color=#0000BB]script[/color][color=#007700]=[/color][color=#DD0000]"data/npc/scripts/mission.lua" [/color][color=#0000BB]walkinterval[/color][color=#007700]=[/color][color=#DD0000]"1" [/color][color=#0000BB]floorchange[/color][color=#007700]=[/color][color=#DD0000]"0" [/color][color=#0000BB]access[/color][color=#007700]=[/color][color=#DD0000]"5" [/color][color=#0000BB]level[/color][color=#007700]=[/color][color=#DD0000]"1" [/color][color=#0000BB]maglevel[/color][color=#007700]=[/color][color=#DD0000]"1"[/color][color=#007700]>
<[/color][color=#0000BB]health now[/color][color=#007700]=[/color][color=#DD0000]"100" [/color][color=#0000BB]max[/color][color=#007700]=[/color][color=#DD0000]"100"[/color][color=#007700]/>
<[/color][color=#0000BB]look type[/color][color=#007700]=[/color][color=#DD0000]"132" [/color][color=#0000BB]head[/color][color=#007700]=[/color][color=#DD0000]"57" [/color][color=#0000BB]body[/color][color=#007700]=[/color][color=#DD0000]"59" [/color][color=#0000BB]legs[/color][color=#007700]=[/color][color=#DD0000]"40" [/color][color=#0000BB]feet[/color][color=#007700]=[/color][color=#DD0000]"76" [/color][color=#0000BB]addons[/color][color=#007700]=[/color][color=#DD0000]"3"[/color][color=#007700]/>
<[/color][color=#0000BB]parameters[/color][color=#007700]>
<[/color][color=#0000BB]parameter key[/color][color=#007700]=[/color][color=#DD0000]"message_greet" [/color][color=#0000BB]value[/color][color=#007700]=[/color][color=#DD0000]"Hello |PLAYERNAME|. You can started 'quest'?" [/color][color=#007700]/>
</[/color][color=#0000BB]parameters[/color][color=#007700]>
</[/color][color=#0000BB]npc[/color][color=#007700]>  [/color][/color][color=#000000][color=#007700]
[/color][/color]

 

Em seguida crie um arquivo mission.lua na pasta /data/npc/scripts/

E adicione isso:


[color=#000000][color=#0000bb]local keywordHandler [/color][color=#007700]= [/color][color=#0000bb]KeywordHandler[/color][color=#007700]:new()
[/color][color=#0000bb]local npcHandler [/color][color=#007700]= [/color][color=#0000bb]NpcHandler[/color][color=#007700]:new([/color][color=#0000bb]keywordHandler[/color][color=#007700])
[/color][color=#0000bb]NpcSystem[/color][color=#007700].[/color][color=#0000bb]parseParameters[/color][color=#007700]([/color][color=#0000bb]npcHandler[/color][color=#007700])
[/color][color=#0000bb]local talkState [/color][color=#007700]= {}
function [/color][color=#0000bb]onCreatureAppear[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700]) [/color][color=#0000bb]npcHandler[/color][color=#007700]:[/color][color=#0000bb]onCreatureAppear[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700]) [/color][color=#0000bb]end
[/color][color=#007700]function [/color][color=#0000bb]onCreatureDisappear[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700]) [/color][color=#0000bb]npcHandler[/color][color=#007700]:[/color][color=#0000bb]onCreatureDisappear[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700]) [/color][color=#0000bb]end
[/color][color=#007700]function [/color][color=#0000bb]onCreatureSay[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700], [/color][color=#0000bb]type[/color][color=#007700], [/color][color=#0000bb]msg[/color][color=#007700]) [/color][color=#0000bb]npcHandler[/color][color=#007700]:[/color][color=#0000bb]onCreatureSay[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700], [/color][color=#0000bb]type[/color][color=#007700], [/color][color=#0000bb]msg[/color][color=#007700]) [/color][color=#0000bb]end
[/color][color=#007700]function [/color][color=#0000bb]onThink[/color][color=#007700]() [/color][color=#0000bb]npcHandler[/color][color=#007700]:[/color][color=#0000bb]onThink[/color][color=#007700]() [/color][color=#0000bb]end
[/color][color=#007700]function [/color][color=#0000bb]creatureSayCallback[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700], [/color][color=#0000bb]type[/color][color=#007700], [/color][color=#0000bb]msg[/color][color=#007700])
if([/color][color=#0000bb]not npcHandler[/color][color=#007700]:[/color][color=#0000bb]isFocused[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700])) [/color][color=#0000bb]then
[/color][color=#007700]return [/color][color=#0000bb]false
end
local talkUser [/color][color=#007700]= [/color][color=#0000bb]NPCHANDLER_CONVBEHAVIOR [/color][color=#007700]== [/color][color=#0000bb]CONVERSATION_DEFAULT [/color][color=#007700]and [/color][color=#0000bb]0 [/color][color=#007700]or [/color][color=#0000bb]cid
[/color][color=#007700]if([/color][color=#0000bb]msgcontains[/color][color=#007700]([/color][color=#0000bb]msg[/color][color=#007700], [/color][color=#dd0000]'quest'[/color][color=#007700])) [/color][color=#0000bb]then
selfSay[/color][color=#007700]([/color][color=#dd0000]'Ok, you can started "first mission"?'[/color][color=#007700], [/color][color=#0000bb]cid[/color][color=#007700])
[/color][color=#0000bb]end
[/color][color=#007700]---------------------------------------------------------
if([/color][color=#0000bb]msgcontains[/color][color=#007700]([/color][color=#0000bb]msg[/color][color=#007700], [/color][color=#dd0000]'first mission'[/color][color=#007700])) [/color][color=#0000bb]then
selfSay[/color][color=#007700]([/color][color=#dd0000]'Please bring me 10 "meat"'[/color][color=#007700], [/color][color=#0000bb]cid[/color][color=#007700])
[/color][color=#0000bb]talkState[/color][color=#007700][[/color][color=#0000bb]talkUser[/color][color=#007700]] = [/color][color=#0000bb]1
[/color][color=#007700]elseif([/color][color=#0000bb]msgcontains[/color][color=#007700]([/color][color=#0000bb]msg[/color][color=#007700], [/color][color=#dd0000]'meat'[/color][color=#007700]) and [/color][color=#0000bb]talkState[/color][color=#007700][[/color][color=#0000bb]talkUser[/color][color=#007700]] == [/color][color=#0000bb]1[/color][color=#007700]) [/color][color=#0000bb]then
[/color][color=#007700]if ([/color][color=#0000bb]getPlayerStorageValue[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700],[/color][color=#0000bb]100[/color][color=#007700]) > [/color][color=#0000bb]0[/color][color=#007700]) [/color][color=#0000bb]then
selfSay[/color][color=#007700]([/color][color=#dd0000]'You finished this mission.'[/color][color=#007700], [/color][color=#0000bb]cid[/color][color=#007700])
else
if([/color][color=#0000bb]doPlayerRemoveItem[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700], [/color][color=#0000bb]2666[/color][color=#007700], [/color][color=#0000bb]10[/color][color=#007700]) == [/color][color=#0000bb]TRUE[/color][color=#007700]) [/color][color=#0000bb]then
setPlayerStorageValue[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700],[/color][color=#0000bb]100[/color][color=#007700],[/color][color=#0000bb]1[/color][color=#007700])
[/color][color=#0000bb]doPlayerAddExperience[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700],[/color][color=#0000bb]1000[/color][color=#007700])
[/color][color=#0000bb]selfSay[/color][color=#007700]([/color][color=#dd0000]'Thank you! You can started "second mission".. (you received 1000 points of experience)'[/color][color=#007700], [/color][color=#0000bb]cid[/color][color=#007700])
else
[/color][color=#0000bb]selfSay[/color][color=#007700]([/color][color=#dd0000]'You must have more items'[/color][color=#007700], [/color][color=#0000bb]cid[/color][color=#007700])
[/color][color=#0000bb]end
end
[/color][color=#007700]return [/color][color=#0000bb]true
end
[/color][color=#007700]---------------------------------------------------------
if([/color][color=#0000bb]msgcontains[/color][color=#007700]([/color][color=#0000bb]msg[/color][color=#007700], [/color][color=#dd0000]'second mission'[/color][color=#007700])) [/color][color=#0000bb]then
selfSay[/color][color=#007700]([/color][color=#dd0000]'Please bring me 10 "ham"'[/color][color=#007700], [/color][color=#0000bb]cid[/color][color=#007700])
[/color][color=#0000bb]talkState[/color][color=#007700][[/color][color=#0000bb]talkUser[/color][color=#007700]] = [/color][color=#0000bb]1
[/color][color=#007700]elseif([/color][color=#0000bb]msgcontains[/color][color=#007700]([/color][color=#0000bb]msg[/color][color=#007700], [/color][color=#dd0000]'ham'[/color][color=#007700]) and [/color][color=#0000bb]talkState[/color][color=#007700][[/color][color=#0000bb]talkUser[/color][color=#007700]] == [/color][color=#0000bb]1[/color][color=#007700]) [/color][color=#0000bb]then
[/color][color=#007700]if ([/color][color=#0000bb]getPlayerStorageValue[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700],[/color][color=#0000bb]101[/color][color=#007700]) > [/color][color=#0000bb]0[/color][color=#007700]) [/color][color=#0000bb]then
selfSay[/color][color=#007700]([/color][color=#dd0000]'You finished this mission.'[/color][color=#007700], [/color][color=#0000bb]cid[/color][color=#007700])
else
if([/color][color=#0000bb]doPlayerRemoveItem[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700], [/color][color=#0000bb]2671[/color][color=#007700], [/color][color=#0000bb]10[/color][color=#007700]) == [/color][color=#0000bb]TRUE[/color][color=#007700]) [/color][color=#0000bb]then
setPlayerStorageValue[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700],[/color][color=#0000bb]101[/color][color=#007700],[/color][color=#0000bb]1[/color][color=#007700])
[/color][color=#0000bb]doPlayerAddExperience[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700],[/color][color=#0000bb]1000[/color][color=#007700])
[/color][color=#0000bb]selfSay[/color][color=#007700]([/color][color=#dd0000]'Thank you! You can started "third mission".. (you received 1000 points of experience)'[/color][color=#007700], [/color][color=#0000bb]cid[/color][color=#007700])
else
[/color][color=#0000bb]selfSay[/color][color=#007700]([/color][color=#dd0000]'You must have more items'[/color][color=#007700], [/color][color=#0000bb]cid[/color][color=#007700])
[/color][color=#0000bb]end
end
[/color][color=#007700]return [/color][color=#0000bb]true
end
[/color][color=#007700]---------------------------------------------------------
if([/color][color=#0000bb]msgcontains[/color][color=#007700]([/color][color=#0000bb]msg[/color][color=#007700], [/color][color=#dd0000]'third mission'[/color][color=#007700])) [/color][color=#0000bb]then
selfSay[/color][color=#007700]([/color][color=#dd0000]'Please bring me 20 "ham"'[/color][color=#007700], [/color][color=#0000bb]cid[/color][color=#007700])
[/color][color=#0000bb]talkState[/color][color=#007700][[/color][color=#0000bb]talkUser[/color][color=#007700]] = [/color][color=#0000bb]1
[/color][color=#007700]elseif([/color][color=#0000bb]msgcontains[/color][color=#007700]([/color][color=#0000bb]msg[/color][color=#007700], [/color][color=#dd0000]'ham'[/color][color=#007700]) and [/color][color=#0000bb]talkState[/color][color=#007700][[/color][color=#0000bb]talkUser[/color][color=#007700]] == [/color][color=#0000bb]1[/color][color=#007700]) [/color][color=#0000bb]then
[/color][color=#007700]if ([/color][color=#0000bb]getPlayerStorageValue[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700],[/color][color=#0000bb]102[/color][color=#007700]) > [/color][color=#0000bb]0[/color][color=#007700]) [/color][color=#0000bb]then
selfSay[/color][color=#007700]([/color][color=#dd0000]'You finished this mission.'[/color][color=#007700], [/color][color=#0000bb]cid[/color][color=#007700])
else
if([/color][color=#0000bb]doPlayerRemoveItem[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700], [/color][color=#0000bb]2671[/color][color=#007700], [/color][color=#0000bb]20[/color][color=#007700]) == [/color][color=#0000bb]TRUE[/color][color=#007700]) [/color][color=#0000bb]then
setPlayerStorageValue[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700],[/color][color=#0000bb]102[/color][color=#007700],[/color][color=#0000bb]1[/color][color=#007700])
[/color][color=#0000bb]doPlayerAddExperience[/color][color=#007700]([/color][color=#0000bb]cid[/color][color=#007700],[/color][color=#0000bb]1000[/color][color=#007700])
[/color][color=#0000bb]selfSay[/color][color=#007700]([/color][color=#dd0000]'Thank you! You finished all missions. (you received 1000 points of experience)'[/color][color=#007700], [/color][color=#0000bb]cid[/color][color=#007700])
else
[/color][color=#0000bb]selfSay[/color][color=#007700]([/color][color=#dd0000]'You must have more items'[/color][color=#007700], [/color][color=#0000bb]cid[/color][color=#007700])
[/color][color=#0000bb]end
end
[/color][color=#007700]return [/color][color=#0000bb]true
end


end
npcHandler[/color][color=#007700]:[/color][color=#0000bb]setCallback[/color][color=#007700]([/color][color=#0000bb]CALLBACK_MESSAGE_DEFAULT[/color][color=#007700], [/color][color=#0000bb]creatureSayCallback[/color][color=#007700])
[/color][color=#0000bb]npcHandler[/color][color=#007700]:[/color][color=#0000bb]addModule[/color][color=#007700]([/color][color=#0000bb]FocusModule[/color][color=#007700]:new())
[/color][/color]

 

Transcrições:

 

PLAYER: hi

NPC: Hello |PLAYERNAME|. You can started 'quest'?

PLAYER: quest

NPC: Ok, you can started "first mission"?

PLAYER: first mission

NPC: Please bring me 10 "meat"

PLAYER: meat

When player finish this mission

NPC: You finished this mission.

When player do first once

NPC: Thank you! You can started "second mission".. (you received 1000 points of experience)

When player don't have 10 meat

NPC: You must have more items

 

Compartilhar este post


Link para o post
Lwkass    1
Lwkass

Muito bom,

 

Aprovado

Compartilhar este post


Link para o post
Commander    0
Commander

uma duvida esse script não tem um furo?

se o player não tiver feito a first misson, da pra ele fazer a second mission?

se eu estiver errado me desculpe.

Compartilhar este post


Link para o post
Hauntedy    0
Hauntedy

Tem erros de ingles nas frases no NPC,

 

"You can started 'quest'?" (Can you start the quest?)

"you can started 'first mission'?" (Can you start the first mission?)

"You can started 'second mission'.." ( You can start the secon mission)

 

Mesmo corrigindo os erros, acho que as frases ficaram muito ruins, tente melhorar isso porque mesmo nao sendo escencial para o script funcionar, eh muito importante um NPC falar o ingles correto xD

Compartilhar este post


Link para o post
Criticoo    4
Criticoo
uma duvida esse script não tem um furo?

se o player não tiver feito a first misson, da pra ele fazer a second mission?

se eu estiver errado me desculpe.

 

É verdade,uma ideia é usar a storage da quest anterior para proseguir para proxima,ou sejá primeiro termine a 1° missão,caso contrario vc nao poderá fazer a 2° ou a 3°

 

por exemplo:

 

if(msgcontains(msg, 'second mission')) then
if (getPlayerStorageValue(cid,100) > 1) then -- 100 é o numero da storage que ele ganho na 1° missão
selfSay('Please bring me 10 "ham"', cid)
talkState[talkUser] = 1
else
selfSay('You need to finish first mission!', cid)
talkState[talkUser] = 0
end

Compartilhar este post


Link para o post
fran68    0
fran68

Muito bom

 

obrigado

Compartilhar este post


Link para o post
itoserv    0
itoserv

PARABEMs mesmo com os errinhos

 

APROVADO SEM DÚVIDAS :D

Compartilhar este post


Link para o post
josejunior23    2
josejunior23
Tem erros de ingles nas frases no NPC,

 

"You can started 'quest'?" (Can you start the quest?)

"you can started 'first mission'?" (Can you start the first mission?)

"You can started 'second mission'.." ( You can start the secon mission)

 

Mesmo corrigindo os erros, acho que as frases ficaram muito ruins, tente melhorar isso porque mesmo nao sendo escencial para o script funcionar, eh muito importante um NPC falar o ingles correto xD

 

 

mesmo assim tá errado poxa!

use assim que fica mais rpg

 

"You can started 'quest'?"

Maybe I've a {mission} for You, what you think?

"You can started {first mission}?"

"You can start the {first mission}."

"You can start the {second mission}."

 

tá bom o script, mas podia ter usado um config pra ficar menor e mais fácil de adicionar quests.

 

[[]]'s

 

@edit

 

olha acabei de fazer um =)

ele te da um item ou exp ou então os dois!

obs: não testei, mas se tiver erro é algo minimo.

 

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 missions = {
["first"] = {
	questid = 10001, 
	request = {itemid = 5880, count = 10}, -- need 10 iron ores
	reward = {id = 2476, count = 1, exp = 1000}, -- reward 1 demon shield and 1000 exp points
	description = "Oohh! this is a good mission for you! easy and fast!"
},
["second"] = {
	questid = 10002, 
	request = {itemid = 5906, count = 100}, -- need 100 demon dust
	reward = {id = false, count = 0, exp = 50000},  -- reward 50000 exp points
	description = "Oohh! for this mission you'll need to spend some time!"		
},
["third"] = {
	questid = 10003, 
	request = {itemid = 2421, count = 1}, -- need 1 thunder hammer
	reward = {id = 2160, count = 100, exp = false}, -- reward 100 crystal coins
	description = "Oohh! You need a loot from a monster!"	
}
}
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 get = missions[msg:lower()]
if(msgcontains(msg, 'quest')) then
	selfSay('Maybe I have a {mission} for You, what you think?', cid)
	talkState[talkUser] == 1
elseif(msgcontains(msg, 'mission')) then	
	local i, msg = 0,  nil
	for missionname in pairs(missions) do
		i = i + 1
		if(msg ~= nil) then
			if(i == #missions) then
				msg = msg .. " and "
			else
				msg = msg .. ", "
			end
		else
			msg = "Ok then, I got those missions for You: "
		end
		msg = msg .. "'{" .. missionname .. "}'"	
	end
	selfSay(msg .. ', with one do you want?', cid)
	talkState[talkUser] == 2
elseif get and (talkState[talkUser] == 2) then
	desc, itemNeed, itemCount, missionId, reItem, reCount, reExp  = get.description, get.request.itemid, get.request.count, get.questid, get.reward.id, get.reward.count, get.reward.exp
	if(getPlayerStorageValue(cid, missionId) == 1) then
		selfSay('Sorry! You already done this mission before! maybe I have another {mission} for You!', cid)
		talkState[talkUser] == 1
		return true
	end
	if(getPlayerItemCount(cid, itemNeed) => itemCount) then
		selfSay('oOoh! As I can see You have all items with You! Can you give to me? I will reward You!', cid)
		talkState[talkUser] == 4
	else	
		selfSay(desc .. ". so for this mission I need: x" .. itemCount  .. " " .. getItemNameById(itemNeed) .. ". Do you want do this mission? huh?", cid)
		talkState[talkUser] == 3
	end
elseif(msgcontains(msg, 'yes')  and (talkState[talkUser] == 3)) then
	selfSay('Ok! Thanks for Your help. when You have the items, bring to me!', cid)
	setPlayerStorageValue(cid, missionId, 1)
elseif(msgcontains(msg, 'yes')  and (talkState[talkUser] == 4)) then
	selfSay('Thanks ' .. getCreatureName(cid) .. ' , You did a great mission! heres your reward!', cid)
	if(itemNeed ~= false) then
		doPlayerAddItem(cid, reItem, reCount)
	end
	if(reExp ~= false) then
		doPlayerAddExperience(cid, reExp)
	end	
	talkState[talkUser] = 1
end	
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())  

Editado por josejunior23

Compartilhar este post


Link para o post
Kekezito_LHP    1
Kekezito_LHP

muito bom gostei so arruma os erros ta certinho

Compartilhar este post


Link para o post
Roku 3    0
Roku 3

ingles :fail:

mas o script é interessante

com devidas modificações fica show...

Compartilhar este post


Link para o post
Rawenga    0
Rawenga

Legal parece perfect world =o

Level Doors vão entrar em extinção

Compartilhar este post


Link para o post
Kougarou    0
Kougarou

Vlw ai manolo, ajudou mto mesmo esse NPC. Consegui fazer varios a partir dele. Obrigado!

Compartilhar este post


Link para o post
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×