hulksmash.lua

--[[

For this example, we will be creating the following
custom perk:

Hulk Smash!

Requirements: Level 16, EN 5, Doctor 50%

Perk Levels: 1

Description: Being radiated makes you very angry.
Gain +2 Strength and +75 Radiation Resistance when
in a radiated area.

--]]

-- OnStart hook function
function OnStart ()
    -- We create the new perk by using the hookexecutor:ReplacePerk
    -- function at game startup.
    newperk = {name = "hulkSmash",
               minlevel = 16,
               maxperktaken = 1,
               requiredstat1 = "doctor",
               requiredamt1 = 50,
               requiredEN = 5
              }
    -- We replace unused perk 18, "fortuneFinder"
    hookexecutor:ReplacePerk(newperk, 18)
end

-- OnLocaleLoad hook function
function OnLocaleLoad()
  -- Locale strings can either be added directly to the game's .txt
  -- files, or included in the OnLocaleLoad function. Here, we
  -- define the name and description strings for our new perk.
  -- Use hookexecutor:AddLocaleString to add the strings.
  hookexecutor:AddLocaleString("name_hulkSmash","Hulk Smash!")
  hookexecutor:AddLocaleString("desc_hulkSmash","Being radiated makes you very angry. Gain +2 Strength and +75 Radiation Resistance when in a radiated area.")
end

-- OnRadiated hook function
function OnRadiated(e)
    -- OnRadiated was defined as a trigger specifically for this perk
    -- example. This is called anytime an actor has its radiation
    -- counter increased.

    -- Check if the actor has the perk using Actor:GetAttribute
    if e:GetAttribute("hulkSmash", ACTOR_TABLE_CURRENT) then
      -- The Fallout Tactics engine does not use the temporary modifier
      -- values for traits or perks. We can use these to store variables
      -- that should be saved with the entity.
      -- Here, we save a counter indicating if the bonus has already
      -- been applied, and how long that bonus should persist.
      if e:GetAttribute("hulkSmash", ACTOR_TABLE_TEMPORARY) == 0 then
        -- Actor has the perk but not the bonus yet, apply it

        -- For debugging purposes, we can log a message to FTSE.log using logger:log
        logger:log(e:GetName() .. " gains hulkSmash")
        -- Give a visual indication to the player - text above the
        -- character's head, using Actor:DisplayMessage:
        e:DisplayMessage("<Cg>HULK SMASH!")
        -- Apply the bonus. The second parameter to ApplyBonus
        -- indicates if the bonus is temporary (false) or permanent (true)
        bonus = {strength=2, radiationResist=75}
        e:ApplyBonus(bonus,false)
      end
      -- Set the variable indicating the bonus is applied, and set or
      -- refresh its value to 6 (60 seconds - see OnLongTick below)
	  -- Use Actor:SetAttribute:
      e:SetAttribute("hulkSmash",ACTOR_TABLE_TEMPORARY,6)
    end
end

-- Hooks:OnLongTick hook function
function OnLongTick(e)
  -- This is called for every actor, every 10 seconds of game time
  -- Check if character has the Hulk Smash bonus applied
  curr = e:GetAttribute("hulkSmash",ACTOR_TABLE_TEMPORARY)
  if curr > 0 then
    -- The bonus is applied. Reduce the counter by 1
    curr = curr - 1
    if curr == 0 then
      -- The counter has expired, remove the bonus
      logger:log(e:GetName() .. " hulkSmash expired")
      -- Indicate to the player
      e:DisplayMessage("Normal")
      -- Remove the bonus
      bonus = {strength=2, radiationResist=75}
      e:RemoveBonus(bonus,false)
    end
    -- Update the counter with the new value
    e:SetAttribute("hulkSmash",ACTOR_TABLE_TEMPORARY,curr)
  end
end
generated by LDoc 1.4.6 Last updated 2021-05-07 19:14:47