Ir para conteúdo
  • 0

markindoot

Pergunta

Falae Galerinha do XTibia, Queria pedir a vocês um NPC que promove player level 100+

e Uma spell.

 

Um player level 100 chega no npc e diz:

 

NPC Name: Moluf Master

 

Player: hi

NPC; Ola jovem aventureiro, gostaria de ser [promovido]

Player: yes

NPC: Você Foi Promovido, agora voce é um [Class nova que irei criar].

 

Obs: o NPC cobra 100k para promover os players.

 

<---------------------->

 

Queria pedir uma spell que bufa o player por 5 minutos, ela iria estourar aqueles effects do (Exevo Gran Mas Flam) em diferentes posições, almentaria as skills Axe, Club, Sword.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Cara, o que você procura é um sistema de "second promotion", creio que já existam alguns tópicos a respeito. Mas tudo bem.

Tenta o seguinte:

ANTES DE QUALQUER MUDANÇA, FAÇA UM BACKUP COMPLETO.

No seu arquivo vocations.xml, adicione isso:

 

	<vocation id="9" name="Epic Master Sorcerer" description="an epic master sorcerer" needpremium="0" gaincap="10" gainhp="5" gainmana="30" gainhpticks="4" gainhpamount="10" gainmanaticks="2" gainmanaamount="10" manamultiplier="1.1" attackspeed="2000" soulmax="200" gainsoulticks="15" fromvoc="5" lessloss="50">
		<formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/>
		<skill fist="1.5" club="2.0" sword="2.0" axe="2.0" distance="2.0" shielding="1.5" fishing="1.1" experience="1.0"/>
	</vocation>
	<vocation id="10" name="Epic Elder Druid" description="an epic elder druid" needpremium="0" gaincap="10" gainhp="5" gainmana="30" gainhpticks="4" gainhpamount="10" gainmanaticks="2" gainmanaamount="10" manamultiplier="1.1" attackspeed="2000" soulmax="200" gainsoulticks="15" fromvoc="6" lessloss="50">
		<formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/>
		<skill fist="1.5" club="1.8" sword="1.8" axe="1.8" distance="1.8" shielding="1.5" fishing="1.1" experience="1.0"/>
	</vocation>
	<vocation id="11" name="Epic Royal Paladin" description="an epic royal paladin" needpremium="0" gaincap="20" gainhp="10" gainmana="15" gainhpticks="3" gainhpamount="10" gainmanaticks="3" gainmanaamount="10" manamultiplier="1.4" attackspeed="2000" soulmax="200" gainsoulticks="15" fromvoc="7" lessloss="50">
		<formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/>
		<skill fist="1.2" club="1.2" sword="1.2" axe="1.2" distance="1.1" shielding="1.1" fishing="1.1" experience="1.0"/>
	</vocation>
	<vocation id="12" name="Epic Elite Knight" description="an epic elite knight" needpremium="0" gaincap="25" gainhp="15" gainmana="5" gainhpticks="8" gainhpamount="10" gainmanaticks="4" gainmanaamount="10" manamultiplier="3.0" attackspeed="2000" soulmax="200" gainsoulticks="15" fromvoc="8" lessloss="50">
		<formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/>
		<skill fist="1.1" club="1.1" sword="1.1" axe="1.1" distance="1.4" shielding="1.1" fishing="1.1" experience="1.0"/>
	</vocation>

 

 

 

procure por algo tipo 031-vocations.lua (no meu tá assim, no seu pode estar um pouco diferente), edite-o e deixe assim:

 

function isSorcerer(cid)
	return isInArray({1, 5, 9}, getPlayerVocation(cid))
end

function isDruid(cid)
	return isInArray({2, 6, 10}, getPlayerVocation(cid))
end

function isPaladin(cid)
	return isInArray({3, 7, 11}, getPlayerVocation(cid))
end

function isKnight(cid)
	return isInArray({4, 8, 12}, getPlayerVocation(cid))
end

function isRookie(cid)
	return isInArray({0}, getPlayerVocation(cid))
end

 

 

 

nas pasta onde ficam os scripts dos npcs, crie um arquivo chamado promotion.lua (ou edite-o caso já exista):

 

 

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


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, 'first promot')) then
		selfSay('You need to pay 20000 to be promoted. Is it ok for you?', cid)
		talkState[talkUser] = 1
	elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
		if(getPlayerPremiumDays(cid) >= 1) then
			if getPlayerPromotionLevel(cid) < 1 then
				if(doPlayerRemoveMoney(cid, 20000) == TRUE) then
					setPlayerPromotionLevel(cid, 1)
					doSendMagicEffect(getPlayerPosition(cid), 49)
					selfSay('Congratulations! You are now promoted.', cid)
				else
					selfSay('Sorry, you dont have enough money.', cid)
				end
			else
				selfSay('You alredy have a promotion.', cid)
			end
		else
			selfSay('Sorry, you need to be premium.', cid)
		end
		talkState[talkUser] = 0
		
	elseif(msgcontains(msg, 'second promot')) then
		selfSay('You need to pay 100000 to be promoted. Is it ok for you?', cid)
		talkState[talkUser] = 2
	elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 2) then
		if(getPlayerPremiumDays(cid) >= 1) then
			if getPlayerPromotionLevel(cid) == 1 then
				if(doPlayerRemoveMoney(cid, 100000) == TRUE) then
					setPlayerPromotionLevel(cid, 2)
					doSendMagicEffect(getPlayerPosition(cid), 49)
					selfSay('Congratulations! You are now promoted.', cid)
				else
					selfSay('Sorry, you dont have enough money.', cid)
				end
			else
				selfSay('You you dont have the first promotion.', cid)
			end
		else
			selfSay('Sorry, you need to be premium.', cid)
		end
		talkState[talkUser] = 0
		
		
	elseif(msgcontains(msg, 'no') and isInArray({1,2,3}, talkState[talkUser]) == TRUE) then
		talkState[talkUser] = 0
		selfSay('Ok then.', cid)
	end	

	return true
end

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

 

 

 

agora o seu npc, nesse caso, ele tem a mesma aparecia do oraculo de rook (mude se quiser):

 

 

<?xml version="1.0" encoding="UTF-8"?> 
<npc name="The Oracle" script="data/npc/scripts/promotion.lua" walkinterval="0" floorchange="0"> 
    <health now="100" max="100"/> 
    <look typeex="1448"/> 
    <parameters> 
        <parameter key="message_greet" value="Hello |PLAYERNAME|! How can I {help} you?" /> 
        <parameter key="module_keywords" value="1" /> 
        <parameter key="keywords" value="help" /> 
        <parameter key="keyword_reply1" value="I can give you the {first promotion} and {second promotion}." /> 
    </parameters> 
</npc>

 



Acho que é isso... não sei se vai funcionar, mas tenta ai :)

Quanto ao spell, acho que não deve ser difícil mas como nunca criei um, não vou poder ajudar mt ^^
Dá uma pesquisada na comu, deve ter tutorial explicando como criar novos spells

 

 

PS.: COMO QUE FAÇO PARA ADICIONAR AQUELE BOTÃO DE SPOILER???? NÃO CONSEGUI.

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

  • 0

tpw eu resolvi o problema do npc e da lib, mais eu criei uma nova classe e tudo do jeito que voce falou ai, agora, quando eu dou look no char ele está sem vocation assim: You are . meu NPC que usei é este:

 

 

 

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


function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end


if msgcontains(msg, "destino") and getPlayerStorageValue(cid, oraculo) - 1 then
selfSay("Deseja começar? {sim}", cid)
talkState[cid] = 1


elseif msgcontains(msg, "destino") and getPlayerStorageValue(cid, oraculo) == 1 then
selfSay("Voce de novo, voce quer encarar seu destino?", cid)
talkState[cid] = 1
end


if msgcontains(msg, 'sim') and talkState[cid] == 0 and getPlayerLevel(cid) >= 250 then
selfSay("Entao voce quer sair desta salinha?", cid)
talkState[cid] = 1


else
if talkState[cid] == 250 and msgcontains(msg, 'sim') and getPlayerLevel(cid) < 250 then
selfSay("Voce acha q isso eh uma brincadeira? Volte quando estiver forte.", cid)
setPlayerStorageValue(cid, oraculo, 1)
return true
end


if msgcontains(msg, 'sim') and talkState[cid] == 1 then
selfSay("Tudo bem. Mas para ir para seguir o caminho Elemental voce tem que ser um Bruxo, {ok}?", cid)
talkState[cid] = 2
end


if msgcontains(msg, 'ok') and talkState[cid] == 2 then
selfSay("Otimo... Voce pode ser um {Elemental}...", cid)
selfSay("...", cid)
talkState[cid] = 3
end


if msgcontains(msg, 'Elemental') and talkState[cid] == 3 then
selfSay("Voce quer ser um Elementalista de Hermes?", cid)
selfSay("{sim}", cid)
talkState[cid] = 4
elseif msgcontains(msg, 'druidakkz') and talkState[cid] == 3 then
selfSay("Tem certeza q deseja ser um(a) Druida?", cid)
selfSay("Saiba q qualquer decisao q tome eh irrevogavel. Portanto pense bem...", cid)
talkState[cid] = 5
elseif msgcontains(msg, 'Renegadokkk') and talkState[cid] == 3 then
selfSay("Tem certeza q deseja ser um Renegado?", cid)
selfSay("Voce nao poderá escolher denovo...{sim}", cid)
talkState[cid] = 6
elseif msgcontains(msg, 'cavaleirokkz') and talkState[cid] == 3 then
selfSay("Tem certeza q deseja ser um(a) Cavaleiro(a)?", cid)
selfSay("Saiba q qualquer decisao q tome eh irrevogavel. Portanto pense bem...", cid)
talkState[cid] = 7
end


if msgcontains(msg, 'sim') and talkState[cid] == 4 then
doPlayerSetVocation(cid, 9)
doSendMagicEffect(getPlayerPosition(cid), 10)
doPlayerSendTextMessage(cid, 22,"Voce virou um Elementalista.")
talkState[cid] = 8
elseif msgcontains(msg, 'sim') and talkState[cid] == 5 then
doPlayerSetVocation(cid, 0)
doSendMagicEffect(getPlayerPosition(cid), 10)
doPlayerSendTextMessage(cid, 22,"Agora vc eh um(a) Druida")
talkState[cid] = 9
elseif msgcontains(msg, 'sim') and talkState[cid] == 6 then
doPlayerSetVocation(cid, 2)
doSendMagicEffect(getPlayerPosition(cid), 10)
doPlayerSendTextMessage(cid, 22,"Agora voce e um Renegado")
talkState[cid] = 10
elseif msgcontains(msg, 'sim') and talkState[cid] == 7 then
doPlayerSetVocation(cid, 0)----------------------------------------------------------ID da vocação escolhida (Conferida em "data/XML/vocations")
doSendMagicEffect(getPlayerPosition(cid), 10)
doPlayerSendTextMessage(cid, 22,"Agora vc eh um(a) Cavaleiro(a)")
talkState[cid] = 11
end


if talkState[cid] == 8 or talkState[cid] == 9 or talkState[cid] == 10 or talkState[cid] == 11 then
selfSay("Otimo agora, que voce e um Elementalista, voce pode usar novas spells... {Ok}?", cid)
talkState[cid] = 12
end


if msgcontains(msg, "ok") and talkState[cid] == 12 then
selfSay("Voce terá de retornar a Hermes? {Cidade}", cid)
selfSay("Quer ir mesmo?", cid)
talkState[cid] = 13
end


if msgcontains(msg, "Cidade") and talkState[cid] == 13 then
selfSay("Você Será Movido Para Hermes City OK? {sim}", cid)
talkState[cid] = 14
elseif msgcontains(msg, "thaiszz") and talkState[cid] == 13 then
selfSay("Tem certeza q deseja {VIVER} em Thais?", cid)
talkState[cid] = 15
elseif msgcontains(msg, "venorezz") and talkState[cid] == 13 then
selfSay("Tem certeza q deseja {VIVER} em Venore?", cid)
talkState[cid] = 16
end


