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.