Ir para conteúdo
  • Cadastre-se

(Resolvido)[pedido] storage que retorna o player morto para um local


Ir para solução Resolvido por Mecianosz,

Posts Recomendados

13 horas atrás, Onepiece disse:

local c = {
	storage = 20000, -- storage do evento ativo
	from,to = {x = 2100, y = 2100, z = 7}, {x = 2100, y = 2100, z = 7}, -- posição superior esquerda, posição inferior direita
	pos = {x = 2100, y = 2100, z = 7}, -- posição que o player sera teleportado dentro do storage
	oldPEffect = 200, -- efeito quando ele morrer
	newPEffect = 200, -- efeito quando ele renascer
	exit = {x = 1000, y = 1000, z = 7}, -- posição que ele sera levado caso ele não tenha a storage
}

function onDeath(cid, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified)

	if (isInRange(getCreaturePosition(cid), c.from, c.to) then
		if ((cid, c.storage) ~= 0) then 
			doCreatureAddHealth(cid, getCreatureMaxHealth(cid))
			doCreatureAddMana(cid, getCreatureMaxMana(cid))
			doSendMagicEffect(getCreaturePosition(cid), c.oldPEffect)
			doTeleportThing(cid, c.pos)
			doSendMagicEffect(getCreaturePosition(cid), c.newPEffect)
		else
			doTeleportThing(cid, c.pos)
			doSendMagicEffect(getCreaturePosition(cid), c.newPEffect)
		end
	end

return false
end	

tenta desta forma que coloquei acima.

Deu erro em uma linha , eu acrescentei um ')' :

if (isInRange(getCreaturePosition(cid), c.from, c.to) then

Ficou:

if (isInRange(getCreaturePosition(cid), c.from, c.to)) then

Agora está dando uma mensagem que não consegui arrumar.. :image.thumb.png.2a7ef61ad2099cb98b32bd0903cdd440.png

Editado por Mecianosz (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@Mecianosz troca 

if (isInRange(getCreaturePosition(cid), c.from, c.to) then

por

if isInRange(getCreaturePosition(cid), c.from, c.to) then
Editado por Gabrieldsadaxas (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

fiz algumas correções na script

 

local c = {
	storage = 20000, -- storage do evento ativo
	pos_zone = {from = {x = 2100, y = 2100, z = 7}, to = {x = 2100, y = 2100, z = 7}}, -- posição superior esquerda, posição inferior direita
	pos = {x = 2100, y = 2100, z = 7}, -- posição que o player sera teleportado dentro do storage
	oldPEffect = 200, -- efeito quando ele morrer
	newPEffect = 200, -- efeito quando ele renascer
	exit = {x = 1000, y = 1000, z = 7}, -- posição que ele sera levado caso ele não tenha a storage
}

function onDeath(cid, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified)
	local zone = c.pos_zone

	if (isInRange(getCreaturePosition(cid), zone.from, zone.to)) then
		if (getCreatureStorage(cid, c.storage) ~= 0) then 
			doCreatureAddHealth(cid, getCreatureMaxHealth(cid))
			doCreatureAddMana(cid, getCreatureMaxMana(cid))
			doSendMagicEffect(getCreaturePosition(cid), c.oldPEffect)
			doTeleportThing(cid, c.pos)
			doSendMagicEffect(getCreaturePosition(cid), c.newPEffect)
		else
			doTeleportThing(cid, c.pos)
			doSendMagicEffect(getCreaturePosition(cid), c.newPEffect)
		end
	end

return false
end	

 

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

 

Projeto/Serviços que desenvolvi durante esse Tempo.

[SERVIDOR] - NTO By Madara Rinnegan - Criado em 2014

Link para o post
Compartilhar em outros sites
1 hora atrás, Onepiece disse:

fiz algumas correções na script

 


local c = {
	storage = 20000, -- storage do evento ativo
	pos_zone = {from {x = 2100, y = 2100, z = 7}, to = {x = 2100, y = 2100, z = 7}}, -- posição superior esquerda, posição inferior direita
	pos = {x = 2100, y = 2100, z = 7}, -- posição que o player sera teleportado dentro do storage
	oldPEffect = 200, -- efeito quando ele morrer
	newPEffect = 200, -- efeito quando ele renascer
	exit = {x = 1000, y = 1000, z = 7}, -- posição que ele sera levado caso ele não tenha a storage
}

function onDeath(cid, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified)
	local zone = c.pos_zone

	if (isInRange(getCreaturePosition(cid), zone.from, zone.to)) then
		if (getCreatureStorage(cid, c.storage) ~= 0) then 
			doCreatureAddHealth(cid, getCreatureMaxHealth(cid))
			doCreatureAddMana(cid, getCreatureMaxMana(cid))
			doSendMagicEffect(getCreaturePosition(cid), c.oldPEffect)
			doTeleportThing(cid, c.pos)
			doSendMagicEffect(getCreaturePosition(cid), c.newPEffect)
		else
			doTeleportThing(cid, c.pos)
			doSendMagicEffect(getCreaturePosition(cid), c.newPEffect)
		end
	end

return false
end	

 

Agora, este erro:

image.thumb.png.a581d544bfffa3081e82ff7c8e92d227.png

 

__

 

8 horas atrás, Gabrieldsadaxas disse:

@Mecianosz troca 


if (isInRange(getCreaturePosition(cid), c.from, c.to) then

por


if isInRange(getCreaturePosition(cid), c.from, c.to) then

Fiz essa alteração, mas ele agora está parando no erro acima, referente ao "from"

Link para o post
Compartilhar em outros sites

Desculpe, estou montando pelo bloco de notas aqui do trampo ai acabo me desatentando a esses detalhes., copia la novamente eu me desatentei e esqueci de colocar o sinal de = após o from.

 

Projeto/Serviços que desenvolvi durante esse Tempo.

[SERVIDOR] - NTO By Madara Rinnegan - Criado em 2014

Link para o post
Compartilhar em outros sites

@Mecianosz 

troca o 

if (isInRange(getCreaturePosition(cid), zone.from, zone.to)) then

do script dele por

 

if isInRange(getCreaturePosition(cid), c.from, c.to) then
Link para o post
Compartilhar em outros sites
1 hora atrás, Gabrieldsadaxas disse:

@Mecianosz 

troca o 


if (isInRange(getCreaturePosition(cid), zone.from, zone.to)) then

do script dele por

 


if isInRange(getCreaturePosition(cid), c.from, c.to) then

 

6 horas atrás, Onepiece disse:

Desculpe, estou montando pelo bloco de notas aqui do trampo ai acabo me desatentando a esses detalhes., copia la novamente eu me desatentei e esqueci de colocar o sinal de = após o from.

 

Fiz o que os dois disseram, e o script funcionou ? .. Porém, não aparece mais dead body quando as pessoas morrem, e retorna um erro na distro:

image.thumb.png.a31ab2bddba76d4c8a3bfd6ab24a791b.png

Então, eu tentei deixar assim:

if (isInRange(getCreaturePosition(cid), zone.from, zone.to)) then

Agora funciona e não retorna erro na distro, mas não tem dead body de quem morre :s (seja dentro ou fora da arena) ... deve ser porque o return false cancela a morte né. Como eu faria para aparecer alguma coisa no lugar do morto? meu server não dropa loot, então posso fazer aparecer um dead body no local da morte.. Eu poderia até personalizar e fazer aparecer um dead fire devil, por exemplo (id: 2886)

 

Editado por Mecianosz (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

pera não entendi oque você quer, o script funcionou? Se sim, oque você quer fazer que não citou no pedido? Ficou confuso a sua resposta por causa das edições.

 

Projeto/Serviços que desenvolvi durante esse Tempo.

[SERVIDOR] - NTO By Madara Rinnegan - Criado em 2014

Link para o post
Compartilhar em outros sites
Em 06/08/2020 em 09:26, Onepiece disse:

pera não entendi oque você quer, o script funcionou? Se sim, oque você quer fazer que não citou no pedido? Ficou confuso a sua resposta por causa das edições.

@Onepiece Quase funcionou , porque agora não aparece mais o corpo do player morto (dead body).. Só falta fazer isso pra ficar perfeito. Preciso fazer aparecer um dead body no lugar da morte, seja dentro ou fora do evento, porque não está mais aparecendo o corpo (não precisa dropar loot do cara, apenas aparecer um corpo no sqm )..

Editado por Mecianosz (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@Mecianosz vc ta usando um script preparedeath e retornando false, desse jeito qnd o player morre n cria corpo mesmo. tem uns scripts q no forum onde qnd o caram orre é criado corpo com a descrição e tal, da uma pesquisadinha e adiciona as linhas no codigo q vai funfar

Link para o post
Compartilhar em outros sites
local storage = 2000
local from,to = {x = 2100, y = 2100, z = 7}, {x = 2200, y = 2200, z = 7}
local death_pos = {x = 1100, y = 1100, z = 7}

function onPrepareDeath(cid, deathList)
	if isPlayer(cid) and getPlayerStorageValue(cid, storage) > 0 and isInRange(getCreaturePosition(cid), from, to) then
		local strings = {""}
		local j, position, corpse = 1, 1, 0
		for _, pid in ipairs(deathList) do
			if isCreature(pid) == true then
				strings[position] = j == 1 and "" or strings[position] .. ", "
				strings[position] = strings[position] .. getCreatureName(pid) .. ""
				j = j + 1
			else
				strings[position] = j == 1 and "" or strings[position] .. ", "
				strings[position] = strings[position] .."a field item"
				j = j + 1
			end
		end
		for i, str in ipairs(strings) do
			if(str:sub(str:len()) ~= ",") then
				str = str .. "."
			end
			desc = "You recognize "
			desc = desc .. "" .. getCreatureName(cid) .. ". He was killed by " .. str
		end
		if(getPlayerSex(cid) == 1) then
			corpse = doCreateItem(3058, getCreaturePosition(cid))
		else
			corpse = doCreateItem(3065, getCreaturePosition(cid))
		end
		doItemSetAttribute(corpse, "description", desc)
		doTeleportThing(cid, death_pos)
		setPlayerStorageValue(cid, storage , 0) -- aqui estou apagando a storage // pode apagar a linha se quiser
		doRemoveConditions(cid, false)
    	return false
	end
	return true
end

 

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

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites
2 horas atrás, Vodkart disse:

local storage = 2000
local from,to = {x = 2100, y = 2100, z = 7}, {x = 2200, y = 2200, z = 7}
local death_pos = {x = 1100, y = 1100, z = 7}

function onPrepareDeath(cid, deathList)
	if isPlayer(cid) and getPlayerStorageValue(cid, storage) > 0 and isInRange(getCreaturePosition(cid), from, to) then
		local strings = {""}
		local j, position, corpse = 1, 1, 0
		for _, pid in ipairs(deathList) do
			if isCreature(pid) == true then
				strings[position] = j == 1 and "" or strings[position] .. ", "
				strings[position] = strings[position] .. getCreatureName(pid) .. ""
				j = j + 1
			else
				strings[position] = j == 1 and "" or strings[position] .. ", "
				strings[position] = strings[position] .."a field item"
				j = j + 1
			end
		end
		for i, str in ipairs(strings) do
			if(str:sub(str:len()) ~= ",") then
				str = str .. "."
			end
			desc = "You recognize "
			desc = desc .. "" .. getCreatureName(cid) .. ". He was killed by " .. str
		end
		if(getPlayerSex(cid) == 1) then
			corpse = doCreateItem(3058, getCreaturePosition(cid))
		else
			corpse = doCreateItem(3065, getCreaturePosition(cid))
		end
		doItemSetAttribute(corpse, "description", desc)
		doTeleportThing(cid, death_pos)
		setPlayerStorageValue(cid, storage , 0) -- aqui estou apagando a storage // pode apagar a linha se quiser
		doRemoveConditions(cid, false)
    	return false
	end
	return true
end

 

@Vodkart o corpo apareceu, mas o cara é teleportado para o sqm escolhido e começa a morrer várias vezes em seguida, sem parar:

image.png.26a23996e0c8c6593156043f66d15f52.png

Aquele script onDeath do @Onepiece havia funcionado, só faltaria aparecer um dead body no sqm da morte... rs

Editado por Mecianosz (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
22 horas atrás, Vodkart disse:

vc usou a tag certa e registrou no onLogin?

sim.. deve ter algum bug na minha source, porque PrepareDeath não está funcionando e já tentei vários scripts.

Editado por Mecianosz (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Solução

 @Gabrieldsadaxas @Vodkart @Onepiece

 

EDIT: Gente, agradeço muito pela ajuda de todos , mas resolvi de outra forma, já que os scripts não funcionaram: quando o player entra na arena, eu mudo seu town id, assim ele morre e volta para dentro da arena (temple position fica dentro da arena). Caso ele decida sair, é só pisar no tile que volta seu town id original e o teleporta para o templo:

doPlayerSetTown(player, 2)
doPlayerSetTown(cid, 1)

 

Editado por Mecianosz (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo