Ir para conteúdo

Featured Replies

Postado
Em 17/05/2014 em 14:05, bielzinhocrazy disse:

Olá pessoal do TibiaKing,

Hoje venho trazer um script sistema de auras, que explicado superficialmente, é uma bolha de luz que te rodeia constantemente (é possível mudar o efeito visual da aura, como você poderá conferir no script), e possui uma chance pré-determinada pela pessoa, em porcentagem, de curar a cada volta que dá no player. Para ligar a aura digite !aura on, e para desligar !aura off. Vocês podem conferir como funciona assistindo o vídeo a seguir : 

 

 

Bom, vamos aos códigos.

Primeiro, na pasta de seu OT, vá em data\talkactions\scripts, e crie um novo arquivo chamado aura.lua, e coloque isto nele (serão necessários dois storages) : 


-- CONFIGURAÇÕES
	aurastr = 25950 -- storage da aura
	estr = 25951 -- storage para o exhaust
	porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem
	quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura)
	tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar)
	tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo)
	efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo)

-- Função que chama a aura
function efeitosAura(i,tm,cid)
	if(isCreature(cid)) then
        	local atual = getCreaturePosition(cid)
		local posaura = {
			{x=(atual.x)-1, y=(atual.y)-1, z=atual.z},
			{x=atual.x, y=(atual.y)-1, z=atual.z},
			{x=(atual.x)+1, y=(atual.y)-1, z=atual.z},
			{x=(atual.x)+1, y=atual.y, z=atual.z},
			{x=(atual.x)+1, y=(atual.y)+1, z=atual.z},
			{x=atual.x, y=(atual.y)+1, z=atual.z},
			{x=(atual.x)-1, y=(atual.y)+1, z=atual.z},
			{x=(atual.x)-1, y=atual.y, z=atual.z},
		}
		local chances = math.random(100)
		if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then
			doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal)
			if(i<=8 and i>1) then
				doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura)
			else
				doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura)
			end
			doSendMagicEffect(atual, efeitocura)
		end
		if(i==8) then
			doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura)
		elseif(i<8) then
			doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura)
		end
		if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then
			i = i+1
			tm = tempo/8
			return addEvent(efeitosAura,tm,i,tm,cid)
		elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then
			return efeitosAura(1,0,cid)
		else
			return TRUE
		end
	else
		return TRUE
	end
end

-- Função principal
function onSay(cid, words, param, channel)
	if(param=="on") then
		if getPlayerStorageValue(cid, estr) > os.time() then
			doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.")
		else
			if(getPlayerStorageValue(cid, aurastr)==2) then
				doPlayerSendCancel(cid,"Sua aura já está habilitada.")
			elseif(getPlayerStorageValue(cid, aurastr)==-1) then
				doPlayerSendCancel(cid,"Aura ligada!")
				setPlayerStorageValue(cid, aurastr, 2)
				efeitosAura(1,tempo/8,cid)
			end
		end
	elseif(param=="off") then
		if(getPlayerStorageValue(cid, aurastr)==2) then
			setPlayerStorageValue(cid, estr, os.time()+2)
			setPlayerStorageValue(cid, aurastr, -1)
			doPlayerSendCancel(cid,"Aura desligada!")
		end
	else	
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.")
	end
	return TRUE
end 

As configurações estão comentadas, portanto é só modificar de acordo com as suas preferências.

 

Agora, em data\talkactions, abra o arquivos talkactions.xml, e cole isto dentro dele :


<talkaction words="!aura" event="script" value="aura.lua"/>

Após feito isso, para evitar erros ao player logar, será necessário criar um script que mudará o storage da aura toda vez que o player se logar novamente, para isso, vá em data\creaturescripts\scripts e crie um arquivo chamado auralogin.lua, e cole isto : 


function onLogin(cid)
	aurastr = 25950 -- storage da aura
	setPlayerStorageValue(cid, aurastr, -1)
	return TRUE
end

Após isto, vá em data\creaturescripts e abra o arquivo creaturescripts.xml, e cole o seguinte código nele :


<event type="login" name="AuraLogin" script="auralogin.lua"/>

E pronto! Agora é só desfrutar do sistema.

 

OBS : Se você der /reload talkactions no OT em execução, com algum player estando com aura em execução, elas serão interrompidas e será necessário usar !aura off, e !aura on, para reabilitá-las. Portanto cuidado!


