Ir para conteúdo
  • 0

[Resolvido] [PEDIDO] Scripts de spawn no mapa


rafersiq

Pergunta

Posts Recomendados

  • 0
22 minutos atrás, rafersiq disse:

e que eu tou querendo meio que fazer um evento tipo vc mata x quantia de pokemon e um certo pokemon spawna em um canto mais ou menos isso

Saquei! Funcionou o script? Populou a tabela corretamente? Coloquei posições genéricas.

 

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

  • 0
3 minutos atrás, Yan18 disse:

Saquei! Funcionou o script? Populou a tabela corretamente? Coloquei posições genéricas.

vou testar agora 

estava assistndo vidio no youtuber e acabei nao testando ainda

Link para o comentário
Compartilhar em outros sites

  • 0
Agora, Yan18 disse:

Ok, testa e me avisa!

ok

4 horas atrás, Yan18 disse:

Ok, testa e me avisa!

testei e deu o mesmo bug o pokemon que esta no scripts ele morrre mas a sprite dele ainda fica la no local e nao conta a kill

eu testei se bugava os outros mas vi que so buga o charizard que esta no scripts

Link para o comentário
Compartilhar em outros sites

  • 0
local C ={
	['demon'] = {boss='orshabaal',store=2001,pos={x=0,y=0,z=0},quant=10000}, -- 10k demon killed summon 1 orshabaal
	['dragon lord'] = {boss='demodras',store=2000,pos={x=0,y=0,z=0},quant=2500}, -- 2,5k dl killed summon 1 Demodras
}

function onKill(cid, target)
local Mname = getCreatureName(target)
	if(getGlobalStorageValue(C[Mname].store) >= C[Mname].quant)then
		if not(getCreatureByName(C[Mname].boss))then
			--executeRaid(C[Mname].boss) -- seria um otimo metodo caso queira implementar.
			doCreateMonster(C[Mname].boss, C[Mname].pos)
			setGlobalStorageValue(C[Mname].store,-1)
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,"boss foi sumonado")
		end
	end
	local gstore = getGlobalStorageValue(C[Mname].store) < 0 and 0 or getGlobalStorageValue(C[Mname].store)
	setGlobalStorageValue(C[Mname].store,gstore+1)
	return true
end

 

Link para o comentário
Compartilhar em outros sites

  • 0
Em 06/01/2021 em 18:47, rafersiq disse:

ok

testei e deu o mesmo bug o pokemon que esta no scripts ele morrre mas a sprite dele ainda fica la no local e nao conta a kill

eu testei se bugava os outros mas vi que so buga o charizard que esta no scripts

Foi erro meu, bobiei.

 

Arrumei o código e agora está funcionando normal:

 

image.thumb.png.73b4cb75555f10b1403ef3435a4f58f8.png

 

Substitua o código por esse:

 

local pokemon_derrotar = "Charizard" -- NOME DO POKÉMON QUE PRECISA DERROTAR NA TASK
local total = 50 -- TOTAL DE POKEMON QUE PRECISA DERROTAR
local random_porcentagem = 50 -- PORCENTAGEM QUE TEM DO POKEMON SPAWNAR AO TERMINAR A TASK

-- TABELA COM OS POKEMONS QUE APARECERÃO AO DERROTAR A QUANTIDADE DO POKÉMON QUE COLOCOU NA VARIÁVEL pokemon_derrotar --
local pokemons_spawn = {
{pokemon = "Mewtwo", position = {x= 1000, y= 1000, z= 7}},
{pokemon = "Mew", position = {x= 1000, y= 1000, z= 7}},
{pokemon = "Articuno", position = {x= 1000, y= 1000, z= 7}},
{pokemon = "Zapdos", position = {x= 1000, y= 1000, z= 7}},
{pokemon = "Moltres", position = {x= 1000, y= 1000, z= 7}},
}

------------------------------- CÓDIGO -----------------------------
function onKill(cid, target)
local random_chance = math.random(100) -- VARIÁVEL QUE GERA VALOR ALEATÓRIO
local storage_contador = 336699 -- STORAGE QUE ARMAZENA QUANTAS VEZES O POKEMON FOI DERROTADOS
local restante = total - getGlobalStorageValue(storage_contador) -- VARIÁVEL QUE GERA A DIFERENÇA ENTRE O TOTAL E O CONTADOR DOS POKEMONS DERROTADOS

	
	if getCreatureName(target) == pokemon_derrotar then
		if getGlobalStorageValue(storage_contador) < 1 then
			setGlobalStorageValue(storage_contador, 1)
		end	
		
		setGlobalStorageValue(storage_contador, getGlobalStorageValue(storage_contador) + 1)	
					
		if restante == 0 then						
			if (random_chance >= random_porcentagem) then
				for _, pokes in pairs(pokemons_spawn) do	
					doCreateMonster(pokes.pokemon, pokes.position)
				end
				
				doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você despertou a fúria de alguns pokémons, fuja para sobreviver!")
				setGlobalStorageValue(storage_contador, 1)
				return true
			
			else
				setGlobalStorageValue(storage_contador, 1)
				return true
			end	
		
		else
			return true	
		end		
	
	else
		return true
	end
end

 

Mesmo esquema das outras vezes, só alterar os valores das variáveis, mas para te facilitar, recomendo copiar o código somente a partir da linha function onKill(cid, target).

 

Conforme a imagem acima, está funcionando normal, mas qualquer problema só me avisar.

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

  • 0
Em 11/01/2021 em 01:47, Yan Oliveira disse:

Mesmo esquema das outras vezes, só alterar os valores das variáveis, mas para te facilitar, recomendo copiar o código somente a partir da linha function onKill(cid, target).

 

Conforme a imagem acima, está funcionando normal, mas qualquer problema só me avisar.

 

desculpa reviver esse post mas tem como colocar ao invez de ser um local determinada que o pokemon ira respawnar ele aparecer onde o utimo pokemon que o player matou o pokemon diferente ira  espawnar?

Link para o comentário
Compartilhar em outros sites

  • 0
Em 09/01/2022 em 12:08, rafersiq disse:

 

desculpa reviver esse post mas tem como colocar ao invez de ser um local determinada que o pokemon ira respawnar ele aparecer onde o utimo pokemon que o player matou o pokemon diferente ira  espawnar?

Pelo que entendi, você quer que ao derrotar o último pokémon do contador da task, os boss spawnem na posição do último pokémon derrotado. Se é isso, é tranquilo.

 

Eu refiz o código, porque olhando novamente o código que fiz ano passado, achei que dava para melhorar, e já está com a alteração que você pediu. Substitua todo seu código por esse:

-- VARIÁVEIS --
local total = 50 -- TOTAL DE POKEMON QUE PRECISA DERROTAR
local random_chance = 50 -- PORCENTAGEM QUE TEM DO POKEMON SPAWNAR AO TERMINAR A TASK

-- TABELA COM OS POKÉMONS DA TASK QUE PRECISA DERROTAR --
local pokemon_task = {
"Charizard",
}

-- TABELA COM OS POKEMONS QUE APARECERÃO AO DERROTAR A QUANTIDADE DO POKÉMON QUE COLOCOU NA VARIÁVEL pokemon_derrotar --
local pokemons_spawn = {
"Mewtwo",
"Mew",
"Articuno",
"Zapdos",
"Moltres",
}

------------------------------- CÓDIGO -----------------------------
function onKill(cid, target)
	for _, pokemon in ipairs(pokemon_task) do
		if getCreatureName(target) == pokemon then
			if getGlobalStorageValue(storage_task_defeat_count) < 0 then
				setGlobalStorageValue(storage_task_defeat_count, 1)
			end
			
			setGlobalStorageValue(storage_task_defeat_count, getGlobalStorageValue(storage_task_defeat_count) + 1) -- INCREMENTA O CONTADOR DE POKÉMONS DERROTADOS DA TASK
			local restante = total - getGlobalStorageValue(storage_task_defeat_count)
			
			if restante == 0 then
				local chance = math.random(100) -- VARIÁVEL QUE GERA VALOR ALEATÓRIO
				
				if chance >= random_chance then
					for _, boss in pairs(pokemons_spawn) do	
						doCreateMonster(boss, getCreaturePosition(target))
					end
				
					doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você despertou a fúria de alguns pokémons, fuja para sobreviver!")
				end
								
				setGlobalStorageValue(storage_task_defeat_count, 0)
			end
						
			break			
		end		
	end
	
return true
end

 

Vamos as explicações!

 

Eu alterei um pouco a estrutura do código, então agora está mais otimizado e agora adicionei o pokémon da task em uma tabela, caso queira adicionar mais de um pokémon para contabilizar a task, agora é possível. Porém, se adicionar mais de um pokémon para a task, do jeito que eu fiz, qualquer um pokémon que está dentro da tabela pokemon_task que derrotar, irá contabilizar como o total, e não individualmente, ou seja, por exemplo, o total que defini é 50 (variável total), então, se você adicionar por exemplo dois pokémons, no caso, Charizard e Blastoise, e você matar 25 Charizards e 25  Blastoises, vai ter a chance de nascer os boss se o valor aleatório gerado pela chance estiver na range definida de 50 (se o math.random gerar 50 ou mais). Caso queira que conte individualmente, vou ter que alterar o código. Mas, se quiser só um pokémon, então deixe somente um na tabela, assim como deixei.

 

Agora, como estamos trabalhando com storage global, vamos criar ela na pasta lib, porque do jeito que eu tinha feito não era a maneira correta, o certo é criar ela de forma global, e não local. Então, vai em Data/Lib e abra o arquivo 100-compat.lua (ou um arquivo de sua preferência) e adicione a seguinte linha no final do arquivo:

storage_task_defeat_count = 336699

 

Mantive o mesmo valor na storage global, e agora ela está registrada globalmente.

 

Pronto, está finalizado as alterações! Agora teste e veja se vai dar algum problema.

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

  • 0
De nada! Na próxima vez, coloque a resposta que resolveu seu problema como a melhor resposta para ajudar e facilitar outras pessoas com essa mesma dúvida no futuro. Dessa vez vou colocar para você.
 
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.

 

 

 

 

 

Editado por Yan Oliveira
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...