Ir para conteúdo
  • 0

[Resolvido] NPC DUPLA VOCAÇÃO


ThupaThuplex

Pergunta

Preciso muito de um Npc Script para a versão 8.6 que funciona da seguinte maneira:

Quando o player alcançar o level 20, e for por exemplo Knight, o Player conversará com o Npc

e terá duas opções de vocações diferentes para escolher, ele poderá ser Blade ou Templar por exemplo.

Se ele for Sorcerer terá outras duas Vocações para escolher, e assim por diante.

Lembrando que o Player só pode fazer a mudança de Vocação apenas uma vez.

Ficarei muito Grato pela ajuda e Atenção de Todos.

Obrigado e Até mais!

 

 

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

@ThupaThuplex
Fiz minha versão:
 

Spoiler

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 storage = 1111514 --storage da quest
local voc1 = {1}
local voc2 = {2}
local voc3 = {3}
local voc4 = {4}


function creatureSayCallback(cid, type, msg)
    if not npcHandler:isFocused(cid) then
        return false
    end
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
 
    if msgcontains(msg, "promotion") then
		if getPlayerStorageValue(cid, storage) == -1 then
			if isInArray(voc1, getPlayerVocation(cid)) then
				selfSay("Então você quer ser promovido? Bem, que promotion você deseja, {A} ou {B}?", cid) --Opções para Sorc
				talkState[talkUser] = 1
			elseif isInArray(voc2, getPlayerVocation(cid)) then
				selfSay("Então você quer ser promovido? Bem, que promotion você deseja, {C} ou {D}?", cid) --Opções para Druid
				talkState[talkUser] = 2
			elseif isInArray(voc3, getPlayerVocation(cid)) then
				selfSay("Então você quer ser promovido? Bem, que promotion você deseja, {E} ou {F}?", cid) --Opções para Pally
				talkState[talkUser] = 3
			elseif isInArray(voc4, getPlayerVocation(cid)) then
				selfSay("Então você quer ser promovido? Bem, que promotion você deseja, {G} ou {H}?", cid) --Opções para Kina
				talkState[talkUser] = 4
			end
      	else
      		selfSay("Você já pegou a promotion.", cid)
		npcHandler:addFocus(cid)	
		end	
	end
	
	if msgcontains(msg, "A") and talkState[talkUser] == 1 then
		selfSay("ai está, você agora é a promotion A", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "B") and talkState[talkUser] == 1 then
		selfSay("ai está, você agora é a promotion B", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "C") and talkState[talkUser] == 2 then
		selfSay("ai está, você agora é a promotion C", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "D") and talkState[talkUser] == 2 then
		selfSay("ai está, você agora é a promotion D", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "E") and talkState[talkUser] == 3 then
		selfSay("ai está, você agora é a promotion E", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "F") and talkState[talkUser] == 3 then
		selfSay("ai está, você agora é a promotion F", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "G") and talkState[talkUser] == 4 then
		selfSay("ai está, você agora é a promotion G", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "H") and talkState[talkUser] == 4 then
		selfSay("ai está, você agora é a promotion H", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
    return true
end

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

 


Em 'doPlayerSetVocation(cid, X)' no script, troque o X pela id da vocation.
Edit: Acrescentei uma mensagem, que eu tinha esquecido, pra caso o player já tenha pego uma promotion.

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

  • 0
15 minutos atrás, ThupaThuplex disse:

Preciso muito de um Npc Script para a versão 8.6 que funciona da seguinte maneira:

Quando o player alcançar o level 20, e for por exemplo Knight, o Player conversará com o Npc

e terá duas opções de vocações diferentes para escolher, ele poderá ser Blade ou Templar por exemplo.

Se ele for Sorcerer terá outras duas Vocações para escolher, e assim por diante.

Lembrando que o Player só pode fazer a mudança de Vocação apenas uma vez.

Ficarei muito Grato pela ajuda e Atenção de Todos.

Obrigado e Até mais!

 

 

vou fazer aqui pra voce

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, Qwizer disse:

vou fazer aqui pra voce

Valeu, no Aguarde =)

