LibRPC: Difference between revisions
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
Library used to execute functions or script send from server. Available with npc v1.6 beta onwards. For squirrel gamemode, see [[RFC]]. | Library used to execute functions or script send from server. Available with npc v1.6 beta onwards. For squirrel gamemode, see [[RFC]]. | ||
==Functions == | |||
From v1.6 beta 4 and rpclib(plugin version 0x1100) onwards, npc can remotely execute functions of server, provided the server runs squirrel gamemode and player.IsAdmin=true for npc. The following functions are added to npcscripts: | |||
*[[LibRPC_F|F]] | |||
*[[LibRPC_RFC|RFC]] | |||
==ServerData Identifier== | ==ServerData Identifier== | ||
LibRPC when loaded works on server data whose first four bytes is the following: | LibRPC when loaded works on server data whose first four bytes is the following: | ||
Revision as of 07:04, 3 May 2023
Library used to execute functions or script send from server. Available with npc v1.6 beta onwards. For squirrel gamemode, see RFC.
Functions
From v1.6 beta 4 and rpclib(plugin version 0x1100) onwards, npc can remotely execute functions of server, provided the server runs squirrel gamemode and player.IsAdmin=true for npc. The following functions are added to npcscripts:
ServerData Identifier
LibRPC when loaded works on server data whose first four bytes is the following:
| Offset | Type | Value |
|---|---|---|
| 0 | Integer | 0x40000000 |
ServerData structure
| Offset | Type | Value | |
|---|---|---|---|
| 4 | Character | 'F' or 'G' | Function |
Function structure
'F' type function
F type functions are those functions to be called through a name, ( unlike to be called through other methods see 'G' type functions ). The function name is encoded from offset 7.
| Offset^ | Type | Value |
|---|---|---|
| 0 | Character | 'F' |
| 1-4 | Unsigned Integer | size of the function buffer |
| 5-6 | unsigned short | length of the function name |
| 7 - 7+len(funcname)-1 | characters | Function Name |
| 7+len - ... | ... | ... |
^Offset relative to this buffer and not relative to ServerData ( complete buffer. )
'G' type function
G type functions (The name G because character F already taken ). They are functions returned by another function. So the buffer of the G type function contain another function which is first called and its return value, if it is a function, is then called. They can be said to be second order functions.
| Offset^ | Type | Value |
|---|---|---|
| 0 | Character | 'G' |
| 1-4 | Unsigned Integer | size of the buffer |
| 5 | Character | 'G' or 'F' |
| ... | ... | ... |
^Offset relative to 'G' function buffer and not relative to complete buffer of ServerData. Functions of higher order can be called through this method.
Example
| Offset | Value | Explanation |
|---|---|---|
| 0-3 | 00 00 00 40 |
0x40000000 |
| 4 | 46 | F |
| 5-8 | 00 00 00 0f | len of func buffer |
| 9-10 | 00 05 | len of func name (11-15) |
| 11-15 | 70 72 69 6e 74 | p r i n t |
| 16 | 73 | s (for string) |
| 17 | 00 05 | len of string (19-23) |
| 19-23 | 48 65 6c 6c 6f | H e l l o |
Other structures
String
| Offset^ | Type | Value |
|---|---|---|
| 0 | char | 's' |
| 1-2 | unsigned short | len of string |
| 3 - 3+len of string-1 | char sequence | the string |
Integers
| Offset^ | Type | Value |
|---|---|---|
| 0 | char | 'i' |
| 1-4 | int | integer |
Float
| Offset^ | Type | Value |
|---|---|---|
| 0 | char | 'f' |
| 1-4 | float | floating point number |
null
| Offset^ | Type | Value |
|---|---|---|
| 0 | char | 'o' |
bool
| Offset^ | Type | Value |
|---|---|---|
| 0 | char | 'b' |
| 1 | unsigned char | 0 or 1 |
Vector
| Offset^ | Type | Value |
|---|---|---|
| 0 | char | 'v' |
| 1-4 | float | Vector.x |
| 5-8 | float | Vector.y |
| 9-12 | float | Vector.z |
Quaternion
| Offset^ | Type | Value |
|---|---|---|
| 0 | char | 'q' |
| 1-4 | float | Quaternion.x |
| 5-8 | float | Quaternion.y |
| 9-12 | float | Quaternion.z |
| 13-16 | float | Quaternion.w |
Arrays
| Offset^ | Type | Value |
|---|---|---|
| 0 | char | 'a' |
| 1-4 | unsigned int | length of the array stream |
| 5 | char | ... |
^All Offsets relative to respective type buffers.