Eratsu 37 #1 Postado 16 Setembro, 2010 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]falseendlocal 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]thenselfSay[/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]thenselfSay[/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]thenselfSay[/color][color=#007700]([/color][color=#dd0000]'You finished this mission.'[/color][color=#007700], [/color][color=#0000bb]cid[/color][color=#007700])elseif([/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]thensetPlayerStorageValue[/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]endend[/color][color=#007700]return [/color][color=#0000bb]trueend[/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]thenselfSay[/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]thenselfSay[/color][color=#007700]([/color][color=#dd0000]'You finished this mission.'[/color][color=#007700], [/color][color=#0000bb]cid[/color][color=#007700])elseif([/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]thensetPlayerStorageValue[/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]endend[/color][color=#007700]return [/color][color=#0000bb]trueend[/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]thenselfSay[/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]thenselfSay[/color][color=#007700]([/color][color=#dd0000]'You finished this mission.'[/color][color=#007700], [/color][color=#0000bb]cid[/color][color=#007700])elseif([/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]thensetPlayerStorageValue[/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]endend[/color][color=#007700]return [/color][color=#0000bb]trueendendnpcHandler[/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
Commander 0 #3 Postado 27 Setembro, 2010 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 #4 Postado 27 Setembro, 2010 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 #5 Postado 27 Setembro, 2010 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
itoserv 0 #7 Postado 20 Outubro, 2010 PARABEMs mesmo com os errinhos APROVADO SEM DÚVIDAS Compartilhar este post Link para o post
josejunior23 2 #8 Postado 8 Novembro, 2010 (editado) 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 8 Novembro, 2010 por josejunior23 Compartilhar este post Link para o post
Kekezito_LHP 1 #9 Postado 30 Novembro, 2010 muito bom gostei so arruma os erros ta certinho Compartilhar este post Link para o post
Roku 3 0 #10 Postado 30 Novembro, 2010 ingles :fail: mas o script é interessante com devidas modificações fica show... Compartilhar este post Link para o post
Rawenga 0 #11 Postado 1 Dezembro, 2010 Legal parece perfect world =o Level Doors vão entrar em extinção Compartilhar este post Link para o post
Kougarou 0 #12 Postado 25 Maio, 2011 Vlw ai manolo, ajudou mto mesmo esse NPC. Consegui fazer varios a partir dele. Obrigado! Compartilhar este post Link para o post