33 minutos atrás, gabriel28 disse:

@ThupaThuplex
Fiz minha versão:
 

  Mostrar conteúdo oculto


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 storage = 1111514 --storage da quest
local voc1 = {1}
local voc2 = {2}
local voc3 = {3}
local voc4 = {4}


function creatureSayCallback(cid, type, msg)
    if not npcHandler:isFocused(cid) then
        return false
    end
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
 
    if msgcontains(msg, "promotion") then
		if getPlayerStorageValue(cid, storage) == -1 then
			if isInArray(voc1, getPlayerVocation(cid)) then
				selfSay("Então você quer ser promovido? Bem, que promotion você deseja, {A} ou {B}?", cid) --Opções para Sorc
				talkState[talkUser] = 1
			elseif isInArray(voc2, getPlayerVocation(cid)) then
				selfSay("Então você quer ser promovido? Bem, que promotion você deseja, {C} ou {D}?", cid) --Opções para Druid
				talkState[talkUser] = 2
			elseif isInArray(voc3, getPlayerVocation(cid)) then
				selfSay("Então você quer ser promovido? Bem, que promotion você deseja, {E} ou {F}?", cid) --Opções para Pally
				talkState[talkUser] = 3
			elseif isInArray(voc4, getPlayerVocation(cid)) then
				selfSay("Então você quer ser promovido? Bem, que promotion você deseja, {G} ou {H}?", cid) --Opções para Kina
				talkState[talkUser] = 4
			end
      	else
      		selfSay("Você já pegou a promotion.", cid)
		npcHandler:addFocus(cid)	
		end	
	end
	
	if msgcontains(msg, "A") and talkState[talkUser] == 1 then
		selfSay("ai está, você agora é a promotion A", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "B") and talkState[talkUser] == 1 then
		selfSay("ai está, você agora é a promotion B", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "C") and talkState[talkUser] == 2 then
		selfSay("ai está, você agora é a promotion C", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "D") and talkState[talkUser] == 2 then
		selfSay("ai está, você agora é a promotion D", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "E") and talkState[talkUser] == 3 then
		selfSay("ai está, você agora é a promotion E", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "F") and talkState[talkUser] == 3 then
		selfSay("ai está, você agora é a promotion F", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "G") and talkState[talkUser] == 4 then
		selfSay("ai está, você agora é a promotion G", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "H") and talkState[talkUser] == 4 then
		selfSay("ai está, você agora é a promotion H", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
    return true
end

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

 


Em 'doPlayerSetVocation(cid, X)' no script, troque o X pela id da vocation.
Edit: Acrescentei uma mensagem, que eu tinha esquecido, pra caso o player já tenha pego uma promotion.

Obrigado mesmo antes de Testar.

Agradeço pela atenção.

#Testando^^

58 minutos atrás, gabriel28 disse:

@ThupaThuplex
Fiz minha versão:
 

  Mostrar conteúdo oculto


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 storage = 1111514 --storage da quest
local voc1 = {1}
local voc2 = {2}
local voc3 = {3}
local voc4 = {4}


function creatureSayCallback(cid, type, msg)
    if not npcHandler:isFocused(cid) then
        return false
    end
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
 
    if msgcontains(msg, "promotion") then
		if getPlayerStorageValue(cid, storage) == -1 then
			if isInArray(voc1, getPlayerVocation(cid)) then
				selfSay("Então você quer ser promovido? Bem, que promotion você deseja, {A} ou {B}?", cid) --Opções para Sorc
				talkState[talkUser] = 1
			elseif isInArray(voc2, getPlayerVocation(cid)) then
				selfSay("Então você quer ser promovido? Bem, que promotion você deseja, {C} ou {D}?", cid) --Opções para Druid
				talkState[talkUser] = 2
			elseif isInArray(voc3, getPlayerVocation(cid)) then
				selfSay("Então você quer ser promovido? Bem, que promotion você deseja, {E} ou {F}?", cid) --Opções para Pally
				talkState[talkUser] = 3
			elseif isInArray(voc4, getPlayerVocation(cid)) then
				selfSay("Então você quer ser promovido? Bem, que promotion você deseja, {G} ou {H}?", cid) --Opções para Kina
				talkState[talkUser] = 4
			end
      	else
      		selfSay("Você já pegou a promotion.", cid)
		npcHandler:addFocus(cid)	
		end	
	end
	
	if msgcontains(msg, "A") and talkState[talkUser] == 1 then
		selfSay("ai está, você agora é a promotion A", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "B") and talkState[talkUser] == 1 then
		selfSay("ai está, você agora é a promotion B", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "C") and talkState[talkUser] == 2 then
		selfSay("ai está, você agora é a promotion C", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "D") and talkState[talkUser] == 2 then
		selfSay("ai está, você agora é a promotion D", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "E") and talkState[talkUser] == 3 then
		selfSay("ai está, você agora é a promotion E", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "F") and talkState[talkUser] == 3 then
		selfSay("ai está, você agora é a promotion F", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "G") and talkState[talkUser] == 4 then
		selfSay("ai está, você agora é a promotion G", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
	
	if msgcontains(msg, "H") and talkState[talkUser] == 4 then
		selfSay("ai está, você agora é a promotion H", cid)
		doPlayerSetVocation(cid, X)
		setPlayerStorageValue(cid, storage, 1)
	end
    return true
end

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

 


Em 'doPlayerSetVocation(cid, X)' no script, troque o X pela id da vocation.
Edit: Acrescentei uma mensagem, que eu tinha esquecido, pra caso o player já tenha pego uma promotion.

Eu testei e está funcionando 100%.

Muito Obrigado.

Queria saber se não seria possível adicionar no Script, com level para mudar a Vocação e

se cada vocação que fosse trocada ganhasse um StoreValue diferente..

De Qualquer forma muito obrigado.

1 hora atrás, ThupaThuplex disse:

Valeu, no Aguarde =)

Obrigado mesmo antes de Testar.

Agradeço pela atenção.

#Testando^^

Eu testei e está funcionando 100%.

Muito Obrigado.

Queria saber se não seria possível adicionar no Script, com level para mudar a Vocação e

se cada vocação que fosse trocada ganhasse um StoreValue diferente..

De Qualquer forma muito obrigado.

Quando o Player desloga, volta na Vocação que ele estava... =/

Link para o comentário
Compartilhar em outros sites

  • 0

@ThupaThuplex
Se cada uma der uma storage diferente, o player poderá trocar de vocação.
E você arrumou o 'fromvoc' de cada promotion em vocations.xml?
Poe exemplo, usando o nome que você deu.
O fromvoc de Blade Knight e Templar Knight devem ser 4, já que ambos são uma promoção da vocação Knight.
Dai seguindo essa lógica você faz pras outras. 
Se continuar o erro, provavelmente terá que modificar o script, pra ao invés de setar uma vocação, setar um nível de promotion.
Faça o que eu disse primeiro, se continuar voltando a vocação, me diz que eu arrumo.

Link para o comentário
Compartilhar em outros sites

  • 0
3 horas atrás, gabriel28 disse:

@ThupaThuplex
Se cada uma der uma storage diferente, o player poderá trocar de vocação.
E você arrumou o 'fromvoc' de cada promotion em vocations.xml?
Poe exemplo, usando o nome que você deu.
O fromvoc de Blade Knight e Templar Knight devem ser 4, já que ambos são uma promoção da vocação Knight.
Dai seguindo essa lógica você faz pras outras. 
Se continuar o erro, provavelmente terá que modificar o script, pra ao invés de setar uma vocação, setar um nível de promotion.
Faça o que eu disse primeiro, se continuar voltando a vocação, me diz que eu arrumo.

No meu vocations.xml está tudo seguindo a ordem do "fromvoc", porém mesmo assim ao "Deslogar" e depois "Logar",

o player volta a sua Vocação Inicial e não pode mais fazer a troca de Vocação, pois o Npc reconhece que ele já fez a troca.

Preciso que ele apenas mantenha a Nova Vocação que foi trocada, fora isso está tudo certo...

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...