if msgcontains(msg, "sim") and talkState[cid] == 14 then
selfSay("Boa viagem e tome cuidado", cid)
doPlayerSetTown(cid, 2)-------------------------------------------------------ID da nova cidade (Conferido pelo map editor)
doTeleportThing(cid, {x=1017, y=1057, z=7, stackpos=253})-------------------coordenadas da nova cidade
doPlayerSendTextMessage(cid, 22,"Você Agora é Um Elementalista e Pode Usar Novas Magias!")
elseif msgcontains(msg, "sim") and talkState[cid] == 15 then
selfSay("Boa viagem e tome cuidado", cid)
doPlayerSetTown(cid, 5)-------------------------------------------------------ID da nova cidade (Conferido pelo map editor)
doTeleportThing(cid, {x=32369, y=32241, z=7, stackpos=253})-------------------coordenadas da nova cidade
doSendMagicEffect({x=32369, y=32241, z=7, stackpos=253}, 10)------------------coordenadas do efeito de teleporte
doPlayerSendTextMessage(cid, 22,"Bem vindo. Agora vc eh um cidadao de Thais")
elseif msgcontains(msg, "sim") and talkState[cid] == 16 then
selfSay("Boa viagem e tome cuidado", cid)
doPlayerSetTown(cid, 6)-------------------------------------------------------ID da nova cidade (Conferido pelo map editor)
doTeleportThing(cid, {x=32957, y=32076, z=7, stackpos=253})-------------------coordenadas da nova cidade
doSendMagicEffect({x=32957, y=32076, z=7, stackpos=253}, 10)------------------coordenadas do efeito de teleporte
doPlayerSendTextMessage(cid, 22,"Bem vindo. Agora vc eh um cidadao de Venore")
end
return true
end
end


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

 

 

queria saber se voce pode confgurar ele pra só poder virar a vocação no level 250+, REPUTADO por ter ajudado.
Editado por omega blueheaven
Melhorar a organização com code e spoiler
Link para o comentário
Compartilhar em outros sites

  • 0

Cara pq vc seta a vocaçao dele pra 0 e 2?? Foram esses os ids que vc configurou?

 

Se a mensagem "You see yourself. You are." Aparece somente após vc logar, então tem que adicionar uma checagem no login.

Se a mensagem aparece quando vc acaba de pegar a nova vocação, então vc tem que arrumar os ids.

Link para o comentário
Compartilhar em outros sites

  • 0

tpw lá a unica vocation que o NPC da é a elementalista que eu troquei o nome do Epic Master Sorcerer para Elementalista, ai o char morre e ta perdendo a vocation, antes tava com um bug desse no mesmo script do npc ai eu adicionei na lib 1,5 e 9 ai nao perdia mais a master sorcerer, mas agora ta perdendo a epic master sorcerer.

Link para o comentário
Compartilhar em outros sites

  • 0

Aqui esta seu npc:


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
 
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
 
if msgcontains(msg, "destino") and getPlayerStorageValue(cid, oraculo) - 1 then
selfSay("Deseja começar? {sim}", cid)
talkState[cid] = 1
 
elseif msgcontains(msg, "destino") and getPlayerStorageValue(cid, oraculo) == 1 then
selfSay("Voce de novo, voce quer encarar seu destino?", cid)
talkState[cid] = 1
end
 
if msgcontains(msg, 'sim') and talkState[cid] == 0 and getPlayerLevel(cid) >= 250 then
selfSay("Entao voce quer sair desta salinha?", cid)
talkState[cid] = 1
 
else
if talkState[cid] == 250 and msgcontains(msg, 'sim') and getPlayerLevel(cid) < 250 then
selfSay("Voce acha q isso eh uma brincadeira? Volte quando estiver forte.", cid)
setPlayerStorageValue(cid, oraculo, 1)
return true
end
 
if msgcontains(msg, 'sim') and talkState[cid] == 1 then
    selfSay("Tudo bem. Mas para ir para seguir o caminho voce tem que pegar a vocacao nova, {ok}?", cid)
talkState[cid] = 2
end
 
if msgcontains(msg, 'ok') and talkState[cid] == 2 then
    selfSay("Otimo... Voce quer ser {promovido}?...", cid)
selfSay("...", cid)
talkState[cid] = 3
end
 
