M

[Resolvido] Egg Pokemon

Por M i s s, 30 de set. de 2018 em Resolvidos

3
1.6k
M i s sM
30 de setembro de 2018 às 17:06

Oin Alguem pode cria pra mim Um script que faça um "ovo pokemon" chocar (virando uma pokeball com um poke dentro) ? para o Ovo chocar o player vai precisar dar "x" passos ou ficar "x" tempo com ele na bag é possovel?

 

egg.png.b37b8c0cdd8bebbc55e1c5e6bacddd6b.png

PedriiinP
06 de outubro de 2018 às 04:08
Melhor resposta

Vamos la!

 

OBS: Usei a base Cyan.

 

Primeiramente abra o items.xml que se encontra em data/items/

 

Procure o id do item que vai ser o OVO.

Você terá que fazer essa parte para cada ovo que adicionar no jogo.

e adicione os seguintes atributos nele:

 

Spoiler
<item id="5080" article="a" name="Ovo Pokemon Inicial">
  <attribute key="showattributes" value="1" />
  <attribute key="passos" value="25"/>
  <attribute key="description" value="[Passos restantes para chocar: numero_de_passos]"/>
</item>

 

 

Em numero_de_passos coloque a quantidade de passos para chocar.

 

 

Após isso vá em data/creaturescripts/ e abra o arquivo creaturescript.xml e adicione o seguinte:

 

Spoiler
<event type="move" name="MoveOvoChocar" event="script" value="chocarOvo.lua"/>

 

 

Logo em seguida vá em data/creaturescript/scripts/ e abra o arquivo login.lua e procure por algo assim:

 

Spoiler
registerCreatureEvent(cid, "ShowPokedex")
registerCreatureEvent(cid, "PlayerLogout")

 

 

E embaixo coloque o seguinte:

 

Spoiler
registerCreatureEvent(cid, "MoveOvoChocar")

 

 

Finalmente ainda em data/creaturescripts/scripts/ crie um arquivo com o nome de chocarOvo.lua e coloque o seguinte código dentro:

 

Spoiler
OVOS = {
	--[id do ovo] = {POKEMONS={"possivel pokemon 1", "possivel pokemon 2", ...}, PASSOS=quantidade de passos para chocar},
	[5080] = {POKEMONS={"Magikarp","Caterpie","Weedle"},PASSOS=25},
	[6568] = {POKEMONS={"Abra","Drowzee"},PASSOS=50},
}


STORAGE_TIMER = 90001 -- chave para guardar se o timer estiver ativo.
TEMPO_MENSAGEM = 10 -- intervalo que a mensagem sera mostrada na tela entre a primeira vez, exemplo: o cara anda e mostra a mensagem, daqui o tempo configurado a mensagem aparecera novamente.

SOMENTE_UM_OVO = true -- se for para chocar somente um ovo de cada vez deixe: true, caso contrario deixei: false.
MOSTRAR_MENSAGEM = false -- mostrar mensagem que não é possivel chocar dois ovos do mesmo tipo caso a pessoa tiver 2 ovos do mesmo tipo.

MENSAGENS = {
	SOMENTE_UM_TIPO = "Voce so pode chocar um ovo do mesmo tipo de cada vez!",
	PASSOS = "[Passos restantes para chocar: %s]",
	CHOCOU = "O Ovo chocou e nasceu um(a) %s",
}

local function atributosOvo(ovo, passos)
	if not ovo then return end
	if not passos then return end
	doSetItemAttribute(ovo.uid, "passos", passos)
	doSetItemAttribute(ovo.uid, "description", string.format(MENSAGENS.PASSOS, passos))
end

local function mostrarMensagem(cid, message)
	if getPlayerStorageValue(cid, STORAGE_TIMER) == -1 then
		setPlayerStorageValue(cid, STORAGE_TIMER, 1)
		doPlayerSendTextMessage(cid, 22, mensagem)
		addEvent(
		function(cid)
			setPlayerStorageValue(cid, STORAGE_TIMER, -1)
		end, TEMPO_MENSAGEM*1000, cid)
	end
end

local function fChocar(cid, ovo, tabela)
	passos = getItemAttribute(ovo.uid, "passos")
	if not passos or passos < 1 then
		atributosOvo(ovo, tabela.PASSOS)
	elseif passos > 1 then
		atributosOvo(ovo, passos-1)
	elseif passos == 1 then
		atributosOvo(ovo, -1)
		pokemon = tabela.POKEMONS[math.random(#tabela.POKEMONS)]
		addPokeToPlayer(cid, pokemon, 0, nil, btype)
		doPlayerSendTextMessage(cid, 22, string.format(MENSAGENS.CHOCOU, pokemon))
		doRemoveItem(ovo.uid)
	end
end

function onMove(cid, fromPosition, toPosition)
	if not isPlayer(cid) then return true end
	for id, conteudo in pairs(OVOS) do
		quantidade = getPlayerItemCount(cid, id)
		if quantidade >= 1 then
			ovo = getPlayerItemById(cid, true, id)
			if quantidade == 1 then			
				fChocar(cid, ovo, conteudo)
				if SOMENTE_UM_OVO then return true end
			else
				if not MOSTRAR_MENSAGEM then return true end
				mostrarMensagem(cid, MENSAGENS.SOMENTE_UM_TIPO)
			end
		end
	end
	return true
end

 

 

Faça bom uso, e qualquer dúvida só me avisar.

Se gostou REP++.

1 mês depois...
MarshmelloM
10 de novembro de 2018 às 23:02
O pedido neste tópico de foi atendido e/ou o autor do tópico resolveu sua duvida. Este tópico está fechado e foi movido para Pedidos - Resolvidos. Se você tiver outros pedidos, crie um novo tópico.