@@ -60,6 +60,9 @@ public void EmitTypeImports(CodeBuilder cb, IEnumerable<string> enumTypes, IEnum
6060
6161 public void EmitClassStart ( CodeBuilder cb , string className , string ? baseClass , ClassKind kind )
6262 {
63+ // Emit native aliases at the top of the file
64+ RawNativeBuilder . EmitLuaAliases ( cb ) ;
65+
6366 switch ( kind )
6467 {
6568 case ClassKind . Handle :
@@ -152,6 +155,30 @@ public void EmitClassEnd(CodeBuilder cb, string className, ClassKind kind)
152155 cb . Dedent ( ) ;
153156 cb . AppendLine ( "end" ) ;
154157 }
158+ else if ( kind == ClassKind . Handle && className == "Player" )
159+ {
160+ cb . AppendLine ( ) ;
161+ cb . AppendLine ( "---Gets the player's server ID. In multiplayer, this is the player's unique server-side identifier." ) ;
162+ cb . AppendLine ( "---@return number" ) ;
163+ cb . AppendLine ( "function Player:getServerId()" ) ;
164+ cb . Indent ( ) ;
165+ // GET_PLAYER_SERVER_ID = 0x4D97BCC7 (CFX native)
166+ cb . AppendLine ( "return inv(0x4D97BCC7, self.handle, rai())" ) ;
167+ cb . Dedent ( ) ;
168+ cb . AppendLine ( "end" ) ;
169+ }
170+ else if ( kind == ClassKind . Handle && className == "Entity" )
171+ {
172+ cb . AppendLine ( ) ;
173+ cb . AppendLine ( "---Gets the network ID of this entity for network synchronization." ) ;
174+ cb . AppendLine ( "---@return number" ) ;
175+ cb . AppendLine ( "function Entity:getNetworkId()" ) ;
176+ cb . Indent ( ) ;
177+ // NETWORK_GET_NETWORK_ID_FROM_ENTITY = 0xF260AF6F43953316
178+ cb . AppendLine ( "return inv(0xF260AF6F43953316, self.handle, rai())" ) ;
179+ cb . Dedent ( ) ;
180+ cb . AppendLine ( "end" ) ;
181+ }
155182
156183 cb . AppendLine ( $ "return { className } ") ;
157184 }
@@ -199,8 +226,8 @@ public void EmitFromNetworkIdMethod(CodeBuilder cb, string className)
199226 cb . Indent ( ) ;
200227 // NETWORK_DOES_ENTITY_EXIST_WITH_NETWORK_ID = 0x38CE16C96BD11F2C
201228 // NETWORK_GET_ENTITY_FROM_NETWORK_ID = 0x5B912C3F653822E6
202- cb . AppendLine ( "if not Citizen.InvokeNative (0x38CE16C96BD11F2C, netId) then return nil end" ) ;
203- cb . AppendLine ( $ "return { className } .fromHandle(Citizen.InvokeNative (0x5B912C3F653822E6, netId))") ;
229+ cb . AppendLine ( "if not inv (0x38CE16C96BD11F2C, netId, rai() ) then return nil end" ) ;
230+ cb . AppendLine ( $ "return { className } .fromHandle(inv (0x5B912C3F653822E6, netId, rai() ))") ;
204231 cb . Dedent ( ) ;
205232 cb . AppendLine ( "end" ) ;
206233 cb . AppendLine ( ) ;
@@ -253,7 +280,8 @@ public void EmitWeaponConstructor(CodeBuilder cb, string className)
253280 public void EmitMethodStart ( CodeBuilder cb , string className , string methodName , List < MethodParameter > parameters , string returnType , MethodKind kind )
254281 {
255282 var paramNames = string . Join ( ", " , parameters . Select ( p => p . Name ) ) ;
256- var separator = kind == MethodKind . Instance ? ":" : "." ;
283+ // Lua doesn't have getters/setters, so treat them as Instance methods
284+ var separator = ( kind == MethodKind . Instance || kind == MethodKind . Getter || kind == MethodKind . Setter ) ? ":" : "." ;
257285 cb . AppendLine ( $ "function { className } { separator } { methodName } ({ paramNames } )") ;
258286 cb . Indent ( ) ;
259287 }
@@ -265,6 +293,11 @@ public void EmitMethodEnd(CodeBuilder cb)
265293 cb . AppendLine ( ) ;
266294 }
267295
296+ public void EmitGetterProxy ( CodeBuilder cb , string propertyName , string methodName , string returnType )
297+ {
298+ // Lua doesn't support getters, so this is a no-op
299+ }
300+
268301 public void EmitInvokeNative ( CodeBuilder cb , string hash , List < string > args , TypeInfo returnType , List < TypeInfo > outputParamTypes )
269302 {
270303 var allArgs = new List < string > { hash } ;
@@ -275,7 +308,7 @@ public void EmitInvokeNative(CodeBuilder cb, string hash, List<string> args, Typ
275308 allArgs . Add ( _typeMapper . GetResultMarker ( returnType ) ) ;
276309 }
277310
278- var invokeExpr = $ "Citizen.InvokeNative ({ string . Join ( ", " , allArgs ) } )";
311+ var invokeExpr = $ "inv ({ string . Join ( ", " , allArgs ) } )";
279312 var hasOutputParams = outputParamTypes . Count > 0 ;
280313
281314 // If no output params, use the simple return logic
0 commit comments