if msgcontains(msg, 'promovido') and talkState[cid] == 3 then
 if isInArray({5,6,7,8}, getPlayerVocation(cid)) then
    if(getPlayerMoney(cid) >= 100000) then
        if getPlayerLevel(cid) > 100 then
            doPlayerRemoveMoney(cid, 100000)
            doPlayerSetVocation(cid, getPlayerVocation(cid)+4)
            setPlayerStorageValue(cid, 45211, 1)
            selfSay('Agora você possui a nova vocação!', cid)
        else
            selfSay('Voce nao tem level suficiente!', cid)
        end
    else
        selfSay('Você não tem dinheiro!', cid)
    end
else
    selfSay('Voce precisa ser Bruxo, Elite Knight, Elder Druid ou Royal Paladin para ganhar a vocação nova!', cid)
end
 
if talkState[cid] == 8 or talkState[cid] == 9 or talkState[cid] == 10 or talkState[cid] == 11 then
selfSay("Otimo agora, que voce e um Elementalista, voce pode usar novas spells... {Ok}?", cid)
talkState[cid] = 12
end
 
if msgcontains(msg, "ok") and talkState[cid] == 12 then
selfSay("Voce terá de retornar a Hermes? {Cidade}", cid)
selfSay("Quer ir mesmo?", cid)
talkState[cid] = 13
end
 
if msgcontains(msg, "Cidade") and talkState[cid] == 13 then
selfSay("Você Será Movido Para Hermes City OK? {sim}", cid)
talkState[cid] = 14
elseif msgcontains(msg, "thaiszz") and talkState[cid] == 13 then
selfSay("Tem certeza q deseja {VIVER} em Thais?", cid)
talkState[cid] = 15
elseif msgcontains(msg, "venorezz") and talkState[cid] == 13 then
selfSay("Tem certeza q deseja {VIVER} em Venore?", cid)
talkState[cid] = 16
end
 
if msgcontains(msg, "sim") and talkState[cid] == 14 then
selfSay("Boa viagem e tome cuidado", cid)
doPlayerSetTown(cid, 2)-------------------------------------------------------ID da nova cidade (Conferido pelo map editor)
doTeleportThing(cid, {x=1017, y=1057, z=7, stackpos=253})-------------------coordenadas da nova cidade
doPlayerSendTextMessage(cid, 22,"Você Agora é Um Elementalista e Pode Usar Novas Magias!")
elseif msgcontains(msg, "sim") and talkState[cid] == 15 then
selfSay("Boa viagem e tome cuidado", cid)
doPlayerSetTown(cid, 5)-------------------------------------------------------ID da nova cidade (Conferido pelo map editor)
doTeleportThing(cid, {x=32369, y=32241, z=7, stackpos=253})-------------------coordenadas da nova cidade
doSendMagicEffect({x=32369, y=32241, z=7, stackpos=253}, 10)------------------coordenadas do efeito de teleporte
doPlayerSendTextMessage(cid, 22,"Bem vindo. Agora vc eh um cidadao de Thais")
elseif msgcontains(msg, "sim") and talkState[cid] == 16 then
selfSay("Boa viagem e tome cuidado", cid)
doPlayerSetTown(cid, 6)-------------------------------------------------------ID da nova cidade (Conferido pelo map editor)
doTeleportThing(cid, {x=32957, y=32076, z=7, stackpos=253})-------------------coordenadas da nova cidade
doSendMagicEffect({x=32957, y=32076, z=7, stackpos=253}, 10)------------------coordenadas do efeito de teleporte
doPlayerSendTextMessage(cid, 22,"Bem vindo. Agora vc eh um cidadao de Venore")
end
return true
end
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

E, para garantir, coloque isso no login.lua:


if getPlayerStorageValue(cid, 45211) >= 1 then
    local votat = getPlayerVocation(cid)
    if votat == 1 or votat == 5 then
        doPlayerSetVocation(cid, 9)
    elseif votat == 2 or votat == 6 then
        doPlayerSetVocation(cid, 10)
    elseif votat == 3 or votat == 7 then
        doPlayerSetVocation(cid, 11)
    elseif votat == 4 or votat == 8 then
        doPlayerSetVocation(cid, 12)
    end
end
Editado por amoeba13
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...