Ir para conteúdo

Featured Replies

Postado

Informações

  • Sistema disponibilizado e atualizado por hellboy.
  • Para TFS 0.3.6, 0.4 e 1.0: Clique nesse tópico.
  • Basicamente é a mesma função.
  • Adicionado no sistema: lista de players ignorados.

Instalando

data/lib/hunger.lua

-- Hunger System by Kronos
-- version="1.2"
-- author Hellboy aka Kronos (idea Nandonalt)

-- CONFIG

hungerConfig = {
 FIRST_LOGIN = -1,

 storageStage = 3636,
 storageOnDeathFeed = 3637,
 storageDmgAndCheckTicks = 3638,

 dmgAmount = 1,
 dmgAndCheckTicks = 5,
 newPlayerFeed = 30,

 ignore = {
  "Account Manager"
 },

 stages = {
  [1] = {minFeed = 15, msg = "You will die if you don't eat something."},
  [2] = {minFeed = 90, msg = "You are very hungry."},
  [3] = {minFeed = 200, msg = "You are hungry."},
  [4] = {minFeed = 395, msg = "You can eat something."},
  [5] = {minFeed = 400, msg = "You are full."}
 }
}

-- /CONFIG

function Player.hungerIgnorePlayer(self)
 return isInArray(hungerConfig.ignore, self:getName())
end

function Player.hungerGetFeed(self)
 local feedCondition = self:getCondition(CONDITION_REGENERATION, CONDITIONID_DEFAULT)
 if feedCondition then
  return math.floor(feedCondition:getTicks() / 1000)
 end
 return 0
end

function Player.hungerGetFeedStorage(self)
 return self:getStorageValue(hungerConfig.storageOnDeathFeed)
end

function Player.hungerSetFeedStorage(self, value)
 self:setStorageValue(hungerConfig.storageOnDeathFeed, value)
end

function Player.hungerGetStage(self)
 return self:getStorageValue(hungerConfig.storageStage)
end

function Player.hungerSetStage(self)
 local feed = self:hungerGetFeed()
 local tmpStage = 0
 for stageNumber, stageInfo in ipairs(hungerConfig.stages) do
  tmpStage = stageNumber
  if stageInfo.minFeed >= feed then
   break
  end
 end
 self:setStorageValue(hungerConfig.storageStage, tmpStage)
end

function Player.hungerGetStageMsg(self)
 local stageId = self:getStorageValue(hungerConfig.storageStage)
 return hungerConfig.stages[stageId].msg
end

function Player.hungerDoDmg(self)
 self:addHealth(-hungerConfig.dmgAmount)
 return true
end

Adicione em data/lib/lib.lua

dofile('data/lib/hunger.lua')

data/creaturescripts/scripts/hunger.lua

function onLogin(player)
 if player:hungerIgnorePlayer() then
  return true
 end

 local value = player:hungerGetFeedStorage()
 if value > 0 then
  player:feed(value)
 elseif value == hungerConfig.FIRST_LOGIN then
  player:feed(hungerConfig.newPlayerFeed)
 end

 player:hungerSetFeedStorage(0)
 player:setStorageValue(hungerConfig.storageDmgAndCheckTicks, 0)

 player:registerEvent("HungerDeath")
 player:registerEvent("Hunger")

 player:hungerSetStage()
 local msg = player:hungerGetStageMsg()
 player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, msg)
 return true
end

function onThink(player, interval)

 local counter = (player:getStorageValue(hungerConfig.storageDmgAndCheckTicks) +1) % hungerConfig.dmgAndCheckTicks
 if counter == 0 then
  -- status changed ? send msg : do nothing
  local stage = player:hungerGetStage()
  player:hungerSetStage()
  local newStage = player:hungerGetStage()
  
  if stage ~= newStage then
   local msg = player:hungerGetStageMsg()
   player:sendTextMessage(MESSAGE_STATUS_DEFAULT, msg)
  end
  
  if player:hungerGetFeed() == 0 then
   player:hungerDoDmg()
  end
 end

 player:setStorageValue(hungerConfig.storageDmgAndCheckTicks, counter)
 return true
end

function onDeath(player, corpse, killer, mostDamageKiller, unjustified, mostDamageUnjustified)
 local feedLvl = player:hungerGetFeed()
 if feedLvl < hungerConfig.newPlayerFeed then
  player:hungerSetFeedStorage(hungerConfig.newPlayerFeed)
 else
  player:hungerSetFeedStorage(feedLvl)
 end
 return true
end

Adicione em data/creaturescripts/creaturescripts.xml

<event type="login" name="HungerLogin" script="hunger.lua" />
<event type="death" name="HungerDeath" script="hunger.lua" />
<event type="think" name="Hunger" script="hunger.lua" />

data/talkactions/scripts/hunger.lua

function onSay(player, words, param)
 local msg = player:hungerGetStageMsg()
 player:sendTextMessage(MESSAGE_STATUS_DEFAULT, msg)
 return true
end

Adicione em data/talkactions/talkactions.xml

<talkaction words="/hunger" script="hunger.lua" />
  • Dúvidas ou problemas, poste no tópico!  :rock: 

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

  • 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

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