Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Sistema de Rest / Descansar
 
Yo galera, esse e meu segundo sistema criado por mim, e embora tenha alguns parecidos, o meu ficou um pouco diferente.
 
Porem ainda possui muitos bugs, no qual eu fiquei no meu trabalho, e depois 1 dia inteiro tentando resolver, antes de vir pedir ajuda, pesquisei, e tentei resolver de varias maneiras, ajudem-me a concertar esses bugs, e será mais 1 sistema pra comunidade, e dessa vez util. :)
 
O que o sistema faz:
 
  • Ao dar use em 1 item( no caso da pra fazer algum botão) , o char começa dormir e regenerar sua vida em uma porcentagem(de facil edição).
  •  
  • Apos o uso, o item se transforma para o item que vai fazer voce se levantar e parar de se regenerar.

2r70vpf.png

Ps:
  1. Não é possivel usar em batalha, para não atacar enquanto heala :)
  2. Não é possivel deslogar se estiver usando o Rest.

Infelizmente de tanto eu tentar modificar para funcionar(modificando o que eu fiz, o sistema eu começei do 0), pode ter algum erro a mais.. porem, vai la o que pode ser adicionado e arrumado.

 

BUGS

 

  1. Se estiver no rest, e por acaso alguem te atacar, voce até sai do rest, e da Up, porem ele continua a heala, e mostrar o efeito de Sleep.
  2. Caso morra, no rest, o item(icone), não é trocado, e assim quando relogar, não será possivel dar rest, ja que vai estar o item do Up.

Possiveis Melhorias

 

  1. Ao healar tudo a vida, fazer o rest parar, e dar Up, setando as storages e modificando o item(icone) up > down(rest) .
  2. Ajudem na imaginação :)
  3. Criar alguma caixa - linkando o otclient com o item de Up/Down(rest/up)

 

Agora os codigos . Sever 0.3.6pl1.  rev 8.54

 

Actions

 

Botao Down(Rest)

local config = 
{
tempo = 3, --- Cdr para poder descansar 
storagetempo = 20011,
percentage = 0.05,
regenpersec = 3000
}

function onUse(cid, item, frompos, topos)
if getCreatureCondition(cid, CONDITION_INFIGHT) == true then
return doPlayerSendCancel(cid, "Voce nao pode descansar em batalha.") and false
end
if os.time() - getPlayerStorageValue(cid, 20011) >= config.tempo then
if getPlayerStorageValue(cid, 20010) == -1 then

doCreatureSetNoMove(cid, true)
doCreatureSay(cid,"Descansar!!!", TALKTYPE_ORANGE_1)
setPlayerStorageValue(cid, 20010, 1)
setPlayerStorageValue(cid, 20012, os.time() + 0)
doTransformItem(item.uid, 11389)
regen(cid)
  if(getPlayerSex(cid) == 1)then
  doSetItemOutfit(cid, 2317, -1)
  else
  doSetItemOutfit(cid, 3065, -1)
  end
  
end
else
doPlayerSendCancel(cid, "Voce tem que esperar "..(config.tempo - (os.time() - getPlayerStorageValue(cid, 20011))).." seconds para descansar novamente.")
end
return true
end


function regen(cid)
if not(isCreature(cid)) then
return false
end
addEvent(doCreatureAddHealth, 2000, cid, getCreatureMaxHealth(cid)*config.percentage)
addEvent(doSendMagicEffect, 500,getCreaturePosition(cid), 32)
regenvar = addEvent(regen, config.regenpersec, cid) ---Hp Healado a cada 3 segundos.
end 

 

 

Botao Up(Acordar)

local config =
{
tempo = 3
}


function onUse(cid, item, frompos, topos)
if os.time() - getPlayerStorageValue(cid, 20012) >= config.tempo then
if getPlayerStorageValue(cid, 20010) == 1 then

doCreatureSetNoMove(cid, false)
doCreatureSay(cid,"Go Up!!!", TALKTYPE_ORANGE_1)
stopEvent(regenvar)
setPlayerStorageValue(cid, 20010, 2)
setPlayerStorageValue(cid, 20011, os.time() + 0)
doTransformItem(item.uid, 11388)
addEvent(setPlayerStorageValue, 3000, cid, 20010, -1)
  doRemoveCondition(cid, CONDITION_OUTFIT)

end
else
doPlayerSendCancel(cid, "Voce tem que esperar "..(config.tempo - (os.time() - getPlayerStorageValue(cid, 20012))).." seconds para levantar .")
end
return true
end 

 

Creature Scripts

 

Sistema para nao atacar enquanto no rest

function onCombat(cid, target)
	if isPlayer(target) or isMonster(target) then
		if getPlayerStorageValue(cid, 20010) == 1 then
		doPlayerSendCancel(cid, "You can't attack while in sleep mode.")
		return false
		end
	end
	return true
end 

 

Sistema para não deslogar no rest

function onLogout(cid)
		if getPlayerStorageValue(cid, 20010) == 1 then
		return doPlayerSendCancel(cid, "You can't logout while in rest mode.") and false
		end
	return true
end 

 

Sistema para levantar quando entrar em batalha( Aqui onde encontra alguns erros, que não consegui resolver)

function onStatsChange(cid, attacker, type, combat, value)
		
	if isMonster(attacker) or isPlayer(attacker) then	
	if getPlayerStorageValue(cid, 20010) == 1 then
		stopEvent(regenvar)
		doRemoveCondition(cid, CONDITION_OUTFIT)
		doCreatureSetNoMove(cid, false)
		doCreatureSay(cid,"!!!", TALKTYPE_ORANGE_2)
		
		setPlayerStorageValue(cid, 20010, -1)
		setPlayerStorageValue(cid, 20011, os.time() + 0)

	end	
	end
		
	return true
end 

 

Tags

	creaturescript.xml
        <event type="statschange" name="BattleUp" event="script" value="battleup.lua"/>
	<event type="combat" name="noAttack" event="script" value="noattack.lua"/>
	<event type="logout" name="Logoutrest" event="script" value="logoutrest.lua"/>

        login.lua
        registerCreatureEvent(cid, "BattleUp")
	registerCreatureEvent(cid, "Logoutrest")
	registerCreatureEvent(cid, "noAttack")

        actions.xml
        <action itemid="11388" event="script" value="restdown.lua"/>
	<action itemid="11389" event="script" value="restup.lua"/>

 

Isso ae galera, quem puder ajudar, agradeço desde já, não sei se errei demais, ou se não vão gostar,  porem aprendi muito tentando :) , e pretendo aprender mais arrumando e resolvendo.

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

O tópico foi movido para a área correta, preste mais atenção da próxima vez!

Leia as regras do fórum: http://tibiaking.com/forum/topic/1281-regras-gerais/?p=7680

Este tópico foi movido:

De: "OTServSuporte OTServSuporte de Scripts"

Para: "OTServAprovação de Tópicos de Conteúdos"

                              _
                          .-'` `}
                  _./)   /       }
                .'o   \ |       }
                '.___.'`.\    {`
                /`\_/  , `.    }                                      ME DA UMA NOZ!
                \=' .-'   _`\  {
                 `'`;/      `,  }
                    _\   @   ;  }
                   /__`;-...'--'

Cluck!

Link para o post
Compartilhar em outros sites

.


 

 

​Se estiver no rest, e por acaso alguem te atacar, voce até sai do rest, e da Up, porem ele continua a heala, e mostrar o efeito de Sleep.

 

Isso ocorre por que a variável global só funciona na pasta de onde ela está, recomendo colocar na pasta mods o sistema inteiro, já resolveria o problema e não precisaria criar uma lib ou algo parecido.

 

 

 

Caso morra, no rest, o item(icone), não é trocado, e assim quando relogar, não será possivel dar rest, ja que vai estar o item do Up.

 

Isso é só você fazer o onDeath que checaria se o player tem determinado item (o de up) e remover e adicionar o de rest...

 

 

 

Ao healar tudo a vida, fazer o rest parar, e dar Up, setando as storages e modificando o item(icone) up > down(rest) .

 

Só fazer uma verificação como esta:

if getCreatureMaxHealth(cid) == getCreatureHealth(cid) then

Coisas que fazem o player deixar de estar em estado de resting.

end 

toda hora que healasse um pouco de vida...


O tópico foi movido para a área correta, preste mais atenção da próxima vez!
Leia as regras do fórum: http://tibiaking.com/forum/topic/1281-regras-gerais/?p=7680

Este tópico foi movido:
De: "OTServSuporte OTServSuporte de Scripts"
Para: "OTServAprovação de Tópicos de Conteúdos"

 

 

Ele estava na seção correta  :facepalm:

tópico movido novamente...

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

 

 

Ele estava na seção correta   :facepalm:

tópico movido novamente...

 

Hehe, ty.

 

Em, relação aos outros bugs, vou tentar consertar aqui, eu tinha a pasta mod, porem excluir, no caso, onde eu registro o script para que funcione da pasta mod, inves da actions?

Ou ponho na actions mesmo, so que com o endereço arrumado '-' .

 

Sobre parar de healar , quando estiver full, esta verificação ponho antes de executar o script? , eu ja tentei fazer essa verificação quando entra em battle, mas acho que nao sei ao certo, onde criar.

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

Em, relação aos outros bugs, vou tentar consertar aqui, eu tinha a pasta mod, porem excluir, no caso, onde eu registro o script para que funcione da pasta mod, inves da actions? Ou ponho na actions mesmo, so que com o endereço arrumado '-' .

 

Na pasta mods mesmo, sugiro pegar um mod de modelo, eu mesmo nunca fiz / precisei fazer, porém é simples, veja:

 

<?xml version="1.0" encoding="UTF-8"?>
<mod name="First Items" version="1.0" author="The Forgotten Server" contact="otland.net" enabled="yes">
<config name="firstitems_config"><![CDATA[
config = {
storage = 30001,
items = {2050, 2382}
}
]]></config>
<event type="login" name="FirstItems" event="buffer"><![CDATA[
domodlib('firstitems_config')
if(getPlayerStorageValue(cid, config.storage) > 0) then
return
end
 
for _, id in ipairs(config.items) do
doPlayerAddItem(cid, id, 1)
end
 
if(getPlayerSex(cid) == PLAYERSEX_FEMALE) then
doPlayerAddItem(cid, 2651, 1)
else
doPlayerAddItem(cid, 2650, 1)
end
 
doAddContainerItem(doPlayerAddItem(cid, 1987, 1), 2674, 1)
setPlayerStorageValue(cid, config.storage, 1)
]]></event>
</mod>

Sobre parar de healar , quando estiver full, esta verificação ponho antes de executar o script? , eu ja tentei fazer essa verificação quando entra em battle, mas acho que nao sei ao certo, onde criar.

 

Só usar assim na função regen:

function regen(cid)
   if not(isCreature(cid)) and ( getCreatureMaxHealth(cid) == getCreatureHealth(cid) ) then
 return false
end
 addEvent(doCreatureAddHealth, 2000, cid, getCreatureMaxHealth(cid)*config.percentage)
 addEvent(doSendMagicEffect, 500,getCreaturePosition(cid), 32)
 regenvar = addEvent(regen, config.regenpersec, cid) ---Hp Healado a cada 3 segundos.
end 

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

 

 

Só usar assim na função regen:

function regen(cid)
   if not(isCreature(cid)) and ( getCreatureMaxHealth(cid) == getCreatureHealth(cid) ) then
 return false
end
 addEvent(doCreatureAddHealth, 2000, cid, getCreatureMaxHealth(cid)*config.percentage)
 addEvent(doSendMagicEffect, 500,getCreaturePosition(cid), 32)
 regenvar = addEvent(regen, config.regenpersec, cid) ---Hp Healado a cada 3 segundos.
end 

Obrigado , vou agora corrigir os bugs, poxa, verdade, o regen é um addEvent, e ele vai ter que voltar pra healar dnv, e fazer outra verificação. :) , vou tentar fazer alem de parar, fazer ele se levantar, posto aqui assim que terminar os codigos resolvidos .

Link para o post
Compartilhar em outros sites

posto aqui assim que terminar os codigos resolvidos .

 

Ta ok, no aguardo :D

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

Eu infelizmente ainda não consegui arrumar os bugs :(

O que me passou para parar o regen, não deu certo.

Unica coisa que consegui foi nao deixar ele healar com vida cheia e mostrar msg de erro e cancelar.

Ainda não criei o mod, amanha/hoje cedo volto nos estudos e crio o mod e tento arrumar os erros. So vou trampar fim de semana msm haha '-'.


Eu tentei algumas maneiras aqui e não consegui arrumar ainda.

Coloquei o sistema no mod, certinho, funcionando ok :)  e consegui fazer ele parar de healar e se levantar, porem quando tenta se healar denovo, o sever trava.

 

Dei uma reformulada no script down e up, tirando 1 storage desnecessario e deixando o menor e mais facil de entender.

Agora so falta , descobrir por que esta dando crash .

 

Down

local config =
{
tempo = 3,
storagetempo = 20011,
percentage = 0.05,
regenpersec = 3000
}

function onUse(cid, item, frompos, topos)

if getCreatureCondition(cid, CONDITION_INFIGHT) == true then
return doPlayerSendCancel(cid, "Voce nao pode descancar em batalha")
end
if getCreatureMaxHealth(cid) == getCreatureHealth(cid) then
return doPlayerSendCancel(cid, "Voce esta com a vida cheia!")
end
if os.time() - getPlayerStorageValue(cid, 20011) <= config.tempo then
return doPlayerSendCancel(cid, "Voce tem que esperar "..(config.tempo - (os.time() - getPlayerStorageValue(cid, 20011))).." seconds para descancar novamente.")
end

regen(cid)
doCreatureSetNoMove(cid, true)
doCreatureSay(cid, "Descancar  ", TALKTYPE_ORANGE_1)
setPlayerStorageValue(cid, 20012, os.time()+0)
doTransformItem(item.uid, 11389)
if(getPlayerSex(cid) == 1) then
  doSetItemOutfit(cid, 2317, -1)
  else
  doSetItemOutfit(cid, 3065, -1)
  end
  
  return true
  end
  
 function regen(cid)
  if getCreatureMaxHealth(cid) == getCreatureHealth(cid) then
  setPlayerStorageValue(cid, 20011, os.time()+0)
  doCreatureSetNoMove(cid, false)
  doRemoveCondition(cid, CONDITION_OUTFIT)
  stopEvent(regenvar)
  doPlayerRemoveItem(cid, 11389, 1)
  doPlayerAddItem(cid, 11388, 1)
  return false
  end
  addEvent(doCreatureAddHealth, 2000, cid, getCreatureMaxHealth(cid)*config.percentage)
  addEvent(doSendMagicEffect, 500,getCreaturePosition(cid), 32)
  regenvar = addEvent(regen, config.regenpersec, cid)
  return true
end 

Up

local tempo = 3

function onUse(cid, item, frompos, topos)
if os.time() - getPlayerStorageValue(cid, 20012) <= tempo then
return doPlayerSendCancel(cid, "Voce tem que esperar "..(config.tempo - (os.time() - getPlayerStorageValue(cid, 20012))).." seconds para levantar .")
end

doCreatureSetNoMove(cid, false)
doCreatureSay(cid,"Go Up!!!", TALKTYPE_ORANGE_1)
stopEvent(regenvar)
setPlayerStorageValue(cid, 20011, os.time() + 0)
doTransformItem(item.uid, 11388)
doRemoveCondition(cid, CONDITION_OUTFIT)

return true
end 

 

Desculpe eu não conseguir resolver ainda, estou procurando aprender :\

 

 

 

Quase me esquecendo o xml do mod 

 

<?xml version = "1.0" encoding = "UTF-8"?>
<mod name = "rest" author = "Ryukiimaru" version = "1.0" enabled = "yes" contact = "[email protected]">

<action itemid="11388" event="script" value="restdown.lua"/>
<action itemid="11389" event="script" value="restup.lua"/>
<event type="statschange" name="BattleUp" event="script" value="battleup.lua"/>
<event type="combat" name="noAttack" event="script" value="noattack.lua"/>
<event type="logout" name="Logoutrest" event="script" value="logoutrest.lua"/>
<event type="preparedeath" name="restdeath" event="script" value="restdeath.lua"/>
</mod>

Editado por Ryukiimaru (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 1 year later...

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