Ir para conteúdo
  • Cadastre-se

Virar zombie ao morrer


Posts Recomendados

Olá galera, preciso de uma ajuda com um script no meu OT,
O char nasce no templo e tem seus outfits e addons normais, quando ele morrer, gostaria de que ele nascesse em um outro lugar que nao fosse o templo, ex: em um cemitério e com um outfit de zombie, ghots tanto faz... e que nao pudesse mudar esse outfit, e quando adquirisse um item qualquer ele voltasse a ter seus outfits e addons normais e voltasse pro templo.

Link para o post
Compartilhar em outros sites

e quando adquirisse um item qualquer ele voltasse


Como ele voltaria ao "normal" com esse item? Simplesmente usando-o ou uma talkaction, um npc..?

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

Olá, seria usando-o desculpe minha falta de explicação rs...

 


Como ele voltaria ao "normal" com esse item? Simplesmente usando-o ou uma talkaction, um npc..?

Link para o post
Compartilhar em outros sites

Boa noite.

O script ficou assim...

Em CreatureScripts, o arquivo creaturescripts.xml adicione as seguintes tags:

<event type="preparedeath" name="Morto" event="script" value="posmorte.lua"/>
	<event type="login" name="MortoSeg" event="script" value="posmorte.lua"/>
Dentro da pasta scripts da referida acima, em login.lua adicione as tags abaixo junto com as outras do gênero:

registerCreatureEvent(cid, "Morto")
registerCreatureEvent(cid, "MortoSeg")
Agora crie um arquivo com o nome "posmorte.lua" e adicione o script dentro:

-------- CONFIGURAÇÕES --------
local morto = {lookType = 48} -- lookType
local cemitery = {x=177, y=168, z=7} -- Coordenada do Cemitério
local strg, strg2 = 12128, 12129 -- Storage Salva que é Fantasma, Storage de Controle
---- FIM DAS CONFIGURAÇÕES ----

local condition_outfit = createConditionObject(CONDITION_OUTFIT)
setConditionParam(condition_outfit, CONDITION_PARAM_OUTFIT, true)
setConditionParam(condition_outfit, CONDITION_PARAM_TICKS, -1)
addOutfitCondition(condition_outfit, morto)

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
	if isPlayer(cid) then
		setPlayerStorageValue(cid, strg, 1)
		setPlayerStorageValue(cid, strg2, -1)
	end
return true
end

function onLogin(cid)
	if getPlayerStorageValue(cid, strg2) < 1 then
		if getPlayerStorageValue(cid, strg) >= 1 then
			setPlayerStorageValue(cid, strg2, 1)
			doAddCondition(cid, condition_outfit)
			doTeleportThing(cid, cemitery)
			doPlayerSendTextMessage(cid, 4, "Agora és um fantasma.")
		end
	else
		doPlayerSendTextMessage(cid, 4, "Ainda és um fantasma.")
		doAddCondition(cid, condition_outfit)
	end
return true
end
Certo, agora em Actions, abra o actions.xml e adicione a tag do item que ressuscitará o player, ficará tipo isso:

<action itemid="ID_DO_ITEM" script="reviver.lua"/>
E o arquivo "reviver.lua" ficará assim:

-------- CONFIGURAÇÕES --------
local morto = {lookType = 48} -- lookType
local strg, strg2 = 12128, 12129 -- Storage Salva que é Fantasma, Storage de Controle
---- FIM DAS CONFIGURAÇÕES ----

function onUse(cid, item, frompos, item2, topos)
	if getPlayerStorageValue(cid, strg) >= 1 or getPlayerStorageValue(cid, strg2) >= 1 then
		setPlayerStorageValue(cid, strg, -1)
		setPlayerStorageValue(cid, strg2, -1)
		doRemoveItem(item.uid, 1)
		doRemoveCondition(cid, CONDITION_OUTFIT)
		doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
	else
		doPlayerSendCancel(cid, "Você não está morto para usar este item.")
	end
return true
end
Testei e funcionou perfeitamente.

Caso haja bugs, favor relatar.

Boa sorte.

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

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites

Esqueci de dizer que, meu OT é o 8.6 muda alguma coisa isso?

Obg...

Estou tendo alguns problemas para add o script, se você puder ser um pouco mais especifico eu agradeceria obg...

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

Esqueci de dizer que, meu OT é o 8.6 muda alguma coisa isso?

Obg...

Estou tendo alguns problemas para add o script, se você puder ser um pouco mais especifico eu agradeceria obg...

Embora não saibamos qual distro você usa e que versão é a dele, deve funcionar sim.

Caso acuse alguma função como nula, poste uma screenshot aqui.

A adição dos scripts é simples (códigos do Adriano SwaTT):

zombieplayer.lua (data/creaturescripts/scripts):

local morto = {lookType = 48} -- lookType
local cemitery = {x=177, y=168, z=7} -- Coordenada do Cemitério
local stor = {12128, 12129} -- {Storage Salva que é Fantasma, Storage de Controle}

local condition_outfit = createConditionObject(CONDITION_OUTFIT)
setConditionParam(condition_outfit, CONDITION_PARAM_OUTFIT, true)
setConditionParam(condition_outfit, CONDITION_PARAM_TICKS, -1)
addOutfitCondition(condition_outfit, morto)

function onPrepareDeath(cid)
    if isPlayer(cid) then
        setPlayerStorageValue(cid, stor[1], 1)
        setPlayerStorageValue(cid, stor[2], -1)
    end
    return true
end

function onLogin(cid)
    if getPlayerStorageValue(cid, stor[2]) < 1 then
        if getPlayerStorageValue(cid, stor[1]) > 0 then
            setPlayerStorageValue(cid, stor[2], 1)
            doAddCondition(cid, condition_outfit)
            doTeleportThing(cid, cemitery)
            doPlayerSendTextMessage(cid, 4, "Agora és um fantasma.")
        end
    else
        doPlayerSendTextMessage(cid, 4, "Ainda és um fantasma.")
        doAddCondition(cid, condition_outfit)
    end
    return true
end

Registro do creature event (preparedeath) em login.lua (data/creaturescripts/scripts):

registerCreatureEvent(cid, "TurnZombie")

Tags - creaturescripts.xml (data/creaturescripts):

<event type="preparedeath" name="TurnZombie" event="script" value="zombieplayer.lua"/>
<event type="login" name="ZombieLogin" event="script" value="zombieplayer.lua"/>

revive.lua (data/actions/scripts):

function onUse(cid, item, frompos, item2, topos)
    local stor = {12128, 12129} -- {Storage Salva que é Fantasma, Storage de Controle}
    if getPlayerStorageValue(cid, stor[1]) > 0 or getPlayerStorageValue(cid, stor[2]) > 0 then
        setPlayerStorageValue(cid, stor[1], -1)
        setPlayerStorageValue(cid, stor[2], -1)
        doRemoveItem(item.uid, 1)
        doRemoveCondition(cid, CONDITION_OUTFIT)
        doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
    else
        doPlayerSendCancel(cid, "Você não está morto para usar este item.")
    end
    return true
end

Tag - actions.xml (data/actions):

<action itemid="ITEMID" script="revive.lua"/>
Editado por Suicide (veja o histórico de edições)

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

E como ficaria , no caso o player tivesse que puxa uma alavanca ou entra num teleport, para volta no templo com addon normal ?

Link para o post
Compartilhar em outros sites

Com base nos códigos do membro, a alavanca ficaria:

zombielever.lua

function onUse(cid, item, frompos, item2, topos)
    local stor = {12128, 12129} -- {storage zombie, storage humana}
    if getPlayerStorageValue(cid, stor[1]) > 0 or getPlayerStorageValue(cid, stor[2]) > 0 then
        setPlayerStorageValue(cid, stor[1], -1)
        setPlayerStorageValue(cid, stor[2], -1)
        doRemoveCondition(cid, CONDITION_OUTFIT)
        doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
        doSendMagicEffect(fromPos, CONST_ME_TELEPORT)
    else
        doPlayerSendCancel(cid, "Você não está morto para usar esta alavanca.")
    end
    return true
end



Tag:

<action actionid="ACTIONID" script="zombielever.lua"/>




E o portal (sem coordenadas pré determinadas nele, apenas contendo o actionID da tag):

zombieportal.lua (data/movements/scripts):

function onStepIn(cid, item, pos, fromPos)
    local stor = {12128, 12129} -- {storage zombie, storage humana}
    if isPlayer(cid) and getPlayerStorageValue(cid, stor[1]) > 0 or getPlayerStorageValue(cid, stor[2]) > 0 then
        setPlayerStorageValue(cid, stor[1], -1)
        setPlayerStorageValue(cid, stor[2], -1)
        doRemoveCondition(cid, CONDITION_OUTFIT)
        doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
        doSendMagicEffect(fromPos, CONST_ME_TELEPORT)
    else
        doTeleportThing(cid, fromPos, true)
        doSendMagicEffect(fromPos, CONST_ME_POFF)
        doPlayerSendCancel(cid, "Você não está morto para entrar no portal.")
    end
    return true
end




Tag:

<movevent type="StepIn" actionid="ACTIONID" event="script" value="zombieportal.lua"/>

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

&nbsp;

Boa noite.

O script ficou assim...

Em CreatureScripts, o arquivo creaturescripts.xml adicione as seguintes tags:

&lt;event type="preparedeath" name="Morto" event="script" value="posmorte.lua"/&gt;	&lt;event type="login" name="MortoSeg" event="script" value="posmorte.lua"/&gt;
Dentro da pasta scripts da referida acima, em login.lua adicione as tags abaixo junto com as outras do gênero:

registerCreatureEvent(cid, "Morto")registerCreatureEvent(cid, "MortoSeg")
Agora crie um arquivo com o nome "posmorte.lua" e adicione o script dentro:

-------- CONFIGURAÇÕES --------local morto = {lookType = 48} -- lookTypelocal cemitery = {x=177, y=168, z=7} -- Coordenada do Cemitériolocal strg, strg2 = 12128, 12129 -- Storage Salva que é Fantasma, Storage de Controle---- FIM DAS CONFIGURAÇÕES ----local condition_outfit = createConditionObject(CONDITION_OUTFIT)setConditionParam(condition_outfit, CONDITION_PARAM_OUTFIT, true)setConditionParam(condition_outfit, CONDITION_PARAM_TICKS, -1)addOutfitCondition(condition_outfit, morto)function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)	if isPlayer(cid) then		setPlayerStorageValue(cid, strg, 1)		setPlayerStorageValue(cid, strg2, -1)	endreturn trueendfunction onLogin(cid)	if getPlayerStorageValue(cid, strg2) &lt; 1 then		if getPlayerStorageValue(cid, strg) &gt;= 1 then			setPlayerStorageValue(cid, strg2, 1)			doAddCondition(cid, condition_outfit)			doTeleportThing(cid, cemitery)			doPlayerSendTextMessage(cid, 4, "Agora és um fantasma.")		end	else		doPlayerSendTextMessage(cid, 4, "Ainda és um fantasma.")		doAddCondition(cid, condition_outfit)	endreturn trueend
Certo, agora em Actions, abra o actions.xml e adicione a tag do item que ressuscitará o player, ficará tipo isso:

&lt;action itemid="ID_DO_ITEM" script="reviver.lua"/&gt;
E o arquivo "reviver.lua" ficará assim:

-------- CONFIGURAÇÕES --------local morto = {lookType = 48} -- lookTypelocal strg, strg2 = 12128, 12129 -- Storage Salva que é Fantasma, Storage de Controle---- FIM DAS CONFIGURAÇÕES ----function onUse(cid, item, frompos, item2, topos)	if getPlayerStorageValue(cid, strg) &gt;= 1 or getPlayerStorageValue(cid, strg2) &gt;= 1 then		setPlayerStorageValue(cid, strg, -1)		setPlayerStorageValue(cid, strg2, -1)		doRemoveItem(item.uid, 1)		doRemoveCondition(cid, CONDITION_OUTFIT)		doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))	else		doPlayerSendCancel(cid, "Você não está morto para usar este item.")	endreturn trueend
Testei e funcionou perfeitamente.

Caso haja bugs, favor relatar.

Boa sorte.

&nbsp;

Mais isso ?

Link para o post
Compartilhar em outros sites
Mais isso ?

 

Adicione os creature events, é o que determinará um player como sendo um "zombie".

Já a outra parte, você decide como vai querer que o player retorne a forma "humana". Daí fica a seu critério se será por uma action (item/alavanca) ou por um movement (portal/tile); basta adicionar o script referente a sua escolha.

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

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

E tem como coloca para quem puxa essa alavanca ganha automaticamente um AOL, alem de ir pro templo ? Minha Ideia: Opção apos a morte: 1- Entra direto no tp que leva pro templo ou 2- Escolhe entre varias alavanca e se acerta, ele ja volta pro templo com aol no lugar ! Entendeu ? Será que existe possibilidade de fazer isso ?

Link para o post
Compartilhar em outros sites
E tem como coloca para quem puxa essa alavanca ganha automaticamente um AOL, alem de ir pro templo ?

 

zombielever.lua (data/actions/scripts):

local t = {
    item = {2173, 1}, -- {itemID, quantidade)
    stor = {12128, 12129} -- {zombie storage, human storage}
}

function onUse(cid, item, fromPos, toPos)
    if getPlayerStorageValue(cid, t.stor[1]) > 0 or getPlayerStorageValue(cid, t.stor[2]) > 0 then
        doPlayerAddItem(cid, t.item[1], t.item[2])
        setPlayerStorageValue(cid, t.stor[1], -1)
        setPlayerStorageValue(cid, t.stor[2], -1)
        doRemoveCondition(cid, CONDITION_OUTFIT)
        doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
        doSendMagicEffect(toPos, CONST_ME_TELEPORT)
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You were revived! Now you are a human again.')
    else
        doSendMagicEffect(fromPos, CONST_ME_POFF)
        doPlayerSendCancel(cid, "Only zombies can use this lever.")
    end
    return true
end

Tag - actions.xml (data/actions):

<action actionid="ACTIONID" script="zombielever.lua"/>
Editado por Suicide (veja o histórico de edições)

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

@Suicide:

Nesta parte do código, não li direito o que fez no script, mas vi que definiu como "Zombie Storage, Human Storage", mas no meu script isso não é necessariamente a storage de humano, a segunda eu criei para controlar se o cara permanece zombie para não ficar dando Loop de ficar retornando ao cemitério toda vez que logar enquanto ainda é "fantasma".

stor = {12128, 12129} -- {zombie storage, human storage}

 

@Topic:

Desculpe a má formatação da postagem, mas é que quando estava postando o painel de postagem ficou no modo simples e sem botões, sem opções de cores, etc.

A versão que usei para testar este script também é 8.6, então provavelmente irá funcionar.

 

Boa sorte ao dono do tópico e obrigado pelo suporte Suicide, pois estou um pouco corrido com compromissos aqui.

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

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites

mas vi que definiu como "Zombie Storage, Human Storage", mas no meu script isso não é necessariamente a storage de humano, a segunda eu criei para controlar se o cara permanece zombie para não ficar dando Loop de ficar retornando ao cemitério toda vez que logar enquanto ainda é "fantasma".


Sim, exatamente. Zombie storage seria quando ele estivesse na condição, já human storage, a que ele retorna ao "controle" do outfit do personagem.
Foi apenas uma descrição, relaxa, as funções não se alteraram e tudo coincide com os seus códigos ;]

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

Sim, exatamente. Zombie storage seria quando ele estivesse na condição, já human storage, a que ele retorna ao "controle" do outfit do personagem.

Foi apenas uma descrição, relaxa, as funções não se alteraram e tudo coincide com os seus códigos ;]

Perfeito, é que imaginei que tivesse confundido o porquê inventei aquela storage, então fora isso está tudo perfeito.

 

Abraços e obrigado pelo suporte.

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites

Perfeito, é que imaginei que tivesse confundido o porquê inventei aquela storage, então fora isso está tudo perfeito. Abraços e obrigado pelo suporte.


Disponha, meu caro amigo.
Abraços.

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

zombielever.lua (data/actions/scripts):

local t = {
	percent = 15, -- porcentagem de ser teleportado com o item
	item = {2173, 1}, -- {itemID, quantidade)
	stor = {12128, 12129} -- {zombie storage, human storage}
}

function onUse(cid, item)
	if getPlayerStorageValue(cid, t.stor[1]) > 0 or getPlayerStorageValue(cid, t.stor[2]) > 0 then
		if math.random(100) <= t.percent then
			doPlayerAddItem(cid, t.item[1], t.item[2])
			setPlayerStorageValue(cid, t.stor[1], -1)
			setPlayerStorageValue(cid, t.stor[2], -1)
			doRemoveCondition(cid, CONDITION_OUTFIT)
			doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
			doSendMagicEffect(fromPos, CONST_ME_TELEPORT)
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You were a lucky zombie, eventually earning an amulet of loss.')
		else
			setPlayerStorageValue(cid, t.stor[1], -1)
			setPlayerStorageValue(cid, t.stor[2], -1)
			doRemoveCondition(cid, CONDITION_OUTFIT)
			doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
			doSendMagicEffect(fromPos, CONST_ME_TELEPORT)
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You were revived! Now you are a human again.')
		end
	else
		doSendMagicEffect(fromPos, CONST_ME_POFF)
		doPlayerSendCancel(cid, "Only zombies can use this lever.")
	end
	return true
end

Tag - actions.xml (data/actions):

<action actionid="ACTIONID" script="zombielever.lua"/>

Parceiro, tem 2 problemas: 

 

1° - A sua scripts esta somente dando o AOL na primeira vez de morte, dai por dianta nao da mais o AOL, e eu queria sempre que o player puxasse a alavanca obtesse um AOL !

 

 

2° - Esta dando esse erro no meu distro:

 

[14/12/2014 14:43:24] [Error - Action Interface] 
[14/12/2014 14:43:24] data/actions/scripts/zombielever.lua:onUse
[14/12/2014 14:43:24] Description: 
[14/12/2014 14:43:24] attempt to index a nil value
[14/12/2014 14:43:24] stack traceback:
[14/12/2014 14:43:24] [C]: in function 'doSendMagicEffect'
[14/12/2014 14:43:24] data/actions/scripts/zombielever.lua:15: in function <data/actions/scripts/zombielever.lua:7>
[14/12/2014 14:43:55] Sub Kina has logged out.
[14/12/2014 14:43:57] [Warning - Vocations::getVocation] Vocation 4294967295 not found.
[14/12/2014 14:43:57] [Warning - Vocations::getVocation] Vocation 4294967295 not found.
[14/12/2014 14:43:57] [Warning - Vocations::getVocation] Vocation 4294967295 not found.

 

Teria como arruma porfavor ^^

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

Parceiro, tem 2 problemas: 

 

1° - A sua scripts esta somente dando o AOL na primeira vez de morte, dai por dianta nao da mais o AOL, e eu queria sempre que o player puxasse a alavanca obtesse um AOL !

 

 

2° - Esta dando esse erro no meu distro:

 

Teria como arruma porfavor ^^

 

Ah, me desculpe. Eu acabei lendo errado e entendi que você queria que houvesse uma certa possibilidade do player receber um amulet of loss ao puxar a alavanca.

Enfim, já ajustei. Falha minha, faltou um parâmetro:

local t = {
    item = {2173, 1}, -- {itemID, quantidade)
    stor = {12128, 12129} -- {zombie storage, human storage}
}

function onUse(cid, item, fromPos, toPos)
    if getPlayerStorageValue(cid, t.stor[1]) > 0 or getPlayerStorageValue(cid, t.stor[2]) > 0 then
        doPlayerAddItem(cid, t.item[1], t.item[2])
        setPlayerStorageValue(cid, t.stor[1], -1)
        setPlayerStorageValue(cid, t.stor[2], -1)
        doRemoveCondition(cid, CONDITION_OUTFIT)
        doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
        doSendMagicEffect(toPos, CONST_ME_TELEPORT)
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You were revived! Now you are a human again.')
    else
        doSendMagicEffect(fromPos, CONST_ME_POFF)
        doPlayerSendCancel(cid, "Only zombies can use this lever.")
    end
    return true
end

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

e sobre os erros do distro, e normal?

 

 

Enfim, já ajustei. Falha minha, faltou um parâmetro

The corrupt fear us.

The honest support us.

The heroic join us.

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.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo