Ir para conteúdo
  • 0

[Resolvido] [PEDIDO] Scripts de spawn no mapa


rafersiq

Pergunta

Posts Recomendados

  • 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
2 horas atrás, strongernxs disse:

Bom... O Script de Summon Por Quantidade Eu nao tenho, alguns são exclusivos... Mas tenho de Sumonar Boss ao Clicar em uma Parede !!! Caso Queira. 

 

Eu queria um que sumona um pokemon en determinadas horas ou quando o player mata tantos pokes e ele aparece

Link para o comentário
Compartilhar em outros sites

  • 0
13 minutos atrás, rafersiq disse:

 

Eu queria um que sumona um pokemon en determinadas horas ou quando o player mata tantos pokes e ele aparece

 

Eu tenho um Parecido ... Vc clica no item sumona o poke e quando mata o poke tem coowndon pra usar o click dnv

Link para o comentário
Compartilhar em outros sites

  • 0

 

50 minutos atrás, Yan18 disse:

E isso é um evento ou task? 

 

E um evento

51 minutos atrás, Yan18 disse:

Qual a versão da TFS?

A versão e aqueles que sao pda e outros ne ?

Link para o comentário
Compartilhar em outros sites

  • 0
6 horas atrás, rafersiq disse:

E isso é um evento ou task? 

 

E um evento

A versão e aqueles que sao pda e outros ne ?

 

Sobre a versão, então no seu caso muito provavelmente é 0.3.6, que é a versão atualmente de todos os Poketibia.

 

Se é evento, provavelmente é um pokémon que não terá em respawn, então não precisa de storage para deixa específica a kill dele (quando não tem storage, em qualquer situação vai contar como kill nesse script que vou fazer, por exemplo matar em respawn)

 

 

Vai em Data/Creaturescripts/Scripts e crie um arquivo chamado task_event.lua (ou o nome que preferir) e adicione o código dentro:

 

local pokemon_derrotar = "Charizard" -- NOME DO POKÉMON QUE PRECISA DERROTAR NA TASK
local total = 50 -- TOTAL DE POKEMON QUE PRECISA DERROTAR
local pokemon_spawn = "Mewtwo" -- NOME DO POKEMON QUE VAI SPAWNAR
local position_spawn = {x= 1000, y= 1000, z= 7} -- POSIÇÃO ONDE VAI SPAWNAR O POKEMON
local storage = 15879 -- STORAGE PARA VER SE JÁ FEZ A TASK
local random_porcentagem = 50 -- PORCENTAGEM QUE TEM DO POKEMON SPAWNAR AO TERMINAR A TASK

function onKill(cid, target)
local contador = 0
local random_chance = math.random(100)

	if getCreatureName(target) == pokemon_derrotar then
		if getPlayerStorageValue(cid, storage) < 1 then
			if (total - contador) > 0 then
				contador = contador + 1
			end
			
			if contador == total then
				setPlayerStorageValue(cid, storage, 1)
				
				if (random_chance >= random_porcentagem) then
					doSummonCreature(pokemon_spawn, position_spawn)
					doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você despertou a fúria de um pokémon, se prepare para o combate!")
				return true
				
				else
					return true
				end	
			end
			
		else
			return true
		end	
	
	else
		return true
	end
end

 

Agora vai em creaturescripts.xml e adicione a tag:

<event type="kill" name="task_event" script="task_event.lua" />

 

OBS: Caso tenha colocado um arquivo com nome diferente do que sugeri não se esqueça de trocar na tag xml.

 

E por fim em Data/Creaturescripts/Scripts abra o arquivo login.lua e procura seção de eventos e adiciona o evento:

registerCreatureEvent(cid, "task_event")

 

Deixei tudo comentado nas variáveis, só vai precisar trocar os valores. Lembrando que na variável random_porcentagem é a chance que vai ter de nascer o pokémon, como eu deixei 50, da tanto para verificar se vai ser maior que 50 ou menor, mas no caso deixei maior ou igual a 50, então qualquer valor acima de 50 gerado pela variável random_chance vai sumonar o pokémon. Se quer que tenha menos de 50% de chance, mude o valor da variável random_porcentagem e nessa verificação:

if (random_chance >= random_porcentagem) then

Mude para o valor desejado menor que 50, mas tem que mudar o if para:

if (random_chance <= random_porcentagem) then

 

Teste, e se der algum erro ou problema, me avise.

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

  • 0
22 horas atrás, Yan18 disse:

Teste, e se der algum erro ou problema, me avise

ou mano vc sabe arumar um bug que da na pokebar que quanto solta um pokemon com addon pela pokebar , nao aparece o addon no pokemon?

Link para o comentário
Compartilhar em outros sites

  • 0
2 horas atrás, rafersiq disse:

ou mano vc sabe arumar um bug que da na pokebar que quanto solta um pokemon com addon pela pokebar , nao aparece o addon no pokemon?

Cara, vamos focar primeiro no seu tópico aqui, eu fiz o script que você pediu e você não disse se funcionou ou não.

 

Sobre sua outra dúvida, já adianto que terá que criar um outro tópico para essa dúvida porque não tem relação com a dúvida deste tópico

Link para o comentário
Compartilhar em outros sites

  • 0
36 minutos atrás, Yan18 disse:

Cara, vamos focar primeiro no seu tópico aqui, eu fiz o script que você pediu e você não disse se funcionou ou não.

o pokemon ficou bugado quando eu coloquei

ele fica sem vida mas nao some e aparece o corpo 

Link para o comentário
Compartilhar em outros sites

  • 0
15 minutos atrás, rafersiq disse:

o pokemon ficou bugado quando eu coloquei

ele fica sem vida mas nao some e aparece o corpo 

Mas a task funcionou? Somente quando spawna o boss ele fica bugado?

 

Substitui 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 pokemon_spawn = "Mewtwo" -- NOME DO POKEMON QUE VAI SPAWNAR
local position_spawn = {x= 1000, y= 1000, z= 7} -- POSIÇÃO ONDE VAI SPAWNAR O POKEMON
local storage = 15879 -- STORAGE PARA VER SE JÁ FEZ A TASK
local random_porcentagem = 50 -- PORCENTAGEM QUE TEM DO POKEMON SPAWNAR AO TERMINAR A TASK

function onKill(cid, target)
local contador = 0
local random_chance = math.random(100)

	if getCreatureName(target) == pokemon_derrotar then
		if getPlayerStorageValue(cid, storage) < 1 then
			if (total - contador) > 0 then
				contador = contador + 1
			end
			
			if contador == total then
				setPlayerStorageValue(cid, storage, 1)
				
				if (random_chance >= random_porcentagem) then
					doCreateMonster(pokemon_spawn, position_spawn)
					doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você despertou a fúria de um pokémon, se prepare para o combate!")
				return true
				
				else
					return true
				end	
			end
			
		else
			return true
		end	
	
	else
		return true
	end
end

 

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

  • 0
Em 04/01/2021 em 20:58, Yan18 disse:

Substitui o código por esse

Ou mano tem como tirar a storange pra conseguir fazer mais vezes e botar mais pokemons pra o evento?

Link para o comentário
Compartilhar em outros sites

  • 0
6 horas atrás, rafersiq disse:

Ou mano tem como tirar a storange pra conseguir fazer mais vezes e botar mais pokemons pra o evento?

Tem sim, mas quantas vezes você quer? Da para limitar uma quantidade de vezes que o player faz. 

Link para o comentário
Compartilhar em outros sites

  • 0
24 minutos atrás, Yan18 disse:

Tem sim, mas quantas vezes você quer? Da para limitar uma quantidade de vezes que o player faz.

eu queria deixar sem limit de vezes pra fazela 

Link para o comentário
Compartilhar em outros sites

  • 0
32 minutos atrás, rafersiq disse:

eu queria deixar sem limit de vezes pra fazela 

Substitui 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}},
}


function onKill(cid, target)
local contador = 0
local random_chance = math.random(100)

	if getCreatureName(target) == pokemon_derrotar then
		if (total - contador) > 0 then
			contador = contador + 1
		end
		
		if contador == total then			
			if (random_chance >= random_porcentagem) then
				for i = 1, #pokemons_spawn do				
					doCreateMonster(pokemons_spawn[i].pokemon, pokemons_spawn[i].position)
				end	
				
				doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você despertou a fúria de alguns pokémons, fuja para sobreviver!")
				contador = 0
				return true
			
			else
				return true
			end	
		end		
	
	else
		return true
	end
end

 

Lembrando que assim que matar a quantidade de pokémons que você colocou nas variáveis total pokemon_derrotar vai ter a porcentagem de summonar todos os pokémons da tabela pokemons_spawn. Só colocar os pokémons e as posições que vão aparecer dentro da tabela.

 

Mas se é ilimitado esse evento/task, então não faz mais sentido com que sempre aparece o boss em vez de ter uma chance?

 

Testa o código e qualquer problema você me avisa.

Editado por Yan18
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...