diff --git a/README.md b/README.md index 4781ba2..8b13789 100644 --- a/README.md +++ b/README.md @@ -1,111 +1 @@ -# iw5-script -Lua scripting support for Plutonium IW5 - -Works the same as it does in [IW6x](https://github.com/XLabsProject/iw6x-client/wiki/Scripting) - -# 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 -```lua -level:onnotify("say", function(player, message) - print(player.name .. " said: " .. message) -end) -``` -or -```lua -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) - -```lua -game:onplayerdamage(function(_self, inflictor, attacker, damage, dflags, mod, weapon, point, dir, hitloc) - damage = 0 - - return damage -end) -``` -```lua -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: -```lua -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: -```lua -local levelstruct = level:getstruct() - -levelstruct.inGracePeriod = 10000 -``` -Structs in other variables like arrays are automatically converted: -```lua -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: -```lua -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...) -```lua -local levelstruct = level:getstruct() - -level:onnotify("connected", function(player) - player:onnotify("spawned_player", function() - levelstruct.killstreakFuncs["ac130"](player) - end) -end) -```