{
  "classes": {
    "Vec2": {
      "name": "Vec2",
      "doc": "This class represents a 2d vector.",
      "side": "shared",
      "category": "Math",
      "extends": null,
      "fields": [
        {
          "name": "x",
          "type": "number",
          "doc": "Represents the X component."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Represents the Y component."
        }
      ],
      "methods": [
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a Vec2 with both components set to the same value.",
          "params": [
            {
              "name": "value",
              "type": "number",
              "doc": "Value assigned to x and y."
            }
          ],
          "returns": {
            "type": "Vec2",
            "doc": ""
          }
        },
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a Vec2 with explicit x and y components.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "X component."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Y component."
            }
          ],
          "returns": {
            "type": "Vec2",
            "doc": ""
          }
        },
        {
          "name": "len",
          "doc": "This method returns the vector length (magnitude).",
          "params": [],
          "returns": {
            "type": "number",
            "doc": "Vector length."
          }
        },
        {
          "name": "len2",
          "doc": "This method returns the squared vector length.",
          "params": [],
          "returns": {
            "type": "number",
            "doc": "Squared vector length."
          }
        },
        {
          "name": "lenApprox",
          "doc": "This method returns an approximate vector length.",
          "params": [],
          "returns": {
            "type": "number",
            "doc": "Approximate vector length."
          }
        },
        {
          "name": "distance",
          "doc": "This method returns the distance to another vector.",
          "params": [
            {
              "name": "vec",
              "type": "vec2",
              "doc": "Other vector."
            }
          ],
          "returns": {
            "type": "number",
            "doc": "Distance between vectors."
          }
        },
        {
          "name": "normalize",
          "doc": "This method normalizes the vector in-place.\nIf the vector length is zero, no change is applied.",
          "params": [],
          "returns": {
            "type": "vec2",
            "doc": "This vector (normalized)."
          }
        },
        {
          "name": "normalizeSafe",
          "doc": "This method normalizes the vector in-place using an epsilon check.\nIf the vector length is below a small threshold, no change is applied.",
          "params": [],
          "returns": {
            "type": "vec2",
            "doc": "This vector (normalized)."
          }
        },
        {
          "name": "normalizeApprox",
          "doc": "This method normalizes the vector in-place using an approximate inverse square root.",
          "params": [],
          "returns": {
            "type": "vec2",
            "doc": "This vector (normalized)."
          }
        },
        {
          "name": "set",
          "doc": "This method sets both components of the vector.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "X component."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Y component."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "isEqualEps",
          "doc": "This method compares this vector with another vector using an epsilon tolerance.",
          "params": [
            {
              "name": "vec",
              "type": "vec2",
              "doc": "Other vector."
            }
          ],
          "returns": {
            "type": "boolean",
            "doc": "True if both components are equal within epsilon."
          }
        },
        {
          "name": "abs",
          "doc": "This method returns a vector with absolute component values.",
          "params": [],
          "returns": {
            "type": "vec2",
            "doc": "Vector with abs(x) and abs(y)."
          }
        },
        {
          "name": "swap",
          "doc": "This method swaps two vectors.",
          "params": [
            {
              "name": "vec1",
              "type": "vec2",
              "doc": "First vector."
            },
            {
              "name": "vec2",
              "type": "vec2",
              "doc": "Second vector."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "min",
          "doc": "This method returns the component-wise minimum of two vectors.",
          "params": [
            {
              "name": "vec1",
              "type": "vec2",
              "doc": "First vector."
            },
            {
              "name": "vec2",
              "type": "vec2",
              "doc": "Second vector."
            }
          ],
          "returns": {
            "type": "vec2",
            "doc": "Component-wise minimum."
          }
        },
        {
          "name": "max",
          "doc": "This method returns the component-wise maximum of two vectors.",
          "params": [
            {
              "name": "vec1",
              "type": "vec2",
              "doc": "First vector."
            },
            {
              "name": "vec2",
              "type": "vec2",
              "doc": "Second vector."
            }
          ],
          "returns": {
            "type": "vec2",
            "doc": "Component-wise maximum."
          }
        },
        {
          "name": "prod",
          "doc": "This method returns the component-wise product of two vectors.",
          "params": [
            {
              "name": "vec1",
              "type": "vec2",
              "doc": "First vector."
            },
            {
              "name": "vec2",
              "type": "vec2",
              "doc": "Second vector."
            }
          ],
          "returns": {
            "type": "vec2",
            "doc": "Component-wise product."
          }
        },
        {
          "name": "dot",
          "doc": "This method returns the dot product of two vectors.",
          "params": [
            {
              "name": "vec1",
              "type": "vec2",
              "doc": "First vector."
            },
            {
              "name": "vec2",
              "type": "vec2",
              "doc": "Second vector."
            }
          ],
          "returns": {
            "type": "number",
            "doc": "Dot product."
          }
        },
        {
          "name": "lerp",
          "doc": "This method linearly interpolates between two vectors.",
          "params": [
            {
              "name": "t",
              "type": "number",
              "doc": "Interpolation factor (typically 0..1)."
            },
            {
              "name": "v1",
              "type": "vec2",
              "doc": "Start vector."
            },
            {
              "name": "v2",
              "type": "vec2",
              "doc": "End vector."
            }
          ],
          "returns": {
            "type": "vec2",
            "doc": "Interpolated vector."
          }
        }
      ],
      "callbacks": []
    },
    "Vec3": {
      "name": "Vec3",
      "doc": "This class represents a 3d vector.",
      "side": "shared",
      "category": "Math",
      "extends": null,
      "fields": [
        {
          "name": "x",
          "type": "number",
          "doc": "Represents X component."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Represents Y component."
        },
        {
          "name": "z",
          "type": "number",
          "doc": "Represents Z component."
        }
      ],
      "methods": [
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a Vec3 with all components set to the same value.",
          "params": [
            {
              "name": "value",
              "type": "number",
              "doc": "Value assigned to x, y and z."
            }
          ],
          "returns": {
            "type": "Vec3",
            "doc": ""
          }
        },
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a Vec3 with explicit x, y and z components.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "X component."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Y component."
            },
            {
              "name": "z",
              "type": "number",
              "doc": "Z component."
            }
          ],
          "returns": {
            "type": "Vec3",
            "doc": ""
          }
        },
        {
          "name": "len",
          "doc": "This method returns the vector length (magnitude).",
          "params": [],
          "returns": {
            "type": "number",
            "doc": "Vector length."
          }
        },
        {
          "name": "len2",
          "doc": "This method returns the squared vector length.",
          "params": [],
          "returns": {
            "type": "number",
            "doc": "Squared vector length."
          }
        },
        {
          "name": "lenApprox",
          "doc": "This method returns an approximate vector length.",
          "params": [],
          "returns": {
            "type": "number",
            "doc": "Approximate vector length."
          }
        },
        {
          "name": "distance",
          "doc": "This method returns the distance to another vector.",
          "params": [
            {
              "name": "vec",
              "type": "vec3",
              "doc": "Other vector."
            }
          ],
          "returns": {
            "type": "number",
            "doc": "Distance between vectors."
          }
        },
        {
          "name": "distance2d",
          "doc": "This method returns the 2D distance to another vector (ignores Z component).",
          "params": [
            {
              "name": "vec",
              "type": "vec3",
              "doc": "Other vector."
            }
          ],
          "returns": {
            "type": "number",
            "doc": "2D distance between vectors."
          }
        },
        {
          "name": "normalize",
          "doc": "This method normalizes the vector in-place.\nIf the vector length is zero, no change is applied.",
          "params": [],
          "returns": {
            "type": "vec3",
            "doc": "This vector (normalized)."
          }
        },
        {
          "name": "normalizeSafe",
          "doc": "This method normalizes the vector in-place using an epsilon check.\nIf the vector length is below a small threshold, no change is applied.",
          "params": [],
          "returns": {
            "type": "vec3",
            "doc": "This vector (normalized)."
          }
        },
        {
          "name": "normalizeApprox",
          "doc": "This method normalizes the vector in-place using an approximate inverse square root.",
          "params": [],
          "returns": {
            "type": "vec3",
            "doc": "This vector (normalized)."
          }
        },
        {
          "name": "set",
          "doc": "This method sets all components of the vector.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "X component."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Y component."
            },
            {
              "name": "z",
              "type": "number",
              "doc": "Z component."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "isEqualEps",
          "doc": "This method compares this vector with another vector using an epsilon tolerance.",
          "params": [
            {
              "name": "vec",
              "type": "vec3",
              "doc": "Other vector."
            }
          ],
          "returns": {
            "type": "boolean",
            "doc": "True if all components are equal within epsilon."
          }
        },
        {
          "name": "abs",
          "doc": "This method returns a vector with absolute component values.",
          "params": [],
          "returns": {
            "type": "vec3",
            "doc": "Vector with abs(x), abs(y) and abs(z)."
          }
        },
        {
          "name": "reflect",
          "doc": "This method returns the reflection of this vector around a surface normal.",
          "params": [
            {
              "name": "normal",
              "type": "vec3",
              "doc": "Surface normal (typically normalized)."
            }
          ],
          "returns": {
            "type": "vec3",
            "doc": "Reflected vector."
          }
        },
        {
          "name": "swap",
          "doc": "This method swaps two vectors.",
          "params": [
            {
              "name": "vec1",
              "type": "vec3",
              "doc": "First vector."
            },
            {
              "name": "vec2",
              "type": "vec3",
              "doc": "Second vector."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "min",
          "doc": "This method returns the component-wise minimum of two vectors.",
          "params": [
            {
              "name": "vec1",
              "type": "vec3",
              "doc": "First vector."
            },
            {
              "name": "vec2",
              "type": "vec3",
              "doc": "Second vector."
            }
          ],
          "returns": {
            "type": "vec3",
            "doc": "Component-wise minimum."
          }
        },
        {
          "name": "max",
          "doc": "This method returns the component-wise maximum of two vectors.",
          "params": [
            {
              "name": "vec1",
              "type": "vec3",
              "doc": "First vector."
            },
            {
              "name": "vec2",
              "type": "vec3",
              "doc": "Second vector."
            }
          ],
          "returns": {
            "type": "vec3",
            "doc": "Component-wise maximum."
          }
        },
        {
          "name": "prod",
          "doc": "This method returns the component-wise product of two vectors.",
          "params": [
            {
              "name": "vec1",
              "type": "vec3",
              "doc": "First vector."
            },
            {
              "name": "vec2",
              "type": "vec3",
              "doc": "Second vector."
            }
          ],
          "returns": {
            "type": "vec3",
            "doc": "Component-wise product."
          }
        },
        {
          "name": "dot",
          "doc": "This method returns the dot product of two vectors.",
          "params": [
            {
              "name": "vec1",
              "type": "vec3",
              "doc": "First vector."
            },
            {
              "name": "vec2",
              "type": "vec3",
              "doc": "Second vector."
            }
          ],
          "returns": {
            "type": "number",
            "doc": "Dot product."
          }
        },
        {
          "name": "cross",
          "doc": "This method returns the cross product of two vectors.",
          "params": [
            {
              "name": "vec1",
              "type": "vec3",
              "doc": "First vector."
            },
            {
              "name": "vec2",
              "type": "vec3",
              "doc": "Second vector."
            }
          ],
          "returns": {
            "type": "vec3",
            "doc": "Cross product."
          }
        },
        {
          "name": "lerp",
          "doc": "This method linearly interpolates between two vectors.",
          "params": [
            {
              "name": "t",
              "type": "number",
              "doc": "Interpolation factor (typically 0..1)."
            },
            {
              "name": "v1",
              "type": "vec3",
              "doc": "Start vector."
            },
            {
              "name": "v2",
              "type": "vec3",
              "doc": "End vector."
            }
          ],
          "returns": {
            "type": "vec3",
            "doc": "Interpolated vector."
          }
        }
      ],
      "callbacks": []
    },
    "Vec4": {
      "name": "Vec4",
      "doc": "This class represents a 4d vector.",
      "side": "shared",
      "category": "Math",
      "extends": null,
      "fields": [
        {
          "name": "x",
          "type": "number",
          "doc": "Represents X component."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Represents Y component."
        },
        {
          "name": "z",
          "type": "number",
          "doc": "Represents Z component."
        },
        {
          "name": "w",
          "type": "number",
          "doc": "Represents W component."
        }
      ],
      "methods": [
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a Vec4 with all components set to the same value.",
          "params": [
            {
              "name": "value",
              "type": "number",
              "doc": "Value assigned to x, y, z and w."
            }
          ],
          "returns": {
            "type": "Vec4",
            "doc": ""
          }
        },
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a Vec4 with explicit x, y, z and w components.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "X component."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Y component."
            },
            {
              "name": "z",
              "type": "number",
              "doc": "Z component."
            },
            {
              "name": "w",
              "type": "number",
              "doc": "W component."
            }
          ],
          "returns": {
            "type": "Vec4",
            "doc": ""
          }
        },
        {
          "name": "len",
          "doc": "This method returns the vector length (magnitude).",
          "params": [],
          "returns": {
            "type": "number",
            "doc": "Vector length."
          }
        },
        {
          "name": "len2",
          "doc": "This method returns the squared vector length.",
          "params": [],
          "returns": {
            "type": "number",
            "doc": "Squared vector length."
          }
        },
        {
          "name": "lenApprox",
          "doc": "This method returns an approximate vector length.",
          "params": [],
          "returns": {
            "type": "number",
            "doc": "Approximate vector length."
          }
        },
        {
          "name": "normalize",
          "doc": "This method normalizes the vector in-place.\nIf the vector length is zero, no change is applied.",
          "params": [],
          "returns": {
            "type": "vec4",
            "doc": "This vector (normalized)."
          }
        },
        {
          "name": "normalizeSafe",
          "doc": "This method normalizes the vector in-place using an epsilon check.\nIf the vector length is below a small threshold, no change is applied.",
          "params": [],
          "returns": {
            "type": "vec4",
            "doc": "This vector (normalized)."
          }
        },
        {
          "name": "normalizeApprox",
          "doc": "This method normalizes the vector in-place using an approximate inverse square root.",
          "params": [],
          "returns": {
            "type": "vec4",
            "doc": "This vector (normalized)."
          }
        },
        {
          "name": "set",
          "doc": "This method sets all components of the vector.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "X component."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Y component."
            },
            {
              "name": "z",
              "type": "number",
              "doc": "Z component."
            },
            {
              "name": "w",
              "type": "number",
              "doc": "W component."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "isEqualEps",
          "doc": "This method compares this vector with another vector using an epsilon tolerance.",
          "params": [
            {
              "name": "vec",
              "type": "vec4",
              "doc": "Other vector."
            }
          ],
          "returns": {
            "type": "boolean",
            "doc": "True if all components are equal within epsilon."
          }
        },
        {
          "name": "abs",
          "doc": "This method returns a vector with absolute component values.",
          "params": [],
          "returns": {
            "type": "vec4",
            "doc": "Vector with abs(x), abs(y), abs(z) and abs(w)."
          }
        },
        {
          "name": "swap",
          "doc": "This method swaps two vectors.",
          "params": [
            {
              "name": "vec1",
              "type": "vec4",
              "doc": "First vector."
            },
            {
              "name": "vec2",
              "type": "vec4",
              "doc": "Second vector."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "min",
          "doc": "This method returns the component-wise minimum of two vectors.",
          "params": [
            {
              "name": "vec1",
              "type": "vec4",
              "doc": "First vector."
            },
            {
              "name": "vec2",
              "type": "vec4",
              "doc": "Second vector."
            }
          ],
          "returns": {
            "type": "vec4",
            "doc": "Component-wise minimum."
          }
        },
        {
          "name": "max",
          "doc": "This method returns the component-wise maximum of two vectors.",
          "params": [
            {
              "name": "vec1",
              "type": "vec4",
              "doc": "First vector."
            },
            {
              "name": "vec2",
              "type": "vec4",
              "doc": "Second vector."
            }
          ],
          "returns": {
            "type": "vec4",
            "doc": "Component-wise maximum."
          }
        },
        {
          "name": "prod",
          "doc": "This method returns the component-wise product of two vectors.",
          "params": [
            {
              "name": "vec1",
              "type": "vec4",
              "doc": "First vector."
            },
            {
              "name": "vec2",
              "type": "vec4",
              "doc": "Second vector."
            }
          ],
          "returns": {
            "type": "vec4",
            "doc": "Component-wise product."
          }
        },
        {
          "name": "dot",
          "doc": "This method returns the dot product of two vectors.",
          "params": [
            {
              "name": "vec1",
              "type": "vec4",
              "doc": "First vector."
            },
            {
              "name": "vec2",
              "type": "vec4",
              "doc": "Second vector."
            }
          ],
          "returns": {
            "type": "number",
            "doc": "Dot product."
          }
        },
        {
          "name": "lerp",
          "doc": "This method linearly interpolates between two vectors.",
          "params": [
            {
              "name": "t",
              "type": "number",
              "doc": "Interpolation factor (typically 0..1)."
            },
            {
              "name": "v1",
              "type": "vec4",
              "doc": "Start vector."
            },
            {
              "name": "v2",
              "type": "vec4",
              "doc": "End vector."
            }
          ],
          "returns": {
            "type": "vec4",
            "doc": "Interpolated vector."
          }
        }
      ],
      "callbacks": []
    },
    "Mat3": {
      "name": "Mat3",
      "doc": "This class represents a 3x3 matrix.",
      "side": "shared",
      "category": "Math",
      "extends": null,
      "fields": [],
      "methods": [
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates an identity matrix.",
          "params": [],
          "returns": {
            "type": "Mat3",
            "doc": ""
          }
        },
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a matrix initialized with a scalar value.",
          "params": [
            {
              "name": "value",
              "type": "number",
              "doc": "Scalar initialization value."
            }
          ],
          "returns": {
            "type": "Mat3",
            "doc": ""
          }
        },
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a matrix from three row vectors.",
          "params": [
            {
              "name": "v0",
              "type": "vec3",
              "doc": "First row vector."
            },
            {
              "name": "v1",
              "type": "vec3",
              "doc": "Second row vector."
            },
            {
              "name": "v2",
              "type": "vec3",
              "doc": "Third row vector."
            }
          ],
          "returns": {
            "type": "Mat3",
            "doc": ""
          }
        },
        {
          "name": "makeIdentity",
          "doc": "This method resets the matrix to identity.",
          "params": [],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "makeZero",
          "doc": "This method sets all matrix elements to zero.",
          "params": [],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "makeOrthonormal",
          "doc": "This method orthonormalizes the matrix basis vectors.\nThis makes the basis vectors unit-length and mutually orthogonal.",
          "params": [],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "isUpper3x3Orthonormal",
          "doc": "This method returns true if the matrix basis vectors are orthonormal.",
          "params": [],
          "returns": {
            "type": "boolean",
            "doc": "True if orthonormal within epsilon tolerance."
          }
        },
        {
          "name": "transpose",
          "doc": "This method returns the transposed matrix.",
          "params": [],
          "returns": {
            "type": "mat3",
            "doc": "Transposed matrix."
          }
        },
        {
          "name": "inverse",
          "doc": "This method returns the inverse matrix.",
          "params": [],
          "returns": {
            "type": "mat3",
            "doc": "Inverse matrix."
          }
        },
        {
          "name": "rotate",
          "doc": "This method rotates a vector by this matrix.",
          "params": [
            {
              "name": "vec",
              "type": "vec3",
              "doc": "Vector to rotate."
            }
          ],
          "returns": {
            "type": "vec3",
            "doc": "Rotated vector."
          }
        },
        {
          "name": "setRightVector",
          "doc": "This method sets the right basis vector.",
          "params": [
            {
              "name": "vec",
              "type": "vec3",
              "doc": "New right vector."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getRightVector",
          "doc": "This method returns the right basis vector.",
          "params": [],
          "returns": {
            "type": "vec3",
            "doc": "Right vector."
          }
        },
        {
          "name": "setUpVector",
          "doc": "This method sets the up basis vector.",
          "params": [
            {
              "name": "vec",
              "type": "vec3",
              "doc": "New up vector."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getUpVector",
          "doc": "This method returns the up basis vector.",
          "params": [],
          "returns": {
            "type": "vec3",
            "doc": "Up vector."
          }
        },
        {
          "name": "setAtVector",
          "doc": "This method sets the forward (at) basis vector.",
          "params": [
            {
              "name": "vec",
              "type": "vec3",
              "doc": "New at vector."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getAtVector",
          "doc": "This method returns the forward (at) basis vector.",
          "params": [],
          "returns": {
            "type": "vec3",
            "doc": "At vector."
          }
        },
        {
          "name": "resetRotation",
          "doc": "This method resets rotation to identity.",
          "params": [],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "extractRotation",
          "doc": "This method returns a copy of this matrix with scaling removed.",
          "params": [],
          "returns": {
            "type": "mat3",
            "doc": "Rotation-only matrix."
          }
        },
        {
          "name": "extractScaling",
          "doc": "This method extracts scaling factors from the basis vectors.",
          "params": [],
          "returns": {
            "type": "vec3",
            "doc": "Scaling factors for x, y and z axes."
          }
        },
        {
          "name": "postRotateX",
          "doc": "This method post-multiplies a rotation around the X axis (degrees).",
          "params": [
            {
              "name": "angle_degrees",
              "type": "number",
              "doc": "Rotation angle in degrees."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "postRotateY",
          "doc": "This method post-multiplies a rotation around the Y axis (degrees).",
          "params": [
            {
              "name": "angle_degrees",
              "type": "number",
              "doc": "Rotation angle in degrees."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "postRotateZ",
          "doc": "This method post-multiplies a rotation around the Z axis (degrees).",
          "params": [
            {
              "name": "angle_degrees",
              "type": "number",
              "doc": "Rotation angle in degrees."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "preScale",
          "doc": "This method pre-multiplies a scaling transformation.",
          "params": [
            {
              "name": "scale",
              "type": "vec3",
              "doc": "Scaling factors for x, y and z axes."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "postScale",
          "doc": "This method post-multiplies a scaling transformation.",
          "params": [
            {
              "name": "scale",
              "type": "vec3",
              "doc": "Scaling factors for x, y and z axes."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "swap",
          "doc": "This method swaps two matrices.",
          "params": [
            {
              "name": "mat1",
              "type": "mat3",
              "doc": "First matrix."
            },
            {
              "name": "mat2",
              "type": "mat3",
              "doc": "Second matrix."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "data",
          "doc": "This method returns a pointer to the raw matrix data (column-major float array).",
          "params": [],
          "returns": {
            "type": "userdata",
            "doc": "Pointer to matrix float data."
          }
        }
      ],
      "callbacks": []
    },
    "Mat4": {
      "name": "Mat4",
      "doc": "This class represents a 4x4 matrix.",
      "side": "shared",
      "category": "Math",
      "extends": null,
      "fields": [],
      "methods": [
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates an identity matrix.",
          "params": [],
          "returns": {
            "type": "Mat4",
            "doc": ""
          }
        },
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a matrix initialized with a scalar value.",
          "params": [
            {
              "name": "value",
              "type": "number",
              "doc": "Scalar initialization value."
            }
          ],
          "returns": {
            "type": "Mat4",
            "doc": ""
          }
        },
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a matrix from four row vectors.",
          "params": [
            {
              "name": "v0",
              "type": "vec4",
              "doc": "First row vector."
            },
            {
              "name": "v1",
              "type": "vec4",
              "doc": "Second row vector."
            },
            {
              "name": "v2",
              "type": "vec4",
              "doc": "Third row vector."
            },
            {
              "name": "v3",
              "type": "vec4",
              "doc": "Fourth row vector."
            }
          ],
          "returns": {
            "type": "Mat4",
            "doc": ""
          }
        },
        {
          "name": "makeIdentity",
          "doc": "This method resets the matrix to identity.",
          "params": [],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "makeZero",
          "doc": "This method sets all matrix elements to zero.",
          "params": [],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "makeOrthonormal",
          "doc": "This method orthonormalizes the upper-left 3x3 basis vectors while preserving translation.",
          "params": [],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "isUpper3x3Orthonormal",
          "doc": "This method returns true if the upper 3x3 basis vectors are orthonormal.",
          "params": [],
          "returns": {
            "type": "boolean",
            "doc": "True if orthonormal within epsilon tolerance."
          }
        },
        {
          "name": "transpose",
          "doc": "This method returns the transposed matrix.",
          "params": [],
          "returns": {
            "type": "mat4",
            "doc": "Transposed matrix."
          }
        },
        {
          "name": "inverse",
          "doc": "This method returns the inverse matrix.",
          "params": [],
          "returns": {
            "type": "mat4",
            "doc": "Inverse matrix."
          }
        },
        {
          "name": "inverseLinTrafo",
          "doc": "This method returns the inverse of a linear transform with translation.\nThis is intended for typical transform matrices (rotation/scale + translation).",
          "params": [],
          "returns": {
            "type": "mat4",
            "doc": "Inverse linear transform matrix."
          }
        },
        {
          "name": "rotate",
          "doc": "This method rotates a vector by the matrix (ignores translation).",
          "params": [
            {
              "name": "vec",
              "type": "vec3",
              "doc": "Vector to rotate."
            }
          ],
          "returns": {
            "type": "vec3",
            "doc": "Rotated vector."
          }
        },
        {
          "name": "setRightVector",
          "doc": "This method sets the right basis vector.",
          "params": [
            {
              "name": "vec",
              "type": "vec3",
              "doc": "New right vector."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getRightVector",
          "doc": "This method returns the right basis vector.",
          "params": [],
          "returns": {
            "type": "vec3",
            "doc": "Right vector."
          }
        },
        {
          "name": "setAtVector",
          "doc": "This method sets the forward (at) basis vector.",
          "params": [
            {
              "name": "vec",
              "type": "vec3",
              "doc": "New at vector."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getAtVector",
          "doc": "This method returns the forward (at) basis vector.",
          "params": [],
          "returns": {
            "type": "vec3",
            "doc": "At vector."
          }
        },
        {
          "name": "setUpVector",
          "doc": "This method sets the up basis vector.",
          "params": [
            {
              "name": "vec",
              "type": "vec3",
              "doc": "New up vector."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getUpVector",
          "doc": "This method returns the up basis vector.",
          "params": [],
          "returns": {
            "type": "vec3",
            "doc": "Up vector."
          }
        },
        {
          "name": "setTranslation",
          "doc": "This method sets the translation component.",
          "params": [
            {
              "name": "vec",
              "type": "vec3",
              "doc": "New translation vector."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getTranslation",
          "doc": "This method returns the translation component.",
          "params": [],
          "returns": {
            "type": "vec3",
            "doc": "Translation vector."
          }
        },
        {
          "name": "resetRotation",
          "doc": "This method resets rotation to identity while preserving translation.",
          "params": [],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "extractRotation",
          "doc": "This method extracts the rotation part of the matrix (scaling removed).",
          "params": [],
          "returns": {
            "type": "mat3",
            "doc": "Rotation matrix."
          }
        },
        {
          "name": "extractScaling",
          "doc": "This method extracts scaling factors from the matrix basis vectors.",
          "params": [],
          "returns": {
            "type": "vec3",
            "doc": "Scaling factors for x, y and z axes."
          }
        },
        {
          "name": "postRotateX",
          "doc": "This method post-multiplies a rotation around the X axis (degrees).",
          "params": [
            {
              "name": "angle_degrees",
              "type": "number",
              "doc": "Rotation angle in degrees."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "postRotateY",
          "doc": "This method post-multiplies a rotation around the Y axis (degrees).",
          "params": [
            {
              "name": "angle_degrees",
              "type": "number",
              "doc": "Rotation angle in degrees."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "postRotateZ",
          "doc": "This method post-multiplies a rotation around the Z axis (degrees).",
          "params": [
            {
              "name": "angle_degrees",
              "type": "number",
              "doc": "Rotation angle in degrees."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "preScale",
          "doc": "This method pre-multiplies a scaling transformation.",
          "params": [
            {
              "name": "scale",
              "type": "vec3",
              "doc": "Scaling factors for x, y and z axes."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "postScale",
          "doc": "This method post-multiplies a scaling transformation.",
          "params": [
            {
              "name": "scale",
              "type": "vec3",
              "doc": "Scaling factors for x, y and z axes."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "swap",
          "doc": "This method swaps two matrices.",
          "params": [
            {
              "name": "mat1",
              "type": "mat4",
              "doc": "First matrix."
            },
            {
              "name": "mat2",
              "type": "mat4",
              "doc": "Second matrix."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "lookAt",
          "doc": "This method builds a look-at transform from a position, target and up vector.",
          "params": [
            {
              "name": "from",
              "type": "vec3",
              "doc": "Camera/world position."
            },
            {
              "name": "to",
              "type": "vec3",
              "doc": "Target position to look at."
            },
            {
              "name": "up",
              "type": "vec3",
              "doc": "Up direction vector."
            }
          ],
          "returns": {
            "type": "mat4",
            "doc": "Look-at matrix."
          }
        },
        {
          "name": "data",
          "doc": "This method returns a pointer to the raw matrix data (column-major float array).",
          "params": [],
          "returns": {
            "type": "userdata",
            "doc": "Pointer to matrix float data."
          }
        }
      ],
      "callbacks": []
    },
    "Quat": {
      "name": "Quat",
      "doc": "This class represents a Quaternion.\n\nProvides conversion to/from matrices, Euler angles and axis-angle, as well as\ncommon quaternion operations and interpolation utilities.",
      "side": "shared",
      "category": "Math",
      "extends": null,
      "fields": [
        {
          "name": "x",
          "type": "number",
          "doc": "Represents X component."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Represents Y component."
        },
        {
          "name": "z",
          "type": "number",
          "doc": "Represents Z component."
        },
        {
          "name": "w",
          "type": "number",
          "doc": "Represents W component."
        }
      ],
      "methods": [
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a quaternion with default values.",
          "params": [],
          "returns": {
            "type": "Quat",
            "doc": ""
          }
        },
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a quaternion with W component set to the given value.",
          "params": [
            {
              "name": "w",
              "type": "number",
              "doc": "W component."
            }
          ],
          "returns": {
            "type": "Quat",
            "doc": ""
          }
        },
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a quaternion with explicit x, y, z and w components.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "X component."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Y component."
            },
            {
              "name": "z",
              "type": "number",
              "doc": "Z component."
            },
            {
              "name": "w",
              "type": "number",
              "doc": "W component."
            }
          ],
          "returns": {
            "type": "Quat",
            "doc": ""
          }
        },
        {
          "name": "toMat3",
          "doc": "This method converts this quaternion to a 3x3 rotation matrix.",
          "params": [],
          "returns": {
            "type": "mat3",
            "doc": "Rotation matrix."
          }
        },
        {
          "name": "fromMat3",
          "doc": "This method sets this quaternion from a 3x3 rotation matrix.",
          "params": [
            {
              "name": "mat",
              "type": "mat3",
              "doc": "Rotation matrix."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "toMat4",
          "doc": "This method converts this quaternion to a 4x4 rotation matrix.",
          "params": [],
          "returns": {
            "type": "mat4",
            "doc": "Rotation matrix."
          }
        },
        {
          "name": "fromMat4",
          "doc": "This method sets this quaternion from a 4x4 transform matrix (rotation part).",
          "params": [
            {
              "name": "mat",
              "type": "mat4",
              "doc": "Transform matrix."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "toEuler",
          "doc": "This method converts this quaternion to Euler angles.",
          "params": [],
          "returns": {
            "type": "vec3",
            "doc": "Euler angles as a 3D vector."
          }
        },
        {
          "name": "fromEuler",
          "doc": "This method sets this quaternion from Euler angles.",
          "params": [
            {
              "name": "vec",
              "type": "vec3",
              "doc": "Euler angles as a 3D vector."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "toAxisAngle",
          "doc": "This method converts this quaternion to axis-angle representation.\nThe returned Vec4 contains (axis.x, axis.y, axis.z, angle).",
          "params": [],
          "returns": {
            "type": "vec4",
            "doc": "Axis-angle as (x, y, z, angle)."
          }
        },
        {
          "name": "fromAxisAngle",
          "doc": "This method sets this quaternion from an axis and angle.",
          "params": [
            {
              "name": "axis",
              "type": "vec3",
              "doc": "Rotation axis (typically normalized)."
            },
            {
              "name": "angle",
              "type": "number",
              "doc": "Rotation angle."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "makeIdentity",
          "doc": "This method sets this quaternion to identity (no rotation).",
          "params": [],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "isIdentity",
          "doc": "This method returns true if this quaternion is identity (within epsilon tolerance).",
          "params": [],
          "returns": {
            "type": "boolean",
            "doc": "True if identity."
          }
        },
        {
          "name": "len",
          "doc": "This method returns the quaternion length.",
          "params": [],
          "returns": {
            "type": "number",
            "doc": "Quaternion length."
          }
        },
        {
          "name": "len2",
          "doc": "This method returns the squared quaternion length.",
          "params": [],
          "returns": {
            "type": "number",
            "doc": "Squared quaternion length."
          }
        },
        {
          "name": "lenApprox",
          "doc": "This method returns an approximate quaternion length.",
          "params": [],
          "returns": {
            "type": "number",
            "doc": "Approximate length."
          }
        },
        {
          "name": "normalize",
          "doc": "This method normalizes the quaternion in-place.\nIf the quaternion length is zero, no change is applied.",
          "params": [],
          "returns": {
            "type": "quat",
            "doc": "This quaternion (normalized)."
          }
        },
        {
          "name": "normalizeSafe",
          "doc": "This method normalizes the quaternion in-place using an epsilon check.\nIf the quaternion length is below a small threshold, no change is applied.",
          "params": [],
          "returns": {
            "type": "quat",
            "doc": "This quaternion (normalized)."
          }
        },
        {
          "name": "normalizeApprox",
          "doc": "This method normalizes the quaternion in-place using an approximate inverse square root.",
          "params": [],
          "returns": {
            "type": "quat",
            "doc": "This quaternion (normalized)."
          }
        },
        {
          "name": "set",
          "doc": "This method sets quaternion components.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "X component."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Y component."
            },
            {
              "name": "z",
              "type": "number",
              "doc": "Z component."
            },
            {
              "name": "w",
              "type": "number",
              "doc": "W component."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "inverse",
          "doc": "This method returns the inverse quaternion.\nFor unit quaternions, this is equivalent to conjugate().",
          "params": [],
          "returns": {
            "type": "quat",
            "doc": "Inverse quaternion."
          }
        },
        {
          "name": "conjugate",
          "doc": "This method returns the conjugate quaternion.",
          "params": [],
          "returns": {
            "type": "quat",
            "doc": "Conjugated quaternion."
          }
        },
        {
          "name": "dot",
          "doc": "This method returns the dot product of two quaternions.",
          "params": [
            {
              "name": "quat1",
              "type": "quat",
              "doc": "First quaternion."
            },
            {
              "name": "quat2",
              "type": "quat",
              "doc": "Second quaternion."
            }
          ],
          "returns": {
            "type": "number",
            "doc": "Dot product."
          }
        },
        {
          "name": "lerp",
          "doc": "This method linearly interpolates between two quaternions.",
          "params": [
            {
              "name": "t",
              "type": "number",
              "doc": "Interpolation factor (typically 0..1)."
            },
            {
              "name": "q1",
              "type": "quat",
              "doc": "Start quaternion."
            },
            {
              "name": "q2",
              "type": "quat",
              "doc": "End quaternion."
            }
          ],
          "returns": {
            "type": "quat",
            "doc": "Interpolated quaternion."
          }
        },
        {
          "name": "slerp",
          "doc": "This method spherically interpolates between two quaternions.",
          "params": [
            {
              "name": "t",
              "type": "number",
              "doc": "Interpolation factor (typically 0..1)."
            },
            {
              "name": "q1",
              "type": "quat",
              "doc": "Start quaternion."
            },
            {
              "name": "q2",
              "type": "quat",
              "doc": "End quaternion."
            }
          ],
          "returns": {
            "type": "quat",
            "doc": "Spherically interpolated quaternion."
          }
        },
        {
          "name": "squad",
          "doc": "This method performs a squad-style interpolation using three quaternions.",
          "params": [
            {
              "name": "t",
              "type": "number",
              "doc": "Interpolation factor (typically 0..1)."
            },
            {
              "name": "q1",
              "type": "quat",
              "doc": "First quaternion."
            },
            {
              "name": "q2",
              "type": "quat",
              "doc": "Second quaternion."
            },
            {
              "name": "q3",
              "type": "quat",
              "doc": "Third quaternion."
            }
          ],
          "returns": {
            "type": "quat",
            "doc": "Interpolated quaternion."
          }
        },
        {
          "name": "lookRotation",
          "doc": "This method creates a quaternion that looks in the given forward direction with the given up direction.",
          "params": [
            {
              "name": "forward",
              "type": "vec3",
              "doc": "Forward direction."
            },
            {
              "name": "up",
              "type": "vec3",
              "doc": "Up direction."
            }
          ],
          "returns": {
            "type": "quat",
            "doc": "Resulting rotation quaternion."
          }
        }
      ],
      "callbacks": []
    },
    "JsonFile": {
      "name": "JsonFile",
      "doc": "JSON-backed key/value file returned by JSON().",
      "side": "server",
      "category": "File",
      "extends": null,
      "fields": [],
      "methods": [
        {
          "name": "key",
          "doc": "Return the key at the given 0-based index or nil if out of range.",
          "params": [
            {
              "name": "index",
              "type": "number",
              "doc": "Zero-based entry index."
            }
          ],
          "returns": {
            "type": "string|nil",
            "doc": "Key at index or nil."
          }
        },
        {
          "name": "len",
          "doc": "Return the number of entries in the file.",
          "params": [],
          "returns": {
            "type": "number",
            "doc": "Entry count."
          }
        },
        {
          "name": "getItem",
          "doc": "Get a value by key.",
          "params": [
            {
              "name": "key",
              "type": "string",
              "doc": "Entry key."
            }
          ],
          "returns": {
            "type": "any|nil",
            "doc": "Value or nil if missing/invalid."
          }
        },
        {
          "name": "setItem",
          "doc": "Set a value by key (autosaves on success).",
          "params": [
            {
              "name": "key",
              "type": "string",
              "doc": "Entry key."
            },
            {
              "name": "value",
              "type": "any",
              "doc": "Value to store."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "removeItem",
          "doc": "Remove a key (autosaves on success).",
          "params": [
            {
              "name": "key",
              "type": "string",
              "doc": "Entry key."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "clear",
          "doc": "Remove all keys (autosaves on success).",
          "params": [],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        }
      ],
      "callbacks": []
    },
    "Way": {
      "name": "Way",
      "doc": "This class represents a route between two waypoint names computed from Zengin zCRoute class.",
      "side": "client",
      "category": "World",
      "extends": null,
      "fields": [],
      "methods": [
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a path between two waypoint names.",
          "params": [
            {
              "name": "startWp",
              "type": "string",
              "doc": "Name of the start waypoint."
            },
            {
              "name": "endWp",
              "type": "string",
              "doc": "Name of the end waypoint."
            }
          ],
          "returns": {
            "type": "Way",
            "doc": ""
          }
        },
        {
          "name": "getStart",
          "doc": "This method will return the start waypoint name.",
          "params": [],
          "returns": {
            "type": "string",
            "doc": ""
          }
        },
        {
          "name": "getEnd",
          "doc": "This method will return the end waypoint name.",
          "params": [],
          "returns": {
            "type": "string",
            "doc": ""
          }
        },
        {
          "name": "getWaypoints",
          "doc": "This method will return all waypoints from the computed route.",
          "params": [],
          "returns": {
            "type": "table",
            "doc": "Table with waypoint names."
          }
        },
        {
          "name": "getCountWaypoints",
          "doc": "This method will return the number of waypoints in the computed route.",
          "params": [],
          "returns": {
            "type": "number",
            "doc": "Number of waypoints."
          }
        }
      ],
      "callbacks": []
    },
    "Discord": {
      "name": "Discord",
      "doc": "This class exposes static methods for updating the user's Discord activity from the game client.",
      "side": "client",
      "category": "Game",
      "extends": null,
      "fields": [],
      "methods": [
        {
          "name": "setActivity",
          "doc": "This function updates the Discord Rich Presence activity. Missing fields keep their last-set values.",
          "params": [
            {
              "name": "Activity",
              "type": "table",
              "doc": "configuration table."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "setState",
          "doc": "This function will update the activity state text.",
          "params": [
            {
              "name": "state",
              "type": "string",
              "doc": ""
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "setDetails",
          "doc": "This function will update the activity details text.",
          "params": [
            {
              "name": "details",
              "type": "string",
              "doc": ""
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "setLargeImage",
          "doc": "This function will update the large image entry for the activity.",
          "params": [
            {
              "name": "key",
              "type": "string",
              "doc": "Asset key for the large image."
            },
            {
              "name": "text",
              "type": "string",
              "doc": "Optional tooltip text for the large image."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "setSmallImage",
          "doc": "This function will update the small image entry for the activity.",
          "params": [
            {
              "name": "key",
              "type": "string",
              "doc": "Asset key for the small image."
            },
            {
              "name": "text",
              "type": "string",
              "doc": "Optional tooltip text for the small image."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "clearActivity",
          "doc": "This function will clear the current activity and stored values.",
          "params": [],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        }
      ],
      "callbacks": []
    },
    "Draw": {
      "name": "Draw",
      "doc": "2D text drawing helper for rendering overlay text on screen.",
      "side": "client",
      "category": "UI",
      "extends": null,
      "fields": [
        {
          "name": "position",
          "type": "table",
          "doc": "Represents the draw position in virtual screen units."
        },
        {
          "name": "positionPx",
          "type": "table",
          "doc": "Represents the draw position in pixel coordinates."
        },
        {
          "name": "text",
          "type": "string",
          "doc": "Represents the displayed text."
        },
        {
          "name": "font",
          "type": "string",
          "doc": "Represents the font identifier used for rendering."
        },
        {
          "name": "color",
          "type": "table",
          "doc": "Represents the draw's color."
        },
        {
          "name": "alpha",
          "type": "number",
          "doc": "Represents the draw's alpha."
        },
        {
          "name": "visible",
          "type": "boolean",
          "doc": "Represents whether the Draw object is rendered."
        }
      ],
      "methods": [
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a new Draw object with default settings.",
          "params": [],
          "returns": {
            "type": "Draw",
            "doc": ""
          }
        },
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a new Draw object with an initial position and text.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "Initial X position (virtual units)."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Initial Y position (virtual units)."
            },
            {
              "name": "text",
              "type": "string",
              "doc": "Initial text content."
            }
          ],
          "returns": {
            "type": "Draw",
            "doc": ""
          }
        },
        {
          "name": "setPosition",
          "doc": "This function will set the draw position in virtual screen units.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "X position."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Y position."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getPosition",
          "doc": "This function will return the draw position in virtual screen units.",
          "params": [],
          "returns": {
            "type": "table",
            "doc": "Table containing x and y numbers."
          }
        },
        {
          "name": "setPositionPx",
          "doc": "This function will set the draw position in pixel coordinates.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "X position."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Y position."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getPositionPx",
          "doc": "This function will return the draw position in pixel coordinates.",
          "params": [],
          "returns": {
            "type": "table",
            "doc": "Table containing x and y numbers."
          }
        },
        {
          "name": "setText",
          "doc": "This function will set the text to render.",
          "params": [
            {
              "name": "text",
              "type": "string",
              "doc": "Text to display."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getText",
          "doc": "This function will return the current text.",
          "params": [],
          "returns": {
            "type": "string",
            "doc": "Current text."
          }
        },
        {
          "name": "setFont",
          "doc": "This function will set the font used for rendering.",
          "params": [
            {
              "name": "font",
              "type": "string",
              "doc": "Font file name."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getFont",
          "doc": "This function will return the current font file name.",
          "params": [],
          "returns": {
            "type": "string",
            "doc": "Font file name."
          }
        },
        {
          "name": "setColor",
          "doc": "This function will set the text color.",
          "params": [
            {
              "name": "r",
              "type": "number",
              "doc": "The red color component in RGB model."
            },
            {
              "name": "g",
              "type": "number",
              "doc": "The green color component in RGB model."
            },
            {
              "name": "b",
              "type": "number",
              "doc": "The blue color component in RGB model."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getColor",
          "doc": "This function will return the current text color.",
          "params": [],
          "returns": {
            "type": "table",
            "doc": "Table containing color in RGB model."
          }
        },
        {
          "name": "setAlpha",
          "doc": "This function will set the text alpha.",
          "params": [
            {
              "name": "alpha",
              "type": "number",
              "doc": "Opacity value (0-255)."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getAlpha",
          "doc": "This function will return the current alpha",
          "params": [],
          "returns": {
            "type": "number",
            "doc": "Opacity value (0-255)."
          }
        },
        {
          "name": "setVisible",
          "doc": "This function will set whether the Draw object should render.",
          "params": [
            {
              "name": "visible",
              "type": "boolean",
              "doc": "True to render, false to hide."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getVisible",
          "doc": "This function will return whether this Draw object is visible.",
          "params": [],
          "returns": {
            "type": "boolean",
            "doc": "True if visible."
          }
        }
      ],
      "callbacks": []
    },
    "Sound": {
      "name": "Sound",
      "doc": "This class represents an internal sound method.",
      "side": "client",
      "category": "Game",
      "extends": null,
      "fields": [
        {
          "name": "file",
          "type": "string",
          "doc": "Represents the sound file path."
        },
        {
          "name": "playingTime",
          "type": "number",
          "doc": "Represents the current playback time."
        },
        {
          "name": "volume",
          "type": "number",
          "doc": "Represents the playback volume."
        },
        {
          "name": "looping",
          "type": "boolean",
          "doc": "Represents whether the sound should loop."
        },
        {
          "name": "balance",
          "type": "number",
          "doc": "Represents the stereo balance (pan)."
        }
      ],
      "methods": [
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a new Sound from a file.",
          "params": [
            {
              "name": "file",
              "type": "string",
              "doc": "Sound file path."
            }
          ],
          "returns": {
            "type": "Sound",
            "doc": ""
          }
        },
        {
          "name": "play",
          "doc": "This method will start Sound playback.",
          "params": [],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "stop",
          "doc": "This method will stop Sound playback.",
          "params": [],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "isPlaying",
          "doc": "This method will return whether the Sound is currently playing.",
          "params": [],
          "returns": {
            "type": "boolean",
            "doc": "True if the sound is playing."
          }
        }
      ],
      "callbacks": []
    },
    "Texture": {
      "name": "Texture",
      "doc": "This class represents a 2d Texture on screen.",
      "side": "client",
      "category": "UI",
      "extends": null,
      "fields": [
        {
          "name": "position",
          "type": "table",
          "doc": "Represents the Texture position in virtual screen units."
        },
        {
          "name": "positionPx",
          "type": "table",
          "doc": "Represents the Texture position in pixel coordinates."
        },
        {
          "name": "size",
          "type": "table",
          "doc": "Represents the Texture size in virtual screen units."
        },
        {
          "name": "sizePx",
          "type": "table",
          "doc": "Represents the Texture size in pixel coordinates."
        },
        {
          "name": "rect",
          "type": "table",
          "doc": "Represents the Texture rectangle in virtual screen units."
        },
        {
          "name": "rectPx",
          "type": "table",
          "doc": "Represents the Texture rectangle in pixel coordinates."
        },
        {
          "name": "color",
          "type": "table",
          "doc": "Represents the Texture color."
        },
        {
          "name": "alpha",
          "type": "number",
          "doc": "Represents the Texture alpha ."
        },
        {
          "name": "visible",
          "type": "boolean",
          "doc": "Represents whether the texture is rendered."
        },
        {
          "name": "file",
          "type": "string",
          "doc": "Represents the texture file path."
        }
      ],
      "methods": [
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a new Texture.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "X position (virtual units)."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Y position (virtual units)."
            },
            {
              "name": "width",
              "type": "number",
              "doc": "Width (virtual units)."
            },
            {
              "name": "height",
              "type": "number",
              "doc": "Height (virtual units)."
            },
            {
              "name": "file",
              "type": "string",
              "doc": "Texture file path."
            }
          ],
          "returns": {
            "type": "Texture",
            "doc": ""
          }
        },
        {
          "name": "setPosition",
          "doc": "This method will set the Texture position in virtual screen units.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "X position (virtual units)."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Y position (virtual units)."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getPosition",
          "doc": "This method will return the Texture position in virtual screen units.",
          "params": [],
          "returns": {
            "type": "table",
            "doc": "Table containing x and y (virtual units)."
          }
        },
        {
          "name": "setPositionPx",
          "doc": "This method will set the Texture position in pixel coordinates.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "X position (pixels)."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Y position (pixels)."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getPositionPx",
          "doc": "This method will return the Texture position in pixel coordinates.",
          "params": [],
          "returns": {
            "type": "table",
            "doc": "Table containing x and y (pixels)."
          }
        },
        {
          "name": "setSize",
          "doc": "This method will set the Texture size in virtual screen units.",
          "params": [
            {
              "name": "width",
              "type": "number",
              "doc": "Width (virtual units)."
            },
            {
              "name": "height",
              "type": "number",
              "doc": "Height (virtual units)."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getSize",
          "doc": "This method will return the Texture size in virtual screen units.",
          "params": [],
          "returns": {
            "type": "table",
            "doc": "Table containing width and height (virtual units)."
          }
        },
        {
          "name": "setSizePx",
          "doc": "This method will set the Texture size in pixel coordinates.",
          "params": [
            {
              "name": "width",
              "type": "number",
              "doc": "Width (pixels)."
            },
            {
              "name": "height",
              "type": "number",
              "doc": "Height (pixels)."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getSizePx",
          "doc": "This method will return the Texture size in pixel coordinates.",
          "params": [],
          "returns": {
            "type": "table",
            "doc": "Table containing width and height (pixels)."
          }
        },
        {
          "name": "setRect",
          "doc": "This method will set the Texture rectangle in virtual screen units.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "X position (virtual units)."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Y position (virtual units)."
            },
            {
              "name": "width",
              "type": "number",
              "doc": "Width (virtual units)."
            },
            {
              "name": "height",
              "type": "number",
              "doc": "Height (virtual units)."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getRect",
          "doc": "This method will return the Texture rectangle in virtual screen units.",
          "params": [],
          "returns": {
            "type": "table",
            "doc": "Table containing x,y,width,height (virtual units)."
          }
        },
        {
          "name": "setRectPx",
          "doc": "This method will set the Texture rectangle in pixel coordinates.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "X position (pixels)."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Y position (pixels)."
            },
            {
              "name": "width",
              "type": "number",
              "doc": "Width (pixels)."
            },
            {
              "name": "height",
              "type": "number",
              "doc": "Height (pixels)."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getRectPx",
          "doc": "This method will return the Texture rectangle in pixel coordinates.",
          "params": [],
          "returns": {
            "type": "table",
            "doc": "Table containing x,y,width,height (pixels)."
          }
        },
        {
          "name": "setColor",
          "doc": "This method will set the Texture color.",
          "params": [
            {
              "name": "r",
              "type": "number",
              "doc": "The red color component in RGB model."
            },
            {
              "name": "g",
              "type": "number",
              "doc": "The green color component in RGB model."
            },
            {
              "name": "b",
              "type": "number",
              "doc": "The blue color component in RGB model."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getColor",
          "doc": "This method will return the Texture color.",
          "params": [],
          "returns": {
            "type": "table",
            "doc": "Table containing color in RGB model."
          }
        },
        {
          "name": "setAlpha",
          "doc": "This method will set the Texture alpha.",
          "params": [
            {
              "name": "alpha",
              "type": "number",
              "doc": "Opacity value (0-255)."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getAlpha",
          "doc": "This method will return the current Texture alpha (opacity).",
          "params": [],
          "returns": {
            "type": "number",
            "doc": "Opacity value (0-255)."
          }
        },
        {
          "name": "setFile",
          "doc": "This method will set the Texture file name.",
          "params": [
            {
              "name": "file",
              "type": "string",
              "doc": "Texture file name."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getFile",
          "doc": "This method will return the Texture file name.",
          "params": [],
          "returns": {
            "type": "string",
            "doc": "Texture file name."
          }
        },
        {
          "name": "setVisible",
          "doc": "This method will set whether the Texture should be rendered.",
          "params": [
            {
              "name": "visible",
              "type": "boolean",
              "doc": "True to render, false to hide."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getVisible",
          "doc": "This method will return whether the Texture is visible.",
          "params": [],
          "returns": {
            "type": "boolean",
            "doc": "True if visible."
          }
        },
        {
          "name": "top",
          "doc": "This method will move the Texture to the top of the render order.",
          "params": [],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        }
      ],
      "callbacks": []
    },
    "Vob": {
      "name": "Vob",
      "doc": "This class represents a 3d object in the world.",
      "side": "client",
      "category": "Game",
      "extends": null,
      "fields": [
        {
          "name": "objectName",
          "type": "string",
          "doc": "Represents the internal engine object name of the Vob."
        },
        {
          "name": "matrix",
          "type": "mat4",
          "doc": "Represents the reference to the Vob matrix."
        },
        {
          "name": "parent",
          "type": "vob|nil",
          "doc": "Represents the reference to the parent Vob."
        },
        {
          "name": "cdDynamic",
          "type": "boolean",
          "doc": "Represents the state of dynamic collision of the Vob. Enabling this option will prevent other dynamic objects from passing through it."
        },
        {
          "name": "cdStatic",
          "type": "boolean",
          "doc": "Represents the state of static collision of the Vob. Enabling this option will prevent static objects (i.e. world mesh) from passing through it."
        },
        {
          "name": "farClipZScale",
          "type": "number",
          "doc": "Represents the max distance at which the Vob will still be rendered."
        },
        {
          "name": "visual",
          "type": "string",
          "doc": "Represents the model file name used as Vob visual, e.g. \"SPHERE.3DS\"."
        },
        {
          "name": "visualAlpha",
          "type": "number",
          "doc": "Represents the transparency of the Vob visual."
        }
      ],
      "methods": [
        {
          "name": "new",
          "is_constructor": true,
          "doc": "Creates a new Vob using the provided visual model.",
          "params": [
            {
              "name": "model",
              "type": "string",
              "doc": "Visual model name (e.g. \"SPHERE.3DS\")."
            }
          ],
          "returns": {
            "type": "Vob",
            "doc": ""
          }
        },
        {
          "name": "setPosition",
          "doc": "This method will set the position of the Vob in the world.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "Position on X axis."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Position on Y axis."
            },
            {
              "name": "z",
              "type": "number",
              "doc": "Position on Z axis."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getPosition",
          "doc": "This method will return the position of the Vob in the world.",
          "params": [],
          "returns": {
            "type": "table",
            "doc": "Table containing x,y,z position."
          }
        },
        {
          "name": "setRotation",
          "doc": "This method will set the euler rotation of the Vob in the world.",
          "params": [
            {
              "name": "x",
              "type": "number",
              "doc": "Rotation on X axis."
            },
            {
              "name": "y",
              "type": "number",
              "doc": "Rotation on Y axis."
            },
            {
              "name": "z",
              "type": "number",
              "doc": "Rotation on Z axis."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "getRotation",
          "doc": "This method will set the euler rotation of the vob in the world.",
          "params": [],
          "returns": {
            "type": "table",
            "doc": "Table containing x,y,z rotation."
          }
        },
        {
          "name": "addToWorld",
          "doc": "This method will add the vob to the currently loaded world. If the vob is not added, it won't show up.",
          "params": [
            {
              "name": "parent",
              "type": "vob|nil",
              "doc": "Optional parent vob to attach to."
            }
          ],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "removeFromWorld",
          "doc": "This method will remove the vob from the currently loaded world.",
          "params": [],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        },
        {
          "name": "floor",
          "doc": "This method will try to put the vob on the floor. If the difference between vob position and the floor y position is <= 1000, the method succeeds.",
          "params": [],
          "returns": {
            "type": "nil",
            "doc": ""
          }
        }
      ],
      "callbacks": []
    }
  },
  "functions": [
    {
      "name": "getDistance2d",
      "doc": "This function returns the 2d distance between two points.",
      "side": "shared",
      "category": "Math",
      "params": [
        {
          "name": "x1",
          "type": "number",
          "doc": "The position on X axis of the first point."
        },
        {
          "name": "y1",
          "type": "number",
          "doc": "The position on Y axis of the first point."
        },
        {
          "name": "x2",
          "type": "number",
          "doc": "The position on X axis of the second point."
        },
        {
          "name": "y2",
          "type": "number",
          "doc": "The position on Y axis of the second point."
        }
      ],
      "returns": {
        "type": "number",
        "doc": "The distance between the two points."
      }
    },
    {
      "name": "getDistance3d",
      "doc": "This function returns the 3d distance between two points.",
      "side": "shared",
      "category": "Math",
      "params": [
        {
          "name": "x1",
          "type": "number",
          "doc": "The position on X axis of the first point."
        },
        {
          "name": "y1",
          "type": "number",
          "doc": "The position on Y axis of the first point."
        },
        {
          "name": "z1",
          "type": "number",
          "doc": "The position on Z axis of the first point."
        },
        {
          "name": "x2",
          "type": "number",
          "doc": "The position on X axis of the second point."
        },
        {
          "name": "y2",
          "type": "number",
          "doc": "The position on Y axis of the second point."
        },
        {
          "name": "z2",
          "type": "number",
          "doc": "The position on Z axis of the second point."
        }
      ],
      "returns": {
        "type": "number",
        "doc": "The distance between the two points."
      }
    },
    {
      "name": "getVectorAngle",
      "doc": "This function returns the angle on Y axis directed towards the second point.",
      "side": "shared",
      "category": "Math",
      "params": [
        {
          "name": "x1",
          "type": "number",
          "doc": "The position on X axis of the first point."
        },
        {
          "name": "y1",
          "type": "number",
          "doc": "The position on Y axis of the first point."
        },
        {
          "name": "x2",
          "type": "number",
          "doc": "The position on X axis of the second point."
        },
        {
          "name": "y2",
          "type": "number",
          "doc": "The position on Y axis of the second point."
        }
      ],
      "returns": {
        "type": "number",
        "doc": "The angle on Y axis directed towards the second point."
      }
    },
    {
      "name": "hexToRgb",
      "doc": "This function will convert a hex color string to an RGB table.",
      "side": "shared",
      "category": "Utility",
      "params": [
        {
          "name": "hex",
          "type": "string",
          "doc": "Hex color string (e.g. \"#RRGGBB\", \"0xRRGGBB\", or \"RGB\")."
        }
      ],
      "returns": {
        "type": "{r, g, b}|nil",
        "doc": "Table containing r, g, b components or nil on failure."
      }
    },
    {
      "name": "rgbToHex",
      "doc": "This function will convert RGB components to a lowercase hex color string.",
      "side": "shared",
      "category": "Utility",
      "params": [
        {
          "name": "r",
          "type": "number",
          "doc": "Red component (0-255)."
        },
        {
          "name": "g",
          "type": "number",
          "doc": "Green component (0-255)."
        },
        {
          "name": "b",
          "type": "number",
          "doc": "Blue component (0-255)."
        }
      ],
      "returns": {
        "type": "string",
        "doc": "Lowercase hexadecimal representation."
      }
    },
    {
      "name": "sscanf",
      "doc": "This function will split text according to a format string and return the parsed values.",
      "side": "shared",
      "category": "Utility",
      "params": [
        {
          "name": "format",
          "type": "string",
          "doc": "Format string where each specifier maps to a value. Supported specifiers: `d` (integer), `f` (number), `s` (string)."
        },
        {
          "name": "text",
          "type": "string",
          "doc": "Input text to parse."
        }
      ],
      "returns": {
        "type": "table|nil",
        "doc": "Array of parsed values, or nil on parse failure."
      }
    },
    {
      "name": "getTickCount",
      "doc": "This function will return the number of milliseconds since the scripting runtime started.",
      "side": "shared",
      "category": "Utility",
      "params": [],
      "returns": {
        "type": "number",
        "doc": "Milliseconds since startup."
      }
    },
    {
      "name": "sha256",
      "doc": "This function will calculate the SHA-256 hash of a string and return it as hex.",
      "side": "shared",
      "category": "Hash",
      "params": [
        {
          "name": "input",
          "type": "string",
          "doc": "Input text to hash."
        }
      ],
      "returns": {
        "type": "string",
        "doc": "Hexadecimal hash string."
      }
    },
    {
      "name": "sha512",
      "doc": "This function will calculate the SHA-512 hash of a string and return it as hex.",
      "side": "shared",
      "category": "Hash",
      "params": [
        {
          "name": "input",
          "type": "string",
          "doc": "Input text to hash."
        }
      ],
      "returns": {
        "type": "string",
        "doc": "Hexadecimal hash string."
      }
    },
    {
      "name": "setTimer",
      "doc": "This function will create a new timer that calls the given function at a fixed interval.\n\nThe timer passes any additional arguments to the callback when it executes.\nIf execute_times is 0 or negative, the timer repeats indefinitely.",
      "side": "shared",
      "category": "Timer",
      "params": [
        {
          "name": "func",
          "type": "fun",
          "doc": "Callback function executed by the timer."
        },
        {
          "name": "interval",
          "type": "number",
          "doc": "Interval in milliseconds."
        },
        {
          "name": "execute_times",
          "type": "number",
          "doc": "How many times to execute the callback (<= 0 means infinite)."
        },
        {
          "name": "...",
          "type": "...",
          "doc": "Additional arguments forwarded to the callback."
        }
      ],
      "returns": {
        "type": "number",
        "doc": "Timer ID."
      }
    },
    {
      "name": "killTimer",
      "doc": "This function will stop and remove an existing timer.",
      "side": "shared",
      "category": "Timer",
      "params": [
        {
          "name": "timer_id",
          "type": "number",
          "doc": "Timer ID returned by setTimer."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "setTimerInterval",
      "doc": "This function will set the interval (in milliseconds) of an existing timer.",
      "side": "shared",
      "category": "Timer",
      "params": [
        {
          "name": "timer_id",
          "type": "number",
          "doc": "Timer ID returned by setTimer."
        },
        {
          "name": "interval",
          "type": "number",
          "doc": "New interval in milliseconds."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getTimerInterval",
      "doc": "This function will return the interval (in milliseconds) of a timer, or nil if the timer does not exist.",
      "side": "shared",
      "category": "Timer",
      "params": [
        {
          "name": "timer_id",
          "type": "number",
          "doc": "Timer ID returned by setTimer."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Interval in milliseconds, or nil if not found."
      }
    },
    {
      "name": "setTimerExecuteTimes",
      "doc": "This function will set how many times the timer should execute.\nIf execute_times is 0 or negative, the timer repeats indefinitely.",
      "side": "shared",
      "category": "Timer",
      "params": [
        {
          "name": "timer_id",
          "type": "number",
          "doc": "Timer ID returned by setTimer."
        },
        {
          "name": "execute_times",
          "type": "number",
          "doc": "How many times to execute (<= 0 means infinite)."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getTimerExecuteTimes",
      "doc": "This function will return how many times the timer will execute, or nil if the timer does not exist.\nA value of 0 means the timer repeats indefinitely.",
      "side": "shared",
      "category": "Timer",
      "params": [
        {
          "name": "timer_id",
          "type": "number",
          "doc": "Timer ID returned by setTimer."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Execute count (0 = infinite), or nil if not found."
      }
    },
    {
      "name": "getHostname",
      "doc": "This function returns the host name of the server.",
      "side": "shared",
      "category": "Game",
      "params": [],
      "returns": {
        "type": "string",
        "doc": "Server hostname."
      }
    },
    {
      "name": "getMaxSlots",
      "doc": "This function returns the max number of slots available on the server.",
      "side": "shared",
      "category": "Game",
      "params": [],
      "returns": {
        "type": "number",
        "doc": "Max slots number on the server."
      }
    },
    {
      "name": "getOnlinePlayers",
      "doc": "This function returns the array containing player ids that are currently online.",
      "side": "shared",
      "category": "Game",
      "params": [],
      "returns": {
        "type": "table",
        "doc": "Table containing player ids."
      }
    },
    {
      "name": "getPlayersCount",
      "doc": "This function returns the number of online players on the server.",
      "side": "shared",
      "category": "Game",
      "params": [],
      "returns": {
        "type": "number",
        "doc": "Number of players on the server."
      }
    },
    {
      "name": "addEventHandler",
      "doc": "Bind function to specified event.",
      "side": "shared",
      "category": "Event",
      "params": [
        {
          "name": "eventName",
          "type": "string",
          "doc": "The name of the event."
        },
        {
          "name": "func",
          "type": "fun",
          "doc": "The reference to a function, keep in mind that function must have the same amount of arguments as event."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True on success, false on failure."
      }
    },
    {
      "name": "addEvent",
      "doc": "Register a new custom event with specified name.",
      "side": "shared",
      "category": "Event",
      "params": [
        {
          "name": "eventName",
          "type": "string",
          "doc": "The name of the event."
        },
        {
          "name": "allowRemoteTrigger",
          "type": "boolean",
          "doc": "Whether the event can be triggered remotely. (Optional)"
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True on success, false if the event already exists."
      }
    },
    {
      "name": "callEvent",
      "doc": "Call every handler bound to specified custom event.",
      "side": "shared",
      "category": "Event",
      "params": [
        {
          "name": "eventName",
          "type": "string",
          "doc": "The name of the event."
        },
        {
          "name": "arguments",
          "type": "...",
          "doc": "Variable number of arguments."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True when event was dispatched and not cancelled, otherwise false."
      }
    },
    {
      "name": "cancelEvent",
      "doc": "Cancel the current event.",
      "side": "shared",
      "category": "Event",
      "params": [],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "eventValue",
      "doc": "Set the event value.",
      "side": "shared",
      "category": "Event",
      "params": [
        {
          "name": "eventValue",
          "type": "number",
          "doc": "The new event value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "isEventCancelled",
      "doc": "Check if the event was cancelled.",
      "side": "shared",
      "category": "Event",
      "params": [],
      "returns": {
        "type": "boolean",
        "doc": "True if event was cancelled, otherwise false."
      }
    },
    {
      "name": "removeEvent",
      "doc": "Unregister a custom event with specified name.",
      "side": "shared",
      "category": "Event",
      "params": [
        {
          "name": "eventName",
          "type": "string",
          "doc": "The name of the event."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "removeEventHandler",
      "doc": "Unbind function from specified event.",
      "side": "shared",
      "category": "Event",
      "params": [
        {
          "name": "eventName",
          "type": "string",
          "doc": "The name of the event."
        },
        {
          "name": "func",
          "type": "fun",
          "doc": "The reference to a function."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True on success, false otherwise."
      }
    },
    {
      "name": "toggleEvent",
      "doc": "Toggle event (enable or disable it globally).",
      "side": "shared",
      "category": "Event",
      "params": [
        {
          "name": "eventName",
          "type": "string",
          "doc": "The name of the event."
        },
        {
          "name": "toggle",
          "type": "boolean",
          "doc": "False to disable the event, true to enable."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "LOG_ERROR",
      "doc": "Logs a message with ERROR severity.\n\nError messages indicate serious problems that prevent normal operation\nor cause a feature to fail.",
      "side": "shared",
      "category": "Log",
      "params": [
        {
          "name": "text",
          "type": "string",
          "doc": "Message text, may contain format specifiers."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "LOG_INFO",
      "doc": "Logs a message with INFO severity.\n\nInformational messages describe normal application behavior and\nimportant runtime events.",
      "side": "shared",
      "category": "Log",
      "params": [
        {
          "name": "text",
          "type": "string",
          "doc": "Message text, may contain format specifiers."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "LOG_DEBUG",
      "doc": "Logs a message with DEBUG severity.\n\nDebug messages provide diagnostic information useful during development\nand troubleshooting.",
      "side": "shared",
      "category": "Log",
      "params": [
        {
          "name": "text",
          "type": "string",
          "doc": "Message text, may contain format specifiers."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "LOG_CRITICAL",
      "doc": "Logs a message with CRITICAL severity.\n\nCritical messages report very severe errors that may require immediate\nattention or application shutdown.",
      "side": "shared",
      "category": "Log",
      "params": [
        {
          "name": "text",
          "type": "string",
          "doc": "Message text, may contain format specifiers."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "LOG_WARN",
      "doc": "Logs a message with WARN severity.\n\nWarning messages indicate potential problems or unusual situations that\ndo not immediately stop execution.",
      "side": "shared",
      "category": "Log",
      "params": [
        {
          "name": "text",
          "type": "string",
          "doc": "Message text, may contain format specifiers."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "LOG_TRACE",
      "doc": "Logs a message with TRACE severity.\n\nTrace messages provide very detailed output, typically used for\nlow-level debugging and deep diagnostics.",
      "side": "shared",
      "category": "Log",
      "params": [
        {
          "name": "text",
          "type": "string",
          "doc": "Message text, may contain format specifiers."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "triggerClientEvent",
      "doc": "This function will treigger a custom client-side event for one or more players and optionally passes arguments.",
      "side": "server",
      "category": "Network",
      "params": [
        {
          "name": "sendTo",
          "type": "number|{...}|nil",
          "doc": "Target player id, table of player ids, or nil to send to all players."
        },
        {
          "name": "eventName",
          "type": "string",
          "doc": "Name of the client-side event to trigger."
        },
        {
          "name": "sourceElement",
          "type": "number|nil",
          "doc": "Optional source element id. Use nil if not needed."
        },
        {
          "name": "...",
          "type": "...",
          "doc": "Optional arguments passed to the client event handler."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True if the event was sent successfully, otherwise false."
      }
    },
    {
      "name": "sendMessageToAll",
      "doc": "This function will send a colored chat message to all connected players.",
      "side": "server",
      "category": "Chat",
      "params": [
        {
          "name": "r",
          "type": "number",
          "doc": "Red component (0-255)."
        },
        {
          "name": "g",
          "type": "number",
          "doc": "Green component (0-255)."
        },
        {
          "name": "b",
          "type": "number",
          "doc": "Blue component (0-255)."
        },
        {
          "name": "text",
          "type": "string",
          "doc": "Message text to send."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "sendMessageToPlayer",
      "doc": "This function will send a colored chat message to a specific player.",
      "side": "server",
      "category": "Chat",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "r",
          "type": "number",
          "doc": "Red component (0-255)."
        },
        {
          "name": "g",
          "type": "number",
          "doc": "Green component (0-255)."
        },
        {
          "name": "b",
          "type": "number",
          "doc": "Blue component (0-255)."
        },
        {
          "name": "text",
          "type": "string",
          "doc": "Message text to send."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "sendPlayerMessageToAll",
      "doc": "This function will send a player-sourced colored message to all players (includes sender id).",
      "side": "server",
      "category": "Chat",
      "params": [
        {
          "name": "sender_id",
          "type": "number",
          "doc": "Sender player id."
        },
        {
          "name": "r",
          "type": "number",
          "doc": "Red component (0-255)."
        },
        {
          "name": "g",
          "type": "number",
          "doc": "Green component (0-255)."
        },
        {
          "name": "b",
          "type": "number",
          "doc": "Blue component (0-255)."
        },
        {
          "name": "text",
          "type": "string",
          "doc": "Message text."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "sendPlayerMessageToPlayer",
      "doc": "This function will send a player-sourced colored message to a specific player.",
      "side": "server",
      "category": "Chat",
      "params": [
        {
          "name": "sender_id",
          "type": "number",
          "doc": "Sender player id."
        },
        {
          "name": "receiver_id",
          "type": "number",
          "doc": "Receiver player id."
        },
        {
          "name": "r",
          "type": "number",
          "doc": "Red component (0-255)."
        },
        {
          "name": "g",
          "type": "number",
          "doc": "Green component (0-255)."
        },
        {
          "name": "b",
          "type": "number",
          "doc": "Blue component (0-255)."
        },
        {
          "name": "text",
          "type": "string",
          "doc": "Message text."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "spawnPlayer",
      "doc": "This function will spawn the player, optionally overriding the spawn position.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id to spawn."
        },
        {
          "name": "Optional",
          "type": "table",
          "doc": "position table or three numeric coords."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "setPlayerInstance",
      "doc": "This function will set the player's character instance.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "instance",
          "type": "string",
          "doc": "Instance name."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerInstance",
      "doc": "This function will return the player's instance name, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "string|nil",
        "doc": "Instance name or nil."
      }
    },
    {
      "name": "setPlayerName",
      "doc": "This function will set the player's character name.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "name",
          "type": "string",
          "doc": "New player name."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerName",
      "doc": "This function will return the player's name, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "string|nil",
        "doc": "Player name or nil."
      }
    },
    {
      "name": "getPlayerIP",
      "doc": "This function will return the player's IP address or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "string|nil",
        "doc": "Player IP or nil."
      }
    },
    {
      "name": "getPlayerMacAddress",
      "doc": "This function will return the player's MAC address or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "string|nil",
        "doc": "Player MAC address or nil."
      }
    },
    {
      "name": "getPlayerUUID",
      "doc": "This function will return the player's UUID or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "string|nil",
        "doc": "Player UUID or nil."
      }
    },
    {
      "name": "setPlayerColor",
      "doc": "This function will set the player's name color in RGB format.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "r",
          "type": "number",
          "doc": "Red (0-255)."
        },
        {
          "name": "g",
          "type": "number",
          "doc": "Green (0-255)."
        },
        {
          "name": "b",
          "type": "number",
          "doc": "Blue (0-255)."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerColor",
      "doc": "This function will return the player's name color, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "{r, g, b}|nil",
        "doc": "RGB color table or nil."
      }
    },
    {
      "name": "setPlayerHealth",
      "doc": "This function will set the player's current health.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "health",
          "type": "number",
          "doc": "New health value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerHealth",
      "doc": "This function will return the player's current health, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Health value or nil."
      }
    },
    {
      "name": "setPlayerMaxHealth",
      "doc": "This function will set the player's maximum health.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "max_health",
          "type": "number",
          "doc": "New maximum health."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerMaxHealth",
      "doc": "This function will return the player's maximum health, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Max health or nil."
      }
    },
    {
      "name": "setPlayerMana",
      "doc": "This function will set the player's current mana.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "mana",
          "type": "number",
          "doc": "New mana value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerMana",
      "doc": "This function will return the player's current mana, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Mana value or nil."
      }
    },
    {
      "name": "setPlayerMaxMana",
      "doc": "This function will set the player's maximum mana.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "max_mana",
          "type": "number",
          "doc": "New maximum mana."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerMaxMana",
      "doc": "This function will get the player's maximum mana, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Max mana or nil."
      }
    },
    {
      "name": "setPlayerStrength",
      "doc": "This function will set the player's strength attribute.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "strength",
          "type": "number",
          "doc": "New strength value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerStrength",
      "doc": "This function will return the player's strength attribute, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Strength value or nil."
      }
    },
    {
      "name": "setPlayerDexterity",
      "doc": "This function will set the player's dexterity attribute.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "dexterity",
          "type": "number",
          "doc": "New dexterity value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerDexterity",
      "doc": "This function will return the player's dexterity attribute, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Dexterity value or nil."
      }
    },
    {
      "name": "setPlayerSkillWeapon",
      "doc": "This function will set the player's weapon skill hit chance.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "skill_id",
          "type": "number",
          "doc": "Skill identifier, for more information check [Weapon Constants](../../shared-constants/Weapon.md)."
        },
        {
          "name": "percentage",
          "type": "number",
          "doc": "Hit chance amount."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerSkillWeapon",
      "doc": "This function will return the player's weapon skill hit chance, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "skill_id",
          "type": "number",
          "doc": "Skill identifier, for more information check [Weapon Constants](../../shared-constants/Weapon.md)."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Hit chance amount or nil."
      }
    },
    {
      "name": "setPlayerTalent",
      "doc": "This function will set the player's talent value.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "talent_id",
          "type": "number",
          "doc": "Talent identifier, for more information check [Talent Constants](../../shared-constants/Talent.md)."
        },
        {
          "name": "talent_value",
          "type": "number",
          "doc": "Talent value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerTalent",
      "doc": "This function will return the player's talent value, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "talent_id",
          "type": "number",
          "doc": "Talent identifier, for more information check [Talent Constants](../../shared-constants/Talent.md)."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Talent value or nil."
      }
    },
    {
      "name": "setPlayerLevel",
      "doc": "This function will set the player's level.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "level",
          "type": "number",
          "doc": "New level."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerLevel",
      "doc": "This function will return the player's level, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Level or nil."
      }
    },
    {
      "name": "setPlayerExp",
      "doc": "This function will set the player's experience points.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "exp",
          "type": "number",
          "doc": "New exp value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerExp",
      "doc": "This function will return the player's experience points, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Exp value or nil."
      }
    },
    {
      "name": "setPlayerNextLevelExp",
      "doc": "This function will set the experience required for the player's next level.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "next_level_exp",
          "type": "number",
          "doc": "Required exp for next level."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerNextLevelExp",
      "doc": "This function will return the experience required for the player's next level, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Next level exp or nil."
      }
    },
    {
      "name": "setPlayerLearnPoints",
      "doc": "This function will set the player's learn points.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "learn_points",
          "type": "number",
          "doc": "New learn points value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerLearnPoints",
      "doc": "This function will return the player's learn points, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Learn points or nil."
      }
    },
    {
      "name": "setPlayerVisual",
      "doc": "This function will set the player's visual model and textures.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "body_model",
          "type": "string",
          "doc": "Body model name."
        },
        {
          "name": "body_texture",
          "type": "number",
          "doc": "Body texture index."
        },
        {
          "name": "head_model",
          "type": "string",
          "doc": "Head model name."
        },
        {
          "name": "head_texture",
          "type": "number",
          "doc": "Head texture index."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerVisual",
      "doc": "This function will return the player's visual information as a table, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "{bodymodel, bodytexture, headmodel, headtexture}|nil",
        "doc": "Table with bodyModel, bodyTexture, headModel, headTexture or nil."
      }
    },
    {
      "name": "setPlayerFatness",
      "doc": "This function will set the player's model fatness.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "fatness",
          "type": "number",
          "doc": "Fatness value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerFatness",
      "doc": "This function will return the player's model fatness, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "float|nil",
        "doc": "Fatness value or nil."
      }
    },
    {
      "name": "setPlayerScale",
      "doc": "This function will set the player's model scale.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "x",
          "type": "number",
          "doc": "Scale factor on x axis."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Scale factor on y axis."
        },
        {
          "name": "z",
          "type": "number",
          "doc": "Scale factor on z axis."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerScale",
      "doc": "This function will return the player's model scale.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "{x, y, z}|nil",
        "doc": "Scale table or nil."
      }
    },
    {
      "name": "setPlayerWeaponMode",
      "doc": "This function will set the player's weapon mode.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "weapon_mode",
          "type": "number",
          "doc": "Weapon mode constant."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerWeaponMode",
      "doc": "This function will return the player's weapon mode, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Weapon mode or nil."
      }
    },
    {
      "name": "applyPlayerOverlay",
      "doc": "This function will apply animation overlay on the player.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "overlay",
          "type": "string",
          "doc": "Overlay name."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerOverlays",
      "doc": "This function will return the player's active animation overlays.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": ""
        }
      ],
      "returns": {
        "type": "{...}|nil",
        "doc": "Array of overlay names or nil."
      }
    },
    {
      "name": "removePlayerOverlay",
      "doc": "This function will remove a specified animation overlay from the player.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "overlay",
          "type": "string",
          "doc": "Overlay name."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "playAni",
      "doc": "This function will play an animation on the player's character.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "aniName",
          "type": "string",
          "doc": "Animation name (e.g. \"T_STAND_2_SIT\")."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "stopAni",
      "doc": "This function will stop a played animation on the player's character.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "aniName",
          "type": "string|nil",
          "doc": "Animation name to stop. Defaults to \"\" for first active animation."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "playFaceAni",
      "doc": "This function will play a face animation on the player's character.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "aniName",
          "type": "string",
          "doc": "Face animation name (e.g. \"S_FRIENDLY\")."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "stopFaceAni",
      "doc": "This function will stop a played face animation on the player's character.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "aniName",
          "type": "string|nil",
          "doc": "Face animation name to stop. Defaults to \"\" for first active animation."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "playGesticulation",
      "doc": "This function will play gesticulation animation on the player's character.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "setPlayerPosition",
      "doc": "This function will set the player's world position.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "x",
          "type": "number",
          "doc": "X coordinate."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Y coordinate."
        },
        {
          "name": "z",
          "type": "number",
          "doc": "Z coordinate."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerPosition",
      "doc": "This function will return the player's position, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "{x, y, z}|nil",
        "doc": "Table containing x,y,z or nil."
      }
    },
    {
      "name": "setPlayerAngle",
      "doc": "This function will set the player's facing angle (degrees).",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "angle_degrees",
          "type": "number",
          "doc": "Angle in degrees."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerAngle",
      "doc": "This function will return the player's facing angle in degrees, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Angle in degrees or nil."
      }
    },
    {
      "name": "setPlayerWorld",
      "doc": "This function will move the player to a different world, optionally specifying a start point.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "world",
          "type": "string",
          "doc": "World name."
        },
        {
          "name": "start_point",
          "type": "string",
          "doc": "Optional start point name."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerWorld",
      "doc": "This function will return the player's current world name, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "string|nil",
        "doc": "World name or nil."
      }
    },
    {
      "name": "setPlayerVirtualWorld",
      "doc": "This function will set the player's virtual world id.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "virtual_world",
          "type": "number",
          "doc": "Virtual world id (0-65535)."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerVirtualWorld",
      "doc": "This function will return the player's virtual world id, or nil if unavailable.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Virtual world id or nil."
      }
    },
    {
      "name": "ban",
      "doc": "This function will ban the player on the server.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "reason",
          "type": "string",
          "doc": "Optional reason why the player was banned."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "kick",
      "doc": "This function will kick the player from the server.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "reason",
          "type": "string",
          "doc": "Optional reason why the player was kicked."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "isPlayerConnected",
      "doc": "This function will check whether player is connected to the server.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True when player is connected, otherwise false."
      }
    },
    {
      "name": "isPlayerDead",
      "doc": "This function will check whether player is dead.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True when player is dead, otherwise false."
      }
    },
    {
      "name": "isPlayerSpawned",
      "doc": "This function will check whether player is spawned.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True when player is spawned, otherwise false."
      }
    },
    {
      "name": "isPlayerUnconscious",
      "doc": "This function will check whether player is in unconscious state. The player will be unconscious, when it gets beaten up, but not killed.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True when player is unconscious, otherwise false."
      }
    },
    {
      "name": "respawnPlayer",
      "doc": "This function will immediately respawn the player if he is dead.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "setPlayerRespawnTime",
      "doc": "This function will set the player time to respawn after death. If set to 0, respawn is disabled for selected player.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "respawn_time",
          "type": "number",
          "doc": "New respawn time in milliseconds."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerRespawnTime",
      "doc": "This function will return the player time to respawn after death.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "The player respawn time or nil if player isn't created."
      }
    },
    {
      "name": "giveItem",
      "doc": "This function will give an item to the player.",
      "side": "server",
      "category": "Inventory",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "instance",
          "type": "string",
          "doc": "Item instance name from scripts."
        },
        {
          "name": "amount",
          "type": "number",
          "doc": "Amount to give."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "equipItem",
      "doc": "This function will equip an item for the player.",
      "side": "server",
      "category": "Inventory",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "instance",
          "type": "string",
          "doc": "Item instance name from scripts."
        },
        {
          "name": "slot_id",
          "type": "number",
          "doc": "Optional slot id. Defaults to -1 for first free slot."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "unequipItem",
      "doc": "This function will unequip an item for the player.",
      "side": "server",
      "category": "Inventory",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "instance",
          "type": "string",
          "doc": "Item instance name from scripts."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "hasItem",
      "doc": "This function will return the amount of a specific item in the player's inventory.",
      "side": "server",
      "category": "Inventory",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "instance",
          "type": "string",
          "doc": "Item instance name from scripts."
        }
      ],
      "returns": {
        "type": "number",
        "doc": "Item amount or 0 if missing."
      }
    },
    {
      "name": "removeItem",
      "doc": "This function will remove an item from the player's inventory.",
      "side": "server",
      "category": "Inventory",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "instance",
          "type": "string",
          "doc": "Item instance name from scripts."
        },
        {
          "name": "amount",
          "type": "number",
          "doc": "Amount to remove."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "setServerWorld",
      "doc": "This function will set the server's current world name.",
      "side": "server",
      "category": "Game",
      "params": [
        {
          "name": "world",
          "type": "string",
          "doc": "World name to set."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True on success."
      }
    },
    {
      "name": "getServerWorld",
      "doc": "This function will return the server's current world name.",
      "side": "server",
      "category": "Game",
      "params": [],
      "returns": {
        "type": "string",
        "doc": "Current server world or empty string."
      }
    },
    {
      "name": "findNearbyPlayers",
      "doc": "This function will return player ids within a radius of a given position in a world.",
      "side": "server",
      "category": "Streamer",
      "params": [
        {
          "name": "position_table",
          "type": "table",
          "doc": "Table with x,y,z coordinates."
        },
        {
          "name": "radius",
          "type": "number",
          "doc": "Search radius."
        },
        {
          "name": "world",
          "type": "string",
          "doc": "World name to search in."
        },
        {
          "name": "virtual_world",
          "type": "number",
          "doc": "Optional virtual world id."
        }
      ],
      "returns": {
        "type": "table",
        "doc": "Array of player ids."
      }
    },
    {
      "name": "getSpawnedPlayersForPlayer",
      "doc": "This function will return the list of players that have been spawned for the given player.",
      "side": "server",
      "category": "Streamer",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "table",
        "doc": "Array of player ids."
      }
    },
    {
      "name": "getStreamedPlayersByPlayer",
      "doc": "This function will return the list of players currently streamed to the given player.",
      "side": "server",
      "category": "Streamer",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "table",
        "doc": "Array of player ids."
      }
    },
    {
      "name": "setTime",
      "doc": "This function will set the server time (hour, minute, optional day offset).",
      "side": "server",
      "category": "Game",
      "params": [
        {
          "name": "hour",
          "type": "number",
          "doc": "Hour (0-23)."
        },
        {
          "name": "min",
          "type": "number",
          "doc": "Minute (0-59)."
        },
        {
          "name": "day",
          "type": "number",
          "doc": "Optional day offset."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getTime",
      "doc": "This function will return the current server time as a table {day,hour,min}.",
      "side": "server",
      "category": "Game",
      "params": [],
      "returns": {
        "type": "table",
        "doc": "Table containing day, hour, min."
      }
    },
    {
      "name": "setDayLength",
      "doc": "This function will set the duration of a full in-game day in milliseconds.",
      "side": "server",
      "category": "Game",
      "params": [
        {
          "name": "miliseconds",
          "type": "number",
          "doc": "Day length in milliseconds (min 10000 ms)."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getDayLength",
      "doc": "This function will return the current duration of a full in-game day in milliseconds.",
      "side": "server",
      "category": "Game",
      "params": [],
      "returns": {
        "type": "number",
        "doc": "Day length in milliseconds."
      }
    },
    {
      "name": "JSON",
      "doc": "Open a JSON file relative to the server data directory.",
      "side": "server",
      "category": "File",
      "params": [
        {
          "name": "relative_path",
          "type": "string",
          "doc": "Path under the data directory."
        }
      ],
      "returns": {
        "type": "jsonfile|nil",
        "doc": "File handle or nil on error."
      }
    },
    {
      "name": "setWeatherType",
      "doc": "This function will set the desired weather type immediately.",
      "side": "server",
      "category": "Weather",
      "params": [
        {
          "name": "weather_type",
          "type": "number",
          "doc": "Weather type, for more information see [Weather Constants](../../shared-constants/Weather.md)"
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getWeatherType",
      "doc": "This function will return the current weather type.",
      "side": "server",
      "category": "Weather",
      "params": [],
      "returns": {
        "type": "number",
        "doc": "Current weather type."
      }
    },
    {
      "name": "setRainStartTime",
      "doc": "This function will set the sky weather time when it starts raining/snowing.",
      "side": "server",
      "category": "Weather",
      "params": [
        {
          "name": "hour",
          "type": "number",
          "doc": "The sky weather raining start hour."
        },
        {
          "name": "min",
          "type": "number",
          "doc": "The sky weather raining start min."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getRainStartTime",
      "doc": "This function will return the sky weather time when it starts raining/snowing.",
      "side": "server",
      "category": "Weather",
      "params": [],
      "returns": {
        "type": "table",
        "doc": "The sky weather raining start time."
      }
    },
    {
      "name": "setWindScale",
      "doc": "This function will change the wind scale used during raining/snowing.",
      "side": "server",
      "category": "Weather",
      "params": [
        {
          "name": "wind_scale",
          "type": "number",
          "doc": "Wind scale value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getWindScale",
      "doc": "This function will return the current wind scale.",
      "side": "server",
      "category": "Weather",
      "params": [],
      "returns": {
        "type": "number",
        "doc": "Current wind scale."
      }
    },
    {
      "name": "setDontRain",
      "doc": "This function will enable/disable weather completely.",
      "side": "server",
      "category": "Weather",
      "params": [
        {
          "name": "toggle",
          "type": "boolean",
          "doc": "True to disable weather, false to enable it."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getWaypoint",
      "doc": "Retrieve world position of a waypoint by name.",
      "side": "server",
      "category": "World",
      "params": [
        {
          "name": "world",
          "type": "string",
          "doc": "World name in which the waypoint exists."
        },
        {
          "name": "name",
          "type": "string",
          "doc": "Waypoint name."
        }
      ],
      "returns": {
        "type": "{x, y, z}|nil",
        "doc": "Waypoint position or nil."
      }
    },
    {
      "name": "getNearestWaypoint",
      "doc": "Retrieve nearest waypoint for a given position.",
      "side": "server",
      "category": "World",
      "params": [
        {
          "name": "world",
          "type": "string",
          "doc": "World name in which the waypoint exists."
        },
        {
          "name": "x",
          "type": "number",
          "doc": "Position X."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Position Y."
        },
        {
          "name": "z",
          "type": "number",
          "doc": "Position Z."
        },
        {
          "name": "distance",
          "type": "number|nil",
          "doc": "Optional maximum search distance."
        }
      ],
      "returns": {
        "type": "{name, x, y, z}|nil",
        "doc": "Waypoint information or nil."
      }
    },
    {
      "name": "getNextNearestWaypoint",
      "doc": "Retrieve second nearest waypoint for a given position.",
      "side": "server",
      "category": "World",
      "params": [
        {
          "name": "world",
          "type": "string",
          "doc": "World name in which the waypoint exists."
        },
        {
          "name": "x",
          "type": "number",
          "doc": "Position X."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Position Y."
        },
        {
          "name": "z",
          "type": "number",
          "doc": "Position Z."
        }
      ],
      "returns": {
        "type": "{name, x, y, z}|nil",
        "doc": "Waypoint information or nil."
      }
    },
    {
      "name": "setPlayerInstance",
      "doc": "This function will change the player/npc in-game instance.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "instance",
          "type": "string",
          "doc": "Instance name."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True on success, false otherwise."
      }
    },
    {
      "name": "getPlayerInstance",
      "doc": "This function will return the player/npc current instance, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "string|nil",
        "doc": "Instance name or nil."
      }
    },
    {
      "name": "setPlayerName",
      "doc": "This function will change the player/npc character name.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "name",
          "type": "string",
          "doc": "New player name."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True on success."
      }
    },
    {
      "name": "getPlayerName",
      "doc": "This function will return the player/npc current character name, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "string|nil",
        "doc": "Player name or nil."
      }
    },
    {
      "name": "setPlayerColor",
      "doc": "This function will change the player/npc character name color.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "r",
          "type": "number",
          "doc": "The red color component in RGB model."
        },
        {
          "name": "g",
          "type": "number",
          "doc": "The green color component in RGB model."
        },
        {
          "name": "b",
          "type": "number",
          "doc": "The blue color component in RGB model."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerColor",
      "doc": "This function will return the player/npc current character name color, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "{r, g, b}|nil",
        "doc": "Table containing color in RGB model or nil."
      }
    },
    {
      "name": "setPlayerHealth",
      "doc": "This function will set the player/npc health, not exceeding his current max health.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "health",
          "type": "number",
          "doc": "New health value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerHealth",
      "doc": "This function will return the player/npc current health, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Current health or nil."
      }
    },
    {
      "name": "setPlayerMaxHealth",
      "doc": "This function will set the player/npc maximum health. If the current health exceeds the new maximum, it will be clamped down to the new value.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "max_health",
          "type": "number",
          "doc": "New maximum health."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerMaxHealth",
      "doc": "This function will return the player/npc current maximum health, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Max health or nil."
      }
    },
    {
      "name": "setPlayerMana",
      "doc": "This function will set the player/npc mana, not exceeding his current max mana.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "mana",
          "type": "number",
          "doc": "Mana value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerMana",
      "doc": "This function will return the player/npc current mana, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Current mana or nil."
      }
    },
    {
      "name": "setPlayerMaxMana",
      "doc": "This function will set the player/npc maximum mana. If the current mana exceeds the new maximum, it will be clamped down to the new value.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "max_mana",
          "type": "number",
          "doc": "New maximum mana."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerMaxMana",
      "doc": "This function will return the player/npc current max mana, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Max mana or nil."
      }
    },
    {
      "name": "setPlayerStrength",
      "doc": "This function will set the player/npc strength attribute.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "strength",
          "type": "number",
          "doc": "Strength value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerStrength",
      "doc": "This function will return the player/npc strength attribute, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Strength value or nil."
      }
    },
    {
      "name": "setPlayerDexterity",
      "doc": "This function will set the player/npc dexterity attribute.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "dexterity",
          "type": "number",
          "doc": "Dexterity value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerDexterity",
      "doc": "This function will return the player/npc dexterity attribute, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Dexterity value or nil."
      }
    },
    {
      "name": "setPlayerSkillWeapon",
      "doc": "This function will set the player/npc weapon skill hit chance.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "skill_id",
          "type": "number",
          "doc": "Skill identifier."
        },
        {
          "name": "percentage",
          "type": "number",
          "doc": "Hit chance (0-100)."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerSkillWeapon",
      "doc": "This function will return the player/npc weapon skill hit chance, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "skill_id",
          "type": "number",
          "doc": "Skill identifier."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Hit chance (0-100) or nil."
      }
    },
    {
      "name": "setPlayerTalent",
      "doc": "This function will set the player/npc talent value.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "talent_id",
          "type": "number",
          "doc": "Talent identifier."
        },
        {
          "name": "talent_value",
          "type": "number",
          "doc": "Talent value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerTalent",
      "doc": "This function will return the player/npc talent value, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "talent_id",
          "type": "number",
          "doc": "Talent identifier."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Talent value or nil."
      }
    },
    {
      "name": "setPlayerLevel",
      "doc": "This function will set the player/npc level.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "level",
          "type": "number",
          "doc": "New level."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerLevel",
      "doc": "This function will return player/npc current level, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Level or nil."
      }
    },
    {
      "name": "setExp",
      "doc": "This function will set the hero's experience points.",
      "side": "client",
      "category": "Hero",
      "params": [
        {
          "name": "exp",
          "type": "number",
          "doc": "New exp value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getExp",
      "doc": "This function will return the hero's current experience point amount, or nil if unavailable.",
      "side": "client",
      "category": "Hero",
      "params": [],
      "returns": {
        "type": "number|nil",
        "doc": "Exp value or nil."
      }
    },
    {
      "name": "setNextLevelExp",
      "doc": "This function will set the experience required for the hero's next level.",
      "side": "client",
      "category": "Hero",
      "params": [
        {
          "name": "next_level_exp",
          "type": "number",
          "doc": "Required exp for next level."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getNextLevelExp",
      "doc": "This function will return the current experience required for the hero's next level, or nil if unavailable.",
      "side": "client",
      "category": "Hero",
      "params": [],
      "returns": {
        "type": "number|nil",
        "doc": "Next level exp or nil."
      }
    },
    {
      "name": "setLearnPoints",
      "doc": "This function will set the hero's learn points.",
      "side": "client",
      "category": "Hero",
      "params": [
        {
          "name": "learn_points",
          "type": "number",
          "doc": "New learn points value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getLearnPoints",
      "doc": "This function will return the hero's current learn points, or nil if unavailable.",
      "side": "client",
      "category": "Hero",
      "params": [],
      "returns": {
        "type": "number|nil",
        "doc": "Learn points or nil."
      }
    },
    {
      "name": "setPlayerVisual",
      "doc": "This function will set the player/npc visual model and textures.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "body_model",
          "type": "string",
          "doc": "Body model name."
        },
        {
          "name": "body_texture",
          "type": "number",
          "doc": "Body texture index."
        },
        {
          "name": "head_model",
          "type": "string",
          "doc": "Head model name."
        },
        {
          "name": "head_texture",
          "type": "number",
          "doc": "Head texture index."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerVisual",
      "doc": "This function will return the player/npc current visual model and textures, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "{body_model, body_texture, head_model, head_texture}|nil",
        "doc": "Player visual or nil."
      }
    },
    {
      "name": "setPlayerFatness",
      "doc": "This function will set the player/npc model fatness.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "fatness",
          "type": "number",
          "doc": "Fatness value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerFatness",
      "doc": "This function will return the player/npc current model fatness, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Player fatness or nil."
      }
    },
    {
      "name": "setPlayerScale",
      "doc": "This function will set the player/npc model scale.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "x",
          "type": "number",
          "doc": "Scale factor on x axis."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Scale factor on y axis."
        },
        {
          "name": "z",
          "type": "number",
          "doc": "Scale factor on z axis."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerScale",
      "doc": "This function will return the player/npc current model scale, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "{x, y, z}|nil",
        "doc": "Player scale or nil."
      }
    },
    {
      "name": "setPlayerWeaponMode",
      "doc": "This function will set the player/npc weapon mode for all players.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "weapon_mode",
          "type": "number",
          "doc": "Weapon mode constant."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerWeaponMode",
      "doc": "This function will return the player/npc current weapon mode, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Weapon mode or nil."
      }
    },
    {
      "name": "applyPlayerOverlay",
      "doc": "This function will apply an animation overlay on player (eg. \"HUMANS_MILITIA.MDS\").",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "overlay",
          "type": "string",
          "doc": "The name of overlay."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerOverlays",
      "doc": "This function will return the player/npc active animation overlays, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "{...}|nil",
        "doc": "Array of overlay names or nil."
      }
    },
    {
      "name": "removePlayerOverlay",
      "doc": "This function will remove specified animation overlay from the player.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "overlay",
          "type": "string",
          "doc": "The name of overlay."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "playAni",
      "doc": "This function will play an animation on the player/npc character.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "aniName",
          "type": "string",
          "doc": "Animation name (e.g. \"T_STAND_2_SIT\")."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "stopAni",
      "doc": "This function will stop a played animation on the player/npc character.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "aniName",
          "type": "string|nil",
          "doc": "Animation name to stop. Defaults to \"\" for first active animation."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "playFaceAni",
      "doc": "This function will play a face animation on the player/npc character.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "aniName",
          "type": "string",
          "doc": "Face animation name (e.g. \"S_FRIENDLY\")."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "stopFaceAni",
      "doc": "This function will stop a played face animation on the player/npc character.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "aniName",
          "type": "string|nil",
          "doc": "Face animation name to stop. Defaults to \"\" for first active animation."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "playGesticulation",
      "doc": "This function will play a gesticulation animation on the player/npc character.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "setPlayerPosition",
      "doc": "This function will set the player/npc world position.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "x",
          "type": "number",
          "doc": "X coordinate."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Y coordinate."
        },
        {
          "name": "z",
          "type": "number",
          "doc": "Z coordinate."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerPosition",
      "doc": "This function will return the player/npc current world position.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "{x,y,z}|nil",
        "doc": "Table with keys `x`,`y`,`z` or nil."
      }
    },
    {
      "name": "setPlayerAngle",
      "doc": "This function will set the player/npc facing angle in world space.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "angle",
          "type": "number",
          "doc": "Angle in radians."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getPlayerAngle",
      "doc": "This function will return the player/npc facing angle in world space, or nil if unavailable.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        }
      ],
      "returns": {
        "type": "number|nil",
        "doc": "Angle in radians or nil."
      }
    },
    {
      "name": "giveItem",
      "doc": "This function will give an item to the player or NPC on the client.",
      "side": "client",
      "category": "Inventory",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "instance",
          "type": "string",
          "doc": "Item instance name."
        },
        {
          "name": "amount",
          "type": "number",
          "doc": "Amount to give."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "equipItem",
      "doc": "This function will equip an item for the player/NPC.",
      "side": "client",
      "category": "Inventory",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "instance",
          "type": "string",
          "doc": "Item instance name."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "unequipItem",
      "doc": "This function will unequip an item from the player/NPC.",
      "side": "client",
      "category": "Inventory",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "instance",
          "type": "string",
          "doc": "Item instance name."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "hasItem",
      "doc": "This function will return the amount of a specific item in the player/npc inventory on the client.",
      "side": "client",
      "category": "Inventory",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "instance",
          "type": "string",
          "doc": "Item instance name."
        }
      ],
      "returns": {
        "type": "number",
        "doc": "Item amount or 0 if missing."
      }
    },
    {
      "name": "removeItem",
      "doc": "This function will remove an item from the player/npc inventory on the client.",
      "side": "client",
      "category": "Inventory",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Target player id."
        },
        {
          "name": "instance",
          "type": "string",
          "doc": "Item instance name."
        },
        {
          "name": "amount",
          "type": "number",
          "doc": "Amount to remove."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "clearInventory",
      "doc": "This function will remove all items from the hero's inventory.",
      "side": "client",
      "category": "Inventory",
      "params": [],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "changeWorld",
      "doc": "This function will change the player's current game world.",
      "side": "client",
      "category": "World",
      "params": [
        {
          "name": "world",
          "type": "string",
          "doc": "World filename."
        },
        {
          "name": "start_point",
          "type": "string|nil",
          "doc": "Optional start point name."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getWorld",
      "doc": "This function will return the current game world filename.",
      "side": "client",
      "category": "World",
      "params": [],
      "returns": {
        "type": "string",
        "doc": "World filename."
      }
    },
    {
      "name": "createNpc",
      "doc": "This function will create a client-side NPC entry and return an internal npc id (<0).",
      "side": "client",
      "category": "NPC",
      "params": [
        {
          "name": "name",
          "type": "string",
          "doc": "Name for the created NPC."
        }
      ],
      "returns": {
        "type": "number",
        "doc": "NPC id (starting from -1) or 0 on failure."
      }
    },
    {
      "name": "destroyNpc",
      "doc": "This function will destroy a client-side NPC`.",
      "side": "client",
      "category": "NPC",
      "params": [
        {
          "name": "npc_id",
          "type": "number",
          "doc": "NPC id."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True on success."
      }
    },
    {
      "name": "spawnNpc",
      "doc": "This function will spawn a previously created NPC into the world.",
      "side": "client",
      "category": "NPC",
      "params": [
        {
          "name": "npc_id",
          "type": "number",
          "doc": "NPC id."
        },
        {
          "name": "instance_name",
          "type": "string|nil",
          "doc": "Optional instance name (defaults to \"PC_HERO\")."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True if spawn attached to world."
      }
    },
    {
      "name": "unspawnNpc",
      "doc": "This function will unspawn a client NPC from the world.",
      "side": "client",
      "category": "NPC",
      "params": [
        {
          "name": "npc_id",
          "type": "number",
          "doc": "Internal npc id."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True on success."
      }
    },
    {
      "name": "setTime",
      "doc": "This function will set the in-game world time (hour, minute).",
      "side": "client",
      "category": "Game",
      "params": [
        {
          "name": "hour",
          "type": "number",
          "doc": "Hour component."
        },
        {
          "name": "minute",
          "type": "number",
          "doc": "Minute component."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getTime",
      "doc": "This function will return the current in-game world time.",
      "side": "client",
      "category": "Game",
      "params": [],
      "returns": {
        "type": "table",
        "doc": "Table containing hour and minute."
      }
    },
    {
      "name": "setDayLength",
      "doc": "This function will set the duration of an in-game day in milliseconds.",
      "side": "client",
      "category": "Game",
      "params": [
        {
          "name": "miliseconds",
          "type": "number",
          "doc": "Day length in milliseconds (min 10000 ms)."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getDayLength",
      "doc": "This function will return the current configured in-game day length in milliseconds.",
      "side": "client",
      "category": "Game",
      "params": [],
      "returns": {
        "type": "number",
        "doc": "Day length in milliseconds."
      }
    },
    {
      "name": "exitGame",
      "doc": "This function will close the game immediately.",
      "side": "client",
      "category": "Game",
      "params": [],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "clearMultiplayerMessages",
      "doc": "This function will clear multiplayer status messages shown while joining the server.",
      "side": "client",
      "category": "Game",
      "params": [],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "enableGMPMenu",
      "doc": "This function will enable/disable opening GMP menu with ESC.",
      "side": "client",
      "category": "Game",
      "params": [
        {
          "name": "enable",
          "type": "boolean",
          "doc": "True to allow ESC to open/close GMP menu, false to ignore ESC for GMP menu."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "openGMPMenu",
      "doc": "This function will force open GMP menu.",
      "side": "client",
      "category": "Game",
      "params": [],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "closeGMPMenu",
      "doc": "This function will force close GMP menu.",
      "side": "client",
      "category": "Game",
      "params": [],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "triggerServerEvent",
      "doc": "This function triggers a custom server-side event and optionally passes arguments.\nThe first argument is always the event name.",
      "side": "client",
      "category": "Network",
      "params": [
        {
          "name": "eventName",
          "type": "string",
          "doc": "Name of the server-side event to trigger."
        },
        {
          "name": "sourceElement",
          "type": "number|nil",
          "doc": "Optional source element id. Use nil if not needed."
        },
        {
          "name": "...",
          "type": "...",
          "doc": "Optional arguments passed to the server event handler."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True if the event was sent successfully, otherwise false."
      }
    },
    {
      "name": "anx",
      "doc": "This function will convert pixels to virtuals screen X dimension and return it as a result.\nVirtuals are special type of unit used by the game to position UI elements independent from game resolution.",
      "side": "client",
      "category": "Interface",
      "params": [
        {
          "name": "pixels",
          "type": "number",
          "doc": "The pixels to convert."
        }
      ],
      "returns": {
        "type": "number",
        "doc": "The virtuals after conversion."
      }
    },
    {
      "name": "any",
      "doc": "This function will convert pixels to virtuals on screen Y dimension and return it as a result.\nVirtuals are special type of unit used by the game to position UI elements independent from game resolution.",
      "side": "client",
      "category": "Interface",
      "params": [
        {
          "name": "pixels",
          "type": "number",
          "doc": "The pixels to convert."
        }
      ],
      "returns": {
        "type": "number",
        "doc": "The virtuals after conversion."
      }
    },
    {
      "name": "nax",
      "doc": "This function will convert virtuals to pixels on screen X dimension and return it as a result.",
      "side": "client",
      "category": "Interface",
      "params": [
        {
          "name": "virtuals",
          "type": "number",
          "doc": "The virtuals to convert."
        }
      ],
      "returns": {
        "type": "number",
        "doc": "The pixels after conversion."
      }
    },
    {
      "name": "nay",
      "doc": "This function will convert virtuals to pixels on screen Y dimension and return it as a result.",
      "side": "client",
      "category": "Interface",
      "params": [
        {
          "name": "virtuals",
          "type": "number",
          "doc": "The virtuals to convert."
        }
      ],
      "returns": {
        "type": "number",
        "doc": "The pixels after conversion."
      }
    },
    {
      "name": "setWeatherType",
      "doc": "This function will set the desired weather type immediately.",
      "side": "client",
      "category": "Weather",
      "params": [
        {
          "name": "weather_type",
          "type": "number",
          "doc": "Weather type (WEATHER_SNOW/WEATHER_RAIN or 0 to disable precipitation)."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getWeatherType",
      "doc": "This function will return the current weather type.",
      "side": "client",
      "category": "Weather",
      "params": [],
      "returns": {
        "type": "number",
        "doc": "Current weather type."
      }
    },
    {
      "name": "setRainStartTime",
      "doc": "This function will set the sky weather time when it starts raining/snowing.",
      "side": "client",
      "category": "Weather",
      "params": [
        {
          "name": "hour",
          "type": "number",
          "doc": "The sky weather raining start hour."
        },
        {
          "name": "min",
          "type": "number",
          "doc": "The sky weather raining start min."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getRainStartTime",
      "doc": "This function will return the configured sky weather time when it starts raining/snowing.",
      "side": "client",
      "category": "Weather",
      "params": [],
      "returns": {
        "type": "table",
        "doc": "The sky weather raining start time."
      }
    },
    {
      "name": "setWindScale",
      "doc": "This function will change the wind scale used during raining/snowing.",
      "side": "client",
      "category": "Weather",
      "params": [
        {
          "name": "wind_scale",
          "type": "number",
          "doc": "Wind scale value."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getWindScale",
      "doc": "This function will return the current wind scale.",
      "side": "client",
      "category": "Weather",
      "params": [],
      "returns": {
        "type": "number",
        "doc": "Current wind scale."
      }
    },
    {
      "name": "setDontRain",
      "doc": "This function will enable/disable weather completely.",
      "side": "client",
      "category": "Weather",
      "params": [
        {
          "name": "toggle",
          "type": "boolean",
          "doc": "True to disable weather, false to enable it."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True on success."
      }
    },
    {
      "name": "setFogColor",
      "doc": "This function will set the sky fog color day variation.",
      "side": "client",
      "category": "Sky",
      "params": [
        {
          "name": "id",
          "type": "number",
          "doc": "The id of fog color day variation."
        },
        {
          "name": "r",
          "type": "number",
          "doc": "The red color component in RGB model."
        },
        {
          "name": "g",
          "type": "number",
          "doc": "The green color component in RGB model."
        },
        {
          "name": "b",
          "type": "number",
          "doc": "The blue color component in RGB model."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "setCloudsColor",
      "doc": "This function will set the sky clouds color.",
      "side": "client",
      "category": "Sky",
      "params": [
        {
          "name": "r",
          "type": "number",
          "doc": "The red color component in RGB model."
        },
        {
          "name": "g",
          "type": "number",
          "doc": "The green color component in RGB model."
        },
        {
          "name": "b",
          "type": "number",
          "doc": "The blue color component in RGB model."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "setPlanetSize",
      "doc": "This function will set the planet size ratio.",
      "side": "client",
      "category": "Sky",
      "params": [
        {
          "name": "planetId",
          "type": "number",
          "doc": "The planet id, for more information see [Planet](../../client-constants/Sky.md) constants."
        },
        {
          "name": "size",
          "type": "number",
          "doc": "The size ratio."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "setPlanetColor",
      "doc": "This function will set the planet color.",
      "side": "client",
      "category": "Sky",
      "params": [
        {
          "name": "planetId",
          "type": "number",
          "doc": "The planet id, for more information see [Planet](../../client-constants/Sky.md) constants."
        },
        {
          "name": "r",
          "type": "number",
          "doc": "The red color component in RGBA model."
        },
        {
          "name": "g",
          "type": "number",
          "doc": "The green color component in RGBA model."
        },
        {
          "name": "b",
          "type": "number",
          "doc": "The blue color component in RGBA model."
        },
        {
          "name": "a",
          "type": "number",
          "doc": "The alpha color component in RGBA model."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "setPlanetTxt",
      "doc": "Set the planet texture.",
      "side": "client",
      "category": "Sky",
      "params": [
        {
          "name": "planetId",
          "type": "number",
          "doc": "The planet id, for more information see [Planet](../../client-constants/Sky.md) constants."
        },
        {
          "name": "texture",
          "type": "string",
          "doc": "Name of the texture."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "setLightingColor",
      "doc": "This function will set the sky lighting color.",
      "side": "client",
      "category": "Sky",
      "params": [
        {
          "name": "r",
          "type": "number",
          "doc": "The red color component in RGB model."
        },
        {
          "name": "g",
          "type": "number",
          "doc": "The green color component in RGB model."
        },
        {
          "name": "b",
          "type": "number",
          "doc": "The blue color component in RGB model."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "toggleDrawWaynet",
      "doc": "This function will enable/disable waynet rendering.",
      "side": "client",
      "category": "Game",
      "params": [
        {
          "name": "enabled",
          "type": "boolean",
          "doc": "True to render waynet, false to disable."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getWaypoint",
      "doc": "This function will return world position of a waypoint by name.",
      "side": "client",
      "category": "World",
      "params": [
        {
          "name": "name",
          "type": "string",
          "doc": "Waypoint name."
        }
      ],
      "returns": {
        "type": "{x, y, z}|nil",
        "doc": "Waypoint position table or nil."
      }
    },
    {
      "name": "getNearestWaypoint",
      "doc": "This function will return the nearest waypoint for a given position.",
      "side": "client",
      "category": "World",
      "params": [
        {
          "name": "x",
          "type": "number",
          "doc": "Position X."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Position Y."
        },
        {
          "name": "z",
          "type": "number",
          "doc": "Position Z."
        },
        {
          "name": "distance",
          "type": "number|nil",
          "doc": "Optional maximum search distance."
        }
      ],
      "returns": {
        "type": "{name, x, y, z}|nil",
        "doc": "Waypoint information table or nil."
      }
    },
    {
      "name": "getNextNearestWaypoint",
      "doc": "This function will return the second nearest waypoint for a given position.",
      "side": "client",
      "category": "World",
      "params": [
        {
          "name": "x",
          "type": "number",
          "doc": "Position X."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Position Y."
        },
        {
          "name": "z",
          "type": "number",
          "doc": "Position Z."
        }
      ],
      "returns": {
        "type": "{name, x, y, z}|nil",
        "doc": "Waypoint information table or nil."
      }
    },
    {
      "name": "getWaypoints",
      "doc": "This function will return the list of all waypoints from current world.",
      "side": "client",
      "category": "World",
      "params": [],
      "returns": {
        "type": "table",
        "doc": "Table of waypoints {name, x, y, z}."
      }
    },
    {
      "name": "keyPressed",
      "doc": "This function will check whether the specified keyboard key is pressed.",
      "side": "client",
      "category": "Input",
      "params": [
        {
          "name": "key",
          "type": "number",
          "doc": "The key code to check. For more information about key codes, see [Key Constants](../../client-constants/Key.md)."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True if the key is currently pressed, false otherwise."
      }
    },
    {
      "name": "keyToggled",
      "doc": "This function will check whether the specified keyboard key was toggled from unpressed to pressed state.",
      "side": "client",
      "category": "Input",
      "params": [
        {
          "name": "key",
          "type": "number",
          "doc": "The key code to check. For more information about key codes, see [Key Constants](../../client-constants/Key.md)."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True if the key was toggled, false otherwise."
      }
    },
    {
      "name": "disableControls",
      "doc": "This functiuon will disable/enable default game actions that are bound to keys.",
      "side": "client",
      "category": "Input",
      "params": [
        {
          "name": "True",
          "type": "boolean",
          "doc": "when you want to disable game keys, otherwise false."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True on success."
      }
    },
    {
      "name": "isControlsDisabled",
      "doc": "This function will check whether default game actions are disabled.",
      "side": "client",
      "category": "Input",
      "params": [],
      "returns": {
        "type": "boolean",
        "doc": "True when disabled, otherwise false."
      }
    },
    {
      "name": "disableKey",
      "doc": "This function will disable/enable specified keyboard key, like: ESCAPE, TAB, etc.",
      "side": "client",
      "category": "Input",
      "params": [
        {
          "name": "keyId",
          "type": "number",
          "doc": "The key code to disable. For more information about key codes, see [Key Constants](../../client-constants/Key.md)."
        },
        {
          "name": "toggle",
          "type": "boolean",
          "doc": "True when you want to disable specified keyboard key, otherwise false"
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True on success."
      }
    },
    {
      "name": "isKeyDisabled",
      "doc": "This function will check whether the specified keyboard key is disabled.",
      "side": "client",
      "category": "Input",
      "params": [
        {
          "name": "keyId",
          "type": "number",
          "doc": "The key code to check. For more information about key codes, see [Key Constants](../../client-constants/Key.md)."
        }
      ],
      "returns": {
        "type": "boolean",
        "doc": "True when disabled, otherwise false."
      }
    },
    {
      "name": "setCursorPosition",
      "doc": "This function will set the cursor position in virtual (screen-scaled) coordinates.",
      "side": "client",
      "category": "Cursor",
      "params": [
        {
          "name": "x",
          "type": "number",
          "doc": "X position."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Y position."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getCursorPosition",
      "doc": "This function will return the current cursor position in virtual (screen-scaled) coordinates.",
      "side": "client",
      "category": "Cursor",
      "params": [],
      "returns": {
        "type": "table",
        "doc": "X and Y position."
      }
    },
    {
      "name": "setCursorPositionPx",
      "doc": "This function will set the cursor position in pixel coordinates.",
      "side": "client",
      "category": "Cursor",
      "params": [
        {
          "name": "x",
          "type": "number",
          "doc": "X position in pixels."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Y position in pixels."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getCursorPositionPx",
      "doc": "This function will return the current cursor position in pixel coordinates.",
      "side": "client",
      "category": "Cursor",
      "params": [],
      "returns": {
        "type": "table",
        "doc": "X and Y position in pixels."
      }
    },
    {
      "name": "setCursorSize",
      "doc": "This function will set the cursor size in virtual units.",
      "side": "client",
      "category": "Cursor",
      "params": [
        {
          "name": "width",
          "type": "number",
          "doc": "Cursor width."
        },
        {
          "name": "height",
          "type": "number",
          "doc": "Cursor height."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getCursorSize",
      "doc": "This function will return the cursor size in virtual (screen-scaled) units.",
      "side": "client",
      "category": "Cursor",
      "params": [],
      "returns": {
        "type": "table",
        "doc": "Cursor width and height."
      }
    },
    {
      "name": "setCursorSizePx",
      "doc": "This function will set the cursor size in pixel units.",
      "side": "client",
      "category": "Cursor",
      "params": [
        {
          "name": "width",
          "type": "number",
          "doc": "Cursor width in pixels."
        },
        {
          "name": "height",
          "type": "number",
          "doc": "Cursor height in pixels."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getCursorSizePx",
      "doc": "This function will return the cursor size in pixel units.",
      "side": "client",
      "category": "Cursor",
      "params": [],
      "returns": {
        "type": "table",
        "doc": "Cursor width and height in pixels."
      }
    },
    {
      "name": "setCursorTxt",
      "doc": "This function will set the cursor texture.",
      "side": "client",
      "category": "Cursor",
      "params": [
        {
          "name": "file",
          "type": "string",
          "doc": "Texture file name."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getCursorTxt",
      "doc": "This function will return the current cursor texture.",
      "side": "client",
      "category": "Cursor",
      "params": [],
      "returns": {
        "type": "string",
        "doc": "Texture file name."
      }
    },
    {
      "name": "setCursorVisible",
      "doc": "This function will set whether the cursor is visible.",
      "side": "client",
      "category": "Cursor",
      "params": [
        {
          "name": "toggle",
          "type": "boolean",
          "doc": "True to show the cursor, false to hide it."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "isCursorVisible",
      "doc": "This function will return whether the cursor is currently visible.",
      "side": "client",
      "category": "Cursor",
      "params": [],
      "returns": {
        "type": "boolean",
        "doc": "True if the cursor is visible."
      }
    },
    {
      "name": "setCursorSensitivity",
      "doc": "This function will set the cursor movement sensitivity.",
      "side": "client",
      "category": "Cursor",
      "params": [
        {
          "name": "sensitivity",
          "type": "number",
          "doc": "Cursor sensitivity multiplier."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    },
    {
      "name": "getCursorSensitivity",
      "doc": "This function will return the cursor movement sensitivity.",
      "side": "client",
      "category": "Cursor",
      "params": [],
      "returns": {
        "type": "number",
        "doc": "Cursor sensitivity multiplier."
      }
    },
    {
      "name": "isMouseBtnPressed",
      "doc": "This function will return whether a mouse button is currently pressed.",
      "side": "client",
      "category": "Cursor",
      "params": [
        {
          "name": "button",
          "type": "number",
          "doc": "Mouse button identifier."
        }
      ],
      "returns": {
        "type": "nil",
        "doc": ""
      }
    }
  ],
  "globals": [
    {
      "name": "heroId",
      "doc": "Represents the client player id.\n\nUse it, to manipulate the hero (local player) with player functions, e.g: [setPlayerPosition](../client-functions/player/setPlayerPosition.md).",
      "side": "client",
      "category": "Uncategorized",
      "params": [],
      "returns": {
        "type": "number",
        "doc": ""
      }
    }
  ],
  "events": [
    {
      "name": "onTick",
      "doc": "This event is triggered in every server main loop iteration.",
      "side": "server",
      "category": "Game",
      "params": [],
      "cancellable": false
    },
    {
      "name": "onClockUpdate",
      "doc": "This event is triggered every time the server clock updates.",
      "side": "server",
      "category": "Game",
      "params": [
        {
          "name": "day",
          "type": "number",
          "doc": "The current ingame day."
        },
        {
          "name": "hour",
          "type": "number",
          "doc": "The current ingame hour."
        },
        {
          "name": "min",
          "type": "number",
          "doc": "The current ingame minute."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerConnect",
      "doc": "This event is triggered when a player connects to the server.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "The id of the player that connected."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerDisconnect",
      "doc": "This event is triggered when a player disconnects from the server.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "The id of the player that disconnected."
        },
        {
          "name": "reason",
          "type": "number",
          "doc": "The reason why player got disconnected. See Network constants."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerMessage",
      "doc": "This event is triggered when a player sends a chat message.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "The id of the player who sent the message."
        },
        {
          "name": "text",
          "type": "string",
          "doc": "The message text."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerCommand",
      "doc": "This event is triggered when a player issues a command.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "The id of the player issuing the command."
        },
        {
          "name": "command",
          "type": "string",
          "doc": "The command name."
        },
        {
          "name": "params",
          "type": "table",
          "doc": "Command parameters."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerDeath",
      "doc": "This event is triggered when a player dies.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "The id of the player who died."
        },
        {
          "name": "killer_id",
          "type": "number",
          "doc": "Optional id of the killer (nil if none)."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerStandUp",
      "doc": "This event is triggered when a player stands up after being unconscious.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "The id of the player who stood up."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerUnconscious",
      "doc": "This event is triggered when a player becomes unconscious.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "attacker_id",
          "type": "number",
          "doc": "Optional attacker id (nil if none)."
        },
        {
          "name": "victim_id",
          "type": "number",
          "doc": "Victim player id."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerDropItem",
      "doc": "This event is triggered when a player drops an item.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id who dropped the item."
        },
        {
          "name": "item_instance",
          "type": "number",
          "doc": "Item instance id."
        },
        {
          "name": "amount",
          "type": "number",
          "doc": "Amount dropped."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerTakeItem",
      "doc": "This event is triggered when a player picks up an item.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id who took the item."
        },
        {
          "name": "item_instance",
          "type": "number",
          "doc": "Item instance id."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerCastSpell",
      "doc": "This event is triggered when a player casts a spell.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "caster_id",
          "type": "number",
          "doc": "Caster player id."
        },
        {
          "name": "spell_id",
          "type": "number",
          "doc": "Spell identifier."
        },
        {
          "name": "target_id",
          "type": "number",
          "doc": "Optional target player id (nil if none)."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerChangeHealth",
      "doc": "This event is triggered when player health changes.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "The id of the player whose health points got changed."
        },
        {
          "name": "oldHP",
          "type": "number",
          "doc": "The previous health points of the player."
        },
        {
          "name": "newHP",
          "type": "number",
          "doc": "The new health points of the player."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerChangeMana",
      "doc": "This event is triggered when player mana changes.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "The id of the player whose mana points got changed."
        },
        {
          "name": "previous",
          "type": "number",
          "doc": "The previous mana points of the player."
        },
        {
          "name": "current",
          "type": "number",
          "doc": "The current mana points of the player."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerChangeWorld",
      "doc": "This event is triggered when player tries to change the played world (ZEN).",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "The id of the player who tries to change the played world."
        },
        {
          "name": "world",
          "type": "string",
          "doc": "The filename of the world."
        },
        {
          "name": "waypoint",
          "type": "string",
          "doc": "The name of the waypoint that the player will be teleported to."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerWeaponModeChange",
      "doc": "This event is triggered when a player's weapon mode changes.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id."
        },
        {
          "name": "old_mode",
          "type": "number",
          "doc": "Previous weapon mode."
        },
        {
          "name": "new_mode",
          "type": "number",
          "doc": "New weapon mode."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerAmuletChange",
      "doc": "This event is triggered when a player's amulet changes.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id."
        },
        {
          "name": "instance",
          "type": "number|nil",
          "doc": "New amulet instance id (nil if none)."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerArmorChange",
      "doc": "This event is triggered when a player's armor changes.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id."
        },
        {
          "name": "instance",
          "type": "number|nil",
          "doc": "New armor instance id (nil if none)."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerBeltChange",
      "doc": "This event is triggered when a player's belt changes.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id."
        },
        {
          "name": "instance",
          "type": "number|nil",
          "doc": "New belt instance id (nil if none)."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerHandItemChange",
      "doc": "This event is triggered when a player's hand item changes.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id."
        },
        {
          "name": "hand",
          "type": "number",
          "doc": "Hand id (0 = left, 1 = right)."
        },
        {
          "name": "instance",
          "type": "number|nil",
          "doc": "New hand item instance id (nil if none)."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerHelmetChange",
      "doc": "This event is triggered when a player's helmet changes.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id."
        },
        {
          "name": "instance",
          "type": "number|nil",
          "doc": "New helmet instance id (nil if none)."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerMeleeWeaponChange",
      "doc": "This event is triggered when a player's melee weapon changes.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id."
        },
        {
          "name": "instance",
          "type": "number|nil",
          "doc": "New melee weapon instance id (nil if none)."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerRangedWeaponChange",
      "doc": "This event is triggered when a player's ranged weapon changes.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id."
        },
        {
          "name": "instance",
          "type": "number|nil",
          "doc": "New ranged weapon instance id (nil if none)."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerRingChange",
      "doc": "This event is triggered when a player's ring changes.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id."
        },
        {
          "name": "hand_id",
          "type": "number",
          "doc": "Hand id (0 = left, 1 = right)."
        },
        {
          "name": "instance",
          "type": "number|nil",
          "doc": "New ring instance id (nil if none)."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerShieldChange",
      "doc": "This event is triggered when a player's shield changes.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id."
        },
        {
          "name": "instance",
          "type": "number|nil",
          "doc": "New shield instance id (nil if none)."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerSpellSlotChange",
      "doc": "This event is triggered when a player's active spell slot changes.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id."
        },
        {
          "name": "slot_id",
          "type": "number",
          "doc": "Active spell slot id."
        },
        {
          "name": "instance",
          "type": "number|nil",
          "doc": "Spell instance id (nil if none)."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerSpawn",
      "doc": "This event is triggered when a player spawns (initial spawn).",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id spawned."
        },
        {
          "name": "x",
          "type": "number",
          "doc": "X coordinate of spawn."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Y coordinate of spawn."
        },
        {
          "name": "z",
          "type": "number",
          "doc": "Z coordinate of spawn."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerRespawn",
      "doc": "This event is triggered when a player respawns.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id respawned."
        },
        {
          "name": "x",
          "type": "number",
          "doc": "X coordinate of respawn."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Y coordinate of respawn."
        },
        {
          "name": "z",
          "type": "number",
          "doc": "Z coordinate of respawn."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerSpawnFor",
      "doc": "This event is triggered when a player is spawned for another player (streaming in).",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id receiving the spawn."
        },
        {
          "name": "spawn_id",
          "type": "number",
          "doc": "Player id spawned for the receiver."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerUnspawnFor",
      "doc": "This event is triggered when a player is unspawned for another player (streaming out).",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "Player id losing the spawn."
        },
        {
          "name": "spawn_id",
          "type": "number",
          "doc": "Player id removed for the receiver."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerHit",
      "doc": "This event is triggered when a player is hit.",
      "side": "server",
      "category": "Player",
      "params": [
        {
          "name": "attacker_id",
          "type": "number",
          "doc": "Optional attacker id (nil if none)."
        },
        {
          "name": "victim_id",
          "type": "number",
          "doc": "Victim player id."
        },
        {
          "name": "damage",
          "type": "number",
          "doc": "Damage dealt."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onInit",
      "doc": "This event is triggered once when the player connects to the server.",
      "side": "client",
      "category": "Game",
      "params": [],
      "cancellable": false
    },
    {
      "name": "onExit",
      "doc": "This event is triggered when the player disconnects from the server.",
      "side": "client",
      "category": "Game",
      "params": [],
      "cancellable": false
    },
    {
      "name": "onRender",
      "doc": "This event is triggered each frame.",
      "side": "client",
      "category": "Game",
      "params": [],
      "cancellable": false
    },
    {
      "name": "onTime",
      "doc": "This event is triggered each time the game time minute passes.",
      "side": "client",
      "category": "Game",
      "params": [
        {
          "name": "day",
          "type": "number",
          "doc": "The current in-game day."
        },
        {
          "name": "hour",
          "type": "number",
          "doc": "The current in-game hour."
        },
        {
          "name": "min",
          "type": "number",
          "doc": "The current in-game minute."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onWeatherChange",
      "doc": "This event is triggered when weather changes.",
      "side": "client",
      "category": "Weather",
      "params": [
        {
          "name": "old_weather_type",
          "type": "number",
          "doc": "Previous weather type."
        },
        {
          "name": "new_weather_type",
          "type": "number",
          "doc": "New weather type."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onKeyDown",
      "doc": "This event is triggered when a key is pressed.",
      "side": "client",
      "category": "Input",
      "params": [
        {
          "name": "key",
          "type": "number",
          "doc": "The key code pressed."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onKeyUp",
      "doc": "This event is triggered when a key is released.",
      "side": "client",
      "category": "Input",
      "params": [
        {
          "name": "key",
          "type": "number",
          "doc": "The key code released."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onMouseDown",
      "doc": "This event is triggered when a mouse button is pressed.",
      "side": "client",
      "category": "Mouse",
      "params": [
        {
          "name": "button",
          "type": "number",
          "doc": "The mouse button pressed."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onMouseUp",
      "doc": "This event is triggered when a mouse button is released.",
      "side": "client",
      "category": "Mouse",
      "params": [
        {
          "name": "button",
          "type": "number",
          "doc": "The mouse button released."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onMouseMove",
      "doc": "This event is triggered when the mouse cursor is moved.",
      "side": "client",
      "category": "Mouse",
      "params": [
        {
          "name": "x",
          "type": "number",
          "doc": "Cursor X position."
        },
        {
          "name": "y",
          "type": "number",
          "doc": "Cursor Y position."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onMouseWheel",
      "doc": "This event is triggered when the mouse wheel is scrolled.",
      "side": "client",
      "category": "Mouse",
      "params": [
        {
          "name": "z",
          "type": "number",
          "doc": "Mouse wheel delta."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onOpenInventory",
      "doc": "This event is triggered when the user opens the inventory.",
      "side": "client",
      "category": "Inventory",
      "params": [],
      "cancellable": false
    },
    {
      "name": "onCloseInventory",
      "doc": "This event is triggered when the user closes the inventory.",
      "side": "client",
      "category": "Inventory",
      "params": [],
      "cancellable": false
    },
    {
      "name": "onInventorySlotChange",
      "doc": "This event is triggered when the selected inventory slot changes.",
      "side": "client",
      "category": "Inventory",
      "params": [
        {
          "name": "from",
          "type": "number",
          "doc": "Previous slot number."
        },
        {
          "name": "to",
          "type": "number",
          "doc": "Current slot number."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onWorldChange",
      "doc": "This event is triggered when the client requests a world change via oCTriggerChangeLevel vob.",
      "side": "client",
      "category": "World",
      "params": [
        {
          "name": "world",
          "type": "string",
          "doc": "New world filename."
        },
        {
          "name": "waypoint",
          "type": "string",
          "doc": "Waypoint name the player will be teleported to."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onWorldEnter",
      "doc": "This event is triggered when the player enters a world.",
      "side": "client",
      "category": "World",
      "params": [
        {
          "name": "world",
          "type": "string",
          "doc": "World filename."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onEquip",
      "doc": "This event is triggered when the hero equips an item.",
      "side": "client",
      "category": "Hero",
      "params": [
        {
          "name": "item",
          "type": "string",
          "doc": "Item instance."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onDropItem",
      "doc": "This event is triggered when the hero drops an item.",
      "side": "client",
      "category": "Hero",
      "params": [
        {
          "name": "item",
          "type": "string",
          "doc": "Item instance."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onTakeItem",
      "doc": "This event is triggered when the hero takes an item from the ground.",
      "side": "client",
      "category": "Hero",
      "params": [
        {
          "name": "item",
          "type": "string",
          "doc": "Item instance."
        },
        {
          "name": "synchronized",
          "type": "boolean",
          "doc": "True when pickup is synchronized with the server."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onUseItem",
      "doc": "This event is triggered when the hero uses, interacts with, opens, or consumes an item.",
      "side": "client",
      "category": "Hero",
      "params": [
        {
          "name": "item",
          "type": "string",
          "doc": "Item instance."
        },
        {
          "name": "scheme",
          "type": "string",
          "doc": "Item scheme name, if available."
        },
        {
          "name": "from",
          "type": "number",
          "doc": "Previous interact state."
        },
        {
          "name": "to",
          "type": "number",
          "doc": "Current interact state."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onUnequip",
      "doc": "This event is triggered when the hero unequips an item.",
      "side": "client",
      "category": "Hero",
      "params": [
        {
          "name": "item",
          "type": "string",
          "doc": "Item instance."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerCreate",
      "doc": "This event is triggered when a player object is created locally.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "The local player id."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerDestroy",
      "doc": "This event is triggered when a local player object is destroyed.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "player_id",
          "type": "number",
          "doc": "The local player id."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerMessage",
      "doc": "This event is triggered when a chat message is received locally.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "sender_id",
          "type": "number",
          "doc": "Optional sender id (nil for system)."
        },
        {
          "name": "r",
          "type": "number",
          "doc": "The red color component in RGB model."
        },
        {
          "name": "g",
          "type": "number",
          "doc": "The green color component in RGB model."
        },
        {
          "name": "b",
          "type": "number",
          "doc": "The blue color component in RGB model."
        },
        {
          "name": "message",
          "type": "string",
          "doc": "Message text."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerRespawn",
      "doc": "This event is triggered when a player respawns after death.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "id",
          "type": "number",
          "doc": "The id of the respawned player."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerSpawn",
      "doc": "This event is triggered when a player is spawned into the world.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "id",
          "type": "number",
          "doc": "The id of the spawned player."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerDead",
      "doc": "This event is triggered when a player or NPC dies.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "id",
          "type": "number",
          "doc": "The id of the player who died."
        }
      ],
      "cancellable": false
    },
    {
      "name": "onPlayerChangePing",
      "doc": "This event is triggered when the client receives a ping update for a player.",
      "side": "client",
      "category": "Player",
      "params": [
        {
          "name": "id",
          "type": "number",
          "doc": "The id of the player."
        },
        {
          "name": "ping",
          "type": "number",
          "doc": "The player's ping."
        }
      ],
      "cancellable": false
    }
  ],
  "constants": {
    "shared": {
      "Talent": [
        {
          "name": "TALENT_UNKNOWN",
          "doc": "Unknown talent."
        },
        {
          "name": "TALENT_1H",
          "doc": "One-handed weapon talent."
        },
        {
          "name": "TALENT_2H",
          "doc": "Two-handed weapon talent."
        },
        {
          "name": "TALENT_BOW",
          "doc": "Bow talent."
        },
        {
          "name": "TALENT_CROSSBOW",
          "doc": "Crossbow talent."
        },
        {
          "name": "TALENT_PICK_LOCKS",
          "doc": "Lockpicking talent."
        },
        {
          "name": "TALENT_PICKPOCKET",
          "doc": "Pickpocket talent."
        },
        {
          "name": "TALENT_MAGE",
          "doc": "Mage talent."
        },
        {
          "name": "TALENT_SNEAK",
          "doc": "Sneak talent."
        },
        {
          "name": "TALENT_REGENERATE",
          "doc": "Regeneration talent."
        },
        {
          "name": "TALENT_FIREMASTER",
          "doc": "Fire master talent."
        },
        {
          "name": "TALENT_ACROBATIC",
          "doc": "Acrobatics talent."
        },
        {
          "name": "TALENT_PICKPOCKET_UNUSED",
          "doc": "Pickpocket (unused) talent."
        },
        {
          "name": "TALENT_SMITH",
          "doc": "Smithing talent."
        },
        {
          "name": "TALENT_RUNES",
          "doc": "Rune usage talent."
        },
        {
          "name": "TALENT_ALCHEMY",
          "doc": "Alchemy talent."
        },
        {
          "name": "TALENT_THROPHY",
          "doc": "Trophy hunting talent."
        },
        {
          "name": "TALENT_A",
          "doc": "Talent A (reserved)."
        },
        {
          "name": "TALENT_B",
          "doc": "Talent B (reserved)."
        },
        {
          "name": "TALENT_C",
          "doc": "Talent C (reserved)."
        },
        {
          "name": "TALENT_D",
          "doc": "Talent D (reserved)."
        },
        {
          "name": "TALENT_E",
          "doc": "Talent E (reserved)."
        },
        {
          "name": "TALENT_MAX",
          "doc": "Maximum talent value / sentinel."
        }
      ],
      "Weapon": [
        {
          "name": "WEAPON_1H",
          "doc": "One-handed weapon type."
        },
        {
          "name": "WEAPON_2H",
          "doc": "Two-handed weapon type."
        },
        {
          "name": "WEAPON_BOW",
          "doc": "Bow weapon type."
        },
        {
          "name": "WEAPON_CBOW",
          "doc": "Crossbow weapon type."
        }
      ],
      "Damage": [
        {
          "name": "DAMAGE_INVALID",
          "doc": "Invalid damage type."
        },
        {
          "name": "DAMAGE_BARRIER",
          "doc": "Barrier damage type."
        },
        {
          "name": "DAMAGE_BLUNT",
          "doc": "Blunt damage type."
        },
        {
          "name": "DAMAGE_EDGE",
          "doc": "Edge (slashing) damage type."
        },
        {
          "name": "DAMAGE_FIRE",
          "doc": "Fire damage type."
        },
        {
          "name": "DAMAGE_FLY",
          "doc": "Fly / impact damage type."
        },
        {
          "name": "DAMAGE_MAGIC",
          "doc": "Magic damage type."
        },
        {
          "name": "DAMAGE_POINT",
          "doc": "Point (piercing) damage type."
        },
        {
          "name": "DAMAGE_FALL",
          "doc": "Fall damage type."
        }
      ],
      "Item": [
        {
          "name": "ITEM_CAT_NONE",
          "doc": "No item category."
        },
        {
          "name": "ITEM_CAT_NF",
          "doc": "Item category: NF."
        },
        {
          "name": "ITEM_CAT_FF",
          "doc": "Item category: FF."
        },
        {
          "name": "ITEM_CAT_MUN",
          "doc": "Item category: ammunition."
        },
        {
          "name": "ITEM_CAT_ARMOR",
          "doc": "Item category: armor."
        },
        {
          "name": "ITEM_CAT_FOOD",
          "doc": "Item category: food."
        },
        {
          "name": "ITEM_CAT_DOCS",
          "doc": "Item category: documents."
        },
        {
          "name": "ITEM_CAT_POTION",
          "doc": "Item category: potion."
        },
        {
          "name": "ITEM_CAT_LIGHT",
          "doc": "Item category: light."
        },
        {
          "name": "ITEM_CAT_RUNE",
          "doc": "Item category: rune."
        },
        {
          "name": "ITEM_CAT_MAGIC",
          "doc": "Item category: magic."
        },
        {
          "name": "ITEM_FLAG_DAG",
          "doc": "Item flag: dagger."
        },
        {
          "name": "ITEM_FLAG_SWD",
          "doc": "Item flag: sword."
        },
        {
          "name": "ITEM_FLAG_AXE",
          "doc": "Item flag: axe."
        },
        {
          "name": "ITEM_FLAG_2HD_SWD",
          "doc": "Item flag: two-handed sword."
        },
        {
          "name": "ITEM_FLAG_2HD_AXE",
          "doc": "Item flag: two-handed axe."
        },
        {
          "name": "ITEM_FLAG_SHIELD",
          "doc": "Item flag: shield."
        },
        {
          "name": "ITEM_FLAG_BOW",
          "doc": "Item flag: bow."
        },
        {
          "name": "ITEM_FLAG_CROSSBOW",
          "doc": "Item flag: crossbow."
        },
        {
          "name": "ITEM_FLAG_RING",
          "doc": "Item flag: ring."
        },
        {
          "name": "ITEM_FLAG_AMULET",
          "doc": "Item flag: amulet."
        },
        {
          "name": "ITEM_FLAG_BELT",
          "doc": "Item flag: belt."
        },
        {
          "name": "ITEM_FLAG_DROPPED",
          "doc": "Item flag: dropped item."
        },
        {
          "name": "ITEM_FLAG_MI",
          "doc": "Item flag: mission item."
        },
        {
          "name": "ITEM_FLAG_MULTI",
          "doc": "Item flag: multi-item."
        },
        {
          "name": "ITEM_FLAG_NFOCUS",
          "doc": "Item flag: no focus."
        },
        {
          "name": "ITEM_FLAG_CREATEAMMO",
          "doc": "Item flag: creates ammo."
        },
        {
          "name": "ITEM_FLAG_NSPLIT",
          "doc": "Item flag: no split."
        },
        {
          "name": "ITEM_FLAG_DRINK",
          "doc": "Item flag: drinkable."
        },
        {
          "name": "ITEM_FLAG_TORCH",
          "doc": "Item flag: torch."
        },
        {
          "name": "ITEM_FLAG_THROW",
          "doc": "Item flag: throwable."
        },
        {
          "name": "ITEM_FLAG_ACTIVE",
          "doc": "Item flag: active item."
        },
        {
          "name": "ITEM_WEAR_NO",
          "doc": "Item wear slot: none."
        },
        {
          "name": "ITEM_WEAR_TORSO",
          "doc": "Item wear slot: torso."
        },
        {
          "name": "ITEM_WEAR_HEAD",
          "doc": "Item wear slot: head."
        },
        {
          "name": "ITEM_WEAR_LIGHT",
          "doc": "Item wear slot: light."
        }
      ],
      "WeaponMode": [
        {
          "name": "WEAPONMODE_NONE",
          "doc": "No weapon mode."
        },
        {
          "name": "WEAPONMODE_FIST",
          "doc": "Fist weapon mode."
        },
        {
          "name": "WEAPONMODE_DAG",
          "doc": "Dagger weapon mode."
        },
        {
          "name": "WEAPONMODE_1HS",
          "doc": "One-handed sword weapon mode."
        },
        {
          "name": "WEAPONMODE_2HS",
          "doc": "Two-handed sword weapon mode."
        },
        {
          "name": "WEAPONMODE_BOW",
          "doc": "Bow weapon mode."
        },
        {
          "name": "WEAPONMODE_CBOW",
          "doc": "Crossbow weapon mode."
        },
        {
          "name": "WEAPONMODE_MAG",
          "doc": "Magic weapon mode."
        },
        {
          "name": "WEAPONMODE_MAX",
          "doc": "Maximum weapon mode value / sentinel."
        }
      ],
      "Weather": [
        {
          "name": "WEATHER_SNOW",
          "doc": "Represents snowing weather type."
        },
        {
          "name": "WEATHER_RAIN",
          "doc": "Represents raining weather type."
        }
      ]
    },
    "server": {
      "Network": [
        {
          "name": "DISCONNECTED",
          "doc": "Represents disconnected player state."
        },
        {
          "name": "LOST_CONNECTION",
          "doc": "Represents lost connection player state."
        },
        {
          "name": "HAS_CRASHED",
          "doc": "Represents crash player state."
        }
      ]
    },
    "client": {
      "Sky": [
        {
          "name": "PLANET_SUN",
          "doc": "Represents planet sun type."
        },
        {
          "name": "PLANET_MOON",
          "doc": "Represents planet moon type."
        }
      ],
      "Key": [
        {
          "name": "KEY_ESCAPE",
          "doc": "Escape key."
        },
        {
          "name": "KEY_1",
          "doc": "Number key 1."
        },
        {
          "name": "KEY_2",
          "doc": "Number key 2."
        },
        {
          "name": "KEY_3",
          "doc": "Number key 3."
        },
        {
          "name": "KEY_4",
          "doc": "Number key 4."
        },
        {
          "name": "KEY_5",
          "doc": "Number key 5."
        },
        {
          "name": "KEY_6",
          "doc": "Number key 6."
        },
        {
          "name": "KEY_7",
          "doc": "Number key 7."
        },
        {
          "name": "KEY_8",
          "doc": "Number key 8."
        },
        {
          "name": "KEY_9",
          "doc": "Number key 9."
        },
        {
          "name": "KEY_0",
          "doc": "Number key 0."
        },
        {
          "name": "KEY_MINUS",
          "doc": "Minus key."
        },
        {
          "name": "KEY_EQUALS",
          "doc": "Equals key."
        },
        {
          "name": "KEY_BACK",
          "doc": "Backspace key."
        },
        {
          "name": "KEY_TAB",
          "doc": "Tab key."
        },
        {
          "name": "KEY_Q",
          "doc": "Letter key Q."
        },
        {
          "name": "KEY_W",
          "doc": "Letter key W."
        },
        {
          "name": "KEY_E",
          "doc": "Letter key E."
        },
        {
          "name": "KEY_R",
          "doc": "Letter key R."
        },
        {
          "name": "KEY_T",
          "doc": "Letter key T."
        },
        {
          "name": "KEY_Y",
          "doc": "Letter key Y."
        },
        {
          "name": "KEY_U",
          "doc": "Letter key U."
        },
        {
          "name": "KEY_I",
          "doc": "Letter key I."
        },
        {
          "name": "KEY_O",
          "doc": "Letter key O."
        },
        {
          "name": "KEY_P",
          "doc": "Letter key P."
        },
        {
          "name": "KEY_LBRACKET",
          "doc": "Left bracket key."
        },
        {
          "name": "KEY_RBRACKET",
          "doc": "Right bracket key."
        },
        {
          "name": "KEY_RETURN",
          "doc": "Enter / Return key."
        },
        {
          "name": "KEY_LCONTROL",
          "doc": "Left Control key."
        },
        {
          "name": "KEY_A",
          "doc": "Letter key A."
        },
        {
          "name": "KEY_S",
          "doc": "Letter key S."
        },
        {
          "name": "KEY_D",
          "doc": "Letter key D."
        },
        {
          "name": "KEY_F",
          "doc": "Letter key F."
        },
        {
          "name": "KEY_G",
          "doc": "Letter key G."
        },
        {
          "name": "KEY_H",
          "doc": "Letter key H."
        },
        {
          "name": "KEY_J",
          "doc": "Letter key J."
        },
        {
          "name": "KEY_K",
          "doc": "Letter key K."
        },
        {
          "name": "KEY_L",
          "doc": "Letter key L."
        },
        {
          "name": "KEY_SEMICOLON",
          "doc": "Semicolon key."
        },
        {
          "name": "KEY_APOSTROPHE",
          "doc": "Apostrophe key."
        },
        {
          "name": "KEY_GRAVE",
          "doc": "Grave accent key."
        },
        {
          "name": "KEY_LSHIFT",
          "doc": "Left Shift key."
        },
        {
          "name": "KEY_BACKSLASH",
          "doc": "Backslash key."
        },
        {
          "name": "KEY_Z",
          "doc": "Letter key Z."
        },
        {
          "name": "KEY_X",
          "doc": "Letter key X."
        },
        {
          "name": "KEY_C",
          "doc": "Letter key C."
        },
        {
          "name": "KEY_V",
          "doc": "Letter key V."
        },
        {
          "name": "KEY_B",
          "doc": "Letter key B."
        },
        {
          "name": "KEY_N",
          "doc": "Letter key N."
        },
        {
          "name": "KEY_M",
          "doc": "Letter key M."
        },
        {
          "name": "KEY_COMMA",
          "doc": "Comma key."
        },
        {
          "name": "KEY_PERIOD",
          "doc": "Period key."
        },
        {
          "name": "KEY_SLASH",
          "doc": "Slash key."
        },
        {
          "name": "KEY_RSHIFT",
          "doc": "Right Shift key."
        },
        {
          "name": "KEY_LMENU",
          "doc": "Left Alt key."
        },
        {
          "name": "KEY_SPACE",
          "doc": "Spacebar key."
        },
        {
          "name": "KEY_CAPITAL",
          "doc": "Caps Lock key."
        },
        {
          "name": "KEY_F1",
          "doc": "Function key F1."
        },
        {
          "name": "KEY_F2",
          "doc": "Function key F2."
        },
        {
          "name": "KEY_F3",
          "doc": "Function key F3."
        },
        {
          "name": "KEY_F4",
          "doc": "Function key F4."
        },
        {
          "name": "KEY_F5",
          "doc": "Function key F5."
        },
        {
          "name": "KEY_F6",
          "doc": "Function key F6."
        },
        {
          "name": "KEY_F7",
          "doc": "Function key F7."
        },
        {
          "name": "KEY_F8",
          "doc": "Function key F8."
        },
        {
          "name": "KEY_F9",
          "doc": "Function key F9."
        },
        {
          "name": "KEY_F10",
          "doc": "Function key F10."
        },
        {
          "name": "KEY_F11",
          "doc": "Function key F11."
        },
        {
          "name": "KEY_F12",
          "doc": "Function key F12."
        }
      ],
      "Mouse": [
        {
          "name": "MOUSE_DX",
          "doc": "Mouse delta X movement."
        },
        {
          "name": "MOUSE_DY",
          "doc": "Mouse delta Y movement."
        },
        {
          "name": "MOUSE_UP",
          "doc": "Mouse movement up."
        },
        {
          "name": "MOUSE_DOWN",
          "doc": "Mouse movement down."
        },
        {
          "name": "MOUSE_LEFT",
          "doc": "Mouse left direction."
        },
        {
          "name": "MOUSE_RIGHT",
          "doc": "Mouse right direction."
        },
        {
          "name": "MOUSE_WHEELUP",
          "doc": "Mouse wheel scroll up."
        },
        {
          "name": "MOUSE_WHEELDOWN",
          "doc": "Mouse wheel scroll down."
        },
        {
          "name": "MOUSE_BUTTONLEFT",
          "doc": "Mouse left button."
        },
        {
          "name": "MOUSE_BUTTONRIGHT",
          "doc": "Mouse right button."
        },
        {
          "name": "MOUSE_BUTTONMID",
          "doc": "Mouse middle button."
        },
        {
          "name": "MOUSE_XBUTTON1",
          "doc": "Mouse extra button 1."
        },
        {
          "name": "MOUSE_XBUTTON2",
          "doc": "Mouse extra button 2."
        },
        {
          "name": "MOUSE_XBUTTON3",
          "doc": "Mouse extra button 3."
        },
        {
          "name": "MOUSE_XBUTTON4",
          "doc": "Mouse extra button 4."
        },
        {
          "name": "MOUSE_XBUTTON5",
          "doc": "Mouse extra button 5."
        }
      ],
      "LogicalKey": [
        {
          "name": "GAME_LEFT",
          "doc": "Move left action."
        },
        {
          "name": "GAME_RIGHT",
          "doc": "Move right action."
        },
        {
          "name": "GAME_UP",
          "doc": "Move up action."
        },
        {
          "name": "GAME_DOWN",
          "doc": "Move down action."
        },
        {
          "name": "GAME_ACTION",
          "doc": "Primary action."
        },
        {
          "name": "GAME_SLOW",
          "doc": "Slow movement / walk modifier."
        },
        {
          "name": "GAME_ACTION2",
          "doc": "Secondary action."
        },
        {
          "name": "GAME_WEAPON",
          "doc": "Weapon action."
        },
        {
          "name": "GAME_SMOVE",
          "doc": "Strafe movement."
        },
        {
          "name": "GAME_SMOVE2",
          "doc": "Alternate strafe movement."
        },
        {
          "name": "GAME_SHIFT",
          "doc": "Shift modifier."
        },
        {
          "name": "GAME_END",
          "doc": "End action."
        },
        {
          "name": "GAME_INVENTORY",
          "doc": "Open inventory."
        },
        {
          "name": "GAME_LOOK",
          "doc": "Look mode."
        },
        {
          "name": "GAME_SNEAK",
          "doc": "Sneak mode."
        },
        {
          "name": "GAME_STRAFELEFT",
          "doc": "Strafe left."
        },
        {
          "name": "GAME_STRAFERIGHT",
          "doc": "Strafe right."
        },
        {
          "name": "GAME_SCREEN_STATUS",
          "doc": "Show status screen."
        },
        {
          "name": "GAME_SCREEN_LOG",
          "doc": "Show log screen."
        },
        {
          "name": "GAME_SCREEN_MAP",
          "doc": "Show map screen."
        },
        {
          "name": "GAME_LOOK_FP",
          "doc": "First-person look."
        },
        {
          "name": "GAME_LOCK_TARGET",
          "doc": "Lock target."
        },
        {
          "name": "GAME_PARADE",
          "doc": "Parry / block action."
        },
        {
          "name": "GAME_ACTIONLEFT",
          "doc": "Left-hand action."
        },
        {
          "name": "GAME_ACTIONRIGHT",
          "doc": "Right-hand action."
        },
        {
          "name": "GAME_LAME_POTION",
          "doc": "Use potion."
        },
        {
          "name": "GAME_LAME_HEAL",
          "doc": "Use healing item."
        }
      ]
    }
  }
}