Federico Cecchetto dc150bb940 Initial commit
2021-05-29 22:07:08 +02:00
2021-05-29 22:07:08 +02:00
2021-05-29 22:07:08 +02:00
2021-05-29 22:07:08 +02:00
2021-05-29 22:07:08 +02:00
2021-05-29 22:07:08 +02:00
2021-05-29 22:07:08 +02:00
2021-05-29 22:07:08 +02:00
2021-05-29 22:07:08 +02:00
2021-05-29 22:07:08 +02:00

iw5-script

Lua scripting support for Plutonium IW5

Works the same as it does in IW6x

How

  • Download the latest version from the Releases tab
  • Copy it to %localappdata%/Plutonium/storage/iw5/plugins/
  • Create a __init__.lua file in a folder with a name of your choice in %localappdata%/Plutonium/storage/iw5/scripts/
  • Example %localappdata%/Plutonium/storage/iw5/scripts/myscript/__init__.lua
  • Run the server (preferably with the -no-scripting flag to disable ChaiScript)

Below are some features that are not available or documented in IW6x

Chat notifies

level:onnotify("say", function(player, message)
    print(player.name .. " said: " .. message)
end)

or

level:onnotify("connected", function(player)
    player:onnotify("say", function(message)
        print(player.name .. " said: " .. message)
    end)
end)

Player damage/killed callbacks

Callbacks can be added using the game:onplayerkilled or game:onplayerdamage functions:

Damage can be changed by returning it

Returning anything other than a number will not do anything (must be an integer)

game:onplayerdamage(function(_self, inflictor, attacker, damage, dflags, mod, weapon, point, dir, hitloc)
    damage = 0

    return damage
end)
game:onplayerkilled(function(_self, inflictor, attacker, damage, mod, weapon, dir, hitloc, timeoffset, deathanimduration)
    print(attacker.name .. " killed " .. _self.name)
end)

Arrays

GSC arrays are supported and can be accessed similarly to gsc:

local ents = game:getentarray()

for i = 1, #ents do
    print(ents[i])
end

Structs

GSC structs are also supported similarly as the arrays.

To get an entity's struct use the getstruct method:

local levelstruct = level:getstruct()

levelstruct.inGracePeriod = 10000

Structs in other variables like arrays are automatically converted:

level:onnotify("connected", function(player)
    player:onnotify("spawned_player", function()
        player.pers.killstreaks[1].streakName = "ac130"
        player.pers.killstreaks[1].available = 1
    end)
end)

Note: you cannot create new struct fields but only modify or read existing ones, same thing for arrays

Functions

You can call (will not work for every function) functions and methods within the game's gsc scripts using the

scriptcall(filename, function, ...) method:

level:onnotify("connected", function(player)
    player:onnotify("spawned_player", function()
        local hudelem = player:scriptcall("maps/mp/gametypes/_hud_utils", "createFontString", 1)
        
        hudelem:scriptcall("maps/mp/gametypes/_hud_util", "setPoint", "CENTER", nil, 100, 100)
        hudelem.label = "&Hello world"
    end)
end)

Functions in variables such as structs or arrays will be automatically converted to a lua function.

The first argument must always be the entity to call the function on (level, player...)

local levelstruct = level:getstruct()

level:onnotify("connected", function(player)
    player:onnotify("spawned_player", function()
        levelstruct.killstreakFuncs["ac130"](player)
    end)
end)
Description
No description provided
Readme 1.8 MiB
Languages
C++ 98.7%
Lua 1.2%