LibRPC Examples: Difference between revisions

From NPC for VCMP 0.4 Servers
Jump to navigation Jump to search
No edit summary
Line 13: Line 13:
It is for this reason that new function Fa is introduced.
It is for this reason that new function Fa is introduced.
</poem>
</poem>
==The Working==
This leads to error
<source>Fa("MyFunction")(m, p1, p2, ... )</source>
because the key MyFunction will be looked inside table m. So if MyFunction is in roottable, the correct code will be
<source>Fa(F("rawget")("MyFunction"))(m, p1, p2, ... )</source>
When the parameter is not "string", then it will work as expected.
Let us see an example. Suppose that in roottable of server a table 'C' exists which has a slot named 'a' whose value is 3.
Now we are changing that value on server console from npc ( npc must be admin to print. Not only print, but actually for executing any functions remotely )
<source>
RFC("print")( Fa("rawget")( F("rawget")("C"), "a" ) )
</source>

Revision as of 00:25, 8 June 2023

The new version of LibRPC (of this article) is about to be released

New functions Fa, RFCa was added to library for raw calling of functions with a specified environment class or instance. Earlier the 'this' was always the roottable. By using "compilestring", one do not need Fa and RFCa.

The Problem

F("MyFunction")(p1, p2, ... )
On serverside, it is equivalent to
MyFunction.call(getroottable(), p1, p2, ... )

Suppose i want to callMyFunction.call(m, p1, p2, ... ) where m is a table other than roottable. Then it was not possible.
It is for this reason that new function Fa is introduced.

The Working

This leads to error

Fa("MyFunction")(m, p1, p2, ... )

because the key MyFunction will be looked inside table m. So if MyFunction is in roottable, the correct code will be

Fa(F("rawget")("MyFunction"))(m, p1, p2, ... )

When the parameter is not "string", then it will work as expected. Let us see an example. Suppose that in roottable of server a table 'C' exists which has a slot named 'a' whose value is 3. Now we are changing that value on server console from npc ( npc must be admin to print. Not only print, but actually for executing any functions remotely )

RFC("print")( Fa("rawget")( F("rawget")("C"), "a" ) )