Créditos : Eu mesmo(Fakezim/BielzinhoCrazy/GMLeal, tanto faz o nick rererere)

Obrigado pessoal!

 

Como coloco só pra vip poder usa? teria que coloca no. talkaction.xml access="2" ex:

"<talkaction words="!aura" access="2" event="script" value="aura.lua"/>" ?  e como eu descubro o qual é o access de vip,god,tutor,plays eetc ?

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

Jamais se desespere em meio as sombrias afeiçoes da sua vida, pois das nuvens mais negras cai água límpida e fecunda

  • 1 month later...
  • Respostas 63
  • Visualizações 12.1k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • bielzinhocrazy
    bielzinhocrazy

    Sim, é possível, mas para isso você deve fazer um creaturescript, e não um talkaction, que ficaria assim : Vai em data\creaturescripts\scripts crie um arquivo chamado auralogin.lua e coloque : -- C

  • bielzinhocrazy
    bielzinhocrazy

    Sim, também é possível, fiz de uma maneira bem improvisada pra você ter uma ideia de como fazer : em data\npcs crie um arquivo NOMEDONPC.xml, e cole isto : <?xml version="1.0" encoding="UTF-8"?&

  • o Npc ta funcionando mais a pessoa nao precisa comprar a aura pra usar, queria que apenas quem comprasse pudesse usar como faço isso?

  • 1 year later...
Postado

Sry reviver esse tópico mais é possível fazer que só vip possa utilizar? 

Jamais se desespere em meio as sombrias afeiçoes da sua vida, pois das nuvens mais negras cai água límpida e fecunda

  • 11 months later...
  • 1 year later...
Postado
Em 21/05/2014 em 16:32, bielzinhocrazy disse:

Sim, também é possível, fiz de uma maneira bem improvisada pra você ter uma ideia de como fazer :

em data\npcs crie um arquivo NOMEDONPC.xml, e cole isto :


<?xml version="1.0" encoding="UTF-8"?>
<npc name="NOMEDOSEUNPC" script="data/npc/scripts/auranpc.lua" walkinterval="50000" floorchange="0">
<health now="100" max="100"/>
<look type="129" head="95" body="116" legs="121" feet="115" addons="3"/>
<parameters>
<parameter key="message_greet" value="Oi |PLAYERNAME|. Eu possuo a habilidade de ceder {aura}. O que deseja?"/>
</parameters>
</npc>

Coloque o nome do npc, e outfits de sua preferência.

agora vá em data\npcs\scripts, crie um arquivo chamado auranpc.lua, e cole isto :


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, 'aura') then
					 if getPlayerStorageValue(cid,20201) ~= 1 then
					 selfSay('Para adquirir aura é necessário 10000000 golds. Você deseja adquirí-la?', cid)
					 talkState[talkUser] = 1
					 else
					 selfSay('Você já possui aura.', cid)
					 end
	 elseif talkState[talkUser] == 1 then
			 if msgcontains(msg, 'yes') then
							 if doPlayerRemoveMoney(cid, 10000000) then
									 setPlayerStorageValue(cid,20201,1)
									 selfSay('Parabéns, agora você possui aura!', cid)
									 talkState[talkUser] = 0
							 else
									 selfSay('Você não possui o dinheiro necessário.', cid)
							 end
			 else
					 selfSay('Então porque veio aqui?', cid)
			 end
	 end
	 return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Você pode configurar o dinheiro (ou item) necessário ali na parte "doRemovePlayerMoney", logo após o if. Se desejar algum item, escreva "doRemovePlayerItem(cid,ID do item, quantidade)". Quando você fizer isso, também deve mudar a mensagem do NPC em que diz o que precisa, que é a parte "selfSay('Para adquirir aura é necessário 10000000 golds. Você deseja adquirí-la?', cid)".

 

Logo após isso, vá no creaturescript da aura (data\creaturescripts\scripts\aura.lua), e apenas na função principal (onLogin), troque por isto :


function onLogin(cid)
	if(getPlayerStorageValue(cid, 20201)==1) then
		return efeitosAura(1,tempo/8,cid)
	end
	return TRUE
end

E pronto, agora é só adicionar o NPC no seu mapa.

Desculpa tá revivendo esse tópico mas eu queria saber se para o áurea funcionar no npc precisa ADC a Scripts no talkactions 

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo