Ir para conteúdo

Featured Replies

Postado
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)

  • Respostas 11
  • Visualizações 821
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • 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 fique

  • .       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

  • Na pasta mods mesmo, sugiro pegar um mod de modelo, eu mesmo nunca fiz / precisei fazer, porém é simples, veja:   Só usar assim na função regen: function regen(cid) if not(isCrea

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo