diff --git a/crates/qbx_fivem_data/data/natives.tsv b/crates/qbx_fivem_data/data/natives.tsv index 5abc221..65945d1 100644 --- a/crates/qbx_fivem_data/data/natives.tsv +++ b/crates/qbx_fivem_data/data/natives.tsv @@ -69,11 +69,11 @@ AddPointToGpsMultiRoute c HUD 0xA905192A6781C41B x:number,y:number,z:number AddPoliceRestart c MISC 0x452736765B31FC4B any p0:number,p1:number,p2:number,p3:number,p4:any AddPopMultiplierArea c MISC 0x67F6413D3220E18D integer x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,p6:number,p7:number,p8:boolean AddPopMultiplierSphere c MISC 0x32C7A7E8C43A1F80 integer x:number,y:number,z:number,radius:number,pedMultiplier:number,vehicleMultiplier:number,p6:boolean,p7:boolean -AddRelationshipGroup c PED 0xF372BC22FCB88606 any,Hash name:string +AddRelationshipGroup c PED 0xF372BC22FCB88606 any,Hash name:string,groupHash?:Hash AddReplaceTexture c CFX 0xA66F8F75 origTxd:string,origTxn:string,newTxd:string,newTxn:string AddReplayStatValue c MISC 0x69FE6DC87BD2A5E9 value:any AddRoadNodeSpeedZone c VEHICLE 0x2CE544C68FB812A0 integer x:number,y:number,z:number,radius:number,speed:number,p5:boolean -AddRope c PHYSICS 0xE832D760399EB220 integer x:number,y:number,z:number,rotX:number,rotY:number,rotZ:number,maxLength:number,ropeType:integer,initLength:number,minLength:number,lengthChangeRate:number,onlyPPU:boolean,collisionOn:boolean,lockFromFront:boolean,timeMultiplier:number,breakable:boolean,unkPtr:any +AddRope c PHYSICS 0xE832D760399EB220 integer,integer x:number,y:number,z:number,rotX:number,rotY:number,rotZ:number,maxLength:number,ropeType:integer,initLength:number,minLength:number,lengthChangeRate:number,onlyPPU:boolean,collisionOn:boolean,lockFromFront:boolean,timeMultiplier:number,breakable:boolean,unkPtr?:integer AddScenarioBlockingArea c PED 0x1B5C85C612E5256E integer posMinX:number,posMinY:number,posMinZ:number,posMaxX:number,posMaxY:number,posMaxZ:number,network:boolean,cancelActive:boolean,blockPeds:boolean,blockVehicles:boolean AddScriptToRandomPed c BRAIN 0x4EE5367468A65CCC name:string,model:Hash,p2:number,p3:number AddShockingEventAtPosition c EVENT 0xD9F8455409B525E9 ScrHandle eventType:integer,x:number,y:number,z:number,duration:number @@ -100,7 +100,7 @@ AddTextComponentSubstringPhoneNumber c HUD 0x761B77454205A61D p0:string,p1:inte AddTextComponentSubstringPlayerName c HUD 0x6C188BE134E074AA text:string AddTextComponentSubstringTextLabel c HUD 0xC63CD5D2920ACBE7 labelName:string AddTextComponentSubstringTextLabelHashKey c HUD 0x17299B63C7683A2B gxtEntryHash:Hash -AddTextComponentSubstringTime c HUD 0x1115F16B8AB9E8BF timestamp:integer,flags:integer +AddTextComponentSubstringTime c HUD 0x1115F16B8AB9E8BF timestamp:integer,format:integer AddTextComponentSubstringWebsite c HUD 0x94CF4AC034C9C986 website:string AddTextEntry c CFX 0x32CA01C3 entryKey:string,entryText:string AddTextEntryByHash c CFX 0x289DA860 entryKey:Hash,entryText:string @@ -115,8 +115,10 @@ AddVehicleStuckCheckWithWarp c VEHICLE 0x2FA9923062DD396C p0:any,p1:number,p2:a AddVehicleSubtaskAttackCoord c TASK 0x5CF0D8F9BBA0DD75 ped:Ped,x:number,y:number,z:number AddVehicleSubtaskAttackPed c TASK 0x85F462BADC7DA47F ped:Ped,ped2:Ped AddVehicleUpsidedownCheck c VEHICLE 0xB72E26D81006005B vehicle:Vehicle +AdjustNextPosSizeAsNormalized_16_9 c GRAPHICS 0xEFABC7722293DA7C AdvanceClockTimeTo c CLOCK 0xC8CA9670B9D83B3B hour:integer,minute:integer,second:integer AllowAmbientVehiclesToAvoidAdverseConditions c VEHICLE 0xB264C4D2F2B0A78B vehicle:Vehicle +AllowDisplayOfMultiplayerCashText c HUD 0xE67C6DFD386EA5E7 allow:boolean AllowMissionCreatorWarp c MISC 0xDEA36202FC3382DF toggle:boolean AllowPauseMenuWhenDeadThisFrame c HUD 0xCC3FDDED67BCFC63 AllowPlayerSwitchAscent c STREAMING 0x8E2A065ABDAE6994 @@ -152,11 +154,11 @@ AppSetFloat c APP 0x25D7687C68E0DAA4 property:string,value:number AppSetInt c APP 0x607E8E3D3E4F9611 property:string,value:integer AppSetString c APP 0x3FF2FCEC4B7721B4 property:string,value:string ApplyDamageToPed c PED 0x697157CED63F18D4 ped:Ped,damageAmount:integer,armorFirst:boolean -ApplyForceToEntity b ENTITY 0xC5F68BE9613E2D18 entity:Entity,forceType:integer,x:number,y:number,z:number,offX:number,offY:number,offZ:number,boneIndex:integer,isDirectionRel:boolean,ignoreUpVec:boolean,isForceRel:boolean,p12:boolean,p13:boolean -ApplyForceToEntityCenterOfMass c ENTITY 0x18FF00FC7EFF559E entity:Entity,forceType:integer,x:number,y:number,z:number,p5:boolean,isDirectionRel:boolean,isForceRel:boolean,p8:boolean +ApplyForceToEntity b ENTITY 0xC5F68BE9613E2D18 entity:Entity,forceType:integer,x:number,y:number,z:number,offX:number,offY:number,offZ:number,nComponent:integer,bLocalForce:boolean,bLocalOffset:boolean,bScaleByMass:boolean,bPlayAudio:boolean,bScaleByTimeWarp:boolean +ApplyForceToEntityCenterOfMass c ENTITY 0x18FF00FC7EFF559E entity:Entity,forceType:integer,x:number,y:number,z:number,nComponent:integer,bLocalForce:boolean,bScaleByMass:boolean,bApplyToChildren:boolean ApplyImpulseToCloth c PHYSICS 0xE37F721824571784 posX:number,posY:number,posZ:number,vecX:number,vecY:number,vecZ:number,impulse:number ApplyPedBlood c PED 0x83F7E01C7B769A26 ped:Ped,boneIndex:integer,xRot:number,yRot:number,zRot:number,woundType:string -ApplyPedBloodByZone c PED 0x3311E47B91EDCBBC ped:Ped,p1:any,p2:number,p3:number,p4:any +ApplyPedBloodByZone c PED 0x3311E47B91EDCBBC integer ped:Ped,p1:any,p2:number,p3:number,p4?:integer ApplyPedBloodDamageByZone c PED 0x816F6981C60BF53B ped:Ped,p1:any,p2:number,p3:number,p4:any ApplyPedBloodSpecific c PED 0xEF0D582CBF2D9B0F ped:Ped,component:integer,u:number,v:number,rotation:number,scale:number,forcedFrame:integer,preAge:number,bloodName:string ApplyPedDamageDecal c PED 0x397C38AA7B4A5F83 ped:Ped,damageZone:integer,xOffset:number,yOffset:number,heading:number,scale:number,alpha:number,variation:integer,fadeIn:boolean,decalName:string @@ -183,20 +185,20 @@ AreProfileSettingsValid c MISC 0x5AA3BEFA29F03AD4 boolean ArePropellersUndamaged c VEHICLE 0x755D6D5267CBBD7E boolean plane:Vehicle ArePlanePropellersIntact AreStringsEqual c MISC 0x0C515FAB3FF9EA92 boolean string1:string,string2:string AreVehicleWingsIntact c VEHICLE 0x5991A01434CE9677 boolean plane:Vehicle ArePlaneWingsIntact -ArrayValueAddBoolean c DATAFILE 0xF8B0F5A43E928C76 arrayData:any,value:boolean DataarrayAddBool -ArrayValueAddFloat c DATAFILE 0x57A995FD75D37F56 arrayData:any,value:number DataarrayAddFloat -ArrayValueAddInteger c DATAFILE 0xCABDB751D86FE93B arrayData:any,value:integer DataarrayAddInt -ArrayValueAddObject c DATAFILE 0x6889498B3E19C797 any arrayData:any DataarrayAddDict -ArrayValueAddString c DATAFILE 0x2F0661C155AEEEAA arrayData:any,value:string DataarrayAddString -ArrayValueAddVector3 c DATAFILE 0x407F8D034F70F0C2 arrayData:any,valueX:number,valueY:number,valueZ:number DataarrayAddVector -ArrayValueGetBoolean c DATAFILE 0x50C1B2874E50C114 boolean arrayData:any,arrayIndex:integer DataarrayGetBool -ArrayValueGetFloat c DATAFILE 0xC0C527B525D7CFB5 number arrayData:any,arrayIndex:integer DataarrayGetFloat -ArrayValueGetInteger c DATAFILE 0x3E5AE19425CD74BE integer arrayData:any,arrayIndex:integer DataarrayGetInt -ArrayValueGetObject c DATAFILE 0x8B5FADCC4E3A145F any arrayData:any,arrayIndex:integer DataarrayGetDict -ArrayValueGetSize c DATAFILE 0x065DB281590CEA2D integer arrayData:any DataarrayGetCount -ArrayValueGetString c DATAFILE 0xD3F2FFEB8D836F52 string arrayData:any,arrayIndex:integer DataarrayGetString -ArrayValueGetType c DATAFILE 0x3A0014ADB172A3C5 integer arrayData:any,arrayIndex:integer DataarrayGetType -ArrayValueGetVector3 c DATAFILE 0x8D2064E5B64A628A vector3 arrayData:any,arrayIndex:integer DataarrayGetVector +ArrayValueAddBoolean c DATAFILE 0xF8B0F5A43E928C76 integer value:boolean DataarrayAddBool +ArrayValueAddFloat c DATAFILE 0x57A995FD75D37F56 integer value:number DataarrayAddFloat +ArrayValueAddInteger c DATAFILE 0xCABDB751D86FE93B integer value:integer DataarrayAddInt +ArrayValueAddObject c DATAFILE 0x6889498B3E19C797 any,integer arrayData?:integer DataarrayAddDict +ArrayValueAddString c DATAFILE 0x2F0661C155AEEEAA integer value:string DataarrayAddString +ArrayValueAddVector3 c DATAFILE 0x407F8D034F70F0C2 integer valueX:number,valueY:number,valueZ:number DataarrayAddVector +ArrayValueGetBoolean c DATAFILE 0x50C1B2874E50C114 boolean,integer arrayIndex:integer DataarrayGetBool +ArrayValueGetFloat c DATAFILE 0xC0C527B525D7CFB5 number,integer arrayIndex:integer DataarrayGetFloat +ArrayValueGetInteger c DATAFILE 0x3E5AE19425CD74BE integer,integer arrayIndex:integer DataarrayGetInt +ArrayValueGetObject c DATAFILE 0x8B5FADCC4E3A145F any,integer arrayIndex:integer DataarrayGetDict +ArrayValueGetSize c DATAFILE 0x065DB281590CEA2D integer,integer arrayData?:integer DataarrayGetCount +ArrayValueGetString c DATAFILE 0xD3F2FFEB8D836F52 string,integer arrayIndex:integer DataarrayGetString +ArrayValueGetType c DATAFILE 0x3A0014ADB172A3C5 integer,integer arrayIndex:integer DataarrayGetType +ArrayValueGetVector3 c DATAFILE 0x8D2064E5B64A628A vector3,integer arrayIndex:integer DataarrayGetVector Asin c MISC 0xC843060B5765DCE7 number value:number AssignPlayerToPed c PED 0xE952D6431689AD9A ped:Ped,targetPed:Ped ClonePedToTarget AssistedMovementCloseRoute c PLAYER 0xAEBF081FFC0A0E5E @@ -431,6 +433,7 @@ ClearPedLastWeaponDamage c WEAPON 0x0E98F88A24C5F4B8 ped:Ped ClearPedNonCreationArea c PED 0x2E05208086BA0651 ClearPedParachutePackVariation c PED 0x1280804F7CFD2D6C ped:Ped ClearPedProp b PED 0x0943E5B8E078E76E ped:Ped,propId:integer +ClearPedScriptTaskIfRunningThreatResponseNonTempTask c TASK 0xF6DC48E56BE1243A ped:Ped ClearPedScubaGearVariation c PED 0xB50EB4CCB29704AC ped:Ped ClearPedSecondaryTask b TASK 0x176CECF6F920D707 ped:Ped ClearPedStoredHatProp c PED 0x687C0B594907D2E8 ped:Ped @@ -454,7 +457,7 @@ ClearReplayStats c MISC 0x1B1AB132A16FDA55 ClearRestartCustomPosition c MISC 0xA2716D40842EAF79 ClearRoomForEntity c INTERIOR 0xB365FC0C4E27FFA7 entity:Entity ClearRoomForGameViewport c INTERIOR 0x23B59D8912F94246 -ClearSequenceTask c TASK 0x3841422E9C488D8C integer +ClearSequenceTask c TASK 0x3841422E9C488D8C integer taskSequenceId?:integer ClearSmallPrints c HUD 0x2CEA2839313C09AC ClearTacticalAnalysisPoints c MISC 0xB3CD58CCA6CDA852 ClearThisPrint c HUD 0xCF708001E1E536DD p0:string @@ -490,12 +493,14 @@ CommitRuntimeTexture c CFX 0x19D81F4E tex:integer CompareStrings c MISC 0x1E34710ECD4AB0EB integer str1:string,str2:string,matchCase:boolean,maxLength:integer ControlLandingGear c VEHICLE 0xCFC8BE9A5E1FE575 vehicle:Vehicle,state:integer ControlMountedWeapon c TASK 0xDCFE42068FE0135A boolean ped:Ped -ConvertPosixTime c NETWORK 0xAC97AF97FA68E5D5 posixTime:integer,timeStructure:any -CopyMemory c MISC 0x213AEB2B90CBA7AC dst:any,src:any,size:integer +ConvertPosixTime c NETWORK 0xAC97AF97FA68E5D5 integer posixTime:integer,timeStructure?:integer +CopyMemory c MISC 0x213AEB2B90CBA7AC integer src:any,size:integer CopyVehicleDamages c VEHICLE 0xE44A982368A4AF23 sourceVehicle:Vehicle,targetVehicle:Vehicle Cos c SYSTEM 0xD0FFB162F40A139C number value:number -CreateAirDefenseArea c WEAPON 0x9DA58CDBF6BDBC08 integer p0:number,p1:number,p2:number,p3:number,p4:number,p5:number,p6:number,p7:number,p8:number,p9:number,weaponHash:Hash -CreateAirDefenseSphere c WEAPON 0x91EF34584710BE99 integer x:number,y:number,z:number,radius:number,p4:number,p5:number,p6:number,weaponHash:Hash +CreateAirDefenceAngledArea c WEAPON 0x9DA58CDBF6BDBC08 integer srcCoord1X:number,srcCoord1Y:number,srcCoord1Z:number,srcCoord2X:number,srcCoord2Y:number,srcCoord2Z:number,fWidth:number,weaponPositionX:number,weaponPositionY:number,weaponPositionZ:number,weaponHash:Hash +CreateAirDefenceSphere c WEAPON 0x91EF34584710BE99 integer x:number,y:number,z:number,radius:number,weaponPositionX:number,weaponPositionY:number,weaponPositionZ:number,weaponHash:Hash +CreateAirDefenseArea c WEAPON 0x9DA58CDBF6BDBC08 integer srcCoord1X:number,srcCoord1Y:number,srcCoord1Z:number,srcCoord2X:number,srcCoord2Y:number,srcCoord2Z:number,fWidth:number,weaponPositionX:number,weaponPositionY:number,weaponPositionZ:number,weaponHash:Hash CreateAirDefenceAngledArea +CreateAirDefenseSphere c WEAPON 0x91EF34584710BE99 integer x:number,y:number,z:number,radius:number,weaponPositionX:number,weaponPositionY:number,weaponPositionZ:number,weaponHash:Hash CreateAirDefenceSphere CreateAmbientPickup c OBJECT 0x673966A0C0FD7171 Pickup pickupHash:Hash,posX:number,posY:number,posZ:number,flags:integer,value:integer,modelHash:Hash,returnHandle:boolean,p8:boolean CreateAudioSubmix c CFX 0x658D2BC8 integer name:string CreateCam c CAM 0xC3981DCE61D9E13F Cam camName:string,active:boolean @@ -504,20 +509,26 @@ CreateCamera c CAM 0x5E3CF89C6BCCA67D Cam camHash:Hash,active:boolean CreateCameraWithParams c CAM 0x6ABFA3E16460F22D Cam camHash:Hash,posX:number,posY:number,posZ:number,rotX:number,rotY:number,rotZ:number,fov:number,active:boolean,rotationOrder:integer CreateCheckpoint c GRAPHICS 0x0134F0835AB6BFCB integer type:integer,posX1:number,posY1:number,posZ1:number,posX2:number,posY2:number,posZ2:number,diameter:number,red:integer,green:integer,blue:integer,alpha:integer,reserved:integer CreateCinematicShot c CAM 0x741B0129D4560F31 p0:any,p1:integer,p2:any,entity:Entity +CreateColshapeCircle b CFX 0xB9C5AC6D integer x:number,y:number,radius:number +CreateColshapeCuboid b CFX 0x79AE8777 integer x:number,y:number,z:number,width:number,depth:number,height:number +CreateColshapeCylinder b CFX 0x59AD59AC integer x:number,y:number,z:number,radius:number,height:number +CreateColshapePolygon b CFX 0x1B055F04 integer minZ:number,maxZ:number,points:table +CreateColshapeRectangle b CFX 0x58C3F669 integer x:number,y:number,z:number,width:number,depth:number,heading:number +CreateColshapeSphere b CFX 0xB6710ACB integer x:number,y:number,z:number,radius:number CreateDryVolume c CFX 0xEB1C6DD integer xMin:number,yMin:number,zMin:number,xMax:number,yMax:number,zMax:number CreateDui c CFX 0x23EAF899 integer url:string,width:integer,height:integer CreateFakeMpGamerTag c HUD 0xBFEFE3321A3F5015 integer ped:Ped,username:string,crewIsPrivate:boolean,crewIsRockstar:boolean,crewName:string,crewRank:integer CreateForcedObject c ENTITY 0x150E808B375A385A x:number,y:number,z:number,p3:any,modelHash:Hash,p5:boolean CreateGroup c PED 0x90370EBE0FEE1A3D integer unused:integer -CreateIncident c MISC 0x3F892CAF67444AE7 boolean,integer dispatchService:integer,x:number,y:number,z:number,numUnits:integer,radius:number -CreateIncidentWithEntity c MISC 0x05983472F0494E60 boolean,integer dispatchService:integer,ped:Ped,numUnits:integer,radius:number +CreateIncident c MISC 0x3F892CAF67444AE7 boolean,integer dispatchService:integer,x:number,y:number,z:number,numUnits:integer,radius:number,outIncidentID?:integer +CreateIncidentWithEntity c MISC 0x05983472F0494E60 boolean,integer dispatchService:integer,ped:Ped,numUnits:integer,radius:number,outIncidentID?:integer CreateItemset c ITEMSET 0x35AD299F50D91B24 Vehicle distri:boolean CreateLightningThunder c MISC 0xF6062E089251C898 ForceLightningFlash CreateMissionTrain c VEHICLE 0x63C6CCA8E68AE8C8 Vehicle variation:integer,x:number,y:number,z:number,direction:boolean CreateMobilePhone c MOBILE 0xA4E8E696C532FBC7 phoneType:integer -CreateModelHide c ENTITY 0x8A97BCA30A0CE478 x:number,y:number,z:number,radius:number,model:Hash,p5:boolean -CreateModelHideExcludingScriptObjects c ENTITY 0x3A52AE588830BF7F x:number,y:number,z:number,radius:number,model:Hash,p5:boolean -CreateModelSwap c ENTITY 0x92C47782FDA8B2A3 x:number,y:number,z:number,radius:number,originalModel:Hash,newModel:Hash,p6:boolean +CreateModelHide c ENTITY 0x8A97BCA30A0CE478 x:number,y:number,z:number,radius:number,model:Hash,surviveMapReload:boolean +CreateModelHideExcludingScriptObjects c ENTITY 0x3A52AE588830BF7F x:number,y:number,z:number,radius:number,model:Hash,surviveMapReload:boolean +CreateModelSwap c ENTITY 0x92C47782FDA8B2A3 x:number,y:number,z:number,radius:number,originalModel:Hash,newModel:Hash,bSurviveMapReload:boolean CreateMoneyPickups c OBJECT 0x0589B5E791CE9B2B x:number,y:number,z:number,value:integer,amount:integer,model:Hash CreateMpGamerTag c HUD 0xBFEFE3321A3F5015 integer ped:Ped,username:string,crewIsPrivate:boolean,crewIsRockstar:boolean,crewName:string,crewRank:integer CreateFakeMpGamerTag CreateMpGamerTagColor c HUD 0x6DD05E9D83EFA4C9 player:Player,username:string,crewIsPrivate:boolean,crewIsRockstar:boolean,crewName:string,crewRank:integer,crewR:integer,crewG:integer,crewB:integer CreateMpGamerTagWithCrewColor @@ -527,13 +538,13 @@ CreateNewScriptedConversation c AUDIO 0xD2C91A0B572AAE56 CreateNmMessage c PED 0x418EF2A1BCE56685 startImmediately:boolean,messageId:integer CreateNonNetworkedAmbientPickup c OBJECT 0x9C93764223E29C50 any pickupHash:any,posX:number,posY:number,posZ:number,flags:integer,value:integer,modelHash:any,p7:boolean,p8:boolean CreateNonNetworkedPortablePickup c OBJECT 0x125494B98A21AAF7 Object pickupHash:Hash,x:number,y:number,z:number,placeOnGround:boolean,modelHash:Hash -CreateObject b OBJECT 0x509D5878EB39E842 Object modelHash:Hash,x:number,y:number,z:number,isNetwork:boolean,netMissionEntity:boolean,doorFlag:boolean -CreateObjectNoOffset b OBJECT 0x9A294B2138ABB884 Object modelHash:Hash,x:number,y:number,z:number,isNetwork:boolean,netMissionEntity:boolean,doorFlag:boolean +CreateObject b OBJECT 0x509D5878EB39E842 Object modelHash:Hash,x:number,y:number,z:number,isNetwork:boolean,netMissionEntity:boolean,doorFlag:boolean 0x2F7AA05C Entity modelHash:Hash,x:number,y:number,z:number,isNetwork:boolean,netMissionEntity:boolean,doorFlag:boolean +CreateObjectNoOffset b OBJECT 0x9A294B2138ABB884 Object modelHash:Hash,x:number,y:number,z:number,isNetwork:boolean,netMissionEntity:boolean,doorFlag:boolean 0x58040420 Entity modelHash:Hash,x:number,y:number,z:number,isNetwork:boolean,netMissionEntity:boolean,doorFlag:boolean CreateParachuteBagObject c PED 0x8C4F3BF23B6237DB Object ped:Ped,p1:boolean,p2:boolean CreateParachuteObject c PED 0x8C4F3BF23B6237DB Object ped:Ped,p1:boolean,p2:boolean CreateParachuteBagObject CreatePatrolRoute c TASK 0xAF8A443CCC8018DC -CreatePed b PED 0xD49F9B0955C367DE Ped pedType:integer,modelHash:Hash,x:number,y:number,z:number,heading:number,isNetwork:boolean,bScriptHostPed:boolean -CreatePedInsideVehicle b PED 0x7DD959874C1FD534 Ped vehicle:Vehicle,pedType:integer,modelHash:Hash,seat:integer,isNetwork:boolean,bScriptHostPed:boolean +CreatePed b PED 0xD49F9B0955C367DE Ped pedType:integer,modelHash:Hash,x:number,y:number,z:number,heading:number,isNetwork:boolean,bScriptHostPed:boolean 0x389EF71 Entity pedType:integer,modelHash:Hash,x:number,y:number,z:number,heading:number,isNetwork:boolean,bScriptHostPed:boolean +CreatePedInsideVehicle b PED 0x7DD959874C1FD534 Ped vehicle:Vehicle,pedType:integer,modelHash:Hash,seat:integer,isNetwork:boolean,bScriptHostPed:boolean 0x3000F092 Entity vehicle:Vehicle,pedType:integer,modelHash:Hash,seat:integer,isNetwork:boolean,bScriptHostPed:boolean CreatePickUpRopeForCargobob c VEHICLE 0x7BEB0C7A235F6F3B cargobob:Vehicle,state:integer CreatePickup c OBJECT 0xFBA08C503DD5FA58 Pickup pickupHash:Hash,posX:number,posY:number,posZ:number,p4:integer,value:integer,p6:boolean,modelHash:Hash CreatePickupRotate c OBJECT 0x891804727E0A98B7 Pickup pickupHash:Hash,posX:number,posY:number,posZ:number,rotX:number,rotY:number,rotZ:number,flag:integer,amount:integer,p9:any,p10:boolean,modelHash:Hash @@ -550,39 +561,39 @@ CreateSynchronizedScene c PED 0x8C18E0F9080ADD73 integer x:number,y:number,z:num CreateSynchronizedScene_2 c PED 0x62EC273D00187DCA integer x:number,y:number,z:number,radius:number,object:Hash CreateTimecycleModifier c CFX 0x70FA2AFA integer modifierName:string CreateTrackedPoint c GRAPHICS 0xE2C9439ED45DEA60 integer -CreateVehicle b VEHICLE 0xAF35D0D2583051B0 Vehicle modelHash:Hash,x:number,y:number,z:number,heading:number,isNetwork:boolean,netMissionEntity:boolean +CreateVehicle b VEHICLE 0xAF35D0D2583051B0 Vehicle modelHash:Hash,x:number,y:number,z:number,heading:number,isNetwork:boolean,netMissionEntity:boolean 0xDD75460A Entity modelHash:Hash,x:number,y:number,z:number,heading:number,isNetwork:boolean,netMissionEntity:boolean CreateVehicleServerSetter s CFX 0x6AE51D4B Vehicle modelHash:Hash,type:string,x:number,y:number,z:number,heading:number CreateWeaponObject c WEAPON 0x9541D3CF0D398F36 Object weaponHash:Hash,ammoCount:integer,x:number,y:number,z:number,bCreateDefaultComponents:boolean,scale:number,customModelHash:integer CustomMenuCoordinates c CAM 0x487A82C650EB7799 p0:number -DataarrayAddBool c DATAFILE 0xF8B0F5A43E928C76 arrayData:any,value:boolean -DataarrayAddDict c DATAFILE 0x6889498B3E19C797 any arrayData:any -DataarrayAddFloat c DATAFILE 0x57A995FD75D37F56 arrayData:any,value:number -DataarrayAddInt c DATAFILE 0xCABDB751D86FE93B arrayData:any,value:integer -DataarrayAddString c DATAFILE 0x2F0661C155AEEEAA arrayData:any,value:string -DataarrayAddVector c DATAFILE 0x407F8D034F70F0C2 arrayData:any,valueX:number,valueY:number,valueZ:number -DataarrayGetBool c DATAFILE 0x50C1B2874E50C114 boolean arrayData:any,arrayIndex:integer -DataarrayGetCount c DATAFILE 0x065DB281590CEA2D integer arrayData:any -DataarrayGetDict c DATAFILE 0x8B5FADCC4E3A145F any arrayData:any,arrayIndex:integer -DataarrayGetFloat c DATAFILE 0xC0C527B525D7CFB5 number arrayData:any,arrayIndex:integer -DataarrayGetInt c DATAFILE 0x3E5AE19425CD74BE integer arrayData:any,arrayIndex:integer -DataarrayGetString c DATAFILE 0xD3F2FFEB8D836F52 string arrayData:any,arrayIndex:integer -DataarrayGetType c DATAFILE 0x3A0014ADB172A3C5 integer arrayData:any,arrayIndex:integer -DataarrayGetVector c DATAFILE 0x8D2064E5B64A628A vector3 arrayData:any,arrayIndex:integer -DatadictCreateArray c DATAFILE 0x5B11728527CA6E5F any objectData:any,key:string -DatadictCreateDict c DATAFILE 0xA358F56F10732EE1 any objectData:any,key:string -DatadictGetArray c DATAFILE 0x7A983AA9DA2659ED any objectData:any,key:string -DatadictGetBool c DATAFILE 0x1186940ED72FFEEC boolean objectData:any,key:string -DatadictGetDict c DATAFILE 0xB6B9DDC412FCEEE2 any objectData:any,key:string -DatadictGetFloat c DATAFILE 0x06610343E73B9727 number objectData:any,key:string -DatadictGetInt c DATAFILE 0x78F06F6B1FB5A80C integer objectData:any,key:string -DatadictGetString c DATAFILE 0x3D2FD9E763B24472 string objectData:any,key:string -DatadictGetType c DATAFILE 0x031C55ED33227371 integer objectData:any,key:string -DatadictGetVector c DATAFILE 0x46CD3CB66E0825CC vector3 objectData:any,key:string -DatadictSetBool c DATAFILE 0x35124302A556A325 objectData:any,key:string,value:boolean -DatadictSetFloat c DATAFILE 0xC27E1CC2D795105E objectData:any,key:string,value:number -DatadictSetInt c DATAFILE 0xE7E035450A7948D5 objectData:any,key:string,value:integer -DatadictSetString c DATAFILE 0x8FF3847DADD8E30C objectData:any,key:string,value:string -DatadictSetVector c DATAFILE 0x4CD49B76338C7DEE objectData:any,key:string,valueX:number,valueY:number,valueZ:number +DataarrayAddBool c DATAFILE 0xF8B0F5A43E928C76 integer value:boolean +DataarrayAddDict c DATAFILE 0x6889498B3E19C797 any,integer arrayData?:integer +DataarrayAddFloat c DATAFILE 0x57A995FD75D37F56 integer value:number +DataarrayAddInt c DATAFILE 0xCABDB751D86FE93B integer value:integer +DataarrayAddString c DATAFILE 0x2F0661C155AEEEAA integer value:string +DataarrayAddVector c DATAFILE 0x407F8D034F70F0C2 integer valueX:number,valueY:number,valueZ:number +DataarrayGetBool c DATAFILE 0x50C1B2874E50C114 boolean,integer arrayIndex:integer +DataarrayGetCount c DATAFILE 0x065DB281590CEA2D integer,integer arrayData?:integer +DataarrayGetDict c DATAFILE 0x8B5FADCC4E3A145F any,integer arrayIndex:integer +DataarrayGetFloat c DATAFILE 0xC0C527B525D7CFB5 number,integer arrayIndex:integer +DataarrayGetInt c DATAFILE 0x3E5AE19425CD74BE integer,integer arrayIndex:integer +DataarrayGetString c DATAFILE 0xD3F2FFEB8D836F52 string,integer arrayIndex:integer +DataarrayGetType c DATAFILE 0x3A0014ADB172A3C5 integer,integer arrayIndex:integer +DataarrayGetVector c DATAFILE 0x8D2064E5B64A628A vector3,integer arrayIndex:integer +DatadictCreateArray c DATAFILE 0x5B11728527CA6E5F any,integer key:string +DatadictCreateDict c DATAFILE 0xA358F56F10732EE1 any,integer key:string +DatadictGetArray c DATAFILE 0x7A983AA9DA2659ED any,integer key:string +DatadictGetBool c DATAFILE 0x1186940ED72FFEEC boolean,integer key:string +DatadictGetDict c DATAFILE 0xB6B9DDC412FCEEE2 any,integer key:string +DatadictGetFloat c DATAFILE 0x06610343E73B9727 number,integer key:string +DatadictGetInt c DATAFILE 0x78F06F6B1FB5A80C integer,integer key:string +DatadictGetString c DATAFILE 0x3D2FD9E763B24472 string,integer key:string +DatadictGetType c DATAFILE 0x031C55ED33227371 integer,integer key:string +DatadictGetVector c DATAFILE 0x46CD3CB66E0825CC vector3,integer key:string +DatadictSetBool c DATAFILE 0x35124302A556A325 integer key:string,value:boolean +DatadictSetFloat c DATAFILE 0xC27E1CC2D795105E integer key:string,value:number +DatadictSetInt c DATAFILE 0xE7E035450A7948D5 integer key:string,value:integer +DatadictSetString c DATAFILE 0x8FF3847DADD8E30C integer key:string,value:string +DatadictSetVector c DATAFILE 0x4CD49B76338C7DEE integer key:string,valueX:number,valueY:number,valueZ:number DatafileClearWatchList c DATAFILE 0x6CC86E78358D5119 DatafileCreate c DATAFILE 0xD27058A1CA2B13EE DatafileDelete c DATAFILE 0x9AB9C1CFC8862DFB @@ -601,7 +612,7 @@ DatafileSelectUgcPlayerData c DATAFILE 0x52818819057F2B40 boolean p0:integer DatafileSelectUgcStats c DATAFILE 0x9CB0BFA7A9342C3D boolean p0:integer,p1:boolean DatafileStartSaveToCloud c DATAFILE 0x83BCCE3224735F05 boolean filename:string DatafileStoreMissionHeader c DATAFILE 0x2ED61456317B8178 -DatafileUpdateSaveToCloud c DATAFILE 0x4DFDD9EB705F8140 boolean,boolean +DatafileUpdateSaveToCloud c DATAFILE 0x4DFDD9EB705F8140 boolean,boolean p0?:boolean DatafileWatchRequestId c DATAFILE 0xAD6875BBC0FC899C id:integer DeactivateAudioSlowmoMode c AUDIO 0xDDC635D5B3262C56 mode:string DeactivateInteriorEntitySet c INTERIOR 0x420BD37289EEE162 interior:integer,entitySetName:string @@ -620,21 +631,23 @@ DecorSetTime c DECORATOR 0x95AED7B8E39ECAA4 boolean entity:Entity,propertyName:s DeleteAllTrains c VEHICLE 0x736A718577F39C7D DeleteCheckpoint c GRAPHICS 0xF5ED37F54CD4D52E checkpoint:integer DeleteChildRope c PHYSICS 0xAA5D6B1888E4DB20 ropeId:integer -DeleteEntity b ENTITY 0xAE3CBE5BF394C9C9 entity:Entity +DeleteColshape b CFX 0x16B9F12B colShapeId:integer +DeleteEntity b ENTITY 0xAE3CBE5BF394C9C9 Entity entity:Entity 0xFAA3D236 entity:Entity DeleteFunctionReference b CFX 0x1E86F206 referenceIdentity:string DeleteIncident c MISC 0x556C1AA270D5A207 incidentId:integer -DeleteMissionTrain c VEHICLE 0x5B76B14AE875C795 train:Vehicle -DeleteObject c OBJECT 0x539E0AE3E6634B9F object:Object +DeleteMissionTrain c VEHICLE 0x5B76B14AE875C795 Vehicle train:Vehicle +DeleteObject c OBJECT 0x539E0AE3E6634B9F Object object:Object DeletePatrolRoute c TASK 0x7767DD9D65E91319 patrolRoute:string -DeletePed c PED 0x9614299DCB53E54B ped:Ped +DeletePed c PED 0x9614299DCB53E54B Ped ped:Ped DeleteResourceKvp b CFX 0x7389B5DF key:string DeleteResourceKvpNoSync b CFX 0x4152C90 key:string -DeleteRope c PHYSICS 0x52B4829281364649 ropeId:integer +DeleteRope c PHYSICS 0x52B4829281364649 integer ropeId:integer DeleteScriptVehicleGenerator c VEHICLE 0x22102C9ABFCF125D vehicleGenerator:integer DeleteStuntJump c MISC 0xDC518000E39DAE1F p0:integer DeleteTrain s CFX 0x523BA3DA entity:Entity -DeleteVehicle c VEHICLE 0xEA386986E786A54F vehicle:Vehicle -DeleteWaypoint c HUD 0xD8E694757BCEA8E9 +DeleteVehicle c VEHICLE 0xEA386986E786A54F Vehicle vehicle:Vehicle +DeleteWaypoint c HUD 0xD8E694757BCEA8E9 DeleteWaypointsFromThisPlayer +DeleteWaypointsFromThisPlayer c HUD 0xD8E694757BCEA8E9 DepositVc c MONEY 0xE260E0BB9CD995AC boolean amount:integer DestroyAllCams c CAM 0x8E5FB15663F79120 bScriptHostCam:boolean DestroyCam c CAM 0x865908C81A2C22E9 cam:Cam,bScriptHostCam:boolean @@ -663,9 +676,10 @@ DisableAutomaticRespawn c MISC 0x2C2B3493FBF51C71 toggle:boolean PauseDeathArre DisableBlipNameForVar c HUD 0x5C90988E7C8E1AF4 Blip GetNewSelectedMissionCreatorBlip DisableCamCollisionForEntity c CAM 0x2AED6301F67007D5 entity:Entity DisableCamCollisionForObject c CAM 0x49482F9FCD825AAA entity:Entity +DisableCinematicBonnetCameraThisUpdate c CAM 0xADFF1B2A555F5FBA DisableControlAction c PAD 0xFE99B66D079CF6BC padIndex:integer,control:integer,disable:boolean DisableEditorRuntime c CFX 0xB1622B17 -DisableFirstPersonCamThisFrame c CAM 0xDE2EF5DA284CC8DF +DisableFirstPersonCamThisFrame c CAM 0xDE2EF5DA284CC8DF DisableOnFootFirstPersonViewThisUpdate DisableFrontendThisFrame c HUD 0x6D3465A73092F0E6 DisableHeadBlendPaletteColor c PED 0xA21C118553BBDF02 ped:Ped DisableHospitalRestart c MISC 0xC8535819C450EBA8 hospitalIndex:integer,toggle:boolean @@ -678,6 +692,7 @@ DisableMoonCycleOverride c GRAPHICS 0x2BF72AD5B41AA739 DisableMultiplayerChat c HUD 0x1DB21A44B09E8BA3 disable:boolean DisableNavmeshInArea c PATHFIND 0x4C8872D8CDBE1B8B posMinX:number,posMinY:number,posMinZ:number,posMaxX:number,posMaxY:number,posMaxZ:number,bDisable:boolean DisableOcclusionThisFrame c GRAPHICS 0x3669F1B198DCAA4F +DisableOnFootFirstPersonViewThisUpdate c CAM 0xDE2EF5DA284CC8DF DisablePedHeatscaleOverride c PED 0x600048C60D5C2C51 ped:Ped DisablePedPainAudio c AUDIO 0xA9A41C1E940FB0E8 ped:Ped,shouldDisable:boolean DisablePhoneThisFrame c MOBILE 0x015C49A93E3E086E toggle:boolean CellCamActivateSelfieMode @@ -696,7 +711,7 @@ DisableScriptBrainSet c BRAIN 0x14D8518E9760F08F brainSet:integer DisableStuntJumpSet c MISC 0xA5272EBEDD4747F6 p0:integer DisableSwitchOutroFx c STREAMING 0xBD605B8E0E18B3BB DisableVehicleDistantlights c GRAPHICS 0xC9F98AC1884E73A2 toggle:boolean -DisableVehicleFirstPersonCamThisFrame c CAM 0xADFF1B2A555F5FBA +DisableVehicleFirstPersonCamThisFrame c CAM 0xADFF1B2A555F5FBA DisableCinematicBonnetCameraThisUpdate DisableVehicleImpactExplosionActivation c VEHICLE 0xD8050E0EB60CF274 vehicle:Vehicle,toggle:boolean SetVehicleHasMutedSirens DisableVehicleNeonLights c VEHICLE 0x83F813570FF519DE vehicle:Vehicle,toggle:boolean DisableVehiclePassengerIdleCamera c CFX 0x5C140555 state:boolean @@ -734,12 +749,13 @@ DoesBoatSinkWhenWrecked s CFX 0x43F15989 boolean vehicle:Vehicle DoesCamExist c CAM 0xA7A932170592B50E boolean cam:Cam DoesCargobobHavePickUpRope c VEHICLE 0x1821D91AD4B56108 boolean cargobob:Vehicle DoesCargobobHavePickupMagnet c VEHICLE 0x6E08BF5B3722BAC9 boolean cargobob:Vehicle +DoesColshapeExist b CFX 0x9A2EC46D boolean colShapeId:integer DoesContextExistForThisPed c AUDIO 0x49B99BF3FDA89A7A boolean ped:Ped,speechName:string,allowBackupPVGs:boolean DoesCutsceneEntityExist c CUTSCENE 0x499EF20C5DB25C59 boolean cutsceneEntName:string,modelHash:Hash DoesDesObjectExist c OBJECT 0x52AF537A0C5B8AAD boolean object:Object DoesRayfireMapObjectExist DoesDoorExist c OBJECT 0xC153C43EA202C8C1 boolean doorHash:Hash IsDoorRegisteredWithSystem DoesEntityBelongToThisScript c ENTITY 0xDDE6DF5AE89981D2 boolean entity:Entity,p2:boolean -DoesEntityExist b ENTITY 0x7239B21A38F536BA boolean entity:Entity +DoesEntityExist b ENTITY 0x7239B21A38F536BA boolean entity:Entity 0x3AC90869 boolean entity:Object DoesEntityHaveAnimDirector c ENTITY 0x2158E81A6AF65EA9 boolean entity:Entity DoesEntityHaveDrawable c ENTITY 0x060D6E96F8B8E48D boolean entity:Entity DoesEntityHaveFragInst c PHYSICS 0x0C112765300C7E1E boolean object:Object GetHasObjectFragInst @@ -764,7 +780,7 @@ DoesPopMultiplierSphereExist c MISC 0x171BAFB3C60389F4 boolean id:integer DoesRayfireMapObjectExist c OBJECT 0x52AF537A0C5B8AAD boolean object:Object DoesRelationshipGroupExist c PED 0xCC6E3B6BB69501F1 boolean groupHash:Hash DoesRopeBelongToThisScript c PHYSICS 0x271C9D3ACA5D6409 boolean ropeId:integer -DoesRopeExist c PHYSICS 0xFD5448BE3111ED96 boolean,integer +DoesRopeExist c PHYSICS 0xFD5448BE3111ED96 boolean,integer ropeId?:integer DoesScenarioBlockingAreaExist c PED 0x8A24B067D175A7BD boolean x1:number,y1:number,z1:number,x2:number,y2:number,z2:number DoesScenarioExistInArea c TASK 0x5A59271FFADD33C1 boolean x:number,y:number,z:number,radius:number,b:boolean DoesScenarioGroupExist c TASK 0xF9034C136C9E00D3 boolean scenarioGroup:string @@ -798,7 +814,7 @@ DoesWeaponTakeWeaponComponent c WEAPON 0x5CEE3DF569CECAB0 boolean weaponHash:Has DontRenderInGameUi c GRAPHICS 0x22A249A53034450A p0:boolean DontTiltMinimapThisFrame c HUD 0x6D14BFDC33B34F55 DoorControl c OBJECT 0x9B12F9A24FABEDB0 modelHash:Hash,x:number,y:number,z:number,locked:boolean,xRotMult:number,yRotMult:number,zRotMult:number -DoorSystemFindExistingDoor c OBJECT 0x589F80B325CC82C5 boolean,Hash x:number,y:number,z:number,modelHash:Hash +DoorSystemFindExistingDoor c OBJECT 0x589F80B325CC82C5 boolean,Hash x:number,y:number,z:number,modelHash:Hash,doorOutPointer?:Hash DoorSystemGetActive c CFX 0xF65BBA4B table DoorSystemGetAutomaticDistance c OBJECT 0xE851471AEFC3374F number doorHash:Hash DoorSystemGetDoorPendingState c OBJECT 0x4BC2854478F3A749 integer doorHash:Hash @@ -826,6 +842,7 @@ DrawDebugText_2d c GRAPHICS 0xA3BB2E9555C05A8F text:string,x:number,y:number,z: DrawFrontendAlert c HUD 0x15803FEC3B9A872B labelTitle:string,labelMsg:string,p2:integer,p3:integer,labelMsg2:string,p5:boolean,p6:integer,p7:integer,p8:string,p9:string,background:boolean,errorCode:integer SetWarningMessageWithAlert DrawGizmo c CFX 0xEB2EDCA2 boolean matrixPtr:integer,id:string DrawGlowSphere c CFX 0xBD25EC89 posX:number,posY:number,posZ:number,radius:number,colorR:integer,colorG:integer,colorB:integer,intensity:number,invert:boolean,marker:boolean +DrawHudOverFadeThisFrame c HUD 0xBF4F34A85CA2970C DrawInteractiveSprite c GRAPHICS 0x2BC54A8188768488 textureDict:string,textureName:string,screenX:number,screenY:number,width:number,height:number,heading:number,red:integer,green:integer,blue:integer,alpha:integer DrawLight c CFX 0x374E5298 DrawLightWithRange c GRAPHICS 0xF2A1B2771A01DBD4 posX:number,posY:number,posZ:number,colorR:integer,colorG:integer,colorB:integer,range:number,intensity:number @@ -834,18 +851,18 @@ DrawLightWithRangeWithShadow c GRAPHICS 0xF49E9A9716A04595 x:number,y:number,z: DrawLine c GRAPHICS 0x6B7256074AE34680 x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,red:integer,green:integer,blue:integer,alpha:integer DrawLine_2d c CFX 0xB856A90 x1:number,y1:number,x2:number,y2:number,width:number,r:integer,g:integer,b:integer,a:integer DrawLowQualityPhotoToPhone c GRAPHICS 0x1072F115DAB0717E p0:boolean,p1:boolean -DrawMarker c GRAPHICS 0x28477EC23D892089 type:integer,posX:number,posY:number,posZ:number,dirX:number,dirY:number,dirZ:number,rotX:number,rotY:number,rotZ:number,scaleX:number,scaleY:number,scaleZ:number,red:integer,green:integer,blue:integer,alpha:integer,bobUpAndDown:boolean,faceCamera:boolean,p19:integer,rotate:boolean,textureDict:string,textureName:string,drawOnEnts:boolean -DrawMarker_2 c GRAPHICS 0xE82728F0DE75D13A type:integer,posX:number,posY:number,posZ:number,dirX:number,dirY:number,dirZ:number,rotX:number,rotY:number,rotZ:number,scaleX:number,scaleY:number,scaleZ:number,red:integer,green:integer,blue:integer,alpha:integer,bobUpAndDown:boolean,faceCamera:boolean,p19:integer,rotate:boolean,textureDict:string,textureName:string,drawOnEnts:boolean,p24:boolean -DrawNotification c HUD 0x2ED7843F8F801023 integer isImportant:boolean,bHasTokens:boolean EndTextCommandThefeedPostTicker +DrawMarker c GRAPHICS 0x28477EC23D892089 type:integer,posX:number,posY:number,posZ:number,dirX:number,dirY:number,dirZ:number,rotX:number,rotY:number,rotZ:number,scaleX:number,scaleY:number,scaleZ:number,red:integer,green:integer,blue:integer,alpha:integer,bobUpAndDown:boolean,faceCamera:boolean,rotationOrder:integer,rotate:boolean,textureDict:string,textureName:string,drawOnEnts:boolean +DrawMarker_2 c GRAPHICS 0xE82728F0DE75D13A type:integer,posX:number,posY:number,posZ:number,dirX:number,dirY:number,dirZ:number,rotX:number,rotY:number,rotZ:number,scaleX:number,scaleY:number,scaleZ:number,red:integer,green:integer,blue:integer,alpha:integer,bobUpAndDown:boolean,faceCamera:boolean,rotationOrder:integer,rotate:boolean,textureDict:string,textureName:string,drawOnEnts:boolean,p24:boolean +DrawNotification c HUD 0x2ED7843F8F801023 integer isImportant:boolean,showInBrief:boolean EndTextCommandThefeedPostTicker DrawNotificationApartmentInvite c HUD 0x97C9E4E7024A8F2C integer,integer crewTypeIsPrivate:boolean,crewTagContainsRockstar:boolean,rank:integer,hasFounderStatus:boolean,isImportant:boolean,clanHandle:integer,r:integer,g:integer,b:integer EndTextCommandThefeedPostCrewtag DrawNotificationAward c HUD 0xAA295B6F28BD587D integer textureDict:string,textureName:string,rpBonus:integer,colorOverlay:integer,titleLabel:string EndTextCommandThefeedPostAward DrawNotificationClanInvite c HUD 0x137BC35589E34E1E integer,integer crewTypeIsPrivate:boolean,crewTagContainsRockstar:boolean,rank:integer,isLeader:boolean,isImportant:boolean,clanHandle:integer,gamerStr:string,r:integer,g:integer,b:integer EndTextCommandThefeedPostCrewtagWithGameName DrawNotificationIcon c HUD 0xAA295B6F28BD587D integer textureDict:string,textureName:string,rpBonus:integer,colorOverlay:integer,titleLabel:string EndTextCommandThefeedPostAward DrawNotificationWithButton c HUD 0xDD6CB2CCE7C2735C integer type:integer,button:string,text:string EndTextCommandThefeedPostReplayInput DrawNotificationWithIcon c HUD 0xD202B92CBF1D816F integer eType:integer,iIcon:integer,sTitle:string EndTextCommandThefeedPostReplayIcon -DrawNotification_2 c HUD 0x44FA03975424A0EE integer blink:boolean,bHasTokens:boolean EndTextCommandThefeedPostTickerForced -DrawNotification_3 c HUD 0x378E809BF61EC840 integer isImportant:boolean,bHasTokens:boolean EndTextCommandThefeedPostTickerWithTokens -DrawNotification_4 c HUD 0xF020C96915705B3A integer blink:boolean,bHasTokens:boolean EndTextCommandThefeedPostMpticker +DrawNotification_2 c HUD 0x44FA03975424A0EE integer isImportant:boolean,showInBrief:boolean EndTextCommandThefeedPostTickerForced +DrawNotification_3 c HUD 0x378E809BF61EC840 integer isImportant:boolean,showInBrief:boolean EndTextCommandThefeedPostTickerWithTokens +DrawNotification_4 c HUD 0xF020C96915705B3A integer isImportant:boolean,showInBrief:boolean EndTextCommandThefeedPostMpticker DrawPoly c GRAPHICS 0xAC26716048436851 x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,x3:number,y3:number,z3:number,red:integer,green:integer,blue:integer,alpha:integer DrawRect c GRAPHICS 0x3A618A217E5154F0 x:number,y:number,width:number,height:number,r:integer,g:integer,b:integer,a:integer DrawRectRotated c CFX 0xEC37C168 x:number,y:number,width:number,height:number,rotation:number,r:integer,g:integer,b:integer,a:integer @@ -886,6 +903,7 @@ EnableEnhancedHostSupport s CFX 0xF97B1C93 enabled:boolean EnableEntityUnk c ENTITY 0x6CE177D014502E8A entity:Entity EnableExteriorCullModelThisFrame c INTERIOR 0xA97F257D0151A6AB mapObjectHash:Hash EnableGameplayCam c GRAPHICS 0xDFC252D8A3E15AB7 toggle:boolean TogglePausedRenderphases +EnableIndividualPlanePropeller c VEHICLE 0xDC05D2777F855F44 plane:Vehicle,propeller:integer EnableInteriorProp c INTERIOR 0x55E86AF2712B36A1 interior:integer,entitySetName:string ActivateInteriorEntitySet EnableLaserSightRendering c WEAPON 0xC8B46D7727D864AA toggle:boolean EnableMoonCycleOverride c GRAPHICS 0x2C328AF17210F009 phase:number @@ -940,13 +958,13 @@ EndTextCommandThefeedPostMessagetextGxtEntry c HUD 0xC6F580E4C94926AC integer tx EndTextCommandThefeedPostMessagetextTu c HUD 0x1E6611149DB3DB6B integer picTxd:string,picTxn:string,flash:boolean,iconType:integer,nameStr:string,subtitleStr:string,durationMultiplier:number EndTextCommandThefeedPostMessagetextWithCrewTag c HUD 0x5CBF7BADE20DB93E integer picTxd:string,picTxn:string,flash:boolean,iconType:integer,nameStr:string,subtitleStr:string,duration:number,crewPackedStr:string EndTextCommandThefeedPostMessagetextWithCrewTagAndAdditionalIcon c HUD 0x531B84E7DA981FB6 integer picTxd:string,picTxn:string,flash:boolean,iconType1:integer,nameStr:string,subtitleStr:string,duration:number,crewPackedStr:string,iconType2:integer,textColor:integer -EndTextCommandThefeedPostMpticker c HUD 0xF020C96915705B3A integer blink:boolean,bHasTokens:boolean +EndTextCommandThefeedPostMpticker c HUD 0xF020C96915705B3A integer isImportant:boolean,showInBrief:boolean EndTextCommandThefeedPostReplayIcon c HUD 0xD202B92CBF1D816F integer eType:integer,iIcon:integer,sTitle:string EndTextCommandThefeedPostReplayInput c HUD 0xDD6CB2CCE7C2735C integer type:integer,button:string,text:string EndTextCommandThefeedPostStats c HUD 0x2B7E9A4EAAA93C89 integer statTitle:string,iconEnum:integer,stepVal:boolean,barValue:integer,isImportant:boolean,picTxd:string,picTxn:string -EndTextCommandThefeedPostTicker c HUD 0x2ED7843F8F801023 integer isImportant:boolean,bHasTokens:boolean -EndTextCommandThefeedPostTickerForced c HUD 0x44FA03975424A0EE integer blink:boolean,bHasTokens:boolean -EndTextCommandThefeedPostTickerWithTokens c HUD 0x378E809BF61EC840 integer isImportant:boolean,bHasTokens:boolean +EndTextCommandThefeedPostTicker c HUD 0x2ED7843F8F801023 integer isImportant:boolean,showInBrief:boolean +EndTextCommandThefeedPostTickerForced c HUD 0x44FA03975424A0EE integer isImportant:boolean,showInBrief:boolean +EndTextCommandThefeedPostTickerWithTokens c HUD 0x378E809BF61EC840 integer isImportant:boolean,showInBrief:boolean EndTextCommandThefeedPostUnlock c HUD 0x33EE12743CCD6343 any chTitle:string,iconType:integer,chSubtitle:string EndTextCommandThefeedPostUnlockTu c HUD 0xC8F3AAF93D0600BF any chTitle:string,iconType:integer,chSubtitle:string,isImportant:boolean EndTextCommandThefeedPostUnlockTuWithColor c HUD 0x7AE0589093A2E088 any chTitle:string,iconType:integer,chSubtitle:string,isImportant:boolean,titleColor:integer,p5:boolean @@ -978,21 +996,21 @@ FadeDecalsInRange c GRAPHICS 0xD77EDADB0420E6E0 x:number,y:number,z:number,radi FadeOutLocalPlayer c NETWORK 0x416DBD4CD6ED8DD2 p0:boolean FadeUpPedLight c GRAPHICS 0xC9B18B4619F48F7B p0:number FilloutPmPlayerList c NETWORK 0xCBBD7C4991B64809 boolean,integer p1:any,p2:any -FilloutPmPlayerListWithNames c NETWORK 0x716B6DB9D1886106 boolean p0:any,p1:any,p2:any,p3:any +FilloutPmPlayerListWithNames c NETWORK 0x716B6DB9D1886106 boolean,integer,integer p2:any,p3:any FinalizeHeadBlend c PED 0x4668D80430D6C299 ped:Ped -FindAnimEventPhase c ENTITY 0x07F1BE2BCCAA27A7 boolean animDictionary:string,animName:string,p2:string,p3:any,p4:any -FindFirstObject c CFX 0xFAA6CB5D integer,Entity -FindFirstPed c CFX 0xFB012961 integer,Entity -FindFirstPickup c CFX 0x3FF9D340 integer,Entity -FindFirstVehicle c CFX 0x15E55694 integer,Entity +FindAnimEventPhase c ENTITY 0x07F1BE2BCCAA27A7 boolean,integer,integer animDictionary:string,animName:string,p2:string +FindFirstObject c CFX 0xFAA6CB5D integer,Entity outEntity?:Entity +FindFirstPed c CFX 0xFB012961 integer,Entity outEntity?:Entity +FindFirstPickup c CFX 0x3FF9D340 integer,Entity outEntity?:Entity +FindFirstVehicle c CFX 0x15E55694 integer,Entity outEntity?:Entity FindKvp b CFX 0xBD7BEBC5 string handle:integer -FindNextObject c CFX 0x4E129DBF boolean,Entity findHandle:integer -FindNextPed c CFX 0xAB09B548 boolean,Entity findHandle:integer -FindNextPickup c CFX 0x4107EF0F boolean,Entity findHandle:integer -FindNextVehicle c CFX 0x8839120D boolean,Entity findHandle:integer +FindNextObject c CFX 0x4E129DBF boolean,Entity findHandle:integer,outEntity?:Entity +FindNextPed c CFX 0xAB09B548 boolean,Entity findHandle:integer,outEntity?:Entity +FindNextPickup c CFX 0x4107EF0F boolean,Entity findHandle:integer,outEntity?:Entity +FindNextVehicle c CFX 0x8839120D boolean,Entity findHandle:integer,outEntity?:Entity FindRadioStationIndex c AUDIO 0x8D67489793FF428B integer stationNameHash:integer FindRandomPointInSpace c VEHICLE 0x8DC9675797123522 vector3 ped:Ped -FindSpawnPointInDirection c MISC 0x6874E2190B0C1972 boolean,vector3 posX:number,posY:number,posZ:number,dirX:number,dirY:number,dirZ:number,distance:number +FindSpawnPointInDirection c MISC 0x6874E2190B0C1972 boolean,vector3 posX:number,posY:number,posZ:number,dirX:number,dirY:number,dirZ:number,distance:number,spawnPoint?:vector3 FindVehicleCarryingThisEntity c VEHICLE 0x375E7FC44F21C8AB Vehicle entity:Entity FireAirDefenseWeapon c WEAPON 0x44F1012B69313374 zoneId:integer,x:number,y:number,z:number FixObjectFragment c OBJECT 0xF9C1681347C8BD15 object:Object @@ -1006,7 +1024,7 @@ FlashWantedDisplay c HUD 0xA18AFB39081B6A1F p0:boolean Floor c SYSTEM 0xF34EE736CF047844 integer value:number FlushResourceKvp s CFX 0xE27C97A0 ForceAmbientSiren c AUDIO 0x552369F549563AD5 shouldPlay:boolean DistantCopCarSirens -ForceCinematicRenderingThisUpdate c CAM 0xA41BCD7213805AAC p0:boolean +ForceCinematicRenderingThisUpdate c CAM 0xA41BCD7213805AAC enable:boolean ForceCleanup c PLAYER 0xBC8983F38F78ED51 cleanupFlags:integer ForceCleanupForAllThreadsWithThisName c PLAYER 0x4C68DDDDF0097317 name:string,cleanupFlags:integer ForceCleanupForThreadWithThisId c PLAYER 0xF745B37630DF176B id:integer,cleanupFlags:integer @@ -1016,7 +1034,7 @@ ForceEntityAiAndAnimationUpdate c ENTITY 0x40FDEDB72F8293B2 entity:Entity ForceGameStatePlaying c MISC 0xC0AA53F866B3134D ForceLightningFlash c MISC 0xF6062E089251C898 ForceMusicTrackList c AUDIO 0x4E0AF9114608257C radioStation:string,trackListName:string,timeOffsetMilliseconds:integer -ForcePedAiAndAnimationUpdate c PED 0x2208438012482A1A ped:Ped,p1:boolean,p2:boolean +ForcePedAiAndAnimationUpdate c PED 0x2208438012482A1A ped:Ped,forceAiPreCameraUpdate:boolean,forceZeroTimestep:boolean ForcePedMotionState c PED 0xF28965D04F570DCA boolean ped:Ped,motionStateHash:Hash,shouldReset:boolean,updateState:integer,forceAIPreCameraUpdate:boolean ForcePedPanicWalla c AUDIO 0x062D5EAD4DA2FA6A ForcePedToOpenParachute c PED 0x16E42E800B472221 ped:Ped @@ -1063,22 +1081,24 @@ GetAllPeds s CFX 0xB8584FEF table GetAllRopes c CFX 0x760A2D67 table GetAllTrackJunctions c CFX 0x81A08523 table GetAllVehicleModels c CFX 0xD7531645 table -GetAllVehicles b VEHICLE 0x9B8E1BF04B51F2E8 integer,integer +GetAllVehicles b VEHICLE 0x9B8E1BF04B51F2E8 integer,integer vehArray?:integer 0x332169F5 table GetAllocatedStackSize c MISC 0x8B3CA62B1EF19B62 integer GetAllowMovementWhileZoomed c PAD 0xFC859E2374407556 boolean GetAmbientPedRangeMultiplier c CFX 0xB550232D number GetAmbientVehicleRangeMultiplier c CFX 0x667EC929 number GetAmbientVoiceNameHash c AUDIO 0x5E203DA2BA15D436 Hash ped:Ped -GetAmmoInClip c WEAPON 0x2E1202248937775C boolean,integer ped:Ped,weaponHash:Hash +GetAmmoInClip c WEAPON 0x2E1202248937775C boolean,integer ped:Ped,weaponHash:Hash,ammo?:integer GetAmmoInPedWeapon c WEAPON 0x015A522136D7F951 integer ped:Ped,weaponhash:Hash +GetAmmoInVehicleWeaponClip c WEAPON 0x2857938C5D407AFA boolean vehicle:Vehicle,seat:integer,ammo:integer GetAngleBetween_2dVectors c MISC 0x186FC4BE848E1C92 number x1:number,y1:number,x2:number,y2:number GetAnimDuration c ENTITY 0xFEDDF04D62B8D790 number animDict:string,animName:string GetAnimInitialOffsetPosition c PED 0xBE22B26DD764C040 vector3 animDict:string,animName:string,x:number,y:number,z:number,xRot:number,yRot:number,zRot:number,p8:number,p9:integer GetAnimInitialOffsetRotation c PED 0x4B805E6046EE9E47 vector3 animDict:string,animName:string,x:number,y:number,z:number,xRot:number,yRot:number,zRot:number,p8:number,p9:integer GetAreBombBayDoorsOpen c VEHICLE 0xD0917A423314BBA8 boolean aircraft:Vehicle AreBombBayDoorsOpen +GetAreCameraControlsDisabled c PLAYER 0x7C814D2FB49F40C0 boolean GetAspectRatio c GRAPHICS 0xF1307EF624A80D87 number physicalAspect:boolean GetAudibleMusicTrackTextId c AUDIO 0x50B196FC9ED6545B integer -GetBaseElementMetadata c MISC 0xB335F761606DB47C boolean p1:any,p2:any,p3:any,p4:boolean +GetBaseElementMetadata c MISC 0xB335F761606DB47C boolean,integer,integer p3:any,p4:boolean GetBenchmarkIterationsFromCommandLine c MISC 0x4750FC27570311EC integer GetBenchmarkPassFromCommandLine c MISC 0x1B2366C3F2A5C8DF integer GetBenchmarkTime c MISC 0xE599A503B3837E1B number @@ -1107,7 +1127,7 @@ GetBroadcastFinshedLosSound c LOADINGSCREEN 0xB0C56BD3D808D863 toggle:boolean L GetCalmingQuadAtCoords c CFX 0x870E8B40 integer x:number,y:number GetCalmingQuadBounds c CFX 0xFF60E63 boolean,integer,integer,integer,integer waterQuad:integer GetCalmingQuadCount c CFX 0xCEBFC42 integer -GetCalmingQuadDampening c CFX 0xB0E3A058 boolean,number waterQuad:integer +GetCalmingQuadDampening c CFX 0xB0E3A058 boolean,number waterQuad:integer,calmingQuadDampening?:number GetCamActiveViewModeContext c CAM 0x19CAFA3C87F7C2FF integer GetCamAnimCurrentPhase c CAM 0xA10B2DB49E92A6B0 number cam:Cam GetCamCoord c CAM 0xBAC038F7459AE5AE vector3 cam:Cam @@ -1137,18 +1157,25 @@ GetClockSeconds c CLOCK 0x494E97C2EF27C470 integer GetClockYear c CLOCK 0x961777E64BDAF717 integer GetClosestBlipOfType c HUD 0xD484BF71050CA1EE Blip blipSprite:integer GetClosestFirePos c FIRE 0x352A9F6BCF90081F boolean,vector3 x:number,y:number,z:number -GetClosestMajorVehicleNode c PATHFIND 0x2EABE3B06F58C1BE boolean,vector3 x:number,y:number,z:number,unknown1:number,unknown2:integer +GetClosestMajorVehicleNode c PATHFIND 0x2EABE3B06F58C1BE boolean,vector3 x:number,y:number,z:number,zMeasureMult:number,zTolerance:integer GetClosestObjectOfType c OBJECT 0xE143FA2249364369 Object x:number,y:number,z:number,radius:number,modelHash:Hash,isMission:boolean,p6:boolean,p7:boolean GetClosestPed c PED 0xC33AB876A77F8164 boolean,Ped x:number,y:number,z:number,radius:number,p4:boolean,p5:boolean,p7:boolean,p8:boolean,pedType:integer GetClosestRoad c PATHFIND 0x132F52BBA570FE92 boolean,vector3,vector3,integer,integer,number x:number,y:number,z:number,minimumEdgeLength:number,minimumLaneCount:integer,onlyMajorRoads:boolean GetClosestTrackNodes c CFX 0x59FC24A7 table position:vector3,radius:number GetClosestVehicle c VEHICLE 0xF73EB622C4F1689B Vehicle x:number,y:number,z:number,radius:number,modelHash:Hash,flags:integer -GetClosestVehicleNode c PATHFIND 0x240A18690AE96513 boolean,vector3 x:number,y:number,z:number,nodeType:integer,p5:number,p6:number -GetClosestVehicleNodeWithHeading c PATHFIND 0xFF071FB798B803B0 boolean,vector3,number x:number,y:number,z:number,nodeType:integer,p6:number,p7:integer +GetClosestVehicleNode c PATHFIND 0x240A18690AE96513 boolean,vector3 x:number,y:number,z:number,nodeFlags:integer,zMeasureMult:number,zTolerance:number +GetClosestVehicleNodeWithHeading c PATHFIND 0xFF071FB798B803B0 boolean,vector3,number x:number,y:number,z:number,nodeFlags:integer,zMeasureMult:number,zTolerance:integer GetCloudHatOpacity c MISC 0x20AC25E781AE4A84 number GetCloudTimeAsInt c NETWORK 0x9A73240B49945C76 integer GetCloudTimeAsString c NETWORK 0xF12E6CD06C73D69E string GetCollisionNormalOfLastHitForEntity c ENTITY 0xE465D4AB7CA6AE72 vector3 entity:Entity +GetColshapeCircleData b CFX 0x1DC0D547 boolean,number,number,number colShapeId:integer +GetColshapeCuboidData b CFX 0x9D0BC07C boolean,number,number,number,number,number,number colShapeId:integer +GetColshapeCylinderData b CFX 0x83B79CDA boolean,number,number,number,number,number colShapeId:integer +GetColshapeDimension s CFX 0x8B7A9C14 integer colShapeId:integer +GetColshapePolygonData b CFX 0xCD8BFE8D table,number,number colShapeId:integer +GetColshapeRectangleData b CFX 0xED8B05DF boolean,number,number,number,number,number,number colShapeId:integer +GetColshapeSphereData b CFX 0xFF94C6DB boolean,number,number,number,number colShapeId:integer GetCombatFloat c PED 0x52DFF8A10508090A number ped:Ped,p1:integer GetCommerceItemCat c NETWORK 0x6F44CBF56D79FAC0 string index:integer,index2:integer GetCommerceItemId c NETWORK 0x662635855957C411 string index:integer @@ -1184,8 +1211,8 @@ GetCurrentLanguageId c LOCALIZATION 0x2BDD44CC428A7EAE integer GetCurrentLangua GetCurrentNotification c HUD 0x82352748437638CA integer ThefeedGetFirstVisibleDeleteRemaining GetCurrentNumberOfCloudPhotos c GRAPHICS 0x473151EBC762C6DA integer GetCurrentNumberOfPhotos c GRAPHICS 0x473151EBC762C6DA integer GetCurrentNumberOfCloudPhotos -GetCurrentPedVehicleWeapon c WEAPON 0x1017582BCD3832DC boolean,Hash ped:Ped -GetCurrentPedWeapon b WEAPON 0x3A87E44BB9A01D54 boolean,Hash ped:Ped,p2:boolean +GetCurrentPedVehicleWeapon c WEAPON 0x1017582BCD3832DC boolean,Hash ped:Ped,weaponHash?:Hash +GetCurrentPedWeapon b WEAPON 0x3A87E44BB9A01D54 boolean,Hash ped:Ped,p2:boolean 0xB0237302 Hash ped:Ped GetCurrentPedWeaponEntityIndex c WEAPON 0x3B390A939AF0B5FC Entity ped:Ped GetCurrentPlaybackForVehicle c VEHICLE 0x42BC05C27A946054 integer vehicle:Vehicle GetCurrentRadioStationHash c AUDIO 0x3E65CDE5215832C1 integer radioStationName:string GetCurrentRadioTrackPlaybackTime @@ -1198,12 +1225,13 @@ GetCurrentTrackSoundName c AUDIO 0x34D66BC058019CE0 Hash radioStationName:string GetCurrentWebpageId c HUD 0x01A358D9128B7A86 integer GetCurrentWebsiteId c HUD 0x97D47996FC48CBAD integer GetCutFileNumSections c CUTSCENE 0x0ABC54DE641DC0FC integer cutsceneName:string -GetCutsceneEndTime c CUTSCENE 0x011883f41211432a integer +GetCutsceneEndTime c CUTSCENE 0x971D7B15BCDBEF99 integer GetCutscenePlayTime c CUTSCENE 0x710286BC5EF4D6E1 integer GetCutsceneSectionPlaying c CUTSCENE 0x49010A6A396553D8 integer GetCutsceneTime c CUTSCENE 0xE625BEABBAFFDAB9 integer GetCutsceneTotalDuration c CUTSCENE 0xEE53B14A19E480D4 integer -GetDateAndTimeFromUnixEpoch c NETWORK 0xAC97AF97FA68E5D5 posixTime:integer,timeStructure:any ConvertPosixTime +GetDamping c PHYSICS 0x8C520A929415BCD2 vector3 entity:Entity,type:integer +GetDateAndTimeFromUnixEpoch c NETWORK 0xAC97AF97FA68E5D5 integer posixTime:integer,timeStructure?:integer ConvertPosixTime GetDeadPedPickupCoords c PED 0xCD5003B097200F36 vector3 ped:Ped,p1:number,p2:number GetDebugCamera c CAM 0x77C3CEC46BE286F6 Cam GetDecalWashLevel c GRAPHICS 0x323F647679A09103 number decal:integer @@ -1216,14 +1244,14 @@ GetDisabledControlNormal c PAD 0x11E65974A982637C number padIndex:integer,contro GetDisabledControlUnboundNormal c PAD 0x4F8A26A890FD62FB number padIndex:integer,control:integer GetDisplayNameFromVehicleModel c VEHICLE 0xB215AAC32D25D019 string modelHash:Hash GetDistanceBetweenCoords c MISC 0xF1B760881820C952 number x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,useZ:boolean -GetDlcVehicleData c FILES 0x33468EDC08E371F6 boolean dlcVehicleIndex:integer,outData:any +GetDlcVehicleData c FILES 0x33468EDC08E371F6 boolean,integer dlcVehicleIndex:integer,outData?:integer GetDlcVehicleFlags c FILES 0x5549EE11FA22FCF2 integer dlcVehicleIndex:integer GetDlcVehicleModLockHash c FILES 0xC098810437312FFF Hash hash:Hash GetDlcVehicleModel c FILES 0xECC01B7C5763333C Hash dlcVehicleIndex:integer -GetDlcWeaponComponentData c FILES 0x6CF598A2957C2BF8 boolean,integer dlcWeaponIndex:integer,dlcWeapCompIndex:integer -GetDlcWeaponComponentDataSp c FILES 0x31D5E073B6F93CDC boolean,integer dlcWeaponIndex:integer,dlcWeapCompIndex:integer -GetDlcWeaponData c FILES 0x79923CD21BECE14E boolean,integer dlcWeaponIndex:integer -GetDlcWeaponDataSp c FILES 0x310836EE7129BA33 boolean,integer dlcWeaponIndex:integer +GetDlcWeaponComponentData c FILES 0x6CF598A2957C2BF8 boolean,integer dlcWeaponIndex:integer,dlcWeapCompIndex:integer,ComponentDataPtr?:integer +GetDlcWeaponComponentDataSp c FILES 0x31D5E073B6F93CDC boolean,integer dlcWeaponIndex:integer,dlcWeapCompIndex:integer,ComponentDataPtr?:integer +GetDlcWeaponData c FILES 0x79923CD21BECE14E boolean,integer dlcWeaponIndex:integer,outData?:integer +GetDlcWeaponDataSp c FILES 0x310836EE7129BA33 boolean,integer dlcWeaponIndex:integer,outData?:integer GetDoesVehicleHaveTombstone c VEHICLE 0x71AFB258CCED3A27 boolean vehicle:Vehicle GetDriftTyresEnabled c VEHICLE 0x2F5A72430E78C8D3 boolean vehicle:Vehicle GetDuiHandle c CFX 0x1655D41D string duiObject:integer @@ -1244,7 +1272,7 @@ GetEntityBoneRotationLocal c ENTITY 0xBD8D32550E5CEBFE vector3 entity:Entity,bon GetEntityCanBeDamaged c ENTITY 0xD95CC5D2AB15A09F boolean entity:Entity GetEntityCollisionDisabled b ENTITY 0xCCF1E97BEFDAE480 boolean entity:Entity GetEntityCollisonDisabled c ENTITY 0xCCF1E97BEFDAE480 boolean entity:Entity GetEntityCollisionDisabled -GetEntityCoords b ENTITY 0x3FEF770D40960D5A vector3 entity:Entity,alive:boolean +GetEntityCoords b ENTITY 0x3FEF770D40960D5A vector3 entity:Entity,alive:boolean 0x1647F1CB vector3 entity:Entity GetEntityForwardVector c ENTITY 0x0A794A5A57F8DF91 vector3 entity:Entity GetEntityForwardX c ENTITY 0x8BB4EF4214E0E6D5 number entity:Entity GetEntityForwardY c ENTITY 0x866A4A5FAE349510 number entity:Entity @@ -1268,16 +1296,16 @@ GetEntityOrphanMode s CFX 0xD16EA02F integer entity:Entity GetEntityPhysicsHeading c ENTITY 0x846BF6291198A71E number entity:Entity GetEntityHeadingFromEulers GetEntityPickup c ENTITY 0x1F922734E259BD26 Entity entity:Entity,modelHash:Hash GetEntityPitch c ENTITY 0xD45DC2893621E1FE number entity:Entity -GetEntityPlayerIsFreeAimingAt c PLAYER 0x2975C866E6713290 boolean,Entity player:Player +GetEntityPlayerIsFreeAimingAt c PLAYER 0x2975C866E6713290 boolean,Entity player:Player,entity?:Entity GetEntityPopulationType b ENTITY 0xF6F5161F4534EDFF integer entity:Entity GetEntityProofs c ENTITY 0xBE8CD9BE829BBEBF boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean entity:Entity GetEntityQuaternion c ENTITY 0x7B3703D2D32DFA18 number,number,number,number entity:Entity GetEntityRemoteSyncedScenesAllowed s CFX 0x91B38FB6 boolean entity:Entity GetEntityRoll c ENTITY 0x831E0242595560DF number entity:Entity -GetEntityRotation b ENTITY 0xAFBD61CC738D9EB9 vector3 entity:Entity,rotationOrder:integer +GetEntityRotation b ENTITY 0xAFBD61CC738D9EB9 vector3 entity:Entity,rotationOrder:integer 0x8FF45B04 vector3 entity:Entity GetEntityRotationVelocity b ENTITY 0x213B91045D09B983 vector3 entity:Entity GetEntityRoutingBucket s CFX 0xED4B0486 integer entity:Entity -GetEntityScript b ENTITY 0xA6E9C38DB51D7748 string,ScrHandle entity:Entity +GetEntityScript b ENTITY 0xA6E9C38DB51D7748 string,ScrHandle entity:Entity,script?:ScrHandle 0xB7F70784 string entity:Entity GetEntitySpeed b ENTITY 0xD5037BA82E12416F number entity:Entity GetEntitySpeedVector c ENTITY 0x9A8D700A51CB7B0D vector3 entity:Entity,relative:boolean GetEntitySubmergedLevel c ENTITY 0xE81AFC1BC4CC41CE number entity:Entity @@ -1352,7 +1380,7 @@ GetGroundZCoordWithOffsets c MISC 0x8BDC7BFC57A81E76 boolean,number,vector3 x:nu GetGroundZExcludingObjectsFor_3dCoord c MISC 0x9E82F0F362881B29 boolean,number x:number,y:number,z:number,waterAsGround:boolean GetGroundZFor_3dCoord c MISC 0xC906A7DAB05C8D2B boolean,number x:number,y:number,z:number,includeWater:boolean GetGroundZFor_3dCoord_2 c MISC 0x9E82F0F362881B29 boolean,number x:number,y:number,z:number,waterAsGround:boolean GetGroundZExcludingObjectsFor_3dCoord -GetGroupSize c PED 0x8DE69FE35CA09A45 integer groupID:integer,unknown:any +GetGroupSize c PED 0x8DE69FE35CA09A45 integer,integer groupID:integer GetHairRgbColor c PED 0x4852FC386E2E1BB5 integer,integer,integer hairColorIndex:integer GetPedHairRgbColor GetHasLowerableWheels c VEHICLE 0xDCA174A42133F08C boolean vehicle:Vehicle GetHasRetractableWheels GetHasObjectFragInst c PHYSICS 0x0C112765300C7E1E boolean object:Object @@ -1466,17 +1494,18 @@ GetLandingGearState b VEHICLE 0x9B0F3DCA3DB0F4CD integer vehicle:Vehicle GetLastDrivenVehicle c VEHICLE 0xB2D06FAEDE65B577 Vehicle GetLastInputMethod c PAD 0xA571D46727E2B718 boolean padIndex:integer IsUsingKeyboard GetLastMaterialHitByEntity c ENTITY 0x5C3D0A935F535C4C Hash entity:Entity -GetLastPedInVehicleSeat b VEHICLE 0x83F969AA1EE2A664 Ped vehicle:Vehicle,seatIndex:integer +GetLastPedInVehicleSeat b VEHICLE 0x83F969AA1EE2A664 Ped vehicle:Vehicle,seatIndex:integer 0xF7C6792D Entity vehicle:Vehicle,seatIndex:integer GetLastRammedVehicle c VEHICLE 0x04F2FA6E234162F7 Vehicle vehicle:Vehicle GetLengthOfLiteralString c HUD 0xF030907CCBB8A9FD integer string:string GetLengthOfLiteralStringInBytes c HUD 0x43E4111189E54F0E integer string:string GetLengthOfString c HUD 0x43E4111189E54F0E integer string:string GetLengthOfLiteralStringInBytes GetLengthOfStringWithThisTextLabel c HUD 0x801BD273D3A23F74 integer gxt:string GetLevelBlipSprite c HUD 0x4A9923385BDB9DAD integer GetStandardBlipEnumId -GetLinePlaneIntersection c MISC 0xF56DFB7B61BE7276 boolean,number x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,planeX:number,planeY:number,planeZ:number,planeNormalX:number,planeNormalY:number,planeNormalZ:number +GetLinePlaneIntersection c MISC 0xF56DFB7B61BE7276 boolean,number x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,planeX:number,planeY:number,planeZ:number,planeNormalX:number,planeNormalY:number,planeNormalZ:number,intersectionParameter?:number GetLiveryName c VEHICLE 0xB4C7A93837C91A1F string vehicle:Vehicle,liveryIndex:integer GetLocalPlayerAimState c PAD 0xBB41AFBBBC0A0287 integer -GetLocalPlayerAimState_2 c PAD 0x59B9A7AF4C95133C integer +GetLocalPlayerAimState_2 c PAD 0x59B9A7AF4C95133C integer GetLocalPlayerGamepadAimState +GetLocalPlayerGamepadAimState c PAD 0x59B9A7AF4C95133C integer GetLocalTime c CLOCK 0x50C7A99057A69748 integer,integer,integer,integer,integer,integer GetLockonDistanceOfCurrentPedWeapon c WEAPON 0x840F03E9041E2C9C number ped:Ped GetLockonRangeOfCurrentPedWeapon c WEAPON 0x840F03E9041E2C9C number ped:Ped GetLockonDistanceOfCurrentPedWeapon @@ -1485,13 +1514,13 @@ GetMainPlayerBlipId c HUD 0xDCD4EC3F419D02FA Blip GetMakeNameFromVehicleModel c VEHICLE 0xF7AF4F159FF99F97 string modelHash:Hash GetMakeupRgbColor c PED 0x013E5CFC38CD5387 integer,integer,integer makeupColorIndex:integer GetPedMakeupRgbColor GetMapZoomDataLevel c CFX 0x1363A998 boolean,number,number,number,number,number index:integer -GetMapdataEntityHandle c CFX 0x30AA6911 boolean,integer mapDataHash:integer,entityInternalIdx:integer +GetMapdataEntityHandle c CFX 0x30AA6911 boolean,integer mapDataHash:integer,entityInternalIdx:integer,entityHandle?:integer GetMapdataEntityMatrix c CFX 0x2C3CDA93 boolean mapDataHash:integer,entityInternalIdx:integer,matrixPtr:integer GetMapdataFromHashKey c CFX 0xD29D8EDD integer mapdataHandle:Hash -GetMaxAmmo c WEAPON 0xDC16122C7A20C933 boolean,integer ped:Ped,weaponHash:Hash -GetMaxAmmoByType c WEAPON 0x585847C5E4E11709 boolean,integer ped:Ped,ammoType:Hash +GetMaxAmmo c WEAPON 0xDC16122C7A20C933 boolean,integer ped:Ped,weaponHash:Hash,ammo?:integer +GetMaxAmmoByType c WEAPON 0x585847C5E4E11709 boolean,integer ped:Ped,ammoType:Hash,ammo?:integer GetMaxAmmoInClip c WEAPON 0xA38DCFFCEA8962FA integer ped:Ped,weaponHash:Hash,p2:boolean -GetMaxAmmo_2 c WEAPON 0x585847C5E4E11709 boolean,integer ped:Ped,ammoType:Hash GetMaxAmmoByType +GetMaxAmmo_2 c WEAPON 0x585847C5E4E11709 boolean,integer ped:Ped,ammoType:Hash,ammo?:integer GetMaxAmmoByType GetMaxNumNetworkObjects c NETWORK 0xC7BE335216B5EC7C integer GetMaxNumNetworkPeds c NETWORK 0x0C1F7D49C39D2289 integer GetMaxNumNetworkPickups c NETWORK 0xA72835064DD63E4C integer @@ -1502,22 +1531,24 @@ GetMaximumNumberOfCloudPhotos c GRAPHICS 0xDC54A7AF8B3A14EF integer GetMaximumNumberOfPhotos c GRAPHICS 0x34D23450F028B0BF integer GetMaximumNumberOfPhotos_2 c GRAPHICS 0xDC54A7AF8B3A14EF integer GetMaximumNumberOfCloudPhotos GetMeleeTargetForPed c PED 0x18A3E9EE1297FD39 Ped ped:Ped -GetMenuPedBoolStat c HUD 0x052991E59076E4E4 boolean p0:Hash,p1:any -GetMenuPedFloatStat c HUD 0x5FBD7095FE7AE57F boolean,number p0:any -GetMenuPedIntStat c HUD 0xEF4CED81CEBEDC6D boolean p0:any,p1:any -GetMenuPedMaskedIntStat c HUD 0x90A6526CF0381030 boolean p0:any,p1:any,p2:any,p3:any +GetMenuLayoutChangedEventDetails c HUD 0x7E17BE53E1AAABAF integer,integer,integer +GetMenuPedBoolStat c HUD 0x052991E59076E4E4 boolean,integer p0:Hash,p1?:integer +GetMenuPedFloatStat c HUD 0x5FBD7095FE7AE57F boolean,number p0:any,p1?:number +GetMenuPedIntStat c HUD 0xEF4CED81CEBEDC6D boolean,integer p0:any,p1?:integer +GetMenuPedMaskedIntStat c HUD 0x90A6526CF0381030 boolean,integer p0:any,p2:any,p3:any GetMillisecondsPerGameMinute c CLOCK 0x2F8B4D1C595B11DB integer GetMinimapFowCoordinateIsRevealed c HUD 0x6E31B91145873922 boolean x:number,y:number,z:number GetMinimapFowDiscoveryRatio c HUD 0xE0130B41D3CF4574 number GetMinimapRevealPercentage c HUD 0xE0130B41D3CF4574 number GetMinimapFowDiscoveryRatio GetMissionFlag c MISC 0xA33CDCCDA663159E boolean -GetMobilePhonePosition c MOBILE 0x584FDFDA48805B86 vector3 -GetMobilePhoneRenderId c MOBILE 0xB4A53E05F68B6FA1 integer +GetMobilePhonePosition c MOBILE 0x584FDFDA48805B86 vector3 position?:vector3 +GetMobilePhoneRenderId c MOBILE 0xB4A53E05F68B6FA1 integer renderId?:integer GetMobilePhoneRotation c MOBILE 0x1CEFB61F193070AE vector3 p1:Vehicle GetModSlotName c VEHICLE 0x51F0FEB9F6AE98C0 string vehicle:Vehicle,modType:integer GetModTextLabel c VEHICLE 0x8935624F8C5592CC string vehicle:Vehicle,modType:integer,modValue:integer GetModelDimensions c MISC 0x03E8D3D5F549087A vector3,vector3 modelHash:Hash GetMount c PED 0xE7E11B8DCBED1058 Ped ped:Ped +GetMouseEvent c HUD 0x632B2940C67F4EA9 boolean,boolean,integer,integer,integer scaleformHandle:integer GetMusicPlaytime c AUDIO 0xE7A0D23DC414507B integer GetMusicVolSlider c AUDIO 0x3A48AB4445D499BE integer GetNameOfThread c SCRIPT 0x05A42BA9FC8DA96B string threadId:integer @@ -1541,11 +1572,11 @@ GetNgstatBoolHash c STATS 0xBA52FF538ED2BC71 Hash index:integer,spStat:boolean,c GetNgstatIntHash c STATS 0x2B4CDCA6F07FF3DA Hash index:integer,spStat:boolean,charStat:boolean,character:integer,section:string GetNoLoadingScreen c SCRIPT 0x18C1270EA7F199BC boolean GetNorthRadarBlip c HUD 0x3F0CF9CB7E589B88 Blip -GetNthClosestVehicleNode c PATHFIND 0xE50E52416CCF948B boolean,vector3 x:number,y:number,z:number,nthClosest:integer,unknown1:any,unknown2:any,unknown3:any -GetNthClosestVehicleNodeFavourDirection c PATHFIND 0x45905BE8654AE067 boolean,vector3,number x:number,y:number,z:number,desiredX:number,desiredY:number,desiredZ:number,nthClosest:integer,nodetype:integer,p10:number,p11:any -GetNthClosestVehicleNodeId c PATHFIND 0x22D7275A79FE8215 integer x:number,y:number,z:number,nth:integer,nodetype:integer,p5:number,p6:number -GetNthClosestVehicleNodeIdWithHeading c PATHFIND 0x6448050E9C2A7207 integer,vector3,number x:number,y:number,z:number,nthClosest:integer,p6:any,p7:number,p8:number -GetNthClosestVehicleNodeWithHeading c PATHFIND 0x80CA6A8B6C094CC4 boolean,vector3,number,integer x:number,y:number,z:number,nthClosest:integer,searchFlags:integer,zMeasureMult:number,zTolerance:number +GetNthClosestVehicleNode c PATHFIND 0xE50E52416CCF948B boolean,vector3 x:number,y:number,z:number,nthClosest:integer,nodeFlags:integer,zMeasureMult:number,zTolerance:number +GetNthClosestVehicleNodeFavourDirection c PATHFIND 0x45905BE8654AE067 boolean,vector3,number x:number,y:number,z:number,desiredX:number,desiredY:number,desiredZ:number,nthClosest:integer,nodeFlags:integer,zMeasureMult:number,zTolerance:number +GetNthClosestVehicleNodeId c PATHFIND 0x22D7275A79FE8215 integer x:number,y:number,z:number,nthClosest:integer,nodeFlags:integer,zMeasureMult:number,zTolerance:number +GetNthClosestVehicleNodeIdWithHeading c PATHFIND 0x6448050E9C2A7207 integer,vector3,number x:number,y:number,z:number,nthClosest:integer,nodeFlags:integer,zMeasureMult:number,zTolerance:number +GetNthClosestVehicleNodeWithHeading c PATHFIND 0x80CA6A8B6C094CC4 boolean,vector3,number,integer x:number,y:number,z:number,nthClosest:integer,nodeFlags:integer,zMeasureMult:number,zTolerance:number GetNuiCursorPosition c CFX 0xBDBA226F integer,integer GetNumCommerceItems c NETWORK 0xF2EAC213D5EA0623 integer GetNumCreatedMissionObjects c NETWORK 0x12B6281B6C6706C0 integer p0:boolean @@ -1624,9 +1655,10 @@ GetPackedTuIntStatKey c STATS 0xD16C2AD6B8E32854 Hash index:integer,spStat:boole GetParkedVehicleDensityMultiplier c CFX 0xFF72DF84 number GetPasswordHash s CFX 0x23473EA4 string password:string GetPauseMapPointerWorldPosition c CFX 0xE5AF7A82 vector3 -GetPauseMenuCursorPosition c HUD 0x5BFF36D6ED83E0AE vector3 +GetPauseMenuCursorPosition c HUD 0x5BFF36D6ED83E0AE vector3 GetPauseMenuPosition +GetPauseMenuPosition c HUD 0x5BFF36D6ED83E0AE vector3 GetPauseMenuSelection c HUD 0x36C1451A88A09630 integer,integer -GetPauseMenuSelectionData c HUD 0x7E17BE53E1AAABAF integer,integer,integer +GetPauseMenuSelectionData c HUD 0x7E17BE53E1AAABAF integer,integer,integer GetMenuLayoutChangedEventDetails GetPauseMenuState c HUD 0x272ACD84970869C5 integer GetPedAccuracy c PED 0x37F4AD56ECBC0CD6 integer ped:Ped GetPedAlertness c PED 0xF6AA118530443FD2 integer ped:Ped @@ -1664,7 +1696,7 @@ GetPedDrawableVariationCollectionLocalIndex c CFX 0x9970386F integer ped:Ped,com GetPedDrawableVariationCollectionName c CFX 0xBCE0AB63 string ped:Ped,componentId:integer GetPedEmissiveIntensity c PED 0x1461B28A06717D68 number ped:Ped GetPedEnveffScale c PED 0x9C14D30395A51A3C number ped:Ped -GetPedEventData c PED 0xBA656A3BB01BDEA3 boolean ped:Ped,eventType:integer,outData:any +GetPedEventData c PED 0xBA656A3BB01BDEA3 boolean,integer ped:Ped,eventType:integer,outData?:integer GetPedExtractedDisplacement c PED 0xE0AF41401ADF87E3 vector3 ped:Ped,worldSpace:boolean GetPedEyeColor c PED 0x76BBA2CEE66D47E9 integer ped:Ped GetPedFaceFeature c CFX 0xBA352ADD number ped:Ped,index:integer @@ -1673,7 +1705,7 @@ GetPedGroupIndex c PED 0xF162E133B4E7A675 integer ped:Ped GetPedHairColor c CFX 0xA3EA2893 integer ped:Ped GetPedHairHighlightColor c CFX 0x4B087305 integer ped:Ped GetPedHairRgbColor c PED 0x4852FC386E2E1BB5 integer,integer,integer hairColorIndex:integer -GetPedHeadBlendData c PED 0x2746BD9D88C5C5D0 boolean ped:Ped,headBlendData:any +GetPedHeadBlendData c PED 0x2746BD9D88C5C5D0 boolean,integer ped:Ped,headBlendData?:integer GetPedHeadBlendFirstIndex c PED 0x68D353AB88B97E0C integer type:integer GetPedHeadBlendNumHeads c PED 0x5EF37013A6539C9D integer type:integer GetPedHeadOverlayData c CFX 0xC46EE605 boolean,integer,integer,integer,integer,number ped:Ped,index:integer @@ -1682,12 +1714,12 @@ GetPedHeadOverlayValue c PED 0xA60EF3B6461A4D43 integer ped:Ped,overlayID:intege GetPedHelmetStoredHatPropIndex c PED 0x451294E859ECC018 integer ped:Ped GetPedHelmetStoredHatTexIndex c PED 0x9D728C1E12BF5518 integer ped:Ped GetPedIlluminatedClothingGlowIntensity c PED 0x1461B28A06717D68 number ped:Ped GetPedEmissiveIntensity -GetPedInVehicleSeat b VEHICLE 0xBB40DD2270B65366 Ped vehicle:Vehicle,seatIndex:integer +GetPedInVehicleSeat b VEHICLE 0xBB40DD2270B65366 Ped vehicle:Vehicle,seatIndex:integer 0x388FDE9A Entity vehicle:Vehicle,seatIndex:integer GetPedIndexFromEntityIndex c ENTITY 0x04A2A40C73395041 Ped entity:Entity GetPedInsideExplosionArea c FIRE 0x14BA4BA137AF6CEC Entity explosionType:integer,x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,radius:number GetEntityInsideExplosionArea GetPedKiller c PED 0x93C8B64DEB84728C Entity ped:Ped GetPedSourceOfDeath -GetPedLastDamageBone c PED 0xD75960F6BD9EA49C boolean,integer ped:Ped -GetPedLastWeaponImpactCoord c WEAPON 0x6C4D0409BA1A2BC2 boolean,vector3 ped:Ped +GetPedLastDamageBone c PED 0xD75960F6BD9EA49C boolean,integer ped:Ped,outBone?:integer +GetPedLastWeaponImpactCoord c WEAPON 0x6C4D0409BA1A2BC2 boolean,vector3 ped:Ped,coords?:vector3 GetPedMakeupRgbColor c PED 0x013E5CFC38CD5387 integer,integer,integer makeupColorIndex:integer GetPedMaxHealth b PED 0x4700A416E8324EF3 integer ped:Ped GetPedModelHealthConfig c CFX 0xF71542F7 Hash modelHash:Hash @@ -1695,11 +1727,11 @@ GetPedModelPersonality c CFX 0xFE08CAD6 Hash modelHash:Hash GetPedMoney c PED 0x3F69145BBA87BAE7 integer ped:Ped GetPedMovementClipset c CFX 0x69E81E3D integer ped:Ped GetPedNearbyPeds c PED 0x23F8F5FC7E8C4A6B integer,integer ped:Ped,ignore:integer -GetPedNearbyVehicles c PED 0xCFF869CBFA210D82 integer,integer ped:Ped +GetPedNearbyVehicles c PED 0xCFF869CBFA210D82 integer,integer ped:Ped,sizeAndVehs?:integer GetPedPaletteVariation c PED 0xE3DD5F2A84B42281 integer ped:Ped,componentId:integer GetPedParachuteLandingType c PED 0x8B9F1FC6AE8166C0 integer ped:Ped GetPedParachuteState c PED 0x79CFD9827CC979B6 integer ped:Ped -GetPedParachuteTintIndex c PED 0xEAF5F7E5AE7C6C9D integer ped:Ped +GetPedParachuteTintIndex c PED 0xEAF5F7E5AE7C6C9D integer ped:Ped,outTintIndex?:integer GetPedPropCollectionLocalIndex c CFX 0xCD420AD1 integer ped:Ped,anchorPoint:integer GetPedPropCollectionName c CFX 0x6B5653E4 string ped:Ped,anchorPoint:integer GetPedPropGlobalIndexFromCollection c CFX 0x2CB45CDC integer ped:Ped,anchorPoint:integer,collection:string,propIndex:integer @@ -1742,7 +1774,7 @@ GetPlayerAdvancedModifierPrivileges c NETWORK 0xCD67AD041A394C9C string p0:integ GetPlayerCameraRotation s CFX 0x433C765D vector3 playerSrc:string GetPlayerCurrentStealthNoise c PLAYER 0x2F395D61F3A1F877 number player:Player GetPlayerEndpoint s CFX 0xFEE404F9 string playerSrc:string -GetPlayerFakeWantedLevel b PLAYER 0x56105E599CAB0EFA integer player:Player +GetPlayerFakeWantedLevel b PLAYER 0x56105E599CAB0EFA integer player:Player 0x98D244 integer playerSrc:string GetPlayerFocusPos s CFX 0x586F80FF vector3 playerSrc:string GetPlayerFromIndex s CFX 0xC8A9CE08 string index:integer GetPlayerFromServerId c CFX 0x344EA166 Player serverId:integer @@ -1755,21 +1787,21 @@ GetPlayerHealthRechargeLimit c PLAYER 0x8BC515BAE4AAF8FF number player:Player GetPlayerIdentifier s CFX 0x7302DBCF string playerSrc:string,identiferIndex:integer GetPlayerIdentifierByType s CFX 0xA61C8FC6 string playerSrc:string,identifierType:string GetPlayerIndex c PLAYER 0xA5EDC40EF369B48D Player -GetPlayerInvincible b PLAYER 0xB721981B2B939E07 boolean player:Player +GetPlayerInvincible b PLAYER 0xB721981B2B939E07 boolean player:Player 0x680C90EE boolean playerSrc:string GetPlayerInvincible_2 c CFX 0xF2E3912B boolean player:Player GetPlayerKillFallHeight c CFX 0xBFB2990C number GetPlayerLastMsg s CFX 0x427E8E6A integer playerSrc:string -GetPlayerMaxArmour b PLAYER 0x92659B4CE1863CB3 integer player:Player +GetPlayerMaxArmour b PLAYER 0x92659B4CE1863CB3 integer player:Player 0x2A50657 integer playerSrc:string GetPlayerMaxHealth s CFX 0x8154E470 integer playerSrc:string GetPlayerMaxStamina c CFX 0xD014AB79 number playerId:Player GetPlayerMeleeWeaponDamageModifier b CFX 0x8689A825 number playerId:Player GetPlayerMeleeWeaponDefenseModifier c CFX 0x27E94EF8 number playerId:Player -GetPlayerName b PLAYER 0x6D0DE6A7B5DA71F8 string player:Player +GetPlayerName b PLAYER 0x6D0DE6A7B5DA71F8 string player:Player 0x406B4B20 string playerSrc:string GetPlayerParachuteModelOverride c PLAYER 0xC219887CA3E65C41 Hash player:Player -GetPlayerParachutePackTintIndex c PLAYER 0x6E9C742F340CE5A2 integer player:Player +GetPlayerParachutePackTintIndex c PLAYER 0x6E9C742F340CE5A2 integer player:Player,tintIndex?:integer GetPlayerParachuteSmokeTrailColor c PLAYER 0xEF56DBABD3CD4887 integer,integer,integer player:Player -GetPlayerParachuteTintIndex c PLAYER 0x75D3F7A1B0D9B145 integer player:Player -GetPlayerPed b PLAYER 0x43A66C31C68491C0 Ped playerId:Player +GetPlayerParachuteTintIndex c PLAYER 0x75D3F7A1B0D9B145 integer player:Player,tintIndex?:integer +GetPlayerPed b PLAYER 0x43A66C31C68491C0 Ped playerId:Player 0x6E31E993 Entity playerSrc:string GetPlayerPedIsFollowing c PED 0x6A3975DEA89F9A17 Player ped:Ped GetPlayerPedScriptIndex c PLAYER 0x50FAC3A3E030A6E1 Ped player:Player GetPlayerPeerStatistics s CFX 0x9A928294 integer playerSrc:string,peerStatistic:integer @@ -1778,7 +1810,7 @@ GetPlayerRadioStationGenre c AUDIO 0xA571991A7FE6CCEB integer GetPlayerRadioStationIndex c AUDIO 0xE8AF77C4C06ADC93 integer GetPlayerRadioStationName c AUDIO 0xF6D733C32076AD03 string GetPlayerReserveParachuteModelOverride c PLAYER 0x37FAAA68DCA9D08D Hash player:Player -GetPlayerReserveParachuteTintIndex c PLAYER 0xD5A016BC3C09CF40 integer player:Player +GetPlayerReserveParachuteTintIndex c PLAYER 0xD5A016BC3C09CF40 integer player:Player,index?:integer GetPlayerRgbColour c PLAYER 0xE902EF951DCE178F integer,integer,integer player:Player GetPlayerRoutingBucket s CFX 0x52441C34 integer playerSrc:string GetPlayerServerId c CFX 0x4D97BCC7 integer player:Player @@ -1791,21 +1823,21 @@ GetPlayerSwitchInterpOutDuration c STREAMING 0x08C2D6C52A3104BB integer GetPlayerSwitchJumpCutIndex c STREAMING 0x78C0D93253149435 integer GetPlayerSwitchState c STREAMING 0x470555300D10B2A5 integer GetPlayerSwitchType c STREAMING 0xB3C94A90D9FC9E62 integer -GetPlayerTargetEntity c PLAYER 0x13EDE1A5DBF797C9 boolean,Entity player:Player -GetPlayerTeam b PLAYER 0x37039302F4E0A008 integer player:Player +GetPlayerTargetEntity c PLAYER 0x13EDE1A5DBF797C9 boolean,Entity player:Player,entity?:Entity +GetPlayerTeam b PLAYER 0x37039302F4E0A008 integer player:Player 0x9873E404 integer playerSrc:string GetPlayerTimeInPursuit s CFX 0x7ADE63E1 integer playerSrc:string,lastPursuit:boolean GetPlayerTimeOnline s CFX 0x67D2E605 integer playerSrc:string GetPlayerToken s CFX 0x54C06897 string playerSrc:string,index:integer GetPlayerUnderwaterTimeRemaining c PLAYER 0xA1FCF8E6AF40B731 number player:Player GetPlayerVehicleDamageModifier c CFX 0x78F27B1F number playerId:Player GetPlayerVehicleDefenseModifier c CFX 0x8326E7CD number playerId:Player -GetPlayerWantedCentrePosition b PLAYER 0x0C92BA89F1AF26F8 vector3 player:Player -GetPlayerWantedLevel b PLAYER 0xE28E54788CE8F12D integer player:Player +GetPlayerWantedCentrePosition b PLAYER 0x0C92BA89F1AF26F8 vector3 player:Player 0x821F2D2C vector3 playerSrc:string +GetPlayerWantedLevel b PLAYER 0xE28E54788CE8F12D integer player:Player 0xBDCDD163 integer playerSrc:string GetPlayerWeaponDamageModifier b CFX 0x2A3D7CDA number playerId:Player GetPlayerWeaponDefenseModifier b CFX 0xF1543251 number playerId:Player GetPlayerWeaponDefenseModifier_2 b CFX 0x986B65FF number playerId:Player GetPlayersLastVehicle c PLAYER 0xB6997A7EB3F5C8C0 Vehicle -GetPointOnRoadSide c PATHFIND 0x16F46FB18C8009E4 boolean,vector3 x:number,y:number,z:number,p3:integer +GetPointOnRoadSide c PATHFIND 0x16F46FB18C8009E4 boolean,vector3 x:number,y:number,z:number,p3:integer,outPosition?:vector3 GetPosAlongGpsTypeRoute c PATHFIND 0xF3162836C28F9DA5 boolean,vector3 bStartAtPlayerPos:boolean,fDistanceAlongRoute:number,slotType:integer GetPositionInRecording c VEHICLE 0x2DACD605FC681475 number vehicle:Vehicle GetPositionOfVehicleRecordingAtTime c VEHICLE 0xD242728AA6F0FBA2 vector3 recording:integer,time:number,script:string @@ -1817,7 +1849,7 @@ GetPrevWeatherTypeHashName c MISC 0x564B884A05EC45A3 Hash GetProfileSetting c MISC 0xC488FF2356EA7791 integer profileSetting:integer GetProjectileNearPed c MISC 0x82FDE6A57EE4EE44 boolean,vector3,Object ped:Ped,weaponHash:Hash,distance:number,ownedByPlayer:boolean GetProjectileNearPedCoords c MISC 0xDFB4138EEFED7B81 boolean,vector3 ped:Ped,weaponHash:Hash,distance:number,ownedByPlayer:boolean GetCoordsOfProjectileTypeWithinDistance -GetPropFromOutfit c FILES 0x19F2A026EDF0013F boolean outfit:Hash,slot:integer,outComponentVariant:any GetShopPedOutfitComponentVariant +GetPropFromOutfit c FILES 0x19F2A026EDF0013F boolean,integer outfit:Hash,slot:integer,outComponentVariant?:integer GetShopPedOutfitComponentVariant GetPstatBoolHash c STATS 0x80C75307B1C42837 Hash index:integer,spStat:boolean,charStat:boolean,character:integer GetPackedBoolStatKey GetPstatIntHash c STATS 0x61E111E323419E07 Hash index:integer,spStat:boolean,charStat:boolean,character:integer GetPackedIntStatKey GetRadioStationName c AUDIO 0xB28ECA15046CA8B9 string stationIndex:integer @@ -1854,8 +1886,8 @@ GetResourceKvpString b CFX 0x5240DA5A string key:string GetResourceMetadata b CFX 0x964BAB1D string resourceName:string,metadataKey:string,index:integer GetResourcePath s CFX 0x61DCF017 string resourceName:string GetResourceState b CFX 0x4039B485 string resourceName:string -GetRoadBoundaryUsingHeading c PATHFIND 0xA0F8A7517A273C05 boolean,vector3 x:number,y:number,z:number,heading:number -GetRoadSidePointWithHeading c PATHFIND 0xA0F8A7517A273C05 boolean,vector3 x:number,y:number,z:number,heading:number GetRoadBoundaryUsingHeading +GetRoadBoundaryUsingHeading c PATHFIND 0xA0F8A7517A273C05 boolean,vector3 x:number,y:number,z:number,heading:number,outPosition?:vector3 +GetRoadSidePointWithHeading c PATHFIND 0xA0F8A7517A273C05 boolean,vector3 x:number,y:number,z:number,heading:number,outPosition?:vector3 GetRoadBoundaryUsingHeading GetRoomKeyForGameViewport c INTERIOR 0xA6575914D2A0B450 Hash GetRoomKeyFromEntity c INTERIOR 0x47C2A06D4F5F424B Hash entity:Entity GetRoomKeyFromGameplayCam c INTERIOR 0xA6575914D2A0B450 Hash GetRoomKeyForGameViewport @@ -1873,10 +1905,10 @@ GetRotationOfVehicleRecordingIdAtTime c VEHICLE 0xF0F2103EFAF8CBA7 vector3 id:in GetRuntimeTextureHeight c CFX 0x3574AACE integer tex:integer GetRuntimeTexturePitch c CFX 0xCA0A085F integer tex:integer GetRuntimeTextureWidth c CFX 0xC9F55558 integer tex:integer -GetSafeCoordForPed c PATHFIND 0xB61C8E878A4199CA boolean,vector3 x:number,y:number,z:number,onGround:boolean,flags:integer +GetSafeCoordForPed c PATHFIND 0xB61C8E878A4199CA boolean,vector3 x:number,y:number,z:number,onlyOnPavement:boolean,flags:integer GetSafePickupCoords c OBJECT 0x6E16BC2503FF1FF0 vector3 x:number,y:number,z:number,p3:number,p4:number GetSafeZoneSize c GRAPHICS 0xBAF107B6BB2C97F0 number -GetScaleformMovieCursorSelection c HUD 0x632B2940C67F4EA9 boolean,boolean,integer,integer,integer scaleformHandle:integer +GetScaleformMovieCursorSelection c HUD 0x632B2940C67F4EA9 boolean,boolean,integer,integer,integer scaleformHandle:integer GetMouseEvent GetScaleformMovieFunctionReturnBool c GRAPHICS 0x768FF8961BA904D6 boolean method_return:integer IsScaleformMovieMethodReturnValueReady GetScaleformMovieFunctionReturnInt c GRAPHICS 0x2DE7EFA66B906036 integer method_return:integer GetScaleformMovieMethodReturnValueInt GetScaleformMovieFunctionReturnString c GRAPHICS 0xE1E258829A885245 string method_return:integer GetScaleformMovieMethodReturnValueString @@ -1904,15 +1936,15 @@ GetShopPedApparelForcedComponentCount c FILES 0xC6B9DB42C04DD8C3 integer compone GetShopPedApparelForcedPropCount c FILES 0x017568A8182D98A6 integer componentHash:Hash GetShopPedApparelVariantComponentCount c FILES 0xC17AD0E5752BECDA integer componentHash:Hash GetShopPedApparelVariantPropCount c FILES 0xD40AAC51E8E4C663 integer propHash:Hash -GetShopPedComponent c FILES 0x74C0E2A57EC66760 componentHash:Hash,outComponent:any -GetShopPedOutfit c FILES 0xB7952076E444979D p0:any,p1:any -GetShopPedOutfitComponentVariant c FILES 0x19F2A026EDF0013F boolean outfit:Hash,slot:integer,outComponentVariant:any +GetShopPedComponent c FILES 0x74C0E2A57EC66760 integer componentHash:Hash,outComponent?:integer +GetShopPedOutfit c FILES 0xB7952076E444979D integer p0:any,p1?:integer +GetShopPedOutfitComponentVariant c FILES 0x19F2A026EDF0013F boolean,integer outfit:Hash,slot:integer,outComponentVariant?:integer GetShopPedOutfitLocate c FILES 0x073CA26B079F956E integer p0:any -GetShopPedOutfitPropVariant c FILES 0xA9F9C2E0FDE11CBB boolean outfitHash:Hash,variantIndex:integer,outPropVariant:any -GetShopPedProp c FILES 0x5D5CAFF661DDF6FC componentHash:Hash,outProp:any -GetShopPedQueryComponent c FILES 0x249E310B2D920699 integer componentId:integer -GetShopPedQueryOutfit c FILES 0x6D793F03A631FE56 outfitIndex:integer,outfit:any -GetShopPedQueryProp c FILES 0xDE44A00999B2837D componentId:integer,outProp:any +GetShopPedOutfitPropVariant c FILES 0xA9F9C2E0FDE11CBB boolean,integer outfitHash:Hash,variantIndex:integer,outPropVariant?:integer +GetShopPedProp c FILES 0x5D5CAFF661DDF6FC integer componentHash:Hash,outProp?:integer +GetShopPedQueryComponent c FILES 0x249E310B2D920699 integer componentId:integer,outComponent?:integer +GetShopPedQueryOutfit c FILES 0x6D793F03A631FE56 integer outfitIndex:integer,outfit?:integer +GetShopPedQueryProp c FILES 0xDE44A00999B2837D integer componentId:integer,outProp?:integer GetSizeOfSaveData c MISC 0xA09F896CE912481F integer p0:boolean GetSnowLevel c MISC 0xC5868A966E5BE3AE number GetSoundId c AUDIO 0x430386FE9BF80B45 integer @@ -1943,8 +1975,8 @@ GetTaskMoveNetworkEvent c TASK 0xB4F47213DF45A64C boolean ped:Ped,eventName:stri GetTaskMoveNetworkSignalBool c TASK 0xA7FFBA498E4AAF67 boolean ped:Ped,signalName:string GetTaskMoveNetworkSignalFloat c TASK 0x44AB0B3AFECCE242 number ped:Ped,signalName:string GetTaskMoveNetworkState c TASK 0x717E4D1F2048376D string ped:Ped -GetTattooCollectionData c FILES 0xFF56381874F82086 boolean characterType:integer,decorationIndex:integer,outComponent:any GetTattooShopDlcItemData -GetTattooShopDlcItemData c FILES 0xFF56381874F82086 boolean characterType:integer,decorationIndex:integer,outComponent:any +GetTattooCollectionData c FILES 0xFF56381874F82086 boolean,integer characterType:integer,decorationIndex:integer,outComponent?:integer GetTattooShopDlcItemData +GetTattooShopDlcItemData c FILES 0xFF56381874F82086 boolean,integer characterType:integer,decorationIndex:integer,outComponent?:integer GetTattooShopDlcItemIndex c FILES 0x10144267DD22866C integer character:integer,collection:integer,preset:integer GetTattooZone c PED 0x9FD452BFBE7A7A8B integer collection:Hash,overlay:Hash GetPedDecorationZoneFromHashes GetTennisSwingAnimComplete c MISC 0x17DF68D720AA77F8 boolean ped:Ped @@ -1961,6 +1993,7 @@ GetThreadName c SCRIPT 0x05A42BA9FC8DA96B string threadId:integer GetNameOfThrea GetThrusterSideRcsThrottle s CFX 0x1C939E87 number jetpack:Vehicle GetThrusterThrottle s CFX 0x94E24C96 number jetpack:Vehicle GetTimeAsString c NETWORK 0x9E23B1777A927DAD string time:integer +GetTimeBeforeVehicleWeaponReloadFinishes c WEAPON 0xC8C6F4B1CDEB40EF integer vehicle:Vehicle,seat:integer GetTimeDifference c NETWORK 0xA2C6FC031D46FFF0 integer timeA:integer,timeB:integer GetTimeOfLastPedWeaponDamage c PED 0x36B77BB84687C318 integer ped:Ped,weaponHash:Hash GetTimeOffset c NETWORK 0x017008CCDAD48503 integer timeA:integer,timeB:integer @@ -1991,7 +2024,7 @@ GetTotalScInboxIds c SOCIALCLUB 0x03A93FF1A2CA0864 integer ScInboxGetTotalNumMe GetTotalSuccessfulStuntJumps c MISC 0x6856EC3D35C81EA4 integer GetTrackBrakingDistance c CFX 0xBF482A5E number track:integer GetTrackMaxSpeed c CFX 0x34EE2BF3 number track:integer -GetTrackNodeCoords c CFX 0x1628548E boolean,vector3 trackIndex:integer,trackNode:integer +GetTrackNodeCoords c CFX 0x1628548E boolean,vector3 trackIndex:integer,trackNode:integer,coords?:vector3 GetTrackNodeCount c CFX 0x896A0C11 integer trackIndex:integer GetTrainBackwardCarriage s CFX 0x456E34A integer train:Vehicle GetTrainCarriage c VEHICLE 0x08AAFD0814722BC3 Entity train:Vehicle,trailerNumber:integer @@ -2044,6 +2077,7 @@ GetVehicleClutch c CFX 0x1DAD4583 number vehicle:Vehicle GetVehicleColor c VEHICLE 0xF3CC740D36221548 integer,integer,integer vehicle:Vehicle GetVehicleColourCombination c VEHICLE 0x6A842D197F845D56 integer vehicle:Vehicle GetVehicleColours b VEHICLE 0xA19435F193E081AC integer,integer vehicle:Vehicle +GetVehicleColoursWhichCanBeSet c VEHICLE 0xEEBFC7A7EFDC35B4 integer vehicle:Vehicle GetVehicleCountermeasureCount c VEHICLE 0xF846AA63DF56B804 integer aircraft:Vehicle GetVehicleCrewEmblemRequestState c GRAPHICS 0xFE26117A5841B2FF integer vehicle:Vehicle,p1:integer GetVehicleCurrentAcceleration c CFX 0xD1D07351 number vehicle:Vehicle GetVehicleThrottleOffset @@ -2053,8 +2087,8 @@ GetVehicleCurrentSlipstreamDraft c VEHICLE 0x36492C2F0D134C56 number vehicle:Veh GetVehicleCustomPrimaryColour b VEHICLE 0xB64CF2CCA9D95F52 integer,integer,integer vehicle:Vehicle GetVehicleCustomSecondaryColour b VEHICLE 0x8389CD56CA8072DC integer,integer,integer vehicle:Vehicle GetVehicleDashboardBoost c CFX 0xDFFABA2A number -GetVehicleDashboardColor c VEHICLE 0xB7635E80A5C31BFF integer vehicle:Vehicle -GetVehicleDashboardColour b CFX 0xA0DBD08D integer vehicle:Vehicle +GetVehicleDashboardColor c VEHICLE 0xB7635E80A5C31BFF integer vehicle:Vehicle,color?:integer +GetVehicleDashboardColour b CFX 0xA0DBD08D integer vehicle:Vehicle,color?:integer GetVehicleDashboardCurrentGear c CFX 0x435C86F4 number GetVehicleDashboardFuel c CFX 0x19B0B2CE number GetVehicleDashboardLights c CFX 0x500FFE9D integer @@ -2076,7 +2110,7 @@ GetVehicleDoorAngleRatio c VEHICLE 0xFE3F9C29F7B32BD5 number vehicle:Vehicle,doo GetVehicleDoorDestroyType c VEHICLE 0xCA4AC3EAAE46EC7B integer vehicle:Vehicle,doorIndex:integer GetVehicleIndividualDoorLockStatus GetVehicleDoorLockStatus b VEHICLE 0x25BC98A59C2EA962 integer vehicle:Vehicle GetVehicleDoorStatus s CFX 0x6E35C49C integer vehicle:Vehicle,doorIndex:integer -GetVehicleDoorsLockedForPlayer b VEHICLE 0xF6AF6CB341349015 boolean vehicle:Vehicle,player:Player +GetVehicleDoorsLockedForPlayer b VEHICLE 0xF6AF6CB341349015 boolean vehicle:Vehicle,player:Player 0x1DC50247 integer vehicle:Vehicle GetVehicleDrawnWheelAngleMult c CFX 0x21C1DA8E number vehicle:Vehicle GetVehicleDrivetrainType c VEHICLE 0x1423725069EE1D14 integer vehicleModel:Hash GetVehicleEngineHealth b VEHICLE 0xC45D23BAF168AAB8 number vehicle:Vehicle @@ -2107,8 +2141,8 @@ GetVehicleHoverModePercentage c VEHICLE 0xDA62027C8BDB326E number aircraft:Vehic GetVehicleIndexFromEntityIndex c ENTITY 0x4B53F92932ADFAC0 Vehicle entity:Entity GetVehicleIndicatorLights c CFX 0x83070354 integer vehicle:Vehicle GetVehicleIndividualDoorLockStatus c VEHICLE 0xCA4AC3EAAE46EC7B integer vehicle:Vehicle,doorIndex:integer -GetVehicleInteriorColor c VEHICLE 0x7D1464D472D32136 integer vehicle:Vehicle -GetVehicleInteriorColour b CFX 0xCCFF3B6E integer vehicle:Vehicle +GetVehicleInteriorColor c VEHICLE 0x7D1464D472D32136 integer vehicle:Vehicle,color?:integer +GetVehicleInteriorColour b CFX 0xCCFF3B6E integer vehicle:Vehicle,color?:integer GetVehicleIsMercenary c VEHICLE 0xD4C4642CB7F50B5D boolean vehicle:Vehicle GetVehicleLandingGear c VEHICLE 0x9B0F3DCA3DB0F4CD integer vehicle:Vehicle GetLandingGearState GetVehicleLayoutHash c VEHICLE 0x28D37D4F71AC5C58 Hash vehicle:Vehicle @@ -2116,7 +2150,7 @@ GetVehicleLightMultiplier c CFX 0x7E6E219C number vehicle:Vehicle GetVehicleLightsState b VEHICLE 0xB91B4C20085BD12F boolean,boolean,boolean vehicle:Vehicle GetVehicleLivery b VEHICLE 0x2BB9230590DA5E8A integer vehicle:Vehicle GetVehicleLiveryCount c VEHICLE 0x87B63E25A529D526 integer vehicle:Vehicle -GetVehicleLockOnTarget b VEHICLE 0x8F5EBAB1F260CFCE boolean,Entity vehicle:Vehicle +GetVehicleLockOnTarget b VEHICLE 0x8F5EBAB1F260CFCE boolean,Entity vehicle:Vehicle,entity?:Entity 0x4A557117 Vehicle vehicle:Vehicle GetVehicleMaxBraking c VEHICLE 0xAD7E85FC227197C4 number vehicle:Vehicle GetVehicleMaxNumberOfPassengers c VEHICLE 0xA7C4F2C6E744A550 integer vehicle:Vehicle GetVehicleMaxSpeed c VEHICLE 0x53AF99BAA671CA47 number vehicle:Vehicle GetVehicleEstimatedMaxSpeed @@ -2153,7 +2187,7 @@ GetVehicleNeonLightsColour c VEHICLE 0x7619EEE8C886757F integer,integer,integer GetVehicleNextGear c CFX 0xDDB298AE integer vehicle:Vehicle GetVehicleNodeIsGpsAllowed c PATHFIND 0xA2AE5C478B96E3B6 boolean nodeID:integer GetVehicleNodeIsSwitchedOff c PATHFIND 0x4F5070AA58F69279 boolean nodeID:integer -GetVehicleNodePosition c PATHFIND 0x703123E5E7D429C2 vector3 nodeId:integer +GetVehicleNodePosition c PATHFIND 0x703123E5E7D429C2 vector3 nodeId:integer,outPosition?:vector3 GetVehicleNodeProperties c PATHFIND 0x0568566ACBB5DEDC boolean,integer,integer x:number,y:number,z:number GetVehicleNumberOfBrokenBones c VEHICLE 0x2C8CBFE1EA5FC631 integer vehicle:Vehicle GetVehicleNumberOfBrokenOffBones c VEHICLE 0x42A4BEB35D372407 integer vehicle:Vehicle @@ -2162,7 +2196,7 @@ GetVehicleNumberOfWheels c CFX 0xEDF4B0FC integer vehicle:Vehicle GetVehicleNumberPlateText b VEHICLE 0x7CE1CCB9B293020E string vehicle:Vehicle GetVehicleNumberPlateTextIndex b VEHICLE 0xF11BC2DD9A3E7195 integer vehicle:Vehicle GetVehicleOilLevel c CFX 0xFC7F8EF4 number vehicle:Vehicle -GetVehicleOwner c VEHICLE 0x8F5EBAB1F260CFCE boolean,Entity vehicle:Vehicle GetVehicleLockOnTarget +GetVehicleOwner c VEHICLE 0x8F5EBAB1F260CFCE boolean,Entity vehicle:Vehicle,entity?:Entity GetVehicleLockOnTarget GetVehiclePaintFade c VEHICLE 0xA82819CAC9C4C403 number vehicle:Vehicle GetVehicleEnveffScale GetVehiclePedIsEntering c PED 0xF92691AED837A5FC Vehicle ped:Ped GetVehiclePedIsIn b PED 0x9A9112A0FE9A4713 Vehicle ped:Ped,lastVehicle:boolean @@ -2181,7 +2215,7 @@ GetVehicleSuspensionHeight c VEHICLE 0x53952FD2BAA19F17 number vehicle:Vehicle GetVehicleThrottleOffset c CFX 0xD1D07351 number vehicle:Vehicle GetVehicleTopSpeedModifier c CFX 0x998B7FEE number vehicle:Vehicle GetVehicleTotalRepairs s CFX 0x9963D5F9 integer vehicle:Vehicle -GetVehicleTrailerVehicle c VEHICLE 0x1CDD6BADC297830D boolean,Vehicle vehicle:Vehicle +GetVehicleTrailerVehicle c VEHICLE 0x1CDD6BADC297830D boolean,Vehicle vehicle:Vehicle,trailer?:Vehicle GetVehicleTurboPressure c CFX 0xE02B51D7 number vehicle:Vehicle GetVehicleType b CFX 0xA273060E string vehicle:Vehicle GetVehicleTypeRaw c CFX 0xDE73BC10 integer vehicle:Vehicle @@ -2189,7 +2223,9 @@ GetVehicleTyreSmokeColor b VEHICLE 0xB635392A4938B3C3 integer,integer,integer ve GetVehicleTyresCanBurst c VEHICLE 0x678B9BB8C3F58FEB boolean vehicle:Vehicle GetVehicleWaypointProgress c TASK 0x9824CFF8FC66E159 integer vehicle:Vehicle GetVehicleWaypointTargetPoint c TASK 0x416B62AC8B9E5BBD integer vehicle:Vehicle -GetVehicleWeaponCapacity c VEHICLE 0x8181CE2F25CB9BB7 integer vehicle:Vehicle,weaponIndex:integer +GetVehicleWeaponCapacity c VEHICLE 0x8181CE2F25CB9BB7 integer vehicle:Vehicle,weaponIndex:integer GetVehicleWeaponRestrictedAmmo +GetVehicleWeaponReloadTime c WEAPON 0xD0AD348FFD7A6868 number vehicle:Vehicle,seat:integer +GetVehicleWeaponRestrictedAmmo c VEHICLE 0x8181CE2F25CB9BB7 integer vehicle:Vehicle,weaponIndex:integer GetVehicleWheelBrakePressure c CFX 0x70FE2EFF number vehicle:Vehicle,wheelIndex:integer GetVehicleWheelFlags c CFX 0xC70FA0C7 integer vehicle:Vehicle,wheelIndex:integer GetVehicleWheelHealth c CFX 0x54A677F5 number vehicle:Vehicle,wheelIndex:integer @@ -2221,19 +2257,19 @@ GetWantedLevelParoleDuration c PLAYER 0xA72200F51875FEA4 integer GetWantedLevelRadius c PLAYER 0x085DEB493BE80812 number player:Player GetWantedLevelThreshold c PLAYER 0xFDD179EAF45B556C integer wantedLevel:integer GetWarningMessageTitleHash c HUD 0x81DF9ABA6C83DFF9 Hash -GetWaterHeight c WATER 0xF6829842C06AE524 boolean,number x:number,y:number,z:number -GetWaterHeightNoWaves c WATER 0x8EE6B53CE13A9794 boolean,number x:number,y:number,z:number +GetWaterHeight c WATER 0xF6829842C06AE524 boolean,number x:number,y:number,z:number,height?:number +GetWaterHeightNoWaves c WATER 0x8EE6B53CE13A9794 boolean,number x:number,y:number,z:number,height?:number GetWaterQuadAlpha c CFX 0x14088095 boolean,integer,integer,integer,integer waterQuad:integer GetWaterQuadAtCoords c CFX 0x17321452 integer x:number,y:number GetWaterQuadAtCoords_3d c CFX 0xF8E03DB8 integer x:number,y:number,z:number GetWaterQuadBounds c CFX 0x42E9A06A boolean,integer,integer,integer,integer waterQuad:integer GetWaterQuadCount c CFX 0xB1884159 integer -GetWaterQuadHasLimitedDepth c CFX 0x22EA3BD8 boolean,integer waterQuad:integer -GetWaterQuadIsInvisible c CFX 0x1DEDBD77 boolean,integer waterQuad:integer -GetWaterQuadLevel c CFX 0x6523816B boolean,number waterQuad:integer -GetWaterQuadNoStencil c CFX 0x6F4ACBA boolean,integer waterQuad:integer -GetWaterQuadType c CFX 0xE2501B8B boolean,integer waterQuad:integer -GetWaveQuadAmplitude c CFX 0x865139A3 boolean,number waveQuad:integer +GetWaterQuadHasLimitedDepth c CFX 0x22EA3BD8 boolean,integer waterQuad:integer,hasLimitedDepth?:integer +GetWaterQuadIsInvisible c CFX 0x1DEDBD77 boolean,integer waterQuad:integer,isInvisible?:integer +GetWaterQuadLevel c CFX 0x6523816B boolean,number waterQuad:integer,waterQuadLevel?:number +GetWaterQuadNoStencil c CFX 0x6F4ACBA boolean,integer waterQuad:integer,noStencil?:integer +GetWaterQuadType c CFX 0xE2501B8B boolean,integer waterQuad:integer,waterType?:integer +GetWaveQuadAmplitude c CFX 0x865139A3 boolean,number waveQuad:integer,waveQuadAmplitude?:number GetWaveQuadAtCoords c CFX 0x3F5A61A7 integer x:number,y:number GetWaveQuadBounds c CFX 0xF86136DB boolean,integer,integer,integer,integer waveQuad:integer GetWaveQuadCount c CFX 0x9250C76 integer @@ -2248,7 +2284,7 @@ GetWeaponComponentAccuracyModifier c CFX 0xC693E278 number componentHash:Hash GetWeaponComponentCameraHash c CFX 0xACB7E68F integer componentHash:Hash GetWeaponComponentClipSize c CFX 0xE14CF665 integer componentHash:Hash GetWeaponComponentDamageModifier c CFX 0x4A0E3855 number componentHash:Hash -GetWeaponComponentHudStats c WEAPON 0xB3CAF387AE12E9F8 boolean,integer componentHash:Hash +GetWeaponComponentHudStats c WEAPON 0xB3CAF387AE12E9F8 boolean,integer componentHash:Hash,outData?:integer GetWeaponComponentRangeDamageModifier c CFX 0xE134FB8D number componentHash:Hash GetWeaponComponentRangeModifier c CFX 0x2FD0BC1B number componentHash:Hash GetWeaponComponentReticuleHash c CFX 0xF9AB9297 integer componentHash:Hash @@ -2259,7 +2295,7 @@ GetWeaponDamage c WEAPON 0x3133B907D8B32053 number weaponHash:Hash,componentHash GetWeaponDamageModifier c CFX 0xD979143 number weaponHash:Hash GetWeaponDamageType c WEAPON 0x3BE0BB12D25FB305 integer weaponHash:Hash GetWeaponHashFromPickup c OBJECT 0x08F96CA6C551AD51 Hash pickupHash:Hash GetWeaponTypeFromPickupType -GetWeaponHudStats c WEAPON 0xD92C739EE34C9EBA boolean weaponHash:Hash,outData:any +GetWeaponHudStats c WEAPON 0xD92C739EE34C9EBA boolean,integer weaponHash:Hash,outData?:integer GetWeaponObjectFromPed c WEAPON 0xCAE1DC9A0E22A16D Object ped:Ped,p1:boolean GetWeaponObjectLiveryColor c WEAPON 0xB3EA4FEABF41464B integer weaponObject:Object,camoComponentHash:Hash GetWeaponObjectTintIndex c WEAPON 0xCD183314F7CD2E57 integer weapon:Object @@ -2346,11 +2382,12 @@ HasForceCleanupOccurred c PLAYER 0xC968670BFACE42D9 boolean cleanupFlags:integer HasHudScaleformLoaded c GRAPHICS 0xDF6E5987D2B4D140 boolean hudComponent:integer HasScaleformScriptHudMovieLoaded HasLoadedMpDataSet c AUDIO 0x544810ED9DB6BBE6 boolean HasLoadedSpDataSet c AUDIO 0x5B50ABB1FE3746F4 boolean +HasMenuLayoutChangedEventOccurred c HUD 0x2E22FEFA0100275E boolean HasMinimapOverlayLoaded c CFX 0xF7535F32 boolean id:integer HasModelLoaded c STREAMING 0x98A4EB5D89A0C952 boolean model:Hash HasMpGamerTag c HUD 0x6E0EB3EB47C8D7AA boolean IsMpGamerTagMovieActive -HasMpGamerTagCrewFlagsSet c HUD 0xEB709A36958ABE0D boolean gamerTagId:integer IsValidMpGamerTagMovie -HasMpGamerTag_2 c HUD 0xEB709A36958ABE0D boolean gamerTagId:integer IsValidMpGamerTagMovie +HasMpGamerTagCrewFlagsSet c HUD 0xEB709A36958ABE0D boolean playerId:integer IsUpdatingMpGamerTagNameAndCrewDetails +HasMpGamerTag_2 c HUD 0xEB709A36958ABE0D boolean playerId:integer IsUpdatingMpGamerTagNameAndCrewDetails HasMultiplayerAudioDataLoaded c AUDIO 0x544810ED9DB6BBE6 boolean HasLoadedMpDataSet HasMultiplayerAudioDataUnloaded c AUDIO 0x5B50ABB1FE3746F4 boolean HasLoadedSpDataSet HasNamedPtfxAssetLoaded c STREAMING 0x8702416E512EC454 boolean fxName:string @@ -2379,6 +2416,7 @@ HasResumedFromSuspend c MISC 0xE8B9C0EC9E183F35 boolean HasScaleformContainerMovieLoadedIntoParent c GRAPHICS 0x8217150E1217EBFD boolean scaleformHandle:integer HasScaleformMovieFilenameLoaded c GRAPHICS 0x0C1C5D756FB5F337 boolean scaleformName:string HasScaleformMovieLoaded c GRAPHICS 0x85F01B8D5B90570E boolean scaleformHandle:integer +HasScaleformMovieNamedLoaded c GRAPHICS 0x9743BCCF7CD6E1F6 boolean,integer scaleformName:string HasScaleformScriptHudMovieLoaded c GRAPHICS 0xDF6E5987D2B4D140 boolean hudComponent:integer HasScriptLoaded c SCRIPT 0xE6CC9F3BA0FB9EF1 boolean scriptName:string HasScriptWithNameHashLoaded c SCRIPT 0x5F0F0C783EB16C04 boolean scriptHash:Hash @@ -2403,6 +2441,7 @@ HasVehicleRecordingBeenLoaded c VEHICLE 0x300D614A4C785FC4 boolean recording:int HasVehicleRocketBoost c VEHICLE 0x36D782F68B309BDA boolean vehicle:Vehicle GetHasRocketBoost HasWeaponAssetLoaded c WEAPON 0x36E353271F0E90EE boolean weaponHash:Hash HasWeaponGotWeaponComponent c WEAPON 0x76A18844E743BF91 boolean weapon:Object,addonHash:Hash +HasWeaponReloadingInVehicle c WEAPON 0x8062F07153F4446F boolean vehicle:Vehicle,seat:integer HaveAllStreamingRequestsCompleted c PED 0x7350823473013C02 boolean ped:Ped HaveCreditsReachedEnd c MISC 0x075F1D57402C93BA boolean HaveVehicleModsStreamedIn c VEHICLE 0x9A83F5F9963775EF boolean vehicle:Vehicle @@ -2436,10 +2475,11 @@ HudWeaponWheelGetSlotHash c HUD 0xA13E93403F26C812 Hash weaponTypeIndex:integer HudWeaponWheelIgnoreControlInput c HUD 0x14C9FDCC41F81F63 toggle:boolean HudWeaponWheelIgnoreSelection c HUD 0x0AFC4AF510774B47 HudWeaponWheelSetSlotHash c HUD 0x72C1056D678BB7D8 weaponHash:Hash HudSetWeaponWheelTopSlot +IgnoreMenuPreferenceForBonnetCameraThisUpdate c CAM 0x7B8A361C1813FBEF IgnoreNextRestart c MISC 0x21FFB63D8C615361 toggle:boolean InitCreatorBudget c STREAMING 0xB5A4DB34FE89B88A -InitShopPedComponent c FILES 0x1E8C308FD312C036 integer -InitShopPedProp c FILES 0xEB0A2B758F7B850F integer +InitShopPedComponent c FILES 0x1E8C308FD312C036 integer outComponent?:integer +InitShopPedProp c FILES 0xEB0A2B758F7B850F integer outProp?:integer InitSynchSceneAudioWithEntity c AUDIO 0x950A154B8DAB6185 audioName:string,entity:Entity InitSynchSceneAudioWithPosition c AUDIO 0xC8EDE9BDBCCBA6D4 audioName:string,x:number,y:number,z:number InstantlyFillPedPopulation c PED 0x4759CC730F947C81 @@ -2455,14 +2495,15 @@ IsAceAllowed b CFX 0x7EBB9929 boolean object:string IsAiBlipAlwaysShown c HUD 0x0C4BBF625CA98C4E ped:Ped,toggle:boolean SetPedAiBlipForcedOn IsAimCamActive c CAM 0x68EDDA28A5976D07 boolean IsAimCamThirdPersonActive c CAM 0x74BD83EA840F6BC9 boolean -IsAirDefenseZoneInsideSphere c WEAPON 0xDAB963831DBFD3F4 boolean,integer x:number,y:number,z:number,radius:number IsAnyAirDefenseZoneInsideSphere +IsAirDefenseZoneInsideSphere c WEAPON 0xDAB963831DBFD3F4 boolean,integer x:number,y:number,z:number,radius:number,SphereIndex?:integer IsAnyAirDefenseZoneInsideSphere IsAlarmPlaying c AUDIO 0x226435CB96CCFC8C boolean alarmName:string +IsAllowedIndependentCameraModes c CAM 0xEAF0FA793D05C592 boolean IsAmbientSpeechDisabled c AUDIO 0x932C2D096A2C3FFF boolean ped:Ped IsAmbientSpeechPlaying c AUDIO 0x9072C8B49907BFAD boolean ped:Ped IsAmbientZoneEnabled c AUDIO 0x01E2817A479A7F9B boolean ambientZone:string IsAnEntity c ENTITY 0x731EC8A916BD11A1 boolean handle:integer IsAnimalVocalizationPlaying c AUDIO 0xC265DF9FB44A9FBD boolean pedHandle:Ped -IsAnyAirDefenseZoneInsideSphere c WEAPON 0xDAB963831DBFD3F4 boolean,integer x:number,y:number,z:number,radius:number +IsAnyAirDefenseZoneInsideSphere c WEAPON 0xDAB963831DBFD3F4 boolean,integer x:number,y:number,z:number,radius:number,SphereIndex?:integer IsAnyEntityAttachedToHandlerFrame c VEHICLE 0x62CA17B74C435651 boolean vehicle:Vehicle IsAnyEntityEntirelyInsideGarage c OBJECT 0x673ED815D6E323B7 boolean garageHash:Hash,p1:boolean,p2:boolean,p3:boolean,p4:any IsAnyHostilePedNearPoint c PED 0x68772DB2B2526F9F boolean ped:Ped,x:number,y:number,z:number,radius:number @@ -2508,6 +2549,13 @@ IsCinematicCamShaking c CAM 0xBBC08F6B4CB8FF0A boolean IsCinematicIdleCamRendering c CAM 0xCA9D2AA3E326D720 boolean IsCinematicShotActive c CAM 0xCC9F3371A7C28BC9 boolean p0:any IsCollisionMarkedOutside c INTERIOR 0xEEA5AC2EDA7C33E8 boolean x:number,y:number,z:number +IsColshapeCircle b CFX 0xAAEB581A boolean colShapeId:integer +IsColshapeCuboid b CFX 0x80A7B8DF boolean colShapeId:integer +IsColshapeCylinder b CFX 0xA9CC9F3D boolean colShapeId:integer +IsColshapeEntityTypeSet b CFX 0xB5B22C62 boolean colShapeId:integer,entityType:integer +IsColshapePolygon b CFX 0x91E01B1E boolean colShapeId:integer +IsColshapeRectangle b CFX 0xAE0F25EA boolean colShapeId:integer +IsColshapeSphere b CFX 0xC53E0758 boolean colShapeId:integer IsCommandLineBenchmarkValueSet c MISC 0xA049A5BE0F04F2F8 boolean IsCommerceDataValid c NETWORK 0xEA14EEF5B7CD2C30 boolean IsCommerceStoreOpen c NETWORK 0x2EAC52B4019E2782 boolean @@ -2548,8 +2596,8 @@ IsEntityAMissionEntity c ENTITY 0x0A7B270912999B3C boolean entity:Entity IsEntityAPed c ENTITY 0x524AC5ECEA15343E boolean entity:Entity IsEntityAVehicle c ENTITY 0x6AC7003FA6E5575E boolean entity:Entity IsEntityAnObject c ENTITY 0x8D68C8FD0FACA94E boolean entity:Entity -IsEntityAtCoord c ENTITY 0x20B60995556D004F boolean entity:Entity,xPos:number,yPos:number,zPos:number,xSize:number,ySize:number,zSize:number,p7:boolean,p8:boolean,p9:integer -IsEntityAtEntity c ENTITY 0x751B70C3D034E187 boolean entity1:Entity,entity2:Entity,xSize:number,ySize:number,zSize:number,p5:boolean,p6:boolean,p7:integer +IsEntityAtCoord c ENTITY 0x20B60995556D004F boolean entity:Entity,xPos:number,yPos:number,zPos:number,xSize:number,ySize:number,zSize:number,highlightArea:boolean,do3dCheck:boolean,transportMode:integer +IsEntityAtEntity c ENTITY 0x751B70C3D034E187 boolean entity:Entity,target:Entity,xSize:number,ySize:number,zSize:number,highlightArea:boolean,do3dCheck:boolean,transportMode:integer IsEntityAttached c ENTITY 0xB346476EF1A64897 boolean entity:Entity IsEntityAttachedToAnyObject c ENTITY 0xCF511840CEEDE0CC boolean entity:Entity IsEntityAttachedToAnyPed c ENTITY 0xB1632E9A5F988D11 boolean entity:Entity @@ -2577,6 +2625,7 @@ IsEntityUpsidedown c ENTITY 0x1DBD58820FA61D71 boolean entity:Entity IsEntityVisible b ENTITY 0x47D6F43D77935C75 boolean entity:Entity IsEntityVisibleToScript c ENTITY 0xD796CB5BA8F20E32 boolean entity:Entity IsEntityWaitingForWorldCollision c ENTITY 0xD05BFF0C0A12C68F boolean entity:Entity +IsEntryPointForSeatClear c VEHICLE 0x639431E895B9AA57 boolean ped:Ped,vehicle:Vehicle,seatIndex:integer,checkSide:boolean,leftSide:boolean IsExplosionActiveInArea c FIRE 0x6070104B699B2EF4 boolean explosionType:integer,x1:number,y1:number,z1:number,x2:number,y2:number,z2:number IsExplosionInAngledArea c FIRE 0xA079A6C51525DC4B boolean explosionType:integer,x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,width:number IsExplosionInArea c FIRE 0x2E2EBA0EE7CED0E0 boolean explosionType:integer,x1:number,y1:number,z1:number,x2:number,y2:number,z2:number @@ -2716,8 +2765,8 @@ IsPedDiving c PED 0x5527B8246FEF9B11 boolean ped:Ped IsPedDoingBeastJump c PED 0x451D05012CCEC234 boolean ped:Ped IsPedDoingDriveby c PED 0xB2C086CC1BF8F2BF boolean ped:Ped IsPedDucking c PED 0xD125AE748725C6BC boolean ped:Ped -IsPedEvasiveDiving c PED 0x414641C26E105898 boolean,Entity ped:Ped -IsPedExclusiveDriverOfVehicle c VEHICLE 0xB09D25E77C33EB3F boolean,integer ped:Ped,vehicle:Vehicle +IsPedEvasiveDiving c PED 0x414641C26E105898 boolean,Entity ped:Ped,evadingEntity?:Entity +IsPedExclusiveDriverOfVehicle c VEHICLE 0xB09D25E77C33EB3F boolean,integer ped:Ped,vehicle:Vehicle,outIndex?:integer IsPedFacingPed c PED 0xD71649DB0A545AA3 boolean ped:Ped,otherPed:Ped,angle:number IsPedFalling c PED 0xFB92A102F1C4DFA3 boolean ped:Ped IsPedFatallyInjured c PED 0xD839450756ED5A80 boolean ped:Ped @@ -2743,7 +2792,7 @@ IsPedInAnyPoliceVehicle c PED 0x0BD04E29640C9C12 boolean ped:Ped IsPedInAnySub c PED 0xFBFC01CCFB35D99E boolean ped:Ped IsPedInAnyTaxi c PED 0x6E575D6A898AB852 boolean ped:Ped IsPedInAnyTrain c PED 0x6F972C1AB75A1ED0 boolean ped:Ped -IsPedInAnyVehicle b PED 0x997ABD671D25CA0B boolean ped:Ped,atGetIn:boolean +IsPedInAnyVehicle b PED 0x997ABD671D25CA0B boolean ped:Ped,atGetIn:boolean 0x3B0171EE boolean ped:Ped IsPedInCombat c PED 0x4859F1FC66A6278E boolean ped:Ped,target:Ped IsPedInCover c PED 0x60DFD0691A170B88 boolean ped:Ped,exceptUseWeapon:boolean IsPedInCoverFacingLeft c PED 0x845333B3150583AB boolean ped:Ped @@ -2754,7 +2803,8 @@ IsPedInHighCover c PED 0x6A03BF943D767C93 boolean ped:Ped IsPedInMeleeCombat c PED 0x4E209B2C1EAD5159 boolean ped:Ped IsPedInModel c PED 0x796D90EFB19AA332 boolean ped:Ped,modelHash:Hash IsPedInParachuteFreeFall c PED 0x7DCE8BDA0F1C1200 boolean ped:Ped -IsPedInVehicle b PED 0xA3EE4A07279BB9DB boolean ped:Ped,vehicle:Vehicle,atGetIn:boolean +IsPedInSphereAreaOfAnyEnemyPeds c PED 0x082D79E15302F0C2 boolean ped:Ped,x:number,y:number,z:number,range:number +IsPedInVehicle b PED 0xA3EE4A07279BB9DB boolean ped:Ped,vehicle:Vehicle,atGetIn:boolean 0x7DA6BC83 boolean ped:Ped,vehicle:Vehicle IsPedInWrithe c TASK 0xDEB6D52126E7D640 boolean ped:Ped IsPedInjured c PED 0x84A2DD9AC37C35C1 boolean ped:Ped IsPedJacking c PED 0x4AE4FF911DFB61DA boolean ped:Ped @@ -2787,6 +2837,7 @@ IsPedRunningMeleeTask c PED 0xD1871251F3B5ACD7 boolean ped:Ped IsPedRunningMobilePhoneTask c PED 0x2AFE52F782F25775 boolean ped:Ped IsPedRunningRagdollTask c PED 0xE3B6097CC25AA69E boolean ped:Ped IsPedShaderEffectValid c PED 0x81AA517FBBA05D39 boolean ped:Ped +IsPedSheltered c PED 0xB8B52E498014F5B0 boolean ped:Ped IsPedShooting c PED 0x34616828CD07F1A1 boolean ped:Ped IsPedShootingInArea c PED 0x7E9DFE24AC1E58EF boolean ped:Ped,x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,p7:boolean,p8:boolean IsPedSittingInAnyVehicle c PED 0x826AA586EDB9FEF8 boolean ped:Ped @@ -2823,7 +2874,7 @@ IsPlayerBanned c NETWORK 0x5F91D5D0B36AA310 boolean NetworkHaveRosMultiplayerPr IsPlayerBattleAware c PLAYER 0x38D28DA81E4E9BF9 boolean player:Player IsPlayerBeingArrested c PLAYER 0x388A47C51ABDAC8E boolean player:Player,atArresting:boolean IsPlayerBluetoothEnable c PLAYER 0x65FAEE425DE637B0 boolean player:Player -IsPlayerCamControlDisabled c PLAYER 0x7C814D2FB49F40C0 boolean +IsPlayerCamControlDisabled c PLAYER 0x7C814D2FB49F40C0 boolean GetAreCameraControlsDisabled IsPlayerClimbing c PLAYER 0x95E8F73DC65EFB9C boolean player:Player IsPlayerCommerceInfoLoaded s CFX 0xBEFE93F4 boolean playerSrc:string IsPlayerCommerceInfoLoadedExt s CFX 0x1D14F4FE boolean playerSrc:string @@ -2856,6 +2907,7 @@ IsPlayerWantedLevelGreater c PLAYER 0x238DB2A2C23EE9EF boolean player:Player,wan IsPlayingPhoneGestureAnim c TASK 0xB8EBB1E9D3588C10 boolean ped:Ped IsPlaylistUnk c GRAPHICS 0x1F710BFF7DAE6261 boolean tvChannel:integer,p1:any IsPointInAngledArea c OBJECT 0x2A70BAE8883E4C81 boolean xPos:number,yPos:number,zPos:number,x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,width:number,p10:boolean,includez:boolean +IsPointInsideColshape b CFX 0x324DCFA6 boolean colShapeId:integer,x:number,y:number,z:number IsPointObscuredByAMissionEntity c MISC 0xE54E209C35FFA18D boolean p0:number,p1:number,p2:number,p3:number,p4:number,p5:number,p6:any IsPointOnRoad c PATHFIND 0x125BF4ABFC536B09 boolean x:number,y:number,z:number,vehicle:Vehicle IsPopMultiplierAreaUnk c MISC 0x1312F4B242609CE3 boolean id:integer @@ -2966,10 +3018,11 @@ IsTrainCaboose s CFX 0xFA9336E5 boolean train:Vehicle IsTurretSeat c VEHICLE 0xE33FFA906CE74880 boolean vehicle:Vehicle,seatIndex:integer IsTvPlaylistItemPlaying c GRAPHICS 0x0AD973CA1E077B60 boolean videoCliphash:Hash IsUiLoadingMultiplayer c LOADINGSCREEN 0xC6DC823253FBB366 boolean LoadingscreenIsLoadingFreemode +IsUpdatingMpGamerTagNameAndCrewDetails c HUD 0xEB709A36958ABE0D boolean playerId:integer IsUsingKeyboard c PAD 0xA571D46727E2B718 boolean padIndex:integer IsUsingKeyboard_2 c PAD 0x13337B38DB572509 boolean padIndex:integer IsValidInterior c INTERIOR 0x26B0E73D7EAAF4D3 boolean interior:integer -IsValidMpGamerTagMovie c HUD 0xEB709A36958ABE0D boolean gamerTagId:integer +IsValidMpGamerTagMovie c HUD 0xEB709A36958ABE0D boolean playerId:integer IsUpdatingMpGamerTagNameAndCrewDetails IsVehicleAConvertible c VEHICLE 0x52F357A30698BCCE boolean vehicle:Vehicle,checkRoofExtras:boolean IsVehicleAlarmActivated c VEHICLE 0x4319E335B71FFF34 boolean vehicle:Vehicle IsVehicleAlarmSet c CFX 0xDC921211 boolean vehicle:Vehicle @@ -2993,7 +3046,8 @@ IsVehicleInBurnout c VEHICLE 0x1297A88E081430EB boolean vehicle:Vehicle IsVehicleInGarageArea c VEHICLE 0xCEE4490CD57BB3C2 boolean garageName:string,vehicle:Vehicle IsVehicleInSubmarineMode c VEHICLE 0xA77DC70BD689A1E5 boolean vehicle:Vehicle IsVehicleInteriorLightOn c CFX 0xA411F72C boolean vehicle:Vehicle -IsVehicleModHswExclusive c VEHICLE 0x00834EAC4A96E010 boolean vehicle:Vehicle,modType:integer,modIndex:integer +IsVehicleModGen9Exclusive c VEHICLE 0x00834EAC4A96E010 boolean vehicle:Vehicle,modType:integer,modIndex:integer +IsVehicleModHswExclusive c VEHICLE 0x00834EAC4A96E010 boolean vehicle:Vehicle,modType:integer,modIndex:integer IsVehicleModGen9Exclusive IsVehicleModLoadDone c VEHICLE 0x9A83F5F9963775EF boolean vehicle:Vehicle HaveVehicleModsStreamedIn IsVehicleModel c VEHICLE 0x423E8DE37D934D89 boolean vehicle:Vehicle,model:Hash IsVehicleNearEntity c VEHICLE 0x57715966069157AD boolean vehicle:Vehicle,entity:Entity IsEntityAttachedToHandlerFrame @@ -3001,6 +3055,7 @@ IsVehicleNeedsToBeHotwired c CFX 0xF9933BF4 boolean vehicle:Vehicle IsVehicleNeonLightEnabled c VEHICLE 0x8C4B92553E4766A5 boolean vehicle:Vehicle,index:integer IsVehicleNodeIdValid c PATHFIND 0x1EAF30FCFBF5AF74 boolean vehicleNodeId:integer IsVehicleOnAllWheels c VEHICLE 0xB104CD1BABF302E2 boolean vehicle:Vehicle +IsVehicleOnBoostPad c VEHICLE 0x71C6302CBCA6CA35 boolean vehicle:Vehicle IsVehicleParachuteActive c VEHICLE 0x3DE51E9C80B116CF boolean vehicle:Vehicle IsVehiclePreviouslyOwnedByPlayer c CFX 0xF849ED67 boolean vehicle:Vehicle IsVehicleRadioEnabled c AUDIO 0x0BE4BE946463F917 boolean vehicle:Vehicle IsVehicleRadioOn @@ -3008,7 +3063,7 @@ IsVehicleRadioLoud c AUDIO 0x032A116663A4D5AC boolean vehicle:Vehicle CanVehicle IsVehicleRadioOn c AUDIO 0x0BE4BE946463F917 boolean vehicle:Vehicle IsVehicleRocketBoostActive c VEHICLE 0x3D34E80EED4AE3BE boolean vehicle:Vehicle IsVehicleSearchlightOn c VEHICLE 0xC0F97FCE55094987 boolean vehicle:Vehicle -IsVehicleSeatAccessible c VEHICLE 0x639431E895B9AA57 boolean ped:Ped,vehicle:Vehicle,seatIndex:integer,side:boolean,onEnter:boolean +IsVehicleSeatAccessible c VEHICLE 0x639431E895B9AA57 boolean ped:Ped,vehicle:Vehicle,seatIndex:integer,checkSide:boolean,leftSide:boolean IsEntryPointForSeatClear IsVehicleSeatFree c VEHICLE 0x22AC59A870E6A669 boolean vehicle:Vehicle,seatIndex:integer IsVehicleShopResprayAllowed c VEHICLE 0x8D474C8FAEFF6CDE boolean vehicle:Vehicle IsVehicleSprayable IsVehicleSirenAudioOn c VEHICLE 0xB5CC40FBCB586380 boolean vehicle:Vehicle @@ -3028,7 +3083,8 @@ IsVehicleWeaponDisabled c VEHICLE 0x563B65A643ED072E boolean weaponHash:Hash,veh IsVehicleWheelBrokenOff c CFX 0xCF1BC668 boolean vehicle:Vehicle,wheelIndex:integer IsVehicleWindowIntact b VEHICLE 0x46E571A0E20D01F1 boolean vehicle:Vehicle,windowIndex:integer IsWarningMessageActive c HUD 0xE18B138FABC53103 boolean -IsWarningMessageActive_2 c HUD 0xAF42195A42C63BBA boolean +IsWarningMessageActive_2 c HUD 0xAF42195A42C63BBA boolean IsWarningMessageReadyForControl +IsWarningMessageReadyForControl c HUD 0xAF42195A42C63BBA boolean IsWaypointActive c HUD 0x1DD1F58F493F1DA5 boolean IsWaypointPlaybackGoingOnForPed c TASK 0xE03B3F2D3DC59B64 boolean p0:any IsWaypointPlaybackGoingOnForVehicle c TASK 0xF5134943EA29868C boolean vehicle:Vehicle @@ -3040,21 +3096,21 @@ KeyHudColour c HUD 0x1A5CD7752DD28CD3 toggle:boolean,ped:Ped SetMinimapInSpecta KnockOffPedProp c PED 0x6FD7816A36615F48 ped:Ped,p1:boolean,p2:boolean,p3:boolean,p4:boolean KnockPedOffVehicle c PED 0x45BBCBA77C29A841 ped:Ped LandingMenuIsActive c MISC 0x3BBBD13E5041A79E boolean -Leaderboards2ReadByHandle c STATS 0xC30713A383BFBF0E boolean p0:any,p1:any -Leaderboards2ReadByPlatform c STATS 0xF1AE5DCDBFCA2721 boolean p0:any,gamerHandleCsv:string,platformName:string -Leaderboards2ReadByRadius c STATS 0x5CE587FB5A42C8C4 boolean p0:any,p1:any,p2:any -Leaderboards2ReadByRank c STATS 0xBA2C7DB0C129449A boolean p0:any,p1:any,p2:any -Leaderboards2ReadByRow c STATS 0xA9CDB1E3F0A49883 boolean p0:any,p1:any,p2:any,p3:any,p4:any,p5:any,p6:any -Leaderboards2ReadByScoreFloat c STATS 0xE662C8B759D08F3C boolean p0:any,p1:number,p2:any -Leaderboards2ReadByScoreInt c STATS 0x7EEC7E4F6984A16A boolean p0:any,p1:any,p2:any -Leaderboards2ReadFriendsByRow c STATS 0x918B101666F9CB83 boolean p0:any,p1:any,p2:any,p3:boolean,p4:any,p5:any -Leaderboards2ReadRankPrediction c STATS 0xC38DC1E90D22547C boolean p0:any,p1:any,p2:any -Leaderboards2WriteData c STATS 0xAE2206545888AE49 boolean p0:any -Leaderboards2WriteDataForEventType c STATS 0xC980E62E33DF1D5C boolean p0:any,p1:any -LeaderboardsCacheDataRow c STATS 0xB9BB18E2C40142ED boolean p0:any +Leaderboards2ReadByHandle c STATS 0xC30713A383BFBF0E boolean,integer,integer +Leaderboards2ReadByPlatform c STATS 0xF1AE5DCDBFCA2721 boolean,integer gamerHandleCsv:string,platformName:string +Leaderboards2ReadByRadius c STATS 0x5CE587FB5A42C8C4 boolean,integer,integer p1:any +Leaderboards2ReadByRank c STATS 0xBA2C7DB0C129449A boolean,integer p1:any,p2:any +Leaderboards2ReadByRow c STATS 0xA9CDB1E3F0A49883 boolean,integer,integer,integer,integer p2:any,p4:any,p6:any +Leaderboards2ReadByScoreFloat c STATS 0xE662C8B759D08F3C boolean,integer p1:number,p2:any +Leaderboards2ReadByScoreInt c STATS 0x7EEC7E4F6984A16A boolean,integer p1:any,p2:any +Leaderboards2ReadFriendsByRow c STATS 0x918B101666F9CB83 boolean,integer,integer p2:any,p3:boolean,p4:any,p5:any +Leaderboards2ReadRankPrediction c STATS 0xC38DC1E90D22547C boolean,integer,integer,integer +Leaderboards2WriteData c STATS 0xAE2206545888AE49 boolean,integer p0?:integer +Leaderboards2WriteDataForEventType c STATS 0xC980E62E33DF1D5C boolean,integer,integer +LeaderboardsCacheDataRow c STATS 0xB9BB18E2C40142ED boolean,integer p0?:integer LeaderboardsClearCacheData c STATS 0xD4B02A6B476E1FDC LeaderboardsDeaths c STATS 0x428EAF89E24F6C36 statName:Hash,value:number -LeaderboardsGetCacheDataRow c STATS 0x9120E8DBA3D69273 boolean p0:any,p1:any,p2:any +LeaderboardsGetCacheDataRow c STATS 0x9120E8DBA3D69273 boolean,integer p0:any,p1:any,p2?:integer LeaderboardsGetCacheExists c STATS 0x9C51349BE6CDFE2C boolean p0:any LeaderboardsGetCacheNumberOfRows c STATS 0x58A651CD201D89AD integer p0:any LeaderboardsGetCacheTime c STATS 0xF04C1C27DA35F6C8 any p0:any @@ -3078,7 +3134,7 @@ LoadContentChangeSetGroup c FILES 0x6BEDF5769AC2DC07 hash:Hash LoadGlobalWaterType c STREAMING 0x7E3F55ED251B76D3 waterType:integer LoadInterior c INTERIOR 0x2CA429C029CCF247 interior:integer PinInteriorInMemory LoadMissionCreatorData c STREAMING 0xB5A4DB34FE89B88A InitCreatorBudget -LoadMissionCreatorPhoto c GRAPHICS 0x4862437A486F91B0 boolean p0:string,p1:any,p2:any,p3:boolean +LoadMissionCreatorPhoto c GRAPHICS 0x4862437A486F91B0 boolean,integer,integer p0:string,p3:boolean LoadMovieMeshSet c GRAPHICS 0xB66064452270E8F1 integer movieMeshSetName:string LoadMpDlcMaps c DLC 0x0888C3502DBBEEF5 OnEnterMp LoadPlayerCommerceData s CFX 0xA8F63EAB playerSrc:string @@ -3114,7 +3170,7 @@ LowerRetractableWheels c VEHICLE 0x5335BE58C083E74E vehicle:Vehicle MakePedReload c WEAPON 0x20AE33F3AC9C0033 boolean ped:Ped MarkObjectForDeletion c OBJECT 0xADBE4809F19F927A object:Object MaxRadioStationIndex c AUDIO 0xF1620ECB50E01DE7 integer GetNumUnlockedRadioStations -ModifyVehicleTopSpeed c VEHICLE 0x93A3996368C94158 vehicle:Vehicle,value:number +ModifyVehicleTopSpeed c VEHICLE 0x93A3996368C94158 vehicle:Vehicle,percentChange:number ModifyWater c WATER 0xC443FD757C3BA637 x:number,y:number,height:number,radius:number MoveFinger c MOBILE 0x95C9E72F3D7DEC9B direction:integer CellCamMoveFinger MoveVehicleDecals c GRAPHICS 0x84C8D7C2D30D3280 p0:any,p1:any @@ -3155,9 +3211,10 @@ N_0x0035bb914316f1e3 c MONEY 0x0035BB914316F1E3 p0:any,p1:any,p2:any,p3:any Net N_0x003e92ba477f9d7f c HUD 0x003E92BA477F9D7F integer blip:Blip GetBlipRotation N_0x006e4b040ed37ec3 c OBJECT 0x006E4B040ED37EC3 p0:any N_0x0077f15613d36993 c STATS 0x0077F15613D36993 p0:any,p1:any,p2:any,p3:any +N_0x00834eac4a96e010 c VEHICLE 0x00834EAC4A96E010 boolean vehicle:Vehicle,modType:integer,modIndex:integer IsVehicleModGen9Exclusive N_0x00c09f246abedd82 c VEHICLE 0x00C09F246ABEDD82 number vehicleClass:integer GetVehicleClassEstimatedMaxSpeed N_0x01095c95cd46b624 c DATAFILE 0x01095C95CD46B624 boolean p0:integer DatafileSelectCreatorStats -N_0x011883f41211432a c CUTSCENE 0x011883F41211432A x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,p6:integer +N_0x011883f41211432a c CUTSCENE 0x011883F41211432A x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,p6:integer SetCutsceneOriginAndOrientation N_0x013e5cfc38cd5387 c PED 0x013E5CFC38CD5387 integer,integer,integer makeupColorIndex:integer GetPedMakeupRgbColor N_0x0150b6ff25a9e2e5 c AUDIO 0x0150B6FF25A9E2E5 UnrequestTennisBanks N_0x015b03ee1c43e6ec c STATS 0x015B03EE1C43E6EC p0:any @@ -3174,7 +3231,7 @@ N_0x02369d5c8a51fdcf c GRAPHICS 0x02369D5C8A51FDCF toggle:boolean N_0x02398b627547189c c VEHICLE 0x02398B627547189C vehicle:Vehicle,toggle:boolean SetVehicleHasBeenDrivenFlag N_0x023acab2dc9dc4a4 c NETWORK 0x023ACAB2DC9DC4A4 any N_0x024a60deb0ea69f0 c OBJECT 0x024A60DEB0EA69F0 boolean garageHash:Hash,player:Player,p2:number,p3:integer IsPlayerEntirelyInsideGarage -N_0x02a8bec6fd9af660 c NETWORK 0x02A8BEC6FD9AF660 boolean p0:any,p1:any NetworkGetGamerStatusResult +N_0x02a8bec6fd9af660 c NETWORK 0x02A8BEC6FD9AF660 boolean,integer p1:any NetworkGetGamerStatusResult N_0x02ac28f3a01fa04a c GRAPHICS 0x02AC28F3A01FA04A p0:number CascadeShadowsSetDynamicDepthValue N_0x02ada21ea2f6918f c NETWORK 0x02ADA21EA2F6918F boolean UgcHasGetFinished N_0x02c40bf885c567b6 c NETWORK 0x02C40BF885C567B6 integer netSceneId:integer NetworkGetLocalSceneFromNetworkId @@ -3185,7 +3242,7 @@ N_0x03300b57fcac6ddb c GRAPHICS 0x03300B57FCAC6DDB p0:boolean N_0x0350e7e17ba767d0 c AUDIO 0x0350E7E17BA767D0 vehicle:Vehicle,value:integer SetVehicleHornVariation N_0x0378c08504160d0d c OBJECT 0x0378C08504160D0D boolean object:Object IsObjectAPortablePickup N_0x0379daf89ba09aa5 c NETWORK 0x0379DAF89BA09AA5 object:Object,enabled:boolean NetworkSetObjectForceStaticBlend -N_0x0395cb47b022e62c c NETSHOPPING 0x0395CB47B022E62C boolean p0:any +N_0x0395cb47b022e62c c NETSHOPPING 0x0395CB47B022E62C boolean,integer p0?:integer N_0x03a93ff1a2ca0864 c SOCIALCLUB 0x03A93FF1A2CA0864 integer ScInboxGetTotalNumMessages N_0x03c27e13b42a0e82 c OBJECT 0x03C27E13B42A0E82 doorHash:Hash,rate:number,requestDoor:boolean,forceUpdate:boolean DoorSystemSetAutomaticRate N_0x03c2eebb04b3fb72 c STATS 0x03C2EEBB04B3FB72 p0:any,p1:any,p2:any,p3:any,p4:any,p5:any,p6:any @@ -3202,10 +3259,10 @@ N_0x0467c11ed88b7d28 c NETWORK 0x0467C11ED88B7D28 boolean NetworkIsTunableCloud N_0x047cbed6f6f8b63c c STATS 0x047CBED6F6F8B63C StatSetCheatIsActive N_0x04918a41bc9b8157 c NETWORK 0x04918A41BC9B8157 any p0:any,p1:any,p2:any N_0x0499d7b09fc9b407 c PAD 0x0499D7B09FC9B407 string padIndex:integer,control:integer,p2:boolean GetControlInstructionalButton -N_0x04d90ba8207ada2d c STATS 0x04D90BA8207ADA2D data:any PlaystatsRecoverContraband +N_0x04d90ba8207ada2d c STATS 0x04D90BA8207ADA2D integer data?:integer PlaystatsRecoverContraband N_0x0525a2c2562f3cd4 c PED 0x0525A2C2562F3CD4 boolean colorID:integer IsPedLipstickColorValid N_0x052837721a854ec7 c SHAPETEST 0x052837721A854EC7 integer entity:Entity,flags1:integer,flags2:integer StartShapeTestBoundingBox -N_0x052991e59076e4e4 c HUD 0x052991E59076E4E4 boolean p0:Hash,p1:any GetMenuPedBoolStat +N_0x052991e59076e4e4 c HUD 0x052991E59076E4E4 boolean,integer p0:Hash,p1?:integer GetMenuPedBoolStat N_0x0546524ade2e9723 c CUTSCENE 0x0546524ADE2E9723 cutsceneEntName:string,componentId:integer,drawableId:integer,textureId:integer,modelHash:Hash SetCutscenePedPropVariation N_0x0564b9ff9631b82c c FILES 0x0564B9FF9631B82C boolean hash:Hash IsDlcVehicleMod N_0x0581730ab9380412 c VEHICLE 0x0581730AB9380412 p0:any,p1:any,p2:any,p3:any,p4:any,p5:any @@ -3237,7 +3294,7 @@ N_0x075f1d57402c93ba c MISC 0x075F1D57402C93BA boolean HaveCreditsReachedEnd N_0x07c313f94746702c c STREAMING 0x07C313F94746702C boolean unused:any StreamvolIsValid N_0x07c61676e5bb52cd c SOCIALCLUB 0x07C61676E5BB52CD boolean token:integer ScLicenseplateGetAddIsPending N_0x07dbd622d9533857 c SOCIALCLUB 0x07DBD622D9533857 any p0:any -N_0x07dd29d5e22763f1 c NETWORK 0x07DD29D5E22763F1 boolean networkHandle:any NetworkCanPlayMultiplayerWithGamer +N_0x07dd29d5e22763f1 c NETWORK 0x07DD29D5E22763F1 boolean,integer networkHandle?:integer NetworkCanPlayMultiplayerWithGamer N_0x07eab372c8841d99 c NETWORK 0x07EAB372C8841D99 any p0:any,p1:any,p2:any N_0x07fb139b592fa687 c PATHFIND 0x07FB139B592FA687 boolean x1:number,y1:number,x2:number,y2:number RequestPathsPreferAccurateBoundingstruct N_0x0811381ef5062fec c STREAMING 0x0811381EF5062FEC p0:Entity @@ -3293,7 +3350,7 @@ N_0x0c15b0e443b2349d c STREAMING 0x0C15B0E443B2349D number GetLodscale N_0x0c1c5d756fb5f337 c GRAPHICS 0x0C1C5D756FB5F337 boolean scaleformName:string HasScaleformMovieFilenameLoaded N_0x0c1f7d49c39d2289 c NETWORK 0x0C1F7D49C39D2289 integer GetMaxNumNetworkPeds N_0x0c4bbf625ca98c4e c HUD 0x0C4BBF625CA98C4E ped:Ped,toggle:boolean SetPedAiBlipForcedOn -N_0x0c5a80a9e096d529 c HUD 0x0C5A80A9E096D529 boolean index:integer,name:string,cash:integer,rp:integer,lvl:integer,colour:integer SetWarningMessageListRow +N_0x0c5a80a9e096d529 c HUD 0x0C5A80A9E096D529 boolean index:integer,name:string,cash:integer,rp:integer,lvl:integer,colour:integer SetWarningMessageOptionItems N_0x0c698d8f099174c7 c HUD 0x0C698D8F099174C7 p0:any N_0x0c82d21a77c22d49 c MONEY 0x0C82D21A77C22D49 p0:any,p1:any,p2:any,p3:any NetworkSpentUpgradeBunker N_0x0c8fac83902a62df c GRAPHICS 0x0C8FAC83902A62DF thickness:number SeethroughSetMaxThickness @@ -3308,14 +3365,14 @@ N_0x0d01d20616fc73fb c STATS 0x0D01D20616FC73FB p0:any,p1:any N_0x0d30eb83668e63c5 c MONEY 0x0D30EB83668E63C5 p0:any,p1:any,p2:any,p3:any N_0x0d5f65a8f4ebdab5 c VEHICLE 0x0D5F65A8F4EBDAB5 vehicle:Vehicle,state:integer SetCargobobPickupRopeType N_0x0d6ca79eeebd8ca3 c GRAPHICS 0x0D6CA79EEEBD8CA3 integer GetStatusOfTakeHighQualityPhoto -N_0x0d77a82dc2d0da59 c NETWORK 0x0D77A82DC2D0DA59 p0:any,p1:any +N_0x0d77a82dc2d0da59 c NETWORK 0x0D77A82DC2D0DA59 integer,integer N_0x0dbd5d7e3c5bec3b c NETWORK 0x0DBD5D7E3C5BEC3B boolean NetworkIsTransitionClosedCrew N_0x0dd362f14f18942a c MONEY 0x0DD362F14F18942A amount:integer,p1:any,p2:any N_0x0e3a041ed6ac2b45 c NETWORK 0x0E3A041ED6AC2B45 number player:Player NetworkGetAverageLatencyForPlayer_2 N_0x0e4299c549f0d1f1 c GRAPHICS 0x0E4299C549F0D1F1 toggle:boolean N_0x0e4c749ff9de9cc4 c HUD 0x0E4C749FF9DE9CC4 value:integer,commaSeparated:boolean AddTextComponentFormattedInteger N_0x0e4f77f7b9d74d84 c NETWORK 0x0E4F77F7B9D74D84 playerCount:integer NetworkSetActivityPlayerMax -N_0x0eacdf8487d5155a c STATS 0x0EACDF8487D5155A data:any PlaystatsGunrunMissionEnded +N_0x0eacdf8487d5155a c STATS 0x0EACDF8487D5155A integer data?:integer PlaystatsGunrunMissionEnded N_0x0eaeb0db4b132399 c PATHFIND 0x0EAEB0DB4B132399 boolean p0:any DoesNavmeshBlockingObjectExist N_0x0ede326d47cd0f3e c NETWORK 0x0EDE326D47CD0F3E boolean ped:Ped,player:Player N_0x0f1a4b45b7693b95 c NETWORK 0x0F1A4B45B7693B95 p0:any,p1:any @@ -3323,7 +3380,7 @@ N_0x0f3b4d4e43177236 c VEHICLE 0x0F3B4D4E43177236 vehicle:Vehicle,p1:boolean Ge N_0x0f62619393661d6e c PED 0x0F62619393661D6E p0:any,p1:any,p2:any N_0x0f6f1ebbc4e1d5e6 c SCRIPT 0x0F6F1EBBC4E1D5E6 boolean scriptIndex:integer,p1:string N_0x0f70731baccfbb96 c PAD 0x0F70731BACCFBB96 boolean GetIsUsingAlternateDriveby -N_0x0f73393bac7e6730 c SOCIALCLUB 0x0F73393BAC7E6730 boolean,integer plateText:string ScLicenseplateIsvalid +N_0x0f73393bac7e6730 c SOCIALCLUB 0x0F73393BAC7E6730 boolean,integer plateText:string,tokenOut?:integer ScLicenseplateIsvalid N_0x0fb82563989cf4fb c CAM 0x0FB82563989CF4FB cam:Cam,cam2:Cam,length:integer,p3:integer AddCamSplineNodeUsingCamera N_0x0fde9dbfc0a6bc65 c STREAMING 0x0FDE9DBFC0A6BC65 name:string SetPlayerSwitchEstablishingShot N_0x0fe8e1fcd2b86b33 c MONEY 0x0FE8E1FCD2B86B33 p0:any,p1:any,p2:any,p3:any NetworkSpentPaServiceHeliPickup @@ -3350,7 +3407,7 @@ N_0x113e6e3e50e286b0 c NETWORK 0x113E6E3E50E286B0 p0:any NetworkClanReleaseEmbl N_0x1153fa02a659051c c NETWORK 0x1153FA02A659051C N_0x11579d940949c49e c AUDIO 0x11579D940949C49E p0:any N_0x116fb94dc4b79f17 c SOCIALCLUB 0x116FB94DC4B79F17 p0:string -N_0x1171a97a3d3981b6 c NETWORK 0x1171A97A3D3981B6 boolean p0:any,p1:any,p2:any,p3:any +N_0x1171a97a3d3981b6 c NETWORK 0x1171A97A3D3981B6 boolean,integer,integer p2:any,p3:any N_0x1178e104409fe58c c MISC 0x1178E104409FE58C p0:any,p1:any N_0x1185a8087587322c c HUD 0x1185A8087587322C state:boolean SetTextInputBoxEnabled N_0x1187cb58d7f3bed7 c STATS 0x1187CB58D7F3BED7 p0:any,p1:any,p2:any,p3:any PlaystatsCarclubChallenge @@ -3360,7 +3417,7 @@ N_0x11d1e53a726891fe c OBJECT 0x11D1E53A726891FE boolean object:Object IsPickupW N_0x11fa5d3479c7dd47 c CAM 0x11FA5D3479C7DD47 vehicleModel:Hash SetGameplayCamVehicleCameraName N_0x11ff1c80276097ed c STATS 0x11FF1C80276097ED statHash:Hash,value:integer,p2:integer PresenceEventUpdatestatInt N_0x1201e8a3290a3b98 c VEHICLE 0x1201E8A3290A3B98 vehicle:Vehicle,toggle:boolean SetCamberedWheelsDisabled -N_0x120364de2845daf8 c NETWORK 0x120364DE2845DAF8 integer data:any,dataSize:integer NetworkGetPlatformPartyMembers +N_0x120364de2845daf8 c NETWORK 0x120364DE2845DAF8 integer,integer dataSize:integer NetworkGetPlatformPartyMembers N_0x1216e0bfa72cc703 c PED 0x1216E0BFA72CC703 p0:any,p1:any N_0x121fb4dddc2d5291 c STATS 0x121FB4DDDC2D5291 amount:integer,act:integer,player:Player,cm:number PlaystatsRosBet N_0x125494b98a21aaf7 c OBJECT 0x125494B98A21AAF7 Object pickupHash:Hash,x:number,y:number,z:number,placeOnGround:boolean,modelHash:Hash CreateNonNetworkedPortablePickup @@ -3377,11 +3434,11 @@ N_0x1327e2fe9746baee c MISC 0x1327E2FE9746BAEE boolean id:integer DoesPopMultipl N_0x13337b38db572509 c PAD 0x13337B38DB572509 boolean padIndex:integer IsUsingKeyboard_2 N_0x13518ff1c6b28938 c NETWORK 0x13518FF1C6B28938 boolean p0:any NetworkClanRequestEmblem N_0x1353f87e89946207 c NETWORK 0x1353F87E89946207 boolean NetworkHasAgeRestrictedProfile -N_0x135f9b7b7add2185 c NETWORK 0x135F9B7B7ADD2185 boolean networkHandle:any NetworkCanGamerPlayMultiplayerWithMe +N_0x135f9b7b7add2185 c NETWORK 0x135F9B7B7ADD2185 boolean,integer networkHandle?:integer NetworkCanGamerPlayMultiplayerWithMe N_0x137bc35589e34e1e c HUD 0x137BC35589E34E1E integer,integer crewTypeIsPrivate:boolean,crewTagContainsRockstar:boolean,rank:integer,isLeader:boolean,isImportant:boolean,clanHandle:integer,gamerStr:string,r:integer,g:integer,b:integer EndTextCommandThefeedPostCrewtagWithGameName N_0x1398582b7f72b3ed c NETWORK 0x1398582B7F72B3ED p0:any N_0x13b350b8ad0eee10 c RECORDING 0x13B350B8AD0EEE10 -N_0x13c4b962653a5280 c HUD 0x13C4B962653A5280 integer PauseMenuGetUniqueIdOfMouseHoveredSlot +N_0x13c4b962653a5280 c HUD 0x13C4B962653A5280 integer PauseMenuGetMouseHoverUniqueId N_0x13f1fcb111b820b0 c NETWORK 0x13F1FCB111B820B0 p0:boolean N_0x140e6a44870a11ce c NETWORK 0x140E6A44870A11CE N_0x144da052257ae7d8 c NETWORK 0x144DA052257AE7D8 p0:any @@ -3396,10 +3453,10 @@ N_0x149916f50c34a40d c CAM 0x149916F50C34A40D cam:Cam,ped:Ped,boneIndex:integer N_0x149aee66f0cb3a99 c AUDIO 0x149AEE66F0CB3A99 density:number,applyValue:number SetPedWallaDensity N_0x14c9fdcc41f81f63 c HUD 0x14C9FDCC41F81F63 toggle:boolean HudWeaponWheelIgnoreControlInput N_0x14d29bb12d47f68c c PAD 0x14D29BB12D47F68C p0:any,p1:any,p2:any,p3:any,p4:any -N_0x14e0b2d1ad1044e0 c STATS 0x14E0B2D1AD1044E0 p0:any,p1:any,p2:any,p3:any +N_0x14e0b2d1ad1044e0 c STATS 0x14E0B2D1AD1044E0 integer,integer,integer,integer N_0x14eda9ee27bd1626 c STATS 0x14EDA9EE27BD1626 p0:any N_0x14fc5833464340a8 c GRAPHICS 0x14FC5833464340A8 -N_0x152d90e4c1b4738a c NETWORK 0x152D90E4C1B4738A boolean p0:any,p1:any UgcCopyContent +N_0x152d90e4c1b4738a c NETWORK 0x152D90E4C1B4738A boolean,integer,integer UgcCopyContent N_0x153973ab99fe8980 c AUDIO 0x153973AB99FE8980 entity:Entity,groupName:string,fadeIn:number AddEntityToAudioMixGroup N_0x155467aca0f55705 c NETWORK 0x155467ACA0F55705 integer N_0x1563fe35e9928e67 c HUD 0x1563FE35E9928E67 gamerTagId:integer,health:integer,maximumHealth:integer SetMpGamerTagOverridePlayerHealth @@ -3426,8 +3483,8 @@ N_0x16a304e6cb2bfab9 c HUD 0x16A304E6CB2BFAB9 r:integer,g:integer,b:integer,a:i N_0x16b5e274bde402f8 c VEHICLE 0x16B5E274BDE402F8 vehicle:Vehicle,trailer:Vehicle,offsetX:number,offsetY:number,offsetZ:number,coordsX:number,coordsY:number,coordsZ:number,rotationX:number,rotationY:number,rotationZ:number,disableColls:number AttachVehicleOnToTrailer N_0x16d3d49902f697bb c NETWORK 0x16D3D49902F697BB boolean player:Player NetworkIsConnectionEndpointRelayServer N_0x16da8172459434aa c SOCIALCLUB 0x16DA8172459434AA any -N_0x16f46fb18c8009e4 c PATHFIND 0x16F46FB18C8009E4 boolean,vector3 x:number,y:number,z:number,p3:integer GetPointOnRoadSide -N_0x170910093218c8b9 c NETSHOPPING 0x170910093218C8B9 boolean p0:any +N_0x16f46fb18c8009e4 c PATHFIND 0x16F46FB18C8009E4 boolean,vector3 x:number,y:number,z:number,p3:integer,outPosition?:vector3 GetPointOnRoadSide +N_0x170910093218c8b9 c NETSHOPPING 0x170910093218C8B9 boolean,integer p0?:integer N_0x170f541e1cadd1de c HUD 0x170F541E1CADD1DE p0:boolean UseFakeMpCash N_0x171bafb3c60389f4 c MISC 0x171BAFB3C60389F4 boolean id:integer DoesPopMultiplierSphereExist N_0x171df6a0c07fb3dc c NETWORK 0x171DF6A0C07FB3DC integer p0:integer,p1:integer UgcRequestContentDataFromIndex @@ -3450,9 +3507,9 @@ N_0x1888694923ef4591 c NETWORK 0x1888694923EF4591 NetworkClearGroupActivity N_0x18eb48cfc41f2ea0 c AUDIO 0x18EB48CFC41F2EA0 entity:Entity,fadeOut:number RemoveEntityFromAudioMixGroup N_0x190428512b240692 c OBJECT 0x190428512B240692 garageHash:Hash,vehicles:boolean,peds:boolean,objects:boolean,isNetwork:boolean ClearObjectsInsideGarage N_0x192547247864dfdd c VEHICLE 0x192547247864DFDD vehicle:Vehicle,toggle:boolean SetVehicleCanLeakPetrol -N_0x1950dae9848a4739 c NETWORK 0x1950DAE9848A4739 boolean,number contextHash:Hash,nameHash:Hash NetworkRegisterTunableFloatHash -N_0x19853b5b17d77bca c SOCIALCLUB 0x19853B5B17D77BCA boolean p0:any,p1:any -N_0x1989c6e6f67e76a8 c SOCIALCLUB 0x1989C6E6F67E76A8 boolean,integer plateText:string,plateData:string ScLicenseplateAdd +N_0x1950dae9848a4739 c NETWORK 0x1950DAE9848A4739 boolean,number contextHash:Hash,nameHash:Hash,value?:number NetworkRegisterTunableFloatHash +N_0x19853b5b17d77bca c SOCIALCLUB 0x19853B5B17D77BCA boolean,integer p0:any,p1?:integer +N_0x1989c6e6f67e76a8 c SOCIALCLUB 0x1989C6E6F67E76A8 boolean,integer plateText:string,plateData:string,tokenOut?:integer ScLicenseplateAdd N_0x19af7ed9b9d23058 c AUDIO 0x19AF7ED9B9D23058 N_0x19bfed045c647c49 c MISC 0x19BFED045C647C49 boolean ped:Ped N_0x19cafa3c87f7c2ff c CAM 0x19CAFA3C87F7C2FF integer GetCamActiveViewModeContext @@ -3466,7 +3523,7 @@ N_0x1a6cbb06e2d0d79d c OBJECT 0x1A6CBB06E2D0D79D p0:any,p1:any N_0x1a78ad3d8240536f c VEHICLE 0x1A78AD3D8240536F vehicle:Vehicle,bLatched:boolean SetConvertibleRoofLatchState N_0x1a7ce7cd3e653485 c STATS 0x1A7CE7CD3E653485 p0:any N_0x1a8e2c8b9cf4549c c GRAPHICS 0x1A8E2C8B9CF4549C modifierName1:string,modifierName2:string AddTcmodifierOverride -N_0x1a8ea222f9c67dbb c STATS 0x1A8EA222F9C67DBB any,number +N_0x1a8ea222f9c67dbb c STATS 0x1A8EA222F9C67DBB any,number p0?:number N_0x1aa8a837d2169d94 c VEHICLE 0x1AA8A837D2169D94 vehicle:Vehicle,toggle:boolean SetVehicleHasUnbreakableLights N_0x1accfba3d8dab2ee c NETWORK 0x1ACCFBA3D8DAB2EE any p0:any,p1:any UgcGetContentRating N_0x1ad5b71586b94820 c NETWORK 0x1AD5B71586B94820 boolean player1:Player,script:string,player2:Player NetworkIsPlayerAParticipantOnScript @@ -3486,7 +3543,7 @@ N_0x1c4fc5752bcd8e48 c GRAPHICS 0x1C4FC5752BCD8E48 x:number,y:number,z:number,p N_0x1c57c94a6446492a c OBJECT 0x1C57C94A6446492A p0:any,p1:any N_0x1c9d7949fa533490 c CAM 0x1C9D7949FA533490 bStopImmediately:boolean StopScriptGlobalShaking N_0x1cae5d2e3f9a07f0 c STATS 0x1CAE5D2E3F9A07F0 p0:any,p1:any,p2:any,p3:any,p4:any,p5:any PlaystatsCrateDropMissionDone -N_0x1cba05ae7bd7ee05 c GRAPHICS 0x1CBA05AE7BD7EE05 p0:number +N_0x1cba05ae7bd7ee05 c GRAPHICS 0x1CBA05AE7BD7EE05 transitionTime:number SetTransitionOutOfTimecycleModifier N_0x1ccc708f0f850613 c HUD 0x1CCC708F0F850613 hudColorIndex:integer,hudColorIndex2:integer ReplaceHudColour N_0x1ce592fdc749d6f5 c GRAPHICS 0x1CE592FDC749D6F5 scaleform:integer,posX:number,posY:number,posZ:number,rotX:number,rotY:number,rotZ:number,p7:number,p8:number,p9:number,scaleX:number,scaleY:number,scaleZ:number,p13:any DrawScaleformMovie_3dSolid N_0x1cf38d529d7441d9 c VEHICLE 0x1CF38D529D7441D9 vehicle:Vehicle,toggle:boolean SetVehicleSt @@ -3526,7 +3583,7 @@ N_0x1ff6bf9a63e5757f c MISC 0x1FF6BF9A63E5757F ScriptRaceShutdown N_0x2016c603d6b8987c c PED 0x2016C603D6B8987C ped:Ped,toggle:boolean N_0x20194d48eaec9a41 c MONEY 0x20194D48EAEC9A41 string,integer,integer p2:string ProcessCashGift N_0x202a5ed9ce01d6e7 c CAM 0x202A5ED9CE01D6E7 cam:Cam,entity:Entity,xRot:number,yRot:number,zRot:number,xOffset:number,yOffset:number,zOffset:number,isRelative:boolean HardAttachCamToEntity -N_0x203b381133817079 c STATS 0x203B381133817079 data:any PlaystatsPiMenuHideSettings +N_0x203b381133817079 c STATS 0x203B381133817079 integer data?:integer PlaystatsPiMenuHideSettings N_0x206bc5dc9d1ac70a c VEHICLE 0x206BC5DC9D1AC70A vehicle:Vehicle,toggle:boolean SetVehicleCanEngineOperateOnFire N_0x20746f7b1032a3c7 c CUTSCENE 0x20746F7B1032A3C7 p0:boolean,p1:boolean,p2:boolean,p3:boolean N_0x208784099002bc30 c RECORDING 0x208784099002BC30 missionNameLabel:string,p1:any @@ -3536,7 +3593,7 @@ N_0x20fe7fdfeead38c0 c HUD 0x20FE7FDFEEAD38C0 HideMinimapInteriorMapThisFrame N_0x2107a3773771186d c MISC 0x2107A3773771186D boolean N_0x21115bcd6e44656a c VEHICLE 0x21115BCD6E44656A vehicle:Vehicle,toggle:boolean SetVehicleActiveForPedNavigation N_0x211c4ef450086857 c HUD 0x211C4EF450086857 -N_0x213aeb2b90cba7ac c MISC 0x213AEB2B90CBA7AC dst:any,src:any,size:integer CopyMemory +N_0x213aeb2b90cba7ac c MISC 0x213AEB2B90CBA7AC integer src:any,size:integer CopyMemory N_0x214cd562a939246a c HUD 0x214CD562A939246A boolean N_0x2162c446dfdf38fd c HUD 0x2162C446DFDF38FD p0:string LogDebugInfo N_0x218297bf0cfd853b c VEHICLE 0x218297BF0CFD853B Ped vehicle:Vehicle,doorIndex:integer GetPedUsingVehicleDoor @@ -3546,8 +3603,8 @@ N_0x21c235bc64831e5a c MISC 0x21C235BC64831E5A vector3 p0:number,p1:number,p2:nu N_0x21d04d7bc538c146 c NETWORK 0x21D04D7BC538C146 boolean entity:Entity IsEntityGhostedToLocalPlayer N_0x21e253a7f8da5dfb c CAM 0x21E253A7F8DA5DFB vehicleName:string SetGameplayCamVehicleCamera N_0x2201c576facaebe8 c GRAPHICS 0x2201C576FACAEBE8 tvChannel:integer,playlistName:string,hour:integer SetTvChannelPlaylistAtHour -N_0x2208438012482a1a c PED 0x2208438012482A1A ped:Ped,p1:boolean,p2:boolean ForcePedAiAndAnimationUpdate -N_0x225798743970412b c SOCIALCLUB 0x225798743970412B boolean,integer +N_0x2208438012482a1a c PED 0x2208438012482A1A ped:Ped,forceAiPreCameraUpdate:boolean,forceZeroTimestep:boolean ForcePedAiAndAnimationUpdate +N_0x225798743970412b c SOCIALCLUB 0x225798743970412B boolean,integer p0?:integer N_0x226c284c830d0ca8 c MONEY 0x226C284C830D0CA8 p0:any,p1:any,p2:any,p3:any N_0x2272b0a1343129f4 c MISC 0x2272B0A1343129F4 boolean IsStuntJumpMessageShowing N_0x228e5c6ad4d74bfd c PATHFIND 0x228E5C6AD4D74BFD toggle:boolean SetAllPathsCacheBoundingstruct @@ -3580,7 +3637,7 @@ N_0x2472622ce1f2d45f c WEAPON 0x2472622CE1F2D45F ped:Ped,ammoType:Hash,ammo:int N_0x247acbc4abbc9d1c c CAM 0x247ACBC4ABBC9D1C p0:boolean N_0x247f0f73a182ea0b c NETSHOPPING 0x247F0F73A182EA0B boolean hash:Hash NetGameserverCatalogItemExistsHash N_0x2485d34e50a22e84 c GRAPHICS 0x2485D34E50A22E84 p0:number,p1:number,p2:number GolfTrailSetRadius -N_0x24a49beaf468dc90 c HUD 0x24A49BEAF468DC90 boolean p0:any,p1:any,p2:any,p3:any,p4:any +N_0x24a49beaf468dc90 c HUD 0x24A49BEAF468DC90 boolean,integer p0:any,p2:any,p3:any,p4:any N_0x24c024ba8379a70a c WEAPON 0x24C024BA8379A70A p0:any,p1:any N_0x24da7d7667fd7b09 c MISC 0x24DA7D7667FD7B09 string GetGlobalCharBuffer N_0x24e4e51fc16305f9 c NETWORK 0x24E4E51FC16305F9 any @@ -3599,7 +3656,7 @@ N_0x25b99872d588a101 c NETWORK 0x25B99872D588A101 any p0:number,p1:number,p2:num N_0x25d990f8e0e3f13c c NETWORK 0x25D990F8E0E3F13C N_0x25f87b30c382fca7 c HUD 0x25F87B30C382FCA7 ThefeedHideThisFrame N_0x25fc3e33a31ad0c9 c GRAPHICS 0x25FC3E33A31AD0C9 p0:boolean -N_0x2605663bd4f23b5d c STATS 0x2605663BD4F23B5D data:any PlaystatsDefendContraband +N_0x2605663bd4f23b5d c STATS 0x2605663BD4F23B5D integer data?:integer PlaystatsDefendContraband N_0x260be8f09e326a20 c VEHICLE 0x260BE8F09E326A20 vehicle:Vehicle,distance:number,duration:integer,bControlVerticalVelocity:boolean BringVehicleToHalt N_0x260ee4fdbdf4db01 c OBJECT 0x260EE4FDBDF4DB01 number object:Object GetRayfireMapObjectAnimPhase N_0x2615aa2a695930c1 c NETWORK 0x2615AA2A695930C1 boolean p0:any NetworkAreTransitionDetailsValid @@ -3671,7 +3728,7 @@ N_0x2acabed337622df2 c AUDIO 0x2ACABED337622DF2 groupName:string UnblockSpeechC N_0x2aed6301f67007d5 c CAM 0x2AED6301F67007D5 entity:Entity DisableCamCollisionForEntity N_0x2afc2d19b50797f2 c MONEY 0x2AFC2D19B50797F2 p0:any,p1:any,p2:any,p3:any N_0x2b16a3bff1fbce49 c PED 0x2B16A3BFF1FBCE49 boolean ped:Ped,componentId:integer,drawableId:integer,textureId:integer SetPedPreloadPropData -N_0x2b171e6b2f64d8df c MONEY 0x2B171E6B2F64D8DF p0:any,p1:any,p2:boolean NetworkEarnFromChallengeWin +N_0x2b171e6b2f64d8df c MONEY 0x2B171E6B2F64D8DF integer p0:any,p2:boolean NetworkEarnFromChallengeWin N_0x2b1813aba29016c5 c NETWORK 0x2B1813ABA29016C5 netID:integer,toggle:boolean NetworkUseHighPrecisionBlending N_0x2b1c623823db0d9d c NETWORK 0x2B1C623823DB0D9D any p0:any,p1:any,p2:any,p3:any,p4:any,p5:any,p6:any N_0x2b2a2cc86778b619 c WATER 0x2B2A2CC86778B619 number GetDeepOceanScaler @@ -3718,15 +3775,15 @@ N_0x2d537ba194896636 c TASK 0x2D537BA194896636 ped:Ped,task:string,multiplier:n N_0x2d5dc831176d0114 c NETWORK 0x2D5DC831176D0114 boolean p0:any N_0x2d7a9b577e72385e c STATS 0x2D7A9B577E72385E p0:any N_0x2d874d4ae612a65f c SOCIALCLUB 0x2D874D4AE612A65F any -N_0x2da41ed6e1fcd7a5 c NETWORK 0x2DA41ED6E1FCD7A5 any,integer p0:any +N_0x2da41ed6e1fcd7a5 c NETWORK 0x2DA41ED6E1FCD7A5 any,integer p0:any,TypeOfWeapon?:integer N_0x2dd39bf3e2f9c47f c AUDIO 0x2DD39BF3E2F9C47F any N_0x2de6c5e2e996f178 c HUD 0x2DE6C5E2E996F178 enabled:boolean PauseToggleFullscreenMap N_0x2de7efa66b906036 c GRAPHICS 0x2DE7EFA66B906036 integer method_return:integer GetScaleformMovieMethodReturnValueInt N_0x2df9038c90ad5264 c PED 0x2DF9038C90AD5264 p0:number,p1:number,p2:number,p3:number,p4:number,interiorFlags:integer,scale:number,duration:integer SpawnpointsStartSearch -N_0x2dfc81c9b9608549 c PED 0x2DFC81C9B9608549 boolean,integer ped:Ped +N_0x2dfc81c9b9608549 c PED 0x2DFC81C9B9608549 boolean,integer ped:Ped,p1?:integer N_0x2e0259babc27a327 c STATS 0x2E0259BABC27A327 p0:any N_0x2e0bf682cc778d49 c NETWORK 0x2E0BF682CC778D49 boolean p0:any -N_0x2e22fefa0100275e c HUD 0x2E22FEFA0100275E boolean +N_0x2e22fefa0100275e c HUD 0x2E22FEFA0100275E boolean HasMenuLayoutChangedEventOccurred N_0x2e4c123d1c8a710e c NETWORK 0x2E4C123D1C8A710E any,integer,integer p2:any,p3:any,p4:any,p5:any,p6:any N_0x2e65248609523599 c STATS 0x2E65248609523599 p0:any,p1:any,p2:any LeaderboardsWriteAddColumnLong N_0x2e89990ddff670c3 c SOCIALCLUB 0x2E89990DDFF670C3 string token:integer,plateIndex:integer ScLicenseplateGetPlateData @@ -3741,7 +3798,7 @@ N_0x2f41a3bae005e5fa c PLAYER 0x2F41A3BAE005E5FA p0:any,p1:any N_0x2f41d51ba3bcd1f1 c NETSHOPPING 0x2F41D51BA3BCD1F1 boolean charSlot:integer NetGameserverSessionApplyReceivedData N_0x2f7ceb6520288061 c PLAYER 0x2F7CEB6520288061 p0:boolean N_0x2f7f2b26dd3f18ee c CAM 0x2F7F2B26DD3F18EE p0:number,p1:number -N_0x2fa2494b47fdd009 c VEHICLE 0x2FA2494B47FDD009 p0:any,p1:any +N_0x2fa2494b47fdd009 c VEHICLE 0x2FA2494B47FDD009 vehicle:Vehicle,enabled:boolean SetTrailerAttachmentEnabled N_0x2fa3173480008493 c STATS 0x2FA3173480008493 p0:any,p1:any,p2:any,p3:any,p4:any N_0x2fab6614ce22e196 c MONEY 0x2FAB6614CE22E196 p0:any,p1:any,p2:any,p3:any N_0x2fc5650b0271cb57 c NETWORK 0x2FC5650B0271CB57 boolean NetworkIsInPlatformParty @@ -3753,7 +3810,7 @@ N_0x3039ae5ad2c9c0c4 c NETWORK 0x3039AE5AD2C9C0C4 player:Player,toggle:boolean N_0x30432a0118736e00 c GRAPHICS 0x30432A0118736E00 Hash N_0x3044240d2e0fa842 c CAM 0x3044240D2E0FA842 boolean N_0x3054f114121c21ea c NETWORK 0x3054F114121C21EA boolean p0:any UgcGetContentIsPublished -N_0x308f96458b7087cc c NETWORK 0x308F96458B7087CC any p0:any,p1:any,p2:any,p3:any,p4:any,p5:boolean UgcTextureDownloadRequest +N_0x308f96458b7087cc c NETWORK 0x308F96458B7087CC any,integer,integer p1:any,p2:any,p3:any,p5:boolean UgcTextureDownloadRequest N_0x30a6614c1f7799b8 c STATS 0x30A6614C1F7799B8 statHash:Hash,value:number,p2:integer PresenceEventUpdatestatFloat N_0x30b4fa1c82dd4b9f c SCRIPT 0x30B4FA1C82DD4B9F integer ScriptThreadIteratorGetNextThreadId N_0x30ca2ef91d15adf8 c AUDIO 0x30CA2EF91D15ADF8 boolean IsAnyPositionalSpeechPlaying @@ -3761,7 +3818,7 @@ N_0x30d779de7c4f6dd3 c VEHICLE 0x30D779DE7C4F6DD3 vehicle:Vehicle,angleRatio:nu N_0x30de938b516f0ad2 c NETWORK 0x30DE938B516F0AD2 p0:any NetworkSetTransitionActivityId N_0x30ed88d5e0c56a37 c TASK 0x30ED88D5E0C56A37 boolean ped:Ped IsTaskMoveNetworkReadyForTransition N_0x30fd873ece50e9f6 c MONEY 0x30FD873ECE50E9F6 p0:integer,p1:integer,p2:Hash,p3:boolean,p4:boolean NetworkBuyContraband -N_0x31125fd509d9043f c MISC 0x31125FD509D9043F p0:any +N_0x31125fd509d9043f c MISC 0x31125FD509D9043F integer p0?:integer N_0x311438a071dd9b1a c HUD 0x311438A071DD9B1A x:number,y:number,z:number AddPointToGpsCustomRoute N_0x3117d84efa60f77b c MOBILE 0x3117D84EFA60F77B p0:number CellCamSetVerticalOffset N_0x312342e1a4874f3f c GRAPHICS 0x312342E1A4874F3F p0:number,p1:number,p2:number,p3:number,p4:number,p5:number,p6:number,p7:number,p8:boolean GolfTrailSetPath @@ -3773,7 +3830,7 @@ N_0x316db59cd14c1774 c STATS 0x316DB59CD14C1774 p0:any N_0x31727907b2c43c55 c MISC 0x31727907B2C43C55 minAmplitude:number WaterOverrideSetOceannoiseminamplitude N_0x317eba71d7543f52 c HUD 0x317EBA71D7543F52 txdString1:string,txnString1:string,txdString2:string,txnString2:string ThefeedUpdateItemTexture N_0x318516e02de3ece2 c OBJECT 0x318516E02DE3ECE2 multiplier:number SetPickupGenerationRangeMultiplier -N_0x3195f8dd0d531052 c NETWORK 0x3195F8DD0D531052 boolean p0:any,p1:any,p2:any,p3:any UgcGetMyContent +N_0x3195f8dd0d531052 c NETWORK 0x3195F8DD0D531052 boolean,integer,integer p0:any,p1:any UgcGetMyContent N_0x31ba138f6304fb9f c MONEY 0x31BA138F6304FB9F p0:any,p1:any N_0x31e90b8873a4cd3b c PLAYER 0x31E90B8873A4CD3B player:Player,p1:number N_0x31f924b53eaddf65 c OBJECT 0x31F924B53EADDF65 p0:boolean @@ -3787,7 +3844,7 @@ N_0x32caedf24a583345 c VEHICLE 0x32CAEDF24A583345 vehicle:Vehicle DisableVehicl N_0x32dd916f3f7c9672 c NETWORK 0x32DD916F3F7C9672 any p0:any UgcGetContentLanguage N_0x32ebd154cb6b8b99 c NETWORK 0x32EBD154CB6B8B99 p0:any,p1:any,p2:any N_0x32f34ff7f617643b c GRAPHICS 0x32F34FF7F617643B scaleformMovieId:integer,useLargeRT:boolean SetScaleformMovieToUseLargeRt -N_0x3311e47b91edcbbc c PED 0x3311E47B91EDCBBC ped:Ped,p1:any,p2:number,p3:number,p4:any ApplyPedBloodByZone +N_0x3311e47b91edcbbc c PED 0x3311E47B91EDCBBC integer ped:Ped,p1:any,p2:number,p3:number,p4?:integer ApplyPedBloodByZone N_0x33506883545ac0df c VEHICLE 0x33506883545AC0DF vehicle:Vehicle,toggle:boolean ForceSubmarineSurfaceMode N_0x3353d13f09307691 c REPLAY 0x3353D13F09307691 ResetEditorValues N_0x336511a34f2e5185 c PATHFIND 0x336511A34F2E5185 number x:number,y:number GetHeightmapBottomZForPosition @@ -3805,7 +3862,7 @@ N_0x3430676b11cdf21d c OBJECT 0x3430676B11CDF21D x:number,y:number,z:number,col N_0x34318593248c8fb2 c MISC 0x34318593248C8FB2 boolean x:number,y:number,z:number,projHash:Hash,radius:number,ownedByPlayer:boolean IsProjectileTypeWithinDistance N_0x3441cad2f2231923 c VEHICLE 0x3441CAD2F2231923 vehicle:Vehicle,p1:boolean N_0x346ef3ecaaab149e c GRAPHICS 0x346EF3ECAAAB149E -N_0x34770b9ce0e03b91 c STATS 0x34770B9CE0E03B91 boolean p0:any,p1:any +N_0x34770b9ce0e03b91 c STATS 0x34770B9CE0E03B91 boolean,integer p0:any,p1?:integer N_0x34d66bc058019ce0 c AUDIO 0x34D66BC058019CE0 Hash radioStationName:string GetCurrentTrackSoundName N_0x350aa5ebc03d3bd2 c NETSHOPPING 0x350AA5EBC03D3BD2 integer NetGameserverTransferCashGetStatus_2 N_0x350c23949e43686c c NETWORK 0x350C23949E43686C number player:Player NetworkGetAveragePacketLossForPlayer @@ -3813,7 +3870,7 @@ N_0x352e2b5cf420bf3b c ENTITY 0x352E2B5CF420BF3B p0:any,p1:any N_0x3556041742a0dc74 c VEHICLE 0x3556041742A0DC74 vehicle:Vehicle CloseBombBayDoors N_0x357b152ef96c30b6 c NETSHOPPING 0x357B152EF96C30B6 any N_0x3599d741c9ac6310 c PATHFIND 0x3599D741C9AC6310 number x1:number,y1:number,x2:number,y2:number GetHeightmapBottomZForArea -N_0x359af31a4b52f5ed c HUD 0x359AF31A4B52F5ED integer PauseMenuGetIndexOfMouseHoveredSlot +N_0x359af31a4b52f5ed c HUD 0x359AF31A4B52F5ED integer PauseMenuGetMouseHoverIndex N_0x35a1b3e1d1315cfa c NETSHOPPING 0x35A1B3E1D1315CFA boolean inventory:boolean,playerbalance:boolean NetGameserverGetBalance N_0x35a3cd97b2c0a6d2 c HUD 0x35A3CD97B2C0A6D2 blip:Blip N_0x35bb21de06784373 c VEHICLE 0x35BB21DE06784373 p0:any,p1:any @@ -3824,7 +3881,7 @@ N_0x35f7dd45e8c0a16d c INTERIOR 0x35F7DD45E8C0A16D boolean interior:integer,enti N_0x35fb78dc42b7bd21 c GRAPHICS 0x35FB78DC42B7BD21 boolean GetRequestingnightvision N_0x36391f397731595d c NETWORK 0x36391F397731595D any p0:any N_0x36492c2f0d134c56 c VEHICLE 0x36492C2F0D134C56 number vehicle:Vehicle GetVehicleCurrentSlipstreamDraft -N_0x3658e8cd94fc121a c NETWORK 0x3658E8CD94FC121A integer p0:any,p1:any,p2:any NetworkGetNumScriptParticipants +N_0x3658e8cd94fc121a c NETWORK 0x3658E8CD94FC121A integer,integer p1:any,p2:any NetworkGetNumScriptParticipants N_0x365e877c61d6988b c MONEY 0x365E877C61D6988B p0:any,p1:any,p2:any,p3:any NetworkSpentUpgradeTruck N_0x3669f1b198dcaa4f c GRAPHICS 0x3669F1B198DCAA4F DisableOcclusionThisFrame N_0x367ef5e2f439b4c6 c NETWORK 0x367EF5E2F439B4C6 p0:integer @@ -3875,7 +3932,7 @@ N_0x3a17a27d75c74887 c NETWORK 0x3A17A27D75C74887 Hash UgcGetContentHash N_0x3a3d5568af297cd5 c NETWORK 0x3A3D5568AF297CD5 boolean handle:integer CloudDidRequestSucceed N_0x3a48ab4445d499be c AUDIO 0x3A48AB4445D499BE integer GetMusicVolSlider N_0x3a54e33660ded67f c MONEY 0x3A54E33660DED67F boolean amount:integer NetworkCanBet -N_0x3a8b55fda4c8ddef c NETWORK 0x3A8B55FDA4C8DDEF boolean,integer contextHash:Hash,nameHash:Hash NetworkRegisterTunableIntHash +N_0x3a8b55fda4c8ddef c NETWORK 0x3A8B55FDA4C8DDEF boolean,integer contextHash:Hash,nameHash:Hash,value?:integer NetworkRegisterTunableIntHash N_0x3a9128352eac9e85 c VEHICLE 0x3A9128352EAC9E85 boolean vehicle:Vehicle AreOutriggerLegsDeployed N_0x3b2fd68db5f8331c c OBJECT 0x3B2FD68DB5F8331C object:Object,toggle:boolean,R:integer,G:integer,B:integer N_0x3b39236746714134 c NETWORK 0x3B39236746714134 integer player:Player NetworkGetPlayerTutorialSessionInstance @@ -3888,7 +3945,7 @@ N_0x3c5c1e2c2ff814b1 c NETWORK 0x3C5C1E2C2FF814B1 toggle:boolean N_0x3c5fd37b5499582e c NETSHOPPING 0x3C5FD37B5499582E boolean,integer categoryHash:Hash,itemHash:Hash,actionTypeHash:Hash,value:integer,flags:integer NetGameserverBeginService N_0x3c67506996001f5e c PED 0x3C67506996001F5E boolean SpawnpointsIsSearchActive N_0x3c788e7f6438754d c GRAPHICS 0x3C788E7F6438754D checkpointHandle:integer,x:number,y:number,z:number -N_0x3c891a251567dfce c NETWORK 0x3C891A251567DFCE any p0:any NetworkQueryRespawnResults +N_0x3c891a251567dfce c NETWORK 0x3C891A251567DFCE any,integer p0?:integer NetworkQueryRespawnResults N_0x3ca6050692bc61b0 c HUD 0x3CA6050692BC61B0 state:boolean SetPauseMenuPedLighting N_0x3d120012440e6683 c AUDIO 0x845FFC3A4FEEFA3E boolean AudioIsScriptedMusicPlaying N_0x3d3d15af7bcaaf83 c HUD 0x3D3D15AF7BCAAF83 hudColor:integer,routeFromPlayer:boolean,displayOnFoot:boolean StartGpsMultiRoute @@ -3918,7 +3975,7 @@ N_0x3f4d00167e41e0ad c MONEY 0x3F4D00167E41E0AD p0:any,p1:any,p2:any,p3:any,p4: N_0x3f52e880aaf6c8ca c NETWORK 0x3F52E880AAF6C8CA p0:boolean NetworkSessionSetMatchmakingPropertyId N_0x3f5cc444dcaaa8f2 c HUD 0x3F5CC444DCAAA8F2 health:integer,capacity:integer,wasAdded:boolean SetHealthHudDisplayValues N_0x3f7325574e41b44d c PED 0x3F7325574E41B44D ped:Ped,p1:boolean,p2:integer,p3:integer SetPedHelmetUnk -N_0x3f9990bf5f22759c c NETWORK 0x3F9990BF5F22759C boolean,integer NetworkHasTransitionInviteBeenAcked +N_0x3f9990bf5f22759c c NETWORK 0x3F9990BF5F22759C boolean,integer networkHandle?:integer NetworkHasTransitionInviteBeenAcked N_0x3fa36981311fa4ff c NETWORK 0x3FA36981311FA4FF netId:integer,state:boolean N_0x3fc795691834481d c NETWORK 0x3FC795691834481D p0:any,p1:any N_0x4008edf7d6e48175 c CAM 0x4008EDF7D6E48175 p0:boolean @@ -3933,12 +3990,12 @@ N_0x40aefd1a244741f2 c STREAMING 0x40AEFD1A244741F2 toggle:boolean SetRenderHdO N_0x40afb081f8add4ee c GRAPHICS 0x40AFB081F8ADD4EE integer p0:integer ReturnTwo N_0x40cf0d12d142a9e8 c AUDIO 0x40CF0D12D142A9E8 ped:Ped SetPedVoiceFull N_0x40f7e66472df3e5c c NETWORK 0x40F7E66472DF3E5C string p0:any,p1:any UgcGetCachedDescription -N_0x40fce03e50e8dbe8 c NETWORK 0x40FCE03E50E8DBE8 boolean,integer tunableContext:Hash,tunableName:Hash NetworkAccessTunableIntHash +N_0x40fce03e50e8dbe8 c NETWORK 0x40FCE03E50E8DBE8 boolean,integer tunableContext:Hash,tunableName:Hash,value?:integer NetworkAccessTunableIntHash N_0x41062318f23ed854 c VEHICLE 0x41062318F23ED854 vehicle:Vehicle,toggle:boolean SetVehicleExclusiveDriver N_0x4128464231e3ca0b c MONEY 0x4128464231E3CA0B p0:any,p1:any,p2:any,p3:any N_0x41290b40fa63e6da c VEHICLE 0x41290B40FA63E6DA p0:any N_0x412f1364fa066cfb c PED 0x412F1364FA066CFB any p0:any -N_0x41350b4fc28e3941 c HUD 0x41350B4FC28E3941 p0:boolean +N_0x41350b4fc28e3941 c HUD 0x41350B4FC28E3941 isActive:boolean SetPmWarningscreenActive N_0x4167efe0527d706e c HUD 0x4167EFE0527D706E boolean IsHoveringOverMissionCreatorBlip N_0x418dc16fae452c1c c SOCIALCLUB 0x418DC16FAE452C1C boolean achievement:integer ScGetHasAchievementBeenPassed N_0x419594e137637120 c NETWORK 0x419594E137637120 toggle:boolean,playerPed:Ped,p2:boolean NetworkSetInSpectatorModeExtended @@ -3981,9 +4038,9 @@ N_0x444c4525ece0a4b9 c NETWORK 0x444C4525ECE0A4B9 N_0x44621483ff966526 c GRAPHICS 0x44621483FF966526 checkpoint:integer,scale:number SetCheckpointIconScale N_0x44919cc079bb60bf c STATS 0x44919CC079BB60BF p0:any N_0x44a0bdc559b35f6e c MISC 0x44A0BDC559B35F6E boolean QueueMissionRepeatSave -N_0x44aca259d67651db c SOCIALCLUB 0x44ACA259D67651DB p0:any,p1:any -N_0x44b37cdcae765aae c NETWORK 0x44B37CDCAE765AAE boolean,integer friendDataIndex:integer NetworkCheckDataManagerSucceededForHandle -N_0x44cd1f493db2a0a6 c VEHICLE 0x44CD1F493DB2A0A6 vehicle:Vehicle,weaponIndex:integer,capacity:integer SetVehicleWeaponCapacity +N_0x44aca259d67651db c SOCIALCLUB 0x44ACA259D67651DB integer p1:any +N_0x44b37cdcae765aae c NETWORK 0x44B37CDCAE765AAE boolean,integer friendDataIndex:integer,networkHandle?:integer NetworkCheckDataManagerSucceededForHandle +N_0x44cd1f493db2a0a6 c VEHICLE 0x44CD1F493DB2A0A6 vehicle:Vehicle,weaponIndex:integer,ammoCount:integer SetVehicleWeaponRestrictedAmmo N_0x44f1012b69313374 c WEAPON 0x44F1012B69313374 zoneId:integer,x:number,y:number,z:number FireAirDefenseWeapon N_0x450819d8cf90c416 c SOCIALCLUB 0x450819D8CF90C416 boolean N_0x451294e859ecc018 c PED 0x451294E859ECC018 integer ped:Ped GetPedHelmetStoredHatPropIndex @@ -3994,7 +4051,7 @@ N_0x45a561a9421ab6ad c VEHICLE 0x45A561A9421AB6AD vehicle:Vehicle,multiplier:nu N_0x45a83257ed02d9bc c NETWORK 0x45A83257ED02D9BC NetworkQuitMpToDesktop N_0x45e816772e93a9db c NETWORK 0x45E816772E93A9DB any N_0x45f35c0edc33b03b c NETWORK 0x45F35C0EDC33B03B netScene:integer,modelHash:Hash,x:number,y:number,z:number,animDict:string,animName:string,blendInSpeed:number,blendOutSpeed:number,flags:integer NetworkAddMapEntityToSynchronisedScene -N_0x46326e13da4e0546 c STATS 0x46326E13DA4E0546 p0:any PlaystatsDirectorMode +N_0x46326e13da4e0546 c STATS 0x46326E13DA4E0546 integer p0?:integer PlaystatsDirectorMode N_0x4645de9980999e93 c DATAFILE 0x4645DE9980999E93 boolean contentId:string,contentName:string,description:string,tagsCsv:string,contentTypeName:string UgcUpdateMission N_0x46494a2475701343 c OBJECT 0x46494A2475701343 boolean x:number,y:number,z:number,radius:number,modelHash:Hash,p5:boolean HasClosestObjectOfTypeBeenCompletelyDestroyed N_0x465bf26ab9684352 c VEHICLE 0x465BF26AB9684352 vehicle:Vehicle,toggle:boolean SetDisableVehiclePetrolTankFires @@ -4012,7 +4069,7 @@ N_0x46fb3ed415c7641c c NETWORK 0x46FB3ED415C7641C boolean player:Player,p1:integ N_0x472397322e92a856 c STREAMING 0x472397322E92A856 N_0x472841a026d26d8b c NETWORK 0x472841A026D26D8B boolean RemoteCheatDetected N_0x473151ebc762c6da c GRAPHICS 0x473151EBC762C6DA integer GetCurrentNumberOfCloudPhotos -N_0x4737980e8a283806 c SOCIALCLUB 0x4737980E8A283806 boolean p0:integer,p1:any +N_0x4737980e8a283806 c SOCIALCLUB 0x4737980E8A283806 boolean,integer p0:integer,p1?:integer N_0x4750fc27570311ec c MISC 0x4750FC27570311EC integer GetBenchmarkIterationsFromCommandLine N_0x4757f00bc6323cfe c WEAPON 0x4757F00BC6323CFE weaponHash:Hash,damageMultiplier:number SetWeaponDamageModifier N_0x4759cc730f947c81 c PED 0x4759CC730F947C81 InstantlyFillPedPopulation @@ -4023,7 +4080,7 @@ N_0x483aca1176ca93f1 c INTERIOR 0x483ACA1176CA93F1 N_0x4852fc386e2e1bb5 c PED 0x4852FC386E2E1BB5 integer,integer,integer hairColorIndex:integer GetPedHairRgbColor N_0x48608c3464f58ab4 c CAM 0x48608C3464F58AB4 roll:number,pitch:number,yaw:number SetGameplayCamRelativeRotation N_0x48621c9fca3ebd28 c RECORDING 0x48621C9FCA3EBD28 p0:integer -N_0x4862437a486f91b0 c GRAPHICS 0x4862437A486F91B0 boolean p0:string,p1:any,p2:any,p3:boolean LoadMissionCreatorPhoto +N_0x4862437a486f91b0 c GRAPHICS 0x4862437A486F91B0 boolean,integer,integer p0:string,p3:boolean LoadMissionCreatorPhoto N_0x487912fd248efddf c SOCIALCLUB 0x487912FD248EFDDF boolean p0:any,p1:number N_0x4879e4fe39074cdf c CAM 0x4879E4FE39074CDF boolean N_0x487a82c650eb7799 c CAM 0x487A82C650EB7799 p0:number CustomMenuCoordinates @@ -4031,7 +4088,7 @@ N_0x488043841bbe156f c HUD 0x488043841BBE156F HudDisplayLoadingScreenTips N_0x4895bdea16e7c080 c HUD 0x4895BDEA16E7C080 p0:integer PauseMenuRedrawInstructionalButtons N_0x48adc8a773564670 c VEHICLE 0x48ADC8A773564670 InstantlyFillVehiclePopulation N_0x48c633e94a8142a7 c VEHICLE 0x48C633E94A8142A7 boolean vehicle:Vehicle IsVehicleSlipstreamLeader -N_0x48f069265a0e4bec c MISC 0x48F069265A0E4BEC p0:any,name:string +N_0x48f069265a0e4bec c MISC 0x48F069265A0E4BEC integer name:string N_0x490861b88f4fd846 c ENTITY 0x490861B88F4FD846 p0:any N_0x49482f9fcd825aaa c CAM 0x49482F9FCD825AAA entity:Entity DisableCamCollisionForObject N_0x4962cc4aa2f345b7 c NETWORK 0x4962CC4AA2F345B7 string inviteIndex:integer NetworkGetPresenceInviteInviter @@ -4047,7 +4104,7 @@ N_0x49ec8030f5015f8b c NETWORK 0x49EC8030F5015F8B matchmakingGroup:integer Netw N_0x4a0c7c9bb10abb36 c HUD 0x4A0C7C9BB10ABB36 toggle:boolean ThefeedSetAnimpostfxSound N_0x4a2d4e8bf4265b0f c NETWORK 0x4A2D4E8BF4265B0F boolean areaHandle:integer NetworkEntityAreaIsOccupied N_0x4a39db43e47cf3aa c OBJECT 0x4A39DB43E47CF3AA object:Object RemoveObjectHighDetailModel -N_0x4a7d6e727f941747 c SOCIALCLUB 0x4A7D6E727F941747 any p0:any +N_0x4a7d6e727f941747 c SOCIALCLUB 0x4A7D6E727F941747 any,integer p0?:integer N_0x4a9923385bdb9dad c HUD 0x4A9923385BDB9DAD integer GetStandardBlipEnumId N_0x4a9fde3a5a6d0437 c NETWORK 0x4A9FDE3A5A6D0437 toggle:boolean N_0x4ad280eb48b2d8e6 c VEHICLE 0x4AD280EB48B2D8E6 vehicle:Vehicle,togle:boolean @@ -4071,7 +4128,7 @@ N_0x4c815eb175086f84 c VEHICLE 0x4C815EB175086F84 plane:Vehicle,health:number S N_0x4c89fe2bdeb3f169 c STATS 0x4C89FE2BDEB3F169 any N_0x4c9034162368e206 c NETWORK 0x4C9034162368E206 any N_0x4c9296cbcd1b971e c MISC 0x4C9296CBCD1B971E integer GetFakeWantedLevel -N_0x4caca84440fa26f6 c NETWORK 0x4CACA84440FA26F6 boolean,Hash p0:any,p1:any NetworkGetDestroyerOfEntity +N_0x4caca84440fa26f6 c NETWORK 0x4CACA84440FA26F6 boolean,Hash p0:any,p1:any,weaponHash?:Hash NetworkGetDestroyerOfEntity N_0x4cebc1ed31e8925e c CUTSCENE 0x4CEBC1ED31E8925E boolean cutsceneName:string N_0x4d02279c83be69fe c NETWORK 0x4D02279C83BE69FE any N_0x4d1cb8dc40208a17 c WEAPON 0x4D1CB8DC40208A17 Hash componentHash:Hash,extraComponentIndex:integer GetWeaponComponentVariantExtraComponentModel @@ -4081,7 +4138,7 @@ N_0x4d9d109f63fee1d4 c VEHICLE 0x4D9D109F63FEE1D4 p0:any,p1:boolean N_0x4dc416f246a41fc8 c STATS 0x4DC416F246A41FC8 p0:any,p1:any,p2:any,p3:any,p4:any N_0x4dcdf92bf64236cd c MISC 0x4DCDF92BF64236CD captionString:string,condensedCaptionString:string ActivityFeedCreate N_0x4df7cfff471a7fb1 c NETWORK 0x4DF7CFFF471A7FB1 boolean p0:any -N_0x4dfdd9eb705f8140 c DATAFILE 0x4DFDD9EB705F8140 boolean,boolean DatafileUpdateSaveToCloud +N_0x4dfdd9eb705f8140 c DATAFILE 0x4DFDD9EB705F8140 boolean,boolean p0?:boolean DatafileUpdateSaveToCloud N_0x4e096588b13ffeca c HUD 0x4E096588B13FFECA justifyType:integer SetTextJustification N_0x4e0af9114608257c c AUDIO 0x4E0AF9114608257C radioStation:string,trackListName:string,timeOffsetMilliseconds:integer ForceMusicTrackList N_0x4e20d2a627011e8e c VEHICLE 0x4E20D2A627011E8E any vehicle:Vehicle,p1:number SetVehicleDamageModifier @@ -4107,7 +4164,7 @@ N_0x5006d96c995a5827 c PLAYER 0x5006D96C995A5827 x:number,y:number,z:number Ext N_0x500873a45724c863 c VEHICLE 0x500873A45724C863 vehicle:Vehicle,propeller:integer DisableIndividualPlanePropeller N_0x5009dfd741329729 c STATS 0x5009DFD741329729 action:string,value:integer PlaystatsBackgroundScriptAction N_0x501478855a6074ce c STATS 0x501478855A6074CE p0:any,p1:any,p2:any,p3:any,p4:any,p5:any PlaystatsEarnedMcPoints -N_0x50276ef8172f5f12 c WEAPON 0x50276EF8172F5F12 ped:Ped +N_0x50276ef8172f5f12 c WEAPON 0x50276EF8172F5F12 ped:Ped SetPedCycleVehicleWeaponsOnly N_0x503f5920162365b2 c CAM 0x503F5920162365B2 cam:Cam,p1:number,p2:number,p3:number SetFlyCamHorizontalResponse N_0x504dfe62a1692296 c HUD 0x504DFE62A1692296 toggle:boolean SetInteriorZoomLevelIncreased N_0x50634e348c8d44ef c VEHICLE 0x50634E348C8D44EF boolean vehicle:Vehicle GetVehicleHasKers @@ -4131,7 +4188,7 @@ N_0x524ff0aeff9c3973 c NETWORK 0x524FF0AEFF9C3973 toggle:boolean NetworkSetLoca N_0x52818819057f2b40 c DATAFILE 0x52818819057F2B40 boolean p0:integer DatafileSelectUgcPlayerData N_0x52af537a0c5b8aad c OBJECT 0x52AF537A0C5B8AAD boolean object:Object DoesRayfireMapObjectExist N_0x52d59ab61ddc05dd c PED 0x52D59AB61DDC05DD ped:Ped,toggle:boolean SetPedHighlyPerceptive -N_0x5324a0e3e4ce3570 c NETWORK 0x5324A0E3E4CE3570 boolean p0:any,p1:any,p2:any,p3:any +N_0x5324a0e3e4ce3570 c NETWORK 0x5324A0E3E4CE3570 boolean,integer,integer p0:any,p1:any N_0x533073e8a596008c c MONEY 0x533073E8A596008C p0:any,p1:any NetworkEarnFromVehicleAutoshop N_0x5335be58c083e74e c VEHICLE 0x5335BE58C083E74E vehicle:Vehicle LowerRetractableWheels N_0x53409b5163d5b846 c VEHICLE 0x53409B5163D5B846 number modelHash:Hash GetVehicleModelEstimatedAgility @@ -4160,7 +4217,7 @@ N_0x5539c3ebf104a53a c NETWORK 0x5539C3EBF104A53A p0:boolean N_0x55598d21339cb998 c HUD 0x55598D21339CB998 pos:number ThefeedSetScriptedMenuHeight N_0x5574637681911fda c MONEY 0x5574637681911FDA p0:any,p1:any,p2:any,p3:any N_0x557e43c447e700a8 c MISC 0x557E43C447E700A8 boolean hash:Hash HasCheatStringJustBeenEntered -N_0x559ebf901a8c68e0 c NETWORK 0x559EBF901A8C68E0 boolean gamerHandle:any +N_0x559ebf901a8c68e0 c NETWORK 0x559EBF901A8C68E0 boolean,integer gamerHandle?:integer N_0x55a1e095db052fa5 c MONEY 0x55A1E095DB052FA5 p0:any,p1:any N_0x55a8becaf28a4eb7 c STATS 0x55A8BECAF28A4EB7 any N_0x55aa95f481d694d2 c NETWORK 0x55AA95F481D694D2 string p0:integer UgcGetContentId @@ -4181,7 +4238,7 @@ N_0x567384dfa67029e6 c STATS 0x567384DFA67029E6 integer StatGetCancelSaveMigrat N_0x5687c7f05b39e401 c PED 0x5687C7F05B39E401 ped:Ped,animDict:string SetFacialClipsetOverride N_0x5688585e6d563cd8 c STATS 0x5688585E6D563CD8 p0:integer N_0x56b94c6d7127dfba c VEHICLE 0x56B94C6D7127DFBA vehicle:Vehicle,position:number,p2:boolean SetVehicleTankTurretPosition -N_0x56c8b608cfd49854 c HUD 0x56C8B608CFD49854 ThefeedCommentTeleportPoolOn +N_0x56c8b608cfd49854 c HUD 0x56C8B608CFD49854 ThefeedAutoPostGametipsOn N_0x56ce820830ef040b c NETWORK 0x56CE820830EF040B integer p0:integer NetworkSessionGetMatchmakingGroupFree N_0x56e3b78c5408d9f4 c PED 0x56E3B78C5408D9F4 ped:Ped,p1:integer ClearPedBloodDamageByZone N_0x56eb5e94318d3fb6 c VEHICLE 0x56EB5E94318D3FB6 vehicle:Vehicle,p1:boolean @@ -4194,14 +4251,14 @@ N_0x5776ed562c134687 c NETWORK 0x5776ED562C134687 boolean p0:integer TextureDown N_0x57b192b4d4ad23d5 c NETWORK 0x57B192B4D4AD23D5 toggle:boolean NetworkOverrideSendRestrictionsAll N_0x57d760d55f54e071 c HUD 0x57D760D55F54E071 p0:integer N_0x583049884a2eee3c c HUD 0x583049884A2EEE3C ThefeedForceRenderOff -N_0x5835d9cd92e83184 c NETWORK 0x5835D9CD92E83184 boolean netHandle:any,txdName:string NetworkClanGetEmblemTxdName +N_0x5835d9cd92e83184 c NETWORK 0x5835D9CD92E83184 boolean,integer txdName:string NetworkClanGetEmblemTxdName N_0x583df8e3d4afbd98 c CUTSCENE 0x583DF8E3D4AFBD98 integer N_0x5845066d8a1ea7f7 c VEHICLE 0x5845066D8A1EA7F7 vehicle:Vehicle,x:number,y:number,z:number,p4:any -N_0x584770794d758c18 c NETWORK 0x584770794D758C18 boolean p0:any,p1:any -N_0x58575ac3cf2ca8ec c NETWORK 0x58575AC3CF2CA8EC Hash,integer NetworkHashFromGamerHandle -N_0x585847c5e4e11709 c WEAPON 0x585847C5E4E11709 boolean,integer ped:Ped,ammoType:Hash GetMaxAmmoByType +N_0x584770794d758c18 c NETWORK 0x584770794D758C18 boolean,integer p0:any,p1?:integer +N_0x58575ac3cf2ca8ec c NETWORK 0x58575AC3CF2CA8EC Hash,integer networkHandle?:integer NetworkHashFromGamerHandle +N_0x585847c5e4e11709 c WEAPON 0x585847C5E4E11709 boolean,integer ped:Ped,ammoType:Hash,ammo?:integer GetMaxAmmoByType N_0x5873c14a52d74236 c VEHICLE 0x5873C14A52D74236 integer vehicleModel:Hash GetVehicleModelValue -N_0x589f80b325cc82c5 c OBJECT 0x589F80B325CC82C5 boolean,Hash x:number,y:number,z:number,modelHash:Hash DoorSystemFindExistingDoor +N_0x589f80b325cc82c5 c OBJECT 0x589F80B325CC82C5 boolean,Hash x:number,y:number,z:number,modelHash:Hash,doorOutPointer?:Hash DoorSystemFindExistingDoor N_0x58a39be597ce99cd c MISC 0x58A39BE597CE99CD CancelOnscreenKeyboard N_0x58a651cd201d89ad c STATS 0x58A651CD201D89AD integer p0:any LeaderboardsGetCacheNumberOfRows N_0x58bb377bec7cd5f4 c AUDIO 0x58BB377BEC7CD5F4 p0:boolean,p1:boolean @@ -4215,7 +4272,7 @@ N_0x595f028698072dd9 c NETWORK 0x595F028698072DD9 boolean p0:integer,p1:integer, N_0x597f8dba9b206fc7 c NETWORK 0x597F8DBA9B206FC7 any UgcGetCreatorNum N_0x5991a01434ce9677 c VEHICLE 0x5991A01434CE9677 boolean plane:Vehicle ArePlaneWingsIntact N_0x599e4fa1f87eb5ff c NETWORK 0x599E4FA1F87EB5FF integer NetworkGetRandomInt -N_0x59b9a7af4c95133c c PAD 0x59B9A7AF4C95133C integer GetLocalPlayerAimState_2 +N_0x59b9a7af4c95133c c PAD 0x59B9A7AF4C95133C integer GetLocalPlayerGamepadAimState N_0x59c3757b3b7408e8 c VEHICLE 0x59C3757B3B7408E8 vehicle:Vehicle,toggle:boolean,p2:number N_0x59d421683d31835a c NETWORK 0x59D421683D31835A p0:any N_0x59df79317f85a7e0 c NETWORK 0x59DF79317F85A7E0 boolean NetworkJoinPreviouslyFailedSession @@ -4248,7 +4305,7 @@ N_0x5bbcf35bf6e456f7 c VEHICLE 0x5BBCF35BF6E456F7 toggle:boolean N_0x5bcde0f640c773d2 c MONEY 0x5BCDE0F640C773D2 p0:any,p1:any,p2:any,p3:any NetworkSpentJukebox N_0x5bd5f255321c4aaf c STATS 0x5BD5F255321C4AAF any p0:any N_0x5bf29846c6527c54 c STATS 0x5BF29846C6527C54 p0:any,p1:any,p2:any,p3:any,p4:any -N_0x5bff36d6ed83e0ae c HUD 0x5BFF36D6ED83E0AE vector3 GetPauseMenuCursorPosition +N_0x5bff36d6ed83e0ae c HUD 0x5BFF36D6ED83E0AE vector3 GetPauseMenuPosition N_0x5c29f698d404c5e1 c OBJECT 0x5C29F698D404C5E1 object:Object,state:integer SetStateOfRayfireMapObject N_0x5c3b791d580e0bc2 c ENTITY 0x5C3B791D580E0BC2 entity:Entity,p1:number N_0x5c41e6babc9e2112 c CAM 0x5C41E6BABC9E2112 p0:any @@ -4266,7 +4323,7 @@ N_0x5ce62918f8d703c7 c GRAPHICS 0x5CE62918F8D703C7 lowR:integer,lowG:integer,lo N_0x5d10b3795f3fc886 c NETWORK 0x5D10B3795F3FC886 boolean NetworkHasReceivedHostBroadcastData N_0x5d2bfaab8d956e0e c AUDIO 0x5D2BFAAB8D956E0E RefreshClosestOceanShoreline N_0x5d517b27cf6ecd04 c PED 0x5D517B27CF6ECD04 id:integer ReleasePedheadshotImgUpload -N_0x5d5caff661ddf6fc c FILES 0x5D5CAFF661DDF6FC componentHash:Hash,outProp:any GetShopPedProp +N_0x5d5caff661ddf6fc c FILES 0x5D5CAFF661DDF6FC integer componentHash:Hash,outProp?:integer GetShopPedProp N_0x5d7b620dae436138 c CAM 0x5D7B620DAE436138 xOffset:number SetGameplayHintAnimOffsetx N_0x5d96cfb59da076a0 c CAM 0x5D96CFB59DA076A0 vehicle:Vehicle,p1:integer,p2:number N_0x5d97630a8a0ef123 c MONEY 0x5D97630A8A0EF123 amount:integer,p1:boolean,p2:boolean NetworkSpentBallisticEquipment @@ -4300,7 +4357,7 @@ N_0x5f43d83fd6738741 c AUDIO 0x5F43D83FD6738741 boolean IsPlayerVehRadioEnable N_0x5f456788b05faeac c MONEY 0x5F456788B05FAEAC p0:any,p1:any,p2:any N_0x5f6df3d92271e8a1 c GRAPHICS 0x5F6DF3D92271E8A1 toggle:boolean N_0x5fbca48327b914df c HUD 0x5FBCA48327B914DF blip:Blip,toggle:boolean ShowHeadingIndicatorOnBlip -N_0x5fbd7095fe7ae57f c HUD 0x5FBD7095FE7AE57F boolean,number p0:any GetMenuPedFloatStat +N_0x5fbd7095fe7ae57f c HUD 0x5FBD7095FE7AE57F boolean,number p0:any,p1?:number GetMenuPedFloatStat N_0x5fc472c501ccadb3 c PLAYER 0x5FC472C501CCADB3 boolean playerId:Player GetIsPlayerDrivingOnHighway N_0x5fd5ed82cbbe9989 c MONEY 0x5FD5ED82CBBE9989 p0:any,p1:boolean,p2:boolean NetworkPayEmployeeWage N_0x5ff2c33b13a02a11 c STATS 0x5FF2C33B13A02A11 p0:any @@ -4342,11 +4399,11 @@ N_0x62e849b7eb28e770 c HUD 0x62E849B7EB28E770 p0:boolean N_0x62ec273d00187dca c PED 0x62EC273D00187DCA integer x:number,y:number,z:number,radius:number,object:Hash CreateSynchronizedScene_2 N_0x62ecfcfdee7885d6 c CAM 0x62ECFCFDEE7885D6 N_0x631dc5dff4b110e3 c NETWORK 0x631DC5DFF4B110E3 boolean player:Player NetworkIsPlayerFading -N_0x632b2940c67f4ea9 c HUD 0x632B2940C67F4EA9 boolean,boolean,integer,integer,integer scaleformHandle:integer GetScaleformMovieCursorSelection +N_0x632b2940c67f4ea9 c HUD 0x632B2940C67F4EA9 boolean,boolean,integer,integer,integer scaleformHandle:integer GetMouseEvent N_0x634148744f385576 c VEHICLE 0x634148744F385576 boolean vehicle:Vehicle IsHeliLandingAreaBlocked N_0x637822dc2afeebf8 c PED 0x637822DC2AFEEBF8 ped:Ped ClearFacialClipsetOverride N_0x638a3a81733086db c NETWORK 0x638A3A81733086DB integer NetworkGetInstanceIdOfThisScript -N_0x639431e895b9aa57 c VEHICLE 0x639431E895B9AA57 boolean ped:Ped,vehicle:Vehicle,seatIndex:integer,side:boolean,onEnter:boolean IsVehicleSeatAccessible +N_0x639431e895b9aa57 c VEHICLE 0x639431E895B9AA57 boolean ped:Ped,vehicle:Vehicle,seatIndex:integer,checkSide:boolean,leftSide:boolean IsEntryPointForSeatClear N_0x63b406d7884bfa95 c NETWORK 0x63B406D7884BFA95 any N_0x63bb75abedc1f6a0 c HUD 0x63BB75ABEDC1F6A0 gamerTagId:integer,component:integer,toggle:boolean SetMpGamerTagVisibility N_0x63eb2b972a218cac c STREAMING 0x63EB2B972A218CAC @@ -4354,8 +4411,8 @@ N_0x63ecf581bc70e363 c OBJECT 0x63ECF581BC70E363 p0:any,p1:any N_0x641f272b52e2f0f8 c OBJECT 0x641F272B52E2F0F8 p0:any,p1:any N_0x643ed62d5ea3bebd c PAD 0x643ED62D5EA3BEBD ResetInputMappingScheme N_0x644546ec5287471b c RECORDING 0x644546EC5287471B boolean SaveRecordingClip -N_0x6483c25849031c4f c STATS 0x6483C25849031C4F p0:any,p1:any,p2:any,p3:any -N_0x648e7a5434af7969 c DATAFILE 0x648E7A5434AF7969 boolean contentId:string,data:any,dataCount:integer,contentName:string,description:string,tagsCsv:string,contentTypeName:string UgcUpdateContent +N_0x6483c25849031c4f c STATS 0x6483C25849031C4F integer p0:any,p1:any,p2:any,p3?:integer +N_0x648e7a5434af7969 c DATAFILE 0x648E7A5434AF7969 boolean,integer contentId:string,dataCount:integer,contentName:string,description:string,tagsCsv:string,contentTypeName:string UgcUpdateContent N_0x6493cf69859b116a c CAM 0x6493CF69859B116A UseVehicleCamStuntSettingsThisUpdate N_0x649c97d52332341a c GRAPHICS 0x649C97D52332341A p0:any N_0x64d779659bc37b19 c NETWORK 0x64D779659BC37B19 vector3 entity:Entity @@ -4390,11 +4447,11 @@ N_0x66b59cffd78467af c NETWORK 0x66B59CFFD78467AF boolean NetworkGetRosPrivileg N_0x66c3fb05206041ba c AUDIO 0x66C3FB05206041BA vehicle:Vehicle TriggerSiren N_0x66e3aaface2d1eb8 c VEHICLE 0x66E3AAFACE2D1EB8 p0:any,p1:any,p2:any N_0x66e7cb63c97b7d20 c HUD 0x66E7CB63C97B7D20 any -N_0x66f010a4b031a331 c NETWORK 0x66F010A4B031A331 integer NetworkSetInviteOnCallForInviteMenu +N_0x66f010a4b031a331 c NETWORK 0x66F010A4B031A331 integer networkHandle?:integer NetworkSetInviteOnCallForInviteMenu N_0x673ed815d6e323b7 c OBJECT 0x673ED815D6E323B7 boolean garageHash:Hash,p1:boolean,p2:boolean,p3:boolean,p4:any IsAnyEntityEntirelyInsideGarage N_0x675721c9f644d161 c SOCIALCLUB 0x675721C9F644D161 N_0x675d19c6067cae08 c MONEY 0x675D19C6067CAE08 p0:any,p1:any,p2:any,p3:any -N_0x678bb03c1a3bd51e c NETWORK 0x678BB03C1A3BD51E boolean p0:any,p1:any,p2:any,p3:any,p4:any UgcGetGetByCategory +N_0x678bb03c1a3bd51e c NETWORK 0x678BB03C1A3BD51E boolean,integer,integer p0:any,p1:any,p2:any UgcGetGetByCategory N_0x678f86d8fc040bdb c STATS 0x678F86D8FC040BDB p0:any N_0x67a5589628e0cff6 c NETWORK 0x67A5589628E0CFF6 boolean NetworkHasSocialClubAccount N_0x67eedea1b9bafd94 c HUD 0x67EEDEA1B9BAFD94 ClearGpsMultiRoute @@ -4402,7 +4459,7 @@ N_0x67f6413d3220e18d c MISC 0x67F6413D3220E18D integer x1:number,y1:number,z1:nu N_0x67fc09bc554a75e5 c NETWORK 0x67FC09BC554A75E5 any N_0x6805d58caa427b72 c GRAPHICS 0x6805D58CAA427B72 binkMovie:integer,shouldSkip:boolean SetBinkShouldSkip N_0x68103e2247887242 c NETWORK 0x68103E2247887242 -N_0x6816fb4416760775 c MONEY 0x6816FB4416760775 p0:any,p1:any,p2:any NetworkEarnFromJobBonus +N_0x6816fb4416760775 c MONEY 0x6816FB4416760775 integer,integer p0:any NetworkEarnFromJobBonus N_0x684a41975f077262 c MISC 0x684A41975F077262 boolean IsInPowerSavingMode N_0x6856ec3d35c81ea4 c MISC 0x6856EC3D35C81EA4 integer GetTotalSuccessfulStuntJumps N_0x685d5561680d088b c VEHICLE 0x685D5561680D088B vehicle:Vehicle,p1:number SetCargobobPickupMagnetFalloff @@ -4413,12 +4470,12 @@ N_0x68f01422be1d838f c STATS 0x68F01422BE1D838F profileSetting:integer,value:in N_0x68f8be6af5cdf8a6 c WEAPON 0x68F8BE6AF5CDF8A6 ped:Ped,loadoutHash:Hash GiveLoadoutToPed N_0x690a61a6d13583f6 c PLAYER 0x690A61A6D13583F6 boolean player:Player N_0x690b76bd2763e068 c SAVEMIGRATION 0x690B76BD2763E068 any -N_0x692d58df40657e8c c NETWORK 0x692D58DF40657E8C boolean p0:any,p1:any,p2:any,p3:any,p4:any,p5:boolean +N_0x692d58df40657e8c c NETWORK 0x692D58DF40657E8C boolean,integer p0:any,p1:any,p2:any,p4:any,p5:boolean N_0x692d808c34a82143 c DATAFILE 0x692D808C34A82143 boolean contentId:string,rating:number,contentTypeName:string UgcSetPlayerData N_0x693478acbd7f18e7 c MISC 0x693478ACBD7F18E7 N_0x694e00132f2823ed c ENTITY 0x694E00132F2823ED entity:Entity,toggle:boolean SetEntityRequiresMoreExpensiveRiverCheck -N_0x697f508861875b42 c NETWORK 0x697F508861875B42 boolean,boolean contextHash:Hash,nameHash:Hash NetworkRegisterTunableBoolHash -N_0x699e4a5c8c893a18 c SOCIALCLUB 0x699E4A5C8C893A18 boolean p0:integer,p1:string,p2:any +N_0x697f508861875b42 c NETWORK 0x697F508861875B42 boolean,boolean contextHash:Hash,nameHash:Hash,value?:boolean NetworkRegisterTunableBoolHash +N_0x699e4a5c8c893a18 c SOCIALCLUB 0x699E4A5C8C893A18 boolean,integer p0:integer,p1:string,p2?:integer N_0x69c922b677621428 c STATS 0x69C922B677621428 p0:any,p1:any PlaystatsCarclubPrize N_0x69ef772b192614c1 c MONEY 0x69EF772B192614C1 p0:any,p1:any,p2:any,p3:any N_0x69fe6dc87bd2a5e9 c MISC 0x69FE6DC87BD2A5E9 value:any AddReplayStatValue @@ -4482,7 +4539,7 @@ N_0x6f44cbf56d79fac0 c NETWORK 0x6F44CBF56D79FAC0 string index:integer,index2:in N_0x6f60e89a7b64ee1d c GRAPHICS 0x6F60E89A7B64EE1D integer effectName:string,entity:Entity,xOffset:number,yOffset:number,zOffset:number,xRot:number,yRot:number,zRot:number,scale:number,xAxis:boolean,yAxis:boolean,zAxis:boolean StartNetworkedParticleFxLoopedOnEntity N_0x6f697a66ce78674e c NETWORK 0x6F697A66CE78674E team:integer,toggle:boolean NetworkOverrideTeamRestrictions N_0x6f72cd94f7b5b68c c HUD 0x6F72CD94F7B5B68C boolean IsOnlinePoliciesMenuActive -N_0x6f7794f28c6b2535 c MISC 0x6F7794F28C6B2535 p0:any,name:string RegisterTextLabelToSave_2 +N_0x6f7794f28c6b2535 c MISC 0x6F7794F28C6B2535 integer name:string RegisterTextLabelToSave_2 N_0x6fb7bb3607d27fa2 c NETWORK 0x6FB7BB3607D27FA2 any N_0x6fcf8ddea146c45b c MONEY 0x6FCF8DDEA146C45B boolean p0:any N_0x6fd97159fe3c971a c MONEY 0x6FD97159FE3C971A p0:any,p1:any,p2:any,p3:any @@ -4512,7 +4569,7 @@ N_0x71862b1d855f32e1 c STATS 0x71862B1D855F32E1 name:string,p1:any,p2:any,p3:an N_0x71b008056e5692d6 c STATS 0x71B008056E5692D6 N_0x71b74d2ae19338d0 c CUTSCENE 0x71B74D2AE19338D0 boolean flag:integer IsCutscenePlaybackFlagSet N_0x71bdb63dbaf8da59 c HUD 0x71BDB63DBAF8DA59 hole:integer SetMinimapGolfCourse -N_0x71dc455f5cd1c2b1 c NETWORK 0x71DC455F5CD1C2B1 boolean,integer NetworkHasInviteBeenAcked +N_0x71dc455f5cd1c2b1 c NETWORK 0x71DC455F5CD1C2B1 boolean,integer networkHandle?:integer NetworkHasInviteBeenAcked N_0x71e7b2e657449aad c STREAMING 0x71E7B2E657449AAD any N_0x71eab450d86954a1 c PED 0x71EAB450D86954A1 integer ped:Ped GetPedDecorationsState N_0x71fb0ebcd4915d56 c NETWORK 0x71FB0EBCD4915D56 boolean p0:any,p1:any,p2:any,p3:any NetworkDoTransitionQuickmatch @@ -4520,7 +4577,7 @@ N_0x722f5d28b61c5ea8 c NETWORK 0x722F5D28B61C5EA8 string index:integer GetCommer N_0x723c1ce13fbfdb67 c STATS 0x723C1CE13FBFDB67 p0:any,p1:any N_0x7241ccb7d020db69 c INTERIOR 0x7241CCB7D020DB69 entity:Entity,toggle:boolean N_0x7242f8b741ce1086 c NETWORK 0x7242F8B741CE1086 boolean netId:integer NetworkIsNetworkIdAClone -N_0x725012a415dba050 c VEHICLE 0x725012A415DBA050 any p0:any,p1:any,p2:any +N_0x725012a415dba050 c VEHICLE 0x725012A415DBA050 any,integer p0:any,p2:any N_0x726e0375c7a26368 c NETWORK 0x726E0375C7A26368 NetworkRemoveAllTransitionInvite N_0x728c4cc7920cd102 c NETWORK 0x728C4CC7920CD102 any p0:any NetworkGetPresenceInvitePlaylistCurrent N_0x7295c203dd659dfe c CAM 0x7295C203DD659DFE @@ -4533,7 +4590,7 @@ N_0x72dd432f3cdfc0ee c HUD 0x72DD432F3CDFC0EE posX:number,posY:number,posZ:numb N_0x72de52178c291cb5 c MISC 0x72DE52178C291CB5 boolean QueueMissionRepeatLoad N_0x72eb7ba9b69bf6ab c NETSHOPPING 0x72EB7BA9B69BF6AB boolean N_0x73001e34f85137f8 c STATS 0x73001E34F85137F8 p0:any -N_0x7303e27cc6532080 c MONEY 0x7303E27CC6532080 boolean p0:any,p1:boolean,p2:boolean,p3:boolean,p4:any,p5:any NetworkCanSpendMoney_2 +N_0x7303e27cc6532080 c MONEY 0x7303E27CC6532080 boolean,integer p0:any,p1:boolean,p2:boolean,p3:boolean,p5:any NetworkCanSpendMoney_2 N_0x733adf241531e5c2 c AUDIO 0x733ADF241531E5C2 variableName:string,value:number SetVariableOnUnderWaterStream N_0x733c87d4ce22bea2 c PED 0x733C87D4CE22BEA2 ped:Ped N_0x734e1714d077da9a c OBJECT 0x734E1714D077DA9A p0:any,p1:any @@ -4557,7 +4614,7 @@ N_0x7543bb439f63792b c NETWORK 0x7543BB439F63792B boolean,integer bufferSize:int N_0x754615490a029508 c NETWORK 0x754615490A029508 integer N_0x755d6d5267cbbd7e c VEHICLE 0x755D6D5267CBBD7E boolean plane:Vehicle ArePlanePropellersIntact N_0x75627043c6aa90ad c VEHICLE 0x75627043C6AA90AD vehicle:Vehicle DisableVehicleWorldCollision -N_0x75632c5ecd7ed843 c SOCIALCLUB 0x75632C5ECD7ED843 boolean,integer string:string ScProfanityCheckString +N_0x75632c5ecd7ed843 c SOCIALCLUB 0x75632C5ECD7ED843 boolean,integer string:string,token?:integer ScProfanityCheckString N_0x756ae6e962168a04 c VEHICLE 0x756AE6E962168A04 vehicle:Vehicle,toggle:boolean SetVehicleRampUpwardsLaunchMotion N_0x75773e11ba459e90 c AUDIO 0x75773E11BA459E90 hash:Hash,toggle:boolean OverrideMicrophoneSettings N_0x7583b4be4c5a41b5 c STATS 0x7583B4BE4C5A41B5 integer statName:Hash StatGetNumberOfMinutes @@ -4603,7 +4660,7 @@ N_0x78e8e3a640178255 c ENTITY 0x78E8E3A640178255 entity:Entity N_0x792271ab35c356a4 c STATS 0x792271AB35C356A4 p0:any,p1:any HiredLimo N_0x793ff272d5b365f4 c NETWORK 0x793FF272D5B365F4 any N_0x796a877e459b99ea c VEHICLE 0x796A877E459B99EA p0:any,p1:number,p2:number,p3:number -N_0x796a87b3b68d1f3d c NETWORK 0x796A87B3B68D1F3D boolean p0:any NetworkSetCurrentDataManagerHandle +N_0x796a87b3b68d1f3d c NETWORK 0x796A87B3B68D1F3D boolean,integer p0?:integer NetworkSetCurrentDataManagerHandle N_0x797f9c5e661d920e c NETWORK 0x797F9C5E661D920E amount:integer ReserveNetworkLocalObjects N_0x799017f9e3b10112 c GRAPHICS 0x799017F9E3B10112 x:number,y:number,z:number,radius:number,r:integer,g:integer,b:integer,opacity:number DrawSphere N_0x79ab33f0fbfac40c c STATS 0x79AB33F0FBFAC40C p0:any PlaystatsAcquiredHiddenPackage @@ -4621,7 +4678,7 @@ N_0x7b21e0bb01e8224a c HUD 0x7B21E0BB01E8224A color:integer SetMainPlayerBlipCo N_0x7b226c785a52a0a9 c GRAPHICS 0x7B226C785A52A0A9 boolean IsScreenblurFadeRunning N_0x7b5280eba9840c72 c HUD 0x7B5280EBA9840C72 string labelName:string GetFilenameForAudioConversation N_0x7b7723747ccb55b6 c HUD 0x7B7723747CCB55B6 gamerTagId:integer,string:string SetMpGamerTagBigText -N_0x7b8a361c1813fbef c CAM 0x7B8A361C1813FBEF +N_0x7b8a361c1813fbef c CAM 0x7B8A361C1813FBEF IgnoreMenuPreferenceForBonnetCameraThisUpdate N_0x7bae68775557ae0b c PLAYER 0x7BAE68775557AE0B p0:any,p1:any,p2:any,p3:any,p4:any,p5:any N_0x7bbe7ff626a591fe c VEHICLE 0x7BBE7FF626A591FE p0:any N_0x7bf1a54ae67ac070 c CAM 0x7BF1A54AE67AC070 cam:Cam,p1:integer,flags:integer SetCamSplineNodeExtraFlags @@ -4629,7 +4686,7 @@ N_0x7c0043fdff6436bc c VEHICLE 0x7C0043FDFF6436BC vehicle:Vehicle DetachContain N_0x7c06330bfdda182e c VEHICLE 0x7C06330BFDDA182E vehicle:Vehicle StopBringVehicleToHalt N_0x7c226d5346d4d10a c HUD 0x7C226D5346D4D10A p0:any N_0x7c4fccd2e4deb394 c MONEY 0x7C4FCCD2E4DEB394 boolean -N_0x7c814d2fb49f40c0 c PLAYER 0x7C814D2FB49F40C0 boolean IsPlayerCamControlDisabled +N_0x7c814d2fb49f40c0 c PLAYER 0x7C814D2FB49F40C0 boolean GetAreCameraControlsDisabled N_0x7c99101f7fce2ee5 c MONEY 0x7C99101F7FCE2EE5 p0:integer,p1:integer,p2:boolean,p3:boolean NetworkSpentPlayerHealthcare N_0x7c9c0b1eeb1f9072 c MISC 0x7C9C0B1EEB1F9072 bumpiness:number WaterOverrideSetRipplebumpiness N_0x7cd934010e115c2c c HUD 0x7CD934010E115C2C Blip ped:Ped GetAiBlip_2 @@ -4638,21 +4695,21 @@ N_0x7cf0448787b23758 c NETWORK 0x7CF0448787B23758 integer p0:any UgcGetContentDe N_0x7d36291161859389 c STATS 0x7D36291161859389 p0:any N_0x7d395ea61622e116 c NETWORK 0x7D395EA61622E116 p0:boolean N_0x7d41e9d2d17c5b2d c STREAMING 0x7D41E9D2D17C5B2D boolean unused:any StreamvolHasLoaded -N_0x7d6f9a3ef26136a0 c VEHICLE 0x7D6F9A3EF26136A0 vehicle:Vehicle,toggle:boolean,p2:boolean +N_0x7d6f9a3ef26136a0 c VEHICLE 0x7D6F9A3EF26136A0 vehicle:Vehicle,toggle:boolean,p2:boolean SetVehicleAllowHomingMissleLockon N_0x7d7a2e43e74e2eb8 c PED 0x7D7A2E43E74E2EB8 ped:Ped RequestPedVisibilityTracking N_0x7d8ba05688ad64c7 c STATS 0x7D8BA05688AD64C7 p0:any N_0x7db18ca8cad5b098 c SOCIALCLUB 0x7DB18CA8CAD5B098 any N_0x7db53b37a2f211a0 c NETWORK 0x7DB53B37A2F211A0 integer N_0x7dd234d6f3914c5b c CAM 0x7DD234D6F3914C5B camera:Cam,p1:number SetCamDofFnumberOfLens N_0x7e07c78925d5fd96 c PLAYER 0x7E07C78925D5FD96 any p0:any -N_0x7e17be53e1aaabaf c HUD 0x7E17BE53E1AAABAF integer,integer,integer GetPauseMenuSelectionData +N_0x7e17be53e1aaabaf c HUD 0x7E17BE53E1AAABAF integer,integer,integer GetMenuLayoutChangedEventDetails N_0x7e2bd3ef6c205f09 c REPLAY 0x7E2BD3EF6C205F09 p0:string,p1:boolean N_0x7e6946f68a38b74f c STATS 0x7E6946F68A38B74F boolean p0:any N_0x7ec3c679d0e7e46b c AUDIO 0x7EC3C679D0E7E46B soundId:integer,x:number,y:number,z:number UpdateSoundCoord N_0x7ec6f9a478a6a512 c MISC 0x7EC6F9A478A6A512 N_0x7ec8aba5e74b3d7a c HUD 0x7EC8ABA5E74B3D7A toggle:boolean SetInteriorZoomLevelDecreased N_0x7ecdf98587e92dec c INTERIOR 0x7ECDF98587E92DEC p0:any -N_0x7ee9f5d83dd4f90e c SHAPETEST 0x7EE9F5D83DD4F90E integer x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,traceFlags:integer,entity:Entity,options:integer StartShapeTestLosProbe +N_0x7ee9f5d83dd4f90e c SHAPETEST 0x7EE9F5D83DD4F90E integer x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,traceFlags:integer,entity:Entity,optionFlags:integer StartShapeTestLosProbe N_0x7eec2a316c250073 c STATS 0x7EEC2A316C250073 p0:any,p1:any,p2:any N_0x7ef7649b64d7ff10 c NETWORK 0x7EF7649B64D7FF10 boolean entity:Entity N_0x7f2c4cdf2e82df4c c STATS 0x7F2C4CDF2E82DF4C boolean p0:any @@ -4683,8 +4740,8 @@ N_0x8147fff6a718e1ad c SOCIALCLUB 0x8147FFF6A718E1AD integer token:integer ScLic N_0x814af7dcaacc597b c GRAPHICS 0x814AF7DCAACC597B p0:any N_0x815f18ad865f057f c NETWORK 0x815F18AD865F057F integer entity:Entity NetworkGetEntityNetScriptId N_0x816f6981c60bf53b c PED 0x816F6981C60BF53B ped:Ped,p1:any,p2:number,p3:number,p4:any ApplyPedBloodDamageByZone -N_0x817b86108eb94e51 c HUD 0x817B86108EB94E51 p0:boolean,p1:any,p2:any,p3:any,p4:any,p5:any,p6:any,p7:any,p8:any -N_0x8181ce2f25cb9bb7 c VEHICLE 0x8181CE2F25CB9BB7 integer vehicle:Vehicle,weaponIndex:integer GetVehicleWeaponCapacity +N_0x817b86108eb94e51 c HUD 0x817B86108EB94E51 integer,integer,integer,integer,integer,integer,integer,integer p0:boolean +N_0x8181ce2f25cb9bb7 c VEHICLE 0x8181CE2F25CB9BB7 integer vehicle:Vehicle,weaponIndex:integer GetVehicleWeaponRestrictedAmmo N_0x81aa517fbba05d39 c PED 0x81AA517FBBA05D39 boolean ped:Ped IsPedShaderEffectValid N_0x81cbae94390f9f89 c RECORDING 0x81CBAE94390F9F89 N_0x8204da7934df3155 c MONEY 0x8204DA7934DF3155 p0:any,p1:boolean,p2:boolean NetworkSpentRequestJob @@ -4695,7 +4752,7 @@ N_0x82352748437638ca c HUD 0x82352748437638CA integer ThefeedGetFirstVisibleDel N_0x8235f1bead557629 c VEHICLE 0x8235F1BEAD557629 vehicle:Vehicle,toggle:boolean N_0x82377b65e943f72d c NETWORK 0x82377B65E943F72D boolean player:Player NetworkGetPlayerOwnsWaypoint N_0x823ec8e82ba45986 c PLAYER 0x823EC8E82BA45986 p0:any -N_0x8269816f6cfd40f8 c MISC 0x8269816F6CFD40F8 p0:any,name:string +N_0x8269816f6cfd40f8 c MISC 0x8269816F6CFD40F8 integer name:string N_0x826d1ee4d1cafc78 c OBJECT 0x826D1EE4D1CAFC78 p0:any,p1:any N_0x8290252fff36acb5 c PAD 0x8290252FFF36ACB5 padIndex:integer,red:integer,green:integer,blue:integer SetControlLightEffectColor N_0x829cd22e043a2577 c SCRIPT 0x829CD22E043A2577 integer p0:Hash @@ -4710,7 +4767,7 @@ N_0x82fde6a57ee4ee44 c MISC 0x82FDE6A57EE4EE44 boolean,vector3,Object ped:Ped,we N_0x830c3a44eb3f2cf9 c STATS 0x830C3A44EB3F2CF9 p0:any N_0x8339643499d1222e c ENTITY 0x8339643499D1222E entity:Entity,x:number,y:number,z:number SetEntityAngularVelocity N_0x834344a414c7c85d c OBJECT 0x834344A414C7C85D p0:any,p1:any -N_0x83660b734994124d c NETWORK 0x83660B734994124D any,integer p0:any,p1:any +N_0x83660b734994124d c NETWORK 0x83660B734994124D any,integer p0:any,p1:any,damageDealt?:integer N_0x836b62713e0534ca c SCRIPT 0x836B62713E0534CA boolean N_0x838da0936a24ed4d c NETWORK 0x838DA0936A24ED4D vehicle:Vehicle,toggle:boolean SetNetworkEnableVehiclePositionCorrection N_0x83a169eabcdb10a2 c PED 0x83A169EABCDB10A2 ped:Ped,index:integer SetPedPhonePaletteIdx @@ -4726,11 +4783,11 @@ N_0x8421eb4da7e391b9 c PED 0x8421EB4DA7E391B9 ped:Ped,itemSet:any SetPedPreferr N_0x8423541e8b3a1589 c TASK 0x8423541E8B3A1589 p0:any,p1:any,p2:any N_0x84698ab38d0c6636 c HUD 0x84698AB38D0C6636 boolean contextHash:Hash PauseMenuIsContextActive N_0x846bf6291198a71e c ENTITY 0x846BF6291198A71E number entity:Entity GetEntityHeadingFromEulers -N_0x848b66100ee33b05 c STATS 0x848B66100EE33B05 data:any PlaystatsDupeDetection +N_0x848b66100ee33b05 c STATS 0x848B66100EE33B05 integer data?:integer PlaystatsDupeDetection N_0x84a810b375e69c0e c STATS 0x84A810B375E69C0E any N_0x84b418e93894ac1c c SAVEMIGRATION 0x84B418E93894AC1C any N_0x84c0116d012e8fc2 c MONEY 0x84C0116D012E8FC2 p0:any NetworkEarnFromDestroyingContraband -N_0x84de3b5fb3e666f0 c PHYSICS 0x84DE3B5FB3E666F0 boolean,integer +N_0x84de3b5fb3e666f0 c PHYSICS 0x84DE3B5FB3E666F0 boolean,integer ropeId?:integer N_0x84dfc579c2fc214c c STATS 0x84DFC579C2FC214C p0:any N_0x84ea99c62cb3ef0c c VEHICLE 0x84EA99C62CB3EF0C vehicle:Vehicle,wheelId:integer,value:number SetHydraulicWheelValue N_0x84fd40f56075e816 c VEHICLE 0x84FD40F56075E816 multiplier:number SetCarHighSpeedBumpSeverityMultiplier @@ -4742,7 +4799,7 @@ N_0x85535acf97fc0969 c SOCIALCLUB 0x85535ACF97FC0969 boolean token:integer ScPro N_0x855bc38818f6f684 c NETWORK 0x855BC38818F6F684 boolean NetworkSessionIsInVoiceSession N_0x8586789730b10caf c MONEY 0x8586789730B10CAF amount:integer,p1:any,p2:any,p3:any NetworkEarnFromBusinessProduct N_0x858ec9fd25de04aa c OBJECT 0x858EC9FD25DE04AA p0:any,p1:any -N_0x85a0ef54a500882c c NETWORK 0x85A0EF54A500882C boolean p0:any NetworkQueueGamerForStatus +N_0x85a0ef54a500882c c NETWORK 0x85A0EF54A500882C boolean,integer p0?:integer NetworkQueueGamerForStatus N_0x85b6c850546fdde2 c OBJECT 0x85B6C850546FDDE2 boolean garageHash:Hash,p1:boolean,p2:boolean,p3:boolean,p4:any AreEntitiesEntirelyInsideGarage N_0x85f6c9aba1de2bcf c NETSHOPPING 0x85F6C9ABA1DE2BCF any N_0x86255b1fc929e33e c GRAPHICS 0x86255B1FC929E33E boolean scaleformIndex:integer IsScaleformMovieDeleting @@ -4759,16 +4816,16 @@ N_0x877c1eaeac531023 c VEHICLE 0x877C1EAEAC531023 cargobob:Vehicle,length1:numb N_0x878c75c09fbdb942 c VEHICLE 0x878C75C09FBDB942 SetTrailerLegsLowered N_0x87d51d72255d4e78 c GRAPHICS 0x87D51D72255D4E78 scaleform:integer,posX:number,posY:number,posZ:number,rotX:number,rotY:number,rotZ:number,p7:number,sharpness:number,p9:number,scaleX:number,scaleY:number,scaleZ:number,p13:any DrawScaleformMovie_3d N_0x87ddeb611b329a9c c PED 0x87DDEB611B329A9C multiplier:number -N_0x87e0052f08bd64e6 c SOCIALCLUB 0x87E0052F08BD64E6 boolean,integer index:integer ScInboxMessageGetBountyData +N_0x87e0052f08bd64e6 c SOCIALCLUB 0x87E0052F08BD64E6 boolean,integer index:integer,outData?:integer ScInboxMessageGetBountyData N_0x87e5c46c187fe0ae c NETWORK 0x87E5C46C187FE0AE any p0:any,p1:any UgcGetContentRatingPositiveCount -N_0x87eb7a3ffcb314db c NETWORK 0x87EB7A3FFCB314DB boolean,integer NetworkIsFriendHandleOnline +N_0x87eb7a3ffcb314db c NETWORK 0x87EB7A3FFCB314DB boolean,integer networkHandle?:integer NetworkIsFriendHandleOnline N_0x8806cebfabd3ce05 c NETWORK 0x8806CEBFABD3CE05 boolean p0:any NetworkGetPresenceInviteIsTournament N_0x88087ee1f28024ae c STATS 0x88087EE1F28024AE p0:any N_0x8817605c2ba76200 c HUD 0x8817605C2BA76200 ForceCloseTextInputBox N_0x8821196d91fa2de5 c VEHICLE 0x8821196D91FA2DE5 vehicle:Vehicle,toggle:boolean N_0x883d79c4071e18b3 c NETWORK 0x883D79C4071E18B3 boolean IsStoreAvailableToUser N_0x88578f6ec36b4a3a c STATS 0x88578F6EC36B4A3A any p0:any,p1:any -N_0x886913bbeaca68c1 c STATS 0x886913BBEACA68C1 integer data:any StatGetSaveMigrationStatus +N_0x886913bbeaca68c1 c STATS 0x886913BBEACA68C1 integer,integer data?:integer StatGetSaveMigrationStatus N_0x887fa38787de8c72 c VEHICLE 0x887FA38787DE8C72 vehicle:Vehicle N_0x8881c98a31117998 c OBJECT 0x8881C98A31117998 p0:any N_0x88b588b41ff7868e c NETWORK 0x88B588B41FF7868E any @@ -4790,7 +4847,7 @@ N_0x89c8553dd3274aae c GRAPHICS 0x89C8553DD3274AAE name:string ResetParticleFxO N_0x89d630cf5ea96d23 c VEHICLE 0x89D630CF5EA96D23 boolean handler:Vehicle,container:Entity IsHandlerFrameAboveContainer N_0x8a24b067d175a7bd c PED 0x8A24B067D175A7BD boolean x1:number,y1:number,z1:number,x2:number,y2:number,z2:number DoesScenarioBlockingAreaExist N_0x8a35c742130c6080 c GRAPHICS 0x8A35C742130C6080 decalType:integer,textureDict:string,textureName:string PatchDecalDiffuseMap -N_0x8a4416c0db05fa66 c SOCIALCLUB 0x8A4416C0DB05FA66 boolean newsStoryData:any +N_0x8a4416c0db05fa66 c SOCIALCLUB 0x8A4416C0DB05FA66 boolean,integer newsStoryData?:integer N_0x8a694d7a68f8dc38 c AUDIO 0x8A694D7A68F8DC38 interrupterPed:Ped,context:string,voiceName:string InterruptConversationAndPause N_0x8a7a40100edfec58 c STREAMING 0x8A7A40100EDFEC58 interior:integer,roomName:string RequestModelsInRoom N_0x8a7b3952dd64d2b5 c MONEY 0x8A7B3952DD64D2B5 amountSpent:integer,p1:any,p2:boolean,p3:boolean NetworkBuyFairgroundRide @@ -4807,7 +4864,7 @@ N_0x8bbacbf51da047a8 c CAM 0x8BBACBF51DA047A8 ped:Ped SetGameplayCamFollowPedTh N_0x8bc515bae4aaf8ff c PLAYER 0x8BC515BAE4AAF8FF number player:Player GetPlayerHealthRechargeLimit N_0x8bd6c6dea20e82c6 c NETWORK 0x8BD6C6DEA20E82C6 integer p0:integer GetStatusOfTextureDownload N_0x8bdc7bfc57a81e76 c MISC 0x8BDC7BFC57A81E76 boolean,number,vector3 x:number,y:number,z:number GetGroundZAndNormalFor_3dCoord -N_0x8be1146dfd5d4468 c NETWORK 0x8BE1146DFD5D4468 boolean,integer tunableContext:string,tunableName:string NetworkAccessTunableInt +N_0x8be1146dfd5d4468 c NETWORK 0x8BE1146DFD5D4468 boolean,integer tunableContext:string,tunableName:string,value?:integer NetworkAccessTunableInt N_0x8bf907833be275de c AUDIO 0x8BF907833BE275DE p0:number,p1:number N_0x8bfceb5ea1b161b6 c CAM 0x8BFCEB5EA1B161B6 number ReplayFreeCamGetMaxRange N_0x8c33220c8d78ca0d c TASK 0x8C33220C8D78CA0D ped:Ped,taskSequenceId:integer TaskPerformSequenceLocally @@ -4815,7 +4872,7 @@ N_0x8c4f3bf23b6237db c PED 0x8C4F3BF23B6237DB Object ped:Ped,p1:boolean,p2:boole N_0x8c8d2739ba44af0f c NETWORK 0x8C8D2739BA44AF0F boolean p0:any N_0x8c9d11605e59d955 c STATS 0x8C9D11605E59D955 p0:any N_0x8caab2bd3ea58bd4 c OBJECT 0x8CAAB2BD3EA58BD4 p0:any -N_0x8cc469ab4d349b7c c SOCIALCLUB 0x8CC469AB4D349B7C boolean p0:integer,p1:string,p2:any +N_0x8cc469ab4d349b7c c SOCIALCLUB 0x8CC469AB4D349B7C boolean,integer p0:integer,p1:string,p2?:integer N_0x8cde909a0370bb3a c GRAPHICS 0x8CDE909A0370BB3A toggle:boolean N_0x8cff648fbd7330f1 c OBJECT 0x8CFF648FBD7330F1 p0:any N_0x8d11e61a4abf49cc c NETWORK 0x8D11E61A4ABF49CC boolean NetworkIsPsnAvailable @@ -4837,9 +4894,9 @@ N_0x8ec74ceb042e7cff c STATS 0x8EC74CEB042E7CFF p0:any N_0x8ef52acaecc51d9c c NETWORK 0x8EF52ACAECC51D9C toggle:boolean N_0x8ef5573a1f801a5c c MISC 0x8EF5573A1F801A5C boolean,integer,integer player:Player ScriptRaceGetPlayerSplitTime N_0x8efccf6ec66d85e4 c HUD 0x8EFCCF6EC66D85E4 integer chTitle:string,clanTxd:string,clanTxn:string,isImportant:boolean,showSubtitle:boolean EndTextCommandThefeedPostCrewRankup -N_0x8f08017f9d7c47bd c HUD 0x8F08017F9D7C47BD boolean p0:any,p1:any,p2:any +N_0x8f08017f9d7c47bd c HUD 0x8F08017F9D7C47BD boolean,integer p0:any,p2:any N_0x8f0d5ba1c2cc91d7 c VEHICLE 0x8F0D5BA1C2CC91D7 toggle:boolean -N_0x8f5d1ad832aeb06c c NETWORK 0x8F5D1AD832AEB06C boolean networkHandle:any NetworkCanCommunicateWithGamer_2 +N_0x8f5d1ad832aeb06c c NETWORK 0x8F5D1AD832AEB06C boolean,integer networkHandle?:integer NetworkCanCommunicateWithGamer_2 N_0x8f5ea1c01d65a100 c DATAFILE 0x8F5EA1C01D65A100 boolean p0:any DatafileDeleteRequestedFile N_0x8f719973e1445ba2 c VEHICLE 0x8F719973E1445BA2 vehicle:Vehicle,toggle:boolean SetBoatSinksWhenWrecked N_0x8f9ee5687f8eeccd c HUD 0x8F9EE5687F8EECCD gxtEntry:string BeginTextCommandOverrideButtonText @@ -4853,7 +4910,7 @@ N_0x906b778ca1dc72b6 c DATAFILE 0x906B778CA1DC72B6 string DatafileGetFileDict N_0x906ca41a4b74eca4 c NETWORK 0x906CA41A4B74ECA4 any N_0x908311265d42a820 c GRAPHICS 0x908311265D42A820 p0:any N_0x9097eb6d4bb9a12a c PLAYER 0x9097EB6D4BB9A12A player:Player,entity:Entity -N_0x90a6526cf0381030 c HUD 0x90A6526CF0381030 boolean p0:any,p1:any,p2:any,p3:any GetMenuPedMaskedIntStat +N_0x90a6526cf0381030 c HUD 0x90A6526CF0381030 boolean,integer p0:any,p2:any,p3:any GetMenuPedMaskedIntStat N_0x90a78ecaa4e78453 c GRAPHICS 0x90A78ECAA4E78453 integer GetStatusOfTakeMissionCreatorPhoto N_0x90b6da738a9a25da c VEHICLE 0x90B6DA738A9A25DA range:number SetAmbientVehicleRangeMultiplierThisFrame N_0x90cd7c6871fbf1b4 c MONEY 0x90CD7C6871FBF1B4 p0:any,p1:any,p2:any,p3:any @@ -4865,7 +4922,7 @@ N_0x918c7b2d2ff3928b c MISC 0x918C7B2D2FF3928B any x1:number,y1:number,z1:number N_0x91a0bd635321f145 c VEHICLE 0x91A0BD635321F145 vehicle:Vehicle,toggle:boolean SetDisableVehicleEngineFires N_0x91b87c55093de351 c NETWORK 0x91B87C55093DE351 boolean NetworkGetRosPrivilege_25 N_0x91d6dd290888cbab c VEHICLE 0x91D6DD290888CBAB boolean HasFilledVehiclePopulation -N_0x91ef34584710be99 c WEAPON 0x91EF34584710BE99 integer x:number,y:number,z:number,radius:number,p4:number,p5:number,p6:number,weaponHash:Hash CreateAirDefenseSphere +N_0x91ef34584710be99 c WEAPON 0x91EF34584710BE99 integer x:number,y:number,z:number,radius:number,weaponPositionX:number,weaponPositionY:number,weaponPositionZ:number,weaponHash:Hash CreateAirDefenceSphere N_0x91ef6ee6419e5b97 c CAM 0x91EF6EE6419E5B97 p0:boolean N_0x920d853f3e17f1da c INTERIOR 0x920D853F3E17F1DA interiorID:integer,roomHashKey:Hash ForceRoomForGameViewport N_0x921ce12c489c4c41 c TASK 0x921CE12C489C4C41 boolean ped:Ped IsTaskMoveNetworkActive @@ -4880,7 +4937,7 @@ N_0x928dbfb892638ef3 c STATS 0x928DBFB892638EF3 PlaystatsStartTrackingStunts N_0x92aefb5f6e294023 c OBJECT 0x92AEFB5F6E294023 object:Object,p1:boolean,p2:boolean PreventCollectionOfPortablePickup N_0x92c360b5f15d2302 c TASK 0x92C360B5F15D2302 pilot:Ped,aircraft:Vehicle,xPos:number,yPos:number,zPos:number,fCruiseSpeed:number,fTargetReachedDist:number TaskPlaneTaxi N_0x92ccc17a7a2285da c GRAPHICS 0x92CCC17A7A2285DA ClearExtraTimecycleModifier -N_0x92da6e70ef249bd1 c SOCIALCLUB 0x92DA6E70EF249BD1 boolean,integer p0:string +N_0x92da6e70ef249bd1 c SOCIALCLUB 0x92DA6E70EF249BD1 boolean,integer p0:string,p1?:integer N_0x92f0da1e27db96dc c HUD 0x92F0DA1E27DB96DC hudColorIndex:integer ThefeedSetNextPostBackgroundColor N_0x92fc0eedfac04a14 c STATS 0x92FC0EEDFAC04A14 p0:any,p1:any,p2:any,p3:any,p4:any,p5:any N_0x93028f1db42bfd08 c SOCIALCLUB 0x93028F1DB42BFD08 boolean msgIndex:integer ScInboxGetMessageIsReadAtIndex @@ -4919,9 +4976,9 @@ N_0x9689123e3f213aa5 c MISC 0x9689123E3F213AA5 boolean GetIsPlayerInAnimalForm N_0x96e2929292a4db77 c FILES 0x96E2929292A4DB77 integer componentHash:Hash N_0x96e6d5150dbf1c09 c STATS 0x96E6D5150DBF1C09 p0:any,p1:any,p2:any N_0x96ee0eba0163df80 c OBJECT 0x96EE0EBA0163DF80 object:Object,intensity:integer SetObjectStuntPropSpeedup -N_0x971d7b15bcdbef99 c CUTSCENE 0x011883f41211432a integer GetCutsceneEndTime +N_0x971d7b15bcdbef99 c CUTSCENE 0x971D7B15BCDBEF99 integer GetCutsceneEndTime N_0x971da0055324d033 c OBJECT 0x971DA0055324D033 object:Object,textureVariation:integer SetObjectTextureVariation -N_0x972bc203bbc4c4d5 c NETWORK 0x972BC203BBC4C4D5 boolean,number tunableContext:Hash,tunableName:Hash NetworkAccessTunableFloatHash +N_0x972bc203bbc4c4d5 c NETWORK 0x972BC203BBC4C4D5 boolean,number tunableContext:Hash,tunableName:Hash,value?:number NetworkAccessTunableFloatHash N_0x9737a37136f07e75 c VEHICLE 0x9737A37136F07E75 vehicle:Vehicle,toggle:boolean SetVehicleDoorsLockedForNonScriptPlayers N_0x973d76aa760a6cb6 c NETWORK 0x973D76AA760A6CB6 p0:boolean N_0x9747292807126eda c NETWORK 0x9747292807126EDA boolean NetworkIsMultiplayerDisabled @@ -4931,7 +4988,7 @@ N_0x9777734dad16992f c MONEY 0x9777734DAD16992F boolean CanPayGoon N_0x977ca98939e82e4b c WEAPON 0x977CA98939E82E4B weaponObject:Object,p1:integer N_0x9780f32bcaf72431 c CAM 0x9780F32BCAF72431 number GetFinalRenderedCamFarDof N_0x97841634ef7df1d6 c VEHICLE 0x97841634EF7DF1D6 vehicle:Vehicle,toggle:boolean -N_0x97a770beef227e2b c NETWORK 0x97A770BEEF227E2B boolean p0:any,p1:any,p2:any,p3:any NetworkGetBackgroundLoadingRecipients +N_0x97a770beef227e2b c NETWORK 0x97A770BEEF227E2B boolean,integer,integer p0:any,p1:any NetworkGetBackgroundLoadingRecipients N_0x97c65887d4b37fa9 c HUD 0x97C65887D4B37FA9 ped:Ped,range:number SetPedAiBlipNoticeRange N_0x97c9e4e7024a8f2c c HUD 0x97C9E4E7024A8F2C integer,integer crewTypeIsPrivate:boolean,crewTagContainsRockstar:boolean,rank:integer,hasFounderStatus:boolean,isImportant:boolean,clanHandle:integer,r:integer,g:integer,b:integer EndTextCommandThefeedPostCrewtag N_0x97ce68cb032583f0 c VEHICLE 0x97CE68CB032583F0 vehicle:Vehicle,toggle:boolean SetForceHdVehicle @@ -4980,16 +5037,16 @@ N_0x9bda23bf666f0855 c VEHICLE 0x9BDA23BF666F0855 aircraft:Vehicle,count:intege N_0x9bddc73cc6a115d4 c VEHICLE 0x9BDDC73CC6A115D4 vehicle:Vehicle,p1:boolean,p2:boolean N_0x9bea350d7c48061b c MONEY 0x9BEA350D7C48061B p0:any,p1:any,p2:any,p3:any,p4:any NetworkSpentAutoshopModifications N_0x9becd4b9fef3f8a6 c VEHICLE 0x9BECD4B9FEF3F8A6 vehicle:Vehicle,p1:boolean -N_0x9bf438815f5d96ea c NETWORK 0x9BF438815F5D96EA boolean p0:any,p1:any,p2:any,p3:any,p4:any,p5:any UgcQueryMyContent +N_0x9bf438815f5d96ea c NETWORK 0x9BF438815F5D96EA boolean,integer p0:any,p1:any,p3:any,p4:any,p5:any UgcQueryMyContent N_0x9c11908013ea4715 c AUDIO 0x9C11908013EA4715 vehicle:Vehicle SoundVehicleHornThisFrame -N_0x9c6a6c19b6c0c496 c PED 0x9C6A6C19B6C0C496 boolean,integer ped:Ped +N_0x9c6a6c19b6c0c496 c PED 0x9C6A6C19B6C0C496 boolean,integer ped:Ped,p1?:integer N_0x9c93764223e29c50 c OBJECT 0x9C93764223E29C50 any pickupHash:any,posX:number,posY:number,posZ:number,flags:integer,value:integer,modelHash:any,p7:boolean,p8:boolean CreateNonNetworkedAmbientPickup N_0x9cb0bfa7a9342c3d c DATAFILE 0x9CB0BFA7A9342C3D boolean p0:integer,p1:boolean DatafileSelectUgcStats N_0x9cfdd90b2b844bf7 c GRAPHICS 0x9CFDD90B2B844BF7 p0:number,p1:number,p2:number,p3:number,p4:number GolfTrailSetShaderParams N_0x9d252648778160df c TASK 0x9D252648778160DF any p0:any N_0x9d26502bb97bfe62 c MONEY 0x9D26502BB97BFE62 p0:any,p1:boolean,p2:boolean NetworkSpentRequestHeist N_0x9d30687c57baa0bb c VEHICLE 0x9D30687C57BAA0BB p0:any -N_0x9d3af56e94c9ae98 c AUDIO 0x9D3AF56E94C9AE98 vehicle:Vehicle,p1:number +N_0x9d3af56e94c9ae98 c AUDIO 0x9D3AF56E94C9AE98 vehicle:Vehicle,time:number SetHornPermanentlyOnTime N_0x9d44fcce98450843 c VEHICLE 0x9D44FCCE98450843 vehicle:Vehicle,toggle:boolean SetVehicleSilent N_0x9d4fdbb035229669 c MONEY 0x9D4FDBB035229669 p0:any,p1:any,p2:any NetworkEarnJobBonusHeistAward N_0x9d724b400a7e8ffc c NETWORK 0x9D724B400A7E8FFC p0:any,p1:any @@ -4997,14 +5054,14 @@ N_0x9d728c1e12bf5518 c PED 0x9D728C1E12BF5518 integer ped:Ped GetPedHelmetStored N_0x9d75795b9dc6ebbf c GRAPHICS 0x9D75795B9DC6EBBF distance:number SeethroughSetFadeEndDistance N_0x9d7afcbf21c51712 c NETWORK 0x9D7AFCBF21C51712 toggle:boolean N_0x9d8d44adbba61ef2 c MISC 0x9D8D44ADBBA61EF2 toggle:boolean SetPlayerRockstarEditorDisabled -N_0x9da58cdbf6bdbc08 c WEAPON 0x9DA58CDBF6BDBC08 integer p0:number,p1:number,p2:number,p3:number,p4:number,p5:number,p6:number,p7:number,p8:number,p9:number,weaponHash:Hash CreateAirDefenseArea +N_0x9da58cdbf6bdbc08 c WEAPON 0x9DA58CDBF6BDBC08 integer srcCoord1X:number,srcCoord1Y:number,srcCoord1Z:number,srcCoord2X:number,srcCoord2Y:number,srcCoord2Z:number,fWidth:number,weaponPositionX:number,weaponPositionY:number,weaponPositionZ:number,weaponHash:Hash CreateAirDefenceAngledArea N_0x9dba107b4937f809 c PED 0x9DBA107B4937F809 ped:Ped,p1:string SetPedCoverClipsetOverride N_0x9dce1f0f78260875 c GRAPHICS 0x9DCE1F0F78260875 toggle:boolean EnableAlienBloodVfx N_0x9dd368bf06983221 c NETWORK 0x9DD368BF06983221 player:Player,toggle:boolean NetworkDisableInvincibleFlashing N_0x9de5d2f723575ed0 c SOCIALCLUB 0x9DE5D2F723575ED0 boolean N_0x9de986fc9a87c474 c NETWORK 0x9DE986FC9A87C474 boolean player:Player,index:integer NetworkIsPlayerEqualToIndex N_0x9dfe13ecdc1ec196 c CAM 0x9DFE13ECDC1EC196 p0:boolean,p1:boolean -N_0x9e30e91fb03a2caf c PED 0x9E30E91FB03A2CAF boolean p0:any,p1:any +N_0x9e30e91fb03a2caf c PED 0x9E30E91FB03A2CAF boolean,integer,integer N_0x9e4cfff989258472 c CAM 0x9E4CFFF989258472 InvalidateVehicleIdleCam N_0x9e6542f0ce8e70a3 c INTERIOR 0x9E6542F0CE8E70A3 toggle:boolean N_0x9e778248d6685fe0 c HUD 0x9E778248D6685FE0 name:string SetSocialClubTour @@ -5017,7 +5074,7 @@ N_0x9edd76e87d5d51ba c PLAYER 0x9EDD76E87D5D51BA player:Player N_0x9f260bfb59adbca3 c PLAYER 0x9F260BFB59ADBCA3 player:Player,entity:Entity N_0x9f3f689b814f2599 c VEHICLE 0x9F3F689B814F2599 vehicle:Vehicle,p1:boolean N_0x9f5e6bb6b34540da c MISC 0x9F5E6BB6B34540DA maxBumpiness:number WaterOverrideSetRipplemaxbumpiness -N_0x9f6e2821885caee2 c NETWORK 0x9F6E2821885CAEE2 boolean p0:any,p1:any,p2:any,p3:any,p4:any UgcGetCrewContent +N_0x9f6e2821885caee2 c NETWORK 0x9F6E2821885CAEE2 boolean,integer,integer p0:any,p1:any,p2:any UgcGetCrewContent N_0x9f97da93681f87ea c CAM 0x9F97DA93681F87EA N_0x9fcb3cbfb3ead69a c HUD 0x9FCB3CBFB3EAD69A p0:integer,p1:number N_0x9fe5633880ecd8ed c WEAPON 0x9FE5633880ECD8ED ped:Ped,weaponHash:Hash,camoComponentHash:Hash,colorIndex:integer SetPedWeaponLiveryColor @@ -5036,13 +5093,13 @@ N_0xa09f896ce912481f c MISC 0xA09F896CE912481F integer p0:boolean GetSizeOfSaveD N_0xa0ad167e4b39d9a2 c MISC 0xA0AD167E4B39D9A2 any p0:any,p1:any,p2:any,p3:any,p4:any,p5:any,p6:any,p7:any,p8:any,p9:any,p10:any,p11:any,p12:any,p13:any N_0xa0cefcea390aab9b c PAD 0xA0CEFCEA390AAB9B p0:any N_0xa0d3e4f7aafb7e78 c PLAYER 0xA0D3E4F7AAFB7E78 any player:Player,percentage:number SetPlayerUnderwaterTimeRemaining -N_0xa0f8a7517a273c05 c PATHFIND 0xA0F8A7517A273C05 boolean,vector3 x:number,y:number,z:number,heading:number GetRoadBoundaryUsingHeading -N_0xa0f93d5465b3094d c STATS 0xA0F93D5465B3094D boolean p0:any +N_0xa0f8a7517a273c05 c PATHFIND 0xA0F8A7517A273C05 boolean,vector3 x:number,y:number,z:number,heading:number,outPosition?:vector3 GetRoadBoundaryUsingHeading +N_0xa0f93d5465b3094d c STATS 0xA0F93D5465B3094D boolean,integer p0?:integer N_0xa0fa4ec6a05da44e c NETWORK 0xA0FA4EC6A05DA44E any N_0xa0fe76168a189ddb c CUTSCENE 0xA0FE76168A189DDB integer N_0xa1183bcfee0f93d1 c MISC 0xA1183BCFEE0F93D1 player:Player SetForcePlayerToJump N_0xa12d3a5a3753cc23 c NETWORK 0xA12D3A5A3753CC23 any -N_0xa134777ff7f33331 c NETWORK 0xA134777FF7F33331 boolean p0:any,p1:any NetworkClanIsEmblemReady +N_0xa134777ff7f33331 c NETWORK 0xA134777FF7F33331 boolean,integer p0:any,p1?:integer NetworkClanIsEmblemReady N_0xa135ac892a58fc07 c NETSHOPPING 0xA135AC892A58FC07 boolean charSlot:integer NetGameserverStartSession N_0xa13c11e1b5c06bfc c HUD 0xA13C11E1B5C06BFC ThefeedForceRenderOn N_0xa13e93403f26c812 c HUD 0xA13E93403F26C812 Hash weaponTypeIndex:integer HudWeaponWheelGetSlotHash @@ -5066,7 +5123,7 @@ N_0xa2a707979fe754dc c NETWORK 0xA2A707979FE754DC vehicle:Vehicle,multiplier:nu N_0xa2ae5c478b96e3b6 c PATHFIND 0xA2AE5C478B96E3B6 boolean nodeID:integer GetVehicleNodeIsGpsAllowed N_0xa2c1f5e92afe49ed c OBJECT 0xA2C1F5E92AFE49ED N_0xa2c9ac24b4061285 c WEAPON 0xA2C9AC24B4061285 integer ped:Ped,weaponHash:Hash -N_0xa2ccbe62cd4c91a4 c MOBILE 0xA2CCBE62CD4C91A4 integer +N_0xa2ccbe62cd4c91a4 c MOBILE 0xA2CCBE62CD4C91A4 integer toggle?:integer N_0xa2e9c1ab8a92e8cd c NETWORK 0xA2E9C1AB8A92E8CD toggle:boolean N_0xa2f952104fc6dd4b c NETWORK 0xA2F952104FC6DD4B boolean index:integer RequestCommerceItemImage N_0xa306f470d1660581 c NETWORK 0xA306F470D1660581 any @@ -5077,7 +5134,7 @@ N_0xa3c53804bdb68ed2 c STATS 0xA3C53804BDB68ED2 p0:any,p1:any N_0xa3f3564a5b3646c0 c PED 0xA3F3564A5B3646C0 boolean ped:Ped N_0xa40cc53df8e50837 c SCRIPT 0xA40CC53DF8E50837 integer eventGroup:integer,eventDataSize:integer,playerBits:integer TriggerScriptEvent_2 N_0xa40f9c2623f6a8b5 c MONEY 0xA40F9C2623F6A8B5 integer characterSlot:integer NetworkGetVcWalletBalance -N_0xa41bcd7213805aac c CAM 0xA41BCD7213805AAC p0:boolean ForceCinematicRenderingThisUpdate +N_0xa41bcd7213805aac c CAM 0xA41BCD7213805AAC enable:boolean ForceCinematicRenderingThisUpdate N_0xa44ff770dfbc5dae c GRAPHICS 0xA44FF770DFBC5DAE RegisterNoirScreenEffectThisFrame N_0xa4664972a9b8f8ba c GRAPHICS 0xA4664972A9B8F8BA vector3 p0:integer GolfTrailGetVisualControlPoint N_0xa468e0be12b12c70 c SOCIALCLUB 0xA468E0BE12B12C70 boolean @@ -5117,17 +5174,17 @@ N_0xa6fceccf4721d679 c NETWORK 0xA6FCECCF4721D679 p0:any N_0xa7092afe81944852 c CAM 0xA7092AFE81944852 N_0xa72200f51875fea4 c PLAYER 0xA72200F51875FEA4 integer GetWantedLevelParoleDuration N_0xa72835064dd63e4c c NETWORK 0xA72835064DD63E4C integer GetMaxNumNetworkPickups -N_0xa735353c77334ea0 c MISC 0xA735353C77334EA0 p0:any,name:string RegisterInt64ToSave +N_0xa735353c77334ea0 c MISC 0xA735353C77334EA0 integer name:string RegisterInt64ToSave N_0xa73667484d7037c3 c NETWORK 0xA73667484D7037C3 toggle:boolean NetworkSessionBlockJoinRequests -N_0xa736cf7fb7c5bff4 c STATS 0xA736CF7FB7C5BFF4 p0:any,p1:any,p2:any,p3:any +N_0xa736cf7fb7c5bff4 c STATS 0xA736CF7FB7C5BFF4 integer,integer,integer,integer N_0xa74802fb8d0b7814 c MISC 0xA74802FB8D0B7814 name:string,p1:number UnloadCloudHat N_0xa75ccf58a60a5fd1 c MONEY 0xA75CCF58A60A5FD1 p0:any,p1:any,p2:any,p3:any,p4:any,p5:any,p6:any,p7:any,p8:any,p9:any NetworkSpentVehicleExportMods N_0xa75e2b6733da5142 c NETWORK 0xA75E2B6733DA5142 boolean FacebookDoUnkCheck N_0xa75eac69f59e96e7 c MONEY 0xA75EAC69F59E96E7 p0:any NetworkEarnFromClubManagementParticipation N_0xa761d4ac6115623d c STATS 0xA761D4AC6115623D any N_0xa76359fc80b2438e c STREAMING 0xA76359FC80B2438E scaling:number OverrideLodscaleThisFrame -N_0xa770c8eec6fb2ac5 c SOCIALCLUB 0xA770C8EEC6FB2AC5 boolean,number name:string ScGamerdataGetFloat -N_0xa7862bc5ed1dfd7e c NETWORK 0xA7862BC5ED1DFD7E boolean p0:any,p1:any,p2:any,p3:any +N_0xa770c8eec6fb2ac5 c SOCIALCLUB 0xA770C8EEC6FB2AC5 boolean,number name:string,outValue?:number ScGamerdataGetFloat +N_0xa7862bc5ed1dfd7e c NETWORK 0xA7862BC5ED1DFD7E boolean,integer,integer p0:any,p1:any N_0xa78b8fa58200da56 c STATS 0xA78B8FA58200DA56 p0:integer N_0xa78de25577300ba1 c GRAPHICS 0xA78DE25577300BA1 distance:number SeethroughSetFadeStartDistance N_0xa7a1127490312c36 c MISC 0xA7A1127490312C36 maxAmplitude:number WaterOverrideSetShorewavemaxamplitude @@ -5156,7 +5213,7 @@ N_0xa95f667a755725da c MONEY 0xA95F667A755725DA p0:any,p1:any,p2:any,p3:any N_0xa97f257d0151a6ab c INTERIOR 0xA97F257D0151A6AB mapObjectHash:Hash EnableExteriorCullModelThisFrame N_0xa9b61a329bfdcbea c PED 0xA9B61A329BFDCBEA p0:any,p1:boolean N_0xa9cbfd40b3fa3010 c HUD 0xA9CBFD40B3FA3010 boolean ThefeedIsPaused -N_0xa9f9c2e0fde11cbb c FILES 0xA9F9C2E0FDE11CBB boolean outfitHash:Hash,variantIndex:integer,outPropVariant:any GetShopPedOutfitPropVariant +N_0xa9f9c2e0fde11cbb c FILES 0xA9F9C2E0FDE11CBB boolean,integer outfitHash:Hash,variantIndex:integer,outPropVariant?:integer GetShopPedOutfitPropVariant N_0xaa059c615de9dd03 c OBJECT 0xAA059C615DE9DD03 p0:any,p1:any N_0xaa19f5572c38b564 c AUDIO 0xAA19F5572C38B564 integer textLabel:string GetVariationChosenForScriptedLine N_0xaa295b6f28bd587d c HUD 0xAA295B6F28BD587D integer textureDict:string,textureName:string,rpBonus:integer,colorOverlay:integer,titleLabel:string EndTextCommandThefeedPostAward @@ -5180,7 +5237,7 @@ N_0xab58c27c2e6123c6 c GRAPHICS 0xAB58C27C2E6123C6 boolean functionName:string B N_0xab6781a5f3101470 c AUDIO 0xAB6781A5F3101470 ped:Ped,shouldDisable:boolean StopPedSpeakingSynced N_0xaba17d7ce615adbf c HUD 0xABA17D7CE615ADBF string:string BeginTextCommandBusyspinnerOn N_0xabb2fa71c83a1b72 c MISC 0xABB2FA71C83A1B72 integer GetPowerSavingModeDuration -N_0xabd5e88b8a2d3db2 c NETWORK 0xABD5E88B8A2D3DB2 globalPtr:any NetworkSessionVoiceConnectToPlayer +N_0xabd5e88b8a2d3db2 c NETWORK 0xABD5E88B8A2D3DB2 integer globalPtr?:integer NetworkSessionVoiceConnectToPlayer N_0xac272c0ae01b4bd8 c MONEY 0xAC272C0AE01B4BD8 p0:any,p1:any,p2:any,p3:any NetworkSpentBuyTruck N_0xac2890471901861c c MOBILE 0xAC2890471901861C p0:number N_0xacb5dcca1ec76840 c AUDIO 0xACB5DCCA1EC76840 Hash vehicle:Vehicle GetVehicleDefaultHornIgnoreMods @@ -5194,7 +5251,7 @@ N_0xad73ce5a09e42d12 c PLAYER 0xAD73CE5A09E42D12 player:Player N_0xadb57e5b663cca8b c NETWORK 0xADB57E5B663CCA8B number,number p0:Player N_0xadd6627c4d325458 c GRAPHICS 0xADD6627C4D325458 p0:any N_0xaddd1c754e2e2914 c STATS 0xADDD1C754E2E2914 p0:any,p1:any,p2:any,p3:any,p4:any,p5:any,p6:any,p7:any,p8:any,p9:any PlaystatsRaceToPointMissionDone -N_0xaded7f5748acafe6 c HUD 0xADED7F5748ACAFE6 ThefeedCommentTeleportPoolOff +N_0xaded7f5748acafe6 c HUD 0xADED7F5748ACAFE6 ThefeedAutoPostGametipsOff N_0xadf084fb8f075d06 c OBJECT 0xADF084FB8F075D06 boolean p0:Object N_0xae3fee8709b39dcb c VEHICLE 0xAE3FEE8709B39DCB boolean vehicle:Vehicle N_0xae4e8157d9ecf087 c GRAPHICS 0xAE4E8157D9ECF087 EndTextCommandUnparsedScaleformString @@ -5206,8 +5263,8 @@ N_0xaef12960fa943792 c VEHICLE 0xAEF12960FA943792 boolean vehicle:Vehicle AreHel N_0xaf03011701811146 c VEHICLE 0xAF03011701811146 any vehicle:Vehicle,entity:Entity DetachEntityFromCargobob N_0xaf12610c644a35c9 c STREAMING 0xAF12610C644A35C9 name:string,toggle:boolean SetMapdatacullboxEnabled N_0xaf348afcb575a441 c INTERIOR 0xAF348AFCB575A441 roomName:string -N_0xaf42195a42c63bba c HUD 0xAF42195A42C63BBA boolean IsWarningMessageActive_2 -N_0xaf50da1a3f8b1ba4 c NETWORK 0xAF50DA1A3F8B1BA4 boolean,integer NetworkCanAccessMultiplayer +N_0xaf42195a42c63bba c HUD 0xAF42195A42C63BBA boolean IsWarningMessageReadyForControl +N_0xaf50da1a3f8b1ba4 c NETWORK 0xAF50DA1A3F8B1BA4 boolean,integer loadingState?:integer NetworkCanAccessMultiplayer N_0xaf60e6a2936f982a c VEHICLE 0xAF60E6A2936F982A p0:any,p1:any N_0xaf66059a131aa269 c NETWORK 0xAF66059A131AA269 p0:boolean NetworkOverrideTransitionChat N_0xaf66dcee6609b148 c RECORDING 0xAF66DCEE6609B148 DisableRockstarEditorCameraChanges @@ -5223,7 +5280,7 @@ N_0xb07d3185e11657a5 c NETWORK 0xB07D3185E11657A5 boolean entity:Entity NetworkH N_0xb088e9a47ae6edd5 c VEHICLE 0xB088E9A47AE6EDD5 vehicle:Vehicle,p1:boolean SetDisableSuperdummyMode N_0xb08b85d860e7ba3c c MISC 0xB08B85D860E7BA3C incidentId:integer,dispatchService:integer,numUnits:integer SetIncidentRequestedUnits N_0xb094bc1db4018240 c HUD 0xB094BC1DB4018240 hudIndex:integer,entity:Entity,offsetX:number,offsetY:number SetFloatingHelpTextToEntity -N_0xb09d25e77c33eb3f c VEHICLE 0xB09D25E77C33EB3F boolean,integer ped:Ped,vehicle:Vehicle IsPedExclusiveDriverOfVehicle +N_0xb09d25e77c33eb3f c VEHICLE 0xB09D25E77C33EB3F boolean,integer ped:Ped,vehicle:Vehicle,outIndex?:integer IsPedExclusiveDriverOfVehicle N_0xb0a6cfd2c69c1088 c TASK 0xB0A6CFD2C69C1088 ped:Ped,signalName:string,value:boolean SetTaskMoveNetworkSignalBool N_0xb0ad1238a709b1a2 c VEHICLE 0xB0AD1238A709B1A2 boolean boat:Vehicle IsBoatAnchored N_0xb0c56bd3d808d863 c LOADINGSCREEN 0xB0C56BD3D808D863 toggle:boolean LoadingscreenSetLoadFreemode @@ -5257,7 +5314,7 @@ N_0xb2ebe8cbc58b90e9 c GRAPHICS 0xB2EBE8CBC58B90E9 any N_0xb309ebea797e001f c NETWORK 0xB309EBEA797E001F any p0:any N_0xb328dcc3a3aa401b c ENTITY 0xB328DCC3A3AA401B integer entity:Entity GetEntityBoneCount N_0xb3352e018d6f89df c PED 0xB3352E018D6F89DF toggle:boolean -N_0xb335f761606db47c c MISC 0xB335F761606DB47C boolean p1:any,p2:any,p3:any,p4:boolean GetBaseElementMetadata +N_0xb335f761606db47c c MISC 0xB335F761606DB47C boolean,integer,integer p3:any,p4:boolean GetBaseElementMetadata N_0xb37e4e6a2388ca7b c NETWORK 0xB37E4E6A2388CA7B boolean N_0xb3c641f3630bf6da c GRAPHICS 0xB3C641F3630BF6DA p0:number N_0xb3cd58cca6cda852 c MISC 0xB3CD58CCA6CDA852 ClearTacticalAnalysisPoints @@ -5288,7 +5345,7 @@ N_0xb542de8c3d1cb210 c AUDIO 0xB542DE8C3D1CB210 p0:boolean N_0xb552929b85fc27ec c HUD 0xB552929B85FC27EC p0:any,p1:any N_0xb569f41f3e7e83a4 c GRAPHICS 0xB569F41F3E7E83A4 p0:any N_0xb56bbbcc2955d9cb c CUTSCENE 0xB56BBBCC2955D9CB boolean CanRequestAssetsForCutsceneEntity -N_0xb57a49545ba53ce7 c NETWORK 0xB57A49545BA53CE7 boolean networkHandle:any NetworkCanViewGamerUserContent +N_0xb57a49545ba53ce7 c NETWORK 0xB57A49545BA53CE7 boolean,integer networkHandle?:integer NetworkCanViewGamerUserContent N_0xb57d8dd645cfa2cf c HUD 0xB57D8DD645CFA2CF ClearReminderMessage N_0xb5a4db34fe89b88a c STREAMING 0xB5A4DB34FE89B88A InitCreatorBudget N_0xb5b58e24868cb09e c MONEY 0xB5B58E24868CB09E p0:any,p1:any,p2:any,p3:any,p4:any @@ -5303,8 +5360,8 @@ N_0xb695e2cd0a2da9ee c HUD 0xB695E2CD0A2DA9EE ThefeedSpsExtendWidescreenOff N_0xb6e6fba95c7324ac c OBJECT 0xB6E6FBA95C7324AC doorHash:Hash,ajar:number,requestDoor:boolean,forceUpdate:boolean DoorSystemSetOpenRatio N_0xb7257ba2550ea10a c STATS 0xB7257BA2550EA10A p0:any,p1:any,p2:any,p3:any,p4:any,p5:any,p6:any PlaystatsCopyRankIntoNewSlot N_0xb743f735c03d7810 c PHYSICS 0xB743F735C03D7810 ropeId:integer,p1:integer -N_0xb746d20b17f2a229 c NETWORK 0xB746D20B17F2A229 boolean p0:any,p1:any -N_0xb782f8238512bad5 c PED 0xB782F8238512BAD5 p0:any,p1:any SpawnpointsGetSearchResultFlags +N_0xb746d20b17f2a229 c NETWORK 0xB746D20B17F2A229 boolean,integer,integer +N_0xb782f8238512bad5 c PED 0xB782F8238512BAD5 integer p0:any,p1?:integer SpawnpointsGetSearchResultFlags N_0xb7b873520c84c118 c HUD 0xB7B873520C84C118 N_0xb7c6d80fb371659a c OBJECT 0xB7C6D80FB371659A N_0xb7c7f6ad6424304b c NETWORK 0xB7C7F6AD6424304B NetworkUpdatePlayerScars @@ -5315,7 +5372,7 @@ N_0xb846f547d3792df6 c MONEY 0xB846F547D3792DF6 p0:any,p1:any,p2:any NetworkEar N_0xb8721407ee9c3ff6 c MISC 0xB8721407EE9C3FF6 x:number,y:number,z:number AddTacticalAnalysisPoint N_0xb885852c39cc265d c PLAYER 0xB885852C39CC265D N_0xb893215d8d4c015b c VEHICLE 0xB893215D8D4C015B plane:Vehicle,height:integer SetTaskVehicleGotoPlaneMinHeightAboveTerrain -N_0xb8b52e498014f5b0 c PED 0xB8B52E498014F5B0 boolean ped:Ped +N_0xb8b52e498014f5b0 c PED 0xB8B52E498014F5B0 boolean ped:Ped IsPedSheltered N_0xb8f87ead7533b176 c MISC 0xB8F87EAD7533B176 amplitude:number WaterOverrideSetShorewaveamplitude N_0xb8fbc8b1330ca9b4 c VEHICLE 0xB8FBC8B1330CA9B4 vehicle:Vehicle,toggle:boolean SetVehicleKeepEngineOnWhenAbandoned N_0xb9351a07a0d458b1 c NETWORK 0xB9351A07A0D458B1 any p0:any @@ -5388,14 +5445,14 @@ N_0xbeb2d9a1d9a8f55a c STREAMING 0xBEB2D9A1D9A8F55A p0:any,p1:any,p2:any,p3:any N_0xbeb3d46bb7f043c0 c GRAPHICS 0xBEB3D46BB7F043C0 tvChannel:integer ClearTvChannelPlaylist N_0xbec0816ff5acbcda c NETWORK 0xBEC0816FF5ACBCDA player:Player,toggle:boolean ActivateDamageTrackerOnPlayer N_0xbed8ca5ff5e04113 c STREAMING 0xBED8CA5FF5E04113 p0:number,p1:number,p2:number,p3:number -N_0xbed9f5693f34ed17 c STATS 0xBED9F5693F34ED17 boolean,number statName:Hash,p1:integer +N_0xbed9f5693f34ed17 c STATS 0xBED9F5693F34ED17 boolean,number statName:Hash,p1:integer,outValue?:number N_0xbedb96a7584aa8cf c DATAFILE 0xBEDB96A7584AA8CF boolean DatafileIsSavePending N_0xbef34b1d9624d5dd c AUDIO 0xBEF34B1D9624D5DD p0:boolean N_0xbf09786a7fcab582 c NETWORK 0xBF09786A7FCAB582 string p0:any UgcGetContentName N_0xbf22e0f32968e967 c NETWORK 0xBF22E0F32968E967 player:Player,p1:boolean N_0xbf371cd2b64212fd c STATS 0xBF371CD2B64212FD p0:any N_0xbf4dc1784be94dfa c AUDIO 0xBF4DC1784BE94DFA ped:Ped,useSweetner:boolean,soundSetHash:Hash UseFootstepScriptSweeteners -N_0xbf4f34a85ca2970c c HUD 0xBF4F34A85CA2970C +N_0xbf4f34a85ca2970c c HUD 0xBF4F34A85CA2970C DrawHudOverFadeThisFrame N_0xbf59707b3e5ed531 c GRAPHICS 0xBF59707B3E5ED531 modifierName:string SetNextPlayerTcmodifier N_0xbf72910d0f26f025 c CAM 0xBF72910D0F26F025 any N_0xbfa0a56a817c6c7d c SOCIALCLUB 0xBFA0A56A817C6C7D toggle:boolean SetHandleRockstarMessageViaScript @@ -5414,8 +5471,8 @@ N_0xc0d2af00bcc234ca c NETWORK 0xC0D2AF00BCC234CA boolean NetworkIsLocalTalking N_0xc0e0d686ddfc6eae c STATS 0xC0E0D686DDFC6EAE any N_0xc0ed6438e6d39ba8 c VEHICLE 0xC0ED6438E6D39BA8 p0:any,p1:any,p2:any N_0xc10322a8d3e061ee c MONEY 0xC10322A8D3E061EE p0:any,p1:any NetworkEarnFromUpgradeAutoshopLocation -N_0xc116ff9b4d488291 c NETWORK 0xC116FF9B4D488291 boolean p0:any,p1:any,p2:any,p3:any NetworkSendPresenceTransitionInvite -N_0xc13c38e47ea5df31 c NETSHOPPING 0xC13C38E47EA5DF31 boolean p0:any +N_0xc116ff9b4d488291 c NETWORK 0xC116FF9B4D488291 boolean,integer,integer p2:any,p3:any NetworkSendPresenceTransitionInvite +N_0xc13c38e47ea5df31 c NETSHOPPING 0xC13C38E47EA5DF31 boolean,integer p0?:integer N_0xc141b8917e0017ec c STATS 0xC141B8917E0017EC N_0xc1447451ddb512f0 c NETWORK 0xC1447451DDB512F0 p0:any,p1:any NetworkUgcNav N_0xc14bd9f5337219b2 c STATS 0xC14BD9F5337219B2 p0:any @@ -5449,16 +5506,16 @@ N_0xc35a6d07c93802b2 c GRAPHICS 0xC35A6D07C93802B2 N_0xc361aa040d6637a8 c VEHICLE 0xC361AA040D6637A8 vehicle:Vehicle,p1:boolean N_0xc3654a441402562d c CAM 0xC3654A441402562D camera:Cam,p1:number SetCamDofMaxNearInFocusDistance N_0xc388a0f065f5bc34 c PLAYER 0xC388A0F065F5BC34 player:Player,limit:number SetPlayerHealthRechargeLimit -N_0xc38dc1e90d22547c c STATS 0xC38DC1E90D22547C boolean p0:any,p1:any,p2:any Leaderboards2ReadRankPrediction +N_0xc38dc1e90d22547c c STATS 0xC38DC1E90D22547C boolean,integer,integer,integer Leaderboards2ReadRankPrediction N_0xc3ac2fff9612ac81 c RECORDING 0xC3AC2FFF9612AC81 mode:integer StartRecording N_0xc3bfed92026a2aad c NETWORK 0xC3BFED92026A2AAD hash:Hash,p1:integer,p2:integer,state:integer,p4:integer NetworkTransitionTrack N_0xc3c221addde31a11 c MISC 0xC3C221ADDDE31A11 p0:number WaterOverrideFadeOut -N_0xc3c7a6afdb244624 c NETWORK 0xC3C7A6AFDB244624 boolean,integer p1:any,p2:any,p3:any NetworkSendInviteViaPresence +N_0xc3c7a6afdb244624 c NETWORK 0xC3C7A6AFDB244624 boolean,integer,integer p2:any,p3:any NetworkSendInviteViaPresence N_0xc3ead29ab273ece8 c MISC 0xC3EAD29AB273ECE8 minAmplitude:number WaterOverrideSetShorewaveminamplitude N_0xc406be343fc4b9af c HUD 0xC406BE343FC4B9AF boolean IsSocialClubActive N_0xc4278f70131baa6d c HUD 0xC4278F70131BAA6D blip:Blip,toggle:boolean SetBlipDisplayIndicatorOnBlip N_0xc42dd763159f3461 c NETWORK 0xC42DD763159F3461 boolean -N_0xc434133d9ba52777 c NETWORK 0xC434133D9BA52777 any,integer p0:any +N_0xc434133d9ba52777 c NETWORK 0xC434133D9BA52777 any,integer p0:any,TypeOfWeapon?:integer N_0xc45c27ef50f36adc c VEHICLE 0xC45C27EF50F36ADC vehicle:Vehicle,toggle:boolean SetVehicleUsePlayerLightSettings N_0xc4637a6d03c24cc3 c DLC 0xC4637A6D03C24CC3 boolean N_0xc485e07e4f0b7958 c OBJECT 0xC485E07E4F0B7958 doorHash:Hash,removed:boolean,requestDoor:boolean,forceUpdate:boolean DoorSystemSetSpringRemoved @@ -5495,8 +5552,8 @@ N_0xc6e0e2616a7576bb c STATS 0xC6E0E2616A7576BB any N_0xc6e74cf8c884c880 c MONEY 0xC6E74CF8C884C880 p0:any,p1:any,p2:any,p3:any,p4:any,p5:any,p6:any N_0xc6f580e4c94926ac c HUD 0xC6F580E4C94926AC integer txdName:string,textureName:string,flash:boolean,iconType:integer,sender:string,subject:string EndTextCommandThefeedPostMessagetextGxtEntry N_0xc70ddce56d0d3a99 c STATS 0xC70DDCE56D0D3A99 boolean StatSaveMigrationStatusStart -N_0xc729991a9065376e c STATS 0xC729991A9065376E data:any PlaystatsSellContraband -N_0xc7397a83f7a2a462 c NETWORK 0xC7397A83F7A2A462 boolean data:any,count:integer,latestVersion:boolean,contentTypeName:string UgcQueryByContentIds +N_0xc729991a9065376e c STATS 0xC729991A9065376E integer data?:integer PlaystatsSellContraband +N_0xc7397a83f7a2a462 c NETWORK 0xC7397A83F7A2A462 boolean,integer count:integer,latestVersion:boolean,contentTypeName:string UgcQueryByContentIds N_0xc7420099936ce286 c NETWORK 0xC7420099936CE286 boolean tunableContext:Hash,tunableName:Hash,defaultValue:boolean NetworkTryAccessTunableBoolHash N_0xc7827959479dcc78 c NETWORK 0xC7827959479DCC78 boolean entity:Entity NetworkGetEntityIsNetworked N_0xc78e239ac5b2ddb9 c HUD 0xC78E239AC5B2DDB9 bVisible:boolean,iColumnID:integer,iSpinnerIndex:integer PauseMenuSetBusySpinner @@ -5513,19 +5570,19 @@ N_0xc8391c309684595a c CAM 0xC8391C309684595A N_0xc8407624cef2354b c MONEY 0xC8407624CEF2354B amount:integer,p1:string NetworkEarnFromPremiumJob N_0xc84527e235fca219 c DATAFILE 0xC84527E235FCA219 boolean data:string,dataCount:integer,contentName:string,description:string,tagsCsv:string,contentTypeName:string,publish:boolean UgcCreateContent N_0xc847b43f369ac0b5 c STATS 0xC847B43F369AC0B5 -N_0xc85a7127e7ad02aa c SOCIALCLUB 0xC85A7127E7AD02AA boolean,integer name:string ScGamerdataGetInt +N_0xc85a7127e7ad02aa c SOCIALCLUB 0xC85A7127E7AD02AA boolean,integer name:string,outValue?:integer ScGamerdataGetInt N_0xc87e740d9f3872cc c NETWORK 0xC87E740D9F3872CC any N_0xc88156ebb786f8d5 c NETWORK 0xC88156EBB786F8D5 any NetworkActionFollowInvite N_0xc8b1b2425604cdd0 c AUDIO 0xC8B1B2425604CDD0 boolean IsMobileInterferenceActive N_0xc8b5c4a79cc18b94 c CAM 0xC8B5C4A79CC18B94 cam:Cam -N_0xc8e1071177a23be5 c HUD 0xC8E1071177A23BE5 boolean p0:any,p1:any,p2:any +N_0xc8e1071177a23be5 c HUD 0xC8E1071177A23BE5 boolean,integer,integer,integer N_0xc8ede9bdbccba6d4 c AUDIO 0xC8EDE9BDBCCBA6D4 audioName:string,x:number,y:number,z:number InitSynchSceneAudioWithPosition N_0xc8f3aaf93d0600bf c HUD 0xC8F3AAF93D0600BF any chTitle:string,iconType:integer,chSubtitle:string,isImportant:boolean EndTextCommandThefeedPostUnlockTu N_0xc912af078af19212 c CAM 0xC912AF078AF19212 boolean IsScriptGlobalShaking N_0xc91c6c55199308ca c CAM 0xC91C6C55199308CA cam:Cam,x:number,y:number,z:number SetFlyCamCoordAndConstrain N_0xc92717ef615b6704 c CAM 0xC92717EF615B6704 yOffset:number SetGameplayHintAnimOffsety N_0xc970d0e0fc31d768 c VEHICLE 0xC970D0E0FC31D768 vehicle:Vehicle,wheelIndex:integer,multiplier:number SetTyreTractionLossMultiplier -N_0xc980e62e33df1d5c c STATS 0xC980E62E33DF1D5C boolean p0:any,p1:any Leaderboards2WriteDataForEventType +N_0xc980e62e33df1d5c c STATS 0xC980E62E33DF1D5C boolean,integer,integer Leaderboards2WriteDataForEventType N_0xc9a763d8fe87436a c PLAYER 0xC9A763D8FE87436A player:Player SpecialAbilityChargeOnMissionFailed N_0xc9b18b4619f48f7b c GRAPHICS 0xC9B18B4619F48F7B p0:number FadeUpPedLight N_0xc9b43a33d09cada7 c NETWORK 0xC9B43A33D09CADA7 sceneId:integer NetworkForceLocalUseOfSyncedSceneCamera @@ -5535,7 +5592,7 @@ N_0xca4ae345a153d573 c GRAPHICS 0xCA4AE345A153D573 p0:boolean N_0xca4cea6ae0000a7e c AUDIO 0xCA4CEA6AE0000A7E model:Hash PreloadVehicleAudioBank N_0xca575c391fea25cc c NETWORK 0xCA575C391FEA25CC p0:any N_0xca59ccae5d01e4ce c NETWORK 0xCA59CCAE5D01E4CE -N_0xca6b2f7ce32ab653 c HUD 0xCA6B2F7CE32AB653 boolean p0:any,p1:any,p2:any +N_0xca6b2f7ce32ab653 c HUD 0xCA6B2F7CE32AB653 boolean,integer p0:any,p2:any N_0xca78cfa0366592fe c MISC 0xCA78CFA0366592FE keyboardType:integer,windowTitle:string,description:string,defaultText:string,defaultConcat1:string,defaultConcat2:string,defaultConcat3:string,defaultConcat4:string,defaultConcat5:string,defaultConcat6:string,defaultConcat7:string,maxInputLength:integer DisplayOnscreenKeyboardWithLongerInitialString N_0xca94551b50b4932c c NETWORK 0xCA94551B50B4932C string index:integer GetCommerceProductPrice N_0xca9d2aa3e326d720 c CAM 0xCA9D2AA3E326D720 boolean IsCinematicIdleCamRendering @@ -5555,7 +5612,7 @@ N_0xcc3fdded67bcfc63 c HUD 0xCC3FDDED67BCFC63 AllowPauseMenuWhenDeadThisFrame N_0xcc6e3b6bb69501f1 c PED 0xCC6E3B6BB69501F1 boolean groupHash:Hash DoesRelationshipGroupExist N_0xcc6e963682533882 c PHYSICS 0xCC6E963682533882 object:Object N_0xcc9682b8951c5229 c PED 0xCC9682B8951C5229 ped:Ped,r:integer,g:integer,b:integer,id:integer SetHeadBlendPaletteColor -N_0xcca4318e1ab03f1f c NETWORK 0xCCA4318E1AB03F1F boolean networkHandle:any NetworkHasViewGamerUserContentResult +N_0xcca4318e1ab03f1f c NETWORK 0xCCA4318E1AB03F1F boolean,integer networkHandle?:integer NetworkHasViewGamerUserContentResult N_0xccd078c2665d2973 c CAM 0xCCD078C2665D2973 p0:boolean N_0xcce26000e9a6fad7 c STREAMING 0xCCE26000E9A6FAD7 ShutdownCreatorBudget N_0xccf1e97befdae480 c ENTITY 0xCCF1E97BEFDAE480 boolean entity:Entity GetEntityCollisionDisabled @@ -5570,7 +5627,7 @@ N_0xcd9cc7e200a52a6f c PED 0xCD9CC7E200A52A6F scene:integer TakeOwnershipOfSync N_0xcda1c62be2777802 c MONEY 0xCDA1C62BE2777802 p0:any,p1:any,p2:any NetworkEarnGoon N_0xcda42c4bb9bde779 c AUDIO 0x0350E7E17BA767D0 vehicle:Vehicle,value:integer SetVehicleHornVariation N_0xcdca26e80faecb8f c HUD 0xCDCA26E80FAECB8F PauseMenuceptionTheKick -N_0xce5aa445aba8dee0 c STATS 0xCE5AA445ABA8DEE0 integer,integer StatGetSaveMigrationConsumeContentUnlockStatus +N_0xce5aa445aba8dee0 c STATS 0xCE5AA445ABA8DEE0 integer,integer p0?:integer StatGetSaveMigrationConsumeContentUnlockStatus N_0xce5d0e5e315db238 b HUD 0xCE5D0E5E315DB238 Blip x:number,y:number,z:number,width:number,height:number AddBlipForArea N_0xce6294a232d03786 c ENTITY 0xCE6294A232D03786 vector3 entity:Entity,boneIndex:integer GetEntityBoneRotation N_0xcea553e35c2246e1 c STATS 0xCEA553E35C2246E1 p0:any,p1:any,vehicleHash:Hash OrderedBossVehicle @@ -5582,11 +5639,11 @@ N_0xcef70aa5b3f89ba1 c NETWORK 0xCEF70AA5B3F89BA1 boolean NetworkSessionIsPriva N_0xcefa968912d0f78d c NETWORK 0xCEFA968912D0F78D integer NetworkGetNumPresenceInvites N_0xcf1182f682f65307 c VEHICLE 0xCF1182F682F65307 cargobob:Vehicle,p1:number SetCargobobPickupRopeDampingMultiplier N_0xcf228e2aa03099c3 c HUD 0xCF228E2AA03099C3 gamerTagId:integer,wantedlvl:integer SetMpGamerTagWantedLevel -N_0xcf38dafbb49ede5e c NETSHOPPING 0xCF38DAFBB49EDE5E boolean,integer NetGameserverGetCatalogState +N_0xcf38dafbb49ede5e c NETSHOPPING 0xCF38DAFBB49EDE5E boolean,integer state?:integer NetGameserverGetCatalogState N_0xcf61d4b4702ee9eb c NETWORK 0xCF61D4B4702EE9EB integer NetworkGetTotalNumPlayers N_0xcf8bd3b0bd6d42d7 c NETWORK 0xCF8BD3B0BD6D42D7 netScene:integer,animDict:string,animName:string NetworkAddSynchronisedSceneCamera N_0xcf9159024555488c c VEHICLE 0xCF9159024555488C p0:any -N_0xcfd115b373c0df63 c NETWORK 0xCFD115B373C0DF63 p0:any,p1:any UgcGetContentUpdatedDate +N_0xcfd115b373c0df63 c NETWORK 0xCFD115B373C0DF63 integer p0:any,p1?:integer UgcGetContentUpdatedDate N_0xcfd16f0db5a3535c c GRAPHICS 0xCFD16F0DB5A3535C toggle:boolean N_0xcfd778e7904c255e c VEHICLE 0xCFD778E7904C255E vehicle:Vehicle N_0xcfdbdf5ae59ba0f4 c HUD 0xCFDBDF5AE59BA0F4 p0:boolean EndTextCommandObjective @@ -5597,7 +5654,7 @@ N_0xd00d76a7dfc9d852 c CUTSCENE 0xD00D76A7DFC9D852 cutsceneName:string RemoveCu N_0xd01005d2ba2eb778 c AUDIO 0xD01005D2BA2EB778 mode:string ActivateAudioSlowmoMode N_0xd01015c7316ae176 c TASK 0xD01015C7316AE176 boolean ped:Ped,name:string RequestTaskMoveNetworkStateTransition N_0xd05a3241b9a86f19 c OBJECT 0xD05A3241B9A86F19 p0:any,p1:any -N_0xd05d1a6c74da3498 c NETWORK 0xD05D1A6C74DA3498 boolean p0:any,p1:boolean,p2:any UgcSetDeleted +N_0xd05d1a6c74da3498 c NETWORK 0xD05D1A6C74DA3498 boolean,integer,integer p1:boolean UgcSetDeleted N_0xd0917a423314bba8 c VEHICLE 0xD0917A423314BBA8 boolean aircraft:Vehicle AreBombBayDoorsOpen N_0xd0a484cb2f829fbe c NETWORK 0xD0A484CB2F829FBE boolean NetworkIsTransitionVisibilityLocked N_0xd0bc1c6fb18ee154 c PATHFIND 0xD0BC1C6FB18EE154 x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,index:integer SetGpsDisabledZoneAtIndex @@ -5661,14 +5718,14 @@ N_0xd53f3a29bce2580e c AUDIO 0xD53F3A29BCE2580E integer vehicle:Vehicle GetVehic N_0xd558bec0bba7e8d2 c STATS 0xD558BEC0BBA7E8D2 p0:any,p1:any,p2:any,p3:any,p4:any N_0xd565f438137f0e10 c VEHICLE 0xD565F438137F0E10 p0:any,p1:any N_0xd57aaae0e2214d11 c AUDIO 0xD57AAAE0E2214D11 FreezeMicrophone -N_0xd5a4b59980401588 c NETWORK 0xD5A4B59980401588 boolean p0:any,p1:any,p2:any,p3:any UgcGetBookmarkedContent +N_0xd5a4b59980401588 c NETWORK 0xD5A4B59980401588 boolean,integer,integer p0:any,p1:any UgcGetBookmarkedContent N_0xd5b35bea41919acb c TASK 0xD5B35BEA41919ACB ped:Ped,p1:string,p2:number,p3:number,p4:number,p5:number,p6:number,p7:number,p8:any,p9:number,p10:boolean,animDict:string,flags:integer TaskMoveNetworkAdvancedByName N_0xd5bb4025ae449a4e c TASK 0xD5BB4025AE449A4E ped:Ped,signalName:string,value:number SetTaskMoveNetworkSignalFloat N_0xd5bb406f4e04019f c MONEY 0xD5BB406F4E04019F p0:any,p1:boolean,p2:boolean NetworkSpentNoCops N_0xd642319c54aadeb6 c MISC 0xD642319C54AADEB6 any N_0xd6429a016084f1a5 c OBJECT 0xD6429A016084F1A5 Hash weapon:Hash GetPickupHashFromWeapon -N_0xd66c9e72b3cc4982 c NETWORK 0xD66C9E72B3CC4982 integer p0:any,p1:any NetworkDisplaynamesFromHandlesStart -N_0xd6781e42755531f7 c STATS 0xD6781E42755531F7 data:any PlaystatsBuyContraband +N_0xd66c9e72b3cc4982 c NETWORK 0xD66C9E72B3CC4982 integer,integer p1:any NetworkDisplaynamesFromHandlesStart +N_0xd6781e42755531f7 c STATS 0xD6781E42755531F7 integer data?:integer PlaystatsBuyContraband N_0xd68a5ff8a3a89874 c HUD 0xD68A5FF8A3A89874 r:integer,g:integer,b:integer,a:integer SetScriptVariableHudColour N_0xd69411aa0cebf9e9 c PED 0xD69411AA0CEBF9E9 ped:Ped,r:integer,g:integer,b:integer SetPedEnveffColorModulator N_0xd6ade981781fca09 c MOBILE 0xD6ADE981781FCA09 p0:number CellCamSetHeadPitch @@ -5676,7 +5733,7 @@ N_0xd6ca58b3b53a0f22 c STATS 0xD6CA58B3B53A0F22 p0:any N_0xd6d7478ca62b8d41 c NETWORK 0xD6D7478CA62B8D41 p0:any,p1:any N_0xd7021272eb0a451e c GRAPHICS 0xD7021272EB0A451E timecycleModifierName:string PresetInteriorAmbientCache N_0xd7360051c885628b c CAM 0xD7360051C885628B boolean IsBonnetCinematicCamRendering -N_0xd76eeef746057fd6 c OBJECT 0xD76EEEF746057FD6 boolean object:Object PlaceObjectOnGroundProperly_2 +N_0xd76eeef746057fd6 c OBJECT 0xD76EEEF746057FD6 boolean object:Object PlaceObjectOnGroundOrObjectProperly N_0xd79185689f8fd5df c MISC 0xD79185689F8FD5DF toggle:boolean SetStuntJumpsCanTrigger N_0xd7b6c73cad419bcf c NETWORK 0xD7B6C73CAD419BCF p0:boolean N_0xd7b80e7c3befc396 c ENTITY 0xD7B80E7C3BEFC396 entity:Entity,toggle:boolean SetPickUpByCargobobDisabled @@ -5693,7 +5750,7 @@ N_0xd821056b9acf8052 c PLAYER 0xD821056B9ACF8052 player:Player,p1:any N_0xd8295af639fd9cb8 c STREAMING 0xD8295AF639FD9CB8 ped:Ped SwitchToMultiSecondpart N_0xd86d101fcfd00a4b c PED 0xD86D101FCFD00A4B ped:Ped,flags:integer ClearRagdollBlockingFlags N_0xd8c3be3ee94caf2d c PED 0xD8C3BE3EE94CAF2D x:number,y:number,z:number,min:number,max:number SetPopControlSphereThisFrame -N_0xd8e694757bcea8e9 c HUD 0xD8E694757BCEA8E9 DeleteWaypoint +N_0xd8e694757bcea8e9 c HUD 0xD8E694757BCEA8E9 DeleteWaypointsFromThisPlayer N_0xd9454b5752c857dc c GRAPHICS 0xD9454B5752C857DC SetDisablePetrolDecalsIgnitingThisFrame N_0xd95cc5d2ab15a09f c ENTITY 0xD95CC5D2AB15A09F boolean entity:Entity GetEntityCanBeDamaged N_0xd972df67326f966e c NETWORK 0xD972DF67326F966E NetworkClearClockTimeOverride @@ -5701,11 +5758,11 @@ N_0xd99db210089617fe c MONEY 0xD99DB210089617FE p0:any,p1:any,amount:integer Ne N_0xd9b71952f78a2640 c OBJECT 0xD9B71952F78A2640 doorHash:Hash,toggle:boolean DoorSystemSetHoldOpen N_0xd9d2cfff49fab35f c STREAMING 0xD9D2CFFF49FAB35F boolean IsPlayerSwitchInProgress N_0xd9f692d349249528 c MISC 0xD9F692D349249528 -N_0xda024bdbd600f44a c SOCIALCLUB 0xDA024BDBD600F44A integer ScInboxMessagePushGamerToEventRecipList +N_0xda024bdbd600f44a c SOCIALCLUB 0xDA024BDBD600F44A integer networkHandle?:integer ScInboxMessagePushGamerToEventRecipList N_0xda05194260cdcdf9 c OBJECT 0xDA05194260CDCDF9 garageHash:Hash,isNetwork:boolean ClearGarageArea N_0xda07819e452ffe8f c AUDIO 0xDA07819E452FFE8F enabled:boolean SetPositionedPlayerVehicleRadioEmitterEnabled N_0xda62027c8bdb326e c VEHICLE 0xDA62027C8BDB326E number aircraft:Vehicle GetVehicleFlightNozzlePosition -N_0xdab963831dbfd3f4 c WEAPON 0xDAB963831DBFD3F4 boolean,integer x:number,y:number,z:number,radius:number IsAnyAirDefenseZoneInsideSphere +N_0xdab963831dbfd3f4 c WEAPON 0xDAB963831DBFD3F4 boolean,integer x:number,y:number,z:number,radius:number,SphereIndex?:integer IsAnyAirDefenseZoneInsideSphere N_0xdac073c7901f9e15 c STATS 0xDAC073C7901F9E15 value:integer SetHasContentUnlocksFlags N_0xdadfada5a20143a8 c SCRIPT 0xDADFADA5A20143A8 ScriptThreadIteratorReset N_0xdaf80797fc534bec c STATS 0xDAF80797FC534BEC p0:any @@ -5739,7 +5796,7 @@ N_0xdcfb5d4db8bf367e c HUD 0xDCFB5D4DB8BF367E blip:Blip,toggle:boolean ShowCrew N_0xdd2238f57b977751 c HUD 0xDD2238F57B977751 boolean blip:Blip DoesBlipHaveGpsRoute N_0xdd2620b7b9d16ff1 c PLAYER 0xDD2620B7B9D16FF1 boolean player:Player,p1:number N_0xdd564bdd0472c936 c HUD 0xDD564BDD0472C936 hash:Hash PauseMenuActivateContext -N_0xdd6bcf9e94425df9 c AUDIO 0xDD6BCF9E94425DF9 +N_0xdd6bcf9e94425df9 c AUDIO 0xDD6BCF9E94425DF9 SetRadioRetuneDown N_0xdd6cb2cce7c2735c c HUD 0xDD6CB2CCE7C2735C integer type:integer,button:string,text:string EndTextCommandThefeedPostReplayInput N_0xdd79df9f4d26e1c9 c CAM 0xDD79DF9F4D26E1C9 N_0xdd829aa198fdc46c c MONEY 0xDD829AA198FDC46C p0:any,p1:any,p2:any,p3:any NetworkSpentUpgradeAutoshop @@ -5754,7 +5811,7 @@ N_0xde68e30d89f97132 c MONEY 0xDE68E30D89F97132 amount:integer,p1:any N_0xde81239437e8c5a8 c GRAPHICS 0xDE81239437E8C5A8 DisableScreenblurFade N_0xdea2b8283baa3944 c HUD 0xDEA2B8283BAA3944 gamerTagId:integer,string:string SetMpGamerTagName N_0xdea36202fc3382df c MISC 0xDEA36202FC3382DF toggle:boolean AllowMissionCreatorWarp -N_0xdeaaf77eb3687e97 c STATS 0xDEAAF77EB3687E97 any p0:any,p1:any +N_0xdeaaf77eb3687e97 c STATS 0xDEAAF77EB3687E97 any,integer p0:any,p1?:integer N_0xdeadc0dedeadc0de c GRAPHICS 0xDEADC0DEDEADC0DE entity:Entity UpdateLightsOnEntity N_0xdeb2b99a1af1a2a6 c NETWORK 0xDEB2B99A1AF1A2A6 integer netHandle:any NetworkStartUserContentPermissionsCheck N_0xded5af5a0ea4b297 c PED 0xDED5AF5A0EA4B297 driver:Ped,modifier:number SetDriverRacingModifier @@ -5790,7 +5847,7 @@ N_0xe154b48b68ef72bc c MONEY 0xE154B48B68EF72BC boolean p0:any N_0xe16142b94664defd c VEHICLE 0xE16142B94664DEFD vehicle:Vehicle,toggle:boolean SetPlaneResistToExplosion N_0xe1615ec03b3bb4fd c PAD 0xE1615EC03B3BB4FD boolean N_0xe16aa70ce9beedc3 c NETWORK 0xE16AA70CE9BEEDC3 any p0:any -N_0xe1a0450ed46a7812 c NETSHOPPING 0xE1A0450ED46A7812 boolean p0:any,p1:any NetGameserverBasketApplyServerData +N_0xe1a0450ed46a7812 c NETSHOPPING 0xE1A0450ED46A7812 boolean,integer p0:any,p1?:integer NetGameserverBasketApplyServerData N_0xe1c8709406f2c41c c GRAPHICS 0xE1C8709406F2C41C ResetPausedRenderphases N_0xe1ca84ebf72e691d c FILES 0xE1CA84EBF72E691D Hash,integer,integer componentHash:Hash,forcedPropIndex:integer GetForcedProp N_0xe1cd1e48e025e661 c HUD 0xE1CD1E48E025E661 ThefeedResume @@ -5818,7 +5875,7 @@ N_0xe3a7742e0b7a2f8b c MISC 0xE3A7742E0B7A2F8B x1:number,y1:number,z1:number,x2 N_0xe3b05614dce1d014 c HUD 0xE3B05614DCE1D014 integer flagIndex:integer GetGlobalActionscriptFlag N_0xe3b27e70ceab9f0c c PED 0xE3B27E70CEAB9F0C ped:Ped ClearPedDecorationsLeaveScars N_0xe3d969d2785ffb5e c MISC 0xE3D969D2785FFB5E -N_0xe3e2c1b4c59dbc77 c GRAPHICS 0xE3E2C1B4C59DBC77 unk:integer +N_0xe3e2c1b4c59dbc77 c GRAPHICS 0xE3E2C1B4C59DBC77 numFrames:integer ResetAdaptation N_0xe3e5a7c64ca2c6ed c NETSHOPPING 0xE3E5A7C64CA2C6ED any N_0xe3ebaae484798530 c VEHICLE 0xE3EBAAE484798530 boat:Vehicle,toggle:boolean SetBoatRemainsAnchoredWhilePlayerIsDriver N_0xe41033b25d003a07 c VEHICLE 0xE41033B25D003A07 vehicle:Vehicle,color:integer SetVehicleXenonLightsColor @@ -5839,7 +5896,7 @@ N_0xe52b8e7f85d39a08 c HUD 0xE52B8E7F85D39A08 ped:Ped,gangId:integer SetPedAiBl N_0xe532d6811b3a4d2a c NETWORK 0xE532D6811B3A4D2A boolean p0:any NetworkFindGamersInCrew N_0xe532ec1a63231b4f c MISC 0xE532EC1A63231B4F p0:integer,p1:integer N_0xe547e9114277098f c NETSHOPPING 0xA65568121DF2EA26 boolean NetGameserverBasketEnd -N_0xe5608ca7bc163a5f c NETWORK 0xE5608CA7BC163A5F boolean,number tunableContext:string,tunableName:string NetworkAccessTunableFloat +N_0xe5608ca7bc163a5f c NETWORK 0xE5608CA7BC163A5F boolean,number tunableContext:string,tunableName:string,value?:number NetworkAccessTunableFloat N_0xe574a662acaefbb1 c MISC 0xE574A662ACAEFBB1 RestartGame N_0xe5810ac70602f2f5 c VEHICLE 0xE5810AC70602F2F5 vehicle:Vehicle,p1:number N_0xe59343e9e96529e7 c GRAPHICS 0xE59343E9E96529E7 number @@ -5852,7 +5909,7 @@ N_0xe64a3ca08dfa37a9 c NETWORK 0xE64A3CA08DFA37A9 boolean areaHandle:integer Net N_0xe66377cddada4810 c ENTITY 0xE66377CDDADA4810 entity:Entity,p1:boolean N_0xe66c690248f11150 c NETWORK 0xE66C690248F11150 ped:Ped,p1:integer NetworkApplyPedScarData N_0xe6717e652b8c8d8a c NETWORK 0xE6717E652B8C8D8A p0:any,p1:any -N_0xe67c6dfd386ea5e7 c HUD 0xE67C6DFD386EA5E7 p0:boolean +N_0xe67c6dfd386ea5e7 c HUD 0xE67C6DFD386EA5E7 allow:boolean AllowDisplayOfMultiplayerCashText N_0xe6869becdd8f2403 c MISC 0xE6869BECDD8F2403 id:integer,p1:boolean RemovePopMultiplierSphere N_0xe6a9f00d4240b519 c GRAPHICS 0xE6A9F00D4240B519 scaleformHandle:integer,toggle:boolean SetScaleformMovieToUseSuperLargeRt N_0xe6ac6c45fbe83004 c SHAPETEST 0xE6AC6C45FBE83004 integer x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,radius:number,flags:integer,entity:Entity,p9:integer StartShapeTestSweptSphere @@ -5869,7 +5926,7 @@ N_0xe791df1f73ed2c8b c GRAPHICS 0xE791DF1F73ED2C8B any p0:any N_0xe7d267ec6ca966c3 c INTERIOR 0xE7D267EC6CA966C3 integer GetInteriorFromPrimaryView N_0xe7df4e0545dfb56e c MONEY 0xE7DF4E0545DFB56E amount:integer,p1:boolean,p2:boolean NetworkSpentMoveYacht N_0xe7e4c198b0185900 c OBJECT 0xE7E4C198B0185900 p0:Object,p1:any,p2:boolean BreakObjectFragmentChild -N_0xe82728f0de75d13a c GRAPHICS 0xE82728F0DE75D13A type:integer,posX:number,posY:number,posZ:number,dirX:number,dirY:number,dirZ:number,rotX:number,rotY:number,rotZ:number,scaleX:number,scaleY:number,scaleZ:number,red:integer,green:integer,blue:integer,alpha:integer,bobUpAndDown:boolean,faceCamera:boolean,p19:integer,rotate:boolean,textureDict:string,textureName:string,drawOnEnts:boolean,p24:boolean DrawMarker_2 +N_0xe82728f0de75d13a c GRAPHICS 0xE82728F0DE75D13A type:integer,posX:number,posY:number,posZ:number,dirX:number,dirY:number,dirZ:number,rotX:number,rotY:number,rotZ:number,scaleX:number,scaleY:number,scaleZ:number,red:integer,green:integer,blue:integer,alpha:integer,bobUpAndDown:boolean,faceCamera:boolean,rotationOrder:integer,rotate:boolean,textureDict:string,textureName:string,drawOnEnts:boolean,p24:boolean DrawMarker_2 N_0xe827b9382cfb41ba c CAM 0xE827B9382CFB41BA cam:Cam,p1:number,p2:number,p3:number SetFlyCamVerticalSpeedMultiplier N_0xe83a3e3557a56640 c GRAPHICS 0xE83A3E3557A56640 string:string ScaleformMovieMethodAddParamPlayerNameString N_0xe842a9398079bd82 c VEHICLE 0xE842A9398079BD82 boat:Vehicle,value:number SetBoatLowLodAnchorDistance @@ -5894,23 +5951,23 @@ N_0xea2f2061875eed90 c MISC 0xEA2F2061875EED90 boolean UiStartedEndUserBenchmar N_0xea8c0ddb10e2822a c NETWORK 0xEA8C0DDB10E2822A p0:any,p1:any N_0xea95c0853a27888e c SOCIALCLUB 0xEA95C0853A27888E N_0xea9960d07dadcf10 c PED 0xEA9960D07DADCF10 integer p0:any -N_0xeaf0fa793d05c592 c CAM 0xEAF0FA793D05C592 any +N_0xeaf0fa793d05c592 c CAM 0xEAF0FA793D05C592 boolean IsAllowedIndependentCameraModes N_0xeaf66acddc794793 c TASK 0xEAF66ACDDC794793 ped:Ped,x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,minZ:number,ropeId:integer,clipset:string,p10:any TaskRappelDownWall N_0xeb078ca2b5e82add c MISC 0xEB078CA2B5E82ADD p0:any,p1:any N_0xeb2104e905c6f2e9 c MISC 0xEB2104E905C6F2E9 any -N_0xeb2bf817463dfa28 c SOCIALCLUB 0xEB2BF817463DFA28 boolean,integer string:string ScProfanityCheckUgcString +N_0xeb2bf817463dfa28 c SOCIALCLUB 0xEB2BF817463DFA28 boolean,integer string:string,token?:integer ScProfanityCheckUgcString N_0xeb2d525b57f42b40 c RECORDING 0xEB2D525B57F42B40 StopRecordingThisFrame N_0xeb354e5376bc81a7 c HUD 0xEB354E5376BC81A7 show:boolean HudForceWeaponWheel N_0xeb3dac2c86001e5e c GRAPHICS 0xEB3DAC2C86001E5E boolean GetTogglePausedRenderphasesStatus N_0xeb4a0c2d56441717 c MISC 0xEB4A0C2D56441717 integer dispatchService:integer GetNumDispatchedUnitsForPlayer N_0xeb6891f03362fb12 c MISC 0xEB6891F03362FB12 QuitGame N_0xeb6f1a9b5510a5d2 c OBJECT 0xEB6F1A9B5510A5D2 p0:any,p1:boolean -N_0xeb709a36958abe0d c HUD 0xEB709A36958ABE0D boolean gamerTagId:integer IsValidMpGamerTagMovie +N_0xeb709a36958abe0d c HUD 0xEB709A36958ABE0D boolean playerId:integer IsUpdatingMpGamerTagNameAndCrewDetails N_0xeb81a3dadd503187 c HUD 0xEB81A3DADD503187 N_0xebb376779a760aa8 c PED 0xEBB376779A760AA8 boolean IsPedheadshotImgUploadAvailable N_0xebcab9e5048434f4 c NETWORK 0xEBCAB9E5048434F4 any N_0xebd0edba5be957cf c PED 0xEBD0EDBA5BE957CF boolean ped:Ped IsPedPerformingDependentComboLimit -N_0xebd3205a207939ed c MISC 0xEBD3205A207939ED p0:any +N_0xebd3205a207939ed c MISC 0xEBD3205A207939ED integer p0?:integer N_0xebefc2e77084f599 c NETWORK 0xEBEFC2E77084F599 p0:integer,string:string,p2:boolean NetworkApplyTransitionParameterString N_0xebf8284d8cadeb53 c NETWORK 0xEBF8284D8CADEB53 N_0xebfa8d50addc54c4 c NETWORK 0xEBFA8D50ADDC54C4 boolean p0:any @@ -5946,7 +6003,7 @@ N_0xee778f8c7e1142e2 c CAM 0xEE778F8C7E1142E2 integer context:integer GetCamView N_0xee99784e4467689c c MONEY 0xEE99784E4467689C p0:any,p1:boolean,p2:any,p3:boolean NetworkSpentInStripclub N_0xeea5ac2eda7c33e8 c INTERIOR 0xEEA5AC2EDA7C33E8 boolean x:number,y:number,z:number IsCollisionMarkedOutside N_0xeeb7e5d1feb20869 c MONEY 0xEEB7E5D1FEB20869 p0:any,p1:any,p2:any,p3:any NetworkSpentBuyAutoshop -N_0xeebfc7a7efdc35b4 c VEHICLE 0xEEBFC7A7EFDC35B4 integer vehicle:Vehicle +N_0xeebfc7a7efdc35b4 c VEHICLE 0xEEBFC7A7EFDC35B4 integer vehicle:Vehicle GetVehicleColoursWhichCanBeSet N_0xeeed8fafec331a70 c PED 0xEEED8FAFEC331A70 any ped:Ped,p1:any,p2:any,p3:any SetPedShouldPlayFleeScenarioExit N_0xeeeda5e6d7080987 c NETWORK 0xEEEDA5E6D7080987 p0:any,p1:any NetworkChangeTransitionSlots N_0xef0912ddf7c4cb4b c NETWORK 0xEF0912DDF7C4CB4B boolean NetworkSessionIsVoiceSessionBusy @@ -5954,10 +6011,10 @@ N_0xef0d582cbf2d9b0f c PED 0xEF0D582CBF2D9B0F ped:Ped,component:integer,u:numbe N_0xef398beee4ef45f9 c GRAPHICS 0xEF398BEEE4EF45F9 p0:boolean N_0xef39ee20c537e98c c STREAMING 0xEF39EE20C537E98C p0:any,p1:any,p2:any,p3:any,p4:any,p5:any N_0xef49cf0270307cbe c VEHICLE 0xEF49CF0270307CBE DetonateVehiclePhoneExplosiveDevice -N_0xef4ced81cebedc6d c HUD 0xEF4CED81CEBEDC6D boolean p0:any,p1:any GetMenuPedIntStat +N_0xef4ced81cebedc6d c HUD 0xEF4CED81CEBEDC6D boolean,integer p0:any,p1?:integer GetMenuPedIntStat N_0xef7d17bc6c85264c c LOADINGSCREEN 0xEF7D17BC6C85264C boolean LoadingscreenGetLoadFreemode N_0xef9d388f8d377f44 c VEHICLE 0xEF9D388F8D377F44 vehicle:Vehicle,p1:boolean -N_0xefabc7722293da7c c GRAPHICS 0xEFABC7722293DA7C +N_0xefabc7722293da7c c GRAPHICS 0xEFABC7722293DA7C AdjustNextPosSizeAsNormalized_16_9 N_0xefb55e7c25d3b3be c GRAPHICS 0xEFB55E7C25D3B3BE OverrideInteriorSmokeEnd N_0xefc13b1ce30d755d c VEHICLE 0xEFC13B1CE30D755D vehicle:Vehicle,p1:number SetVehicleRampLaunchModifier N_0xefd79fa81dfba9cb c PLAYER 0xEFD79FA81DFBA9CB player:Player,distance:number SetPlayerFallDistance @@ -5981,7 +6038,7 @@ N_0xf0eed5a6bc7b237a c OBJECT 0xF0EED5A6BC7B237A boolean garageHash:Hash,entity: N_0xf0f2103efaf8cba7 c VEHICLE 0xF0F2103EFAF8CBA7 vector3 id:integer,time:number GetRotationOfVehicleRecordingIdAtTime N_0xf0f77adb9f67e79d c INTERIOR 0xF0F77ADB9F67E79D integer x:number,y:number,z:number,typeHash:Hash GetInteriorAtCoordsWithTypehash N_0xf10b44fd479d69f3 c PLAYER 0xF10B44FD479D69F3 boolean player:Player,type:integer IsPlayerDrivingDangerously -N_0xf11f01d98113536a c STATS 0xF11F01D98113536A any,number +N_0xf11f01d98113536a c STATS 0xF11F01D98113536A any,number p0?:number N_0xf1211889df15a763 c VEHICLE 0xF1211889DF15A763 vehicle:Vehicle,toggle:boolean SetSpecialFlightModeAllowed N_0xf12e33034d887f66 c OBJECT 0xF12E33034D887F66 boolean x:number,y:number,z:number,radius:number,modelHash:Hash,textureVariation:integer SetTextureVariationOfClosestObjectOfType N_0xf12e6cd06c73d69e c NETWORK 0xF12E6CD06C73D69E string GetCloudTimeAsString @@ -5989,7 +6046,7 @@ N_0xf13fe2a80c05c561 c HUD 0xF13FE2A80C05C561 boolean N_0xf154b8d1775b2dec c AUDIO 0xF154B8D1775B2DEC blocked:boolean BlockDeathJingle N_0xf1a1803d3476f215 c STATS 0xF1A1803D3476F215 value:integer N_0xf1a6c18b35bcade6 c HUD 0xF1A6C18B35BCADE6 p0:boolean ShowStartMissionInstructionalButton -N_0xf1ae5dcdbfca2721 c STATS 0xF1AE5DCDBFCA2721 boolean p0:any,gamerHandleCsv:string,platformName:string Leaderboards2ReadByPlatform +N_0xf1ae5dcdbfca2721 c STATS 0xF1AE5DCDBFCA2721 boolean,integer gamerHandleCsv:string,platformName:string Leaderboards2ReadByPlatform N_0xf1b84178f8674195 c NETWORK 0xF1B84178F8674195 seed:integer NetworkSeedRandomNumberGenerator N_0xf1c03a5352243a30 c PED 0xF1C03A5352243A30 ped:Ped SetPedShouldPlayImmediateScenarioExit N_0xf1ca12b18aef5298 c NETWORK 0xF1CA12B18AEF5298 entity:Entity,toggle:boolean NetworkSetEntityInvisibleToNetwork @@ -6010,10 +6067,10 @@ N_0xf2e07819ef1a5289 c DLC 0xF2E07819EF1A5289 boolean N_0xf2e1a7133dd356a6 c OBJECT 0xF2E1A7133DD356A6 garageHash:Hash,toggle:boolean EnableSavingInGarage N_0xf2eac213d5ea0623 c NETWORK 0xF2EAC213D5EA0623 integer GetNumCommerceItems N_0xf2f6a2fa49278625 c MISC 0xF2F6A2FA49278625 number,number,number,number t:number,x:number,y:number,z:number,w:number,x1:number,y1:number,z1:number,w1:number SlerpNearQuaternion -N_0xf30980718c8ed876 c NETSHOPPING 0xF30980718C8ED876 boolean itemData:any,quantity:integer NetGameserverBasketAddItem +N_0xf30980718c8ed876 c NETSHOPPING 0xF30980718C8ED876 boolean,integer quantity:integer NetGameserverBasketAddItem N_0xf314cf4f0211894e c HUD 0xF314CF4F0211894E hudColorIndex:integer,r:integer,g:integer,b:integer,a:integer ReplaceHudColourWithRgba N_0xf3162836c28f9da5 c PATHFIND 0xF3162836C28F9DA5 boolean,vector3 bStartAtPlayerPos:boolean,fDistanceAlongRoute:number,slotType:integer GetPosAlongGpsTypeRoute -N_0xf3365489e0dd50f9 c AUDIO 0xF3365489E0DD50F9 vehicle:Vehicle,toggle:boolean +N_0xf3365489e0dd50f9 c AUDIO 0xF3365489E0DD50F9 vehicle:Vehicle,toggle:boolean SetVehicleMissileWarningEnabled N_0xf36199225d6d8c86 c MISC 0xF36199225D6D8C86 opacity:number SetCloudsAlpha N_0xf3929c2379b60cce c NETWORK 0xF3929C2379B60CCE boolean NetworkSessionIsSolo N_0xf3b0e0aed097a3f5 c VEHICLE 0xF3B0E0AED097A3F5 any p0:any,p1:any @@ -6040,17 +6097,17 @@ N_0xf51d36185993515d c GRAPHICS 0xF51D36185993515D checkpoint:integer,posX:numb N_0xf534d94dfa2ead26 c STATS 0xF534D94DFA2EAD26 p0:any,p1:any,p2:any,p3:any,p4:any N_0xf53e48461b71eecb c NETWORK 0xF53E48461B71EECB boolean p0:any UgcIsLanguageSupported N_0xf55e4046f6f831dc c CAM 0xF55E4046F6F831DC p0:any,p1:number -N_0xf56dfb7b61be7276 c MISC 0xF56DFB7B61BE7276 boolean,number x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,planeX:number,planeY:number,planeZ:number,planeNormalX:number,planeNormalY:number,planeNormalZ:number GetLinePlaneIntersection +N_0xf56dfb7b61be7276 c MISC 0xF56DFB7B61BE7276 boolean,number x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,planeX:number,planeY:number,planeZ:number,planeNormalX:number,planeNormalY:number,planeNormalZ:number,intersectionParameter?:number GetLinePlaneIntersection N_0xf5846edb26a98a24 c PED 0xF5846EDB26A98A24 ped:Ped,p1:boolean SetPedCanTorsoReactIk N_0xf584cf8529b51434 c AUDIO 0xF584CF8529B51434 vehicle:Vehicle,toggle:boolean SetSirenKeepOn N_0xf5a2c681787e579d c GRAPHICS 0xF5A2C681787E579D x:number,y:number,w:number,h:number SetScriptGfxAlignParams -N_0xf5bb8dac426a52c0 c STATS 0xF5BB8DAC426A52C0 p0:any,p1:any,p2:any,p3:any PlaystatsJobBend +N_0xf5bb8dac426a52c0 c STATS 0xF5BB8DAC426A52C0 integer,integer,integer,integer PlaystatsJobBend N_0xf5bed327cea362b1 c GRAPHICS 0xF5BED327CEA362B1 integer scanForSaving:boolean GetStatusOfSortedListOperation N_0xf5f1e89a970b7796 c CAM 0xF5F1E89A970B7796 boolean IsCinematicCamInputActive N_0xf60165e1d2c5370b c PED 0xF60165E1D2C5370B boolean,number,number ped:Ped GetPedCurrentMovementSpeed N_0xf6792800ac95350d c STATS 0xF6792800AC95350D transactionId:integer SetSaveMigrationTransactionId N_0xf6b170f9a02e9e87 c MONEY 0xF6B170F9A02E9E87 p0:any NetworkEarnBountyHunterReward -N_0xf6baaaf762e1bf40 c SOCIALCLUB 0xF6BAAAF762E1BF40 boolean,integer p0:string +N_0xf6baaaf762e1bf40 c SOCIALCLUB 0xF6BAAAF762E1BF40 boolean,integer p0:string,p1?:integer N_0xf6f4383b7c92f11a c NETWORK 0xF6F4383B7C92F11A p0:any N_0xf70efa14fe091429 c MONEY 0xF70EFA14FE091429 integer amount:integer WithdrawVc N_0xf751b16fb32abc1d c MISC 0xF751B16FB32ABC1D minAmplitude:number WaterOverrideSetOceanwaveminamplitude @@ -6072,7 +6129,7 @@ N_0xf87d9f2301f7d206 c VEHICLE 0xF87D9F2301F7D206 vehicle:Vehicle RemoveVehicle N_0xf8ad2eed7c47e8fe c AUDIO 0xF8AD2EED7C47E8FE ped:Ped,shouldBlock:boolean,suppressOutgoingNetworkSpeech:boolean BlockAllSpeechFromPed N_0xf8b49f5ba7f850e7 c VEHICLE 0xF8B49F5BA7F850E7 vehicle:Vehicle,p1:integer N_0xf8bdbf3d573049a1 c CAM 0xF8BDBF3D573049A1 value:number SetGameplayHintFollowDistanceScalar -N_0xf8c54a461c3e11dc c STATS 0xF8C54A461C3E11DC p0:any,p1:any,p2:any,p3:any +N_0xf8c54a461c3e11dc c STATS 0xF8C54A461C3E11DC integer,integer,integer,integer N_0xf8cc1ebe0b62e29f c DATAFILE 0xF8CC1EBE0B62E29F boolean p0:any DatafileHasValidFileData N_0xf8dee0a5600cbb93 c HUD 0xF8DEE0A5600CBB93 toggle:boolean SetMinimapHideFow N_0xf8ebccc96adb9fb7 c VEHICLE 0xF8EBCCC96ADB9FB7 vehicle:Vehicle,position:number,p2:boolean SetVehicleBulldozerArmPosition @@ -6087,7 +6144,7 @@ N_0xf9b8f91aad3b953e c PED 0xF9B8F91AAD3B953E ped:Ped,target:Ped,xOffset:number N_0xf9c1681347c8bd15 c OBJECT 0xF9C1681347C8BD15 object:Object FixObjectFragment N_0xf9c812cd7c46e817 c MONEY 0xF9C812CD7C46E817 index:integer,context:string,reason:string,unk:boolean NetworkRefundCash N_0xf9d02130ecdd1d77 c CAM 0xF9D02130ECDD1D77 cam:Cam,height:number SetFlyCamMaxHeight -N_0xf9e1ccae8ba4c281 c NETWORK 0xF9E1CCAE8BA4C281 boolean p0:any,p1:any,p2:any,p3:any UgcGetFriendContent +N_0xf9e1ccae8ba4c281 c NETWORK 0xF9E1CCAE8BA4C281 boolean,integer,integer p0:any,p1:any UgcGetFriendContent N_0xf9f2922717b819ec c STATS 0xF9F2922717B819EC any N_0xfa07759e6fddd7cf c MONEY 0xFA07759E6FDDD7CF p0:any,p1:any,p2:any,p3:any N_0xfa1e0e893d915215 c LOADINGSCREEN 0xFA1E0E893D915215 toggle:boolean @@ -6095,7 +6152,7 @@ N_0xfa2888e3833c8e96 c NETWORK 0xFA2888E3833C8E96 N_0xfa3ffb0eebc288a3 c MISC 0xFA3FFB0EEBC288A3 p0:boolean N_0xfa5b74bab8a7ef99 c STATS 0xFA5B74BAB8A7EF99 p0:any PlaystatsExtraEvent N_0xfa83ca6776038f64 c TASK 0xFA83CA6776038F64 x:number,y:number,z:number -N_0xfaa457ef263e8763 c MISC 0xFAA457EF263E8763 p0:any,name:string +N_0xfaa457ef263e8763 c MISC 0xFAA457EF263E8763 integer name:string N_0xfab944d4d481accb c PED 0xFAB944D4D481ACCB ped:Ped,toggle:boolean N_0xfac18e7356bd3210 c NETWORK 0xFAC18E7356BD3210 N_0xfac75988a7d078d3 c PLAYER 0xFAC75988A7D078D3 player:Player @@ -6104,10 +6161,10 @@ N_0xfaf2a78061fd9ef4 c VEHICLE 0xFAF2A78061FD9EF4 p0:any,p1:number,p2:number,p3 N_0xfafc23aee23868db c NETWORK 0xFAFC23AEE23868DB boolean NetworkAllocateTunablesRegistrationDataMap N_0xfb00ca71da386228 c MISC 0xFB00CA71DA386228 N_0xfb199266061f820a c STREAMING 0xFB199266061F820A boolean -N_0xfb1f9381e80fa13f c NETWORK 0xFB1F9381E80FA13F any p0:integer,p1:any +N_0xfb1f9381e80fa13f c NETWORK 0xFB1F9381E80FA13F any,integer p0:integer,p1?:integer N_0xfb680d403909dc70 c NETWORK 0xFB680D403909DC70 p0:any,p1:any N_0xfb6c4072e9a32e92 c PAD 0xFB6C4072E9A32E92 boolean padIndex:integer,control:integer IsDisabledControlReleased -N_0xfb6db092fbae29e6 c MONEY 0xFB6DB092FBAE29E6 p0:integer,p1:string,p2:any NetworkEarnFromAmbientJob +N_0xfb6db092fbae29e6 c MONEY 0xFB6DB092FBAE29E6 integer p0:integer,p1:string,p2?:integer NetworkEarnFromAmbientJob N_0xfb80ab299d2ee1bd c MISC 0xFB80AB299D2EE1BD toggle:boolean ToggleShowOptionalStuntJumpCamera N_0xfb8f2a6f3df08cbe c NETWORK 0xFB8F2A6F3DF08CBE NetworkCancelRespawnSearch N_0xfbc5e768c7a77a6a c NETWORK 0xFBC5E768C7A77A6A any UgcGetCreateResult @@ -6147,11 +6204,11 @@ N_0xfebfbfdfb66039de c GRAPHICS 0xFEBFBFDFB66039DE amount:number SeethroughSetN N_0xfec9a3b1820f3331 c PED 0xFEC9A3B1820F3331 boolean ped:Ped N_0xfee4a5459472a9f8 c PED 0xFEE4A5459472A9F8 SpawnpointsCancelSearch N_0xff14d6feec507bbe c STATS 0xFF14D6FEEC507BBE p0:any PlaystatsCarclubPoints -N_0xff266d1d0eb1195d c AUDIO 0xFF266D1D0EB1195D +N_0xff266d1d0eb1195d c AUDIO 0xFF266D1D0EB1195D SetRadioRetuneUp N_0xff287323b0e2c69a c PED 0xFF287323B0E2C69A ped:Ped FreezePedCameraRotation N_0xff300c7649724a0b c PLAYER 0xFF300C7649724A0B player:Player,toggle:boolean SetPlayerLeavePedBehind N_0xff4803bc019852d9 c PED 0xFF4803BC019852D9 p0:number,p1:any -N_0xff56381874f82086 c FILES 0xFF56381874F82086 boolean characterType:integer,decorationIndex:integer,outComponent:any GetTattooShopDlcItemData +N_0xff56381874f82086 c FILES 0xFF56381874F82086 boolean,integer characterType:integer,decorationIndex:integer,outComponent?:integer GetTattooShopDlcItemData N_0xff5992e1c9e65d05 c GRAPHICS 0xFF5992E1C9E65D05 amount:number SeethroughSetNoiseAmountMin N_0xff6be494c7987f34 c SHAPETEST 0xFF6BE494C7987F34 integer,vector3,vector3 flag:integer,entity:Entity,flag2:integer StartShapeTestSurroundingCoords N_0xff8f3a92b75ed67a c SOCIALCLUB 0xFF8F3A92B75ED67A any @@ -6160,8 +6217,8 @@ N_0xffe1e5b792d92b34 c NETWORK 0xFFE1E5B792D92B34 boolean NetworkJoinPreviously N_0xffe5c16f402d851d c SOCIALCLUB 0xFFE5C16F402D851D boolean p0:integer,p1:string ScInboxMessageGetDataBool N_0xffee8fa29ab9a18e c PLAYER 0xFFEE8FA29AB9A18E player:Player N_0xfffba1b1f7c0b6f4 c MONEY 0xFFFBA1B1F7C0B6F4 p0:any NetworkEarnFmbbWageBonus -NetGameserverBasketAddItem c NETSHOPPING 0xF30980718C8ED876 boolean itemData:any,quantity:integer -NetGameserverBasketApplyServerData c NETSHOPPING 0xE1A0450ED46A7812 boolean p0:any,p1:any +NetGameserverBasketAddItem c NETSHOPPING 0xF30980718C8ED876 boolean,integer quantity:integer +NetGameserverBasketApplyServerData c NETSHOPPING 0xE1A0450ED46A7812 boolean,integer p0:any,p1?:integer NetGameserverBasketDelete c NETSHOPPING 0xFA336E7F40C0A0D0 boolean NetGameserverBasketEnd c NETSHOPPING 0xA65568121DF2EA26 boolean NetGameserverBasketIsFull c NETSHOPPING 0x27F76CC6C55AD30E boolean @@ -6176,7 +6233,7 @@ NetGameserverDeleteCharacterSlotGetStatus c NETSHOPPING 0x0A6D923DFFC9BD89 integ NetGameserverDeleteSetTelemetryNonceSeed c NETSHOPPING 0x112CEF1615A1139F boolean NetGameserverEndService c NETSHOPPING 0xE2A99A9B524BEFFF boolean transactionId:integer NetGameserverGetBalance c NETSHOPPING 0x35A1B3E1D1315CFA boolean inventory:boolean,playerbalance:boolean -NetGameserverGetCatalogState c NETSHOPPING 0xCF38DAFBB49EDE5E boolean,integer +NetGameserverGetCatalogState c NETSHOPPING 0xCF38DAFBB49EDE5E boolean,integer state?:integer NetGameserverGetPrice c NETSHOPPING 0xC27009422FCCA88D integer itemHash:Hash,categoryHash:Hash,p2:boolean NetGameserverGetTransactionManagerData c NETSHOPPING 0x897433D292B44130 boolean,integer,boolean NetGameserverIsCatalogValid c NETSHOPPING 0x2B949A1E6AEC8F6A boolean @@ -6200,10 +6257,10 @@ NetworkAcceptPresenceInvite c NETWORK 0xFA91550DF9318B22 boolean p0:any NetworkAccessTunableBool c NETWORK 0xAA6A47A573ABB75A boolean tunableContext:string,tunableName:string NetworkAccessTunableBoolHash c NETWORK 0xEA16B69D93D71A45 boolean tunableContext:Hash,tunableName:Hash NetworkAccessTunableBoolHashFailVal c NETWORK 0xC7420099936CE286 boolean tunableContext:Hash,tunableName:Hash,defaultValue:boolean NetworkTryAccessTunableBoolHash -NetworkAccessTunableFloat c NETWORK 0xE5608CA7BC163A5F boolean,number tunableContext:string,tunableName:string -NetworkAccessTunableFloatHash c NETWORK 0x972BC203BBC4C4D5 boolean,number tunableContext:Hash,tunableName:Hash -NetworkAccessTunableInt c NETWORK 0x8BE1146DFD5D4468 boolean,integer tunableContext:string,tunableName:string -NetworkAccessTunableIntHash c NETWORK 0x40FCE03E50E8DBE8 boolean,integer tunableContext:Hash,tunableName:Hash +NetworkAccessTunableFloat c NETWORK 0xE5608CA7BC163A5F boolean,number tunableContext:string,tunableName:string,value?:number +NetworkAccessTunableFloatHash c NETWORK 0x972BC203BBC4C4D5 boolean,number tunableContext:Hash,tunableName:Hash,value?:number +NetworkAccessTunableInt c NETWORK 0x8BE1146DFD5D4468 boolean,integer tunableContext:string,tunableName:string,value?:integer +NetworkAccessTunableIntHash c NETWORK 0x40FCE03E50E8DBE8 boolean,integer tunableContext:Hash,tunableName:Hash,value?:integer NetworkActionFollowInvite c NETWORK 0xC88156EBB786F8D5 any NetworkAddEntityAngledArea c NETWORK 0x376C6375BA60293A any x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,width:number NetworkAddEntityArea c NETWORK 0x494C8FB299290269 any p0:number,p1:number,p2:number,p3:number,p4:number,p5:number @@ -6218,9 +6275,9 @@ NetworkAddSynchronisedSceneCamera c NETWORK 0xCF8BD3B0BD6D42D7 netScene:integer NetworkAllocateTunablesRegistrationDataMap c NETWORK 0xFAFC23AEE23868DB boolean NetworkAllowLocalEntityAttachment c NETWORK 0x267C78C60E806B9A entity:Entity,toggle:boolean NetworkAllowRemoteAttachmentModification NetworkAllowRemoteAttachmentModification c NETWORK 0x267C78C60E806B9A entity:Entity,toggle:boolean -NetworkAmIBlockedByGamer c NETWORK 0x15337C7C268A27B2 boolean networkHandle:any +NetworkAmIBlockedByGamer c NETWORK 0x15337C7C268A27B2 boolean,integer networkHandle?:integer NetworkAmIBlockedByPlayer c NETWORK 0x87F395D957D4353D boolean player:Player -NetworkAmIMutedByGamer c NETWORK 0xDF02A2C93F1F26DA boolean networkHandle:any +NetworkAmIMutedByGamer c NETWORK 0xDF02A2C93F1F26DA boolean,integer networkHandle?:integer NetworkAmIMutedByPlayer c NETWORK 0x9D6981DFC91A8604 boolean player:Player NetworkApplyCachedPlayerHeadBlendData c NETWORK 0x99B72C7ABDE5C910 boolean ped:Ped,player:Player NetworkApplyPedScarData c NETWORK 0xE66C690248F11150 ped:Ped,p1:integer @@ -6252,23 +6309,23 @@ NetworkBuyLotteryTicket c MONEY 0xD987F2489969668C p0:integer,p1:integer,p2:boo NetworkBuyProperty c MONEY 0x650A08A280870AF6 propertyCost:integer,propertyName:Hash,p2:boolean,p3:boolean NetworkBuySmokes c MONEY 0x75AF80E61248EEBD p0:integer,p1:boolean,p2:boolean NetworkCacheLocalPlayerHeadBlendData c NETWORK 0xBD0BE0BFC927EAC1 -NetworkCanAccessMultiplayer c NETWORK 0xAF50DA1A3F8B1BA4 boolean,integer +NetworkCanAccessMultiplayer c NETWORK 0xAF50DA1A3F8B1BA4 boolean,integer loadingState?:integer NetworkCanBail c NETWORK 0x580CE4438479CC61 boolean NetworkCanBet c MONEY 0x3A54E33660DED67F boolean amount:integer NetworkCanBuyLotteryTicket c MONEY 0xC62DD18375C99130 boolean cost:integer -NetworkCanCommunicateWithGamer c NETWORK 0xA150A4F065806B1F boolean,integer -NetworkCanCommunicateWithGamer_2 c NETWORK 0x8F5D1AD832AEB06C boolean networkHandle:any +NetworkCanCommunicateWithGamer c NETWORK 0xA150A4F065806B1F boolean,integer networkHandle?:integer +NetworkCanCommunicateWithGamer_2 c NETWORK 0x8F5D1AD832AEB06C boolean,integer networkHandle?:integer NetworkCanEnterMultiplayer c NETWORK 0x7E782A910C362C25 boolean -NetworkCanGamerPlayMultiplayerWithMe c NETWORK 0x135F9B7B7ADD2185 boolean networkHandle:any +NetworkCanGamerPlayMultiplayerWithMe c NETWORK 0x135F9B7B7ADD2185 boolean,integer networkHandle?:integer NetworkCanNetworkIdBeSeen c NETWORK 0xA1607996431332DF boolean netId:integer IsNetworkIdOwnedByParticipant -NetworkCanPlayMultiplayerWithGamer c NETWORK 0x07DD29D5E22763F1 boolean networkHandle:any +NetworkCanPlayMultiplayerWithGamer c NETWORK 0x07DD29D5E22763F1 boolean,integer networkHandle?:integer NetworkCanReceivePlayerCash c MONEY 0x5D17BE59D2123284 boolean p0:any,p1:any,p2:any,p3:any NetworkCanSessionEnd c NETWORK 0x4EEBC3694E49C572 boolean NetworkCanSetWaypoint c NETWORK 0xC927EC229934AF60 boolean NetworkCanShareJobCash c MONEY 0x1C2473301B1C66BA boolean NetworkCanSpendMoney c MONEY 0xAB3CAA6B422164DA boolean p0:any,p1:boolean,p2:boolean,p3:boolean,p4:any -NetworkCanSpendMoney_2 c MONEY 0x7303E27CC6532080 boolean p0:any,p1:boolean,p2:boolean,p3:boolean,p4:any,p5:any -NetworkCanViewGamerUserContent c NETWORK 0xB57A49545BA53CE7 boolean networkHandle:any +NetworkCanSpendMoney_2 c MONEY 0x7303E27CC6532080 boolean,integer p0:any,p1:boolean,p2:boolean,p3:boolean,p5:any +NetworkCanViewGamerUserContent c NETWORK 0xB57A49545BA53CE7 boolean,integer networkHandle?:integer NetworkCancelRespawnSearch c NETWORK 0xFB8F2A6F3DF08CBE NetworkCasinoCanGamble c MONEY 0xF62F6D9528358FE4 boolean p0:any NetworkCasinoCanPurchaseChipsWithPvc c MONEY 0x394DCDB9E836B7A9 boolean @@ -6279,28 +6336,28 @@ NetworkCasinoSellChips c MONEY 0xED44897CB336F480 boolean p0:integer,p1:integer NetworkChangeTransitionSlots c NETWORK 0xEEEDA5E6D7080987 p0:any,p1:any NetworkChatMute c NETWORK 0x57B192B4D4AD23D5 toggle:boolean NetworkOverrideSendRestrictionsAll NetworkCheckCommunicationPrivileges c NETWORK 0x83F28CE49FBBFFBA boolean p0:integer,p1:integer,p2:boolean -NetworkCheckDataManagerForHandle c NETWORK 0x796A87B3B68D1F3D boolean p0:any NetworkSetCurrentDataManagerHandle -NetworkCheckDataManagerSucceededForHandle c NETWORK 0x44B37CDCAE765AAE boolean,integer friendDataIndex:integer +NetworkCheckDataManagerForHandle c NETWORK 0x796A87B3B68D1F3D boolean,integer p0?:integer NetworkSetCurrentDataManagerHandle +NetworkCheckDataManagerSucceededForHandle c NETWORK 0x44B37CDCAE765AAE boolean,integer friendDataIndex:integer,networkHandle?:integer NetworkCheckUserContentPrivileges c NETWORK 0x595F028698072DD9 boolean p0:integer,p1:integer,p2:boolean NetworkClanAnimation c NETWORK 0x729E3401F0430686 boolean animDict:string,animName:string NetworkClanAnyDownloadMembershipPending c NETWORK 0xB3F64A6A91432477 boolean -NetworkClanDownloadMembership c NETWORK 0xA989044E70010ABE boolean,integer -NetworkClanDownloadMembershipPending c NETWORK 0x5B9E023DC6EBEDC0 boolean p0:any -NetworkClanGetEmblemTxdName c NETWORK 0x5835D9CD92E83184 boolean netHandle:any,txdName:string +NetworkClanDownloadMembership c NETWORK 0xA989044E70010ABE boolean,integer networkHandle?:integer +NetworkClanDownloadMembershipPending c NETWORK 0x5B9E023DC6EBEDC0 boolean,integer p0?:integer +NetworkClanGetEmblemTxdName c NETWORK 0x5835D9CD92E83184 boolean,integer txdName:string NetworkClanGetLocalMembershipsCount c NETWORK 0x1F471B79ACC90BEF integer NetworkClanGetMembership c NETWORK 0xC8BC2011F67B3411 boolean,integer,integer membershipIndex:integer -NetworkClanGetMembershipCount c NETWORK 0xAAB11F6C4ADBC2C1 integer,integer +NetworkClanGetMembershipCount c NETWORK 0xAAB11F6C4ADBC2C1 integer,integer p0?:integer NetworkClanGetMembershipDesc c NETWORK 0x48DE78AF2C8885B8 boolean,integer p1:integer NetworkClanGetMembershipValid c NETWORK 0x48A59CF88D43DF0E boolean,integer membershipIndex:integer NetworkClanGetNumMembershipDesc c NETWORK 0x1F471B79ACC90BEF integer NetworkClanGetLocalMembershipsCount NetworkClanGetUiFormattedTag c NETWORK 0xF45352426FF3A4F0 integer bufferSize:integer,formattedTag:string -NetworkClanIsEmblemReady c NETWORK 0xA134777FF7F33331 boolean p0:any,p1:any +NetworkClanIsEmblemReady c NETWORK 0xA134777FF7F33331 boolean,integer p0:any,p1?:integer NetworkClanIsRockstarClan c NETWORK 0x7543BB439F63792B boolean,integer bufferSize:integer NetworkClanJoin c NETWORK 0x9FAAA4F4FC71F87F boolean clanDesc:integer NetworkClanPlayerGetDesc c NETWORK 0xEEE6EACBE8874FBA boolean,integer,integer bufferSize:integer -NetworkClanPlayerIsActive c NETWORK 0xB124B57F571D8F18 boolean,integer +NetworkClanPlayerIsActive c NETWORK 0xB124B57F571D8F18 boolean,integer networkHandle?:integer NetworkClanReleaseEmblem c NETWORK 0x113E6E3E50E286B0 p0:any -NetworkClanRemoteMembershipsAreInCache c NETWORK 0xBB6E6FEE99D866B2 boolean,integer +NetworkClanRemoteMembershipsAreInCache c NETWORK 0xBB6E6FEE99D866B2 boolean,integer p0?:integer NetworkClanRequestEmblem c NETWORK 0x13518FF1C6B28938 boolean p0:any NetworkClanServiceIsValid c NETWORK 0x579CCED0265D4896 boolean NetworkClearCharacterWallet c MONEY 0xA921DED15FDF28F5 characterSlot:integer @@ -6327,13 +6384,13 @@ NetworkDidGetGamerStatusSucceed c NETWORK 0x5AE17C6B0134B7F1 boolean NetworkDisableInvincibleFlashing c NETWORK 0x9DD368BF06983221 player:Player,toggle:boolean NetworkDisableLeaveRemotePedBehind c NETWORK 0xC505036A35AFD01B toggle:boolean NetworkDisableProximityMigration c NETWORK 0x407091CF6037118E netID:integer -NetworkDisplaynamesFromHandlesStart c NETWORK 0xD66C9E72B3CC4982 integer p0:any,p1:any +NetworkDisplaynamesFromHandlesStart c NETWORK 0xD66C9E72B3CC4982 integer,integer p1:any NetworkDoTransitionQuickmatch c NETWORK 0x71FB0EBCD4915D56 boolean p0:any,p1:any,p2:any,p3:any NetworkDoTransitionQuickmatchAsync c NETWORK 0xA091A5E44F0072E5 boolean p0:any,p1:any,p2:any,p3:any -NetworkDoTransitionQuickmatchWithGroup c NETWORK 0x9C4AB58491FDC98A boolean p0:any,p1:any,p2:any,p3:any,p4:any,p5:any -NetworkDoTransitionToFreemode c NETWORK 0x3AAD8B2FCA1E289F boolean p0:any,p1:any,p2:boolean,players:integer,p4:boolean +NetworkDoTransitionQuickmatchWithGroup c NETWORK 0x9C4AB58491FDC98A boolean,integer p0:any,p1:any,p2:any,p3:any,p5:any +NetworkDoTransitionToFreemode c NETWORK 0x3AAD8B2FCA1E289F boolean,integer p1:any,p2:boolean,players:integer,p4:boolean NetworkDoTransitionToGame c NETWORK 0x3E9BB38102A589B0 boolean p0:boolean,maxPlayers:integer -NetworkDoTransitionToNewFreemode c NETWORK 0x9E80A5BA8109F974 boolean p0:any,p1:any,players:integer,p3:boolean,p4:boolean,p5:boolean +NetworkDoTransitionToNewFreemode c NETWORK 0x9E80A5BA8109F974 boolean,integer,integer players:integer,p3:boolean,p4:boolean,p5:boolean NetworkDoTransitionToNewGame c NETWORK 0x4665F51EFED00034 boolean p0:boolean,maxPlayers:integer,p2:boolean NetworkDoesEntityExistWithNetworkId c NETWORK 0x18A47D074708FD68 boolean netId:integer NetworkDoesNetworkIdExist c NETWORK 0x38CE16C96BD11344 boolean netId:integer @@ -6347,7 +6404,7 @@ NetworkEarnCasinoHeistBonus c MONEY 0x3EC7471E6909798A p0:any,p1:any,p2:any,p3: NetworkEarnCollectableCompletedCollection c MONEY 0x5C9B198AF5A54FA6 amount:integer,p1:any NetworkEarnFmbbWageBonus c MONEY 0xFFFBA1B1F7C0B6F4 p0:any NetworkEarnFromAiTargetKill c MONEY 0x515B4A22E4D3C6D7 p0:any,p1:any -NetworkEarnFromAmbientJob c MONEY 0xFB6DB092FBAE29E6 p0:integer,p1:string,p2:any +NetworkEarnFromAmbientJob c MONEY 0xFB6DB092FBAE29E6 integer p0:integer,p1:string,p2?:integer NetworkEarnFromArenaCareerProgression c MONEY 0x0F99F70C61F14619 amount:integer,p1:any NetworkEarnFromArenaSkillLevelProgression c MONEY 0xE08256F972C7BB2C amount:integer,p1:any NetworkEarnFromArenaWar c MONEY 0x631F1CB8FB4130AA amount:integer,p1:any,p2:any,p3:any @@ -6362,7 +6419,7 @@ NetworkEarnFromBendJob c MONEY 0x61326EE6DF15B0CA amount:integer,heistHash:stri NetworkEarnFromBetting c MONEY 0x827A5BA1A44ACA6D amount:integer,p1:string NetworkEarnFromBikeShopBusiness c MONEY 0x2C5809EB9DF57257 p0:any,p1:any NetworkEarnFromBikerIncome c MONEY 0x71BEC32FA466E105 p0:any -NetworkEarnFromBounty c MONEY 0x131BB5DA15453ACF integer amount:integer,p2:any,p3:any +NetworkEarnFromBounty c MONEY 0x131BB5DA15453ACF integer,integer amount:integer,p3:any NetworkEarnFromBusinessBattle c MONEY 0x42FCE14F50F27291 p0:any NetworkEarnFromBusinessHubSell c MONEY 0x0B39CF0D53F1C883 p0:any,p1:any,p2:any NetworkEarnFromBusinessHubSource c MONEY 0x59498BC8B1C8B15C p0:any,p1:any,p2:any,p3:any @@ -6373,7 +6430,7 @@ NetworkEarnFromCasinoAward c MONEY 0x973A9781A34F8DEB amount:integer,hash:Hash NetworkEarnFromCasinoMissionParticipation c MONEY 0x09E8F18641BE2575 amount:integer NetworkEarnFromCasinoMissionReward c MONEY 0x566FD402B25787DE amount:integer NetworkEarnFromCasinoStoryMissionReward c MONEY 0xAC95ED552157E092 amount:integer -NetworkEarnFromChallengeWin c MONEY 0x2B171E6B2F64D8DF p0:any,p1:any,p2:boolean +NetworkEarnFromChallengeWin c MONEY 0x2B171E6B2F64D8DF integer p0:any,p2:boolean NetworkEarnFromClubManagementParticipation c MONEY 0xA75EAC69F59E96E7 p0:any NetworkEarnFromCollectablesActionFigures c MONEY 0x5517F90043466049 amount:integer NetworkEarnFromCollectionItem c MONEY 0x84FF63BD4966F33D amount:integer,p1:any @@ -6401,7 +6458,7 @@ NetworkEarnFromHackerTruckMission c MONEY 0xE8815FE993896AD3 p0:any,amount:inte NetworkEarnFromHoldups c MONEY 0x45B8154E077D9E4D amount:integer NetworkEarnFromImportExport c MONEY 0xF92A014A634442D6 amount:integer,modelHash:Hash NetworkEarnFromJob c MONEY 0xB2CC4836834E8A98 amount:integer,p1:string -NetworkEarnFromJobBonus c MONEY 0x6816FB4416760775 p0:any,p1:any,p2:any +NetworkEarnFromJobBonus c MONEY 0x6816FB4416760775 integer,integer p0:any NetworkEarnFromJobX2 c MONEY 0xDEBBF584665411D0 amount:integer,p1:string NetworkEarnFromMissionH c MONEY 0x61326EE6DF15B0CA amount:integer,heistHash:string NetworkEarnFromBendJob NetworkEarnFromNotBadsport c MONEY 0x4337511FA8221D36 amount:integer @@ -6446,40 +6503,40 @@ NetworkFindGamersInCrew c NETWORK 0xE532D6811B3A4D2A boolean p0:any NetworkFindMatchedGamers c NETWORK 0xF7B2CFDE5C9F700D boolean p0:any,p1:number,p2:number,p3:number NetworkFinishBroadcastingData c NETWORK 0x64F62AFB081E260D NetworkForceLocalUseOfSyncedSceneCamera c NETWORK 0xC9B43A33D09CADA7 sceneId:integer -NetworkGamerHasHeadset c NETWORK 0xF2FD55CB574BCC55 boolean networkHandle:any +NetworkGamerHasHeadset c NETWORK 0xF2FD55CB574BCC55 boolean,integer networkHandle?:integer NetworkGamertagFromHandlePending c NETWORK 0xB071E27958EF4CF0 boolean -NetworkGamertagFromHandleStart c NETWORK 0x9F0C0A981D73FA56 boolean,integer +NetworkGamertagFromHandleStart c NETWORK 0x9F0C0A981D73FA56 boolean,integer networkHandle?:integer NetworkGamertagFromHandleSucceeded c NETWORK 0xFD00798DBA7523DD boolean NetworkGetActivityPlayerNum c NETWORK 0x73E2B500410DA5A2 integer p0:boolean NetworkGetAgeGroup c NETWORK 0x9614B71F8ADB982B integer NetworkGetAverageLatencyForPlayer c NETWORK 0xD414BE129BB81B32 number player:Player NetworkGetAverageLatencyForPlayer_2 c NETWORK 0x0E3A041ED6AC2B45 number player:Player NetworkGetAveragePacketLossForPlayer c NETWORK 0x350C23949E43686C number player:Player -NetworkGetBackgroundLoadingRecipients c NETWORK 0x97A770BEEF227E2B boolean p0:any,p1:any,p2:any,p3:any +NetworkGetBackgroundLoadingRecipients c NETWORK 0x97A770BEEF227E2B boolean,integer,integer p0:any,p1:any NetworkGetBanData c NETWORK 0xC22912B1D85F26B1 boolean,integer,vector3 privilege:integer NetworkHasRosPrivilegeEndDate NetworkGetBankBalanceString c MONEY 0xA6FA3979BED01B81 string NetworkGetStringBankBalance NetworkGetContentModifierListId c NETWORK 0x187382F8A3E0A6C3 integer contentHash:Hash -NetworkGetCurrentlySelectedGamerHandleFromInviteMenu c NETWORK 0x74881E6BCAE2327C boolean p0:any -NetworkGetDesroyerOfEntity c NETWORK 0x4CACA84440FA26F6 boolean,Hash p0:any,p1:any NetworkGetDestroyerOfEntity -NetworkGetDestroyerOfEntity c NETWORK 0x4CACA84440FA26F6 boolean,Hash p0:any,p1:any -NetworkGetDestroyerOfNetworkId c NETWORK 0x7A1ADEEF01740A24 integer,Hash netId:integer +NetworkGetCurrentlySelectedGamerHandleFromInviteMenu c NETWORK 0x74881E6BCAE2327C boolean,integer p0?:integer +NetworkGetDesroyerOfEntity c NETWORK 0x4CACA84440FA26F6 boolean,Hash p0:any,p1:any,weaponHash?:Hash NetworkGetDestroyerOfEntity +NetworkGetDestroyerOfEntity c NETWORK 0x4CACA84440FA26F6 boolean,Hash p0:any,p1:any,weaponHash?:Hash +NetworkGetDestroyerOfNetworkId c NETWORK 0x7A1ADEEF01740A24 integer,Hash netId:integer,weaponHash?:Hash NetworkGetDisplaynamesFromHandles c NETWORK 0x58CC181719256197 integer p0:any,p1:any,p2:any NetworkGetEntityFromNetworkId b NETWORK 0xCE4E5D9B0A4FF560 Entity netId:integer NetworkGetEntityIsLocal c NETWORK 0x0991549DE4D64762 boolean entity:Entity NetworkGetEntityIsNetworked c NETWORK 0xC7827959479DCC78 boolean entity:Entity -NetworkGetEntityKillerOfPlayer c NETWORK 0x42B2DAA6B596F5F8 Entity,Hash player:Player +NetworkGetEntityKillerOfPlayer c NETWORK 0x42B2DAA6B596F5F8 Entity,Hash player:Player,weaponHash?:Hash NetworkGetEntityNetScriptId c NETWORK 0x815F18AD865F057F integer entity:Entity NetworkGetEntityOwner b CFX 0x526FEE31 integer entity:Entity NetworkGetEvcBalance c MONEY 0x5D1E75F91C07DEE5 integer NetworkGetFirstEntityOwner s CFX 0x1E546224 integer entity:Entity -NetworkGetFoundGamer c NETWORK 0x9DCFF2AFB68B3476 boolean p0:any,p1:any +NetworkGetFoundGamer c NETWORK 0x9DCFF2AFB68B3476 boolean,integer p1:any NetworkGetFriendCount c NETWORK 0x203F1CFD823B27A4 integer NetworkGetFriendName c NETWORK 0xE11EBBB2A783FE8B string friendIndex:integer NetworkGetFriendNameFromIndex c NETWORK 0x4164F227D052E293 string friendIndex:integer -NetworkGetGamerStatus c NETWORK 0x85A0EF54A500882C boolean p0:any NetworkQueueGamerForStatus +NetworkGetGamerStatus c NETWORK 0x85A0EF54A500882C boolean,integer p0?:integer NetworkQueueGamerForStatus NetworkGetGamerStatusFromQueue c NETWORK 0x2CC848A861D01493 boolean -NetworkGetGamerStatusResult c NETWORK 0x02A8BEC6FD9AF660 boolean p0:any,p1:any -NetworkGetGamertagFromHandle c NETWORK 0x426141162EBE5CDB string,integer +NetworkGetGamerStatusResult c NETWORK 0x02A8BEC6FD9AF660 boolean,integer p1:any +NetworkGetGamertagFromHandle c NETWORK 0x426141162EBE5CDB string,integer networkHandle?:integer NetworkGetGlobalMultiplayerClock c NETWORK 0x6D03BFBD643B2A02 integer,integer,integer NetworkGetHostOfScript c NETWORK 0x1D6A14F1F9A736FC Player scriptName:string,p1:integer,p2:integer NetworkGetHostOfThisScript c NETWORK 0xC7B4D79B01FA7A5C Player @@ -6497,15 +6554,15 @@ NetworkGetNumFoundGamers c NETWORK 0xA1B043EE79A916FB integer NetworkGetNumParticipants c NETWORK 0x18D0456E86604654 integer NetworkGetNumParticipantsHost c NETWORK 0xA6C90FBC38E395EE integer NetworkGetMaxNumParticipants NetworkGetNumPresenceInvites c NETWORK 0xCEFA968912D0F78D integer -NetworkGetNumScriptParticipants c NETWORK 0x3658E8CD94FC121A integer p0:any,p1:any,p2:any +NetworkGetNumScriptParticipants c NETWORK 0x3658E8CD94FC121A integer,integer p1:any,p2:any NetworkGetNumUnackedForPlayer c NETWORK 0xFF8FCF9FFC458A1C integer player:Player NetworkGetOldestResendCountForPlayer c NETWORK 0x52C1EADAF7B10302 integer player:Player NetworkGetParticipantIndex c NETWORK 0x1B84DF6AF2A46938 integer index:integer -NetworkGetPlatformPartyMembers c NETWORK 0x120364DE2845DAF8 integer data:any,dataSize:integer +NetworkGetPlatformPartyMembers c NETWORK 0x120364DE2845DAF8 integer,integer dataSize:integer NetworkGetPlatformPartyUnk c NETWORK 0x01ABCE5E7CBDA196 integer NetworkGetPlayerCoords c NETWORK 0x125E6D638B8605D4 vector3 player:Player -NetworkGetPlayerCrewEmblemTxdName c NETWORK 0x5835D9CD92E83184 boolean netHandle:any,txdName:string NetworkClanGetEmblemTxdName -NetworkGetPlayerFromGamerHandle c NETWORK 0xCE5F689CF5A0A49D Player,integer +NetworkGetPlayerCrewEmblemTxdName c NETWORK 0x5835D9CD92E83184 boolean,integer txdName:string NetworkClanGetEmblemTxdName +NetworkGetPlayerFromGamerHandle c NETWORK 0xCE5F689CF5A0A49D Player,integer networkHandle?:integer NetworkGetPlayerIndex c NETWORK 0x24FB80D107371267 integer player:Player NetworkGetPlayerIndexFromPed c NETWORK 0x6C0E2E0125610278 Player ped:Ped NetworkGetPlayerLoudness c NETWORK 0x21A1684A25C2867F number player:Player @@ -6514,7 +6571,7 @@ NetworkGetPlayerTutorialSessionInstance c NETWORK 0x3B39236746714134 integer pla NetworkGetPositionHashOfThisScript c NETWORK 0x257ED0FADF750BCF any NetworkGetPresenceInviteContentId c NETWORK 0x24409FC4C55CB22D string p0:any NetworkGetPresenceInviteFromAdmin c NETWORK 0x3DBF2DF0AEB7D289 boolean p0:any -NetworkGetPresenceInviteHandle c NETWORK 0x38D5B0FEBB086F75 boolean p0:any,p1:any +NetworkGetPresenceInviteHandle c NETWORK 0x38D5B0FEBB086F75 boolean,integer p0:any,p1?:integer NetworkGetPresenceInviteId c NETWORK 0xDFF09646E12EC386 any p0:any NetworkGetPresenceInviteInviter c NETWORK 0x4962CC4AA2F345B7 string inviteIndex:integer NetworkGetPresenceInviteIsTournament c NETWORK 0x8806CEBFABD3CE05 boolean p0:any @@ -6523,9 +6580,9 @@ NetworkGetPresenceInvitePlaylistLength c NETWORK 0xD39B3FFF8FFDD5BF any p0:any NetworkGetPresenceInviteSessionId c NETWORK 0x26E1CD96B0903D60 Hash inviteIndex:integer NetworkGetPrimaryClanDataCancel c NETWORK 0x042E4B70B93E6054 NetworkGetPrimaryClanDataClear c NETWORK 0x9AA46BADAD0E27ED any -NetworkGetPrimaryClanDataNew c NETWORK 0xC080FF658B2E41DA boolean p0:any,p1:any +NetworkGetPrimaryClanDataNew c NETWORK 0xC080FF658B2E41DA boolean,integer,integer NetworkGetPrimaryClanDataPending c NETWORK 0xB5074DB804E28CE7 any -NetworkGetPrimaryClanDataStart c NETWORK 0xCE86D8191B762107 boolean p0:any,p1:any +NetworkGetPrimaryClanDataStart c NETWORK 0xCE86D8191B762107 boolean,integer p1:any NetworkGetPrimaryClanDataSuccess c NETWORK 0x5B4F04F19376A0BA any NetworkGetPvcBalance c MONEY 0x4F54F3B6C202FB4E integer NetworkGetPvcTransferBalance c MONEY 0x13A8DE2FD77D04F3 integer @@ -6553,8 +6610,8 @@ NetworkGetTargetingMode c NETWORK 0xDFFA5BE8381C3314 integer NetworkGetThisScriptIsNetworkScript c NETWORK 0x2910669969E9535E boolean NetworkGetTimeoutTime c NETWORK 0x5ED0356A0CE3A34F integer NetworkGetTotalNumPlayers c NETWORK 0xCF61D4B4702EE9EB integer -NetworkGetTransitionHost c NETWORK 0x65042B9774C4435E boolean,integer -NetworkGetTransitionMembers c NETWORK 0x73B000F7FBC55829 integer data:any,dataCount:integer +NetworkGetTransitionHost c NETWORK 0x65042B9774C4435E boolean,integer networkHandle?:integer +NetworkGetTransitionMembers c NETWORK 0x73B000F7FBC55829 integer,integer dataCount:integer NetworkGetTunableCloudCrc c NETWORK 0x10BD227A753B0D84 integer NetworkGetTunablesVersion c NETWORK 0x10BD227A753B0D84 integer NetworkGetTunableCloudCrc NetworkGetUnreliableResendCountForPlayer c NETWORK 0x3765C3A3E8192E10 integer player:Player @@ -6565,7 +6622,7 @@ NetworkGetVcBankWalletBalanceIsNotLessThan c MONEY 0xDC18531D7019A535 boolean am NetworkGetVcWalletBalance c MONEY 0xA40F9C2623F6A8B5 integer characterSlot:integer NetworkGetVcWalletBalanceIsNotLessThan c MONEY 0xED5AB8860415BABA boolean amount:integer,characterSlot:integer NetworkGetVoiceProximityOverrideForPlayer s CFX 0xFFEEF513 vector3 playerSrc:string -NetworkGivePlayerJobshareCash c MONEY 0xFB18DF9CB95E0105 integer amount:integer +NetworkGivePlayerJobshareCash c MONEY 0xFB18DF9CB95E0105 integer amount:integer,networkHandle?:integer NetworkHandleFromFriend c NETWORK 0xD45CB817D7E177D2 integer friendIndex:integer,bufferSize:integer NetworkHandleFromMemberId c NETWORK 0xA0FD21BED61E5C4C integer memberId:string,bufferSize:integer NetworkHandleFromPlayer c NETWORK 0x388EB2B86C73B6B3 integer player:Player,bufferSize:integer @@ -6581,9 +6638,9 @@ NetworkHasEntityBeenRegisteredWithThisThread c NETWORK 0xB07D3185E11657A5 boolea NetworkHasFollowInvite c NETWORK 0x76D9B976C4C09FDE boolean NetworkHasGameBeenAltered c NETWORK 0x659CF2EF7F550C4F boolean NetworkHasHeadset c NETWORK 0xE870F9F1F7B4F1FA boolean -NetworkHasInviteBeenAcked c NETWORK 0x71DC455F5CD1C2B1 boolean,integer -NetworkHasInvitedGamer c NETWORK 0x4D86CD31E8976ECE boolean p0:any -NetworkHasInvitedGamerToTransition c NETWORK 0x7284A47B3540E6CF boolean p0:any +NetworkHasInviteBeenAcked c NETWORK 0x71DC455F5CD1C2B1 boolean,integer networkHandle?:integer +NetworkHasInvitedGamer c NETWORK 0x4D86CD31E8976ECE boolean,integer p0?:integer +NetworkHasInvitedGamerToTransition c NETWORK 0x7284A47B3540E6CF boolean,integer p0?:integer NetworkHasPendingInvite c NETWORK 0xAC8C7B9B88C4A668 boolean NetworkHasPlayerBeenBanned c NETWORK 0x8020A73847E0CA7D boolean NetworkHaveRosBannedPriv NetworkHasPlayerStartedTransition c NETWORK 0x9AC9CCBFA8C29795 boolean player:Player @@ -6592,10 +6649,10 @@ NetworkHasRosPrivilege c NETWORK 0xA699957E60D80214 boolean index:integer NetworkHasRosPrivilegeEndDate c NETWORK 0xC22912B1D85F26B1 boolean,integer,vector3 privilege:integer NetworkHasSocialClubAccount c NETWORK 0x67A5589628E0CFF6 boolean NetworkHasSocialNetworkingSharingPriv c NETWORK 0x76BF03FADBF154F5 boolean -NetworkHasTransitionInviteBeenAcked c NETWORK 0x3F9990BF5F22759C boolean,integer +NetworkHasTransitionInviteBeenAcked c NETWORK 0x3F9990BF5F22759C boolean,integer networkHandle?:integer NetworkHasValidRosCredentials c NETWORK 0x85443FF4C328F53B boolean -NetworkHasViewGamerUserContentResult c NETWORK 0xCCA4318E1AB03F1F boolean networkHandle:any -NetworkHashFromGamerHandle c NETWORK 0x58575AC3CF2CA8EC Hash,integer +NetworkHasViewGamerUserContentResult c NETWORK 0xCCA4318E1AB03F1F boolean,integer networkHandle?:integer +NetworkHashFromGamerHandle c NETWORK 0x58575AC3CF2CA8EC Hash,integer networkHandle?:integer NetworkHashFromPlayerHandle c NETWORK 0xBC1D768F2F5D6C05 Hash player:Player NetworkHaveCommunicationPrivileges c NETWORK 0xAEEF48CDF5B6CE7C boolean p0:integer,player:Player NetworkHaveJustUploadLater c NETWORK 0x85443FF4C328F53B boolean NetworkHasValidRosCredentials @@ -6610,14 +6667,14 @@ NetworkHaveSocialClubPrivilege c NETWORK 0xA0AD7E2AF5349F61 boolean NetworkHave NetworkHaveUserContentPrivileges c NETWORK 0x72D918C99BCACC54 boolean p0:integer NetworkHostTransition c NETWORK 0xA60BB5CE242BB254 boolean p0:integer,p1:integer,p2:integer,p3:integer,p4:any,p5:boolean,p6:boolean,p7:integer,p8:any,p9:integer NetworkInitializeCash c MONEY 0x3DA5ECD1A56CBA6D wallet:integer,bank:integer -NetworkInviteGamers c NETWORK 0x9D80CD1D0E6327DE boolean p0:any,p1:any,p2:any,p3:any -NetworkInviteGamersToTransition c NETWORK 0x4A595C32F77DFF76 boolean p0:any,p1:any +NetworkInviteGamers c NETWORK 0x9D80CD1D0E6327DE boolean,integer,integer,integer p1:any +NetworkInviteGamersToTransition c NETWORK 0x4A595C32F77DFF76 boolean,integer p1:any NetworkIsActivitySession c NETWORK 0x05095437424397FA boolean NetworkIsActivitySpectator c NETWORK 0x12103B9E0C9F92FB boolean -NetworkIsActivitySpectatorFromHandle c NETWORK 0x2763BBAA72A7BCB9 boolean,integer +NetworkIsActivitySpectatorFromHandle c NETWORK 0x2763BBAA72A7BCB9 boolean,integer networkHandle?:integer NetworkIsAddingFriend c NETWORK 0x6EA101606F6E4D81 any NetworkIsCableConnected c NETWORK 0xEFFB25453D8600F9 boolean -NetworkIsChattingInPlatformParty c NETWORK 0x8DE9945BCC9AEC52 boolean,integer +NetworkIsChattingInPlatformParty c NETWORK 0x8DE9945BCC9AEC52 boolean,integer networkHandle?:integer NetworkIsClanMembershipFinishedDownloading c NETWORK 0xB3F64A6A91432477 boolean NetworkClanAnyDownloadMembershipPending NetworkIsClockTimeOverridden c NETWORK 0xD7C95D322FF57522 boolean NetworkIsCloudAvailable c NETWORK 0x9A4CF4F48AD77302 boolean @@ -6628,18 +6685,18 @@ NetworkIsDoorNetworked c NETWORK 0xC01E93FAC20C3346 boolean doorHash:Hash NetworkIsEntityConcealed c NETWORK 0x71302EC70689052A boolean entity:Entity NetworkIsEntityFading c NETWORK 0x422F32CC7E56ABAD boolean entity:Entity NetworkIsFindingGamers c NETWORK 0xDDDF64C91BFCF0AA boolean -NetworkIsFriend c NETWORK 0x1A24A179F9B31654 boolean,integer -NetworkIsFriendHandleOnline c NETWORK 0x87EB7A3FFCB314DB boolean,integer +NetworkIsFriend c NETWORK 0x1A24A179F9B31654 boolean,integer networkHandle?:integer +NetworkIsFriendHandleOnline c NETWORK 0x87EB7A3FFCB314DB boolean,integer networkHandle?:integer NetworkIsFriendInMultiplayer c NETWORK 0x57005C18827F3A28 boolean friendName:string NetworkIsFriendInSameTitle c NETWORK 0x2EA9A3BEDF3F17B8 boolean friendName:string NetworkIsFriendIndexOnline c NETWORK 0xBAD8F2A42B844821 boolean friendIndex:integer NetworkIsFriendOnline c NETWORK 0x425A44533437B64D boolean name:string -NetworkIsFriendOnline_2 c NETWORK 0x87EB7A3FFCB314DB boolean,integer NetworkIsFriendHandleOnline +NetworkIsFriendOnline_2 c NETWORK 0x87EB7A3FFCB314DB boolean,integer networkHandle?:integer NetworkIsFriendHandleOnline NetworkIsGameInProgress c NETWORK 0x10FAB35428CCC9D7 boolean -NetworkIsGamerBlockedByMe c NETWORK 0xE944C4F5AF1B5883 boolean networkHandle:any -NetworkIsGamerInMySession c NETWORK 0x0F10B05DDF8D16E9 boolean,integer -NetworkIsGamerMutedByMe c NETWORK 0xCE60DE011B6C7978 boolean,integer -NetworkIsGamerTalking c NETWORK 0x71C33B22606CD88A boolean,integer +NetworkIsGamerBlockedByMe c NETWORK 0xE944C4F5AF1B5883 boolean,integer networkHandle?:integer +NetworkIsGamerInMySession c NETWORK 0x0F10B05DDF8D16E9 boolean,integer networkHandle?:integer +NetworkIsGamerMutedByMe c NETWORK 0xCE60DE011B6C7978 boolean,integer networkHandle?:integer +NetworkIsGamerTalking c NETWORK 0x71C33B22606CD88A boolean,integer networkHandle?:integer NetworkIsGettingGamerStatus c NETWORK 0x94A8394D150B013A boolean NetworkIsHandleValid c NETWORK 0x6F79B93B0A8E4133 boolean,integer bufferSize:integer NetworkIsHost c NETWORK 0x8DB296B814EDDA07 boolean @@ -6652,14 +6709,14 @@ NetworkIsInSession c NETWORK 0xCA97246103B63917 boolean NetworkIsInSpectatorMode c NETWORK 0x048746E388762E11 boolean NetworkIsInTransition c NETWORK 0x68049AEFF83D8F0A boolean NetworkIsInTutorialSession c NETWORK 0xADA24309FE08DACF boolean -NetworkIsInactiveProfile c NETWORK 0x7E58745504313A2E boolean,integer +NetworkIsInactiveProfile c NETWORK 0x7E58745504313A2E boolean,integer networkHandle?:integer NetworkIsLocalPlayerInvincible c NETWORK 0x8A8694B48715B000 boolean NetworkIsLocalTalking c NETWORK 0xC0D2AF00BCC234CA boolean NetworkIsMultiplayerDisabled c NETWORK 0x9747292807126EDA boolean NetworkIsNetworkIdAClone c NETWORK 0x7242F8B741CE1086 boolean netId:integer NetworkIsOfflineInvitePending c NETWORK 0x74698374C45701D2 boolean NetworkIsParticipantActive c NETWORK 0x6FF8FF40B6357D45 boolean p0:integer -NetworkIsPartyMember c NETWORK 0x676ED266AADD31E0 boolean,integer +NetworkIsPartyMember c NETWORK 0x676ED266AADD31E0 boolean,integer networkHandle?:integer NetworkIsPendingFriend c NETWORK 0x0BE73DA6984A6E33 any p0:any NetworkIsPlayerAParticipant c NETWORK 0x3CA58F6CB7CBD784 boolean player:Player NetworkIsPlayerAParticipantOnScript c NETWORK 0x1AD5B71586B94820 boolean player1:Player,script:string,player2:Player @@ -6688,7 +6745,7 @@ NetworkIsTransitionBusy c NETWORK 0x520F3282A53D26B7 boolean NetworkIsTransitionClosedCrew c NETWORK 0x0DBD5D7E3C5BEC3B boolean NetworkIsTransitionClosedFriends c NETWORK 0x6512765E3BE78C50 boolean NetworkIsTransitionHost c NETWORK 0x0B824797C9BF2159 boolean -NetworkIsTransitionHostFromHandle c NETWORK 0x6B5C83BA3EFE6A10 boolean,integer +NetworkIsTransitionHostFromHandle c NETWORK 0x6B5C83BA3EFE6A10 boolean,integer networkHandle?:integer NetworkIsTransitionMatchmaking c NETWORK 0x292564C735375EDF boolean NetworkIsTransitionOpenToMatchmaking c NETWORK 0x37A4494483B9F5C9 boolean NetworkIsTransitionPrivate c NETWORK 0x5A6AA44FF8E931E6 boolean @@ -6705,8 +6762,8 @@ NetworkJoinTransition c NETWORK 0x9D060B08CD63321A boolean player:Player NetworkLaunchTransition c NETWORK 0x2DCF46CB1A4F0884 boolean NetworkLeaveTransition c NETWORK 0xD23A1A815D21DB19 boolean NetworkManualDeleteCharacter c MONEY 0x821418C727FCACD7 characterSlot:integer -NetworkMarkTransitionGamerAsFullyJoined c NETWORK 0x5728BB6D63E3FF1D boolean p0:any -NetworkMemberIdFromGamerHandle c NETWORK 0xC82630132081BB6F string,integer +NetworkMarkTransitionGamerAsFullyJoined c NETWORK 0x5728BB6D63E3FF1D boolean,integer p0?:integer +NetworkMemberIdFromGamerHandle c NETWORK 0xC82630132081BB6F string,integer networkHandle?:integer NetworkMoneyCanBet c MONEY 0x81404F3DC124FE5B boolean amount:integer,p1:boolean,p2:boolean NetworkOpenTransitionMatchmaking c NETWORK 0x2B3A8F7CA3A38FDE NetworkOverrideChatRestrictions c NETWORK 0x3039AE5AD2C9C0C4 player:Player,toggle:boolean @@ -6725,8 +6782,8 @@ NetworkPayUtilityBill c MONEY 0xAFE08B35EC0C9EAE amount:integer,p1:boolean,p2:b NetworkPedForceGameStateUpdate c NETWORK 0xF0BC9BCD24A511D5 ped:Ped NetworkPlayerGetCheaterReason c NETWORK 0x172F75B6EE2233BA integer NetworkPlayerGetName c NETWORK 0x7718D2E2060837D2 string player:Player -NetworkPlayerGetUserId c NETWORK 0x4927FC39CD0869A0 string,integer player:Player NetworkPlayerGetUserid -NetworkPlayerGetUserid c NETWORK 0x4927FC39CD0869A0 string,integer player:Player +NetworkPlayerGetUserId c NETWORK 0x4927FC39CD0869A0 string,integer player:Player,userID?:integer NetworkPlayerGetUserid +NetworkPlayerGetUserid c NETWORK 0x4927FC39CD0869A0 string,integer player:Player,userID?:integer NetworkPlayerHasHeadset c NETWORK 0x3FB99A8B08D18FD6 boolean player:Player NetworkPlayerIdToInt c PLAYER 0xEE68096F9F37341E integer NetworkPlayerIndexIsCheater c NETWORK 0x565E430DB3B05BEC boolean player:Player @@ -6736,21 +6793,21 @@ NetworkPlayerIsInClan c NETWORK 0x579CCED0265D4896 boolean NetworkClanServiceIs NetworkPlayerIsRockstarDev c NETWORK 0x544ABDDA3B409B6D boolean player:Player NetworkPlayerIsUnk c NETWORK 0x172F75B6EE2233BA integer NetworkPlayerGetCheaterReason NetworkPlayerSomething c NETWORK 0x565E430DB3B05BEC boolean player:Player NetworkPlayerIndexIsCheater -NetworkQueryRespawnResults c NETWORK 0x3C891A251567DFCE any p0:any -NetworkQueueGamerForStatus c NETWORK 0x85A0EF54A500882C boolean p0:any +NetworkQueryRespawnResults c NETWORK 0x3C891A251567DFCE any,integer p0?:integer +NetworkQueueGamerForStatus c NETWORK 0x85A0EF54A500882C boolean,integer p0?:integer NetworkQuitMpToDesktop c NETWORK 0x45A83257ED02D9BC -NetworkReceivePlayerJobshareCash c MONEY 0x56A3B51944C50598 integer value:integer +NetworkReceivePlayerJobshareCash c MONEY 0x56A3B51944C50598 integer value:integer,networkHandle?:integer NetworkRefundCash c MONEY 0xF9C812CD7C46E817 index:integer,context:string,reason:string,unk:boolean NetworkRegisterEntityAsNetworked c NETWORK 0x06FAACD625D80CAA entity:Entity NetworkRegisterHostBroadcastVariables c NETWORK 0x3E9B2F01C50DF595 integer numVars:integer NetworkRegisterPlayerBroadcastVariables c NETWORK 0x3364AA97340CA215 integer numVars:integer -NetworkRegisterTunableBoolHash c NETWORK 0x697F508861875B42 boolean,boolean contextHash:Hash,nameHash:Hash -NetworkRegisterTunableFloatHash c NETWORK 0x1950DAE9848A4739 boolean,number contextHash:Hash,nameHash:Hash -NetworkRegisterTunableIntHash c NETWORK 0x3A8B55FDA4C8DDEF boolean,integer contextHash:Hash,nameHash:Hash +NetworkRegisterTunableBoolHash c NETWORK 0x697F508861875B42 boolean,boolean contextHash:Hash,nameHash:Hash,value?:boolean +NetworkRegisterTunableFloatHash c NETWORK 0x1950DAE9848A4739 boolean,number contextHash:Hash,nameHash:Hash,value?:number +NetworkRegisterTunableIntHash c NETWORK 0x3A8B55FDA4C8DDEF boolean,integer contextHash:Hash,nameHash:Hash,value?:integer NetworkRemoveAllTransitionInvite c NETWORK 0x726E0375C7A26368 NetworkRemoveEntityArea c NETWORK 0x93CF869BAA0C4874 boolean p0:any NetworkRemovePresenceInvite c NETWORK 0xF0210268DB0974B1 boolean p0:any -NetworkRemoveTransitionInvite c NETWORK 0x7524B431B2E6F7EE p0:any +NetworkRemoveTransitionInvite c NETWORK 0x7524B431B2E6F7EE integer p0?:integer NetworkReportMyself c NETWORK 0x5626D9D6810730D5 NetworkRequestCloudBackgroundScripts c NETWORK 0x924426BFFD82E915 boolean NetworkRequestCloudTunables c NETWORK 0x42FB3B532D526E6C @@ -6763,10 +6820,10 @@ NetworkResurrectLocalPlayer c NETWORK 0xEA23C49EAA83ACFB x:number,y:number,z:nu NetworkRivalDeliveryCompleted c MONEY 0x1B882107C23A9022 earnedMoney:integer NetworkSctvSlots c NETWORK 0x49EC8030F5015F8B matchmakingGroup:integer NetworkSessionSetMatchmakingGroup NetworkSeedRandomNumberGenerator c NETWORK 0xF1B84178F8674195 seed:integer -NetworkSendInviteViaPresence c NETWORK 0xC3C7A6AFDB244624 boolean,integer p1:any,p2:any,p3:any -NetworkSendPresenceInvite c NETWORK 0xC3C7A6AFDB244624 boolean,integer p1:any,p2:any,p3:any NetworkSendInviteViaPresence -NetworkSendPresenceTransitionInvite c NETWORK 0xC116FF9B4D488291 boolean p0:any,p1:any,p2:any,p3:any -NetworkSendTextMessage c NETWORK 0x3A214F2EC889B100 boolean,integer message:string +NetworkSendInviteViaPresence c NETWORK 0xC3C7A6AFDB244624 boolean,integer,integer p2:any,p3:any +NetworkSendPresenceInvite c NETWORK 0xC3C7A6AFDB244624 boolean,integer,integer p2:any,p3:any NetworkSendInviteViaPresence +NetworkSendPresenceTransitionInvite c NETWORK 0xC116FF9B4D488291 boolean,integer,integer p2:any,p3:any +NetworkSendTextMessage c NETWORK 0x3A214F2EC889B100 boolean,integer message:string,networkHandle?:integer NetworkSendTransitionGamerInstruction c NETWORK 0x31D1D2B858D25E6B boolean,integer p1:string,p2:integer,p3:integer,p4:boolean NetworkSessionActivityQuickmatch c NETWORK 0xBE3E347A87ACEB82 boolean p0:any,p1:any,p2:any,p3:any NetworkSessionAddActiveMatchmakingGroup c NETWORK 0xCAE55F48D3D7875C groupId:integer @@ -6779,7 +6836,7 @@ NetworkSessionEnd c NETWORK 0xA02E59562D711006 boolean p0:boolean,p1:boolean NetworkSessionEnter c NETWORK 0x330ED4D05491934F any p0:any,p1:any,p2:any,maxPlayers:integer,p4:any,p5:any NetworkSessionForceCancelInvite c NETWORK 0xA29177F7703B5644 NetworkSessionFriendMatchmaking c NETWORK 0x2CFC76E0D087C994 boolean p0:integer,p1:integer,maxPlayers:integer,p3:boolean -NetworkSessionGetInviter c NETWORK 0xE57397B4A3429DD0 integer +NetworkSessionGetInviter c NETWORK 0xE57397B4A3429DD0 integer networkHandle?:integer NetworkSessionGetKickVote c NETWORK 0xD6D09A6F32F49EF1 boolean player:Player NetworkSessionGetMatchmakingGroupFree c NETWORK 0x56CE820830EF040B integer p0:integer NetworkSessionGetPrivateSlots c NETWORK 0x53AFD64C6758F2F9 integer @@ -6807,7 +6864,7 @@ NetworkSessionSetMatchmakingMentalState c NETWORK 0xF1EEA2DDA9FFA69D p0:any NetworkSessionSetMatchmakingPropertyId c NETWORK 0x3F52E880AAF6C8CA p0:boolean NetworkSessionSetMaxPlayers c NETWORK 0x8B6A4DD0AF9CE215 playerType:integer,playerCount:integer NetworkSessionSetMatchmakingGroupMax NetworkSessionValidateJoin c NETWORK 0xC19F6C8E7865A6FF p0:boolean -NetworkSessionVoiceConnectToPlayer c NETWORK 0xABD5E88B8A2D3DB2 globalPtr:any +NetworkSessionVoiceConnectToPlayer c NETWORK 0xABD5E88B8A2D3DB2 integer globalPtr?:integer NetworkSessionVoiceHost c NETWORK 0x9C1556705F864230 NetworkSessionVoiceLeave c NETWORK 0x6793E42BE02B575D NetworkSessionVoiceRespondToRequest c NETWORK 0x7F8413B7FC2AA6B9 p0:boolean,p1:integer @@ -6817,21 +6874,21 @@ NetworkSetActivityPlayerMax c NETWORK 0x0E4F77F7B9D74D84 playerCount:integer NetworkSetActivitySpectator c NETWORK 0x75138790B4359A74 toggle:boolean NetworkSetActivitySpectatorMax c NETWORK 0x9D277B76D1D12222 maxSpectators:integer NetworkSetChoiceMigrateOptions c NETWORK 0x5C707A667DF8B9FA toggle:boolean,player:Player -NetworkSetCurrentDataManagerHandle c NETWORK 0x796A87B3B68D1F3D boolean p0:any +NetworkSetCurrentDataManagerHandle c NETWORK 0x796A87B3B68D1F3D boolean,integer p0?:integer NetworkSetCurrentMissionId c NETWORK 0x2C863ACDCD12B3DB missionId:string NetworkSetCurrentSpawnSetting c NETWORK 0xAA6D5451DC3448B6 mpSettingSpawn:Hash -NetworkSetCurrentlySelectedGamerHandleFromInviteMenu c NETWORK 0x7206F674F2A3B1BB boolean p0:any +NetworkSetCurrentlySelectedGamerHandleFromInviteMenu c NETWORK 0x7206F674F2A3B1BB boolean,integer p0?:integer NetworkSetEntityCanBlend c NETWORK 0xD830567D88A1E873 entity:Entity,toggle:boolean NetworkSetEntityGhostedWithOwner c NETWORK 0x4BA166079D658ED4 entity:Entity,p1:boolean NetworkSetEntityInvisibleToNetwork c NETWORK 0xF1CA12B18AEF5298 entity:Entity,toggle:boolean NetworkSetEntityVisibleToNetwork c NETWORK 0xF1CA12B18AEF5298 entity:Entity,toggle:boolean NetworkSetEntityInvisibleToNetwork NetworkSetFriendlyFireOption c NETWORK 0xF808475FA571D823 toggle:boolean -NetworkSetGamerInvitedToTransition c NETWORK 0xCA2C8073411ECDB6 integer +NetworkSetGamerInvitedToTransition c NETWORK 0xCA2C8073411ECDB6 integer networkHandle?:integer NetworkSetInFreeCamMode c NETWORK 0xFC18DB55AE19E046 toggle:boolean NetworkSetInMpCutscene c NETWORK 0x9CA5DE655269FEC4 p0:boolean,p1:boolean NetworkSetInSpectatorMode c NETWORK 0x423DE3854BB50894 toggle:boolean,playerPed:Ped NetworkSetInSpectatorModeExtended c NETWORK 0x419594E137637120 toggle:boolean,playerPed:Ped,p2:boolean -NetworkSetInviteOnCallForInviteMenu c NETWORK 0x66F010A4B031A331 integer +NetworkSetInviteOnCallForInviteMenu c NETWORK 0x66F010A4B031A331 integer networkHandle?:integer NetworkSetKeepFocuspoint c NETWORK 0x7F8413B7FC2AA6B9 p0:boolean,p1:integer NetworkSessionVoiceRespondToRequest NetworkSetLocalPlayerInvincibleTime c NETWORK 0x2D95C7E2D7E07307 time:integer NetworkSetLocalPlayerSyncLookAt c NETWORK 0x524FF0AEFF9C3973 toggle:boolean @@ -6852,14 +6909,14 @@ NetworkSetTeamOnlyChat c NETWORK 0xD5B4883AC32F24C3 toggle:boolean NetworkSetThisScriptIsNetworkScript c NETWORK 0x1CA59E306ECB80A5 maxNumMissionParticipants:integer,p1:boolean,instanceId:integer NetworkSetThisScriptMarked c NETWORK 0xD1110739EEADB592 boolean p0:any,p1:boolean,p2:any NetworkIsThisScriptMarked NetworkSetTransitionActivityId c NETWORK 0x30DE938B516F0AD2 p0:any -NetworkSetTransitionCreatorHandle c NETWORK 0xEF26739BCD9907D5 p0:any +NetworkSetTransitionCreatorHandle c NETWORK 0xEF26739BCD9907D5 integer p0?:integer NetworkSetTransitionVisibilityLock c NETWORK 0x0C978FDA19692C2C p0:boolean,p1:boolean NetworkSetVehicleTestDrive c NETWORK 0x8C70252FC40F320B toggle:boolean NetworkSetVehicleWheelsDestructible c NETWORK 0x890E2C5ABED7236D vehicle:Vehicle,toggle:boolean NetworkSetVoiceActive c NETWORK 0xBABEC9E69A91C57B toggle:boolean NetworkSetVoiceChannel c NETWORK 0xEF6212C2EFEF1A23 channel:integer -NetworkShopBasketAddItem c NETSHOPPING 0xF30980718C8ED876 boolean itemData:any,quantity:integer NetGameserverBasketAddItem -NetworkShopBasketApplyServerData c NETSHOPPING 0xE1A0450ED46A7812 boolean p0:any,p1:any NetGameserverBasketApplyServerData +NetworkShopBasketAddItem c NETSHOPPING 0xF30980718C8ED876 boolean,integer quantity:integer NetGameserverBasketAddItem +NetworkShopBasketApplyServerData c NETSHOPPING 0xE1A0450ED46A7812 boolean,integer p0:any,p1?:integer NetGameserverBasketApplyServerData NetworkShopBasketEnd c NETSHOPPING 0xA65568121DF2EA26 boolean NetGameserverBasketEnd NetworkShopBasketIsFull c NETSHOPPING 0x27F76CC6C55AD30E boolean NetGameserverBasketIsFull NetworkShopBasketStart c NETSHOPPING 0x279F08B1A4B29B7E boolean,integer categoryHash:Hash,actionHash:Hash,flags:integer NetGameserverBasketStart @@ -6880,7 +6937,7 @@ NetworkShopSetTelemetryNonceSeed c NETSHOPPING 0x9507D4271988E1AE boolean p0:int NetworkShopStartSession c NETSHOPPING 0xA135AC892A58FC07 boolean charSlot:integer NetGameserverStartSession NetworkShopTerminateService c NETSHOPPING 0xE2A99A9B524BEFFF boolean transactionId:integer NetGameserverEndService NetworkShouldShowConnectivityTroubleshooting c NETWORK 0x82A2B386716608F1 boolean -NetworkShowProfileUi c NETWORK 0x859ED1CEA343FCA8 integer +NetworkShowProfileUi c NETWORK 0x859ED1CEA343FCA8 integer networkHandle?:integer NetworkSpentAmmoDrop c MONEY 0xB162DC95C0A3317B p0:any,p1:boolean,p2:boolean NetworkSpentArcadeGame c MONEY 0xEAD3D81F2C3A1458 p0:any,p1:any,p2:any,p3:any,p4:any NetworkSpentArcadeGeneric c MONEY 0x43AA7FAC4E6D6687 p0:any,p1:any,p2:any,p3:any,p4:any @@ -6906,14 +6963,14 @@ NetworkSpentBuyArena c MONEY 0x40D5DA9550B7CB46 amount:integer,p1:boolean,p2:bo NetworkSpentBuyAutoshop c MONEY 0xEEB7E5D1FEB20869 p0:any,p1:any,p2:any,p3:any NetworkSpentBuyBase c MONEY 0x4EA3F425C7744D21 p0:any,p1:any,p2:any,p3:any NetworkSpentBuyBunker c MONEY 0x12D148D26538D0F9 p0:any,p1:any,p2:any,p3:any -NetworkSpentBuyCasino c MONEY 0x34A6FC4D06C4DA0F amount:integer,p1:boolean,p2:boolean,data:any +NetworkSpentBuyCasino c MONEY 0x34A6FC4D06C4DA0F integer amount:integer,p1:boolean,p2:boolean,data?:integer NetworkSpentBuyOfftheradar c MONEY 0xA628A745E2275C5D p0:any,p1:boolean,p2:boolean NetworkSpentBuyPassiveMode c MONEY 0x6D3A430D1A809179 p0:any,p1:boolean,p2:boolean NetworkSpentBuyRevealPlayers c MONEY 0x6E176F1B18BC0637 p0:any,p1:boolean,p2:boolean NetworkSpentBuyTiltrotor c MONEY 0x0CCE73BC7A11E885 p0:any,p1:any,p2:any,p3:any NetworkSpentBuyTruck c MONEY 0xAC272C0AE01B4BD8 p0:any,p1:any,p2:any,p3:any -NetworkSpentBuyWantedlevel c MONEY 0xE1B13771A843C4F6 p0:any,p1:any,p2:boolean,p3:boolean -NetworkSpentCallPlayer c MONEY 0xACDE7185B374177C p0:any,p1:any,p2:boolean,p3:boolean +NetworkSpentBuyWantedlevel c MONEY 0xE1B13771A843C4F6 integer p0:any,p2:boolean,p3:boolean +NetworkSpentCallPlayer c MONEY 0xACDE7185B374177C integer p0:any,p2:boolean,p3:boolean NetworkSpentCarclub c MONEY 0x925227803A0EAA1B p0:any,p1:boolean,p2:boolean,p3:any NetworkSpentCarclubMembership c MONEY 0x1464E17207CD36E2 p0:any,p1:any,p2:any,p3:any,p4:any NetworkSpentCarclubTakeover c MONEY 0xD1E46824E6FB92B5 p0:any,p1:any,p2:any,p3:any @@ -6977,7 +7034,7 @@ NetworkSpentUpgradeArena c MONEY 0x037ABB06825D7AB1 amount:integer,p1:boolean,p NetworkSpentUpgradeAutoshop c MONEY 0xDD829AA198FDC46C p0:any,p1:any,p2:any,p3:any NetworkSpentUpgradeBase c MONEY 0x3DD3F33A5D55EA6F p0:any,p1:any,p2:any,p3:any NetworkSpentUpgradeBunker c MONEY 0x0C82D21A77C22D49 p0:any,p1:any,p2:any,p3:any -NetworkSpentUpgradeCasino c MONEY 0x4740D62BC1B4EBEA amount:integer,p1:boolean,p2:boolean,data:any +NetworkSpentUpgradeCasino c MONEY 0x4740D62BC1B4EBEA integer amount:integer,p1:boolean,p2:boolean,data?:integer NetworkSpentUpgradeHangar c MONEY 0x615EB504B0788DAF p0:any,p1:any,p2:any,p3:any NetworkSpentUpgradeSub c MONEY 0x89049A84065CE68E p0:any,p1:any,p2:any,p3:any NetworkSpentUpgradeTiltrotor c MONEY 0x165E135D6DFA2907 p0:any,p1:any,p2:any,p3:any @@ -7006,7 +7063,7 @@ NetworkUpdatePlayerScars c NETWORK 0xB7C7F6AD6424304B NetworkUseHighPrecisionBlending c NETWORK 0x2B1813ABA29016C5 netID:integer,toggle:boolean NetworkUseHighPrecisionVehicleBlending c VEHICLE 0xEC0C1D4922AF9754 vehicle:Vehicle,toggle:boolean NetworkUseLogarithmicBlendingThisFrame c NETWORK 0xCD71A4ECAB22709E entity:Entity -NetworkVoiceConnectToPlayer c NETWORK 0xABD5E88B8A2D3DB2 globalPtr:any NetworkSessionVoiceConnectToPlayer +NetworkVoiceConnectToPlayer c NETWORK 0xABD5E88B8A2D3DB2 integer globalPtr?:integer NetworkSessionVoiceConnectToPlayer NetworkXAffectsGamers c NETWORK 0xE532D6811B3A4D2A boolean p0:any NetworkFindGamersInCrew NewLoadSceneStart c STREAMING 0x212A8D0D2BABFAC2 boolean posX:number,posY:number,posZ:number,offsetX:number,offsetY:number,offsetZ:number,radius:number,p7:integer NewLoadSceneStartSphere c STREAMING 0xACCFB4ACF53551B0 boolean x:number,y:number,z:number,radius:number,p4:any @@ -7017,21 +7074,21 @@ NotificationSendClanInvite c HUD 0x137BC35589E34E1E integer,integer crewTypeIsPr Nullify c DLC 0x46E2B844905BC5F0 boolean,boolean unused:any HasCloudRequestsFinished ObjToNet c NETWORK 0x99BFDC94A603E541 integer object:Object ObjectDecalToggle c HUD 0x444D8CF241EC25C5 contextHash:Hash PauseMenuDeactivateContext -ObjectValueAddArray c DATAFILE 0x5B11728527CA6E5F any objectData:any,key:string DatadictCreateArray -ObjectValueAddBoolean c DATAFILE 0x35124302A556A325 objectData:any,key:string,value:boolean DatadictSetBool -ObjectValueAddFloat c DATAFILE 0xC27E1CC2D795105E objectData:any,key:string,value:number DatadictSetFloat -ObjectValueAddInteger c DATAFILE 0xE7E035450A7948D5 objectData:any,key:string,value:integer DatadictSetInt -ObjectValueAddObject c DATAFILE 0xA358F56F10732EE1 any objectData:any,key:string DatadictCreateDict -ObjectValueAddString c DATAFILE 0x8FF3847DADD8E30C objectData:any,key:string,value:string DatadictSetString -ObjectValueAddVector3 c DATAFILE 0x4CD49B76338C7DEE objectData:any,key:string,valueX:number,valueY:number,valueZ:number DatadictSetVector -ObjectValueGetArray c DATAFILE 0x7A983AA9DA2659ED any objectData:any,key:string DatadictGetArray -ObjectValueGetBoolean c DATAFILE 0x1186940ED72FFEEC boolean objectData:any,key:string DatadictGetBool -ObjectValueGetFloat c DATAFILE 0x06610343E73B9727 number objectData:any,key:string DatadictGetFloat -ObjectValueGetInteger c DATAFILE 0x78F06F6B1FB5A80C integer objectData:any,key:string DatadictGetInt -ObjectValueGetObject c DATAFILE 0xB6B9DDC412FCEEE2 any objectData:any,key:string DatadictGetDict -ObjectValueGetString c DATAFILE 0x3D2FD9E763B24472 string objectData:any,key:string DatadictGetString -ObjectValueGetType c DATAFILE 0x031C55ED33227371 integer objectData:any,key:string DatadictGetType -ObjectValueGetVector3 c DATAFILE 0x46CD3CB66E0825CC vector3 objectData:any,key:string DatadictGetVector +ObjectValueAddArray c DATAFILE 0x5B11728527CA6E5F any,integer key:string DatadictCreateArray +ObjectValueAddBoolean c DATAFILE 0x35124302A556A325 integer key:string,value:boolean DatadictSetBool +ObjectValueAddFloat c DATAFILE 0xC27E1CC2D795105E integer key:string,value:number DatadictSetFloat +ObjectValueAddInteger c DATAFILE 0xE7E035450A7948D5 integer key:string,value:integer DatadictSetInt +ObjectValueAddObject c DATAFILE 0xA358F56F10732EE1 any,integer key:string DatadictCreateDict +ObjectValueAddString c DATAFILE 0x8FF3847DADD8E30C integer key:string,value:string DatadictSetString +ObjectValueAddVector3 c DATAFILE 0x4CD49B76338C7DEE integer key:string,valueX:number,valueY:number,valueZ:number DatadictSetVector +ObjectValueGetArray c DATAFILE 0x7A983AA9DA2659ED any,integer key:string DatadictGetArray +ObjectValueGetBoolean c DATAFILE 0x1186940ED72FFEEC boolean,integer key:string DatadictGetBool +ObjectValueGetFloat c DATAFILE 0x06610343E73B9727 number,integer key:string DatadictGetFloat +ObjectValueGetInteger c DATAFILE 0x78F06F6B1FB5A80C integer,integer key:string DatadictGetInt +ObjectValueGetObject c DATAFILE 0xB6B9DDC412FCEEE2 any,integer key:string DatadictGetDict +ObjectValueGetString c DATAFILE 0x3D2FD9E763B24472 string,integer key:string DatadictGetString +ObjectValueGetType c DATAFILE 0x031C55ED33227371 integer,integer key:string DatadictGetType +ObjectValueGetVector3 c DATAFILE 0x46CD3CB66E0825CC vector3,integer key:string DatadictGetVector OnEnterMp c DLC 0x0888C3502DBBEEF5 OnEnterSp c DLC 0xD7C10C4A637992C9 OnesyncEnableRemoteAttachmentSanitization c CFX 0x30CE39D8 enable:boolean @@ -7040,7 +7097,7 @@ OpenCommerceStore c NETWORK 0x58C21165F6545892 p0:string,p1:string OpenOnlinePoliciesMenu c HUD 0x805D7CBB36FD6C4C OpenPatrolRoute c TASK 0xA36BFB5EE89F3D82 patrolRoute:string OpenReportugcMenu c HUD 0x523A590C1A3CC0D3 -OpenSequenceTask c TASK 0xE8854A4326B9E12B integer +OpenSequenceTask c TASK 0xE8854A4326B9E12B integer taskSequenceId?:integer OpenSocialClubMenu c HUD 0x75D3691713C3B05A OpenVehicleBombBay c VEHICLE 0x87E7F24270732CB1 vehicle:Vehicle OpenBombBayDoors OrderedBossVehicle c STATS 0xCEA553E35C2246E1 p0:any,p1:any,vehicleHash:Hash @@ -7075,8 +7132,10 @@ PauseDeathArrestRestart c MISC 0x2C2B3493FBF51C71 toggle:boolean PauseMenuActivateContext c HUD 0xDD564BDD0472C936 hash:Hash PauseMenuDeactivateContext c HUD 0x444D8CF241EC25C5 contextHash:Hash PauseMenuDisableBusyspinner c HUD 0x9245E81072704B8A toggle:boolean -PauseMenuGetIndexOfMouseHoveredSlot c HUD 0x359AF31A4B52F5ED integer -PauseMenuGetUniqueIdOfMouseHoveredSlot c HUD 0x13C4B962653A5280 integer +PauseMenuGetIndexOfMouseHoveredSlot c HUD 0x359AF31A4B52F5ED integer PauseMenuGetMouseHoverIndex +PauseMenuGetMouseHoverIndex c HUD 0x359AF31A4B52F5ED integer +PauseMenuGetMouseHoverUniqueId c HUD 0x13C4B962653A5280 integer +PauseMenuGetUniqueIdOfMouseHoveredSlot c HUD 0x13C4B962653A5280 integer PauseMenuGetMouseHoverUniqueId PauseMenuIsContextActive c HUD 0x84698AB38D0C6636 boolean contextHash:Hash PauseMenuIsContextMenuActive c HUD 0x2A25ADC48F87841F any PauseMenuRedrawInstructionalButtons c HUD 0x4895BDEA16E7C080 p0:integer @@ -7095,8 +7154,9 @@ PerformHttpRequestInternal s CFX 0x8E8CC653 integer requestData:string,requestDa PerformHttpRequestInternalEx s CFX 0x6B171E87 integer requestData:table PinInteriorInMemory c INTERIOR 0x2CA429C029CCF247 interior:integer PinRopeVertex c PHYSICS 0x2B320CF14146B69A ropeId:integer,vertex:integer,x:number,y:number,z:number +PlaceObjectOnGroundOrObjectProperly c OBJECT 0xD76EEEF746057FD6 boolean object:Object PlaceObjectOnGroundProperly c OBJECT 0x58A850EAEE20FAA3 boolean object:Object -PlaceObjectOnGroundProperly_2 c OBJECT 0xD76EEEF746057FD6 boolean object:Object +PlaceObjectOnGroundProperly_2 c OBJECT 0xD76EEEF746057FD6 boolean object:Object PlaceObjectOnGroundOrObjectProperly PlayAmbientSpeech1 c AUDIO 0x8E04FEDD28D42462 ped:Ped,speechName:string,speechParam:string PlayPedAmbientSpeechNative PlayAmbientSpeech2 c AUDIO 0xC6941B4A3A8FBBB9 ped:Ped,speechName:string,speechParam:string PlayPedAmbientSpeechAndCloneNative PlayAmbientSpeechAtCoords c AUDIO 0xED640017ED337E45 speechName:string,voiceName:string,x:number,y:number,z:number,speechParam:string PlayAmbientSpeechFromPositionNative @@ -7108,8 +7168,8 @@ PlayBinkMovie c GRAPHICS 0x70D2CC8A542A973C binkMovie:integer PlayCamAnim c CAM 0x9A2D0FB2E7852392 boolean cam:Cam,animName:string,animDictionary:string,x:number,y:number,z:number,xRot:number,yRot:number,zRot:number,p9:boolean,p10:integer PlayDeferredSoundFrontend c AUDIO 0xCADA5A0D0702381E soundName:string,soundsetName:string PlayEndCreditsMusic c AUDIO 0xCD536C4D33DCC900 bActive:boolean -PlayEntityAnim c ENTITY 0x7FB218262B810701 boolean entity:Entity,animName:string,animDict:string,p3:number,loop:boolean,stayInAnim:boolean,p6:boolean,delta:number,bitset:any -PlayEntityScriptedAnim c TASK 0x77A1EEC547E7FCF1 p0:any,p1:any,p2:any,p3:any,p4:number,p5:number +PlayEntityAnim c ENTITY 0x7FB218262B810701 boolean entity:Entity,animName:string,animDict:string,fBlendDelta:number,bLoop:boolean,bHoldLastFrame:boolean,bDriveToPose:boolean,fStartPhase:number,iFlags:integer +PlayEntityScriptedAnim c TASK 0x77A1EEC547E7FCF1 integer,integer,integer p0:any,p4:number,p5:number PlayFacialAnim c PED 0xE1E65CA8AC9C00ED ped:Ped,animName:string,animDict:string PlayMissionCompleteAudio c AUDIO 0xB138AAB8A70D3C69 audioName:string PlayPain c AUDIO 0xBC9AE166038A5CEC ped:Ped,damageReason:integer,rawDamage:number @@ -7129,8 +7189,8 @@ PlayStreamFromVehicle c AUDIO 0xB70374A758007DFA vehicle:Vehicle PlayStreamFrontend c AUDIO 0x58FCE43488F9F5F4 PlaySynchronizedAudioEvent c AUDIO 0x8B2FD4560E55DD2D boolean sceneId:integer PlaySynchronizedCamAnim c CAM 0xE32EFE9AB4A9AA0C boolean camera:Cam,scene:integer,animName:string,animDictionary:string -PlaySynchronizedEntityAnim c ENTITY 0xC77720A12FE14A86 boolean entity:Entity,syncedScene:integer,animation:string,propName:string,p4:number,p5:number,p6:any,p7:number -PlaySynchronizedMapEntityAnim c ENTITY 0xB9C54555ED30FBC4 boolean p0:number,p1:number,p2:number,p3:number,p4:any,p5:any,p6:any,p7:any,p8:number,p9:number,p10:any,p11:number +PlaySynchronizedEntityAnim c ENTITY 0xC77720A12FE14A86 boolean entity:Entity,syncedScene:integer,animName:string,animDictName:string,fBlendInDelta:number,fBlendOutDelta:number,iFlags:integer,fMoverBlendInDelta:number +PlaySynchronizedMapEntityAnim c ENTITY 0xB9C54555ED30FBC4 boolean x:number,y:number,z:number,radius:number,objectModelHash:Hash,sceneId:integer,pAnimName:string,pAnimDictName:string,fBlendDelta:number,fBlendOutDelta:number,flags:integer,fMoverBlendInDelta:number PlayTennisDiveAnim c MISC 0x8FA9C42FC5D7C64B ped:Ped,p1:integer,p2:number,p3:number,p4:number,p5:boolean PlayTennisSwingAnim c MISC 0xE266ED23311F24D4 ped:Ped,animDict:string,animName:string,p3:number,p4:number,p5:boolean PlayVehicleDoorCloseSound c AUDIO 0x62A456AA4769EF34 vehicle:Vehicle,doorIndex:integer @@ -7144,12 +7204,12 @@ PlaystatsActivityDone c STATS 0xA071E0ED98F91286 p0:any,p1:any PlaystatsAmbientMissionCrateCreated c STATS 0xAFC7E5E075A96F46 p0:number,p1:number,p2:number PlaystatsCrateCreated PlaystatsArcadegame c STATS 0x533A7D1EA58DF958 p0:any,p1:any,p2:any,p3:any,p4:any,p5:any PlaystatsArenaWarSpectator c STATS 0x6F4F599753F8200A p0:integer,p1:integer,p2:integer,p3:integer,p4:integer -PlaystatsArenaWarsEnded c STATS 0xB479D9F0D48A1BC5 data:any +PlaystatsArenaWarsEnded c STATS 0xB479D9F0D48A1BC5 integer data?:integer PlaystatsAwardBadsport c STATS 0x47B32F5611E6E483 id:integer PlaystatsAwardXp c STATS 0x46F917F6B4128FE4 amount:integer,type:Hash,category:Hash PlaystatsBackgroundScriptAction c STATS 0x5009DFD741329729 action:string,value:integer PlaystatsBanAlert c STATS 0x516FC96EB88EEFE5 p0:integer -PlaystatsBuyContraband c STATS 0xD6781E42755531F7 data:any +PlaystatsBuyContraband c STATS 0xD6781E42755531F7 integer data?:integer PlaystatsCarclubChallenge c STATS 0x1187CB58D7F3BED7 p0:any,p1:any,p2:any,p3:any PlaystatsCarclubPoints c STATS 0xFF14D6FEEC507BBE p0:any PlaystatsCarclubPrize c STATS 0x69C922B677621428 p0:any,p1:any @@ -7159,7 +7219,7 @@ PlaystatsCasinoChip c STATS 0x0999F3F090EC5012 p0:any PlaystatsCasinoInsidetrack c STATS 0x049F059625058A86 p0:any PlaystatsCasinoInsidetrackLight c STATS 0x23A3CBCD50D54E47 p0:any PlaystatsCasinoLuckyseven c STATS 0x0C432C1435F5E4FA p0:any -PlaystatsCasinoMissionEnded c STATS 0x1A0D4A6C336B7BC5 data:any +PlaystatsCasinoMissionEnded c STATS 0x1A0D4A6C336B7BC5 integer data?:integer PlaystatsCasinoRoulette c STATS 0x95101C443A84E7F1 p0:any PlaystatsCasinoRouletteLight c STATS 0x6572ABA3DE1197FC p0:any PlaystatsCasinoSlotmachine c STATS 0xEF5EC67D392B830A p0:any @@ -7176,18 +7236,18 @@ PlaystatsCrateCreated c STATS 0xAFC7E5E075A96F46 p0:number,p1:number,p2:number PlaystatsCrateCreatedMissionDone c STATS 0xAFC7E5E075A96F46 p0:number,p1:number,p2:number PlaystatsCrateCreated PlaystatsCrateDrop c STATS 0x1CAE5D2E3F9A07F0 p0:any,p1:any,p2:any,p3:any,p4:any,p5:any PlaystatsCrateDropMissionDone PlaystatsCrateDropMissionDone c STATS 0x1CAE5D2E3F9A07F0 p0:any,p1:any,p2:any,p3:any,p4:any,p5:any -PlaystatsDarMissionEnd c STATS 0x0BC254FF3A911501 data:any -PlaystatsDefendContraband c STATS 0x2605663BD4F23B5D data:any -PlaystatsDirectorMode c STATS 0x46326E13DA4E0546 p0:any +PlaystatsDarMissionEnd c STATS 0x0BC254FF3A911501 integer data?:integer +PlaystatsDefendContraband c STATS 0x2605663BD4F23B5D integer data?:integer +PlaystatsDirectorMode c STATS 0x46326E13DA4E0546 integer p0?:integer PlaystatsDroneUsage c STATS 0x66C7BB2416ED3FCE p0:integer,p1:integer,p2:integer -PlaystatsDupeDetection c STATS 0x848B66100EE33B05 data:any +PlaystatsDupeDetection c STATS 0x848B66100EE33B05 integer data?:integer PlaystatsEarnedMcPoints c STATS 0x501478855A6074CE p0:any,p1:any,p2:any,p3:any,p4:any,p5:any -PlaystatsEnterSessionPack c STATS 0x878FF156D36E9956 data:any +PlaystatsEnterSessionPack c STATS 0x878FF156D36E9956 integer data?:integer PlaystatsExtraEvent c STATS 0xFA5B74BAB8A7EF99 p0:any PlaystatsFriendActivity c STATS 0x0F71DE29AB2258F1 p0:any,p1:any -PlaystatsGunrunMissionEnded c STATS 0x0EACDF8487D5155A data:any -PlaystatsH2FmprepEnd c STATS 0xD8AFB345A9C5CCBB data:any -PlaystatsH2InstanceEnd c STATS 0x1E1497D0D2108115 data:any,p1:any,p2:any,p3:any +PlaystatsGunrunMissionEnded c STATS 0x0EACDF8487D5155A integer data?:integer +PlaystatsH2FmprepEnd c STATS 0xD8AFB345A9C5CCBB integer data?:integer +PlaystatsH2InstanceEnd c STATS 0x1E1497D0D2108115 integer p1:any,p2:any,p3:any PlaystatsHeistSaveCheat c STATS 0xF4FF020A08BC8863 hash:Hash,p1:integer PlaystatsHoldUp c STATS 0xCB00196B31C39EB1 p0:any,p1:any,p2:any,p3:any PlaystatsHoldUpMissionDone PlaystatsHoldUpMissionDone c STATS 0xCB00196B31C39EB1 p0:any,p1:any,p2:any,p3:any @@ -7195,17 +7255,17 @@ PlaystatsIdleKick c STATS 0x5DA3A8DE8CB6226F time:integer PlaystatsImpExp c STATS 0x2B69F5074C894811 p0:any,p1:any,p2:any,p3:any PlaystatsImportExportMissionDone PlaystatsImportExportMissionDone c STATS 0x2B69F5074C894811 p0:any,p1:any,p2:any,p3:any PlaystatsInventory c STATS 0x887DAD63CF5B7908 p0:any -PlaystatsJobBend c STATS 0xF5BB8DAC426A52C0 p0:any,p1:any,p2:any,p3:any +PlaystatsJobBend c STATS 0xF5BB8DAC426A52C0 integer,integer,integer,integer PlaystatsLeaveJobChain c STATS 0xC5BE134EC7BA96A0 p0:any,p1:any,p2:any,p3:any,p4:any PlaystatsMatchStarted c STATS 0xBC80E22DED931E3D p0:any,p1:any,p2:any,p3:any,p4:any,p5:any,p6:any -PlaystatsMissionCheckpoint c STATS 0xC900596A63978C1D p0:any,p1:any,p2:any,p3:any -PlaystatsMissionOver c STATS 0x7C4BB33A8CED7324 p0:any,p1:any,p2:any,p3:boolean,p4:boolean,p5:boolean -PlaystatsMissionStarted c STATS 0xC19A2925C34D2231 p0:any,p1:any,p2:any,p3:boolean -PlaystatsNpcInvite c STATS 0x93054C88E6AA7C44 p0:any +PlaystatsMissionCheckpoint c STATS 0xC900596A63978C1D integer p1:any,p2:any,p3:any +PlaystatsMissionOver c STATS 0x7C4BB33A8CED7324 integer p1:any,p2:any,p3:boolean,p4:boolean,p5:boolean +PlaystatsMissionStarted c STATS 0xC19A2925C34D2231 integer p1:any,p2:any,p3:boolean +PlaystatsNpcInvite c STATS 0x93054C88E6AA7C44 integer p0?:integer PlaystatsOddjobDone c STATS 0x69DEA3E9DB727B4C p0:any,p1:any,p2:any PlaystatsPassiveMode c STATS 0x35EEC6C2BC821A71 p0:boolean,p1:integer,p2:integer,p3:integer PlaystatsPegasaircraft c STATS 0x9572BD4DD6B72122 modelHash:Hash -PlaystatsPiMenuHideSettings c STATS 0x203B381133817079 data:any +PlaystatsPiMenuHideSettings c STATS 0x203B381133817079 integer data?:integer PlaystatsPropChange c STATS 0xBA739D6D5A05D6E7 p0:any,p1:any,p2:any,p3:any PlaystatsQuickfixTool c STATS 0x90D0622866E80445 element:integer,item:string PlaystatsRaceCheckpoint c STATS 0x9C375C315099DDE4 p0:any,p1:any,p2:any,p3:any,p4:any @@ -7213,19 +7273,19 @@ PlaystatsRaceToPoint c STATS 0xADDD1C754E2E2914 p0:any,p1:any,p2:any,p3:any,p4: PlaystatsRaceToPointMissionDone c STATS 0xADDD1C754E2E2914 p0:any,p1:any,p2:any,p3:any,p4:any,p5:any,p6:any,p7:any,p8:any,p9:any PlaystatsRandomMissionDone c STATS 0x71862B1D855F32E1 name:string,p1:any,p2:any,p3:any PlaystatsRankUp c STATS 0xC7F2DE41D102BFB4 rank:integer -PlaystatsRecoverContraband c STATS 0x04D90BA8207ADA2D data:any +PlaystatsRecoverContraband c STATS 0x04D90BA8207ADA2D integer data?:integer PlaystatsRobberyFinale c STATS 0xBBA55BE9AAAABF44 p0:any PlaystatsRobberyPrep c STATS 0x1A67DFBF1F5C3835 p0:any PlaystatsRosBet c STATS 0x121FB4DDDC2D5291 amount:integer,act:integer,player:Player,cm:number -PlaystatsSellContraband c STATS 0xC729991A9065376E data:any +PlaystatsSellContraband c STATS 0xC729991A9065376E integer data?:integer PlaystatsSetJoinType c STATS 0xD1032E482629049E joinType:integer PlaystatsShopItem c STATS 0x176852ACAAC173D1 p0:any,p1:any,p2:any,p3:any,p4:any -PlaystatsSmugMissionEnded c STATS 0x320C35147D5B5DDD data:any +PlaystatsSmugMissionEnded c STATS 0x320C35147D5B5DDD integer data?:integer PlaystatsSpectatorWheelSpin c STATS 0x6731DE84A38BFAD0 p0:integer,p1:integer,p2:integer,p3:integer PlaystatsSpentPiCustomLoadout c STATS 0xBE509B0A3693DE8B amount:integer PlaystatsStartOfflineMode c STATS 0x098760C7461724CD PlaystatsStartTrackingStunts c STATS 0x928DBFB892638EF3 -PlaystatsStoneHatchetEnd c STATS 0x35E39E5570358630 data:any +PlaystatsStoneHatchetEnd c STATS 0x35E39E5570358630 integer data?:integer PlaystatsStopTrackingStunts c STATS 0x8A800DACCC0DA55D PlaystatsStuntPerformedEventAllowTrigger c STATS 0x928DBFB892638EF3 PlaystatsStartTrackingStunts PlaystatsStuntPerformedEventDisallowTrigger c STATS 0x8A800DACCC0DA55D PlaystatsStopTrackingStunts @@ -7290,23 +7350,27 @@ RaiseConvertibleRoof c VEHICLE 0x8F5FB35D7E88FC70 vehicle:Vehicle,instantlyRais RaiseLowerableWheels c VEHICLE 0xF660602546D27BA8 vehicle:Vehicle RaiseRetractableWheels RaiseRetractableWheels c VEHICLE 0xF660602546D27BA8 vehicle:Vehicle RecordBrokenGlass c AUDIO 0xFBE20329593DEC9D x:number,y:number,z:number,radius:number +RecorderStartRecording s CFX 0xA966E104 netId:integer,compressed:boolean,fileName:string +RecorderStartReplay s CFX 0xACD27A01 integer fileName:string,mode:integer +RecorderStopRecording s CFX 0xA124422F netId:integer +RecorderStopReplay s CFX 0x31A548AC replayId:integer RefillAmmoInstantly c WEAPON 0x8C0D57EA686FAD87 boolean ped:Ped RefreshClosestOceanShoreline c AUDIO 0x5D2BFAAB8D956E0E RefreshInterior c INTERIOR 0x41F37C3427C75AE0 interiorID:integer RefreshPlayerListStats c NETWORK 0xE26CCFF8094D8C74 boolean p0:integer RefreshWaypoint c HUD 0x81FA173F170560D1 RegisterArchetypes c CFX 0x3C2F9037 factory:function -RegisterBoolToSave c MISC 0xC8F4131414C835A1 p0:any,name:string +RegisterBoolToSave c MISC 0xC8F4131414C835A1 integer name:string RegisterCommand b CFX 0x5FA79B0F commandName:string,handler:function,restricted:boolean RegisterConsoleListener s CFX 0x281B5448 listener:function RegisterEntityForCutscene c CUTSCENE 0xE40C1C56DF95C2E8 cutsceneEntity:Entity,cutsceneEntName:string,p2:integer,modelHash:Hash,p4:integer -RegisterEnumToSave c MISC 0x10C2FA78D0E128A1 p0:any,name:string -RegisterFloatToSave c MISC 0x7CAEC29ECB5DFEBB p0:any,name:string +RegisterEnumToSave c MISC 0x10C2FA78D0E128A1 integer name:string +RegisterFloatToSave c MISC 0x7CAEC29ECB5DFEBB integer name:string RegisterFontFile c CFX 0x1B3A363 fileName:string RegisterFontId c CFX 0xACF6D8EE integer fontName:string RegisterHatedTargetsAroundPed c PED 0x9222F300BF8354FE ped:Ped,radius:number -RegisterInt64ToSave c MISC 0xA735353C77334EA0 p0:any,name:string -RegisterIntToSave c MISC 0x34C9EE5986258415 p0:any,name:string +RegisterInt64ToSave c MISC 0xA735353C77334EA0 integer name:string +RegisterIntToSave c MISC 0x34C9EE5986258415 integer name:string RegisterKeyMapping c CFX 0xD7664FD1 commandString:string,description:string,defaultMapper:string,defaultParameter:string RegisterNamedRendertarget c HUD 0x57D9C12635E25CE3 boolean name:string,p1:boolean RegisterNoirScreenEffectThisFrame c GRAPHICS 0xA44FF770DFBC5DAE @@ -7322,15 +7386,15 @@ RegisterResourceAsEventHandler b CFX 0xD233A168 eventName:string RegisterResourceAsset s CFX 0x9862B266 string resourceName:string,fileName:string RegisterResourceBuildTaskFactory s CFX 0x285B43CA factoryId:string,factoryFn:function RegisterRopeData c CFX 0xF213AE8D integer numSections:integer,radius:number,diffuseTextureName:string,normalMapName:string,distanceMappingScale:number,uvScaleX:number,uvScaleY:number,specularFresnel:number,specularFalloff:number,specularIntensity:number,bumpiness:number,color:integer -RegisterSaveHouse c MISC 0xC0714D0A7EEECA54 any p0:number,p1:number,p2:number,p3:number,p4:any,p5:any,p6:any +RegisterSaveHouse c MISC 0xC0714D0A7EEECA54 any,integer p0:number,p1:number,p2:number,p3:number,p5:any,p6:any RegisterScriptWithAudio c AUDIO 0xC6ED9D5092438D91 inChargeOfAudio:boolean RegisterStreamingFileFromCache c CFX 0xCEAD2D4B resourceName:string,fileName:string,cacheString:string RegisterStreamingFileFromKvs c CFX 0x1493DCC1 kvsKey:string RegisterStreamingFileFromUrl c CFX 0xF44BFB95 registerAs:string,url:string RegisterSynchronisedScriptSpeech c CUTSCENE 0x2131046957F31B04 RegisterTarget c PED 0x2F25D9AEFA34FBA2 ped:Ped,target:Ped -RegisterTextLabelToSave c MISC 0xEDB1232C5BEAE62F p0:any,name:string -RegisterTextLabelToSave_2 c MISC 0x6F7794F28C6B2535 p0:any,name:string +RegisterTextLabelToSave c MISC 0xEDB1232C5BEAE62F integer name:string +RegisterTextLabelToSave_2 c MISC 0x6F7794F28C6B2535 integer name:string RegisterTrackJunction c CFX 0x35F743B5 integer trackIndex:integer,trackNode:integer,newIndex:integer,newNode:integer,direction:boolean RegisterWorldPointScriptBrain c BRAIN 0x3CDC7136613284BD scriptName:string,activationRange:number,p2:integer ReleaseAllCommerceItemImages c NETWORK 0x72D0706CD6CCDB58 @@ -7362,7 +7426,7 @@ RemoveAllShockingEvents c EVENT 0xEAABE8FDFA21274C p0:boolean RemoveAllStickyBombsFromEntity c NETWORK 0x715135F4B82AC90D entity:Entity RemoveAnimDict c STREAMING 0xF66A602F829E2A06 animDict:string RemoveAnimSet c STREAMING 0x16350528F93024B3 animSet:string -RemoveBlip b HUD 0x86A652570E5F25DD blip:Blip +RemoveBlip b HUD 0x86A652570E5F25DD Blip blip:Blip RemoveClipSet c STREAMING 0x01F73A131C18CD94 clipSet:string RemoveConvarChangeListener b CFX 0xEAC49841 cookie:integer RemoveCoverPoint c TASK 0xAE287C923D891715 coverpoint:ScrHandle @@ -7385,8 +7449,8 @@ RemoveHealthConfig c CFX 0xE0ED5FB configName:string RemoveIpl c STREAMING 0xEE6C5AD3ECE0A82D iplName:string RemoveLoadingPrompt c HUD 0x10D373323E5B9C0D BusyspinnerOff RemoveModelFromCreatorBudget c STREAMING 0xF086AD9354FAC3A3 modelHash:Hash -RemoveModelHide c ENTITY 0xD9E3006FB3CBD765 x:number,y:number,z:number,radius:number,model:Hash,p5:boolean -RemoveModelSwap c ENTITY 0x033C0F9A64E229AE x:number,y:number,z:number,radius:number,originalModel:Hash,newModel:Hash,p6:boolean +RemoveModelHide c ENTITY 0xD9E3006FB3CBD765 x:number,y:number,z:number,radius:number,model:Hash,lazy:boolean +RemoveModelSwap c ENTITY 0x033C0F9A64E229AE x:number,y:number,z:number,radius:number,oldModelHash:Hash,newModelHash:Hash,bLazy:boolean RemoveMpGamerTag c HUD 0x31698AA80E0223F8 gamerTagId:integer RemoveMultiplayerBankCash c HUD 0xC7C6789AA1CFEDD0 RemoveMultiplayerHudCash c HUD 0x968F270E39141ECA @@ -7400,7 +7464,7 @@ RemoveParticleFx c GRAPHICS 0xC401503DFE8D53CF ptfxHandle:integer,p1:boolean RemoveParticleFxFromEntity c GRAPHICS 0xB8FEAEEBCC127425 entity:Entity RemoveParticleFxInRange c GRAPHICS 0xDD19FA1C6D657305 X:number,Y:number,Z:number,radius:number RemovePedDefensiveArea c PED 0x74D4E028107450A9 ped:Ped,toggle:boolean -RemovePedElegantly c PED 0xAC6D445B994DF95E ped:Ped +RemovePedElegantly c PED 0xAC6D445B994DF95E Ped ped:Ped RemovePedFromGroup c PED 0xED74007FFB146BC2 ped:Ped RemovePedHelmet c PED 0xA7B2458D0AD6DED8 ped:Ped,instantly:boolean RemovePedPreferredCoverSet c PED 0xFDDB234CF74073D9 ped:Ped @@ -7515,6 +7579,7 @@ ReserveNetworkLocalVehicles c NETWORK 0x42613035157E4208 amount:integer ReserveNetworkMissionObjects c NETWORK 0x4E5C93BD0C32FBF8 amount:integer ReserveNetworkMissionPeds c NETWORK 0xB60FEBA45333D36F amount:integer ReserveNetworkMissionVehicles c NETWORK 0x76B02E21ED27A469 amount:integer +ResetAdaptation c GRAPHICS 0xE3E2C1B4C59DBC77 numFrames:integer ResetAiMeleeWeaponDamageModifier c PED 0x46E56A7CD1D63C3F ResetAiWeaponDamageModifier c PED 0xEA16670E7BA4743C ResetBenchmarkRecording c MISC 0x437138B6A830166A @@ -7598,10 +7663,10 @@ SaveHighQualityPhoto c GRAPHICS 0x3DEC726C25A11BAC boolean unused:integer SaveRecordingClip c RECORDING 0x644546EC5287471B boolean SaveResourceFile s CFX 0xA09E7E7B boolean resourceName:string,fileName:string,data:string,dataLength:integer ScEmailMessageClearRecipList c SOCIALCLUB 0x55DF6DB45179236E -ScEmailMessagePushGamerToRecipList c SOCIALCLUB 0x2330C12A7A605D16 integer +ScEmailMessagePushGamerToRecipList c SOCIALCLUB 0x2330C12A7A605D16 integer networkHandle?:integer ScGamerdataGetBool c SOCIALCLUB 0x8416FE4E4629D7D7 boolean name:string -ScGamerdataGetFloat c SOCIALCLUB 0xA770C8EEC6FB2AC5 boolean,number name:string -ScGamerdataGetInt c SOCIALCLUB 0xC85A7127E7AD02AA boolean,integer name:string +ScGamerdataGetFloat c SOCIALCLUB 0xA770C8EEC6FB2AC5 boolean,number name:string,outValue?:number +ScGamerdataGetInt c SOCIALCLUB 0xC85A7127E7AD02AA boolean,integer name:string,outValue?:integer ScGetCheckStringStatus c SOCIALCLUB 0x82E4A58BABC15AE7 boolean token:integer ScProfanityGetCheckIsPending ScGetHasAchievementBeenPassed c SOCIALCLUB 0x418DC16FAE452C1C boolean achievement:integer ScGetIsProfileAttributeSet c SOCIALCLUB 0x8416FE4E4629D7D7 boolean name:string ScGamerdataGetBool @@ -7612,19 +7677,19 @@ ScInboxGetMessageIsReadAtIndex c SOCIALCLUB 0x93028F1DB42BFD08 boolean msgIndex: ScInboxGetMessageTypeAtIndex c SOCIALCLUB 0xBB8EA16ECBC976C4 Hash msgIndex:integer ScInboxGetTotalNumMessages c SOCIALCLUB 0x03A93FF1A2CA0864 integer ScInboxMessageDoApply c SOCIALCLUB 0x9A2C8064B6C1E41A boolean p0:integer -ScInboxMessageGetBountyData c SOCIALCLUB 0x87E0052F08BD64E6 boolean,integer index:integer +ScInboxMessageGetBountyData c SOCIALCLUB 0x87E0052F08BD64E6 boolean,integer index:integer,outData?:integer ScInboxMessageGetDataBool c SOCIALCLUB 0xFFE5C16F402D851D boolean p0:integer,p1:string -ScInboxMessageGetDataInt c SOCIALCLUB 0xA00EFE4082C4056E boolean,integer p0:integer,context:string +ScInboxMessageGetDataInt c SOCIALCLUB 0xA00EFE4082C4056E boolean,integer p0:integer,context:string,out?:integer ScInboxMessageGetDataString c SOCIALCLUB 0x7572EF42FC6A9B6D boolean p0:integer,context:string,out:string ScInboxMessageGetString c SOCIALCLUB 0xF3E31D16CBDCB304 string p0:integer -ScInboxMessageGetUgcdata c SOCIALCLUB 0x69D82604A1A5A254 boolean p0:any,p1:any +ScInboxMessageGetUgcdata c SOCIALCLUB 0x69D82604A1A5A254 boolean,integer p0:any,p1?:integer ScInboxMessageInit c SOCIALCLUB 0xBB8EA16ECBC976C4 Hash msgIndex:integer ScInboxGetMessageTypeAtIndex ScInboxMessagePop c SOCIALCLUB 0x2C015348CF19CA1D boolean p0:integer ScInboxMessagePush c SOCIALCLUB 0x9A2C8064B6C1E41A boolean p0:integer ScInboxMessageDoApply -ScInboxMessagePushGamerToEventRecipList c SOCIALCLUB 0xDA024BDBD600F44A integer +ScInboxMessagePushGamerToEventRecipList c SOCIALCLUB 0xDA024BDBD600F44A integer networkHandle?:integer ScInboxMessageSendBountyPresenceEvent c SOCIALCLUB 0x6AFD2CD753FEEF83 boolean data:string ScInboxMessageSendUgcStatUpdateEvent c SOCIALCLUB 0xA68D3D229F4F3B06 data:string -ScLicenseplateAdd c SOCIALCLUB 0x1989C6E6F67E76A8 boolean,integer plateText:string,plateData:string +ScLicenseplateAdd c SOCIALCLUB 0x1989C6E6F67E76A8 boolean,integer plateText:string,plateData:string,tokenOut?:integer ScLicenseplateGetAddIsPending c SOCIALCLUB 0x07C61676E5BB52CD boolean token:integer ScLicenseplateGetAddStatus c SOCIALCLUB 0x8147FFF6A718E1AD integer token:integer ScLicenseplateGetCount c SOCIALCLUB 0x700569DBA175A77C integer token:integer @@ -7632,18 +7697,18 @@ ScLicenseplateGetIsvalidIsPending c SOCIALCLUB 0xD302E99EDF0449CF boolean token: ScLicenseplateGetIsvalidStatus c SOCIALCLUB 0x5C4EBFFA98BDB41C integer token:integer ScLicenseplateGetPlate c SOCIALCLUB 0x1D4446A62D35B0D0 string token:integer,plateIndex:integer ScLicenseplateGetPlateData c SOCIALCLUB 0x2E89990DDFF670C3 string token:integer,plateIndex:integer -ScLicenseplateIsvalid c SOCIALCLUB 0x0F73393BAC7E6730 boolean,integer plateText:string +ScLicenseplateIsvalid c SOCIALCLUB 0x0F73393BAC7E6730 boolean,integer plateText:string,tokenOut?:integer ScLicenseplateSetPlateData c SOCIALCLUB 0xD0EE05FE193646EA boolean oldPlateText:string,newPlateText:string,plateData:string ScPresenceAttrSetFloat c SOCIALCLUB 0xC4C4575F62534A24 boolean ScPresenceAttrSetInt c SOCIALCLUB 0x1F1E9682483697C7 boolean attrHash:Hash,value:integer ScPresenceAttrSetString c SOCIALCLUB 0x287F1F75D2803595 boolean attrHash:Hash,value:string -ScProfanityCheckString c SOCIALCLUB 0x75632C5ECD7ED843 boolean,integer string:string -ScProfanityCheckUgcString c SOCIALCLUB 0xEB2BF817463DFA28 boolean,integer string:string +ScProfanityCheckString c SOCIALCLUB 0x75632C5ECD7ED843 boolean,integer string:string,token?:integer +ScProfanityCheckUgcString c SOCIALCLUB 0xEB2BF817463DFA28 boolean,integer string:string,token?:integer ScProfanityGetCheckIsPending c SOCIALCLUB 0x82E4A58BABC15AE7 boolean token:integer ScProfanityGetCheckIsValid c SOCIALCLUB 0x1753344C770358AE boolean token:integer ScProfanityGetStringPassed c SOCIALCLUB 0x85535ACF97FC0969 boolean token:integer ScProfanityGetStringStatus c SOCIALCLUB 0x930DE22F07B1CCE3 integer token:integer -ScStartCheckStringTask c SOCIALCLUB 0x75632C5ECD7ED843 boolean,integer string:string ScProfanityCheckString +ScStartCheckStringTask c SOCIALCLUB 0x75632C5ECD7ED843 boolean,integer string:string,token?:integer ScProfanityCheckString ScaleformMovieMethodAddParamBool c GRAPHICS 0xC58424BA936EB458 value:boolean ScaleformMovieMethodAddParamFloat c GRAPHICS 0xD69736AAE04DB51A value:number ScaleformMovieMethodAddParamInt c GRAPHICS 0xC3D0841A0CC546A6 value:integer @@ -7720,6 +7785,7 @@ SetAmbientZoneListStatePersistent c AUDIO 0xF3638DAE8C4045E1 ambientZone:string SetAmbientZoneState c AUDIO 0xBDA07E5950085E46 zoneName:string,enabled:boolean,forceUpdate:boolean SetAmbientZoneStatePersistent c AUDIO 0x1D6650420CEC9D3B zoneName:string,enabled:boolean,forceUpdate:boolean SetAmmoInClip c WEAPON 0xDCD2A934D65CB497 boolean ped:Ped,weaponHash:Hash,ammo:integer +SetAmmoInVehicleWeaponClip c WEAPON 0x873906720EE842C3 boolean vehicle:Vehicle,seat:integer,ammo:integer SetAnimLooped c TASK 0x70033C3CC29A1FF4 p0:any,p1:boolean,p2:any,p3:boolean SetAnimPhase c TASK 0xDDF3CB5A0A4C0B49 entity:Entity,p1:number,p2:any,p3:boolean SetAnimPlaybackTime c TASK 0xDDF3CB5A0A4C0B49 entity:Entity,p1:number,p2:any,p3:boolean SetAnimPhase @@ -7742,7 +7808,7 @@ SetAutoGiveParachuteWhenEnterPlane c PLAYER 0x9F343285A00B4BB6 player:Player,to SetAutoGiveScubaGearWhenExitVehicle c PLAYER 0xD2B315B6689D537D player:Player,toggle:boolean SetBackfaceculling c GRAPHICS 0x23BA6B0C2AD7B0D3 toggle:boolean SetBalanceAddMachine c NETWORK 0x815E5E3073DA1D67 boolean contentId:string,contentTypeName:string -SetBalanceAddMachines c NETWORK 0xB8322EEB38BE7C26 boolean data:any,dataCount:integer,contentTypeName:string +SetBalanceAddMachines c NETWORK 0xB8322EEB38BE7C26 boolean,integer dataCount:integer,contentTypeName:string SetBeastModeActive c MISC 0x438822C279B73B93 player:Player SetBigmapActive c HUD 0x231C8F89D0539D8F toggleBigMap:boolean,showFullMap:boolean SetBikeLeanAngle c VEHICLE 0x9CFA4896C3A53CBB vehicle:Vehicle,x:number,y:number SetBikeOnStand @@ -7888,6 +7954,8 @@ SetCloudHatTransition c MISC 0xFC4842A34657BFCB name:string,transitionTime:numb SetCloudSettingsOverride c MISC 0x02DEAAC8F8EA7FE7 overrideSettingsName:string SetCloudsAlpha c MISC 0xF36199225D6D8C86 opacity:number SetColourOfNextTextComponent c HUD 0x39BBF623FC803EAC hudColor:integer +SetColshapeDimension s CFX 0x38482191 colShapeId:integer,dimension:integer +SetColshapeEntityType b CFX 0xB3A4D128 colShapeId:integer,entityType:integer,value:boolean SetCombatFloat c PED 0xFF41B4B141ED981C ped:Ped,combatType:integer,p2:number SetControlGroupColor c PAD 0x8290252FFF36ACB5 padIndex:integer,red:integer,green:integer,blue:integer SetControlLightEffectColor SetControlLightEffectColor c PAD 0x8290252FFF36ACB5 padIndex:integer,red:integer,green:integer,blue:integer @@ -7918,6 +7986,7 @@ SetCutsceneCanBeSkipped c CUTSCENE 0x41FAA8FB2ECE8720 p0:boolean SetCutsceneEntityStreamingFlags c CUTSCENE 0x4C61C75BEE8184C2 cutsceneEntName:string,p1:integer,p2:integer SetCutsceneFadeValues c CUTSCENE 0x8093F23ABACCC7D4 p0:boolean,p1:boolean,p2:boolean,p3:boolean SetCutsceneOrigin c CUTSCENE 0xB812B3FD1C01CF27 x:number,y:number,z:number,heading:number,p4:integer +SetCutsceneOriginAndOrientation c CUTSCENE 0x011883F41211432A x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,p6:integer SetCutscenePedComponentVariation c CUTSCENE 0xBA01E7B6DEEFBBC9 cutsceneEntName:string,componentId:integer,drawableId:integer,textureId:integer,modelHash:Hash SetCutscenePedComponentVariationFromPed c CUTSCENE 0x2A56C06EBEF2B0D9 cutsceneEntName:string,ped:Ped,modelHash:Hash SetCutscenePedPropVariation c CUTSCENE 0x0546524ADE2E9723 cutsceneEntName:string,componentId:integer,drawableId:integer,textureId:integer,modelHash:Hash @@ -7937,6 +8006,7 @@ SetDisableBmxExtraTrickForces c VEHICLE 0x26D99D5A82FD18E8 disableExtraTrickFor SetDisableBreaking c PHYSICS 0x5CEC1A84620E7D5B object:Object,toggle:boolean SetDisableDecalRenderingThisFrame c GRAPHICS 0x4B5CFC83122DF602 SetDisableExplodeFromBodyDamageOnCollision c VEHICLE 0x26E13D440E7F6064 vehicle:Vehicle,disableExplode:boolean +SetDisableExplodeFromBodyDamageReceivedByAiVehicle c VEHICLE 0xB0B7DF5CB876FF5E plane:Vehicle,disable:boolean SetDisableFragDamage c PHYSICS 0x01BA3AED21C16CFB object:Object,toggle:boolean SetDisableHeliExplodeFromBodyDamage c VEHICLE 0xEDBC8405B3895CC9 helicopter:Vehicle,disableExplode:boolean SetDisableHoverModeFlight c VEHICLE 0x2D55FE374D5FDB91 vehicle:Vehicle,toggle:boolean @@ -7996,7 +8066,7 @@ SetEntityAngularVelocity c ENTITY 0x8339643499D1222E entity:Entity,x:number,y:n SetEntityAnimCurrentTime c ENTITY 0x4487C259F0F70977 entity:Entity,animDictionary:string,animName:string,time:number SetEntityAnimSpeed c ENTITY 0x28D1A16553C51776 entity:Entity,animDictionary:string,animName:string,speedMultiplier:number SetEntityAsMissionEntity c ENTITY 0xAD738C3085FE7E11 entity:Entity,scriptHostObject:boolean,bGrabFromOtherScript:boolean -SetEntityAsNoLongerNeeded c ENTITY 0xB736A491E64A32CF entity:Entity +SetEntityAsNoLongerNeeded c ENTITY 0xB736A491E64A32CF Entity entity:Entity SetEntityCanBeDamaged c ENTITY 0x1760FFA8AB074D66 entity:Entity,toggle:boolean SetEntityCanBeDamagedByRelationshipGroup c ENTITY 0xE22D8FDE858B8119 entity:Entity,bCanBeDamaged:boolean,relGroup:integer SetEntityCanBeTargetedWithoutLos c ENTITY 0xD3997889736FD899 entity:Entity,toggle:boolean @@ -8034,6 +8104,7 @@ SetEntityMaxHealth c ENTITY 0x166E7CF68597D8B5 entity:Entity,value:integer SetEntityMaxSpeed c ENTITY 0x0E46A3FCBDE2A1B1 entity:Entity,speed:number SetEntityMotionBlur c ENTITY 0x295D82A8559F9150 entity:Entity,toggle:boolean SetEntityNoCollisionEntity c ENTITY 0xA53ED5520C07654A entity1:Entity,entity2:Entity,thisFrameOnly:boolean +SetEntityNoCollisionWithNetworkedEntity c ENTITY 0x0A27A7827347B3B1 entity1:Entity,entity2:Entity SetEntityOnlyDamagedByPlayer c ENTITY 0x79F020FF9EDC0748 entity:Entity,toggle:boolean SetEntityOnlyDamagedByRelationshipGroup c ENTITY 0x7022BD828FA0B082 entity:Entity,p1:boolean,relationshipHash:Hash SetEntityOrphanMode s CFX 0x489E9162 entity:Entity,orphanMode:integer @@ -8192,6 +8263,7 @@ SetHidofEnvBlurParams c GRAPHICS 0xBA3D65906822BED5 p0:boolean,p1:boolean,nearp SetHidofOverride c GRAPHICS 0xBA3D65906822BED5 p0:boolean,p1:boolean,nearplaneOut:number,nearplaneIn:number,farplaneOut:number,farplaneIn:number SetHighFallTask c TASK 0x8C825BDC7741D37C ped:Ped,duration:any,p2:any,p3:any SetHornEnabled c AUDIO 0x76D683C108594D0E vehicle:Vehicle,toggle:boolean +SetHornPermanentlyOnTime c AUDIO 0x9D3AF56E94C9AE98 vehicle:Vehicle,time:number SetHoverModeWingRatio c VEHICLE 0x70A252F60A3E036B vehicle:Vehicle,ratio:number SetHttpHandler s CFX 0xF5C6330C handler:function SetHudAnimStopLevel c PLAYER 0xDE45D1A1EF45EE61 player:Player,toggle:boolean N_0xde45d1a1ef45ee61 @@ -8301,7 +8373,7 @@ SetMinimapSonarSweep c HUD 0x6B50FC8749632EC1 toggle:boolean SetMissionFlag c MISC 0xC4301E5121A0ED73 toggle:boolean SetMissionName c HUD 0x5F28ECF5FC84772F p0:boolean,name:string SetMissionName_2 c HUD 0xE45087D85F468BC2 p0:boolean,name:string -SetMissionTrainAsNoLongerNeeded c VEHICLE 0xBBE7648349B49BE8 train:Vehicle,p1:boolean +SetMissionTrainAsNoLongerNeeded c VEHICLE 0xBBE7648349B49BE8 Vehicle p1:boolean SetMissionTrainCoords c VEHICLE 0x591CA673AA6AB736 train:Vehicle,x:number,y:number,z:number SetMobilePhoneDofState c MOBILE 0x375A706A5C2FD084 toggle:boolean SetMobilePhonePosition c MOBILE 0x693A5C6D6734085B posX:number,posY:number,posZ:number @@ -8384,7 +8456,7 @@ SetNuiFocusKeepInput c CFX 0x3FF5E5F8 keepInput:boolean SetNuiZindex c CFX 0x3734AAFF zIndex:integer SetNumberOfParkedVehicles c VEHICLE 0xCAA15F13EBD417FF value:integer SetObjectAllowLowLodBuoyancy c OBJECT 0x4D89D607CB3DD1D2 object:Object,toggle:boolean -SetObjectAsNoLongerNeeded c ENTITY 0x3AE22DEB5BA5A3E6 object:Object +SetObjectAsNoLongerNeeded c ENTITY 0x3AE22DEB5BA5A3E6 Object object:Object SetObjectCanClimbOn c OBJECT 0x4D89D607CB3DD1D2 object:Object,toggle:boolean SetObjectAllowLowLodBuoyancy SetObjectColour c OBJECT 0x3B2FD68DB5F8331C object:Object,toggle:boolean,R:integer,G:integer,B:integer N_0x3b2fd68db5f8331c SetObjectForceVehiclesToAvoid c OBJECT 0x77F33F2CCF64B3AA object:Object,toggle:boolean @@ -8447,7 +8519,7 @@ SetPedAsCop c PED 0xBB03C38DD3FB7FFD ped:Ped,toggle:boolean SetPedAsEnemy c PED 0x02A0C9720B854BFA ped:Ped,toggle:boolean SetPedAsGroupLeader c PED 0x2A7819605465FBCE ped:Ped,groupId:integer SetPedAsGroupMember c PED 0x9F3480FE65DB31B5 ped:Ped,groupId:integer -SetPedAsNoLongerNeeded c ENTITY 0x2595DD4236549CE3 ped:Ped +SetPedAsNoLongerNeeded c ENTITY 0x2595DD4236549CE3 Ped ped:Ped SetPedAudioFootstepLoud c AUDIO 0x0653B735BFBDFE87 ped:Ped,toggle:boolean SetPedAudioFootstepQuiet c AUDIO 0x29DA3CA8D8B2692D ped:Ped,enabled:boolean SetPedClothEventsEnabled SetPedAudioGender c AUDIO 0xA5342D390CDA41D6 ped:Ped,p1:boolean @@ -8504,6 +8576,7 @@ SetPedCoordsNoGang c PED 0x87052FE446E07247 ped:Ped,posX:number,posY:number,pos SetPedCoverClipsetOverride c PED 0x9DBA107B4937F809 ped:Ped,p1:string SetPedCowerHash c PED 0xA549131166868ED3 ped:Ped,p1:string SetPedCurrentWeaponVisible c WEAPON 0x0725A4CCFDED9A70 ped:Ped,visible:boolean,deselectWeapon:boolean,p3:boolean,p4:boolean +SetPedCycleVehicleWeaponsOnly c WEAPON 0x50276EF8172F5F12 ped:Ped SetPedDecoration b PED 0x5F5D1665E352A839 ped:Ped,collection:Hash,overlay:Hash AddPedDecorationFromHashes SetPedDefaultComponentVariation b PED 0x45EEE61580806D63 ped:Ped SetPedDefensiveAreaAttachedToPed c PED 0x4EF47FE21698A8B6 ped:Ped,attachPed:Ped,p2:number,p3:number,p4:number,p5:number,p6:number,p7:number,p8:number,p9:boolean,p10:boolean @@ -8634,14 +8707,15 @@ SetPedSteersAroundPeds c PED 0x46F2193B3AD1D891 ped:Ped,toggle:boolean SetPedSteersAroundVehicles c PED 0xEB6FB9D48DDE23EC ped:Ped,toggle:boolean SetPedStrafeClipset c PED 0x29A28F3F8CF6D854 ped:Ped,clipSet:string SetPedSuffersCriticalHits c PED 0xEBD76F2359F190AC ped:Ped,toggle:boolean +SetPedSurvivesBeingOutOfWater c PED 0x100CD221F572F6E1 boolean ped:Ped,toggle:boolean SetPedSweat c PED 0x27B0405F59637D1F ped:Ped,sweat:number SetPedTalk c AUDIO 0x4ADA3F19BE4A6047 opponentPed:Ped RequestTennisBanks SetPedTargetLossResponse c PED 0x0703B9079823DA4A ped:Ped,responseType:integer SetPedTargettableVehicleDestroy c VEHICLE 0xBE70724027F85BCD vehicle:Vehicle,doorIndex:integer,doorLockStatus:integer SetVehicleIndividualDoorsLocked SetPedToInformRespectedFriends c PED 0x112942C6E708F70B ped:Ped,radius:number,maxFriends:integer SetPedToLoadCover c PED 0x332B562EEDA62399 ped:Ped,toggle:boolean -SetPedToRagdoll b PED 0xAE99FB955581844A boolean ped:Ped,time1:integer,time2:integer,ragdollType:integer,p4:boolean,p5:boolean,p6:boolean -SetPedToRagdollWithFall b PED 0xD76632D99E4966C8 boolean ped:Ped,time:integer,p2:integer,ragdollType:integer,x:number,y:number,z:number,p7:number,p8:number,p9:number,p10:number,p11:number,p12:number,p13:number +SetPedToRagdoll b PED 0xAE99FB955581844A boolean ped:Ped,minTime:integer,maxTime:integer,ragdollType:integer,bAbortIfInjured:boolean,bAbortIfDead:boolean,bForceScriptControl:boolean 0x83CB5052 ped:Ped,minTime:integer,maxTime:integer,ragdollType:integer,bAbortIfInjured:boolean,bAbortIfDead:boolean,bForceScriptControl:boolean +SetPedToRagdollWithFall b PED 0xD76632D99E4966C8 boolean ped:Ped,minTime:integer,maxTime:integer,nFallType:integer,dirX:number,dirY:number,dirZ:number,fGroundHeight:number,grab1X:number,grab1Y:number,grab1Z:number,grab2X:number,grab2Y:number,grab2Z:number 0xFA12E286 ped:Ped,minTime:integer,maxTime:integer,nFallType:integer,dirX:number,dirY:number,dirZ:number,fGroundHeight:number,grab1X:number,grab1Y:number,grab1Z:number,grab2X:number,grab2Y:number,grab2Z:number SetPedTurningThresholds c CFX 0xB300F03 min:number,max:number SetPedUsingActionMode c PED 0xD75ACCF5E0FB5367 ped:Ped,p1:boolean,p2:integer,action:string SetPedVehicleForcedSeatUsage c PED 0x952F06BEECD775CC ped:Ped,vehicle:Vehicle,seatIndex:integer,flags:integer @@ -8669,6 +8743,8 @@ SetPickupHiddenWhenUncollectable c OBJECT 0x3ED2B83AB2E82799 p0:any,p1:any SetPickupRegenerationTime c OBJECT 0x78015C9B4B3ECC9D pickup:Pickup,duration:integer SetPickupRopeLengthForCargobob c VEHICLE 0x877C1EAEAC531023 cargobob:Vehicle,length1:number,length2:number,state:boolean SetPickupUncollectable c OBJECT 0x1C1B69FAE509BA97 p0:any,p1:any +SetPlaneAvoidsOthers c VEHICLE 0xBAFB99B304BC52A7 plane:Vehicle,toggle:boolean +SetPlaneControlSectionsShouldBreakOffFromExplosions c VEHICLE 0xDD8A2D3337F04196 plane:Vehicle,toggle:boolean SetPlaneEngineHealth c VEHICLE 0x2A86A0475B6A1434 vehicle:Vehicle,health:number SetPlaneMinHeightAboveGround c VEHICLE 0xB893215D8D4C015B plane:Vehicle,height:integer SetTaskVehicleGotoPlaneMinHeightAboveTerrain SetPlaneMinHeightAboveTerrain c VEHICLE 0xB893215D8D4C015B plane:Vehicle,height:integer SetTaskVehicleGotoPlaneMinHeightAboveTerrain @@ -8760,6 +8836,7 @@ SetPlayerWeaponDefenseModifier c PLAYER 0x2D83BC011CA14A3C player:Player,modifi SetPlayerWeaponDefenseModifier_2 c PLAYER 0xBCFDE9EDE4CF27DC player:Player,modifier:number SetPlayerpadShakesWhenControllerDisabled c PAD 0x798FDEB5B1575088 toggle:boolean SetPlayersLastVehicle c VEHICLE 0xBCDF8BAF56C87B6A vehicle:Vehicle +SetPmWarningscreenActive c HUD 0x41350B4FC28E3941 isActive:boolean SetPoliceFocusWillTrackVehicle c VEHICLE 0x4E74E62E0A97E901 vehicle:Vehicle,p1:boolean SetPoliceIgnorePlayer c PLAYER 0x32C62AA929C2DA6A player:Player,toggle:boolean SetPoliceRadarBlips c PLAYER 0x43286D561B72B8BF toggle:boolean @@ -8781,6 +8858,8 @@ SetRadarZoomToBlip c HUD 0xF98E4B3E56AFC7B1 blip:Blip,zoom:number SetRadarZoomToDistance c HUD 0xCB7CC0D58405AD41 zoom:number SetRadioAutoUnfreeze c AUDIO 0xC1AA9F53CE982990 toggle:boolean SetRadioFrontendFadeTime c AUDIO 0x2C96CDB04FCA358E fadeTime:number +SetRadioRetuneDown c AUDIO 0xDD6BCF9E94425DF9 +SetRadioRetuneUp c AUDIO 0xFF266D1D0EB1195D SetRadioStationDisabled c AUDIO 0x477D9DB48F889591 radioStationName:string,toggle:boolean LockRadioStation SetRadioStationIsVisible c AUDIO 0x4CAFEBFA21EC188D radioStation:string,toggle:boolean SetRadioStationMusicOnly c AUDIO 0x774BD811F656A122 radioStation:string,toggle:boolean @@ -8835,7 +8914,7 @@ SetSaveHouse c MISC 0x4F548CABEAE553BC p0:any,p1:boolean,p2:boolean SetSaveMenuActive c MISC 0xC9BF75D28165FF77 ignoreVehicle:boolean SetSaveMigrationTransactionId c STATS 0xF6792800AC95350D transactionId:integer SetScaleformFitRendertarget c GRAPHICS 0xE6A9F00D4240B519 scaleformHandle:integer,toggle:boolean SetScaleformMovieToUseSuperLargeRt -SetScaleformMovieAsNoLongerNeeded c GRAPHICS 0x1D132D614DD86811 scaleformHandle:integer +SetScaleformMovieAsNoLongerNeeded c GRAPHICS 0x1D132D614DD86811 integer scaleformHandle:integer SetScaleformMovieToUseLargeRt c GRAPHICS 0x32F34FF7F617643B scaleformMovieId:integer,useLargeRT:boolean SetScaleformMovieToUseSuperLargeRt c GRAPHICS 0xE6A9F00D4240B519 scaleformHandle:integer,toggle:boolean SetScaleformMovieToUseSystemTime c GRAPHICS 0x6D8EB211944DCE08 scaleform:integer,toggle:boolean @@ -8946,6 +9025,7 @@ SetTrackEnabled c CFX 0x4B41E84C track:integer,enabled:boolean SetTrackJunctionActive c CFX 0x537B449D boolean junctionIndex:integer,state:boolean SetTrackMaxSpeed c CFX 0x37BFC732 track:integer,newSpeed:integer SetTrackedPointInfo c GRAPHICS 0x164ECBB3CF750CB0 point:integer,x:number,y:number,z:number,radius:number +SetTrailerAttachmentEnabled c VEHICLE 0x2FA2494B47FDD009 vehicle:Vehicle,enabled:boolean SetTrailerInverseMassScale c VEHICLE 0x2A8F319B392E7B3F vehicle:Vehicle,p1:number SetTrailerLegsLowered c VEHICLE 0x878C75C09FBDB942 SetTrailerLegsRaised c VEHICLE 0x95CF53B3D687F9FA vehicle:Vehicle @@ -8958,6 +9038,7 @@ SetTrainTrackSpawnFrequency c VEHICLE 0x21973BBF8D17EDFA trackIndex:integer,fre SetTrainsForceDoorsOpen c CFX 0xD4D1BA63 forceOpen:boolean SetTransformRateForAnimation c VEHICLE 0x498218259FB7C72D vehicle:Vehicle,transformRate:number SetTransformToSubmarineUsesAlternateInput c VEHICLE 0x41B9FB92EDED32A6 vehicle:Vehicle,useAlternateInput:boolean +SetTransitionOutOfTimecycleModifier c GRAPHICS 0x1CBA05AE7BD7EE05 transitionTime:number SetTransitionTimecycleModifier c GRAPHICS 0x3BCF567485E1971C modifierName:string,transition:number SetTvAudioFrontend c GRAPHICS 0x113D2C5DC57E1774 toggle:boolean SetTvChannel c GRAPHICS 0xBAABBB23EB6E484E channel:integer @@ -8979,7 +9060,7 @@ SetUseHigherVehicleJumpForce c VEHICLE 0xF06A16CA55D138D8 vehicle:Vehicle,toggl SetUseIslandMap c HUD 0x5E1460624D194A38 toggle:boolean SetUseWaypointAsDestination c HUD 0x6CDD58146A436083 toggle:boolean SetUserRadioControlEnabled c AUDIO 0x19F21E63AE6EAE4E toggle:boolean -SetUseridsUihidden c HUD 0xEF4CED81CEBEDC6D boolean p0:any,p1:any GetMenuPedIntStat +SetUseridsUihidden c HUD 0xEF4CED81CEBEDC6D boolean,integer p0:any,p1?:integer GetMenuPedIntStat SetVariableOnCutsceneAudio c AUDIO 0xBCC29F935ED07688 variableName:string,value:number SetVariableOnSound c AUDIO 0xAD6B3148A78AE9B6 soundId:integer,variableName:string,value:number SetVariableOnStream c AUDIO 0x2F9D3834AEB9EF79 p0:string,p1:number @@ -8991,8 +9072,9 @@ SetVehicleActiveDuringPlayback c VEHICLE 0xDFFCEF48E511DB48 vehicle:Vehicle,tog SetVehicleActiveForPedNavigation c VEHICLE 0x21115BCD6E44656A vehicle:Vehicle,toggle:boolean SetVehicleAlarm b VEHICLE 0xCDE5E70C1DDB954C vehicle:Vehicle,state:boolean SetVehicleAlarmTimeLeft c CFX 0xC108EE6F vehicle:Vehicle,time:integer +SetVehicleAllowHomingMissleLockon c VEHICLE 0x7D6F9A3EF26136A0 vehicle:Vehicle,toggle:boolean,p2:boolean SetVehicleAllowNoPassengersLockon c VEHICLE 0x5D14D4154BFE7B2C veh:Vehicle,toggle:boolean -SetVehicleAsNoLongerNeeded c ENTITY 0x629BFA74418D6239 vehicle:Vehicle +SetVehicleAsNoLongerNeeded c ENTITY 0x629BFA74418D6239 Vehicle vehicle:Vehicle SetVehicleAudio c AUDIO 0x4F0C413926060B38 vehicle:Vehicle,gameObjectName:string ForceUseAudioGameObject SetVehicleAudioBodyDamageFactor c AUDIO 0x01BB4D577D38BD9E vehicle:Vehicle,intensity:number SetVehicleAudioEngineDamageFactor c AUDIO 0x59E7B488451F4D3A vehicle:Vehicle,damageFactor:number @@ -9056,13 +9138,14 @@ SetVehicleDropsMoneyWhenBlownUp c VEHICLE 0x068F64F2470F9656 vehicle:Vehicle,to SetVehicleEngineCanDegrade c VEHICLE 0x983765856F2564F9 vehicle:Vehicle,toggle:boolean SetVehicleEngineHealth c VEHICLE 0x45F6D8EEF34ABEF1 vehicle:Vehicle,health:number SetVehicleEngineOn c VEHICLE 0x2497C4717C8B881E vehicle:Vehicle,value:boolean,instantly:boolean,disableAutoStart:boolean -SetVehicleEnginePowerMultiplier c VEHICLE 0x93A3996368C94158 vehicle:Vehicle,value:number ModifyVehicleTopSpeed +SetVehicleEnginePowerMultiplier c VEHICLE 0x93A3996368C94158 vehicle:Vehicle,percentChange:number ModifyVehicleTopSpeed SetVehicleEngineTemperature c CFX 0x6C93C4A9 vehicle:Vehicle,temperature:number SetVehicleEngineTorqueMultiplier c VEHICLE 0xB59E4BD37AE292DB vehicle:Vehicle,value:number SetVehicleCheatPowerIncrease SetVehicleEnveffScale c VEHICLE 0x3AFDC536C3D01674 vehicle:Vehicle,fade:number SetVehicleExclusiveDriver c VEHICLE 0x41062318F23ED854 vehicle:Vehicle,toggle:boolean SetVehicleExclusiveDriver_2 c VEHICLE 0xB5C51B5502E85E83 vehicle:Vehicle,ped:Ped,index:integer SetVehicleExplodesOnHighExplosionDamage c VEHICLE 0x71B0892EC081D60A vehicle:Vehicle,toggle:boolean +SetVehicleExplosiveDamageScale c VEHICLE 0x84D7FFD223CAAFFD any vehicle:Vehicle,scale:number SetVehicleExtendedRemovalRange c VEHICLE 0x79DF7E806202CE01 vehicle:Vehicle,range:integer SetVehicleExtra c VEHICLE 0x7EE3A3C5E4A40CC9 vehicle:Vehicle,extraId:integer,disable:boolean SetVehicleExtraColours c VEHICLE 0x2036F561ADD12E33 vehicle:Vehicle,pearlescentColor:integer,wheelColor:integer @@ -9124,6 +9207,7 @@ SetVehicleLivery c VEHICLE 0x60BF608F1B8CD1B6 vehicle:Vehicle,livery:integer SetVehicleLodMultiplier c VEHICLE 0x93AE6A61BE015BF1 vehicle:Vehicle,multiplier:number SetVehicleMaxSpeed c VEHICLE 0xBAA045B4E42F3C06 vehicle:Vehicle,speed:number SetVehicleMaxStrTrap c VEHICLE 0xA37B9A517B133349 vehicle:Vehicle,toggle:boolean SetVehicleWheelsCanBreakOffWhenBlowUp +SetVehicleMissileWarningEnabled c AUDIO 0xF3365489E0DD50F9 vehicle:Vehicle,toggle:boolean SetVehicleMod c VEHICLE 0x6AF0636DDEDCB6DD vehicle:Vehicle,modType:integer,modIndex:integer,customTires:boolean SetVehicleModColor_1 c VEHICLE 0x43FEB945EE7F85B8 vehicle:Vehicle,paintType:integer,color:integer,pearlescentColor:integer SetVehicleModColor_2 c VEHICLE 0x816562BADFDEC83E vehicle:Vehicle,paintType:integer,color:integer @@ -9196,7 +9280,8 @@ SetVehicleUseCutsceneWheelCompression c VEHICLE 0xE023E8AC4EF7C117 any p0:Vehicl SetVehicleUseHornButtonForNitrous c VEHICLE 0x1980F68872CC2C3D vehicle:Vehicle,bToggle:boolean SetVehicleUsePlayerLightSettings c VEHICLE 0xC45C27EF50F36ADC vehicle:Vehicle,toggle:boolean SetVehicleUsesLargeRearRamp c VEHICLE 0xCAC66558B944DA67 vehicle:Vehicle,toggle:boolean -SetVehicleWeaponCapacity c VEHICLE 0x44CD1F493DB2A0A6 vehicle:Vehicle,weaponIndex:integer,capacity:integer +SetVehicleWeaponCapacity c VEHICLE 0x44CD1F493DB2A0A6 vehicle:Vehicle,weaponIndex:integer,ammoCount:integer SetVehicleWeaponRestrictedAmmo +SetVehicleWeaponRestrictedAmmo c VEHICLE 0x44CD1F493DB2A0A6 vehicle:Vehicle,weaponIndex:integer,ammoCount:integer SetVehicleWeaponsDisabled c VEHICLE 0x86B4B6212CB8B627 vehicle:Vehicle,weaponSlot:integer SetVehicleWheelBrakePressure c CFX 0xE80F4E31 vehicle:Vehicle,wheelIndex:integer,pressure:number SetVehicleWheelFlags c CFX 0xD2B9E90D vehicle:Vehicle,wheelIndex:integer,flags:integer @@ -9230,14 +9315,15 @@ SetWantedLevelDifficulty c PLAYER 0x9B0BB33B04405E7A player:Player,difficulty:n SetWantedLevelHiddenEvasionTime c PLAYER 0x49B856B1360C47C7 player:Player,wantedLevel:integer,lossTime:integer SetWantedLevelMultiplier c PLAYER 0x020E5F00CDA207BA multiplier:number SetWarningMessage c HUD 0x7B1776B3B53F8D74 entryLine1:string,instructionalKey:integer,entryLine2:string,p3:boolean,p4:integer,background:string,p6:string,showBg:boolean,errorCode:integer -SetWarningMessageListRow c HUD 0x0C5A80A9E096D529 boolean index:integer,name:string,cash:integer,rp:integer,lvl:integer,colour:integer +SetWarningMessageListRow c HUD 0x0C5A80A9E096D529 boolean index:integer,name:string,cash:integer,rp:integer,lvl:integer,colour:integer SetWarningMessageOptionItems +SetWarningMessageOptionItems c HUD 0x0C5A80A9E096D529 boolean index:integer,name:string,cash:integer,rp:integer,lvl:integer,colour:integer SetWarningMessageWithAlert c HUD 0x15803FEC3B9A872B labelTitle:string,labelMsg:string,p2:integer,p3:integer,labelMsg2:string,p5:boolean,p6:integer,p7:integer,p8:string,p9:string,background:boolean,errorCode:integer -SetWarningMessageWithHeader c HUD 0xDC38CC1E35B6A5D7 titleMsg:string,entryLine1:string,flags:integer,promptMsg:string,p4:boolean,p5:any,background:boolean,p7:any,showBg:boolean -SetWarningMessageWithHeaderAndSubstringFlags c HUD 0x701919482C74B5AB entryHeader:string,entryLine1:string,instructionalKey:any,entryLine2:string,p4:boolean,p5:any,p6:any,p7:any,p8:any,p9:boolean +SetWarningMessageWithHeader c HUD 0xDC38CC1E35B6A5D7 integer titleMsg:string,entryLine1:string,flags:integer,promptMsg:string,p4:boolean,p5:any,background:boolean,showBg:boolean +SetWarningMessageWithHeaderAndSubstringFlags c HUD 0x701919482C74B5AB integer,integer entryHeader:string,entryLine1:string,instructionalKey:any,entryLine2:string,p4:boolean,p5:any,p6:any,p9:boolean SetWarningMessageWithHeaderExtended c HUD 0x38B55259C2E078ED headerTextLabel:string,line1TextLabel:string,buttonsBitField:integer,buttonsBitFieldUpper:integer,line2TextLabel:string,addNumber:boolean,numberToAdd:integer,firstSubstring:string,secondSubstring:string,showBackground:boolean,errorCode:integer SetWarningMessageWithHeaderUnk c HUD 0x38B55259C2E078ED headerTextLabel:string,line1TextLabel:string,buttonsBitField:integer,buttonsBitFieldUpper:integer,line2TextLabel:string,addNumber:boolean,numberToAdd:integer,firstSubstring:string,secondSubstring:string,showBackground:boolean,errorCode:integer SetWarningMessageWithHeaderExtended -SetWarningMessage_2 c HUD 0xDC38CC1E35B6A5D7 titleMsg:string,entryLine1:string,flags:integer,promptMsg:string,p4:boolean,p5:any,background:boolean,p7:any,showBg:boolean SetWarningMessageWithHeader -SetWarningMessage_3 c HUD 0x701919482C74B5AB entryHeader:string,entryLine1:string,instructionalKey:any,entryLine2:string,p4:boolean,p5:any,p6:any,p7:any,p8:any,p9:boolean SetWarningMessageWithHeaderAndSubstringFlags +SetWarningMessage_2 c HUD 0xDC38CC1E35B6A5D7 integer titleMsg:string,entryLine1:string,flags:integer,promptMsg:string,p4:boolean,p5:any,background:boolean,showBg:boolean SetWarningMessageWithHeader +SetWarningMessage_3 c HUD 0x701919482C74B5AB integer,integer entryHeader:string,entryLine1:string,instructionalKey:any,entryLine2:string,p4:boolean,p5:any,p6:any,p9:boolean SetWarningMessageWithHeaderAndSubstringFlags SetWaterAreaClipRect c CFX 0x9FCD2EE6 minX:integer,minY:integer,maxX:integer,maxY:integer SetWaterQuadAlpha c CFX 0xF49797EB boolean waterQuad:integer,a0:integer,a1:integer,a2:integer,a3:integer SetWaterQuadBounds c CFX 0x80AD144C boolean waterQuad:integer,minX:integer,minY:integer,maxX:integer,maxY:integer @@ -9284,8 +9370,8 @@ Settimerb c SYSTEM 0x5AE11BC36633DE4E value:integer SetupShopPedApparelQuery c FILES 0x50F457823CE6EB5F integer p0:integer,p1:integer,p2:integer,p3:integer SetupShopPedApparelQueryTu c FILES 0x9BDF59818B1E38C1 integer character:integer,p1:integer,p2:integer,p3:boolean,p4:integer,componentId:integer SetupShopPedOutfitQuery c FILES 0xF3FBE2D50A6A8C28 integer character:integer,p1:boolean -ShakeCam c CAM 0x6A25241C340D3822 cam:Cam,type:string,amplitude:number -ShakeCinematicCam c CAM 0xDCE214D9ED58F3CF p0:string,p1:number +ShakeCam c CAM 0x6A25241C340D3822 cam:Cam,shakeName:string,intensity:number +ShakeCinematicCam c CAM 0xDCE214D9ED58F3CF shakeName:string,intensity:number ShakeGameplayCam c CAM 0xFD55E49555E017CF shakeName:string,intensity:number ShakeScriptGlobal c CAM 0xF4C8CF9E353AFECA p0:string,p1:number ShapeTestResultEntity c SHAPETEST 0x2B3334BCA57CD799 entity:Entity ReleaseScriptGuidFromEntity @@ -9309,6 +9395,7 @@ ShowLoadingPrompt c HUD 0xBD12F8228410D9B4 busySpinnerType:integer EndTextComma ShowNumberOnBlip c HUD 0xA3C0B359DCB848B6 blip:Blip,number:integer ShowOutlineIndicatorOnBlip c HUD 0xB81656BC81FE24D1 blip:Blip,toggle:boolean ShowPedInPauseMenu c MISC 0x4EBB7E87AA0DBED4 toggle:boolean SetPlayerIsInAnimalForm +ShowPurchaseInstructionalButton c HUD 0xF6865E26067B708C toggle:boolean ShowScriptedHudComponentThisFrame c HUD 0x4F38DCA127DAAEA2 id:integer ShowSigninUi c HUD 0x60E892BA4F5BDCA4 ShowSocialClubLegalScreen c HUD 0x805D7CBB36FD6C4C OpenOnlinePoliciesMenu @@ -9334,7 +9421,7 @@ SoundVehicleHornThisFrame c AUDIO 0x9C11908013EA4715 vehicle:Vehicle SpawnpointsCancelSearch c PED 0xFEE4A5459472A9F8 SpawnpointsGetNumSearchResults c PED 0xA635C11B8C44AFC2 integer SpawnpointsGetSearchResult c PED 0x280C7E3AC7F56E90 number,number,number randomInt:integer -SpawnpointsGetSearchResultFlags c PED 0xB782F8238512BAD5 p0:any,p1:any +SpawnpointsGetSearchResultFlags c PED 0xB782F8238512BAD5 integer p0:any,p1?:integer SpawnpointsIsSearchActive c PED 0x3C67506996001F5E boolean SpawnpointsIsSearchComplete c PED 0xA586FBEB32A53DBB boolean SpawnpointsIsSearchFailed c PED 0xF445DE8DA80A1792 boolean @@ -9379,11 +9466,11 @@ StartNetworkedParticleFxNonLoopedOnEntity c GRAPHICS 0xC95EB1DB6E92113D boolean StartNetworkedParticleFxNonLoopedOnEntityBone c GRAPHICS 0x02B1F2A72E0F5325 boolean effectName:string,entity:Entity,offsetX:number,offsetY:number,offsetZ:number,rotX:number,rotY:number,rotZ:number,boneIndex:integer,scale:number,axisX:boolean,axisY:boolean,axisZ:boolean StartNetworkedParticleFxNonLoopedOnPedBone c GRAPHICS 0xA41B6A43642AC2CF boolean effectName:string,ped:Ped,offsetX:number,offsetY:number,offsetZ:number,rotX:number,rotY:number,rotZ:number,boneIndex:integer,scale:number,axisX:boolean,axisY:boolean,axisZ:boolean StartNewScript c SYSTEM 0xE81651AD79516E48 integer scriptName:string,stackSize:integer -StartNewScriptWithArgs c SYSTEM 0xB8BA7F44DF1575E1 integer scriptName:string,args:any,argCount:integer,stackSize:integer +StartNewScriptWithArgs c SYSTEM 0xB8BA7F44DF1575E1 integer,integer scriptName:string,argCount:integer,stackSize:integer StartNewScriptWithNameHash c SYSTEM 0xEB1C67C3A5333A92 integer scriptHash:Hash,stackSize:integer -StartNewScriptWithNameHashAndArgs c SYSTEM 0xC4BB298BD441BE78 integer scriptHash:Hash,args:any,argCount:integer,stackSize:integer +StartNewScriptWithNameHashAndArgs c SYSTEM 0xC4BB298BD441BE78 integer,integer scriptHash:Hash,argCount:integer,stackSize:integer StartNewStreamedScript c SYSTEM 0xEB1C67C3A5333A92 integer scriptHash:Hash,stackSize:integer StartNewScriptWithNameHash -StartNewStreamedScriptWithArgs c SYSTEM 0xC4BB298BD441BE78 integer scriptHash:Hash,args:any,argCount:integer,stackSize:integer StartNewScriptWithNameHashAndArgs +StartNewStreamedScriptWithArgs c SYSTEM 0xC4BB298BD441BE78 integer,integer scriptHash:Hash,argCount:integer,stackSize:integer StartNewScriptWithNameHashAndArgs StartParticleFxLoopedAtCoord c GRAPHICS 0xE184F4F0DC5910E7 integer effectName:string,x:number,y:number,z:number,xRot:number,yRot:number,zRot:number,scale:number,xAxis:boolean,yAxis:boolean,zAxis:boolean,p11:boolean StartParticleFxLoopedOnEntity c GRAPHICS 0x1AE42C1660FD6517 integer effectName:string,entity:Entity,xOffset:number,yOffset:number,zOffset:number,xRot:number,yRot:number,zRot:number,scale:number,xAxis:boolean,yAxis:boolean,zAxis:boolean StartParticleFxLoopedOnEntityBone c GRAPHICS 0xC6EB449E33977F0B integer effectName:string,entity:Entity,xOffset:number,yOffset:number,zOffset:number,xRot:number,yRot:number,zRot:number,boneIndex:integer,scale:number,xAxis:boolean,yAxis:boolean,zAxis:boolean @@ -9407,11 +9494,11 @@ StartRecording c RECORDING 0xC3AC2FFF9612AC81 mode:integer StartResource s CFX 0x29B440DC boolean resourceName:string StartRopeUnwindingFront c PHYSICS 0x538D1179EC1AA9A9 ropeId:integer StartRopeWinding c PHYSICS 0x1461C72C889E343E ropeId:integer -StartSaveArray c MISC 0x60FE567DF1B1AF9D p0:any,size:integer,arrayName:string StartSaveArrayWithSize -StartSaveArrayWithSize c MISC 0x60FE567DF1B1AF9D p0:any,size:integer,arrayName:string -StartSaveData c MISC 0xA9575F812C6A7997 p0:any,p1:any,p2:boolean -StartSaveStruct c MISC 0xBF737600CDDBEADD p0:any,size:integer,structName:string StartSaveStructWithSize -StartSaveStructWithSize c MISC 0xBF737600CDDBEADD p0:any,size:integer,structName:string +StartSaveArray c MISC 0x60FE567DF1B1AF9D integer size:integer,arrayName:string StartSaveArrayWithSize +StartSaveArrayWithSize c MISC 0x60FE567DF1B1AF9D integer size:integer,arrayName:string +StartSaveData c MISC 0xA9575F812C6A7997 integer p1:any,p2:boolean +StartSaveStruct c MISC 0xBF737600CDDBEADD integer size:integer,structName:string StartSaveStructWithSize +StartSaveStructWithSize c MISC 0xBF737600CDDBEADD integer size:integer,structName:string StartScreenEffect c GRAPHICS 0x2206BF9A37B7F724 effectName:string,duration:integer,looped:boolean AnimpostfxPlay StartScriptConversation c AUDIO 0x6B17C62C9635D2DC displaySubtitles:boolean,addToBriefScreen:boolean,cloneConversation:boolean,interruptible:boolean StartScriptFire c FIRE 0x6B83617E04503888 FireId X:number,Y:number,Z:number,maxChildren:integer,isGasFire:boolean @@ -9421,7 +9508,7 @@ StartShapeTestBoundingBox c SHAPETEST 0x052837721A854EC7 integer entity:Entity,f StartShapeTestBox c SHAPETEST 0xFE466162C4401D18 integer x:number,y:number,z:number,x1:number,y1:number,z1:number,rotX:number,rotY:number,rotZ:number,p9:integer,flags:integer,entity:Entity,p12:integer StartShapeTestCapsule c SHAPETEST 0x28579D1B8F8AAC80 integer x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,radius:number,flags:integer,entity:Entity,p9:integer StartShapeTestCapsule_2 c SHAPETEST 0xE6AC6C45FBE83004 integer x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,radius:number,flags:integer,entity:Entity,p9:integer StartShapeTestSweptSphere -StartShapeTestLosProbe c SHAPETEST 0x7EE9F5D83DD4F90E integer x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,traceFlags:integer,entity:Entity,options:integer +StartShapeTestLosProbe c SHAPETEST 0x7EE9F5D83DD4F90E integer x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,traceFlags:integer,entity:Entity,optionFlags:integer StartShapeTestRay c SHAPETEST 0x377906D8A31E5586 integer x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,flags:integer,entity:Entity,p8:integer StartExpensiveSynchronousShapeTestLosProbe StartShapeTestSurroundingCoords c SHAPETEST 0xFF6BE494C7987F34 integer,vector3,vector3 flag:integer,entity:Entity,flag2:integer StartShapeTestSweptSphere c SHAPETEST 0xE6AC6C45FBE83004 integer x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,radius:number,flags:integer,entity:Entity,p9:integer @@ -9432,20 +9519,20 @@ StatDeleteSlot c STATS 0x49A49BED12794D70 any p0:any StatGetBool c STATS 0x11B5E6D2AE73F48E boolean,boolean statHash:Hash,p2:any StatGetBoolMasked c STATS 0x10FE3F1B79F9B071 boolean statName:Hash,mask:integer,p2:integer StatGetCancelSaveMigrationStatus c STATS 0x567384DFA67029E6 integer -StatGetDate c STATS 0x8B0FACEFC36C824B boolean statHash:Hash,p1:any,p2:any,p3:any +StatGetDate c STATS 0x8B0FACEFC36C824B boolean,integer statHash:Hash,p2:any,p3:any StatGetFloat c STATS 0xD7AE6C9C9C6AC54C boolean,number statHash:Hash,p2:any StatGetInt c STATS 0x767FBC2AC802EF3D boolean,integer statHash:Hash,p2:integer StatGetLicensePlate c STATS 0x5473D4195058B2E4 string statName:Hash -StatGetMaskedInt c STATS 0x655185A06D9EEAAB boolean p0:any,p1:any,p2:any,p3:any,p4:any +StatGetMaskedInt c STATS 0x655185A06D9EEAAB boolean,integer p0:any,p2:any,p3:any,p4:any StatGetNumberOfDays c STATS 0xE0E854F5280FB769 integer statName:Hash StatGetNumberOfHours c STATS 0xF2D4B2FE415AAFC3 integer statName:Hash StatGetNumberOfMinutes c STATS 0x7583B4BE4C5A41B5 integer statName:Hash StatGetNumberOfSeconds c STATS 0x2CE056FF3723F00B integer statName:Hash StatGetPackedBoolMask c STATS 0xF4D8E7AC2A27758C integer p0:integer StatGetPackedIntMask c STATS 0x94F12ABF9C79E339 integer p0:integer -StatGetPos c STATS 0x350F82CCB186AA1B boolean p0:any,p1:any,p2:any,p3:any,p4:any -StatGetSaveMigrationConsumeContentUnlockStatus c STATS 0xCE5AA445ABA8DEE0 integer,integer -StatGetSaveMigrationStatus c STATS 0x886913BBEACA68C1 integer data:any +StatGetPos c STATS 0x350F82CCB186AA1B boolean,integer,integer,integer p0:any,p4:any +StatGetSaveMigrationConsumeContentUnlockStatus c STATS 0xCE5AA445ABA8DEE0 integer,integer p0?:integer +StatGetSaveMigrationStatus c STATS 0x886913BBEACA68C1 integer,integer data?:integer StatGetString c STATS 0xE50384ACC2C3DB74 string statHash:Hash,p1:integer StatGetUserId c STATS 0x2365C388E393BBE2 string p0:any StatIncrement c STATS 0x9B5A68C6489E9909 statName:Hash,value:number @@ -9463,7 +9550,7 @@ StatSetBool c STATS 0x4B33C4243DE0C432 boolean statName:Hash,value:boolean,save: StatSetBoolMasked c STATS 0x5BC62EC1937B9E5B boolean statName:Hash,value:boolean,mask:integer,save:boolean StatSetCheatIsActive c STATS 0x047CBED6F6F8B63C StatSetCurrentPosixTime c STATS 0xC2F84B7F9C4D0C61 boolean statName:Hash,p1:boolean -StatSetDate c STATS 0x2C29BFB64F4FCBE4 boolean statName:Hash,value:any,numFields:integer,save:boolean +StatSetDate c STATS 0x2C29BFB64F4FCBE4 boolean,integer statName:Hash,numFields:integer,save:boolean StatSetFloat c STATS 0x4851997F37FE9B3C boolean statName:Hash,value:number,save:boolean StatSetGxtLabel c STATS 0x17695002FD8B2AE0 boolean statName:Hash,value:string,save:boolean StatSetInt c STATS 0xB3271D7AB655B441 boolean statName:Hash,value:integer,save:boolean @@ -9539,7 +9626,7 @@ StreamvolCreateSphere c STREAMING 0x219C7B8D53E429FD any x:number,y:number,z:num StreamvolDelete c STREAMING 0x1EE7D8DF4425F053 unused:any StreamvolHasLoaded c STREAMING 0x7D41E9D2D17C5B2D boolean unused:any StreamvolIsValid c STREAMING 0x07C313F94746702C boolean unused:any -StringToInt c MISC 0x5A5F40FE637EB584 boolean,integer string:string +StringToInt c MISC 0x5A5F40FE637EB584 boolean,integer string:string,outInteger?:integer SubtractAFromBAndCheckIfNegative c NETWORK 0xDE350F8651E4346C boolean timeA:integer,timeB:integer IsTimeMoreThan SubtractBFromAAndCheckIfNegative c NETWORK 0xCB2CF5148012C8D0 boolean timeA:integer,timeB:integer IsTimeLessThan SuppressAgitationEventsNextFrame c EVENT 0x5F3B7749C112D552 @@ -9603,8 +9690,8 @@ TaskGoToEntity b TASK 0x6A071245EB0D1882 entity:Entity,target:Entity,duration:i TaskGoToEntityWhileAimingAtCoord c TASK 0x04701832B739DCE5 p0:any,p1:any,p2:number,p3:number,p4:number,p5:number,p6:boolean,p7:number,p8:number,p9:boolean,p10:boolean,p11:any TaskGoToEntityWhileAimingAtEntity c TASK 0x97465886D35210E9 ped:Ped,entityToWalkTo:Entity,entityToAimAt:Entity,speed:number,shootatEntity:boolean,p5:number,p6:number,p7:boolean,p8:boolean,firingPattern:Hash TaskGotoEntityAiming c TASK 0xA9DA48FAB8A76C12 ped:Ped,target:Entity,distanceToStopAt:number,StartAimingDist:number -TaskGotoEntityOffset c TASK 0xE39B4FF4FDEBDE27 ped:Ped,p1:any,p2:any,x:number,y:number,z:number,duration:integer -TaskGotoEntityOffsetXy c TASK 0x338E7EF52B6095A9 ped:Ped,entity:Entity,duration:integer,xOffset:number,yOffset:number,zOffset:number,moveBlendRatio:number,useNavmesh:boolean +TaskGotoEntityOffset c TASK 0xE39B4FF4FDEBDE27 ped:Ped,entity:Entity,duration:integer,seekRadius:number,seekAngleDeg:number,moveBlendRatio:number,gotoEntityOffsetFlags:integer +TaskGotoEntityOffsetXy c TASK 0x338E7EF52B6095A9 ped:Ped,entity:Entity,duration:integer,targetRadius:number,offsetX:number,offsetY:number,moveBlendRatio:number,gotoEntityOffsetFlags:integer TaskGuardAssignedDefensiveArea c TASK 0xD2A207EEBDF9889B p0:any,p1:number,p2:number,p3:number,p4:number,p5:number,p6:any TaskGuardCurrentPosition c TASK 0x4A58A47A72E3FCB4 p0:Ped,p1:number,p2:number,p3:boolean TaskGuardSphereDefensiveArea c TASK 0xC946FE14BE0EB5E2 p0:Ped,p1:number,p2:number,p3:number,p4:number,p5:number,p6:any,p7:number,p8:number,p9:number,p10:number @@ -9621,8 +9708,8 @@ TaskMoveNetwork c TASK 0x2D537BA194896636 ped:Ped,task:string,multiplier:number TaskMoveNetworkAdvanced c TASK 0xD5B35BEA41919ACB ped:Ped,p1:string,p2:number,p3:number,p4:number,p5:number,p6:number,p7:number,p8:any,p9:number,p10:boolean,animDict:string,flags:integer TaskMoveNetworkAdvancedByName TaskMoveNetworkAdvancedByName c TASK 0xD5B35BEA41919ACB ped:Ped,p1:string,p2:number,p3:number,p4:number,p5:number,p6:number,p7:number,p8:any,p9:number,p10:boolean,animDict:string,flags:integer TaskMoveNetworkByName c TASK 0x2D537BA194896636 ped:Ped,task:string,multiplier:number,p3:boolean,animDict:string,flags:integer -TaskMoveNetworkByNameWithInitParams c TASK 0x3D45B0B355C5E0C9 ped:Ped,p1:string,data:any,p3:number,p4:boolean,animDict:string,flags:integer -TaskMoveNetworkScripted c TASK 0x3D45B0B355C5E0C9 ped:Ped,p1:string,data:any,p3:number,p4:boolean,animDict:string,flags:integer TaskMoveNetworkByNameWithInitParams +TaskMoveNetworkByNameWithInitParams c TASK 0x3D45B0B355C5E0C9 integer ped:Ped,p1:string,p3:number,p4:boolean,animDict:string,flags:integer +TaskMoveNetworkScripted c TASK 0x3D45B0B355C5E0C9 integer ped:Ped,p1:string,p3:number,p4:boolean,animDict:string,flags:integer TaskMoveNetworkByNameWithInitParams TaskOpenVehicleDoor c TASK 0x965791A9A488A062 ped:Ped,vehicle:Vehicle,timeOut:integer,seat:integer,speed:number TaskParachute c TASK 0xD2F1C53C97EE81AB ped:Ped,p1:boolean TaskParachuteToTarget c TASK 0xB33E291AFA6BD03A ped:Ped,x:number,y:number,z:number @@ -9636,7 +9723,7 @@ TaskPerformSequenceLocally c TASK 0x8C33220C8D78CA0D ped:Ped,taskSequenceId:int TaskPlaneChase c TASK 0x2D2386F273FF7A25 pilot:Ped,entityToFollow:Entity,x:number,y:number,z:number TaskPlaneGotoPreciseVtol c TASK 0xF7F9DCCA89E7505B ped:Ped,vehicle:Vehicle,p2:any,p3:any,p4:any,p5:any,p6:any,p7:any,p8:any,p9:any TaskPlaneLand c TASK 0xBF19721FA34D32C0 pilot:Ped,plane:Vehicle,runwayStartX:number,runwayStartY:number,runwayStartZ:number,runwayEndX:number,runwayEndY:number,runwayEndZ:number -TaskPlaneMission c TASK 0x23703CD154E83B88 pilot:Ped,aircraft:Vehicle,targetVehicle:Vehicle,targetPed:Ped,destinationX:number,destinationY:number,destinationZ:number,missionFlag:integer,angularDrag:number,unk:number,targetHeading:number,maxZ:number,minZ:number +TaskPlaneMission c TASK 0x23703CD154E83B88 ped:Ped,vehicle:Vehicle,targetVehicle:Vehicle,targetPed:Ped,fTargetCoordX:number,fTargetCoordY:number,fTargetCoordZ:number,iMissionIndex:integer,fCruiseSpeed:number,fTargetReachedDist:number,fOrientation:number,iFlightHeight:integer,iMinHeightAboveTerrain:integer,bPrecise:boolean TaskPlaneTaxi c TASK 0x92C360B5F15D2302 pilot:Ped,aircraft:Vehicle,xPos:number,yPos:number,zPos:number,fCruiseSpeed:number,fTargetReachedDist:number TaskPlantBomb c TASK 0x965FEC691D55E9BF ped:Ped,x:number,y:number,z:number,heading:number TaskPlayAnim b TASK 0xEA47FE3719165B94 ped:Ped,animDictionary:string,animationName:string,blendInSpeed:number,blendOutSpeed:number,duration:integer,flag:integer,playbackRate:number,lockX:boolean,lockY:boolean,lockZ:boolean @@ -9648,7 +9735,7 @@ TaskRappelDownWall c TASK 0xEAF66ACDDC794793 ped:Ped,x1:number,y1:number,z1:num TaskRappelFromHeli c TASK 0x09693B0312F91649 ped:Ped,unused:number TaskReactAndFleePed b TASK 0x72C896464915D1B1 ped:Ped,fleeTarget:Ped TaskReloadWeapon c TASK 0x62D2916F56B9CD2D ped:Ped,unused:boolean -TaskScriptedAnimation c TASK 0x126EF75F1E17ABE5 ped:Ped,p1:any,p2:any,p3:any,p4:number,p5:number +TaskScriptedAnimation c TASK 0x126EF75F1E17ABE5 integer,integer,integer ped:Ped,p4:number,p5:number TaskSeekCoverFromPed c TASK 0x84D32B3BEC531324 ped:Ped,target:Ped,duration:integer,p3:boolean TaskSeekCoverFromPos c TASK 0x75AC2B60386D89F2 ped:Ped,x:number,y:number,z:number,duration:integer,p5:boolean TaskSeekCoverToCoords c TASK 0x39246A6958EF072C ped:Ped,x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,p7:any,p8:boolean @@ -9656,6 +9743,7 @@ TaskSeekCoverToCoverPoint c TASK 0xD43D95C7A869447F p0:any,p1:any,p2:number,p3: TaskSetBlockingOfNonTemporaryEvents c TASK 0x90D2156198831D69 ped:Ped,toggle:boolean TaskSetDecisionMaker c TASK 0xEB8517DDA73720DA ped:Ped,p1:Hash TaskSetSphereDefensiveArea c TASK 0x933C06518B52A9A4 p0:any,p1:number,p2:number,p3:number,p4:number +TaskSharkCircleCoord c TASK 0x60A19CF85FF4CEFA ped:Ped,x:number,y:number,z:number,moveBlendRatio:number,radius:number TaskShockingEventReact c TASK 0x452419CBD838065B ped:Ped,eventHandle:integer TaskShootAtCoord b TASK 0x46A6CC01E0826106 ped:Ped,x:number,y:number,z:number,duration:integer,firingPattern:Hash TaskShootAtEntity b TASK 0x08DA95E8298AE772 entity:Entity,target:Entity,duration:integer,firingPattern:Hash @@ -9673,7 +9761,7 @@ TaskStopPhoneGestureAnimation c TASK 0x3FA00D4F4641BFAE ped:Ped TaskSubmarineGotoAndStop c TASK 0xC22B40579A498CA4 p0:any,submarine:Vehicle,x:number,y:number,z:number,p5:any TaskSwapWeapon c TASK 0xA21C51255B205245 ped:Ped,p1:boolean TaskSweepAimEntity c TASK 0x2047C02158D6405A ped:Ped,anim:string,p2:string,p3:string,p4:string,p5:integer,vehicle:Vehicle,p7:number,p8:number -TaskSweepAimPosition c TASK 0x7AFE8FDC10BC07D2 p0:any,p1:any,p2:any,p3:any,p4:any,p5:any,p6:number,p7:number,p8:number,p9:number,p10:number +TaskSweepAimPosition c TASK 0x7AFE8FDC10BC07D2 integer,integer,integer,integer p0:any,p5:any,p6:number,p7:number,p8:number,p9:number,p10:number TaskSynchronizedScene c TASK 0xEEA929141F699854 ped:Ped,scene:integer,animDictionary:string,animationName:string,speed:number,speedMultiplier:number,duration:integer,flag:integer,playbackRate:number,p9:any TaskThrowProjectile c TASK 0x7285951DBF6B5A51 ped:Ped,x:number,y:number,z:number TaskToggleDuck c TASK 0xAC96609B9995EDF8 p0:boolean,p1:boolean @@ -9717,18 +9805,20 @@ TerminateThread c SCRIPT 0xC8B189ED9138BCD4 threadId:integer TerraingridActivate c GRAPHICS 0xA356990E161C9E65 toggle:boolean TerraingridSetColours c GRAPHICS 0x5CE62918F8D703C7 lowR:integer,lowG:integer,lowB:integer,lowAlpha:integer,R:integer,G:integer,B:integer,Alpha:integer,highR:integer,highG:integer,highB:integer,highAlpha:integer TerraingridSetParams c GRAPHICS 0x1C4FC5752BCD8E48 x:number,y:number,z:number,p3:number,rotation:number,p5:number,width:number,height:number,p8:number,scale:number,glowIntensity:number,normalHeight:number,heightDiff:number -TestProbeAgainstAllWater c WATER 0x8974647ED222EA5F boolean,vector3 x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,flag:integer -TestProbeAgainstWater c WATER 0xFFA5D878809819DB boolean,vector3 x1:number,y1:number,z1:number,x2:number,y2:number,z2:number -TestVerticalProbeAgainstAllWater c WATER 0x2B3451FA1E3142E2 boolean,number x:number,y:number,z:number,flag:integer +TestProbeAgainstAllWater c WATER 0x8974647ED222EA5F boolean,vector3 x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,flag:integer,result?:vector3 +TestProbeAgainstWater c WATER 0xFFA5D878809819DB boolean,vector3 x1:number,y1:number,z1:number,x2:number,y2:number,z2:number,result?:vector3 +TestVerticalProbeAgainstAllWater c WATER 0x2B3451FA1E3142E2 boolean,number x:number,y:number,z:number,flag:integer,height?:number TextureDownloadGetName c NETWORK 0x3448505B6E35262D string p0:integer TextureDownloadHasFailed c NETWORK 0x5776ED562C134687 boolean p0:integer TextureDownloadRelease c NETWORK 0x487EB90B98E9FB19 p0:integer TextureDownloadRequest c NETWORK 0x16160DA74A8E74A2 integer,integer FilePath:string,Name:string,p3:boolean ThefeedAddTxdRef c HUD 0x317EBA71D7543F52 txdString1:string,txnString1:string,txdString2:string,txnString2:string ThefeedUpdateItemTexture +ThefeedAutoPostGametipsOff c HUD 0xADED7F5748ACAFE6 +ThefeedAutoPostGametipsOn c HUD 0x56C8B608CFD49854 ThefeedClearAnimpostfx c HUD 0xFDD85225B2DEA55E ThefeedResetAllParameters ThefeedClearFrozenPost c HUD 0x80FE4F3AB4E1B62A -ThefeedCommentTeleportPoolOff c HUD 0xADED7F5748ACAFE6 -ThefeedCommentTeleportPoolOn c HUD 0x56C8B608CFD49854 +ThefeedCommentTeleportPoolOff c HUD 0xADED7F5748ACAFE6 ThefeedAutoPostGametipsOff +ThefeedCommentTeleportPoolOn c HUD 0x56C8B608CFD49854 ThefeedAutoPostGametipsOn ThefeedDisable c HUD 0x32888337579A5970 ThefeedDisableLoadingScreenTips ThefeedDisableBaselineOffset c HUD 0xB695E2CD0A2DA9EE ThefeedSpsExtendWidescreenOff ThefeedDisableLoadingScreenTips c HUD 0x32888337579A5970 @@ -9758,7 +9848,7 @@ ThefeedSetFlushAnimpostfx c HUD 0xBAE4F9B97CD43B30 toggle:boolean ThefeedSetNextPostBackgroundColor c HUD 0x92F0DA1E27DB96DC hudColorIndex:integer ThefeedSetNextPostPersistent c HUD 0xFDEC055AB549E328 ThefeedFreezeNextPost ThefeedSetScriptedMenuHeight c HUD 0x55598D21339CB998 pos:number -ThefeedShowGtaoTooltips c HUD 0xADED7F5748ACAFE6 ThefeedCommentTeleportPoolOff +ThefeedShowGtaoTooltips c HUD 0xADED7F5748ACAFE6 ThefeedAutoPostGametipsOff ThefeedSpsExtendWidescreenOff c HUD 0xB695E2CD0A2DA9EE ThefeedSpsExtendWidescreenOn c HUD 0xD4438C0564490E63 ThefeedUpdateItemTexture c HUD 0x317EBA71D7543F52 txdString1:string,txnString1:string,txdString2:string,txnString2:string @@ -9795,16 +9885,17 @@ TriggerScriptEvent_2 c SCRIPT 0xA40CC53DF8E50837 integer eventGroup:integer,even TriggerServerEventInternal c CFX 0x7FDD1128 eventName:string,eventPayload:string,payloadLength:integer TriggerSiren c AUDIO 0x66C3FB05206041BA vehicle:Vehicle TriggerSonarBlip c HUD 0x72DD432F3CDFC0EE posX:number,posY:number,posZ:number,radius:number,p4:integer +TriggerVehicleWeaponReload c WEAPON 0x5B1513F27F279A44 boolean vehicle:Vehicle,seat:integer,ped:Ped UgcCancelQuery c NETWORK 0xE9B99B6853181409 UgcClearCreateResult c NETWORK 0x17440AA15D1D3739 UgcClearModifyResult c NETWORK 0xA1E5E0204A6FCC70 UgcClearOfflineQuery c NETWORK 0x61A885D3F7CFEE9A UgcClearQueryResults c NETWORK 0xBA96394A0EECFA65 -UgcCopyContent c NETWORK 0x152D90E4C1B4738A boolean p0:any,p1:any +UgcCopyContent c NETWORK 0x152D90E4C1B4738A boolean,integer,integer UgcCreateContent c DATAFILE 0xC84527E235FCA219 boolean data:string,dataCount:integer,contentName:string,description:string,tagsCsv:string,contentTypeName:string,publish:boolean UgcCreateMission c DATAFILE 0xA5EFC3E847D60507 boolean contentName:string,description:string,tagsCsv:string,contentTypeName:string,publish:boolean UgcDidGetSucceed c NETWORK 0x941E5306BCD7C2C7 any -UgcGetBookmarkedContent c NETWORK 0xD5A4B59980401588 boolean p0:any,p1:any,p2:any,p3:any +UgcGetBookmarkedContent c NETWORK 0xD5A4B59980401588 boolean,integer,integer p0:any,p1:any UgcGetCachedDescription c NETWORK 0x40F7E66472DF3E5C string p0:any,p1:any UgcGetCloudPath c NETWORK 0xBAF6BABF9E7CCC13 string p0:integer,p1:integer UgcGetContentPath UgcGetContentCategory c NETWORK 0xA7BAB11E7C9C6C5A integer p0:integer @@ -9825,17 +9916,17 @@ UgcGetContentRatingCount c NETWORK 0x759299C5BB31D2A9 any p0:any,p1:any UgcGetContentRatingNegativeCount c NETWORK 0x4E548C0D7AE39FF9 any p0:any,p1:any UgcGetContentRatingPositiveCount c NETWORK 0x87E5C46C187FE0AE any p0:any,p1:any UgcGetContentTotal c NETWORK 0x769951E2455E2EB5 any -UgcGetContentUpdatedDate c NETWORK 0xCFD115B373C0DF63 p0:any,p1:any +UgcGetContentUpdatedDate c NETWORK 0xCFD115B373C0DF63 integer p0:any,p1?:integer UgcGetContentUserId c NETWORK 0xCD67AD041A394C9C string p0:integer UgcGetContentUserName c NETWORK 0x703F12425ECA8BF5 string p0:any UgcGetCreateContentId c NETWORK 0xC55A0B40FFB1ED23 string UgcGetCreateResult c NETWORK 0xFBC5E768C7A77A6A any UgcGetCreatorNum c NETWORK 0x597F8DBA9B206FC7 any -UgcGetCrewContent c NETWORK 0x9F6E2821885CAEE2 boolean p0:any,p1:any,p2:any,p3:any,p4:any -UgcGetFriendContent c NETWORK 0xF9E1CCAE8BA4C281 boolean p0:any,p1:any,p2:any,p3:any -UgcGetGetByCategory c NETWORK 0x678BB03C1A3BD51E boolean p0:any,p1:any,p2:any,p3:any,p4:any +UgcGetCrewContent c NETWORK 0x9F6E2821885CAEE2 boolean,integer,integer p0:any,p1:any,p2:any +UgcGetFriendContent c NETWORK 0xF9E1CCAE8BA4C281 boolean,integer,integer p0:any,p1:any +UgcGetGetByCategory c NETWORK 0x678BB03C1A3BD51E boolean,integer,integer p0:any,p1:any,p2:any UgcGetModifyResult c NETWORK 0x5A0A3D1A186A5508 any -UgcGetMyContent c NETWORK 0x3195F8DD0D531052 boolean p0:any,p1:any,p2:any,p3:any +UgcGetMyContent c NETWORK 0x3195F8DD0D531052 boolean,integer,integer p0:any,p1:any UgcGetQueryResult c NETWORK 0xEDF7F927136C224B any UgcGetRootContentId c NETWORK 0xC0173D6BFF4E0348 string p0:integer UgcHasCreateFinished c NETWORK 0x5E24341A7F92A74B boolean @@ -9846,18 +9937,18 @@ UgcIsLanguageSupported c NETWORK 0xF53E48461B71EECB boolean p0:any UgcPoliciesMakePrivate c NETWORK 0x5CAE833B0EE0C500 boolean p0:any UgcPublish c NETWORK 0x1DE0F5F50D723CAA boolean contentId:string,baseContentId:string,contentTypeName:string UgcQueryByContentId c NETWORK 0x158EC424F35EC469 boolean contentId:string,latestVersion:boolean,contentTypeName:string -UgcQueryByContentIds c NETWORK 0xC7397A83F7A2A462 boolean data:any,count:integer,latestVersion:boolean,contentTypeName:string -UgcQueryMyContent c NETWORK 0x9BF438815F5D96EA boolean p0:any,p1:any,p2:any,p3:any,p4:any,p5:any +UgcQueryByContentIds c NETWORK 0xC7397A83F7A2A462 boolean,integer count:integer,latestVersion:boolean,contentTypeName:string +UgcQueryMyContent c NETWORK 0x9BF438815F5D96EA boolean,integer p0:any,p1:any,p3:any,p4:any,p5:any UgcQueryRecentlyCreatedContent c NETWORK 0x6D4CB481FAC835E8 boolean offset:integer,count:integer,contentTypeName:string,p3:integer UgcRequestCachedDescription c NETWORK 0x5E0165278F6339EE integer p0:integer UgcRequestContentDataFromIndex c NETWORK 0x171DF6A0C07FB3DC integer p0:integer,p1:integer UgcRequestContentDataFromParams c NETWORK 0x7FD2990AF016795E integer contentTypeName:string,contentId:string,p2:integer,p3:integer,p4:integer UgcSetBookmarked c NETWORK 0x274A1519DFC1094F boolean contentId:string,bookmarked:boolean,contentTypeName:string -UgcSetDeleted c NETWORK 0xD05D1A6C74DA3498 boolean p0:any,p1:boolean,p2:any +UgcSetDeleted c NETWORK 0xD05D1A6C74DA3498 boolean,integer,integer p1:boolean UgcSetPlayerData c DATAFILE 0x692D808C34A82143 boolean contentId:string,rating:number,contentTypeName:string UgcSetQueryDataFromOffline c NETWORK 0xF98DDE0A8ED09323 p0:boolean -UgcTextureDownloadRequest c NETWORK 0x308F96458B7087CC any p0:any,p1:any,p2:any,p3:any,p4:any,p5:boolean -UgcUpdateContent c DATAFILE 0x648E7A5434AF7969 boolean contentId:string,data:any,dataCount:integer,contentName:string,description:string,tagsCsv:string,contentTypeName:string +UgcTextureDownloadRequest c NETWORK 0x308F96458B7087CC any,integer,integer p1:any,p2:any,p3:any,p5:boolean +UgcUpdateContent c DATAFILE 0x648E7A5434AF7969 boolean,integer contentId:string,dataCount:integer,contentName:string,description:string,tagsCsv:string,contentTypeName:string UgcUpdateMission c DATAFILE 0x4645DE9980999E93 boolean contentId:string,contentName:string,description:string,tagsCsv:string,contentTypeName:string Ui3dsceneIsAvailable c GRAPHICS 0xD3A10FC7FD8D98CD boolean Ui3dscenePushPreset c GRAPHICS 0xF1CEA8A4198D8E9A boolean presetName:string @@ -9879,6 +9970,7 @@ UnpatchDecalDiffuseMap c GRAPHICS 0xB7ED70C49521A61D decalType:integer UnpausePlaybackRecordedVehicle c VEHICLE 0x8879EE09268305D5 vehicle:Vehicle UnpinInterior c INTERIOR 0x261CCE7EED010641 interior:integer UnpinRopeVertex c PHYSICS 0x4B5AE2EEE4A8F180 ropeId:integer,vertex:integer +UnregisterCommand b CFX 0x9F73FDC commandId:integer UnregisterPedheadshot c PED 0x96B1361D9B24C2FF id:integer UnregisterRawNuiCallback c CFX 0x7FB46432 callbackType:string UnregisterScriptWithAudio c AUDIO 0xA8638BE228D4751A @@ -9958,9 +10050,9 @@ WaypointPlaybackStartShootingAtCoord c TASK 0x057A25CFCC9DB671 p0:any,p1:number WaypointPlaybackStartShootingAtPed c TASK 0xE70BA7B90F8390DC p0:any,p1:any,p2:boolean,p3:any WaypointPlaybackStopAimingOrShooting c TASK 0x47EFA040EBB8E2EA p0:any WaypointPlaybackUseDefaultSpeed c TASK 0x6599D834B12D0800 p0:any -WaypointRecordingGetClosestWaypoint c TASK 0xB629A298081F876F boolean,integer name:string,x:number,y:number,z:number -WaypointRecordingGetCoord c TASK 0x2FB897405C90B361 boolean,vector3 name:string,point:integer -WaypointRecordingGetNumPoints c TASK 0x5343532C01A07234 boolean,integer name:string +WaypointRecordingGetClosestWaypoint c TASK 0xB629A298081F876F boolean,integer name:string,x:number,y:number,z:number,point?:integer +WaypointRecordingGetCoord c TASK 0x2FB897405C90B361 boolean,vector3 name:string,point:integer,coord?:vector3 +WaypointRecordingGetNumPoints c TASK 0x5343532C01A07234 boolean,integer name:string,points?:integer WaypointRecordingGetSpeedAtPoint c TASK 0x005622AEBC33ACA9 number name:string,point:integer WithdrawVc c MONEY 0xF70EFA14FE091429 integer amount:integer World3dToScreen2d c GRAPHICS 0x34E82F05DF2974F5 boolean,number,number worldX:number,worldY:number,worldZ:number GetScreenCoordFromWorldCoord diff --git a/crates/qbx_fivem_data/data/natives_docs.tsv b/crates/qbx_fivem_data/data/natives_docs.tsv index 10f4e9f..ef818e7 100644 --- a/crates/qbx_fivem_data/data/natives_docs.tsv +++ b/crates/qbx_fivem_data/data/natives_docs.tsv @@ -9,10 +9,10 @@ AddArmourToPed ```\nSame as SET_PED_ARMOUR, but ADDS 'amount' to the armor the P AddAudioSubmixOutput Adds an output for the specified audio submix.\n\n**Parameters**\n- `submixId`: The input submix.\n- `outputSubmixId`: The output submix. Use `0` for the master game submix. AddAuthorizedParachuteModel Adds the given model name hash to the list of valid models for the player ped's parachute.\n\n**Parameters**\n- `modelNameHash`: Name hash of the model to allow to be used for the player ped's parachute\n\n**Returns** None. AddAuthorizedParachutePackModel Adds the given model name hash to the list of valid models for the player ped's parachute pack.\n\n**Parameters**\n- `modelNameHash`: Name hash of the model to allow to be used for the player ped's parachute pack\n\n**Returns** None. -AddBlipForArea Adds a rectangular blip for the specified coordinates/area.\n\nIt is recommended to use [SET_BLIP_ROTATION](#\\_0xF87683CDF73C3F6E) and [SET_BLIP_COLOUR](#\\_0x03D7FB09E75D6B7E) to make the blip not rotate along with the camera.\n\nBy default, the blip will show as a *regular* blip with the specified color/sprite if it is outside of the minimap view.\n\nExample image:\n![minimap](https://i.imgur.com/qLbXWcQ.png)\n![big map](https://i.imgur.com/0j7O7Rh.png)\n\n(Native name is *likely* to actually be ADD_BLIP_FOR_AREA, but due to the usual reasons this can't be confirmed)\n\n**Parameters**\n- `x`: The X coordinate of the center of the blip.\n- `y`: The Y coordinate of the center of the blip.\n- `z`: The Z coordinate of the center of the blip.\n- `width`: The width of the blip.\n- `height`: The height of the blip.\n\n**Returns** A handle to the blip.\n\n```lua\nlocal coords = GetEntityCoords(PlayerPedId())\nlocal blip = AddBlipForArea(coords.x, coords.y, coords.z, 100.0, 50.0)\nSetBlipRotation(blip, 0)\nSetBlipColour(blip, 0xFF00FF80)\n``` +AddBlipForArea Adds a rectangular blip for the specified coordinates/area.\n\nIt is recommended to use [SET_BLIP_ROTATION](#\\_0xF87683CDF73C3F6E) and [SET_BLIP_COLOUR](#\\_0x03D7FB09E75D6B7E) to make the blip not rotate along with the camera.\n\nBy default, the blip will show as a *regular* blip with the specified color/sprite if it is outside of the minimap view.\n\n(Native name is *likely* to actually be ADD_BLIP_FOR_AREA, but due to the usual reasons this can't be confirmed)\n\n**Parameters**\n- `x`: The X coordinate of the center of the blip.\n- `y`: The Y coordinate of the center of the blip.\n- `z`: The Z coordinate of the center of the blip.\n- `width`: The width of the blip.\n- `height`: The height of the blip.\n\n**Returns** A handle to the blip.\n\n```lua\nlocal coords = GetEntityCoords(PlayerPedId())\nlocal blip = AddBlipForArea(coords.x, coords.y, coords.z, 100.0, 50.0)\nSetBlipRotation(blip, 0)\nSetBlipColour(blip, 0xFF00FF80)\n``` AddBlipForCoord Creates a blip for the specified coordinates. You can use `SET_BLIP_` natives to change the blip.\n\n**Parameters**\n- `x`: The X coordinate to create the blip on.\n- `y`: The Y coordinate.\n- `z`: The Z coordinate.\n\n**Returns** A blip handle.\n\n```lua\nlocal destination = AddBlipForCoord(200.0, 200.0, 5.0)\n``` -AddBlipForEntity Create a blip that by default is red (enemy), you can use [SET_BLIP_AS_FRIENDLY](#\\_0xC6F43D0E) to make it blue (friend).\\\nCan be used for objects, vehicles and peds.\n\nExample of enemy:\n![enemy](https://i.imgur.com/fl78svv.png)\nExample of friend:\n![friend](https://i.imgur.com/Q16ho5d.png)\n\n**Parameters**\n- `entity`: The entity handle to create the blip.\n\n**Returns** A blip handle.\n\n```lua\nlocal blip = AddBlipForEntity(PlayerPedId()) -- This adds an enemy blip to yourself\n``` -AddBlipForRadius Create a blip with a radius for the specified coordinates (it doesnt create the blip sprite, so you need to use [AddBlipCoords](#\\_0xC6F43D0E))\n\nExample image:\n![example](https://i.imgur.com/9hQl3DB.png)\n\n**Parameters**\n- `posX`: The x position of the blip (you can also send a vector3 instead of the bulk coordinates)\n- `posY`: The y position of the blip (you can also send a vector3 instead of the bulk coordinates)\n- `posZ`: The z position of the blip (you can also send a vector3 instead of the bulk coordinates)\n- `radius`: The number that defines the radius of the blip circle\n\n**Returns** The blip handle that can be manipulated with every `SetBlip` natives\n\n```lua\nlocal coords = vector3(0.0, 0.0, 0.0)\n\nlocal blip = AddBlipForRadius(coords, 100.0) -- need to have .0\nSetBlipColour(blip, 1)\nSetBlipAlpha(blip, 128)\n``` +AddBlipForEntity Create a blip that by default is red (enemy), you can use [SET_BLIP_AS_FRIENDLY](#\\_0xC6F43D0E) to make it blue (friend).\\\nCan be used for objects, vehicles and peds.\n\nExample of enemy:\n![enemy](https://i.imgur.com/LIizV6S.png)\nExample of friend:\n![friend](https://i.imgur.com/XrCuvZP.png)\n\n**Parameters**\n- `entity`: The entity handle to create the blip.\n\n**Returns** A blip handle.\n\n```lua\nlocal blip = AddBlipForEntity(PlayerPedId()) -- This adds an enemy blip to yourself\n``` +AddBlipForRadius Create a blip with a radius for the specified coordinates (it doesnt create the blip sprite, so you need to use [AddBlipCoords](#\\_0xC6F43D0E))\n\nExample image:\n![example](https://i.imgur.com/fDCmHVD.png)\n\n**Parameters**\n- `posX`: The x position of the blip (you can also send a vector3 instead of the bulk coordinates)\n- `posY`: The y position of the blip (you can also send a vector3 instead of the bulk coordinates)\n- `posZ`: The z position of the blip (you can also send a vector3 instead of the bulk coordinates)\n- `radius`: The number that defines the radius of the blip circle\n\n**Returns** The blip handle that can be manipulated with every `SetBlip` natives\n\n```lua\nlocal coords = vector3(0.0, 0.0, 0.0)\n\nlocal blip = AddBlipForRadius(coords, 100.0) -- need to have .0\nSetBlipColour(blip, 1)\nSetBlipAlpha(blip, 128)\n``` AddCamSplineNode ```\nI filled p1-p6 (the floats) as they are as other natives with 6 floats in a row are similar and I see no other method. So if a test from anyone proves them wrong please correct. \np7 (length) determines the length of the spline, affects camera path and duration of transition between previous node and this one \np8 big values ~100 will slow down the camera movement before reaching this node \np9 != 0 seems to override the rotation/pitch (bool?) \n``` AddCamSplineNodeUsingCamera Takes a camera and uses the information from it as a camera spline node.\n\n**Parameters**\n- `cam`: Camera to add cam2 as a node to\n- `cam2`: Camera used for reference\n- `length`: Duration used for transition, has no effect for the first node. AddConvarChangeListener Adds a listener for Console Variable changes.\n\nThe function called expects to match the following signature:\n\n```ts\nfunction ConVarChangeListener(conVarName: string, reserved: any);\n```\n\n* **conVarName**: The ConVar that changed.\n* **reserved**: Currently unused.\n\n**Parameters**\n- `conVarFilter`: The Console Variable to listen for, this can be a pattern like "test:\\*", or null for any\n- `handler`: The handler function.\n\n**Returns** A cookie to remove the change handler. @@ -55,11 +55,13 @@ AddTextComponentSubstringKeyboardDisplay Certain characters like `<` will have t AddTextComponentSubstringPhoneNumber ```\np1 was always -1\n``` AddTextComponentSubstringPlayerName Adds an arbitrary string as a text component placeholder, replacing `~a~` in the current text command's text label.\n\nSee the documentation on text formatting for more information.\n\n**Parameters**\n- `text`: A string to add of up to 99 characters. This can contain additional `~` formatting directives.\n\n```lua\n-- on initialization\nAddTextEntry('TEST_LABEL', 'Label: ~a~')\n\n-- when drawing\nBeginTextCommandDisplayText('TEST_LABEL')\nAddTextComponentSubstringPlayerName('Hello, World!')\nEndTextCommandDisplayText(0.5, 0.5)\n``` AddTextComponentSubstringTextLabelHashKey ```\nIt adds the localized text of the specified GXT entry name. Eg. if the argument is GET_HASH_KEY("ES_HELP"), adds "Continue". Just uses a text labels hash key \n``` -AddTextComponentSubstringTime ```\nAdds a timer (e.g. "00:00:00:000"). The appearance of the timer depends on the flags, which needs more research. \n``` +AddTextComponentSubstringTime Takes a time in milliseconds and converts it to a string. Use `~a~` to mark the position in your line of text where you want this substring inserted.\n\n```cpp\nenum eTimeFormat {\n TEXT_FORMAT_MILLISECONDS = 1,\n TEXT_FORMAT_SECONDS = 2,\n TEXT_FORMAT_MINUTES = 4,\n TEXT_FORMAT_HOURS = 8,\n TEXT_FORMAT_DAYS = 16,\n // e.g. show 12:20 not 00:12:20\n TEXT_FORMAT_HIDE_LEADING_UNITS_EQUAL_TO_ZERO = 32,\n // e.g. show 1:14 not 01:14\n TEXT_FORMAT_HIDE_LEADING_ZEROS_ON_LEADING_UNITS = 64,\n // e.g. show 3m24s not 3:24\n TEXT_FORMAT_SHOW_UNIT_DIVIDERS_AS_LETTERS = 128,\n // e.g. show 3m24 not 3m24s\n TEXT_FORMAT_HIDE_UNIT_LETTER_FOR_SMALLEST_UNITS = 256,\n // e.g. show 05:51 not 05:519\n TEXT_FORMAT_HIDE_MILLISECONDS_UNITS_DIGIT = 512,\n // e.g. show 05:5 not 05:519\n TEXT_FORMAT_HIDE_MILLISECONDS_TENS_DIGIT = 1024,\n // e.g. show 12.345 not 12:345\n TEXT_FORMAT_USE_DOT_FOR_MILLISECOND_DIVIDER = 2048\n}\n```\n\n**Parameters**\n- `timestamp`: The timestamp in milliseconds\n- `format`: The format of the timestamp, as bitwise flags\n\n```lua\n-- Renders the current game time in hours, minutes and seconds\nlocal time = GetGameTimer()\nAddTextEntry('TIME_LABEL', 'Game time: ~a~')\nBeginTextCommandDisplayText("TIME_LABEL")\nAddTextComponentSubstringTime(time, 2 | 4 | 8)\nEndTextCommandDisplayText(0, 0)\n``` AddTextComponentSubstringWebsite ```\nThis native (along with 0x5F68520888E69014 and 0x6C188BE134E074AA) do not actually filter anything. They simply add the provided text (as of 944) \n``` AddVehicleCrewEmblem ```\nboneIndex is always chassis_dummy in the scripts. The x/y/z params are location relative to the chassis bone.\n``` AddVehicleSubtaskAttackCoord ```\nx, y, z: offset in world coords from some entity. \n``` +AdjustNextPosSizeAsNormalized_16_9 Must call this every frame, will adjust the next drawn scaleform movie size values to normalized 16:9 AllowAmbientVehiclesToAvoidAdverseConditions This native it's a debug native. Won't do anything. +AllowDisplayOfMultiplayerCashText Before:\n![](https://imgur.com/a/RF1JHOS)\nAfter:\n![](https://imgur.com/a/Z8LnHHc)\n\n**Parameters**\n- `allow`: Toggles if MP Cash HUD displays 'Cash' and 'Bank' texts before the balance. AllowPauseMenuWhenDeadThisFrame Allows opening the pause menu this frame, when the player is dead.\n\n```lua\nCitizen.CreateThread(function()\n while true do\n N_0xcc3fdded67bcfc63()\n Wait(0)\n end\nend)\n``` AnimateGameplayCamZoom ```\nSeems to animate the gameplay camera zoom. \nEg. _ANIMATE_GAMEPLAY_CAM_ZOOM(1f, 1000f); \nwill animate the camera zooming in from 1000 meters away. \nGame scripts use it like this: \n// Setting this to 1 prevents V key from changing zoom \nPLAYER::SET_PLAYER_FORCED_ZOOM(PLAYER::PLAYER_ID(), 1); \n// These restrict how far you can move cam up/down left/right \nCAM::_CLAMP_GAMEPLAY_CAM_YAW(-20f, 50f); \nCAM::_CLAMP_GAMEPLAY_CAM_PITCH(-60f, 0f); \nCAM::_ANIMATE_GAMEPLAY_CAM_ZOOM(1f, 1f); \n``` AnimatedShakeCam ```\nExample from michael2 script. \nCAM::ANIMATED_SHAKE_CAM(l_5069, "shake_cam_all@", "light", "", 1f); \n``` @@ -71,15 +73,15 @@ AnimpostfxStop See [`ANIMPOSTFX_PLAY`](#\\_0x2206BF9A37B7F724). AnimpostfxStopAndDoUnk Stops the effect and sets a value (bool) in its data (+0x199) to false; See [`ANIMPOSTFX_PLAY`](#\\_0x2206BF9A37B7F724). AppSetApp ```\nCalled in the gamescripts like: \nAPP::APP_SET_APP("car"); \nAPP::APP_SET_APP("dog"); \n``` ApplyDamageToPed ```\ndamages a ped with the given amount \n---- \narmorFirst means it will damage/lower the armor first before damaging the player. \nsetting damageAmount to a negative amount will cause the player or the armor (depending on armorFirst) to be healed by damageAmount instead. \n```\n\n```\nNativeDB Added Parameter 4: Any p3\n``` -ApplyForceToEntity Applies a force to the specified entity.\n\n```cpp\nenum eForceType\n{\n MinForce = 0,\n MaxForceRot = 1,\n MinForce2 = 2,\n MaxForceRot2 = 3,\n ForceNoRot = 4,\n ForceRotPlusForce = 5\n}\n```\n\nResearch/documentation on the gtaforums can be found [here](https://gtaforums.com/topic/885669-precisely-define-object-physics/) and [here](https://gtaforums.com/topic/887362-apply-forces-and-momentums-to-entityobject/).\n\n**Parameters**\n- `entity`: The entity you want to apply a force on\n- `forceType`: Refer to `eForceType`\n- `x`: Force amount (X)\n- `y`: Force amount (Y)\n- `z`: Force amount (Z)\n- `offX`: Rotation/offset force (X)\n- `offY`: Rotation/offset force (Y)\n- `offZ`: Rotation/offset force (Z)\n- `boneIndex`: (Often 0) Entity bone index\n- `isDirectionRel`: (Usually false) Vector defined in local (body-fixed) coordinate frame\n- `ignoreUpVec`: (Usually true)\n- `isForceRel`: (Usually true) When true, force gets multiplied with the objects mass and different objects will have the same acceleration\n- `p12`: (Usually false)\n- `p13`: (Usually true)\n\n```lua\nlocal forceTypes = {\n MinForce = 0,\n MaxForceRot = 1,\n MinForce2 = 2,\n MaxForceRot2 = 3,\n ForceNoRot = 4,\n ForceRotPlusForce = 5\n}\n\nlocal entity = PlayerPedId()\nlocal forceType = forceTypes.MaxForceRot2\n -- sends the entity straight up into the sky:\nlocal direction = vector3(0.0, 0.0, 15.0)\nlocal rotation = vector3(0.0, 0.0, 0.0)\nlocal boneIndex = 0\nlocal isDirectionRel = false\nlocal ignoreUpVec = true\nlocal isForceRel = true\nlocal p12 = false\nlocal p13 = true\n\nApplyForceToEntity(\n entity,\n forceType,\n direction,\n rotation,\n boneIndex,\n isDirectionRel,\n ignoreUpVec,\n isForceRel,\n p12,\n p13\n)\n``` -ApplyForceToEntityCenterOfMass \n\n**Parameters**\n- `forceType`: Refer to [APPLY_FORCE_TO_ENTITY](#\\_0xC5F68BE9613E2D18) +ApplyForceToEntity ```cpp\nenum eApplyForceTypes {\n APPLY_TYPE_FORCE = 0,\n APPLY_TYPE_IMPULSE = 1,\n APPLY_TYPE_EXTERNAL_FORCE = 2,\n APPLY_TYPE_EXTERNAL_IMPULSE = 3,\n APPLY_TYPE_TORQUE = 4,\n APPLY_TYPE_ANGULAR_IMPULSE = 5\n}\n```\n\n**Parameters**\n- `entity`: The entity handle\n- `forceType`: The force type\n- `x`: The x component of the force to apply\n- `y`: The y component of the force to apply\n- `z`: The z component of the force to apply\n- `offX`: Offset from center of entity (X)\n- `offY`: Offset from center of entity (Y)\n- `offZ`: Offset from center of entity (Z)\n- `nComponent`: Component of the entity to apply the force too. Only matters for breakable or articulated (ragdoll) physics. 0 means the root or parent component\n- `bLocalForce`: Specifies whether the force vector passed in is in local or world coordinates. `true` means the force will get automatically transformed into world space before being applied\n- `bLocalOffset`: Specifies whether the offset passed in is in local or world coordinates\n- `bScaleByMass`: Specifies whether to scale the force by mass\n- `bPlayAudio`: Specifies whether to play audio events related to the force being applied. The audio will depend on the entity type. Currently vehicles are the only entity types supported, and will play a suspension squeal depending on the magnitude of the force\n- `bScaleByTimeWarp`: Specifies whether to scale the force by time warp. Default is `true`\n\n```lua\nlocal entity = PlayerPedId()\nlocal forceType = 2\n -- sends the entity straight up into the sky:\nlocal direction = vector3(0.0, 0.0, 15.0)\nlocal offset = vector3(0.0, 0.0, 0.0)\nlocal component = 0\nlocal localForce = false\nlocal localOffset = true\nlocal scaleByMass = true\nlocal playAudio = false\nlocal scaleByTimeWarp = true\n\nApplyForceToEntity(\n entity,\n forceType,\n direction,\n offset,\n boneIndex,\n localForce,\n localOffset,\n scaleByMass,\n playAudio,\n scaleByTimeWarp\n)\n``` +ApplyForceToEntityCenterOfMass Apply a force to an entities center of mass.\n\n**Parameters**\n- `entity`: The entity handle\n- `forceType`: The force type, see [`APPLY_FORCE_TO_ENTITY`](#\\_0xC5F68BE9613E2D18)\n- `x`: The x component of the force to apply\n- `y`: The y component of the force to apply\n- `z`: The z component of the force to apply\n- `nComponent`: Component of the entity to apply the force too. Only matters for breakable or articulated (ragdoll) physics. 0 means the root or parent component\n- `bLocalForce`: Specifies whether the force vector passed in is in local or world coordinates. `true` means the force will get automatically transformed into world space before being applied\n- `bScaleByMass`: Specifies whether to scale the force by mass\n- `bApplyToChildren`: Default `false`. If the force should be applied to any attached children ApplyPedBlood ```\nFound one occurence in re_crashrescue.c4 \nPED::APPLY_PED_BLOOD(l_4B, 3, 0.0, 0.0, 0.0, "wound_sheet"); \n``` ApplyPedBloodSpecific Applies blood damage to a ped with specific parameters for zone, UV offsets, rotation, scale, and initial aging.\n\n```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `ped`: The Ped to which blood damage is applied.\n- `component`: Specific component or body part.\n- `u`: UV texture coordinates for placing the decal in the specified zone.\n- `v`: UV texture coordinates for placing the decal in the specified zone.\n- `rotation`: Angle in degrees for the rotation of the blood decal.\n- `scale`: Scale factor for the damage, ranging from 0.0 to 1.0.\n- `forcedFrame`: Allows a specific frame of damage to be chosen (-1 for random selection).\n- `preAge`: Number of seconds to pre-age the damage for an "old wound" effect (0.0 for fresh wound).\n- `bloodName`: Name of the blood type, matching an entry in peddamage.xml. ApplyPedDamageDecal ```\nscar\nblushing\ncs_flush_anger\ncs_flush_anger_face\nbruise\nbruise_large\nherpes\nArmorBullet\nbasic_dirt_cloth\nbasic_dirt_skin\ncs_trev1_dirt\n```\n\n**Parameters**\n- `damageZone`: Refer to `ePedDecorationZone` in [GET_PED_DECORATION_ZONE_FROM_HASHES](#\\_0x9FD452BFBE7A7A8B) ApplyPedDamagePack ```\nDamage Packs: \n"SCR_TrevorTreeBang" \n"HOSPITAL_0" \n"HOSPITAL_1" \n"HOSPITAL_2" \n"HOSPITAL_3" \n"HOSPITAL_4" \n"HOSPITAL_5" \n"HOSPITAL_6" \n"HOSPITAL_7" \n"HOSPITAL_8" \n"HOSPITAL_9" \n"SCR_Dumpster" \n"BigHitByVehicle" \n"SCR_Finale_Michael_Face" \n"SCR_Franklin_finb" \n"SCR_Finale_Michael" \n"SCR_Franklin_finb2" \n"Explosion_Med" \n"SCR_Torture" \n"SCR_TracySplash" \n"Skin_Melee_0" \nAdditional damage packs: \ngist.github.com/alexguirre/f3f47f75ddcf617f416f3c8a55ae2227 \n``` ApplyWeatherCycles \n\n**Parameters**\n- `numEntries`: The number of cycle entries. Must be between 1 and 256\n- `msPerCycle`: The duration in milliseconds of each cycle. Must be between 1000 and 86400000 (24 hours)\n\n**Returns** Returns true if all parameters were valid, otherwise false.\n\n```lua\n-- Cycle between XMAS weather for 30 seconds (3 * 10000 milliseconds), and SMOG weather for 20 seconds (2 * 10000 milliseconds)\nlocal success = SetWeatherCycleEntry(0, "XMAS", 3) and\n SetWeatherCycleEntry(1, "SMOG", 2) and\n ApplyWeatherCycles(2, 10000)\n``` AreAllVehicleWindowsIntact ```\nAppears to return false if any window is broken. \n``` -AreAnyVehicleSeatsFree ```\nReturns false if every seat is occupied. \n``` +AreAnyVehicleSeatsFree Dead peds still count as occupying a seat until the body is removed, so a vehicle full of corpses returns `false`. Peds tasked to enter the vehicle but not yet inserted do not occupy their target seat.\n\nFor per-seat queries use [IS_VEHICLE_SEAT_FREE](#\\_0x22AC59A870E6A669), to find which ped is in a specific seat use [GET_PED_IN_VEHICLE_SEAT](#\\_0xBB40BBB9B9A067B).\n\n**Parameters**\n- `vehicle`: The vehicle handle to check.\n\n**Returns** Returns `true` when the vehicle has at least one seat with no ped assigned to it. Vehicles with no seats in their model (trailers, prop carriages) or an invalid entity will return `false`.\n\n```lua\n-- Print whether the vehicle the player is in has a free seat\nRegisterCommand("seatcheck", function()\n local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)\n if vehicle == 0 then return end\n if AreAnyVehicleSeatsFree(vehicle) then\n print("Room available.")\n else\n print("Vehicle is full.")\n end\nend, false)\n``` AreBombBayDoorsOpen Returns true when the bomb bay doors of this plane are open. False if they're closed.\n\n**Parameters**\n- `aircraft`: The vehicle to check the bomb bay doors on.\n\n**Returns** A bool indicating the state of the doors (true = open, false = closed).\n\n```lua\nlocal vehicle = GetVehiclePedIsIn(PlayerPedId(), false)\n\nif AreBombBayDoorsOpen(vehicle) then\n print("The doors are open!")\nelse\n print("The doors are closed!")\nend\n``` AreHeliStubWingsDeployed Only used with the "akula" in the decompiled native scripts.\n\n```\nNativeDB Introduced: v1290\n``` AreOutriggerLegsDeployed Returns whether the outrigger legs are deployed for the vehicle.\nThe Chernobog is one of the few vehicles with outrigger legs.\n\n```\nNativeDB Introduced: v1290\n```\n\n**Returns** The deployment state of the vehicle's outrigger legs\n\n```lua\nlocal vehicle = GetVehiclePedIsIn(PlayerPedId(), false)\nlocal deployed = AreOutriggerLegsDeployed(vehicle)\nprint("deploy state:", deployed)\n``` @@ -140,8 +142,8 @@ CanPhoneBeSeenOnScreen ```\nThis one is weird and seems to return a TRUE state r CanPlayerStartCommerceSession > This native is deprecated and may be removed in a future version. Use the [Tebex API](https://docs.tebex.io/) instead.\n\nReturns whether or not the specified player has enough information to start a commerce session for.\n\n**Parameters**\n- `playerSrc`: The player handle\n\n**Returns** True or false. CanRequestAssetsForCutsceneEntity Returns when it is safe to start applying changes to cutscene entities.\n\nShould always be used for applying components.\n\nSee [`SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED`](#\\_0x2A56C06EBEF2B0D9) and [`REGISTER_ENTITY_FOR_CUTSCENE`](#\\_0xE40C1C56DF95C2E8) for an example.\n\nThis will be true before the cutscene is considered loaded\n\n**Returns** Whether you can request assets for cutscene entities, like components. CanSetEnterStateForRegisteredEntity ```\nmodelHash (p1) was always 0 in R* scripts \n``` -CanSetExitStateForCamera Whether or not it is safe to run functions on the camera,\nas the camera is now no longer being used by the cutscene.\n\n**Parameters**\n- `p0`: Mostly false -CanSetExitStateForRegisteredEntity Returns if the script can begin interacting with the registered entity. Primarly used for lead-outs of cutscenes.\nReturns on frame after cutscene ends, so you cannot get is while using IsCutsceneActive()\n\nWhether it is safe to start doing scripted actions on the entity, like simulating walking out of a cutscene.\n\n**Parameters**\n- `cutsceneEntName`: i.e Michael\n- `modelHash`: Can be 0\n\n**Returns** Whether or not it is safe to begin interacting with the entity +CanSetExitStateForCamera Whether or not it is safe to run functions on the camera,\nas the camera is now no longer being used by the cutscene. +CanSetExitStateForRegisteredEntity Returns if the script can begin interacting with the registered entity. Primarly used for lead-outs of cutscenes.\nReturns on frame after cutscene ends, so you cannot get is while using IsCutsceneActive()\n\nWhether it is safe to start doing scripted actions on the entity, like simulating walking out of a cutscene.\n\n**Parameters**\n- `cutsceneEntName`: Name of the entity cHandle in the cutscene\n- `modelHash`: Can be 0\n\n**Returns** Whether or not it is safe to begin interacting with the entity CanShuffleSeat \n\n**Parameters**\n- `vehicle`: The vehicle to check.\n- `seatIndex`: See eSeatPosition declared in [`IS_VEHICLE_SEAT_FREE`](#\\_0x22AC59A870E6A669). CanUseWeaponOnParachute ```\nthis returns if you can use the weapon while using a parachute \n``` CanVehicleReceiveCbRadio \n\n**Returns** Returns true if the vehicle can currently receive CB radio (ie. it has a capable radio and is in range of a transmitter) @@ -166,7 +168,7 @@ CellCamSetVerticalOffset \n\n**Parameters**\n- `p0`: Value from 0.0 to 2.0 ChangeFakeMpCash ```\nDisplays cash change notifications on HUD. \n``` ClampGameplayCamPitch ```\nminimum: Degrees between -90f and 90f.\nmaximum: Degrees between -90f and 90f.\nClamps the gameplay camera's current pitch.\nEg. _CLAMP_GAMEPLAY_CAM_PITCH(0.0f, 0.0f) will set the vertical angle directly behind the player.\n``` ClampGameplayCamYaw ```\nminimum: Degrees between -180f and 180f.\nmaximum: Degrees between -180f and 180f.\nClamps the gameplay camera's current yaw.\nEg. _CLAMP_GAMEPLAY_CAM_YAW(0.0f, 0.0f) will set the horizontal angle directly behind the player.\n``` -ClearAllBlipRoutes Clears all active blip routes that have been set with [`SetBlipRoute`](#\\_0x3E160C90). +ClearAllBlipRoutes Clears all active blip routes that have been set with [`SetBlipRoute`](#\\_0x4F7D8A9BFB0B43E9). ClearAllPedProps \n\n**Parameters**\n- `ped`: The ped handle. ClearAmbientZoneListState Resets the list of ambients zones enabled/disabled status to its value before it was modified by this script.\n\nDefault behaviour is that any state change only gets applied once the player leaves the zone.\n\n**Parameters**\n- `zoneListName`: The zone name to clear\n- `forceUpdate`: Whether ot not to force a zone to become disabled even if its currently active ClearAmbientZoneState Resets the ambient zone enabled/disabled status to its value before it was modified by this script\n\nDefault behaviour is that any state change only gets applied once the player leaves the zone.\n\n**Parameters**\n- `zoneName`: the zone name to clear\n- `forceUpdate`: Whether ot not to force a zone to become disabled even if its currently active @@ -198,6 +200,7 @@ ClearPedCoverClipsetOverride ```\nCLEAR_PED_*\n``` ClearPedDamageDecalByZone ```\np1: from 0 to 5 in the b617d scripts. \np2: "blushing" and "ALL" found in the b617d scripts. \n``` ClearPedLastWeaponDamage Does NOT seem to work with HAS_PED_BEEN_DAMAGED_BY_WEAPON. Use CLEAR_ENTITY_LAST_WEAPON_DAMAGE and HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON instead. ClearPedProp \n\n**Parameters**\n- `ped`: The ped handle.\n- `propId`: The prop id you want to clear from the ped. Refer to [SET_PED_PROP_INDEX](#\\_0x93376B65A266EB5F). +ClearPedScriptTaskIfRunningThreatResponseNonTempTask ```\nNativeDB Introduced: v3407\n``` ClearPedScubaGearVariation Removes the scubagear (for mp male: component id: 8, drawableId: 123, textureId: any) from peds. Does not play the 'remove scuba gear' animation, but instantly removes it.\n\n**Parameters**\n- `ped`: The ped to remove the scuba gear from. ClearPedTasks Clear a ped's tasks. Stop animations and other tasks created by scripts.\n\n**Parameters**\n- `ped`: Ped id. Use PlayerPedId() for your own character. ClearPedTasksImmediately Immediately stops the pedestrian from whatever it's doing. The difference between this and [CLEAR_PED_TASKS](#\\_0xE1EF3C1216AFF2CD) is that this one teleports the ped but does not change the position of the ped.\n\n**Parameters**\n- `ped`: Ped id. @@ -227,7 +230,7 @@ ControlMountedWeapon ```\nForces the ped to use the mounted weapon. \nReturns f ConvertPosixTime ```\nTakes the specified time and writes it to the structure specified in the second argument. \nstruct date_time \n{ \n alignas(8) int year; \n alignas(8) int month; \n alignas(8) int day; \n alignas(8) int hour; \n alignas(8) int minute; \n alignas(8) int second; \n};\n``` CopyVehicleDamages Copies sourceVehicle's damage (broken bumpers, broken lights, etc.) to targetVehicle.\n\n**Parameters**\n- `sourceVehicle`: The source to copy the vehicle damage.\n- `targetVehicle`: The target to paste the vehicle damage. Cos Returns the cosine of the given number.\n\n**Parameters**\n- `value`: The number of degrees (in degrees, not radians)\n\n**Returns** The cosine of the given number\n\n```lua\n-- Get the heading\nlocal heading = GetEntityHeading(PlayerPedId())\nlocal cos = Cos(heading)\n\n-- equivalent in lua\nlocal cosLua = math.cos(heading * (math.pi / 180))\n``` -CreateAirDefenseSphere Both coordinates are from objects in the decompiled scripts.\n\nNative related to [\\_0xECDC202B25E5CF48](#\\_0xECDC202B25E5CF48) p1 value. The only weapon hash used in the decompiled scripts is weapon_air_defence_gun. These two natives are used by the yacht script, decompiled scripts suggest it and the weapon hash used (valkyrie's rockets) are also used by yachts.\n\n**Parameters**\n- `x`: X coordinate\n- `y`: Y coordinate\n- `z`: Z coordinate\n- `radius`: Unknown float 150.0 is used in freemode script.\n- `p4`: X coordinate\n- `p5`: Y coordinate\n- `p6`: Z coordinate\n- `weaponHash`: weapon_air_defence_gun and 0 are used in the decompiled scripts.\n\n**Returns** Seems to be some sort of handle, result is += 1 any time this native is called. +CreateAirDefenceSphere Both coordinates are from objects in the decompiled scripts.\n\nNative related to [\\_0xECDC202B25E5CF48](#\\_0xECDC202B25E5CF48) p1 value. The only weapon hash used in the decompiled scripts is weapon_air_defence_gun. These two natives are used by the yacht script, decompiled scripts suggest it and the weapon hash used (valkyrie's rockets) are also used by yachts.\n\n**Parameters**\n- `radius`: Unknown float 150.0 is used in freemode script.\n- `weaponHash`: weapon_air_defence_gun and 0 are used in the decompiled scripts.\n\n**Returns** Seems to be some sort of handle, result is += 1 any time this native is called. CreateAmbientPickup Creates an ambient pickup given the hash. Pickup hashes can be found [here](https://gist.github.com/4mmonium/1eabfb6b3996e3aa6b9525a3eccf8a0b). CreateAudioSubmix Creates an audio submix with the specified name, or gets the existing audio submix by that name.\n\n**Parameters**\n- `name`: The audio submix name.\n\n**Returns** A submix ID, or -1 if the submix could not be created. CreateCam Creates a camera with the specified cam name, You can use `SET_CAM_` natives to manipulate the camera.\\\nMake sure to call [RENDER_SCRIPT_CAMS](#\\_0x07E5B515DB0636FC) once the camera is created, or this won't have any visible effect.\n\n### Camera names:\n\n* DEFAULT_SCRIPTED_CAMERA\n* DEFAULT_ANIMATED_CAMERA\n* DEFAULT_SPLINE_CAMERA\n* DEFAULT_SCRIPTED_FLY_CAMERA\n* TIMED_SPLINE_CAMERA\n* CUSTOM_TIMED_SPLINE_CAMERA\n* ROUNDED_SPLINE_CAMERA\n* SMOOTHED_SPLINE_CAMERA\n\n**Parameters**\n- `camName`: A string representing the camera type, the game will convert the string into a joaat hash upon native execution.\n- `active`: Set to true if you wish to make this new camera the active camera.\n\n**Returns** A camera handle referencing the camera that was created.\n\n```lua\nlocal cam = CreateCam("DEFAULT_SCRIPTED_CAMERA", true)\n``` @@ -235,6 +238,12 @@ CreateCamWithParams Create a camera with the specified cam name/type, You can us CreateCamera Creates a camera with the specified camera hash, You can use `SET_CAM_` natives to manipulate the camera.\nMake sure to call [RENDER_SCRIPT_CAMS](#\\_0x07E5B515DB0636FC) once the camera is created, or this won't have any visible effect.\n\nTake a look at [CREATE_CAM](#\\_0xC3981DCE61D9E13F) if you would like to see the available camera names.\n\n```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `camHash`: The hash of the camera type, use [GET_HASH_KEY](#\\_0xD24D37CC275948CC) to get the camera hash from the name.\n- `active`: Set to true if you wish to make this new camera the active camera.\n\n**Returns** A camera handle referencing the camera that was created.\n\n```lua\n-- creates a camera with the "DEFAULT_SCRIPTED_CAMERA" type\nlocal cam = CreateCamera(GetHashKey("DEFAULT_SCRIPTED_CAMERA"), true)\n\nRenderScriptCams(true, false, 0, true, true)\n``` CreateCameraWithParams Create a camera with the specified camera hash, You can use `SET_CAM_` natives to manipulate the camera.\nMake sure to call [RENDER_SCRIPT_CAMS](#\\_0x07E5B515DB0636FC) once the camera is created, or this won't have any visible effect.\n\nTake a look at [CREATE_CAM](#\\_0xC3981DCE61D9E13F) if you would like to see the available camera names.\n\n```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `camHash`: The hash of the camera type, use [GET_HASH_KEY](#\\_0xD24D37CC275948CC) to get the camera hash from the name.\n- `posX`: The x position of the camera.\n- `posY`: The y position of the camera.\n- `posZ`: The z position of the camera.\n- `rotX`: The x rotation of the camera.\n- `rotY`: The y rotation of the camera.\n- `rotZ`: The z rotation of the camera.\n- `fov`: The Field Of View of the camera, is the observable world that is seen.\n- `active`: Set to true if you wish to make this new camera the active camera.\n- `rotationOrder`: The order of rotation, see [`GET_ENTITY_ROTATION`](#\\_0xAFBD61CC738D9EB9).\n\n**Returns** A camera handle. CreateCheckpoint ```\nCreates a checkpoint. Returns the handle of the checkpoint. \n20/03/17 : Attention, checkpoints are already handled by the game itself, so you must not loop it like markers.\nParameters: \n* type - The type of checkpoint to create. See below for a list of checkpoint types. \n* pos1 - The position of the checkpoint. \n* pos2 - The position of the next checkpoint to point to. \n* diameter - The diameter of the checkpoint.\n* color - The color of the checkpoint. \n* reserved - Special parameter, see below for details. Usually set to 0 in the scripts. \nCheckpoint types (prior to game build 2189): \n0-4---------Cylinder: 1 arrow, 2 arrow, 3 arrows, CycleArrow, Checker \n5-9---------Cylinder: 1 arrow, 2 arrow, 3 arrows, CycleArrow, Checker \n10-14-------Ring: 1 arrow, 2 arrow, 3 arrows, CycleArrow, Checker \n15-19-------1 arrow, 2 arrow, 3 arrows, CycleArrow, Checker \n20-24-------Cylinder: 1 arrow, 2 arrow, 3 arrows, CycleArrow, Checker \n25-29-------Cylinder: 1 arrow, 2 arrow, 3 arrows, CycleArrow, Checker \n30-34-------Cylinder: 1 arrow, 2 arrow, 3 arrows, CycleArrow, Checker \n35-38-------Ring: Airplane Up, Left, Right, UpsideDown \n39----------? \n40----------Ring: just a ring \n41----------? \n42-44-------Cylinder w/ number (uses 'reserved' parameter) \n45-47-------Cylinder no arrow or number \nIf using type 42-44, reserved sets number / number and shape to display \n0-99------------Just numbers (0-99) \n100-109-----------------Arrow (0-9) \n110-119------------Two arrows (0-9) \n120-129----------Three arrows (0-9) \n130-139----------------Circle (0-9) \n140-149------------CycleArrow (0-9) \n150-159----------------Circle (0-9) \n160-169----Circle w/ pointer (0-9) \n170-179-------Perforated ring (0-9) \n180-189----------------Sphere (0-9) \n```\n\n[Checkpoint Types](https://docs.fivem.net/docs/game-references/checkpoints/) as of game build 2189 +CreateColshapeCircle > This native only works in FiveM for GTAV Enhanced.\n\nCreates a circle collision shape at the specified 2D position with the given radius.\n\nWhen an entity enters or leaves a collision shape, the `onColshapeEnter` and `onColshapeExit` events are triggered. Both events are called with the entity handle that triggered them and the collision shape ID.\n\n**Parameters**\n- `x`: Center X coordinate.\n- `y`: Center Y coordinate.\n- `radius`: Radius of the circle.\n\n**Returns** The collision shape ID, or `-1` on failure.\n\n```lua\n-- Create a circle colshape and listen for enter/exit events\nlocal colShape = CreateColshapeCircle(293.089, 180.466, 10.0)\nprint('created colshape with id ' .. tostring(colShape))\n\nAddEventHandler('onColshapeEnter', function(entity, shape)\n print('entity ' .. tostring(entity) .. ' entered colshape ' .. tostring(shape))\nend)\n\nAddEventHandler('onColshapeExit', function(entity, shape)\n print('entity ' .. tostring(entity) .. ' left colshape ' .. tostring(shape))\nend)\n``` +CreateColshapeCuboid > This native only works in FiveM for GTAV Enhanced.\n\nCreates a cuboid (axis-aligned box) collision shape at the specified 3D position.\n\nWhen an entity enters or leaves a collision shape, the `onColshapeEnter` and `onColshapeExit` events are triggered. Both events are called with the entity handle that triggered them and the collision shape ID.\n\n**Parameters**\n- `x`: Center X coordinate.\n- `y`: Center Y coordinate.\n- `z`: Center Z coordinate.\n- `width`: Total width (X extent).\n- `depth`: Total depth (Y extent).\n- `height`: Total height (Z extent).\n\n**Returns** The collision shape ID, or `-1` on failure.\n\n```lua\n-- Create a cuboid colshape and listen for enter/exit events\nlocal colShape = CreateColshapeCuboid(293.089, 180.466, 30.0, 10.0, 10.0, 5.0)\nprint('created colshape with id ' .. tostring(colShape))\n\nAddEventHandler('onColshapeEnter', function(entity, shape)\n print('entity ' .. tostring(entity) .. ' entered colshape ' .. tostring(shape))\nend)\n\nAddEventHandler('onColshapeExit', function(entity, shape)\n print('entity ' .. tostring(entity) .. ' left colshape ' .. tostring(shape))\nend)\n``` +CreateColshapeCylinder > This native only works in FiveM for GTAV Enhanced.\n\nCreates a cylinder collision shape at the specified 3D position.\n\nWhen an entity enters or leaves a collision shape, the `onColshapeEnter` and `onColshapeExit` events are triggered. Both events are called with the entity handle that triggered them and the collision shape ID.\n\n**Parameters**\n- `x`: Center X coordinate.\n- `y`: Center Y coordinate.\n- `z`: Center Z coordinate.\n- `radius`: Radius of the cylinder.\n- `height`: Total height of the cylinder.\n\n**Returns** The collision shape ID, or `-1` on failure.\n\n```lua\n-- Create a cylinder colshape and listen for enter/exit events\nlocal colShape = CreateColshapeCylinder(293.089, 180.466, 30.0, 10.0, 5.0)\nprint('created colshape with id ' .. tostring(colShape))\n\nAddEventHandler('onColshapeEnter', function(entity, shape)\n print('entity ' .. tostring(entity) .. ' entered colshape ' .. tostring(shape))\nend)\n\nAddEventHandler('onColshapeExit', function(entity, shape)\n print('entity ' .. tostring(entity) .. ' left colshape ' .. tostring(shape))\nend)\n``` +CreateColshapePolygon > This native only works in FiveM for GTAV Enhanced.\n\nCreates a polygon collision shape defined by a set of 2D points extruded between `minZ` and `maxZ`. Requires at least 3 points.\n\nWhen an entity enters or leaves a collision shape, the `onColshapeEnter` and `onColshapeExit` events are triggered. Both events are called with the entity handle that triggered them and the collision shape ID.\n\n**Parameters**\n- `minZ`: Minimum Z height of the polygon.\n- `maxZ`: Maximum Z height of the polygon.\n- `points`: An array of interleaved x, y point pairs (e.g., `{x1, y1, x2, y2, x3, y3, ...}`). Must contain at least 3 pairs.\n\n**Returns** The collision shape ID, or `-1` on failure.\n\n```lua\n-- Create a polygon colshape and listen for enter/exit events\nlocal colShape = CreateColshapePolygon(28.0, 32.0, { 293.089, 180.466, 303.089, 180.466, 298.089, 190.466 })\nprint('created colshape with id ' .. tostring(colShape))\n\nAddEventHandler('onColshapeEnter', function(entity, shape)\n print('entity ' .. tostring(entity) .. ' entered colshape ' .. tostring(shape))\nend)\n\nAddEventHandler('onColshapeExit', function(entity, shape)\n print('entity ' .. tostring(entity) .. ' left colshape ' .. tostring(shape))\nend)\n``` +CreateColshapeRectangle > This native only works in FiveM for GTAV Enhanced.\n\nCreates a rotated rectangle collision shape at the specified 3D position.\n\nWhen an entity enters or leaves a collision shape, the `onColshapeEnter` and `onColshapeExit` events are triggered. Both events are called with the entity handle that triggered them and the collision shape ID.\n\n**Parameters**\n- `x`: Center X coordinate.\n- `y`: Center Y coordinate.\n- `z`: Center Z coordinate.\n- `width`: Total width.\n- `depth`: Total depth.\n- `heading`: Rotation heading in radians.\n\n**Returns** The collision shape ID, or `-1` on failure.\n\n```lua\n-- Create a rectangle colshape and listen for enter/exit events\nlocal colShape = CreateColshapeRectangle(293.089, 180.466, 30.0, 10.0, 10.0, 0.0)\nprint('created colshape with id ' .. tostring(colShape))\n\nAddEventHandler('onColshapeEnter', function(entity, shape)\n print('entity ' .. tostring(entity) .. ' entered colshape ' .. tostring(shape))\nend)\n\nAddEventHandler('onColshapeExit', function(entity, shape)\n print('entity ' .. tostring(entity) .. ' left colshape ' .. tostring(shape))\nend)\n``` +CreateColshapeSphere > This native only works in FiveM for GTAV Enhanced.\n\nCreates a sphere collision shape at the specified 3D position with the given radius.\n\nWhen an entity enters or leaves a collision shape, the `onColshapeEnter` and `onColshapeExit` events are triggered. Both events are called with the entity handle that triggered them and the collision shape ID.\n\n**Parameters**\n- `x`: Center X coordinate.\n- `y`: Center Y coordinate.\n- `z`: Center Z coordinate.\n- `radius`: Radius of the sphere.\n\n**Returns** The collision shape ID, or `-1` on failure.\n\n```lua\n-- Create a sphere colshape and listen for enter/exit events\nlocal colShape = CreateColshapeSphere(293.089, 180.466, 30.0, 10.0)\nprint('created colshape with id ' .. tostring(colShape))\n\nAddEventHandler('onColshapeEnter', function(entity, shape)\n print('entity ' .. tostring(entity) .. ' entered colshape ' .. tostring(shape))\nend)\n\nAddEventHandler('onColshapeExit', function(entity, shape)\n print('entity ' .. tostring(entity) .. ' left colshape ' .. tostring(shape))\nend)\n``` CreateDryVolume Creates a volume where water effects do not apply.\nUseful for preventing water collisions from flooding areas underneath them.\nThis has no effect on waterquads, only water created from drawables and collisions.\nDon't create volumes when your local ped is swimming (e.g. use IS_PED_SWIMMING in your scripts before you call this)\n\n**Parameters**\n- `xMin`: The min X component of the AABB volume where water does not affect the player.\n- `yMin`: The min Y component for the AABB volume.\n- `zMin`: The min Z component for the AABB volume.\n- `xMax`: The max X component for the AABB volume.\n- `yMax`: The max Y component for the AABB volume.\n- `zMax`: The max Z component for the AABB volume. CreateDui Creates a DUI browser. This can be used to draw on a runtime texture using CREATE_RUNTIME_TEXTURE_FROM_DUI_HANDLE.\n\n**Parameters**\n- `url`: The initial URL to load in the browser.\n- `width`: The width of the backing surface.\n- `height`: The height of the backing surface.\n\n**Returns** A DUI object. CreateFakeMpGamerTag As per the name, this native creates a "fake" gamer tag that is attached to a specific ped.\nUnlike "real" gamer tags, you cannot set the crew colour of these gamer tags.\n\nTo create gamer tags for actual players and for more gamer tag information, see [CREATE_MP_GAMER_TAG_WITH_CREW_COLOR](#\\_0x6DD05E9D83EFA4C9).\n\n**Parameters**\n- `ped`: The ped that the fake gamer tag will be attached to.\n- `username`: The name displayed on the gamer tag.\n- `crewIsPrivate`: If the crew is private. Public crews have a pointed end cap, private crews do not.\n- `crewIsRockstar`: If the crew is a Rockstar crew. Rockstar crews include a Rockstar logo before the name.\n- `crewName`: The name of the crew.\n- `crewRank`: The rank from 1-5 that the player is within the crew. Use 0 if the player is the founder of the crew. Only relevant for private crews.\n\n**Returns** The ID of the new gamer tag. @@ -243,7 +252,8 @@ CreateIncident ```\nNativeDB Added Parameter 8: Any p7\nNativeDB Added Parameter CreateIncidentWithEntity ```\nNativeDB Added Parameter 6: Any p5\nNativeDB Added Parameter 7: Any p6\n```\n\n**Parameters**\n- `dispatchService`: Refer to [ENABLE_DISPATCH_SERVICE](#\\_0xDC0F817884CDD856) for dispatch types\n\n**Returns** Returns true if the incident was succesfully made CreateMissionTrain Train models must be [requested](#\\_0x963D27A58DF860AC) before use. See trains.xml (located in `Grand Theft Auto V\\update\\update.rpf\\common\\data\\levels\\gta5\\trains.xml`) for freight and metro variations.\n\nModel names to request can be found by searching `model_name` in the file.\n\nThe `Lua` usage example provided down below has been provided in such way so users can test each and every train variation.\n\n### Newly added parameters (seen in 2372 build)\n\n```\nNativeDB Added Parameter 6: BOOL isNetwork\nNativeDB Added Parameter 7: BOOL netMissionEntity\n```\n\n* **isNetwork**: Whether to create a network object for the train. If false, the train exists only locally.\n* **netMissionEntity**: Whether to register the train as pinned to the script host in the R\\* network model.\n\n### Train Models:\n\n* freight\n\n### Carriage Models:\n\n* freightcar\n* freightcar2 (Added v2372)\n* freightcont1\n* freightcont2\n* freightgrain\n* metrotrain\n* tankercar\n\n### Some train variations (default from trains.xml as of build 2372)\n\n* 17. Very long train and freight variation.\n* 18. Freight train only.\n* 26. Double metro train (with both models flipped opposite to each other). This used to be `25` before the 2802 build, it also used to be `24` before the 2372 build.\n\n**Parameters**\n- `variation`: The variation id, these can range from 0 to 26 as of build 2802 (previously `0-25` in build 2372 and `0-24` before that).\n- `x`: Spawn coordinate X component.\n- `y`: Spawn coordinate Y component.\n- `z`: Spawn coordinate Z component.\n- `direction`: The direction in which the train will go (true or false)\n\n**Returns** A script handle (fwScriptGuid index) for the train, or 0 if the train failed to be created.\n\n```lua\n--[[ \n This function needs to be invoked prior to calling CreateMissionTrain or the trains (as well as its carriages) won't spawn.\n Could also result in a game-crash when CreateMissionTrain is called without\n loading the train model needed for the variation before-hand.\n]]\nfunction loadTrainModels()\n local trainsAndCarriages = {\n 'freight', 'metrotrain', 'freightcont1', 'freightcar', \n 'freightcar2', 'freightcont2', 'tankercar', 'freightgrain'\n }\n\n for _, vehicleName in ipairs(trainsAndCarriages) do\n local modelHashKey = GetHashKey(vehicleName)\n RequestModel(modelHashKey) -- load the model\n -- wait for the model to load\n while not HasModelLoaded(modelHashKey) do\n Citizen.Wait(500)\n end\n end\nend\n\nloadTrainModels()\n\nRegisterCommand("createtrain", function(source, args, rawCommand)\n if #args < 1 then\n TriggerEvent('chat:addMessage', {\n args = { \n 'Error, provide a variation id, you can find those in trains.xml. Variations range from 0 to 26.'\n }\n })\n return\n end\n \n local playerCoords = GetEntityCoords(PlayerPedId())\n -- Now actually create a train using a variation\n -- These coordinates were used for testing: 1438.98, 6405.92, 34.19\n CreateMissionTrain(\n tonumber(args[1]),\n playerCoords.x, playerCoords.y, playerCoords.z,\n true,\n true,\n true\n )\nend, false)\n``` CreateMobilePhone ```\nCreates a mobile phone of the specified type. \nPossible phone types: \n0 - Default phone / Michael's phone \n1 - Trevor's phone \n2 - Franklin's phone \n4 - Prologue phone \nThese values represent bit flags, so a value of '3' would toggle Trevor and Franklin's phones together, causing unexpected behavior and most likely crash the game. \n``` -CreateModelHide ```\np5 = sets as true in scripts \nSame as the comment for CREATE_MODEL_SWAP unless for some reason p5 affects it this only works with objects as well. \nNetwork players do not see changes done with this. \n``` +CreateModelHide Hides all objects of the specified model intersecting a sphere centered at (x, y, z) with the given radius.\nNetwork players do not see changes done with this.\nUse [`CREATE_MODEL_HIDE_EXCLUDING_SCRIPT_OBJECTS`](#\\_0x3A52AE588830BF7F) if you only want to hide map objects and exclude those created by scripts.\nUse [`REMOVE_MODEL_HIDE`](#\\_0xD9E3006FB3CBD765) to make hidden objects visible again.\n\n**Parameters**\n- `x`: X Coordinate of the hiding sphere center.\n- `y`: Y Coordinate of the hiding sphere center.\n- `z`: Z Coordinate of the hiding sphere center.\n- `radius`: Radius of the hiding sphere.\n- `model`: The object's model hash to hide.\n- `surviveMapReload`: If false, only currently loaded objects are hidden. If their map unloads (e.g. by moving away) and reloads, the objects will reappear. +CreateModelHideExcludingScriptObjects Hides all objects of the specified model intersecting a sphere centered at (x, y, z) with the given radius, excluding objects created by scripts.\nNetwork players do not see changes done with this.\nUse [`REMOVE_MODEL_HIDE`](#\\_0xD9E3006FB3CBD765) to make hidden objects visible again.\n\n**Parameters**\n- `x`: X Coordinate of the hiding sphere center.\n- `y`: Y Coordinate of the hiding sphere center.\n- `z`: Z Coordinate of the hiding sphere center.\n- `radius`: Radius of the hiding sphere.\n- `model`: The object's model hash to hide.\n- `surviveMapReload`: If false, only currently loaded objects are hidden. If their map unloads (e.g. by moving away) and reloads, the objects will reappear. CreateModelSwap ```\nOnly works with objects! \nNetwork players do not see changes done with this. \n``` CreateMoneyPickups ```\nSpawns one or more money pickups. \nx: The X-component of the world position to spawn the money pickups at. \ny: The Y-component of the world position to spawn the money pickups at. \nz: The Z-component of the world position to spawn the money pickups at. \nvalue: The combined value of the pickups (in dollars). \namount: The number of pickups to spawn. \nmodel: The model to use, or 0 for default money model. \nExample: \nCREATE_MONEY_PICKUPS(x, y, z, 1000, 3, 0x684a97ae); \nSpawns 3 spray cans that'll collectively give $1000 when picked up. (Three spray cans, each giving $334, $334, $332 = $1000). \n============================================== \nMax is 2000 in MP. So if you put the amount to 20, but the value to $400,000 eg. They will only be able to pickup 20 - $2,000 bags. So, $40,000 \n``` CreateMpGamerTagWithCrewColor Creates a gamer tag for the specified local player ID, automatically attached to the player's current ped.\nThe created gamer tag will have the same ID as the player. You can use [IS_MP_GAMER_TAG_ACTIVE](#\\_0x4E929E7A5796FD26) to check if a gamer tag already exists for a player.\nAfter the gamer tag is created, all components will be set as invisible. Use [SET_MP_GAMER_TAG_VISIBILITY](#\\_0x63BB75ABEDC1F6A0) to change the visibility of individual components or [\\_SET_MP_GAMER_TAG_VISIBILITY_ALL](#\\_0xEE76FF7E6A0166B0) to set all of them at once.\n\nTo create a gamer tag for a ped that is not a player, see [CREATE_FAKE_MP_GAMER_TAG](#\\_0xBFEFE3321A3F5015).\n\n**Parameters**\n- `player`: The local player ID to assign the gamer tag to.\n- `username`: The name displayed on the gamer tag.\n- `crewIsPrivate`: If the crew is private. Public crews have a pointed end cap, private crews do not.\n- `crewIsRockstar`: If the crew is a Rockstar crew. Rockstar crews include a Rockstar logo before the name.\n- `crewName`: The name of the crew.\n- `crewRank`: The rank from 1-5 that the player is within the crew. Use 0 if the player is the founder of the crew. Only relevant for private crews.\n- `crewR`: Red component of the crew colour.\n- `crewG`: Green component of the crew colour.\n- `crewB`: Blue component of the crew colour.\n\n```lua\nlocal playerId = PlayerId() -- you can use any local player ID here\n\n-- clear any already existing gamer tag associated with this player\nif IsMpGamerTagActive(playerId) then\n RemoveMpGamerTag(playerId)\n\n -- wait until the gamer tag actually becomes free\n repeat Wait(0) until IsMpGamerTagFree(playerId)\nend\n\n-- create the gamer tag\nCreateMpGamerTagWithCrewColor(playerId, "jaymoo", false, true, "RSG", 0, 200, 0, 200)\n\n-- set the name, crew and typing indicator components as visible\nSetMpGamerTagVisibility(playerId, 0, true)\nSetMpGamerTagVisibility(playerId, 1, true)\nSetMpGamerTagVisibility(playerId, 16, true)\n``` @@ -292,6 +302,7 @@ DecorRegister ```cpp\nenum eDecorType\n{\n DECOR_TYPE_FLOAT = 1,\n DECOR_T DecorRegisterLock ```\nCalled after all decorator type initializations. \n``` DecorSetBool ```\nThis function sets metadata of type bool to specified entity. \n``` DecorSetInt ```\nSets property to int. \n``` +DeleteColshape > This native only works in FiveM for GTAV Enhanced.\n\nDeletes an existing collision shape by its ID.\n\n**Parameters**\n- `colShapeId`: The collision shape ID to delete. DeleteEntity Delete the specified entity, and invalidate the passed handle (i.e., the in/out argument).\nYou might want to check if the entity exists before with [DOES_ENTITY_EXIST](#\\_0x7239B21A38F536BA).\n\n**Parameters**\n- `entity`: The entity to delete.\n\n```lua\n-- Retrieve the vehicle the player is currently in. \nlocal vehicle = GetVehiclePedIsIn(PlayerPedId(), false)\n\n-- Check if the vehicle exists in the game world.\nif not DoesEntityExist(vehicle) then \n -- If the vehicle does not exist, end the execution of the code here.\n return \nend\n\n-- If the vehicle does exist, delete the vehicle entity from the game world.\nDeleteEntity(vehicle)\n``` DeleteIncident ```\nDelete an incident with a given id. \n======================================================= \nCorrection, I have change this to int, instead of int* \nas it doesn't use a pointer to the createdIncident. \nIf you try it you will crash (or) freeze. \n======================================================= \n``` DeleteMissionTrain Used to delete mission trains created with [`CREATE_MISSION_TRAIN`](#\\_0x63C6CCA8E68AE8C8).\n\n```lua\nlocal train = CreateMissionTrain(21, 40.2, -1201.3, 31.0, false)\nDeleteMissionTrain(train)\n``` @@ -304,6 +315,7 @@ DeleteRope Deletes the rope with the specified handle.\n\nYou should check if th DeleteScriptVehicleGenerator Removes a scripted vehicle generator. DeleteTrain Deletes the specified `entity` and any carriage its attached to, or that is attached to it.\n\n**Parameters**\n- `entity`: The carriage to delete. DeleteVehicle ```\nDeletes a vehicle. \nThe vehicle must be a mission entity to delete, so call this before deleting: SET_ENTITY_AS_MISSION_ENTITY(vehicle, true, true); \neg how to use: \nSET_ENTITY_AS_MISSION_ENTITY(vehicle, true, true); \nDELETE_VEHICLE(&vehicle); \nDeletes the specified vehicle, then sets the handle pointed to by the pointer to NULL. \n``` +DeleteWaypointsFromThisPlayer Same as [`SET_WAYPOINT_OFF`](#\\_0xA7E4E2D361C2627F), except it checks if the local player is the owner of the waypoint. DepositVc ```\nDoes nothing and always returns false.\n``` DestroyAllCams ```\nBOOL param indicates whether the cam should be destroyed if it belongs to the calling script. \n``` DestroyCam ```\nBOOL param indicates whether the cam should be destroyed if it belongs to the calling script. \n``` @@ -313,22 +325,25 @@ DetachEntity \n\n**Parameters**\n- `dynamic`: Set to `true` to keep velocity aft DetachEntityFromCargobob Detaches the specified entity currently being carried by a Cargobob.\n\n**Parameters**\n- `vehicle`: The Cargobob helicopter.\n- `entity`: The entity to be detached.\n\n```lua\n-- This example detaches a specific entity from a Cargobob.\n\n-- Retrieve the player ped.\nlocal playerPed = PlayerPedId()\n\n-- Retrieve the player's vehicle (cargobob).\nlocal cargobob = GetVehiclePedIsIn(playerPed, false)\n\n-- Retrieve the model hash of the cargobob.\nlocal cargobobModel = GetEntityModel(cargobob)\n\n-- Check if the vehicle exists and if it's a Cargobob. If not, terminate the script.\nif not DoesEntityExist(cargobob) or cargobobModel ~= GetHashKey("cargobob") then\n return\nend\n\nlocal entityID = 15362 -- The entity you want to detach from the Cargobob (this is a random entity ID).\n\n-- Check if the entity exists; if not, terminate the script.\nif not DoesEntityExist(yourEntity) then\n return\nend\n\n-- Detach the entity from the Cargobob.\nDetachEntityFromCargobob(cargobob, entityID)\n``` DetachVehicleFromTowTruck ```\nFirst two parameters swapped. Scripts verify that towTruck is the first parameter, not the second. \n``` DisableAllControlActions \n\n**Parameters**\n- `padIndex`: The control system instance to use. See [`ENABLE_ALL_CONTROL_ACTIONS`](#\\_0xA5FFE9B05F199DE7). +DisableCinematicBonnetCameraThisUpdate Disables first person camera while in a vehicle for the current tick. DisableControlAction [Control values and meaning](https://docs.fivem.net/docs/game-references/controls/#controls)\n\nExample: `CONTROLS::DISABLE_CONTROL_ACTION(2, 19, true)` disables the switching UI from appearing both when using a keyboard and Xbox 360 controller. Needs to be executed each frame.\nControl group 1 and 0 gives the same results as 2. Same results for all players. DisableEditorRuntime Disables the editor runtime mode, changing game behavior to not track entity metadata.\nThis function supports SDK infrastructure and is not intended to be used directly from your code. -DisableFirstPersonCamThisFrame ```\nDisables first person camera for the current frame. \nFound in decompiled scripts: \nGRAPHICS::DRAW_DEBUG_TEXT_2D("Disabling First Person Cam", 0.5, 0.8, 0.0, 0, 0, 255, 255); \nCAM::_DE2EF5DA284CC8DF(); \n``` DisableHospitalRestart ```\nThe game by default has 5 hospital respawn points. Disabling them all will cause the player to respawn at the last position they were.\n``` DisableIdleCamera Disables the game's afk camera that starts panning around after 30 seconds of inactivity.\n\n**Parameters**\n- `state`: On/Off +DisableIndividualPlanePropeller ```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `vehicle`: The propeller plane\n- `propeller`: The propeller index to disable (starts at 0). DisableInterior ```\nExample: \nThis removes the interior from the strip club and when trying to walk inside the player just falls: \nINTERIOR::DISABLE_INTERIOR(118018, true); \n``` DisableMoonCycleOverride Removes any custom moon cycle overrides that have been configured with [ENABLE_MOON_CYCLE_OVERRIDE](#\\_0x2C328AF17210F009)\n\n```lua\nDisableMoonCycleOverride()\n``` DisableMultiplayerChat If true is passed, the player won't be able to open the multiplayer chat DisableNavmeshInArea Use this if you want to completely disable a large area of navmesh.\nFor smaller areas, use [`ADD_NAVMESH_BLOCKING_OBJECT`](#\\_0xFCD5C8E06E502F5A) instead.\n\n**Parameters**\n- `posMinX`: X Min Coordinate.\n- `posMinY`: Y Min Coordinate.\n- `posMinZ`: Z Min Coordinate.\n- `posMaxX`: X Max Coordinate.\n- `posMaxY`: Y Max Coordinate.\n- `posMaxZ`: Z Max Coordinate.\n- `bDisable`: Whether to disable the navmesh or not. +DisableOcclusionThisFrame This disables all occluders that cause the 'flickering' rendering under the map and inside buildings with no interiors, note that this may impact performance on lower end systems.\n\n```lua\n-- Example thread that has to run every frame\nCitizen.CreateThread(function()\n while true do\n DisableOcclusionThisFrame()\n Citizen.Wait(0)\n end\nend)\n``` +DisableOnFootFirstPersonViewThisUpdate Disables first person camera while on foot for the current tick. DisablePlayerFiring Inhibits the player from using any method of combat including melee and firearms.\\\nNOTE: Only disables the firing for one frame\n\n**Parameters**\n- `player`: The player for which to disable combat methods.\n- `toggle`: Unused, as this native will disable combat regardless of the value of this parameter. DisablePlayerVehicleRewards Disables vehicle rewards for the current frame.\n\n**Parameters**\n- `player`: The player to disable rewards DisablePoliceRestart ```\nDisables the spawn point at the police house on the specified index.\npoliceIndex: The police house index.\ntoggle: true to enable the spawn point, false to disable.\n- Nacorpio\n``` DisableRawKeyThisFrame Disables the specified `rawKeyIndex`, making it not trigger the regular `IS_RAW_KEY_*` natives.\n\nVirtual key codes can be found [here](https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes)\n\n**Parameters**\n- `rawKeyIndex`: Index of raw key from keyboard.\n\n**Returns** Returns bool value of down state.\n\n```lua\nlocal KEY_SPACE = 32\nDisableRawKeyThisFrame(KEY_SPACE)\n-- This will not get triggered this frame\nif IsRawKeyDown(KEY_SPACE) then\n print("unreachable :(")\nend\n-- this will get triggered\nif IsDisabledRawKeyDown(KEY_SPACE) then\n print("Spacebar is down")\nend\n``` DisableRockstarEditorCameraChanges This will disable the ability to make camera changes in R\\* Editor. DisableVehiclePassengerIdleCamera Disables the game's afk camera that starts panning around after 30 seconds of inactivity(While riding in a car as a passenger)\n\n**Parameters**\n- `state`: On/Off -DisableVehicleWeapon ```\nhow does this work? \n``` +DisableVehicleWeapon Disables or enables a specific weapon on a vehicle for a designated ped.\n\n**Parameters**\n- `disabled`: A boolean indicating whether to disable (`true`) or enable (`false`) the weapon.\n- `weaponHash`: The specific hash of the vehicle weapon (e.g., `GetHashKey("VEHICLE_WEAPON_TANK")`).\n- `vehicle`: The vehicle entity handle.\n- `owner`: The ped entity for whom the weapon is disabled. This acts as a ped-specific lock; the ped does not need to be inside the vehicle or in a specific seat when this native is called.\n\n```lua\n-- Disables the Rhino's Tank gun for the local player\nlocal ped = PlayerPedId()\nlocal vehicle = GetVehiclePedIsIn(ped, false)\nlocal weaponHash = GetHashKey("VEHICLE_WEAPON_TANK")\n\nif vehicle ~= 0 then\n DisableVehicleWeapon(true, weaponHash, vehicle, ped)\nend\n``` DisableVehicleWorldCollision Disables collision for this vehicle (maybe it also supports other entities, not sure).\nOnly world/building/fixed world objects will have their collisions disabled, props, peds, or any other entity still collides with the vehicle.\n\n[Example video](https://streamable.com/6n45d5)\n\nNot sure if there is a native (and if so, which one) that resets the collisions.\n\n**Parameters**\n- `vehicle`: the vehicle to disable world collisions for DisableWorldhorizonRendering Disables the game's world horizon lods rendering (see `farlods.#dd`).\nUsing the island hopper natives might also affect this state.\n\n**Parameters**\n- `state`: On/Off DisplayCash ```\n"DISPLAY_CASH(true);" makes the cash amount render on the screen when appropriate \n"DISPLAY_CASH(false);" disables cash amount rendering \n``` @@ -337,7 +352,7 @@ DisplayHud ```\nIf Hud should be displayed \n``` DisplayHudWhenDeadThisFrame Enables drawing some hud components, such as help labels, this frame, when the player is dead.\n\n```lua\nCitizen.CreateThread(function()\n while true do\n N_0x7669f9e39dc17063()\n Wait(0)\n end\nend)\n``` DisplayOnscreenKeyboard Displays a text input box.\n\n```cpp\nenum eKeyboardType\n{\n ONSCREEN_KEYBOARD_ENGLISH = 0,\n ONSCREEN_KEYBOARD_LOCALISED = 1,\n ONSCREEN_KEYBOARD_PASSWORD = 2,\n ONSCREEN_KEYBOARD_GAMERTAG = 3,\n ONSCREEN_KEYBOARD_EMAIL = 4,\n ONSCREEN_KEYBOARD_BASIC_ENGLISH = 5,\n ONSCREEN_KEYBOARD_FILENAME = 6\n};\n```\n\n**Parameters**\n- `keyboardType`: See the list above. Default is `0`.\n- `windowTitle`: Text label for the title of the box.\n- `description`: Has no use on PC.\n- `defaultText`: Default text that is written in the input field.\n- `maxInputLength`: Max number of characters that can be typed (2 - 256).\n\n```lua\nAddTextEntry("my_input_title", "Enter something cool:")\n\nDisplayOnscreenKeyboard(0, "my_input_title", "", "", "", "", "", 30) -- Show the text input box\n\nwhile UpdateOnscreenKeyboard() == 0 do Wait(0) end -- Wait for the user to stop editing\n\n-- This block of code is reached after the user is done editing\n\nlocal inputUpdate = UpdateOnscreenKeyboard()\n\nif inputUpdate == 1 then -- User hit OK in the text input box\n local result = GetOnscreenKeyboardResult()\n print("You wrote this in the input box:", result)\nelseif inputUpdate == 2 then\n print("You canceled the input!")\nelse -- -1 or 3\n print("An error has occurred")\nend\n``` DisplayOnscreenKeyboardWithLongerInitialString Displays the text input box with support for input with 500 characters.\n\n**Parameters**\n- `keyboardType`: See [`DISPLAY_ONSCREEN_KEYBOARD`](#\\_0x00DC833F2568DBF6)\n- `windowTitle`: Text label of the window title.\n- `description`: Unused on PC.\n- `defaultText`: Default text that is written in the input field.\n- `maxInputLength`: Value between 2 - 500. -DisplayPlayerNameTagsOnBlips Toggles whether or not name labels are shown on the expanded minimap next to player blips, like in GTA:O.\nDoesn't need to be called every frame.\nPreview: https://i.imgur.com/DfqKWfJ.png\nMake sure to call SET_BLIP_CATEGORY with index 7 for this to work on the desired blip.\n\n**Parameters**\n- `toggle`: the toggle boolean +DisplayPlayerNameTagsOnBlips Toggles whether or not name labels are shown on the expanded minimap next to player blips, like in GTA:O.\nDoesn't need to be called every frame.\nMake sure to call SET_BLIP_CATEGORY with index 7 for this to work on the desired blip.\n\n**Parameters**\n- `toggle`: the toggle boolean DisplayRadar ```\nIf Minimap / Radar should be displayed.\n``` DisplaySniperScopeThisFrame ```\nDisplays the crosshair for this frame. \n``` DisplaySystemSigninUi ```\nPurpose of the BOOL currently unknown. \nBoth, true and false, work \n``` @@ -348,6 +363,7 @@ DoesBoatSinkWhenWrecked \n\n**Parameters**\n- `vehicle`: The target vehicle.\n\n DoesCamExist Looks up a camera handle in the current camera pool and returns `true` if the handle is found, otherwise it returns `false`.\n\n**Parameters**\n- `cam`: The camera handle to look for.\n\n**Returns** A boolean value representing whether the camera exists or not. DoesCargobobHavePickUpRope ```\nReturns true only when the hook is active, will return false if the magnet is active \n``` DoesCargobobHavePickupMagnet ```\nReturns true only when the magnet is active, will return false if the hook is active \n``` +DoesColshapeExist > This native only works in FiveM for GTAV Enhanced.\n\nReturns whether a collision shape with the given ID exists.\n\n**Parameters**\n- `colShapeId`: The collision shape ID to check.\n\n**Returns** `true` if the collision shape exists, `false` otherwise. DoesContextExistForThisPed Checks if the context exists for the ped, searching through the voices in its PedVoiceGroup.\n\nThe final argument can be set to true to allow searching in backup PVGs\n\n**Returns** True of the PedVoiceGroup exists, false otherwise. DoesEntityExist Checks whether an entity exists in the game world.\n\n**Parameters**\n- `entity`: The entity to check if it exists.\n\n**Returns** Whether the entity exists or not.\n\n```lua\nlocal currentVehicle = GetVehiclePedIsIn(PlayerPedId(), false)\n\nif DoesEntityExist(currentVehicle) then\n DeleteEntity(currentVehicle)\nend\n``` DoesEntityHaveAnimDirector ```\nNativeDB Introduced: v2699\n``` @@ -360,6 +376,7 @@ DoesPickupOfTypeExistInArea Pickup hashes can be found [here](https://gist.githu DoesPlayerExist Returns whether or not the player exists\n\n**Returns** True if the player exists, false otherwise\n\n```lua\nlocal deferralMessages = { "Isn't this just magical!", "We can defer all day!", "You'll get in eventually", "You're totally not going to sit here forever", "The Fruit Tree is a lie" }\nAddEventHandler("playerConnecting", function(name, setKickReason, deferrals)\n local source = source\n deferrals.defer()\n\n Wait(0)\n\n\n local messageIndex = 0\n\n repeat\n Wait(2000)\n if messageIndex >= #deferralMessages then\n deferrals.done()\n else\n messageIndex = messageIndex + 1\n end\n deferrals.update(deferralMessages[messageIndex])\n until not DoesPlayerExist(source)\nend)\n``` DoesPlayerOwnSku > This native is deprecated and may be removed in a future version. Use [`DOES_PLAYER_OWN_SKU_EXT`](#\\_0xDEF0480B) instead.\n\nRequests whether or not the player owns the specified SKU.\n\n**Parameters**\n- `playerSrc`: The player handle\n- `skuId`: The ID of the SKU.\n\n**Returns** A boolean. DoesPlayerOwnSkuExt Requests whether or not the player owns the specified package.\n\n**Parameters**\n- `playerSrc`: The player handle\n- `skuId`: The package ID on Tebex.\n\n**Returns** A boolean. +DoesPlayerVehHaveRadio Checks if the vehicle the local player is currently in has a radio.\n\n**Returns** Returns `true` if the player's current vehicle has a radio. Returns `false` if it does not, or if the player is not in any vehicle. DoesRayfireMapObjectExist ```\nReturns true if a destructible object with this handle exists, false otherwise. \n``` DoesRopeBelongToThisScript Return if the rope was generated or not by the script where the native is called. DoesRopeExist For an example on how to use this native please refer to [ADD_ROPE](#\\_0xE832D760399EB220)\n\n**Parameters**\n- `ropeId`: The handle of the rope to check\n\n**Returns** Returns `true` if the rope exists, `false` otherwise. @@ -399,19 +416,20 @@ DrawDebugText ```\nNOTE: Debugging functions are not present in the retail versi DrawDebugText_2d ```\nNOTE: Debugging functions are not present in the retail version of the game. \n``` DrawGizmo Draws a gizmo. This function supports SDK infrastructure and is not intended to be used directly from your code.\n\nThis should be used from JavaScript or another language supporting mutable buffers like ArrayBuffer.\n\nMatrix layout is as follows:\n\n* Element \\[0], \\[1] and \\[2] should represent the right vector.\n* Element \\[4], \\[5] and \\[6] should represent the forward vector.\n* Element \\[8], \\[9] and \\[10] should represent the up vector.\n* Element \\[12], \\[13] and \\[14] should represent X, Y and Z translation coordinates.\n* All other elements should be \\[0, 0, 0, 1].\n\n**Parameters**\n- `matrixPtr`: A mutable pointer to a 64-byte buffer of floating-point values, representing an XMFLOAT4X4 in layout.\n- `id`: A unique identifier of what the gizmo is affecting.\n\n**Returns** Whether or not the matrix was modified. DrawGlowSphere Draw a glow sphere this frame. Up to 256 per single frame.\n\n**Parameters**\n- `posX`: Position X.\n- `posY`: Position Y.\n- `posZ`: Position Z.\n- `radius`: Sphere radius.\n- `colorR`: Red.\n- `colorG`: Green.\n- `colorB`: Blue.\n- `intensity`: Intensity.\n- `invert`: Invert rendering.\n- `marker`: Draw as a marker, otherwise as an overlay. +DrawHudOverFadeThisFrame Allows HUD to be drawn over screen fade every frame this function is called. DrawInteractiveSprite Similar to [\\_DRAW_SPRITE](#\\_0xE7FFAE5EBF23D890), but seems to be some kind of "interactive" sprite, at least used by render targets.\nThese seem to be the only dicts ever requested by this native:\n\n```\nprop_screen_biker_laptop\nProp_Screen_GR_Disruption\nProp_Screen_TaleOfUs\nprop_screen_nightclub\nProp_Screen_IE_Adhawk\nprop_screen_sm_free_trade_shipping\nprop_screen_hacker_truck\nMPDesktop\nProp_Screen_Nightclub\nAnd a few others\n```\n\n**Parameters**\n- `textureDict`: Name of texture dictionary to load texture from\n- `textureName`: Name of texture to load from texture dictionary\n- `screenX`: Screen X\n- `screenY`: Screen Y\n- `width`: Scale X\n- `height`: Scale Y\n- `heading`: Texture rotation in degrees (default = 0.0) positive is clockwise, measured in degrees\n- `red`: Color\n- `green`: Color\n- `blue`: Color\n- `alpha`: Opacity level DrawLight Draw the prepared light. DrawLine This native draws a line between two vectors in the game world. It is typically used for visualizing paths or connections between points. The color of the line is specified by the red, green, and blue parameters, with alpha determining its opacity. This native should be called every frame for continuous rendering.\n\n```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `x1`: The x-coordinate of the starting point of the line.\n- `y1`: The y-coordinate of the starting point of the line.\n- `z1`: The z-coordinate of the starting point of the line.\n- `x2`: The x-coordinate of the ending point of the line.\n- `y2`: The y-coordinate of the ending point of the line.\n- `z2`: The z-coordinate of the ending point of the line.\n- `red`: The red color component of the line (0 - 255).\n- `green`: The green color component of the line (0 - 255).\n- `blue`: The blue color component of the line (0 - 255).\n- `alpha`: The alpha value of the line (0 - 255). DrawLine_2d Like DRAW_RECT, but it's a line.\n\n**Parameters**\n- `x1`: First x.\n- `y1`: First y.\n- `x2`: Second x.\n- `y2`: Second y.\n- `width`: Width of line.\n- `r`: Red.\n- `g`: Green.\n- `b`: Blue.\n- `a`: Alpha. -DrawMarker Draws a marker with the specified appearance at the target location. This has to be called every frame, e.g. in a `Wait(0)` loop.\n\nThere's a [list of markers](https://docs.fivem.net/game-references/markers/) on the FiveM documentation site.\n\n**Parameters**\n- `type`: The marker type to draw.\n- `posX`: The X coordinate to draw the marker at.\n- `posY`: The Y coordinate to draw the marker at.\n- `posZ`: The Z coordinate to draw the marker at.\n- `dirX`: The X component of the direction vector for the marker, or 0.0 to use rotX/Y/Z.\n- `dirY`: The Y component of the direction vector for the marker, or 0.0 to use rotX/Y/Z.\n- `dirZ`: The Z component of the direction vector for the marker, or 0.0 to use rotX/Y/Z.\n- `rotX`: The X rotation for the marker. Only used if the direction vector is 0.0.\n- `rotY`: The Y rotation for the marker. Only used if the direction vector is 0.0.\n- `rotZ`: The Z rotation for the marker. Only used if the direction vector is 0.0.\n- `scaleX`: The scale for the marker on the X axis.\n- `scaleY`: The scale for the marker on the Y axis.\n- `scaleZ`: The scale for the marker on the Z axis.\n- `red`: The red component of the marker color, on a scale from 0-255.\n- `green`: The green component of the marker color, on a scale from 0-255.\n- `blue`: The blue component of the marker color, on a scale from 0-255.\n- `alpha`: The alpha component of the marker color, on a scale from 0-255.\n- `bobUpAndDown`: Whether or not the marker should slowly animate up/down.\n- `faceCamera`: Whether the marker should be a 'billboard', as in, should constantly face the camera.\n- `p19`: Typically set to `2`. Does not seem to matter directly.\n- `rotate`: Rotations only apply to the heading.\n- `textureDict`: A texture dictionary to draw the marker with, or NULL. Example: 'GolfPutting'\n- `textureName`: A texture name in `textureDict` to draw the marker with, or NULL. Example: 'PuttingMarker'\n- `drawOnEnts`: Whether or not the marker should draw on intersecting entities.\n\n```lua\nCreateThread(function()\n while true do\n -- draw every frame\n Wait(0)\n\n local pedCoords = GetEntityCoords(PlayerPedId())\n DrawMarker(2, pedCoords.x, pedCoords.y, pedCoords.z + 2, 0.0, 0.0, 0.0, 0.0, 180.0, 0.0, 2.0, 2.0, 2.0, 255, 128, 0, 50, false, true, 2, nil, nil, false)\n end\nend)\n``` +DrawMarker Draws a marker with the specified appearance at the target location. This has to be called every frame, e.g. in a `Wait(0)` loop.\n\nThere's a [list of markers](https://docs.fivem.net/docs/game-references/markers/) on the FiveM documentation site.\n\n**Parameters**\n- `type`: The marker type to draw.\n- `posX`: The X coordinate to draw the marker at.\n- `posY`: The Y coordinate to draw the marker at.\n- `posZ`: The Z coordinate to draw the marker at.\n- `dirX`: The X component of the direction vector for the marker, or 0.0 to use rotX/Y/Z.\n- `dirY`: The Y component of the direction vector for the marker, or 0.0 to use rotX/Y/Z.\n- `dirZ`: The Z component of the direction vector for the marker, or 0.0 to use rotX/Y/Z.\n- `rotX`: The X rotation for the marker. Only used if the direction vector is 0.0.\n- `rotY`: The Y rotation for the marker. Only used if the direction vector is 0.0.\n- `rotZ`: The Z rotation for the marker. Only used if the direction vector is 0.0.\n- `scaleX`: The scale for the marker on the X axis.\n- `scaleY`: The scale for the marker on the Y axis.\n- `scaleZ`: The scale for the marker on the Z axis.\n- `red`: The red component of the marker color, on a scale from 0-255.\n- `green`: The green component of the marker color, on a scale from 0-255.\n- `blue`: The blue component of the marker color, on a scale from 0-255.\n- `alpha`: The alpha component of the marker color, on a scale from 0-255.\n- `bobUpAndDown`: Whether or not the marker should slowly animate up/down.\n- `faceCamera`: Whether the marker should be a 'billboard', as in, should constantly face the camera.\n- `rotationOrder`: The order yaw, pitch and roll is applied. Usually `2`.\n- `rotate`: Rotations only apply to the heading.\n- `textureDict`: A texture dictionary to draw the marker with, or NULL. Example: 'GolfPutting'\n- `textureName`: A texture name in `textureDict` to draw the marker with, or NULL. Example: 'PuttingMarker'\n- `drawOnEnts`: Whether or not the marker should draw on intersecting entities.\n\n```lua\nCreateThread(function()\n while true do\n -- draw every frame\n Wait(0)\n\n local pedCoords = GetEntityCoords(PlayerPedId())\n DrawMarker(2, pedCoords.x, pedCoords.y, pedCoords.z + 2, 0.0, 0.0, 0.0, 0.0, 180.0, 0.0, 2.0, 2.0, 2.0, 255, 128, 0, 50, false, true, 2, nil, nil, false)\n end\nend)\n``` DrawMarker_2 ```\nNativeDB Added Parameter 26: BOOL p25\n``` DrawPoly ```\nx/y/z - Location of a vertex (in world coords), presumably. \n---------------- \nx1, y1, z1 : Coordinates for the first point \nx2, y2, z2 : Coordinates for the second point \nx3, y3, z3 : Coordinates for the third point \nr, g, b, alpha : Color with RGBA-Values \nKeep in mind that only one side of the drawn triangle is visible: It's the side, in which the vector-product of the vectors heads to: (b-a)x(c-a) Or (b-a)x(c-b). \nBut be aware: The function seems to work somehow differently. I have trouble having them drawn in rotated orientation. Try it yourself and if you somehow succeed, please edit this and post your solution. \nI recommend using a predefined function to call this. \n[VB.NET] \nPublic Sub DrawPoly(a As Vector3, b As Vector3, c As Vector3, col As Color) \n [Function].Call(Hash.DRAW_POLY, a.X, a.Y, a.Z, b.X, b.Y, b.Z, c.X, c.Y, c.Z, col.R, col.G, col.B, col.A) \nEnd Sub \n[C#] \npublic void DrawPoly(Vector3 a, Vector3 b, Vector3 c, Color col) \n{ \n Function.Call(Hash.DRAW_POLY, a.X, a.Y, a.Z, b.X, b.Y, b.Z, c.X, c.Y, c.Z, col.R, col.G, col.B, col.A); \n} \nBTW: Intersecting triangles are not supported: They overlap in the order they were called. \n``` DrawRect ```\nDraws a rectangle on the screen. \n-x: The relative X point of the center of the rectangle. (0.0-1.0, 0.0 is the left edge of the screen, 1.0 is the right edge of the screen) \n-y: The relative Y point of the center of the rectangle. (0.0-1.0, 0.0 is the top edge of the screen, 1.0 is the bottom edge of the screen) \n-width: The relative width of the rectangle. (0.0-1.0, 1.0 means the whole screen width) \n-height: The relative height of the rectangle. (0.0-1.0, 1.0 means the whole screen height) \n-R: Red part of the color. (0-255) \n-G: Green part of the color. (0-255) \n-B: Blue part of the color. (0-255) \n-A: Alpha part of the color. (0-255, 0 means totally transparent, 255 means totally opaque) \nThe total number of rectangles to be drawn in one frame is apparently limited to 399. \n```\n\n```\nNativeDB Added Parameter 9: BOOL p8\n``` DrawRectRotated DRAW_RECT, but with a rotation. Seems to be broken. DrawScaleformMovieFullscreen ```\nunk is not used so no need \n``` DrawShowroom ```\nIt's called after 0xD3A10FC7FD8D98CD and 0xF1CEA8A4198D8E9A \np0 was always "CELEBRATION_WINNER" \n``` -DrawSphere Draws a 3D sphere, typically seen in the GTA:O freemode event "Penned In".\n\nExample [image](https://imgur.com/nCbtS4H):\n\n```lua\nDrawSphere(35.45, 172.66, 126.22, 1.0, 0, 0, 255, 0.2)\n```\n\n**Parameters**\n- `x`: X coordinate of the sphere\n- `y`: Y coordinate of the sphere\n- `z`: Z coordinate of the sphere\n- `radius`: Size of the sphere, `1.0` = 1 meter\n- `r`: Color red `0`-`255`\n- `g`: Color green `0`-`255`\n- `b`: Color blue `0`-`255`\n- `opacity`: Opacity from `0.0`-`1.0` -DrawSpotLight ```\nParameters: \n* pos - coordinate where the spotlight is located \n* dir - the direction vector the spotlight should aim at from its current position \n* r,g,b - color of the spotlight \n* distance - the maximum distance the light can reach \n* brightness - the brightness of the light \n* roundness - "smoothness" of the circle edge \n* radius - the radius size of the spotlight \n* falloff - the falloff size of the light's edge (example: www.i.imgur.com/DemAWeO.jpg) \nExample in C# (spotlight aims at the closest vehicle): \nVector3 myPos = Game.Player.Character.Position; \nVehicle nearest = World.GetClosestVehicle(myPos , 1000f); \nVector3 destinationCoords = nearest.Position; \nVector3 dirVector = destinationCoords - myPos; \ndirVector.Normalize(); \nFunction.Call(Hash.DRAW_SPOT_LIGHT, pos.X, pos.Y, pos.Z, dirVector.X, dirVector.Y, dirVector.Z, 255, 255, 255, 100.0f, 1f, 0.0f, 13.0f, 1f); \n``` +DrawSphere Draws a 3D sphere, typically seen in the GTA:O freemode event "Penned In".\n\nExample:\n![](https://i.imgur.com/nCbtS4H.png)\n\n```lua\nDrawSphere(35.45, 172.66, 126.22, 1.0, 0, 0, 255, 0.2)\n```\n\n**Parameters**\n- `x`: X coordinate of the sphere\n- `y`: Y coordinate of the sphere\n- `z`: Z coordinate of the sphere\n- `radius`: Size of the sphere, `1.0` = 1 meter\n- `r`: Color red `0`-`255`\n- `g`: Color green `0`-`255`\n- `b`: Color blue `0`-`255`\n- `opacity`: Opacity from `0.0`-`1.0` +DrawSpotLight ```\nParameters: \n* pos - coordinate where the spotlight is located \n* dir - the direction vector the spotlight should aim at from its current position \n* r,g,b - color of the spotlight \n* distance - the maximum distance the light can reach \n* brightness - the brightness of the light \n* roundness - "smoothness" of the circle edge \n* radius - the radius size of the spotlight \n* falloff - the falloff size of the light's edge\nExample in C# (spotlight aims at the closest vehicle): \nVector3 myPos = Game.Player.Character.Position; \nVehicle nearest = World.GetClosestVehicle(myPos , 1000f); \nVector3 destinationCoords = nearest.Position; \nVector3 dirVector = destinationCoords - myPos; \ndirVector.Normalize(); \nFunction.Call(Hash.DRAW_SPOT_LIGHT, pos.X, pos.Y, pos.Z, dirVector.X, dirVector.Y, dirVector.Z, 255, 255, 255, 100.0f, 1f, 0.0f, 13.0f, 1f); \n``` DrawSprite ```\nDraws a 2D sprite on the screen. \nParameters: \ntextureDict - Name of texture dictionary to load texture from (e.g. "CommonMenu", "MPWeaponsCommon", etc.) \ntextureName - Name of texture to load from texture dictionary (e.g. "last_team_standing_icon", "tennis_icon", etc.) \nscreenX/Y - Screen offset (0.5 = center) \nscaleX/Y - Texture scaling. Negative values can be used to flip the texture on that axis. (0.5 = half) \nheading - Texture rotation in degrees (default = 0.0) positive is clockwise, measured in degrees \nred,green,blue - Sprite color (default = 255/255/255) \nalpha - opacity level \n```\n\n```\nNativeDB Added Parameter 12: BOOL p11\n``` DrawSpritePoly_2 Used for drawling Deadline trailing lights, see deadline.ytd\n\nEach vertex has its own colour that is blended/illuminated on the texture. Additionally, the R, G, and B components are floats that are int-casted internally.\n\nFor UVW mapping (u,v,w parameters), reference your favourite internet resource for more details. DrawSpriteUv Similar to DRAW_SPRITE, but allows to specify the texture coordinates used to draw the sprite.\nu1, v1 - texture coordinates for the top-left corner\nu2, v2 - texture coordinates for the bottom-right corner\n\n```\nNativeDB Introduced: v1868\n``` @@ -421,12 +439,13 @@ EnableAircraftObstacleAvoidance Will disable a plane or a helicopter's need to s EnableAlienBloodVfx Creates a motion-blur sort of effect, this native does not seem to work, however by using the [`ANIMPOSTFX_PLAY`](#\\_0x2206BF9A37B7F724) native with `"DrugsMichaelAliensFight"` as the effect parameter, you should be able to get the effect.\n\nThis native does not seem to work, however by using the [ANIMPOSTFX_PLAY](#\\_0x2206BF9A37B7F724) native with "DrugsMichaelAliensFight" as the effect parameter, you should be able to get the effect. EnableAllControlActions ```cpp\nenum ePadType {\n PLAYER_CONTROL = 0,\n CAMERA_CONTROL = 1,\n FRONTEND_CONTRO = 2\n};\n```\n\n**Parameters**\n- `padIndex`: The control system instance to use. EnableClownBloodVfx If true, this native will create purple explosions upon projectile impact, add comic-like PTFX when firing a weapon, create a sound on bullet impact and have its own "blood effect".\n\nIf the PTFX asset "scr_rcbarry2" is not requested using ([`RequestNamedPtfxAsset`](#\\_0xD821490579791273)) then this native **will not work as intended**.\n\nExcerpt from fm_content_drug_lab_work.c:\n\n```\nSTREAMING::REQUEST_NAMED_PTFX_ASSET("scr_rcbarry2");\nif (STREAMING::HAS_NAMED_PTFX_ASSET_LOADED("scr_rcbarry2"))\n{\n GRAPHICS::ENABLE_CLOWN_BLOOD_VFX(true);\n AUDIO::START_AUDIO_SCENE("DLC_CM2022_DRUG_TRIP_SPRINKLERS_SCENE");\n func_720(26);\n}\n```\n\n**Parameters**\n- `toggle`: Whether to toggle the clown VFX on or off.\n\n```lua\nRequestNamedPtfxAsset("scr_rcbarry2") -- Request the PTFX\nwhile not HasNamedPtfxAssetLoaded("scr_rcbarry2") do\n Citizen.Wait(0)\nend\nEnableClownBloodVfx(true) -- Enable the clown PTFX\n``` -EnableControlAction ```\ncontrol values and meaning: github.com/crosire/scripthookvdotnet/blob/dev_v3/source/scripting/Control.cs \nand \nhttps://docs.fivem.net/game-references/controls/\n0, 1 and 2 used in the scripts. \nControl values from the decompiled scripts: \n0,1,2,3,4,5,6,8,9,10,11,14,15,16,17,19,21,22,24,25,26,30,31,32,33,34,35,36, \n37,44,46,47,59,60,65,68,69,70,71,72,73,74,75,76,79,80,81,82,86,95,98,99,100 \n,101,114,140,141,143,172,173,174,175,176,177,178,179,180,181,187,188,189,19 \n0,195,196,197,198,199,201,202,203,204,205,206,207,208,209,210,217,218,219,2 \n20,221,225,228,229,230,231,234,235,236,237,238,239,240,241,242,245,246,257, \n261,262,263,264,286,287,288,289,337,338,339,340,341,342,343 \nINPUTGROUP_MOVE \nINPUTGROUP_LOOK \nINPUTGROUP_WHEEL \nINPUTGROUP_CELLPHONE_NAVIGATE \nINPUTGROUP_CELLPHONE_NAVIGATE_UD \nINPUTGROUP_CELLPHONE_NAVIGATE_LR \nINPUTGROUP_FRONTEND_DPAD_ALL \nINPUTGROUP_FRONTEND_DPAD_UD \nINPUTGROUP_FRONTEND_DPAD_LR \nINPUTGROUP_FRONTEND_LSTICK_ALL \nINPUTGROUP_FRONTEND_RSTICK_ALL \nINPUTGROUP_FRONTEND_GENERIC_UD \nINPUTGROUP_FRONTEND_GENERIC_LR \nINPUTGROUP_FRONTEND_GENERIC_ALL \nINPUTGROUP_FRONTEND_BUMPERS \nINPUTGROUP_FRONTEND_TRIGGERS \nINPUTGROUP_FRONTEND_STICKS \nINPUTGROUP_SCRIPT_DPAD_ALL \nINPUTGROUP_SCRIPT_DPAD_UD \nINPUTGROUP_SCRIPT_DPAD_LR \nINPUTGROUP_SCRIPT_LSTICK_ALL \nINPUTGROUP_SCRIPT_RSTICK_ALL \nINPUTGROUP_SCRIPT_BUMPERS \nINPUTGROUP_SCRIPT_TRIGGERS \nINPUTGROUP_WEAPON_WHEEL_CYCLE \nINPUTGROUP_FLY \nINPUTGROUP_SUB \nINPUTGROUP_VEH_MOVE_ALL \nINPUTGROUP_CURSOR \nINPUTGROUP_CURSOR_SCROLL \nINPUTGROUP_SNIPER_ZOOM_SECONDARY \nINPUTGROUP_VEH_HYDRAULICS_CONTROL \nTook those in IDA Pro.Not sure in which order they go \n``` +EnableControlAction ```\ncontrol values and meaning: https://github.com/scripthookvdotnet/scripthookvdotnet/blob/47f8bb02a50e27d4bb982f43a78091feac59b21c/source/scripting_v3/GTA/Control.cs\nand \nhttps://docs.fivem.net/docs/game-references/controls/\n0, 1 and 2 used in the scripts. \nControl values from the decompiled scripts: \n0,1,2,3,4,5,6,8,9,10,11,14,15,16,17,19,21,22,24,25,26,30,31,32,33,34,35,36, \n37,44,46,47,59,60,65,68,69,70,71,72,73,74,75,76,79,80,81,82,86,95,98,99,100 \n,101,114,140,141,143,172,173,174,175,176,177,178,179,180,181,187,188,189,19 \n0,195,196,197,198,199,201,202,203,204,205,206,207,208,209,210,217,218,219,2 \n20,221,225,228,229,230,231,234,235,236,237,238,239,240,241,242,245,246,257, \n261,262,263,264,286,287,288,289,337,338,339,340,341,342,343 \nINPUTGROUP_MOVE \nINPUTGROUP_LOOK \nINPUTGROUP_WHEEL \nINPUTGROUP_CELLPHONE_NAVIGATE \nINPUTGROUP_CELLPHONE_NAVIGATE_UD \nINPUTGROUP_CELLPHONE_NAVIGATE_LR \nINPUTGROUP_FRONTEND_DPAD_ALL \nINPUTGROUP_FRONTEND_DPAD_UD \nINPUTGROUP_FRONTEND_DPAD_LR \nINPUTGROUP_FRONTEND_LSTICK_ALL \nINPUTGROUP_FRONTEND_RSTICK_ALL \nINPUTGROUP_FRONTEND_GENERIC_UD \nINPUTGROUP_FRONTEND_GENERIC_LR \nINPUTGROUP_FRONTEND_GENERIC_ALL \nINPUTGROUP_FRONTEND_BUMPERS \nINPUTGROUP_FRONTEND_TRIGGERS \nINPUTGROUP_FRONTEND_STICKS \nINPUTGROUP_SCRIPT_DPAD_ALL \nINPUTGROUP_SCRIPT_DPAD_UD \nINPUTGROUP_SCRIPT_DPAD_LR \nINPUTGROUP_SCRIPT_LSTICK_ALL \nINPUTGROUP_SCRIPT_RSTICK_ALL \nINPUTGROUP_SCRIPT_BUMPERS \nINPUTGROUP_SCRIPT_TRIGGERS \nINPUTGROUP_WEAPON_WHEEL_CYCLE \nINPUTGROUP_FLY \nINPUTGROUP_SUB \nINPUTGROUP_VEH_MOVE_ALL \nINPUTGROUP_CURSOR \nINPUTGROUP_CURSOR_SCROLL \nINPUTGROUP_SNIPER_ZOOM_SECONDARY \nINPUTGROUP_VEH_HYDRAULICS_CONTROL \nTook those in IDA Pro.Not sure in which order they go \n``` EnableCrosshairThisFrame ```\nShows the crosshair even if it wouldn't show normally. Only works for one frame, so make sure to call it repeatedly. \n``` EnableDispatchService Enables or disables the specified 'dispatch service' type. 'Dispatch services' are used for spawning AI response peds/vehicles for events such as a fire in the street (type 3 - DT_FireDepartment), or gunfire in a gang area (type 11 - DT_Gangs).\n\nList of dispatch services:\n\n```cpp\nenum eDispatchType\n{\n DT_Invalid = 0,\n DT_PoliceAutomobile = 1,\n DT_PoliceHelicopter = 2,\n DT_FireDepartment = 3,\n DT_SwatAutomobile = 4,\n DT_AmbulanceDepartment = 5,\n DT_PoliceRiders = 6,\n DT_PoliceVehicleRequest = 7,\n DT_PoliceRoadBlock = 8,\n DT_PoliceAutomobileWaitPulledOver = 9,\n DT_PoliceAutomobileWaitCruising = 10,\n DT_Gangs = 11,\n DT_SwatHelicopter = 13,\n DT_PoliceBoat = 14,\n DT_ArmyVehicle = 15,\n DT_BikerBackup = 15\n};\n```\n\nNote that 'dispatch service' has nothing to do with the police scanner (audio), to toggle that, use [SET_AUDIO_FLAG](#\\_0xB9EFD5C25018725A) with `'PoliceScannerDisabled'`.\n\n**Parameters**\n- `dispatchService`: The ID of the dispatch service to toggle.\n- `toggle`: True to enable the dispatch service, false to disable the dispatch service. EnableEditorRuntime Enables the editor runtime mode, changing game behavior to track entity metadata.\nThis function supports SDK infrastructure and is not intended to be used directly from your code. EnableEntityUnk ```\nENABLE_*\n``` EnableExteriorCullModelThisFrame ```\nThis is the native that is used to hide the exterior of GTA Online apartment buildings when you are inside an apartment.\n``` +EnableIndividualPlanePropeller Enables individual propeller on a propeller plane. This native is the inverse of [`DISABLE_INDIVIDUAL_PLANE_PROPELLER`](#\\_0x500873A45724C863).\n\n```\nNativeDB Introduced: v3407\n```\n\n**Parameters**\n- `plane`: The propeller plane.\n- `propeller`: The propeller index to enable (starts at 0).\n\n```lua\nCreateThread(function()\n local vehicle = GetVehiclePedIsIn(PlayerPedId(), false) -- The plane used in this example is the cuban800\n\n DisableIndividualPlanePropeller(vehicle, 0)\n DisableIndividualPlanePropeller(vehicle, 1)\n -- We are disabling both propellers so we can start a specific one (since both are automatically started when entering the plane)\n Wait(5000) -- We are waiting 5 seconds\n EnableIndividualPlanePropeller(vehicle, 1) -- Starting the second propeller (since the index starts at 0)\nend)\n``` EnableLaserSightRendering ```\nEnables laser sight on any weapon. \nIt doesn't work. Neither on tick nor OnKeyDown \n``` EnableMoonCycleOverride Enable a custom moon cycle, allowing control of which lunar phase the moon is in.\n\nValid values are from `0.0` to `1.0`, with `0.5` representing a full moon.\n\n| Value | Lunar Phase |\n| :---: | :-------------: |\n| `0.1` | Waxing Crescent |\n| `0.2` | First Quarter |\n| `0.3` | Waxing Gibbous |\n| `0.5` | Full Moon |\n| `0.7` | Waning Gibbous |\n| `0.8` | Third Quarter |\n| `0.9` | Waning Crescent |\n\nThe moon phase can be disabled with [DISABLE_MOON_CYCLE_OVERRIDE](#\\_0x2BF72AD5B41AA739)\n\n**Parameters**\n- `phase`: A value indicating the moon cycle.\n\n```lua\nEnableMoonCycleOverride(0.5)\n``` EnableSpecialAbility ```\nNativeDB Added Parameter 3: Any p2\n``` @@ -447,18 +466,21 @@ EndTextCommandLineCount ```\nEND_TEXT_COMMAND_*\nDetermines how many lines the t EndTextCommandOverrideButtonText \n\n**Parameters**\n- `buttonIndex`: Index of the instructional button EndTextCommandPrint ```\nDraws the subtitle at middle center of the screen. \nint duration = time in milliseconds to show text on screen before disappearing \ndrawImmediately = If true, the text will be drawn immediately, if false, the text will be drawn after the previous subtitle has finished \nUsed to be known as _DRAW_SUBTITLE_TIMED \n``` EndTextCommandSetBlipName Finalizes a text command started with [`BEGIN_TEXT_COMMAND_SET_BLIP_NAME`](#\\_0xF9113A30DE5C6670), setting the name\nof the specified blip.\n\n**Parameters**\n- `blip`: The blip to change the name for.\n\n```lua\n-- creates a blip called 'Food for me!' at 0.0, 0.0, 0.0\nAddTextEntry('MYBLIP', 'Food for ~a~!')\n\nlocal blip = AddBlipForCoords(0.0, 0.0, 0.0)\nBeginTextCommandSetBlipName('MYBLIP')\nAddTextComponentSubstringPlayerName('me')\nEndTextCommandSetBlipName(blip)\n``` -EndTextCommandThefeedPostAward Shows an "award" notification above the minimap, lua example result:\n\n![](https://i.imgur.com/e2DNaKX.png)\n\nOld description:\n\n```\nExample: \nUI::_SET_NOTIFICATION_TEXT_ENTRY("HUNT"); \nUI::_0xAA295B6F28BD587D("Hunting", "Hunting_Gold_128", 0, 109, "HUD_MED_UNLKED"); \n```\n\n**Parameters**\n- `textureDict`: The texture dictionary name for the icon on the left.\n- `textureName`: The texture name for the icon on the left.\n- `rpBonus`: The gained "RP" amount that will be displayed on the right side of the notification.\n- `colorOverlay`: Hudcolor overlay that gets applied on top of the notification, conflicts with text/image visibility in most cases if set to something other than 0.\n- `titleLabel`: The label that will be displayed at the top of the notification (title).\n\n**Returns** The notification handle.\n\n```lua\nCitizen.CreateThread(function()\n -- Get the ped headshot image.\n local handle = RegisterPedheadshot(PlayerPedId())\n while not IsPedheadshotReady(handle) or not IsPedheadshotValid(handle) do\n Citizen.Wait(0)\n end\n local txd = GetPedheadshotTxdString(handle)\n\n -- Add the notification text, the more text you add the smaller the font\n -- size will become (text is forced on 1 line only), so keep this short!\n BeginTextCommandThefeedPost("STRING")\n AddTextComponentSubstringPlayerName("You won the match!")\n\n -- Draw the notification\n EndTextCommandThefeedPostAward(txd, txd, 200, 0, "FM_GEN_UNLOCK")\n \n -- Cleanup after yourself!\n UnregisterPedheadshot(handle)\nend)\n``` +EndTextCommandThefeedPostAward Shows an "award" notification above the minimap, lua example result:\n\n![](https://i.imgur.com/9U2x4ek.png)\n\nOld description:\n\n```\nExample: \nUI::_SET_NOTIFICATION_TEXT_ENTRY("HUNT"); \nUI::_0xAA295B6F28BD587D("Hunting", "Hunting_Gold_128", 0, 109, "HUD_MED_UNLKED"); \n```\n\n**Parameters**\n- `textureDict`: The texture dictionary name for the icon on the left.\n- `textureName`: The texture name for the icon on the left.\n- `rpBonus`: The gained "RP" amount that will be displayed on the right side of the notification.\n- `colorOverlay`: Hudcolor overlay that gets applied on top of the notification, conflicts with text/image visibility in most cases if set to something other than 0.\n- `titleLabel`: The label that will be displayed at the top of the notification (title).\n\n**Returns** The notification handle.\n\n```lua\nCitizen.CreateThread(function()\n -- Get the ped headshot image.\n local handle = RegisterPedheadshot(PlayerPedId())\n while not IsPedheadshotReady(handle) or not IsPedheadshotValid(handle) do\n Citizen.Wait(0)\n end\n local txd = GetPedheadshotTxdString(handle)\n\n -- Add the notification text, the more text you add the smaller the font\n -- size will become (text is forced on 1 line only), so keep this short!\n BeginTextCommandThefeedPost("STRING")\n AddTextComponentSubstringPlayerName("You won the match!")\n\n -- Draw the notification\n EndTextCommandThefeedPostAward(txd, txd, 200, 0, "FM_GEN_UNLOCK")\n \n -- Cleanup after yourself!\n UnregisterPedheadshot(handle)\nend)\n``` EndTextCommandThefeedPostCrewtag ```\nThis function and the one below it are for after you receive an invite, not sending it. \np0 = 1 or 0 \nnothin doin. \nint invite(Player player) \n { \nint iVar2, iVar3; \nnetworkHandleMgr handle; \nNETWORK_HANDLE_FROM_PLAYER(player, &handle.netHandle, 13); \nnetworkClanMgr clan; \nchar *playerName = GET_PLAYER_NAME(player); \n_SET_NOTIFICATION_TEXT_ENTRY("STRING"); \n_SET_NOTIFACTION_COLOR_NEXT(0); \nADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(playerName); \nif (NETWORK_CLAN_PLAYER_GET_DESC(&clan, 35, &handle.netHandle)) \n{ \n iVar2 = 0; \n if (ARE_STRINGS_EQUAL(clan.unk22, "Leader") && clan.unk30 == 0) \n { \niVar2 = 1; \n } \n if (clan.unk21 > 0) \n { \niVar3 = 0; \n } \n else \n { \niVar3 = 1; \n } \n BOOL unused = _0x54E79E9C(&clan.clanHandle, 35); \n return _DRAW_NOTIFICATION_APARTMENT_INVITE(iVar3, 0 /*unused*/, &clan.unk17, clan.unk30, iVar2, 0, clan.clanHandle, 0, 0, 0); \n} \n } \n``` EndTextCommandThefeedPostCrewtagWithGameName ```\np0 = 1 or 0 \ncrashes my game... \nthis is for sending invites to network players - jobs/apartment/ect... \nreturn notification handle \nint invite(Player player) \n { \nnetworkHandleMgr netHandle; \nnetworkClanMgr clan; \nchar *playerName = GET_PLAYER_NAME(player); \n_SET_NOTIFICATION_TEXT_ENTRY("STRING"); \n_SET_NOTIFACTION_COLOR_NEXT(1); \nADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(playerName); \nNETWORK_HANDLE_FROM_PLAYER(player, &netHandle.netHandle, 13); \nif (NETWORK_CLAN_PLAYER_IS_ACTIVE(&netHandle.netHandle)) \n{ \n NETWORK_CLAN_PLAYER_GET_DESC(&clan.clanHandle, 35, &netHandle.netHandle); \n _DRAW_NOTIFICATION_CLAN_INVITE(0, _0x54E79E9C(&clan.clanHandle, 35), &clan.unk17, clan.isLeader, 0, 0, clan.clanHandle, playerName, 0, 0, 0); \n} \n } \n``` -EndTextCommandThefeedPostMessagetext Sets some extra options for a notification. It adds an image (or icon type) and sets a notification title (sender) and subtitle (subject).\n\nTexture dictionary and texture name parameters are usually the same exact value.\n\nExample result:\n\n![](https://i.imgur.com/LviutDl.png)\n\nOld description with list of possible icons and texture names:\n\n```\nList of picNames: pastebin.com/XdpJVbHz \nflash is a bool for fading in. \niconTypes: \n1 : Chat Box \n2 : Email \n3 : Add Friend Request \n4 : Nothing \n5 : Nothing \n6 : Nothing \n7 : Right Jumping Arrow \n8 : RP Icon \n9 : $ Icon \n"sender" is the very top header. This can be any old string. \n"subject" is the header under the sender. \n```\n\n**Parameters**\n- `textureDict`: The texture dictionary for the icon.\n- `textureName`: The texture name for the icon.\n- `flash`: Flash, doesn't seem to work no matter what.\n- `iconType`: The icon type, see the list in the description below.\n- `sender`: The notification title.\n- `subject`: The notification subtitle.\n\n**Returns** The notification handle.\n\n```lua\nCitizen.CreateThread(function()\n -- Get the ped headshot image.\n local handle = RegisterPedheadshot(PlayerPedId())\n while not IsPedheadshotReady(handle) or not IsPedheadshotValid(handle) do\n Citizen.Wait(0)\n end\n local txd = GetPedheadshotTxdString(handle)\n\n -- Add the notification text\n BeginTextCommandThefeedPost("STRING")\n AddTextComponentSubstringPlayerName("This is the private message :o")\n\n -- Set the notification icon, title and subtitle.\n local title = GetPlayerName(PlayerId())\n local subtitle = "Private Message"\n local iconType = 0\n local flash = false -- Flash doesn't seem to work no matter what.\n EndTextCommandThefeedPostMessagetext(txd, txd, flash, iconType, title, subtitle)\n\n -- Draw the notification\n local showInBrief = true\n local blink = false -- blink doesn't work when using icon notifications.\n EndTextCommandThefeedPostTicker(blink, showInBrief)\n \n -- Cleanup after yourself!\n UnregisterPedheadshot(handle)\nend)\n``` +EndTextCommandThefeedPostMessagetext Sets some extra options for a notification. It adds an image (or icon type) and sets a notification title (sender) and subtitle (subject).\n\nTexture dictionary and texture name parameters are usually the same exact value.\n\nExample result:\n\n![](https://i.imgur.com/c2P5KBn.png)\n\nOld description with list of possible icons and texture names:\n\n```\nList of picNames: pastebin.com/XdpJVbHz \nflash is a bool for fading in. \niconTypes: \n1 : Chat Box \n2 : Email \n3 : Add Friend Request \n4 : Nothing \n5 : Nothing \n6 : Nothing \n7 : Right Jumping Arrow \n8 : RP Icon \n9 : $ Icon \n"sender" is the very top header. This can be any old string. \n"subject" is the header under the sender. \n```\n\n**Parameters**\n- `textureDict`: The texture dictionary for the icon.\n- `textureName`: The texture name for the icon.\n- `flash`: Flash, doesn't seem to work no matter what.\n- `iconType`: The icon type, see the list in the description below.\n- `sender`: The notification title.\n- `subject`: The notification subtitle.\n\n**Returns** The notification handle.\n\n```lua\nCitizen.CreateThread(function()\n -- Get the ped headshot image.\n local handle = RegisterPedheadshot(PlayerPedId())\n while not IsPedheadshotReady(handle) or not IsPedheadshotValid(handle) do\n Citizen.Wait(0)\n end\n local txd = GetPedheadshotTxdString(handle)\n\n -- Add the notification text\n BeginTextCommandThefeedPost("STRING")\n AddTextComponentSubstringPlayerName("This is the private message :o")\n\n -- Set the notification icon, title and subtitle.\n local title = GetPlayerName(PlayerId())\n local subtitle = "Private Message"\n local iconType = 0\n local flash = false -- Flash doesn't seem to work no matter what.\n EndTextCommandThefeedPostMessagetext(txd, txd, flash, iconType, title, subtitle)\n\n -- Draw the notification\n local showInBrief = true\n local blink = false -- blink doesn't work when using icon notifications.\n EndTextCommandThefeedPostTicker(blink, showInBrief)\n \n -- Cleanup after yourself!\n UnregisterPedheadshot(handle)\nend)\n``` EndTextCommandThefeedPostMessagetextGxtEntry This function can show pictures of every texture that can be requested by REQUEST_STREAMED_TEXTURE_DICT.\nNeeds more research.\nOnly one type of usage in the scripts:\nHUD::\\_C6F580E4C94926AC("CHAR_ACTING_UP", "CHAR_ACTING_UP", 0, 0, "DI_FEED_CHAR", a\\_0); -EndTextCommandThefeedPostMessagetextTu Example, only occurrence in the scripts:\n\n```\nv_8 = UI::END_TEXT_COMMAND_THEFEED_POST_MESSAGETEXT_TU("CHAR_SOCIAL_CLUB", "CHAR_SOCIAL_CLUB", 0, 0, &v_9, "", a_5);\n```\n\nExample result:\n![](https://i.imgur.com/YrN4Bcm.png)\n\n**Parameters**\n- `iconType`: The icon type, you can find those here: [`END_TEXT_COMMAND_THEFEED_POST_MESSAGETEXT`](#\\_0x1CCD9A37359072CF)\n- `durationMultiplier`: 1.0 is normal, 2.0 is twice as long, and 0.5 is half its normal display time. +EndTextCommandThefeedPostMessagetextTu Example, only occurrence in the scripts:\n\n```\nv_8 = UI::END_TEXT_COMMAND_THEFEED_POST_MESSAGETEXT_TU("CHAR_SOCIAL_CLUB", "CHAR_SOCIAL_CLUB", 0, 0, &v_9, "", a_5);\n```\n\nExample result:\n\n![](https://i.imgur.com/Qrf486G.png)\n\n**Parameters**\n- `iconType`: The icon type, you can find those here: [`END_TEXT_COMMAND_THEFEED_POST_MESSAGETEXT`](#\\_0x1CCD9A37359072CF)\n- `durationMultiplier`: 1.0 is normal, 2.0 is twice as long, and 0.5 is half its normal display time. EndTextCommandThefeedPostMessagetextWithCrewTag ```\nList of picNames pastebin.com/XdpJVbHz \nflash is a bool for fading in. \niconTypes: \n1 : Chat Box \n2 : Email \n3 : Add Friend Request \n4 : Nothing \n5 : Nothing \n6 : Nothing \n7 : Right Jumping Arrow \n8 : RP Icon \n9 : $ Icon \n"sender" is the very top header. This can be any old string. \n"subject" is the header under the sender. \n"duration" is a multiplier, so 1.0 is normal, 2.0 is twice as long (very slow), and 0.5 is half as long. \n"clanTag" shows a crew tag in the "sender" header, after the text. You need to use 3 underscores as padding. Maximum length of this field seems to be 7. (e.g. "MK" becomes "___MK", "ACE" becomes "___ACE", etc.) \n``` EndTextCommandThefeedPostMessagetextWithCrewTagAndAdditionalIcon ```\nList of picNames: pastebin.com/XdpJVbHz \nflash is a bool for fading in. \niconTypes: \n1 : Chat Box \n2 : Email \n3 : Add Friend Request \n4 : Nothing \n5 : Nothing \n6 : Nothing \n7 : Right Jumping Arrow \n8 : RP Icon \n9 : $ Icon \n"sender" is the very top header. This can be any old string. \n"subject" is the header under the sender. \n"duration" is a multiplier, so 1.0 is normal, 2.0 is twice as long (very slow), and 0.5 is half as long. \n"clanTag" shows a crew tag in the "sender" header, after the text. You need to use 3 underscores as padding. Maximum length of this field seems to be 7. (e.g. "MK" becomes "___MK", "ACE" becomes "___ACE", etc.) \niconType2 is a mirror of iconType. It shows in the "subject" line, right under the original iconType. \nint IconNotification(char *text, char *text2, char *Subject) \n{ \n _SET_NOTIFICATION_TEXT_ENTRY("STRING"); \n ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(text); \n _SET_NOTIFICATION_MESSAGE_CLAN_TAG_2("CHAR_SOCIAL_CLUB", "CHAR_SOCIAL_CLUB", 1, 7, text2, Subject, 1.0f, "__EXAMPLE", 7); \n return _DRAW_NOTIFICATION(1, 1); \n} \n``` +EndTextCommandThefeedPostMpticker Exactly the same as [`END_TEXT_COMMAND_THEFEED_POST_TICKER`](#\\_0x2ED7843F8F801023).\n\n**Parameters**\n- `isImportant`: If true, the notification will flash.\n- `showInBrief`: If true, the message will be shown in Pause Menu > Info > Notifications.\n\n**Returns** The notification handle. EndTextCommandThefeedPostReplayIcon ```\nreturns a notification handle, prints out a notification like below: \ntype range: 0 \nif you set type to 1, image goes from 0 - 39 - Xbox you can add text to \nexample: \nUI::_0xD202B92CBF1D816F(1, 20, "Who you trynna get crazy with, ese? Don't you know I'm LOCO?!"); \n``` -EndTextCommandThefeedPostReplayInput ```\nreturns a notification handle, prints out a notification like below:\ntype range: 0 - 2\nif you set type to 1, button accepts "~INPUT_SOMETHING~"\nexample:\nHUD::_0xDD6CB2CCE7C2735C(1, "~INPUT_TALK~", "Who you trynna get crazy with, ese? Don't you know I'm LOCO?!");\n- imgur.com/UPy0Ial\nExamples from the scripts:\nl_D1[1/*1*/]=HUD::_DD6CB2CCE7C2735C(1,"~INPUT_REPLAY_START_STOP_RECORDING~","");\nl_D1[2/*1*/]=HUD::_DD6CB2CCE7C2735C(1,"~INPUT_SAVE_REPLAY_CLIP~","");\nl_D1[1/*1*/]=HUD::_DD6CB2CCE7C2735C(1,"~INPUT_REPLAY_START_STOP_RECORDING~","");\nl_D1[2/*1*/]=HUD::_DD6CB2CCE7C2735C(1,"~INPUT_REPLAY_START_STOP_RECORDING_SECONDARY~","");\n``` -EndTextCommandThefeedPostStats [List of picture names](https://pastebin.com/XdpJVbHz)\n\nExample result:\n\n![](https://i.imgur.com/SdEZ22m.png)\n\n**Returns** The notification handle.\n\n```lua\nCitizen.CreateThread(function()\n -- Get the ped headshot image.\n local handle = RegisterPedheadshot(PlayerPedId())\n while not IsPedheadshotReady(handle) or not IsPedheadshotValid(handle) do\n Citizen.Wait(0)\n end\n local txd = GetPedheadshotTxdString(handle)\n\n -- Add the notification text\n BeginTextCommandThefeedPost("PS_UPDATE")\n AddTextComponentInteger(50)\n\n -- Set the notification title and progress\n local title = "PSF_STAMINA"\n local p1 = 14\n local lastProgress = 25\n local newProgress = 50\n local unknownBool = false\n EndTextCommandThefeedPostStats(title, p1, newProgress, lastProgress, unknownBool, txd, txd)\n\n -- Draw the notification\n local showInBrief = true\n local blink = false -- blink doesn't work when using icon notifications.\n EndTextCommandThefeedPostTicker(blink, showInBrief)\n \n -- Cleanup after yourself!\n UnregisterPedheadshot(handle)\nend)\n``` -EndTextCommandThefeedPostTicker Example output preview:\n\n![](https://i.imgur.com/TJvqkYq.png)\n\n**Parameters**\n- `isImportant`: Makes the notification flash on the screen.\n- `bHasTokens`: Makes the notification appear in the "Pause Menu > Info/Brief > Notifications" section.\n\n**Returns** The notification handle.\n\n```lua\nBeginTextCommandThefeedPost("STRING")\nAddTextComponentSubstringPlayerName("Hello " .. GetPlayerName(PlayerId()) .. ".")\nEndTextCommandThefeedPostTicker(true, true)\n``` +EndTextCommandThefeedPostReplayInput ```\nreturns a notification handle, prints out a notification like below:\ntype range: 0 - 2\nif you set type to 1, button accepts "~INPUT_SOMETHING~"\nexample:\nHUD::_0xDD6CB2CCE7C2735C(1, "~INPUT_TALK~", "Who you trynna get crazy with, ese? Don't you know I'm LOCO?!");\nExamples from the scripts:\nl_D1[1/*1*/]=HUD::_DD6CB2CCE7C2735C(1,"~INPUT_REPLAY_START_STOP_RECORDING~","");\nl_D1[2/*1*/]=HUD::_DD6CB2CCE7C2735C(1,"~INPUT_SAVE_REPLAY_CLIP~","");\nl_D1[1/*1*/]=HUD::_DD6CB2CCE7C2735C(1,"~INPUT_REPLAY_START_STOP_RECORDING~","");\nl_D1[2/*1*/]=HUD::_DD6CB2CCE7C2735C(1,"~INPUT_REPLAY_START_STOP_RECORDING_SECONDARY~","");\n```\n\nPreview:\n![](https://i.imgur.com/gw6kWOe.jpeg) +EndTextCommandThefeedPostStats [List of picture names](https://pastebin.com/XdpJVbHz)\n\nExample result:\n\n![](https://i.imgur.com/eyXFAyN.png)\n\n**Returns** The notification handle.\n\n```lua\nCitizen.CreateThread(function()\n -- Get the ped headshot image.\n local handle = RegisterPedheadshot(PlayerPedId())\n while not IsPedheadshotReady(handle) or not IsPedheadshotValid(handle) do\n Citizen.Wait(0)\n end\n local txd = GetPedheadshotTxdString(handle)\n\n -- Add the notification text\n BeginTextCommandThefeedPost("PS_UPDATE")\n AddTextComponentInteger(50)\n\n -- Set the notification title and progress\n local title = "PSF_STAMINA"\n local p1 = 14\n local lastProgress = 25\n local newProgress = 50\n local unknownBool = false\n EndTextCommandThefeedPostStats(title, p1, newProgress, lastProgress, unknownBool, txd, txd)\n\n -- Draw the notification\n local showInBrief = true\n local blink = false -- blink doesn't work when using icon notifications.\n EndTextCommandThefeedPostTicker(blink, showInBrief)\n \n -- Cleanup after yourself!\n UnregisterPedheadshot(handle)\nend)\n``` +EndTextCommandThefeedPostTicker Posts a generic feed notification:\n\n![](https://i.ibb.co/GkHcFvf/image.png)\n\n**Parameters**\n- `isImportant`: Makes the notification flash on the screen.\n- `showInBrief`: Makes the notification appear in the "Pause Menu > Info/Brief > Notifications" section.\n\n**Returns** The notification handle.\n\n```lua\nAddTextEntry("MyFeedMessage", "Hello " .. GetPlayerName(PlayerId()) .. ".")\nBeginTextCommandThefeedPost("MyFeedMessage")\nEndTextCommandThefeedPostTicker(true, true)\n``` +EndTextCommandThefeedPostTickerForced Posts an above minimap feed notification that is forced (Previous messages will be cleared).\n\n**Parameters**\n- `isImportant`: If true, the notification will flash.\n- `showInBrief`: If true, shows in Pause Menu > Info > Notifications.\n\n**Returns** The notification handle. +EndTextCommandThefeedPostTickerWithTokens Posts an above minimap feed message with tokens support (blips, input keys, etc...)\n\n**Parameters**\n- `isImportant`: Makes the notification flash.\n- `showInBrief`: Shows in Pause Menu > Info > Notifications.\n\n**Returns** Notification handle. EndTextCommandThefeedPostVersusTu ```\nNativeDB Added Parameter 7: int hudColorIndex1\nNativeDB Added Parameter 8: int hudColorIndex2\n``` EndTextCommandUnparsedScaleformString Same as END_TEXT_COMMAND_SCALEFORM_STRING but does not perform HTML conversion for text tokens.\nAlso useful for when you are trying to add blips and inputs in your scaleform (If the scaleform supports it). EnsureEntityStateBag Internal function for ensuring an entity has a state bag. @@ -485,12 +507,14 @@ FixObjectFragment Resets and brings back all the children of a fragment based ob FixVehicleWindow See eWindowId declared in [`IS_VEHICLE_WINDOW_INTACT`](#\\_0x46E571A0E20D01F1).\n\nThis function is coded to not work on vehicles of type: `CBike`, `Bmx`, `CBoat`, `CTrain`, and `CSubmarine`. FlashMinimapDisplay ```\nadds a short flash to the Radar/Minimap \nUsage: UI.FLASH_MINIMAP_DISPLAY \n``` FlushResourceKvp Nonsynchronous operations will not wait for a disk/filesystem flush before returning from a write or delete call. They will be much faster than their synchronous counterparts (e.g., bulk operations), however, a system crash may lose the data to some recent operations.\n\nThis native ensures all `_NO_SYNC` operations are synchronized with the disk/filesystem.\n\n```lua\n-- Bulk write many pairs to the resource KVP.\nlocal key = "bug_%d"\nlocal value = "unintended_feature_%d"\nfor i=1,10000 do\n SetResourceKvpNoSync(key:format(i), value:format(i))\nend\n\n-- Ensure all data is synchronized to the filesystem\nFlushResourceKvp()\n``` +ForceCinematicRenderingThisUpdate Forces the camera to be in cinematic mode while the player is in a car. This has to be called every frame, e.g. in a `Wait(0)` loop.\n\n**Parameters**\n- `enable`: Whether it should force the cinematic rendering or not. ForceCleanup ```\nused with 1,2,8,64,128 in the scripts \n``` ForceCleanupForAllThreadsWithThisName ```\nPLAYER::FORCE_CLEANUP_FOR_ALL_THREADS_WITH_THIS_NAME("pb_prostitute", 1); // Found in decompilation \n``` ForceEntityAiAndAnimationUpdate ```\nBased on carmod_shop script decompile this takes a vehicle parameter. It is called when repair is done on initial enter. \n``` ForceGameStatePlaying ```\nSets the localplayer playerinfo state back to playing (State 0) \nStates are: \n-1: "Invalid" \n0: "Playing" \n1: "Died" \n2: "Arrested" \n3: "Failed Mission" \n4: "Left Game" \n5: "Respawn" \n6: "In MP Cutscene" \n``` ForceLightningFlash ```\ncreates single lightning+thunder at random position \n``` ForceMusicTrackList Forces the chosen station to paly the given music track list. All other music track lists will be locked. +ForcePedAiAndAnimationUpdate Forces an instant ped AI and Animation update. Use this if your transitions between animations (especially secondary upper body animations) are janky or not smooth.\nDo note this is an expensive function. ForcePedMotionState ```cpp\nenum ePedMotionState\n{\n MOTIONSTATE_NONE = -294553821, // MotionState_None\n MOTIONSTATE_IDLE = -1871534317, // MotionState_Idle\n MOTIONSTATE_WALK = -668482597, // MotionState_Walk\n MOTIONSTATE_RUN = -530524, // MotionState_Run\n MOTIONSTATE_SPRINT = -1115154469, // MotionState_Sprint\n MOTIONSTATE_CROUCH_IDLE = 1140525470, // MotionState_Crouch_Idle\n MOTIONSTATE_CROUCH_WALK = 147004056, // MotionState_Crouch_Walk\n MOTIONSTATE_CROUCH_RUN = 898879241, // MotionState_Crouch_Run\n MOTIONSTATE_DONOTHING = 247561816, // MotionState_DoNothing\n MOTIONSTATE_ANIMATEDVELOCITY = 1427811395, // MotionState_AnimatedVelocity\n MOTIONSTATE_INVEHICLE = -1797663347, // MotionState_InVehicle\n MOTIONSTATE_AIMING = 1063765679, // MotionState_Aiming\n MOTIONSTATE_DIVING_IDLE = 1212730861, // MotionState_Diving_Idle\n MOTIONSTATE_DIVING_SWIM = -1855028596, // MotionState_Diving_Swim\n MOTIONSTATE_SWIMMING_TREADWATER = -776007225, // MotionState_Swimming_TreadWater\n MOTIONSTATE_DEAD = 230360860, // MotionState_Dead\n MOTIONSTATE_STEALTH_IDLE = 1110276645, // MotionState_Stealth_Idle\n MOTIONSTATE_STEALTH_WALK = 69908130, // MotionState_Stealth_Walk\n MOTIONSTATE_STEALTH_RUN = -83133983, // MotionState_Stealth_Run\n MOTIONSTATE_PARACHUTING = -1161760501, // MotionState_Parachuting\n MOTIONSTATE_ACTIONMODE_IDLE = -633298724, // MotionState_ActionMode_Idle\n MOTIONSTATE_ACTIONMODE_WALK = -762290521, // MotionState_ActionMode_Walk\n MOTIONSTATE_ACTIONMODE_RUN = 834330132, // MotionState_ActionMode_Run\n MOTIONSTATE_JETPACK = 1398696542 // MotionState_Jetpack\n}\n```\n\n**Parameters**\n- `ped`: The ped handle.\n- `motionStateHash`: The motion state hash.\n- `shouldReset`: If the motion state should be set even if the ped is already in the specified motion state.\n- `updateState`: Integer but treated as a boolean (only allows 1 or 0). Sets ped reset flags `CPED_RESET_FLAG_ForcePreCameraAiAnimUpdateIfFirstPerson` and `CPED_RESET_FLAG_ForcePostCameraAnimUpdate`.\n- `forceAIPreCameraUpdate`: If `updateState` is 1, will set either `CPED_RESET_FLAG_ForcePreCameraAIUpdate` (if true) or `CPED_RESET_FLAG_ForcePostCameraAIUpdate` (if false) ped reset flags.\n\n**Returns** Whether or not the motion state was forced on the ped successfully. ForcePedPanicWalla Forces the ambient peds into their panic walla state ForcePlaybackRecordedVehicleUpdate ```\nOften called after START_PLAYBACK_RECORDED_VEHICLE and SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE; similar in use to FORCE_ENTITY_AI_AND_ANIMATION_UPDATE.\n``` @@ -516,14 +540,17 @@ GetAllPeds Returns all peds handles known to the server.\nThe data returned adhe GetAllRopes Returns all rope handles. The data returned adheres to the following layout:\n\n```\n[ 770, 1026, 1282, 1538, 1794, 2050, 2306, 2562, 2818, 3074, 3330, 3586, 3842, 4098, 4354, 4610, ...]\n```\n\n**Returns** An object containing a list of all rope handles. GetAllTrackJunctions Returns all track junctions on the client\nThe data returned adheres to the following structure:\n\n```\n[1, 2, 4, 6, 69, 420]\n```\n\n**Returns** An object containing a list of track junctions ids.```\n``` GetAllVehicleModels Returns all registered vehicle model names, including non-dlc vehicles and custom vehicles in no particular order.\n\n**Example output**\n\n```\n ["dubsta", "dubsta2", "dubsta3", "myverycoolcar", "sultan", "sultanrs", ...]\n```\n\nThis native will not return vehicles that are unregistered (i.e from a resource being stopped) during runtime.\n\n```lua\nRegisterCommand("spawnrandomcar", function()\n local vehicles = GetAllVehicleModels()\n local veh = vehicles[math.random(1, #vehicles)]\n RequestModel(veh)\n repeat Wait(0) until HasModelLoaded(veh)\n local veh = CreateVehicle(veh, GetEntityCoords(PlayerPedId()), GetEntityHeading(PlayerPedId()), true, false)\n SetPedIntoVehicle(PlayerPedId(), veh, -1)\nend)\n``` +GetAllVehicles For FiveM, use [`GET_GAME_POOL`](#\\_0x2B9D4F50).\n\n**Returns** Returns all vehicles in the vehicle game pool. GetAllowMovementWhileZoomed ```\nReturns profile setting 17.\n``` GetAmbientPedRangeMultiplier A getter for [SET_AMBIENT_PED_RANGE_MULTIPLIER_THIS_FRAME](#\\_0x0B919E1FB47CC4E0).\n\n**Returns** Returns ambient ped range multiplier value. GetAmbientVehicleRangeMultiplier A getter for [SET_AMBIENT_VEHICLE_RANGE_MULTIPLIER_THIS_FRAME](#\\_0x90B6DA738A9A25DA).\n\n**Returns** Returns ambient vehicle range multiplier value. GetAmbientVoiceNameHash \n\n**Returns** The hash of the voice name in use by the ped. GetAmmoInPedWeapon ```\nWEAPON::GET_AMMO_IN_PED_WEAPON(PLAYER::PLAYER_PED_ID(), a_0) \nFrom decompiled scripts \nReturns total ammo in weapon \nGTALua Example : \nnatives.WEAPON.GET_AMMO_IN_PED_WEAPON(plyPed, WeaponHash) \n``` +GetAmmoInVehicleWeaponClip ```\nNativeDB Introduced: v3407\n``` GetAnimDuration [Animations list](https://alexguirre.github.io/animations-list/) GetAnimInitialOffsetPosition [Animations list](https://alexguirre.github.io/animations-list/) GetAnimInitialOffsetRotation [Animations list](https://alexguirre.github.io/animations-list/) +GetAreCameraControlsDisabled \n\n**Returns** Returns `true` if the main player's camera controls are disabled. Also returns `true` if the there is no main player info. GetAspectRatio This native retrieves the aspect ratio of the game window. If `physicalAspect` is `true`, it returns the physical aspect ratio of the game window, which is useful for 3x1 modes. Otherwise, it returns the aspect ratio of the main game window, considering any custom overrides from the settings menu.\n\n```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `physicalAspect`: A boolean value. Passing in `true` returns the physical aspect ratio of the game window. Passing in `false` returns the aspect ratio of the main game window.\n\n**Returns** The aspect ratio of the game window as a floating-point number. GetBenchmarkIterationsFromCommandLine ```\nReturns value of the '-benchmarkIterations' command line option.\n``` GetBenchmarkPassFromCommandLine ```\nReturns value of the '-benchmarkPass' command line option.\n``` @@ -556,16 +583,23 @@ GetClockMinutes ```\nGets the current ingame clock minute. \n``` GetClockSeconds ```\nGets the current ingame clock second. Note that ingame clock seconds change really fast since a day in GTA is only 48 minutes in real life. \n``` GetClosestBlipOfType ```\nNativeDB Introduced: v1180\n``` GetClosestFirePos ```\nReturns TRUE if it found something. FALSE if not. \n``` -GetClosestMajorVehicleNode ```\nGet the closest vehicle node to a given position, unknown1 = 3.0, unknown2 = 0 \n``` +GetClosestMajorVehicleNode Same as [`GET_CLOSEST_VEHICLE_NODE`](#\\_0x240A18690AE96513), but with the node flag `GCNF_INCLUDE_SWITCHED_OFF_NODES` set.\n\n**Parameters**\n- `x`: X coordinate\n- `y`: Y coordinate\n- `z`: Z coordinate\n- `outPosition`: Pointer to the found nodes coords\n- `zMeasureMult`: How strongly the difference in the Z direction should be weighted\n- `zTolerance`: How far apart the Z coords have to be before `zMeasureMult` kicks in\n\n**Returns** Returns the closest major vehicle node. GetClosestObjectOfType ```\nHas 8 params in the latest patches. \nisMission - if true doesn't return mission objects \n``` GetClosestPed ```\nGets the closest ped in a radius. \nPed Types: \nAny ped = -1 \nPlayer = 1 \nMale = 4 \nFemale = 5 \nCop = 6 \nHuman = 26 \nSWAT = 27 \nAnimal = 28 \nArmy = 29 \n------------------ \nP4 P5 P7 P8 \n1 0 x x = return nearest walking Ped \n1 x 0 x = return nearest walking Ped \nx 1 1 x = return Ped you are using \n0 0 x x = no effect \n0 x 0 x = no effect \nx = can be 1 or 0. Does not have any obvious changes. \nThis function does not return ped who is: \n1. Standing still \n2. Driving \n3. Fleeing \n4. Attacking \nThis function only work if the ped is: \n1. walking normally. \n2. waiting to cross a road. \nNote: PED::GET_PED_NEARBY_PEDS works for more peds. \n``` GetClosestRoad Finds an edge (node connection to another node) that satisfies the specified criteria.\n\n**Parameters**\n- `x`: x position\n- `y`: y position\n- `z`: z position\n- `minimumEdgeLength`: Minimum distance the srcNode must be from the targetNode.\n- `minimumLaneCount`: Minimum number of lanes the connection must have.\n- `srcNode`: Position of the edge source\n- `targetNode`: Position of the edge target\n- `laneCountForward`: Lane count forward\n- `laneCountBackward`: Lane count backwards\n- `width`: Width of gap in middle of road between forward and backward lanes.\n- `onlyMajorRoads`: Return major roads only.\n\n**Returns** Returns `true` if a road was found, `false` otherwise. GetClosestTrackNodes Get all track nodes and their track ids within the radius of the specified coordinates.\n\n**Parameters**\n- `position`: Get track nodes at position\n- `radius`: Get track nodes within radius\n\n**Returns** Returns a list of tracks and node entries: a trackNode and a trackIdThe data returned adheres to the following layout: [{trackNode1, trackId1}, ..., {trackNodeN, trackIdN}] GetClosestVehicle ```\nExample usage \nVEHICLE::GET_CLOSEST_VEHICLE(x, y, z, radius, hash, unknown leave at 70) \nx, y, z: Position to get closest vehicle to. \nradius: Max radius to get a vehicle. \nmodelHash: Limit to vehicles with this model. 0 for any. \nflags: The bitwise flags altering the function's behaviour. \nDoes not return police cars or helicopters. \nIt seems to return police cars for me, does not seem to return helicopters, planes or boats for some reason \nOnly returns non police cars and motorbikes with the flag set to 70 and modelHash to 0. ModelHash seems to always be 0 when not a modelHash in the scripts, as stated above. \nThese flags were found in the b617d scripts: 0,2,4,6,7,23,127,260,2146,2175,12294,16384,16386,20503,32768,67590,67711,98309,100359. \nConverted to binary, each bit probably represents a flag as explained regarding another native here: gtaforums.com/topic/822314-guide-driving-styles \nConversion of found flags to binary: pastebin.com/kghNFkRi \nAt exactly 16384 which is 0100000000000000 in binary and 4000 in hexadecimal only planes are returned. \nIt's probably more convenient to use worldGetAllVehicles(int *arr, int arrSize) and check the shortest distance yourself and sort if you want by checking the vehicle type with for example VEHICLE::IS_THIS_MODEL_A_BOAT \n------------------------------------------------------------------------- \nConclusion: This native is not worth trying to use. Use something like this instead: pastebin.com/xiFdXa7h\nUse flag 127 to return police cars\n``` -GetClosestVehicleNode ```\nFYI: When falling through the map (or however you got under it) you will respawn when your player ped's height is <= -200.0 meters (I think you all know this) and when in a vehicle you will actually respawn at the closest vehicle node.\n----------\nVector3 nodePos;\nGET_CLOSEST_VEHICLE_NODE(x,y,z,&nodePos,...)\np4 is either 0, 1 or 8. 1 means any path/road. 0 means node in the middle of the closest main (asphalt) road.\np5, p6 are always the same:\n0x40400000 (3.0), 0\np5 can also be 100.0 and p6 can be 2.5:\nPATHFIND::GET_CLOSEST_VEHICLE_NODE(a_0, &v_5, v_9, 100.0, 2.5)\nKnown node types: simple path/asphalt road, only asphalt road, water, under the map at always the same coords.\nThe node types follows a pattern. For example, every fourth node is of the type water i.e. 3, 7, 11, 15, 19, 23, 27, 31, 35, 39... 239. Could not see any difference between nodes within certain types.\nStarting at 2, every fourth node is under the map, always same coords.\nSame with only asphalt road (0, 4, 8, etc) and simple path/asphalt road (1, 5, 9, etc).\ngtaforums.com/topic/843561-pathfind-node-types\n``` -GetClosestVehicleNodeWithHeading ```\np5, p6 and p7 seems to be about the same as p4, p5 and p6 for GET_CLOSEST_VEHICLE_NODE. p6 and/or p7 has something to do with finding a node on the same path/road and same direction(at least for this native, something to do with the heading maybe). Edit this when you find out more. \np5 is either 1 or 12. 1 means any path/road. 12, 8, 0 means node in the middle of the closest main (asphalt) road. \np6 is always 3.0 \np7 is always 0. \nKnown node types: simple path/asphalt road, only asphalt road, water, under the map at always the same coords. \nThe node types follows a pattern. For example, every fourth node is of the type water i.e. 3, 7, 11, 15, 19, 23, 27, 31, 35, 39... 239. Could not see any difference between nodes within certain types. \nStarting at 2, every fourth node is under the map, always same coords. \nSame with only asphalt road (0, 4, 8, etc) and simple path/asphalt road (1, 5, 9, etc). \ngtaforums.com/topic/843561-pathfind-node-types \nExample of usage, moving vehicle to closest path/road: \nVector3 coords = ENTITY::GET_ENTITY_COORDS(playerVeh, true); \nVector3 closestVehicleNodeCoords; \nfloat roadHeading; \nPATHFIND::GET_CLOSEST_VEHICLE_NODE_WITH_HEADING(coords.x, coords.y, coords.z, &closestVehicleNodeCoords, &roadHeading, 1, 3, 0); \nENTITY::SET_ENTITY_HEADING(playerVeh, roadHeading); \nENTITY::SET_ENTITY_COORDS(playerVeh, closestVehicleNodeCoords.x, closestVehicleNodeCoords.y, closestVehicleNodeCoords.z, 1, 0, 0, 1); \nVEHICLE::SET_VEHICLE_ON_GROUND_PROPERLY(playerVeh); \n------------------------------------------------------------------ \nC# Example (ins1de) : pastebin.com/fxtMWAHD \n``` +GetClosestVehicleNode ```cpp\nenum eGetClosestNodeFlags {\n GCNF_INCLUDE_SWITCHED_OFF_NODES = 1,\n GCNF_INCLUDE_BOAT_NODES = 2,\n GCNF_IGNORE_SLIPLANES = 4,\n GCNF_IGNORE_SWITCHED_OFF_DEADENDS = 8,\n GCNF_GET_HEADING = 256,\n GCNF_FAVOUR_FACING = 512\n}\n```\n\n**Parameters**\n- `x`: X coordinate\n- `y`: Y coordinate\n- `z`: Z coordinate\n- `outPosition`: Pointer to the found nodes coords\n- `nodeFlags`: Node flags\n- `zMeasureMult`: How strongly the difference in the Z direction should be weighted\n- `zTolerance`: How far apart the Z coords have to be before `zMeasureMult` kicks in\n\n**Returns** Returns the closest vehicle node matching the node flags. +GetClosestVehicleNodeWithHeading Same as [`GET_CLOSEST_VEHICLE_NODE`](#\\_0x240A18690AE96513), but with the node flag `GCNF_GET_HEADING` set, causing the native to also return the heading.\n\n**Parameters**\n- `x`: X coordinate\n- `y`: Y coordinate\n- `z`: Z coordinate\n- `outPosition`: Pointer to the found nodes coords\n- `outHeading`: Pointer to the found nodes heading\n- `nodeFlags`: Node flags, see [`GET_CLOSEST_VEHICLE_NODE`](#\\_0x240A18690AE96513)\n- `zMeasureMult`: How strongly the difference in the Z direction should be weighted\n- `zTolerance`: How far apart the Z coords have to be before `zMeasureMult` kicks in\n\n**Returns** Returns the closest vehicle node with its heading. GetCloudTimeAsInt Returns POSIX timestamp.\n\nRenamed from `_GET_POSIX_TIME` to `GET_CLOUD_TIME_AS_INT` because of conflicting native names ([`0xDA488F299A5B164E`](#\\_0xDA488F299A5B164E))\n\n**Returns** An int representing the cloud time. GetCloudTimeAsString ```\nSame as GET_CLOUD_TIME_AS_INT but returns the value as a hex string (%I64X).\n``` +GetColshapeCircleData > This native only works in FiveM for GTAV Enhanced.\n\nGets the circle collision shape data.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n- `x`: Center X coordinate.\n- `y`: Center Y coordinate.\n- `radius`: Radius of the circle.\n\n**Returns** `true` if the data was retrieved successfully. Returns `false` if the ID is invalid or the shape is not a circle. +GetColshapeCuboidData > This native only works in FiveM for GTAV Enhanced.\n\nGets the cuboid collision shape data.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n- `x`: Center X coordinate.\n- `y`: Center Y coordinate.\n- `z`: Center Z coordinate.\n- `width`: Total width.\n- `depth`: Total depth.\n- `height`: Total height.\n\n**Returns** `true` if the data was retrieved successfully. Returns `false` if the ID is invalid or the shape is not a cuboid. +GetColshapeCylinderData > This native only works in FiveM for GTAV Enhanced.\n\nGets the cylinder collision shape data.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n- `x`: Center X coordinate.\n- `y`: Center Y coordinate.\n- `z`: Center Z coordinate.\n- `radius`: Radius of the cylinder.\n- `height`: Total height of the cylinder.\n\n**Returns** `true` if the data was retrieved successfully. Returns `false` if the ID is invalid or the shape is not a cylinder. +GetColshapeDimension > This native only works in FiveM for GTAV Enhanced.\n\nReturns the dimension (routing bucket) of the collision shape.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n\n**Returns** The dimension assigned to the collision shape. +GetColshapePolygonData > This native only works in FiveM for GTAV Enhanced.\n\nGets the polygon collision shape data. Returns an empty array if the ID is invalid or the shape is not a polygon.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n- `minZ`: Minimum Z height.\n- `maxZ`: Maximum Z height.\n\n**Returns** An array of interleaved x, y point pairs. +GetColshapeRectangleData > This native only works in FiveM for GTAV Enhanced.\n\nGets the rectangle collision shape data.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n- `x`: Center X coordinate.\n- `y`: Center Y coordinate.\n- `z`: Center Z coordinate.\n- `width`: Total width.\n- `depth`: Total depth.\n- `heading`: Rotation heading in radians.\n\n**Returns** `true` if the data was retrieved successfully. Returns `false` if the ID is invalid or the shape is not a rectangle. +GetColshapeSphereData > This native only works in FiveM for GTAV Enhanced.\n\nGets the sphere collision shape data.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n- `x`: Center X coordinate.\n- `y`: Center Y coordinate.\n- `z`: Center Z coordinate.\n- `radius`: Radius of the sphere.\n\n**Returns** `true` if the data was retrieved successfully. Returns `false` if the ID is invalid or the shape is not a sphere. GetCombatFloat ```\np0: Ped Handle \np1: int i | 0 <= i <= 27 \np1 probably refers to the attributes configured in combatbehavior.meta. There are 13. Example: \n \n \n \n \n \n \n \n \n \n \n \n \n \n-------------Confirmed by editing combatbehavior.meta: \np1: \n0=BlindFireChance \n1=BurstDurationInCover \n3=TimeBetweenBurstsInCover \n4=TimeBetweenPeeks \n5=StrafeWhenMovingChance \n8=WalkWhenStrafingChance \n11=AttackWindowDistanceForCover \n12=TimeToInvalidateInjuredTarget \n16=OptimalCoverDistance \n``` GetCommerceItemCat ```\nindex2 is unused\n``` GetCommerceItemTexturename ```\nNativeDB Added Parameter 3: int p2\n``` @@ -592,7 +626,8 @@ GetCurrentTrackSoundName \n\n**Returns** The current sound name as a hash for th GetCutsceneEndTime Returns the time of the cutscene's end accounting for [`REQUEST_CUTSCENE_WITH_PLAYBACK_LIST`](#\\_0xC23DE0E91C30B58C)\n\nIf a cutscene is laid out with 10 second sections, and section 0 and 1 are enabled then it would be 20000ms.\n\n```\nNativeDB Introduced: v1734\n``` GetCutscenePlayTime Gets the current time of the cutscene.\n\n```\nNativeDB Introduced: v3258\n```\n\n**Returns** Returns the current play time of the cutscene in milliseconds. GetCutsceneTime Gets the elapsed time of the current cutscene in\n\n**Returns** Elapsed time in milliseconds -GetCutsceneTotalDuration Gets the total length of the cutscene irrespective of playback list in milliseconds\nTo account for sections, see [`_GET_CUTSCENE_END_TIME`](#\\_0x971D7B15BCDBEF99)\n\n**Returns** Cutscene total length in milliseconds +GetCutsceneTotalDuration Gets the total length of the cutscene irrespective of playback list in milliseconds\nTo account for sections, see [`GET_CUTSCENE_END_TIME`](#\\_0x971D7B15BCDBEF99)\n\n**Returns** Cutscene total length in milliseconds +GetDamping ```\nNativeDB Introduced: v3407\n``` GetDebugCamera ```\nNativeDB Introduced: v2372\n``` GetDeepOceanScaler ```\nGets the aggressiveness factor of the ocean waves. \n``` GetDefaultScriptRendertargetRenderId ```\nThis function is hard-coded to always return 1. \n``` @@ -646,7 +681,7 @@ GetEntityRoll ```\nDisplays the current ROLL axis of the entity [-180.0000/180.0 GetEntityRotation **NOTE**: What you use for rotationOrder when getting must be the same as rotationOrder when setting the rotation.\n\n```cpp\nenum eRotationOrder {\n // Rotate around the z-axis, then the y-axis and finally the x-axis.\n ROT_ZYX = 0,\n // Rotate around the y-axis, then the z-axis and finally the x-axis.\n ROT_YZX = 1,\n // Rotate around the z-axis, then the x-axis and finally the y-axis.\n ROT_ZXY = 2,\n // Rotate around the x-axis, then the z-axis and finally the y-axis.\n ROT_XZY = 3,\n // Rotate around the y-axis, then the x-axis and finally the z-axis.\n ROT_YXZ = 4,\n // Rotate around the x-axis, then the y-axis and finally the z-axis.\n ROT_XYZ = 5,\n}\n```\n\n**Parameters**\n- `entity`: The entity to get the rotation for.\n- `rotationOrder`: The order yaw, pitch and roll is applied. Usually 2.\n\n**Returns** A vector where the Z coordinate is the yaw.\n\n```lua\nlocal playerRotation = GetEntityRotation(PlayerPedId(), 2)\nprint(playerRotation)\n``` GetEntityRoutingBucket Gets the routing bucket for the specified entity.\n\nRouting buckets are also known as 'dimensions' or 'virtual worlds' in past echoes, however they are population-aware.\n\n**Parameters**\n- `entity`: The entity to get the routing bucket for.\n\n**Returns** The routing bucket ID. GetEntityScript ```\nAll ambient entities in-world seem to have the same value for the second argument (Any *script), depending on when the scripthook was activated/re-activated. I've seen numbers from ~5 to almost 70 when the value was translated with to_string. The function return value seems to always be 0. \n``` -GetEntitySpeed Get the speed of a entity.\n\n**Parameters**\n- `entity`: Entity id you want to test for speed.\n\n**Returns** Speed of a entity in m/s. You can convert to km/h using the value you get and multiply by 3.6, and miles/h by 2.236936. Also, the float returned is the length of [GET_ENTITY_SPEED_VECTOR](?\\_0x9A8D700A51CB7B0D) +GetEntitySpeed Get the speed of a entity.\n\n**Parameters**\n- `entity`: Entity id you want to test for speed.\n\n**Returns** Speed of a entity in m/s. You can convert to km/h using the value you get and multiply by 3.6, and miles/h by 2.236936. Also, the float returned is the length of [GET_ENTITY_SPEED_VECTOR](#\\_0x9A8D700A51CB7B0D) GetEntitySpeedVector ```\nRelative can be used for getting speed relative to the frame of the vehicle, to determine for example, if you are going in reverse (-y speed) or not (+y speed). \n``` GetEntitySubmergedLevel ```\nGet how much of the entity is submerged. 1.0f is whole entity. \n``` GetEntityType ```\nReturns:\n0 = no entity\n1 = ped\n2 = vehicle\n3 = object\n``` @@ -670,7 +705,7 @@ GetFrameCount Gets the number of the current frame being displayed.\n\n**Returns GetFrameTime Gets the high precision frame time of the last frame in seconds.\n\n*note: the example above is way less precise.*\n\n**Returns** The frame time (in seconds) of the last frame.\n\n```lua\nlocal time1 = GetGameTimer()\nCitizen.Wait(0)\n\n-- Prints for example 0.01253530010581 at around 90 FPS\nprint(GetFrameTime())\n\n-- This would print about the same as above, but is less accurate, ie: 0.012\nprint((GetGameTimer() - time1) / 1000)\n``` GetFuelConsumptionRateMultiplier \n\n**Returns** Current fuel consumption rate multiplier. 0 means that fuel is not consumed. GetFuelConsumptionState \n\n**Returns** True if fuel consumption is turned on. False otherwise. -GetGameBuildNumber Returns the internal build number of the current game being executed.\n\nPossible values:\n\n* FiveM\n * 1604\n * 2060\n * 2189\n * 2372\n * 2545\n * 2612\n * 2699\n * 2802\n * 2944\n * 3095\n * 3258\n * 3323\n * 3407\n * 3570\n * 3751\n * 3788\n* RedM\n * 1311\n * 1355\n * 1436\n * 1491\n* LibertyM\n * 43\n* FXServer\n * 0\n\n**Returns** The build number, or **0** if no build number is known. +GetGameBuildNumber Returns the internal build number of the current game being executed.\n\nPossible values:\n\n* FiveM\n * 1604\n * 2060\n * 2189\n * 2372\n * 2545\n * 2612\n * 2699\n * 2802\n * 2944\n * 3095\n * 3258\n * 3323\n * 3407\n * 3570\n * 3751\n * 3788\n * 3889\n* RedM\n * 1311\n * 1355\n * 1436\n * 1491\n* LibertyM\n * 43\n* FXServer\n * 0\n\n**Returns** The build number, or **0** if no build number is known. GetGameName Returns the current game being executed.\n\nPossible values:\n\n| Return value | Meaning |\n| ------------ | ------------------------------ |\n| `fxserver` | Server-side code ('Duplicity') |\n| `fivem` | FiveM for GTA V |\n| `libertym` | LibertyM for GTA IV |\n| `redm` | RedM for Red Dead Redemption 2 |\n\n**Returns** The game the script environment is running in. GetGamePool Returns a list of entity handles (script GUID) for all entities in the specified pool - the data returned is an array as\nfollows:\n\n```json\n[ 770, 1026, 1282, 1538, 1794, 2050, 2306, 2562, 2818, 3074, 3330, 3586, 3842, 4098, 4354, 4610, ...]\n```\n\n### Supported pools\n\n* `CPed`: Peds (including animals) and players.\n* `CObject`: Objects (props), doors, and projectiles.\n* `CNetObject`: Networked objects\n* `CVehicle`: Vehicles.\n* `CPickup`: Pickups.\n\n**Parameters**\n- `poolName`: The pool name to get a list of entities from.\n\n**Returns** An array containing entity handles for each entity in the named pool.\n\n```lua\nlocal vehiclePool = GetGamePool('CVehicle') -- Get the list of vehicles (entities) from the pool\nfor i = 1, #vehiclePool do -- loop through each vehicle (entity)\n if GetPedInVehicleSeat(vehiclePool[i], -1) == 0 then\n DeleteEntity(vehiclePool[i]) -- Delete vehicles (entities) that don't have a driver\n end\nend\n``` GetGameplayCamRelativePitch \n\n**Returns** Returns the relative pitch of the gameplay camera\n\n```lua\nlocal pitch = GetGameplayCamRelativePitch()\nprint("LocalPlayer pitch: " .. pitch)\n``` @@ -681,7 +716,7 @@ GetGlobalPassengerMassMultiplier A getter for [SET_GLOBAL_PASSENGER_MASS_MULTIPL GetGlobalWaterType ```\nNativeDB Introduced: v2189\n``` GetGroundZAndNormalFor_3dCoord Attempts to identify the highest ground Z-coordinate and determine the corresponding surface normal directly beneath a specified 3D coordinate.\n\n```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `x`: X-coordinate of the point to check.\n- `y`: Y-coordinate of the point to check.\n- `z`: Z-coordinate of the point to check.\n- `groundZ`: A pointer to a float where the ground Z-coordinate will be stored if found.\n- `normal`: A pointer to a Vector3 structure where the surface normal at the ground point will be stored.\n\n**Returns** Returns `true` if ground is found below the given coordinates and the surface normal could be determined, otherwise `false`.\n\n```lua\nlocal x, y, z = 100.0, -200.0, 50.0\nlocal success, groundZ, normal = GetGroundZAndNormalFor_3dCoord(x, y, z)\n\nif success then\n print("Ground Z found at: ", groundZ)\n print("Surface normal is: ", normal.x, normal.y, normal.z)\nelse\n print("No ground found.")\nend\n``` GetGroundZExcludingObjectsFor_3dCoord Determines the highest ground Z-coordinate directly below a specified 3D coordinate, excluding any objects at that point. Optionally, water can be considered as ground when determining the highest point.\n\n```\nNativeDB Added Parameter 6: BOOL ignoreDistToWaterLevelCheck - If set to true, the distance to the water level will be ignored when checking for water as ground. \n```\n\n```\nNativeDB Introduced: v505\n```\n\n**Parameters**\n- `x`: X-coordinate of the point to check.\n- `y`: Y-coordinate of the point to check.\n- `z`: Z-coordinate of the point to check.\n- `groundZ`: A pointer to a float where the ground Z-coordinate will be stored if found.\n- `waterAsGround`: If set to `true`, water will be included in the check, and its height will be returned if it is higher than the ground level.\n\n**Returns** Returns `true` if ground (or water, if specified) is found below the given coordinates, otherwise `false`. -GetGroundZFor_3dCoord This native gets the ground level (ground elevation) and returns the Z coordinate that represents it.\nNote: This native can only calculate the elevation when the coordinates are within the render distance of the client.\n\n```\nNativeDB Added Parameter 6: BOOL p5\n```\n\n**Parameters**\n- `x`: Position on the X-axis to get ground elevation.\n- `y`: Position on the Y-axis to get ground elevation.\n- `z`: Position on the Z-axis to get ground elevation.\n- `includeWater`: Determines if the top water level at the specified position should be considered the ground elevation. (It would only matter if the specified position is located above or under the water)\n\n**Returns** This native\\`s first return value (retval) will return true if the ground elevation has been found, and the second (groundZ) will return the z-coord which represents the ground elevation at the specified position.\n\n```lua\nlocal ped = PlayerPedId()\nlocal pedCoords = GetEntityCoords(ped) \nlocal retval, groundZ = GetGroundZFor_3dCoord(pedCoords.x, pedCoords.y, pedCoords.z, true)\n\nif retval then\n -- Do stuff with groundZ\nend\n``` +GetGroundZFor_3dCoord This native gets the ground level (ground elevation) and returns the Z coordinate that represents it.\nNote: This native can only calculate the elevation when the coordinates are within the render distance of the client.\n\n```\nNativeDB Added Parameter 6: BOOL p5\n```\n\n**Parameters**\n- `x`: Position on the X-axis to get ground elevation.\n- `y`: Position on the Y-axis to get ground elevation.\n- `z`: Position on the Z-axis to get ground elevation.\n- `groundZ`: The Z coordinate for the ground.\n- `includeWater`: Determines if the top water level at the specified position should be considered the ground elevation. (It would only matter if the specified position is located above or under the water)\n\n**Returns** This native\\`s first return value (retval) will return true if the ground elevation has been found, and the second (groundZ) will return the z-coord which represents the ground elevation at the specified position.\n\n```lua\nlocal ped = PlayerPedId()\nlocal pedCoords = GetEntityCoords(ped) \nlocal retval, groundZ = GetGroundZFor_3dCoord(pedCoords.x, pedCoords.y, pedCoords.z, true)\n\nif retval then\n -- Do stuff with groundZ\nend\n``` GetGroupSize ```\np1 may be a BOOL representing whether or not the group even exists \n``` GetHasObjectFragInst ```\nGET_*\n``` GetHashKey This native converts its past string to hash. It is hashed using jenkins one at a time method.\n\n**Parameters**\n- `string`: The string to hash.\n\n**Returns** The hash of `string`.\n\n```lua\nlocal zentorno = GetHashKey('zentorno')\n\nif GetEntityModel(car) == zentorno then\n print('Car is a zentorno!')\nend\n``` @@ -747,6 +782,7 @@ GetIsDoorValid See eDoorId declared in [`SET_VEHICLE_DOOR_SHUT`](#\\_0x93D9BD300 GetIsHeliEngineRunning \n\n**Parameters**\n- `heli`: The helicopter to check\n\n**Returns** Returns `true` if the helicopter's engine is running, `false` if it is not. GetIsHidef This native indicates whether the game is running in high-definition (HD) resolution. It returns `false` if the resolution is less than `1280x720` and `true` if it's equal to or greater than `1280x720`.\n\n```\nNativeDB Introduced: v323\n```\n\n**Returns** A boolean value indicating whether the game is running in high-definition (`true`) or not (`false`). GetIsLeftVehicleHeadlightDamaged ```\nFrom the driver's perspective, is the left headlight broken. \n``` +GetIsLoadingScreenActive When loading in, returns true until [`SHUTDOWN_LOADING_SCREEN`](#\\_0x078EBE9809CCD637) was called. Note that this is referring to the game's loading screen, not the NUI loadingscreen and is therefore not impacted by [loadscreen_manual_shutdown](https://docs.fivem.net/docs/scripting-reference/resource-manifest/#loadscreen_manual_shutdown).\n\n**Returns** Wether the player is still in the loadingscreen\n\n```lua\n-- Close the loading screen if it's still active\nif GetIsLoadingScreenActive() then\n ShutdownLoadingScreen()\nend\n``` GetIsPedGadgetEquipped ```\ngadgetHash - was always 0xFBAB5776 ("GADGET_PARACHUTE"). \n``` GetIsPlayerDrivingOnHighway \n\n**Parameters**\n- `playerId`: The local index of the player to check (see [PLAYER_ID](#\\_0x4F8644AF03D0E0D6))\n\n**Returns** Returns a boolean value representing if the player is driving on a highway.\n\n```lua\n-- Get and store the local player index\nlocal playerId = PlayerId()\n\nif GetIsPlayerDrivingOnHighway(playerId) then\n print("Player is driving on a highway!")\nelse\n print("Player is not driving on a highway.")\nend\n``` GetIsPlayerInAnimalForm ```\nAlthough we don't have a jenkins hash for this one, the name is 100% confirmed.\n``` @@ -768,9 +804,9 @@ GetLastRammedVehicle ```\nReturns last vehicle that was rammed by the given vehi GetLengthOfLiteralString ```\nReturns the length of the string passed (much like strlen). \n``` GetLengthOfStringWithThisTextLabel ```\nReturns the string length of the string from the gxt string . \n``` GetLinePlaneIntersection Determines whether a line segment intersects a plane and, if so, returns the parameter value at which this intersection occurs.\n\n```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `x1`: The X-coordinate of the first point of the line segment.\n- `y1`: The Y-coordinate of the first point of the line segment.\n- `z1`: The Z-coordinate of the first point of the line segment. Together, `x1`, `y1`, and `z1` define the starting point of the line segment.\n- `x2`: The X-coordinate of the second point of the line segment.\n- `y2`: The Y-coordinate of the second point of the line segment.\n- `z2`: The Z-coordinate of the second point of the line segment. Together, `x2`, `y2`, and `z2` define the ending point of the line segment.\n- `planeX`: The X-coordinate of a point on the plane. This, along with `planeY` and `planeZ`, specifies a point that lies on the plane's surface.\n- `planeY`: The Y-coordinate of a point on the plane.\n- `planeZ`: The Z-coordinate of a point on the plane.\n- `planeNormalX`: The X-component of the plane's normal vector. The normal vector is perpendicular to the plane's surface and defines its orientation.\n- `planeNormalY`: The Y-component of the plane's normal vector.\n- `planeNormalZ`: The Z-component of the plane's normal vector. Together, `planeNormalX`, `planeNormalY`, and `planeNormalZ` fully describe the plane's orientation in 3D space.\n- `intersectionParameter`: A pointer to a float. This parameter is used to return the value of `t` at which the line segment intersects the plane. The value of `t` is a scalar multiplier that can be used to calculate the exact intersection point on the line segment. If the line does not intersect the plane, the value of `t` is not meaningful.\n\n**Returns** Returns `true` if the line segment intersects the plane, in which case the `intersectionParameter` will contain the intersection point's parameter value. Returns `false` if there is no intersection, making the `intersectionParameter` value irrelevant.\n\n```lua\n-- Define the line segment with start and end points\nlocal startX, startY, startZ = 100.0, -200.0, 50.0\nlocal endX, endY, endZ = 200.0, -100.0, 50.0\n\n-- Define the plane with a point on the plane and the normal vector\nlocal planeX, planeY, planeZ = 150.0, -150.0, 50.0\nlocal normalX, normalY, normalZ = 0.0, 0.0, 1.0\n\n-- Call the native\nlocal success, intersectionParameter = GetLinePlaneIntersection(startX, startY, startZ, endX, endY, endZ, planeX, planeY, planeZ, normalX, normalY, normalZ, intersectionParameter)\n\nif success then\n -- Calculate the intersection point using intersectionParameter\n local intersectX = startX + (endX - startX) * intersectionParameter\n local intersectY = startY + (endY - startY) * intersectionParameter\n local intersectZ = startZ + (endZ - startZ) * intersectionParameter\n \n print("Intersection point at: (" .. intersectX .. ", " .. intersectY .. ", " .. intersectZ .. ")")\nelse\n print("No intersection found.")\nend\n``` -GetLiveryName ```\nSecond Param = LiveryIndex \nexample \nint count = VEHICLE::GET_VEHICLE_LIVERY_COUNT(veh); \nfor (int i = 0; i < count; i++) \n { \nchar* LiveryName = VEHICLE::GET_LIVERY_NAME(veh, i); \n } \nthis example will work fine to fetch all names \nfor example for Sanchez we get \nSANC_LV1 \nSANC_LV2 \nSANC_LV3 \nSANC_LV4 \nSANC_LV5 \nUse _GET_LABEL_TEXT, to get the localized livery name. \n----------- \nNOTE: You may need to set the vehicle's modKit to 0 by using this function: SET_VEHICLE_MOD_KIT() before getting the name, otherwise this native may return NULL. \ndev-c.com/nativedb/func/info/1f2aa07f00b3217a \n``` +GetLiveryName ```\nSecond Param = LiveryIndex \nexample \nint count = VEHICLE::GET_VEHICLE_LIVERY_COUNT(veh); \nfor (int i = 0; i < count; i++) \n { \nchar* LiveryName = VEHICLE::GET_LIVERY_NAME(veh, i); \n } \nthis example will work fine to fetch all names \nfor example for Sanchez we get \nSANC_LV1 \nSANC_LV2 \nSANC_LV3 \nSANC_LV4 \nSANC_LV5 \nUse _GET_LABEL_TEXT, to get the localized livery name. \n```\n\nNOTE: You may need to set the vehicle's modKit to 0 by using this function [SET_VEHICLE_MOD_KIT](#\\_0x1F2AA07F00B3217A) before getting the name, otherwise this native may return NULL. GetLocalPlayerAimState Returns the local player's targeting mode. See [`SET_PLAYER_TARGETING_MODE`](#\\_0xB1906895227793F3). -GetLocalPlayerAimState_2 ```\nSame behavior as GET_LOCAL_PLAYER_AIM_STATE but only used on the PC version. \n``` +GetLocalPlayerGamepadAimState Same behavior as [`GET_LOCAL_PLAYER_AIM_STATE`](#\\_0xBB41AFBBBC0A0287) but will also return if player using a keyboard.\n\n**Returns** Returns the local player's targeting mode. See [`SET_PLAYER_TARGETING_MODE`](#\\_0xB1906895227793F3). GetLocalTime ```\nGets local system time as year, month, day, hour, minute and second. \nExample usage: \nint year; \nint month; \nint day; \nint hour; \nint minute; \nint second; \nor use std::tm struct \nTIME::GET_LOCAL_TIME(&year, &month, &day, &hour, &minute, &second); \n``` GetMakeNameFromVehicleModel Retrieves the manufacturer's name for a specified vehicle.\n\n```\nNativeDB Introduced: v1868\n```\n\n**Parameters**\n- `modelHash`: The model hash of the vehicle.\n\n**Returns** Returns the display label of the manufacturer if the vehicle model is recognized, or "CARNOTFOUND" if the hash does not correspond to any known vehicle model.\n\n```lua\n-- This example prints the manufacturer of the player's current vehicle.\n\n-- Retrieve the player ped.\nlocal playerPed = PlayerPedId()\n\n-- Retrieve the vehicle the player is currently in.\nlocal vehicle = GetVehiclePedIsIn(playerPed, false)\n\n-- If the vehicle does not exist, end the execution of the code here.\nif not DoesEntityExist(vehicle) then \n return \nend\n\n-- Retrieve the model hash of the vehicle.\nlocal vehicleHash = GetEntityModel(vehicle)\n\n-- Retrieve the manufacturer of the vehicle.\nlocal manufacturer = GetMakeNameFromVehicleModel(vehicleHash)\n\n-- Print the manufacturer of the vehicle.\nprint("Vehicle Manufacturer: " .. manufacturer)\n``` GetMapZoomDataLevel Returns the zoom level data by index from mapzoomdata.meta file.\n\n**Parameters**\n- `index`: Zoom level index.\n- `zoomScale`: fZoomScale value.\n- `zoomSpeed`: fZoomSpeed value.\n- `scrollSpeed`: fScrollSpeed value.\n- `tilesX`: vTiles X.\n- `tilesY`: vTiles Y.\n\n**Returns** A boolean indicating TRUE if the data was received successfully. @@ -781,15 +817,17 @@ GetMaxAmmoInClip ```\np2 is mostly 1 in the scripts. \n``` GetMaxWantedLevel ```\nGets the maximum wanted level the player can get. \nRanges from 0 to 5. \n``` GetMaximumNumberOfCloudPhotos ```\nThis function is hard-coded to always return 96.\n``` GetMaximumNumberOfPhotos ```\nThis function is hard-coded to always return 0.\n``` +GetMenuLayoutChangedEventDetails Returns details of a layout changed event.\nBe sure this is called only when [`HAS_MENU_LAYOUT_CHANGED_EVENT_OCCURRED`](#\\_0x2E22FEFA0100275E) returns true in a frame.\nCan only be called by one script at a time.\nLayout changed events become active whenever the menu is navigated up or down.\n\n**Parameters**\n- `previousScreen`: Screen id of the last selected item minus 1000. See [`PAUSE_MENUCEPTION_GO_DEEPER`](#\\_0x77F16B447824DA6C) for a list of screens.\n- `currentScreen`: Current menu it's screen id.\n- `uniqueId`: Unique ID of the menu item. GetMenuPedBoolStat ```\np0 was always 0xAE2602A3.\n``` GetMillisecondsPerGameMinute Returns how many real ms are equal to one game minute.\nA getter for [`SetMillisecondsPerGameMinute`](#\\_0x36CA2554).\n\n**Returns** A number of milliseconds that equals to one game minute. GetModSlotName \n\n**Parameters**\n- `modType`: Refer to eVehicleModType in [`SET_VEHICLE_MOD`](#\\_0x6AF0636DDEDCB6DD). GetModTextLabel ```\nReturns the text label of a mod type for a given vehicle \nUse _GET_LABEL_TEXT to get the part name in the game's language \n```\n\n**Parameters**\n- `modType`: Refer to eVehicleModType in [`SET_VEHICLE_MOD`](#\\_0x6AF0636DDEDCB6DD). GetModelDimensions ```\nGets the dimensions of a model.\nCalculate (maximum - minimum) to get the size, in which case, Y will be how long the model is.\nExample from the scripts: MISC::GET_MODEL_DIMENSIONS(ENTITY::GET_ENTITY_MODEL(PLAYER::PLAYER_PED_ID()), &v_1A, &v_17);\n``` GetMount ```\nFunction just returns 0 \nvoid __fastcall ped__get_mount(NativeContext *a1) \n{ \n NativeContext *v1; // rbx@1 \n v1 = a1; \n GetAddressOfPedFromScriptHandle(a1->Args->Arg1); \n v1->Returns->Item1= 0; \n} \n``` +GetMouseEvent Gets mouse event data from scaleforms with mouse support. Must be checked every frame.\nReturns item index if using the COLOUR_SWITCHER\\_02 scaleform.\nSelection types, found in MOUSE_EVENTS.as:\nMOUSE_DRAG_OUT = 0;\nMOUSE_DRAG_OVER = 1;\nMOUSE_DOWN = 2;\nMOUSE_MOVE = 3;\nMOUSE_UP = 4;\nMOUSE_PRESS = 5;\nMOUSE_RELEASE = 6;\nMOUSE_RELEASE_OUTSIDE = 7;\nMOUSE_ROLL_OUT = 8;\nMOUSE_ROLL_OVER = 9;\nMOUSE_WHEEL_UP = 10;\nMOUSE_WHEEL_DOWN = 11;\n\nScaleforms that this works with:\n\n* COLOUR_SWITCHER\\_02\n* MP_RESULTS_PANEL\n* MP_NEXT_JOB_SELECTION\n* SC_LEADERBOARD\n Probably works with other scaleforms, needs more research.\n In order to use this Native you MUST have controls 239, 240, 237, 238 enabled!\n This native, due to its erroneous redundancy of the returned boolean value, works differently in C#: shifting the parameters (where `received` becomes `selectionType` and so on making the fourth parameter unused and always 0).\n\n**Parameters**\n- `scaleformHandle`: Handle of the scaleform\n- `received`: Returns a boolean indicating if the data was received successfully (in Lua).\n- `selectionType`: The type of MouseEvent specified above.\n- `context`: Context of the slot the mouse is hovering on.\n- `slotIndex`: Index of the slot the mouse is hovering on.\n\n**Returns** * **retVal** Returns true if MOUSE_EVENT callback from Scaleforms has been called.\n\n```lua\nlocal success, _eventType, _context, _itemId = GetMouseEvent(scaleform)\n``` GetMusicPlaytime \n\n**Returns** Returns the play time in milliseconds of the current score track. GetMusicVolSlider \n\n**Returns** Returns the current volume slider position from 0 to 10 -GetNameOfZone ```\nAIRP = Los Santos International Airport \nALAMO = Alamo Sea \nALTA = Alta \nARMYB = Fort Zancudo \nBANHAMC = Banham Canyon Dr \nBANNING = Banning \nBEACH = Vespucci Beach \nBHAMCA = Banham Canyon \nBRADP = Braddock Pass \nBRADT = Braddock Tunnel \nBURTON = Burton \nCALAFB = Calafia Bridge \nCANNY = Raton Canyon \nCCREAK = Cassidy Creek \nCHAMH = Chamberlain Hills \nCHIL = Vinewood Hills \nCHU = Chumash \nCMSW = Chiliad Mountain State Wilderness \nCYPRE = Cypress Flats \nDAVIS = Davis \nDELBE = Del Perro Beach \nDELPE = Del Perro \nDELSOL = La Puerta \nDESRT = Grand Senora Desert \nDOWNT = Downtown \nDTVINE = Downtown Vinewood \nEAST_V = East Vinewood \nEBURO = El Burro Heights \nELGORL = El Gordo Lighthouse \nELYSIAN = Elysian Island \nGALFISH = Galilee \nGOLF = GWC and Golfing Society \nGRAPES = Grapeseed \nGREATC = Great Chaparral \nHARMO = Harmony \nHAWICK = Hawick \nHORS = Vinewood Racetrack \nHUMLAB = Humane Labs and Research \nJAIL = Bolingbroke Penitentiary \nKOREAT = Little Seoul \nLACT = Land Act Reservoir \nLAGO = Lago Zancudo \nLDAM = Land Act Dam \nLEGSQU = Legion Square \nLMESA = La Mesa \nLOSPUER = La Puerta \nMIRR = Mirror Park \nMORN = Morningwood \nMOVIE = Richards Majestic \nMTCHIL = Mount Chiliad \nMTGORDO = Mount Gordo \nMTJOSE = Mount Josiah \nMURRI = Murrieta Heights \nNCHU = North Chumash \nNOOSE = N.O.O.S.E \nOCEANA = Pacific Ocean \nPALCOV = Paleto Cove \nPALETO = Paleto Bay \nPALFOR = Paleto Forest \nPALHIGH = Palomino Highlands \nPALMPOW = Palmer-Taylor Power Station \nPBLUFF = Pacific Bluffs \nPBOX = Pillbox Hill \nPROCOB = Procopio Beach \nRANCHO = Rancho \nRGLEN = Richman Glen \nRICHM = Richman \nROCKF = Rockford Hills \nRTRAK = Redwood Lights Track \nSANAND = San Andreas \nSANCHIA = San Chianski Mountain Range \nSANDY = Sandy Shores \nSKID = Mission Row \nSLAB = Stab City \nSTAD = Maze Bank Arena \nSTRAW = Strawberry \nTATAMO = Tataviam Mountains \nTERMINA = Terminal \nTEXTI = Textile City \nTONGVAH = Tongva Hills \nTONGVAV = Tongva Valley \nVCANA = Vespucci Canals \nVESP = Vespucci \nVINE = Vinewood \nWINDF = Ron Alternates Wind Farm \nWVINE = West Vinewood \nZANCUDO = Zancudo River \nZP_ORT = Port of South Los Santos \nZQ_UAR = Davis Quartz \nPROL = Prologue / North Yankton\nISHeist = Cayo Perico Island\n``` +GetNameOfZone ```\nAIRP = Los Santos International Airport \nALAMO = Alamo Sea \nALTA = Alta \nARMYB = Fort Zancudo \nBANHAMC = Banham Canyon Dr \nBANNING = Banning \nBAYTRE = Baytree Canyon \nBEACH = Vespucci Beach \nBHAMCA = Banham Canyon \nBRADP = Braddock Pass \nBRADT = Braddock Tunnel \nBURTON = Burton \nCALAFB = Calafia Bridge \nCANNY = Raton Canyon \nCCREAK = Cassidy Creek \nCHAMH = Chamberlain Hills \nCHIL = Vinewood Hills \nCHU = Chumash \nCMSW = Chiliad Mountain State Wilderness \nCYPRE = Cypress Flats \nDAVIS = Davis \nDELBE = Del Perro Beach \nDELPE = Del Perro \nDELSOL = La Puerta \nDESRT = Grand Senora Desert \nDOWNT = Downtown \nDTVINE = Downtown Vinewood \nEAST_V = East Vinewood \nEBURO = El Burro Heights \nELGORL = El Gordo Lighthouse \nELYSIAN = Elysian Island \nGALFISH = Galilee \nGALLI = Galileo Park \nGOLF = GWC and Golfing Society \nGRAPES = Grapeseed \nGREATC = Great Chaparral \nHARMO = Harmony \nHAWICK = Hawick \nHORS = Vinewood Racetrack \nHUMLAB = Humane Labs and Research \nJAIL = Bolingbroke Penitentiary \nKOREAT = Little Seoul \nLACT = Land Act Reservoir \nLAGO = Lago Zancudo \nLDAM = Land Act Dam \nLEGSQU = Legion Square \nLMESA = La Mesa \nLOSPUER = La Puerta \nMIRR = Mirror Park \nMORN = Morningwood \nMOVIE = Richards Majestic \nMTCHIL = Mount Chiliad \nMTGORDO = Mount Gordo \nMTJOSE = Mount Josiah \nMURRI = Murrieta Heights \nNCHU = North Chumash \nNOOSE = N.O.O.S.E \nOBSERV = Galileo Observatory \nOCEANA = Pacific Ocean \nPALCOV = Paleto Cove \nPALETO = Paleto Bay \nPALFOR = Paleto Forest \nPALHIGH = Palomino Highlands \nPALMPOW = Palmer-Taylor Power Station \nPBLUFF = Pacific Bluffs \nPBOX = Pillbox Hill \nPROCOB = Procopio Beach \nRANCHO = Rancho \nRGLEN = Richman Glen \nRICHM = Richman \nROCKF = Rockford Hills \nRTRAK = Redwood Lights Track \nSANAND = San Andreas \nSANCHIA = San Chianski Mountain Range \nSANDY = Sandy Shores \nSKID = Mission Row \nSLAB = Stab City \nSTAD = Maze Bank Arena \nSTRAW = Strawberry \nTATAMO = Tataviam Mountains \nTERMINA = Terminal \nTEXTI = Textile City \nTONGVAH = Tongva Hills \nTONGVAV = Tongva Valley \nVCANA = Vespucci Canals \nVESP = Vespucci \nVINE = Vinewood \nWINDF = Ron Alternates Wind Farm \nWVINE = West Vinewood \nZANCUDO = Zancudo River \nZP_ORT = Port of South Los Santos \nZQ_UAR = Davis Quartz \nPROL = Prologue / North Yankton\nISHeist = Cayo Perico Island\n``` GetNavmeshRouteDistanceRemaining ```\nLooks like the last parameter returns true if the path has been calculated, while the first returns the remaining distance to the end of the path.\nReturn value of native is the same as GET_NAVMESH_ROUTE_RESULT\nLooks like the native returns an int for the path's state:\n1 - ???\n2 - ???\n3 - Finished Generating\n``` GetNavmeshRouteResult See [`GET_NAVMESH_ROUTE_DISTANCE_REMAINING`](#\\_0xC6F5C0BCDC74D62D) for more details. GetNetTypeFromEntity Gets the specific entity type (as an integer), which can be one of the following defined down below:\n\n#### FiveM:\n\n```cpp\nenum eNetObjEntityType\n{\n Automobile = 0,\n Bike = 1,\n Boat = 2,\n Door = 3,\n Heli = 4,\n Object = 5,\n Ped = 6,\n Pickup = 7,\n PickupPlacement = 8,\n Plane = 9,\n Submarine = 10,\n Player = 11,\n Trailer = 12,\n Train = 13\n};\n```\n\n#### RedM:\n\n```cpp\nenum eNetObjEntityType\n{\n Animal = 0,\n Automobile = 1,\n Bike = 2,\n Boat = 3,\n Door = 4,\n Heli = 5,\n Object = 6,\n Ped = 7,\n Pickup = 8,\n PickupPlacement = 9,\n Plane = 10,\n Submarine = 11,\n Player = 12,\n Trailer = 13,\n Train = 14,\n DraftVeh = 15,\n StatsTracker = 16,\n PropSet = 17,\n AnimScene = 18,\n GroupScenario = 19,\n Herd = 20,\n Horse = 21,\n WorldState = 22,\n WorldProjectile = 23,\n Incident = 24,\n Guardzone = 25,\n PedGroup = 26,\n CombatDirector = 27,\n PedSharedTargeting = 28,\n Persistent = 29\n};\n```\n\n**Parameters**\n- `entity`: The entity to get the specific type of.\n\n**Returns** The specific entity type returned as an integer value or -1 if the entity is invalid. @@ -799,12 +837,15 @@ GetNetworkTimeAccurate Returns the same value as [`GetNetworkTime`](#\\_0x7A5487 GetNextAudibleBeat \n\n**Parameters**\n- `timeInSeconds`: time in seconds until the start of the next beat\n- `bpm`: current tempo in beats per minute,\n- `beatNum`: integer beat within the bar\n\n**Returns** Returns information on beat information for any audible music. GetNextBlipInfoId \n\n**Parameters**\n- `blipSprite`: Sprite ID, see the [Game Reference](https://docs.fivem.net/docs/game-references/blips/) for the full list.\n\n**Returns** Returns the next blip ID in an interator that has the specified blip sprite.\n\n```lua\nfunction GetAllBlipsWithSprite(blip_sprite)\n local current_blip = GetFirstBlipInfoId(blip_sprite)\n local blips_array = {}\n\n if not DoesBlipExist(current_blip) then \n print('there are no blips with this sprite set') \n return blips_array \n end\n\n while DoesBlipExist(current_blip) do\n table.insert(blips_array, current_blip)\n current_blip = GetNextBlipInfoId(blip_sprite)\n end\n\n return blips_array\nend\n``` GetNextGpsDisabledZoneIndex Gets the next zone that has been disabled using SET_GPS_DISABLED_ZONE_AT_INDEX.\n\n```\nNativeDB Removed Parameter 1: int index\n```\n\n**Returns** The disabled zone index -GetNextWeatherTypeHashName Refer to [`SET_WEATHER_TYPE_NOW_PERSIST`](#\\_0xED712CA327900C8A) for weather types. +GetNextWeatherTypeHashName Refer to [`SET_WEATHER_TYPE_NOW`](#\\_0x29B487C359E19889) for weather types. GetNgstatBoolHash ```\nNeeds more research. Gets the stat name of a masked bool?\nsection - values used in the decompiled scripts:\n"_NGPSTAT_BOOL"\n"_NGTATPSTAT_BOOL"\n"_NGDLCPSTAT_BOOL"\n"_DLCBIKEPSTAT_BOOL"\n"_DLCGUNPSTAT_BOOL"\n"_GUNTATPSTAT_BOOL"\n"_DLCSMUGCHARPSTAT_BOOL"\n"_GANGOPSPSTAT_BOOL"\n"_BUSINESSBATPSTAT_BOOL"\n"_ARENAWARSPSTAT_BOOL"\n"_CASINOPSTAT_BOOL"\n"_CASINOHSTPSTAT_BOOL"\n"_HEIST3TATTOOSTAT_BOOL"\n``` GetNgstatIntHash ```\nNeeds more research. Gets the stat name of a masked int?\nsection - values used in the decompiled scripts:\n"_NGPSTAT_INT"\n"_MP_NGPSTAT_INT"\n"_MP_LRPSTAT_INT"\n"_MP_APAPSTAT_INT"\n"_MP_LR2PSTAT_INT"\n"_MP_BIKEPSTAT_INT"\n"_MP_IMPEXPPSTAT_INT"\n"_MP_GUNRPSTAT_INT"\n"_NGDLCPSTAT_INT"\n"_MP_NGDLCPSTAT_INT"\n"_DLCSMUGCHARPSTAT_INT"\n"_GANGOPSPSTAT_INT"\n"_BUSINESSBATPSTAT_INT"\n"_ARENAWARSPSTAT_INT"\n"_CASINOPSTAT_INT"\n"_CASINOHSTPSTAT_INT"\n``` -GetNthClosestVehicleNodeFavourDirection ```\nSee gtaforums.com/topic/843561-pathfind-node-types for node type info. 0 = paved road only, 1 = any road, 3 = water \np10 always equal 0x40400000 \np11 always equal 0 \n``` -GetNthClosestVehicleNodeId ```\nReturns the id. \n``` -GetNthClosestVehicleNodeWithHeading Get the nth closest vehicle node with its heading and total lane count.\nIf you need specific forward and backward lane counts use [GET_CLOSEST_ROAD](#\\_0x132F52BBA570FE92)\n\n```cpp\nenum eNodeFlags {\n NONE = 0,\n INCLUDE_SWITCHED_OFF_NODES = 1,\n INCLUDE_BOAT_NODES = 2,\n IGNORE_SLIPLANES = 4,\n IGNORE_SWITCHED_OFF_DEAD_ENDS = 8,\n}\n```\n\n**Parameters**\n- `x`: x position\n- `y`: y position\n- `z`: z position\n- `nthClosest`: nth closest node\n- `outPosition`: returned position of the found node\n- `heading`: returned heading of the found node\n- `totalLanes`: total lanes (forward + backward) of the found node\n- `searchFlags`: Flags used when searching for a node, see `eNodeFlags`\n- `zMeasureMult`: How strongly the difference in z direction should be weighted (defaults to 3.0)\n- `zTolerance`: How far apart the Z coords have to be before the zMeasureMult kicks in\n\n**Returns** Returns `true` if the node was found, or `false` if the node was not found, or was not streamed in. +GetNoLoadingScreen \n\n**Returns** The value that was set by [SET_NO_LOADING_SCREEN](#\\_0x5262CC1995D07E09)\n\n```lua\nSetNoLoadingScreen(true)\nprint(GetNoLoadingScreen()) -- will return true\n``` +GetNthClosestVehicleNode Same as [`GET_CLOSEST_VEHICLE_NODE`](#\\_0x240A18690AE96513), but returns the nth closest node instead of the first.\n\n**Parameters**\n- `x`: X coordinate\n- `y`: Y coordinate\n- `z`: Z coordinate\n- `nthClosest`: The index of the node to return\n- `outPosition`: Pointer to the found nodes coords\n- `nodeFlags`: Node flags, see [`GET_CLOSEST_VEHICLE_NODE`](#\\_0x240A18690AE96513)\n- `zMeasureMult`: How strongly the difference in the Z direction should be weighted\n- `zTolerance`: How far apart the Z coords have to be before `zMeasureMult` kicks in\n\n**Returns** Returns the nth closest vehicle node. +GetNthClosestVehicleNodeFavourDirection Like [`GET_CLOSEST_VEHICLE_NODE_WITH_HEADING`](#\\_0xFF071FB798B803B0), but returns the nth closest node instead of the first.\n\n**Parameters**\n- `x`: X coordinate\n- `y`: Y coordinate\n- `z`: Z coordinate\n- `desiredX`: The X direction to favour\n- `desiredY`: The Y direction to favour\n- `desiredZ`: The Z direction to favour\n- `nthClosest`: The index of the node to return\n- `outPosition`: Pointer to the found nodes coords\n- `outHeading`: Pointer to the found nodes heading\n- `nodeFlags`: Node flags, see [`GET_CLOSEST_VEHICLE_NODE`](#\\_0x240A18690AE96513)\n- `zMeasureMult`: How strongly the difference in the Z direction should be weighted\n- `zTolerance`: How far apart the Z coords have to be before `zMeasureMult` kicks in\n\n**Returns** Returns the nth closest vehicle node with its heading favouring the desired direction. +GetNthClosestVehicleNodeId \n\n**Parameters**\n- `x`: X coordinate\n- `y`: Y coordinate\n- `z`: Z coordinate\n- `nthClosest`: The index of the node to return\n- `nodeFlags`: Node flags, see [`GET_CLOSEST_VEHICLE_NODE`](#\\_0x240A18690AE96513)\n- `zMeasureMult`: How strongly the difference in the Z direction should be weighted\n- `zTolerance`: How far apart the Z coords have to be before `zMeasureMult` kicks in\n\n**Returns** Returns the nth closest vehicle nodes id. +GetNthClosestVehicleNodeIdWithHeading \n\n**Parameters**\n- `x`: X coordinate\n- `y`: Y coordinate\n- `z`: Z coordinate\n- `nthClosest`: The index of the node to return\n- `outPosition`: Pointer to the found nodes coords\n- `outHeading`: Pointer to the found nodes heading\n- `nodeFlags`: Node flags, see [`GET_CLOSEST_VEHICLE_NODE`](#\\_0x240A18690AE96513)\n- `zMeasureMult`: How strongly the difference in the Z direction should be weighted\n- `zTolerance`: How far apart the Z coords have to be before `zMeasureMult` kicks in\n\n**Returns** Returns the nth closest vehicle nodes id with its heading. +GetNthClosestVehicleNodeWithHeading Get the nth closest vehicle node with its heading and total lane count. If you need specific forward and backward lane counts use [`GET_CLOSEST_ROAD`](#\\_0x132F52BBA570FE92).\n\n**Parameters**\n- `x`: X coordinate\n- `y`: Y coordinate\n- `z`: Z coordinate\n- `nthClosest`: The index of the node to return\n- `outPosition`: Pointer to the found nodes coords\n- `outHeading`: Pointer to the found nodes heading\n- `totalLanes`: Pointer to the total lanes (forward + backward) of the found node\n- `nodeFlags`: Node flags, see [`GET_CLOSEST_VEHICLE_NODE`](#\\_0x240A18690AE96513)\n- `zMeasureMult`: How strongly the difference in the Z direction should be weighted\n- `zTolerance`: How far apart the Z coords have to be before `zMeasureMult` kicks in\n\n**Returns** Returns `true` if the node was found, or `false` if the node was not found, or was not streamed in. GetNumDlcVehicles Returns the total number of DLC vehicles. GetNumDlcWeaponComponents ```\nReturns the total number of DLC weapon components.\n``` GetNumDlcWeaponComponentsSp Returns the total number of DLC weapon components that are available in SP.\n\n```\nNativeDB Introduced: v2060\n``` @@ -842,8 +883,7 @@ GetOnlineVersion ```\nOnline version is defined here: update\\update.rpf\\common GetOnscreenKeyboardResult ```\nReturns NULL unless UPDATE_ONSCREEN_KEYBOARD() returns 1 in the same tick. \n``` GetParkedVehicleDensityMultiplier A getter for [SET_PARKED_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME](#\\_0xEAE6DCC7EEE3DB1D).\n\n**Returns** Returns parked vehicle density multiplier value. GetPauseMapPointerWorldPosition Returns the world position the pointer is hovering on the pause map.\n\n**Returns** A Vector3 with the pause map pointer world position X and Y values. -GetPauseMenuCursorPosition Name between `GET_ONSCREEN_KEYBOARD_RESULT` and `GET_PAUSE_MENU_STATE`. Likely, `GET_PAUSE_MENU_*`.\n\n**Returns** If the pause menu is open, it will return a Vector3, Z is always 0.\nIf the pause menu is closed, it will return Vector3.Zero -GetPauseMenuSelectionData ```\nlastItemMenuId: this is the menuID of the last selected item minus 1000 (lastItem.menuID - 1000)\nselectedItemMenuId: same as lastItemMenuId except for the currently selected menu item\nselectedItemUniqueId: this is uniqueID of the currently selected menu item\nwhen the pausemenu is closed:\nlastItemMenuId = -1\nselectedItemMenuId = -1\nselectedItemUniqueId = 0\nwhen the header gains focus:\nlastItemMenuId updates as normal or 0 if the pausemenu was just opened\nselectedItemMenuId becomes a unique id for the pausemenu page that focus was taken from (?) or 0 if the pausemenu was just opened\nselectedItemUniqueId = -1\nwhen focus is moved from the header to a pausemenu page:\nlastItemMenuId becomes a unique id for the pausemenu page that focus was moved to (?)\nselectedItemMenuId = -1\nselectedItemUniqueId updates as normal\n``` +GetPauseMenuPosition \n\n**Returns** This function returns the starting position (Top left) of the Pause Menu's body. GetPauseMenuState ```cpp\nenum ePauseMenuState\n{\n PM_INACTIVE = 0,\n PM_STARTING_UP = 5,\n PM_RESTARTING = 10,\n PM_READY = 15,\n PM_IN_STORE = 20,\n PM_IN_SC_MENU = 25,\n PM_SHUTTING_DOWN = 30,\n PM_IN_VIDEOEDITOR = 35,\n}\n``` GetPedAlertness ```\nReturns the ped's alertness (0-3). \nValues : \n0 : Neutral \n1 : Heard something (gun shot, hit, etc) \n2 : Knows (the origin of the event) \n3 : Fully alerted (is facing the event?) \nIf the Ped does not exist, returns -1. \n``` GetPedAmmoTypeFromWeapon ```\nReturns the current ammo type of the specified ped's specified weapon.\n\nMkII magazines will change the return value, like Pistol MkII returning AMMO_PISTOL without any components and returning AMMO_PISTOL_TRACER after Tracer Rounds component is attached.\n\nUse 0xF489B44DD5AF4BD9 if you always want AMMO_PISTOL.\n``` @@ -914,7 +954,7 @@ GetPedUsingVehicleDoor See eDoorId declared in [`SET_VEHICLE_DOOR_SHUT`](#\\_0x9 GetPedVisualFieldCenterAngle ```\nNativeDB Introduced: v1493\n``` GetPedheadshotTxdString ```\ngtaforums.com/topic/885580-ped-headshotmugshot-txd/ \n``` GetPickupHash ```\nreturns pickup hash.\n``` -GetPickupHashFromWeapon ```\nNativeDB Introduced: v1290\n``` +GetPickupHashFromWeapon ```\nNativeDB Introduced: v1290\n```\n\n**Returns** Returns the pickup hash for the given weapon hash GetPlayerCameraRotation Gets the current camera rotation for a specified player. This native is used server side when using OneSync.\n\n**Parameters**\n- `playerSrc`: The player handle.\n\n**Returns** The player's camera rotation. Values are in radians. GetPlayerFocusPos Gets the focus position (i.e. the position of the active camera in the game world) of a player.\n\n**Parameters**\n- `playerSrc`: The player to get the focus position of\n\n**Returns** Returns a `Vector3` containing the focus position of the player. GetPlayerFromServerId Gets a local client's Player ID from its server ID counterpart, assuming the passed `serverId` exists on the client.\n\nIf no matching client is found, or an invalid value is passed over as the `serverId` native's parameter, the native result will be `-1`.\n\nIt's worth noting that this native method can only retrieve information about clients that are culled to the connected client.\n\n**Parameters**\n- `serverId`: The player's server ID.\n\n**Returns** A valid Player ID if one is found, `-1` if not.\n\n```lua\n--We will assume the serverId is '4' in this scenario and that it's a valid serverId.\n\n-- Passing invalid Player IDs such as 'nil' or IDs that don't exist will result in playerId being -1.\n\nlocal playerId = GetPlayerFromServerId(serverId);\n\n-- If the resulting playerId is not invalid (not equal to -1)\nif playerId ~= -1 then\n -- Do our stuff on this player.\nend\n``` @@ -923,7 +963,7 @@ GetPlayerGroup ```\nReturns the group ID the player is member of. \n``` GetPlayerIdentifier To get the number of identifiers, use [GET_NUM_PLAYER_IDENTIFIERS](#\\_0xFF7F66AB)\n\nTo get a specific type of identifier, use [GET_PLAYER_IDENTIFIER_BY_TYPE](#\\_0xA61C8FC6)\n\n**Returns** Returns the identifier at the specific index, if out of bounds returns `null` GetPlayerIdentifierByType Get an identifier from a player by the type of the identifier.\nKnown [Identifiers](https://docs.fivem.net/docs/scripting-reference/runtimes/lua/functions/GetPlayerIdentifiers/#identifier-types)\n\n**Parameters**\n- `playerSrc`: The player to get the identifier for\n- `identifierType`: The string to match in an identifier, this can be `"license"` for example.\n\n**Returns** The identifier that matches the string provided\n\n```lua\nlocal playerLicenses = {}\n\nAddEventHandler('playerJoining', function()\n playerLicenses[source] = GetPlayerIdentifierByType(source, 'license')\nend)\n``` GetPlayerIndex ```\nReturns the same as PLAYER_ID and NETWORK_PLAYER_ID_TO_INT \n``` -GetPlayerInvincible ```\nReturns the Player's Invincible status. \nThis function will always return false if 0x733A643B5B0C53C1 is used to set the invincibility status. To always get the correct result, use this: \n bool IsPlayerInvincible(Player player) \n { \nauto addr = getScriptHandleBaseAddress(GET_PLAYER_PED(player)); \nif (addr) \n{ \n DWORD flag = *(DWORD *)(addr + 0x188); \n return ((flag & (1 << 8)) != 0) || ((flag & (1 << 9)) != 0); \n} \nreturn false; \n } \n============================================================ \nThis has bothered me for too long, whoever may come across this, where did anyone ever come up with this made up hash? 0x733A643B5B0C53C1 I've looked all over old hash list, and this nativedb I can not find that PC hash anywhere. What native name is it now or was it? \n``` +GetPlayerInvincible This native will only return true if a player was made invincible with [`SET_PLAYER_INVINCIBLE`](#\\_0x239528EACDC3E7DE).\n\nYou should use [`GET_PLAYER_INVINCIBLE_2`](#\\_0xF2E3912B) to get both [`SET_PLAYER_INVINCIBLE`](#\\_0x239528EACDC3E7DE) and [`SET_PLAYER_INVINCIBLE_KEEP_RAGDOLL_ENABLED`](#\\_0x6BC97F4F4BB3C04B) invincibility state.\n\n**Parameters**\n- `player`: The player index\n\n**Returns** A boolean to tell if the player is invincible. GetPlayerInvincible_2 Unlike [GET_PLAYER_INVINCIBLE](#\\_0xB721981B2B939E07) this native gets both [SET_PLAYER_INVINCIBLE_KEEP_RAGDOLL_ENABLED](#\\_0x6BC97F4F4BB3C04B) and [SET_PLAYER_INVINCIBLE](#\\_0x239528EACDC3E7DE) invincibility state.\n\n**Parameters**\n- `player`: The player id\n\n**Returns** A boolean to tell if the player is invincible. GetPlayerKillFallHeight A getter for [SET_PLAYER_KILL_FALL_HEIGHT](#\\_0xAEF2C6A4).\n\n**Returns** Returns the height from which the player will instantly die due to fall damage.\\\nThe default value is `15.0`. GetPlayerMaxHealth \n\n**Parameters**\n- `playerSrc`: The player handle @@ -933,7 +973,7 @@ GetPlayerMeleeWeaponDefenseModifier A getter for [SET_PLAYER_MELEE_WEAPON_DEFENS GetPlayerName Returns the players name from a specified player index\n\n**Parameters**\n- `player`: The player index, or -1 to get the local player ped.\n\n**Returns** The name of the queried player. "**Invalid**" if the player does not exist. GetPlayerParachuteModelOverride ```\nNativeDB Introduced: v2372\n``` GetPlayerParachuteTintIndex ```\nTints: \nNone = -1, \nRainbow = 0, \nRed = 1, \nSeasideStripes = 2, \nWidowMaker = 3, \nPatriot = 4, \nBlue = 5, \nBlack = 6, \nHornet = 7, \nAirFocce = 8, \nDesert = 9, \nShadow = 10, \nHighAltitude = 11, \nAirbone = 12, \nSunrise = 13, \n``` -GetPlayerPed Gets the ped for a specified player index.\n\n**Parameters**\n- `playerId`: The player index, or -1 to get the local player ped.\n\n**Returns** The specified player's ped, or 0 if invalid.\n\n```lua\nlocal playerIdx = GetPlayerFromServerId(source)\nlocal ped = GetPlayerPed(playerIdx)\n\n-- act on the ped\n``` +GetPlayerPed Gets the ped for a specified player index.\n\nNote: For performance reasons, usage of [`PLAYER_PED_ID`](#\\_0xD80958FC74E988A6) is recommended over the use of `GetPlayerPed(-1)` when wanting to acquire your local player ped. For more information, please refer to [this](https://forum.cfx.re/t/question-difference-between-getplayerped-1-and-playerpedid/539437/2) forum post.\n\n**Parameters**\n- `playerId`: The player index, or -1 to get the local player ped.\n\n**Returns** The specified player's ped, or 0 if invalid.\n\n```lua\nlocal playerIdx = GetPlayerFromServerId(source)\nlocal ped = GetPlayerPed(playerIdx)\n\n-- act on the ped\n``` GetPlayerPedScriptIndex ```\nDoes the same like PLAYER::GET_PLAYER_PED\n``` GetPlayerPeerStatistics ```cpp\nconst int ENET_PACKET_LOSS_SCALE = 65536;\n\nenum PeerStatistics\n{\n // PacketLoss will only update once every 10 seconds, use PacketLossEpoch if you want the time\n // since the last time the packet loss was updated.\n\n // the amount of packet loss the player has, needs to be scaled with PACKET_LOSS_SCALE\n PacketLoss = 0,\n // The variance in the packet loss\n PacketLossVariance = 1,\n // The time since the last packet update in ms, relative to the peers connection time\n PacketLossEpoch = 2,\n // The mean amount of time it takes for a packet to get to the client (ping)\n RoundTripTime = 3,\n // The variance in the round trip time\n RoundTripTimeVariance = 4,\n // Despite their name, these are only updated once every 5 seconds, you can get the last time this was updated with PacketThrottleEpoch\n // The last recorded round trip time of a packet\n LastRoundTripTime = 5,\n // The last round trip time variance\n LastRoundTripTimeVariance = 6,\n // The time since the last packet throttle update, relative to the peers connection time\n PacketThrottleEpoch = 7,\n};\n```\n\nThese statistics only update once every 10 seconds.\n\n**Parameters**\n- `playerSrc`: The player to get the stats of\n- `peerStatistic`: The statistic to get, this will error if its out of range\n\n**Returns** See `ENetStatisticType` for what this will return. GetPlayerPing See [GET_PLAYER_PEER_STATISTICS](#\\_0x9A928294) if you want more detailed information, like packet loss, and packet/rtt variance\n\n**Returns** Returns the mean amount of time a packet takes to get to the client @@ -961,7 +1001,7 @@ GetPositionInRecording ```\nDistance traveled in the vehicles current recording. GetPositionOfVehicleRecordingAtTime This native does no interpolation between pathpoints. The same position will be returned for all times up to the next pathpoint in the recording.\n\nSee [`REQUEST_VEHICLE_RECORDING`](#\\_0xAF514CABE74CBF15). GetPosixTime ```\nGets system time as year, month, day, hour, minute and second. \nExample usage: \n int year; \n int month; \n int day; \n int hour; \n int minute; \n int second; \n TIME::GET_POSIX_TIME(&year, &month, &day, &hour, &minute, &second); \n``` GetPowerSavingModeDuration ```\nReturns duration of how long the game has been in power-saving mode (aka "constrained") in milliseconds.\n``` -GetPrevWeatherTypeHashName Refer to [`SET_WEATHER_TYPE_NOW_PERSIST`](#\\_0xED712CA327900C8A) for weather types. +GetPrevWeatherTypeHashName Refer to [`SET_WEATHER_TYPE_NOW`](#\\_0x29B487C359E19889) for weather types. GetRadioStationName \n\n**Returns** Returns the name of the radio station with the specified index. This serves as the text label. GetRandomIntInRange_2 ```\nNativeDB Introduced: v1734\n``` GetRandomPedAtCoord ```\nGets a random ped in the x/y/zRadius near the x/y/z coordinates passed. \nPed Types: \nAny = -1 \nPlayer = 1 \nMale = 4 \nFemale = 5 \nCop = 6 \nHuman = 26 \nSWAT = 27 \nAnimal = 28 \nArmy = 29 \n``` @@ -991,18 +1031,18 @@ GetRopeUpdateOrder \n\n**Parameters**\n- `rope`: The rope to get the update orde GetRuntimeTextureHeight Gets the height of the specified runtime texture.\n\n**Parameters**\n- `tex`: A handle to the runtime texture.\n\n**Returns** The height in pixels. GetRuntimeTexturePitch Gets the row pitch of the specified runtime texture, for use when creating data for `SET_RUNTIME_TEXTURE_ARGB_DATA`.\n\n**Parameters**\n- `tex`: A handle to the runtime texture.\n\n**Returns** The row pitch in bytes. GetRuntimeTextureWidth Gets the width of the specified runtime texture.\n\n**Parameters**\n- `tex`: A handle to the runtime texture.\n\n**Returns** The width in pixels. -GetSafeCoordForPed ```\nFlags are:\n1 = 1 = B02_IsFootpath\n2 = 4 = !B15_InteractionUnk\n4 = 0x20 = !B14_IsInterior\n8 = 0x40 = !B07_IsWater\n16 = 0x200 = B17_IsFlatGround\nWhen onGround == true outPosition is a position located on the nearest pavement.\nWhen a safe coord could not be found the result of a function is false and outPosition == Vector3.Zero.\nIn the scripts these flags are used: 0, 14, 12, 16, 20, 21, 28. 0 is most commonly used, then 16.\n16 works for me, 0 crashed the script.\n``` +GetSafeCoordForPed ```cpp\nenum eSafePositionFlags {\n // Only navmesh polygons marked as pavement\n GSC_FLAG_ONLY_PAVEMENT = 1,\n // Only navmesh polygons not marked as "isolated"\n GSC_FLAG_NOT_ISOLATED = 2,\n // No navmesh polygons created from interiors\n GSC_FLAG_NOT_INTERIOR = 4,\n // No navmesh polygons marked as water\n GSC_FLAG_NOT_WATER = 8,\n // Only navmesh polygons marked as "network spawn candidate"\n GSC_FLAG_ONLY_NETWORK_SPAWN = 16,\n // Specify whether to use a flood-fill from the starting position, as opposed to scanning all polygons within the search volume\n GSC_FLAG_USE_FLOOD_FILL = 32\n}\n```\n\n**Parameters**\n- `x`: The X coordinate of the point to check.\n- `y`: The Y coordinate of the point to check.\n- `z`: The Z coordinate of the point to check.\n- `onlyOnPavement`: Sets the `GSC_FLAG_ONLY_PAVEMENT` flag.\n- `outPosition`: The location of the safe coord.\n- `flags`: The search flags.\n\n**Returns** Returns true if a safe coord was found and false otherwise. GetSafeZoneSize ```\nGets the scale of safe zone. if the safe zone size scale is max, it will return 1.0. \n``` -GetScaleformMovieCursorSelection Gets mouse selection data from scaleforms with mouse support. Must be checked every frame.\nReturns item index if using the COLOUR_SWITCHER\\_02 scaleform.\nSelection types, found in MOUSE_EVENTS.as:\nMOUSE_DRAG_OUT = 0;\nMOUSE_DRAG_OVER = 1;\nMOUSE_DOWN = 2;\nMOUSE_MOVE = 3;\nMOUSE_UP = 4;\nMOUSE_PRESS = 5;\nMOUSE_RELEASE = 6;\nMOUSE_RELEASE_OUTSIDE = 7;\nMOUSE_ROLL_OUT = 8;\nMOUSE_ROLL_OVER = 9;\nMOUSE_WHEEL_UP = 10;\nMOUSE_WHEEL_DOWN = 11;\n\nScaleforms that this works with:\n\n* COLOUR_SWITCHER\\_02\n* MP_RESULTS_PANEL\n* MP_NEXT_JOB_SELECTION\n* SC_LEADERBOARD\n Probably works with other scaleforms, needs more research.\n In order to use this Native you MUST have controls 239, 240, 237, 238 enabled!\n This native, due to its erroneous redundancy of the returned boolean value, works differently in C#: shifting the parameters (where `received` becomes `selectionType` and so on making the fourth parameter unused and always 0).\n\n**Parameters**\n- `scaleformHandle`: Handle of the scaleform\n- `received`: Returns a boolean indicating if the data was received successfully (in Lua).\n- `selectionType`: The type of MouseEvent specified above.\n- `context`: Context of the slot the mouse is hovering on.\n- `slotIndex`: Index of the slot the mouse is hovering on.\n\n**Returns** * **retVal** Returns true if MOUSE_EVENT callback from Scaleforms has been called.\n\n```lua\nlocal success, _eventType, _context, _itemId = GetScaleformMovieCursorSelection(scaleform)\n``` GetScaleformMovieMethodReturnValueBool \n\n**Parameters**\n- `methodReturn`: Operation handle returned by [`END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE`](#\\_0xC50AA39A577AF886)\n\n**Returns** The return value passed from actionscript to game code. GetScaleformMovieMethodReturnValueInt Used to get a return value from a scaleform function. Returns an int in the same way GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_STRING returns a string.\n\n**Parameters**\n- `method_return`: The return value of this native: `EndScaleformMovieMethodReturn`\n\n**Returns** Returns an int in the same way `GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_STRING` returns a string. GetScaleformMovieMethodReturnValueString Used to get a return value from a scaleform function. Returns a string in the same way GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT returns an int.\n\n**Parameters**\n- `method_return`: The return value of this native: `EndScaleformMovieMethodReturn`\n\n**Returns** Returns a string in the same way `GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT` returns an int.\n\n```lua\nlocal a = RequestScaleformMovie("translate") --scaleform gfx\nwhile not HasScaleformMovieLoaded(a) do\n Citizen.Wait(0)\nend\nBeginScaleformMovieMethod(a,"EnglishToChinese") --call function\nScaleformMovieMethodAddParamPlayerNameString("Good") --input\nlocal b = EndScaleformMovieMethodReturnValue()\nwhile true do\n if IsScaleformMovieMethodReturnValueReady(b) then\n local c = GetScaleformMovieMethodReturnValueString(b) --output\n print(c)\n break\n end\n Citizen.Wait(0)\nend\n``` GetScenarioPedDensityMultiplier A getter for [SET_SCENARIO_PED_DENSITY_MULTIPLIER_THIS_FRAME](#\\_0x7A556143A1C03898).\n\n**Returns** Returns scenario ped density multiplier value. GetScreenCoordFromWorldCoord ```\nConvert a world coordinate into its relative screen coordinate. (WorldToScreen)\nReturns a boolean; whether or not the operation was successful. It will return false if the coordinates given are not visible to the rendering camera.\nFor .NET users...\nVB:\nPublic Shared Function World3DToScreen2d(pos as vector3) As Vector2\n Dim x2dp, y2dp As New Native.OutputArgument\n Native.Function.Call(Of Boolean)(Native.Hash.GET_SCREEN_COORD_FROM_WORLD_COORD , pos.x, pos.y, pos.z, x2dp, y2dp)\n Return New Vector2(x2dp.GetResult(Of Single), y2dp.GetResult(Of Single))\n\n End Function\nC#:\nVector2 World3DToScreen2d(Vector3 pos)\n {\n var x2dp = new OutputArgument();\n var y2dp = new OutputArgument();\n Function.Call(Hash.GET_SCREEN_COORD_FROM_WORLD_COORD , pos.X, pos.Y, pos.Z, x2dp, y2dp);\n return new Vector2(x2dp.GetResult(), y2dp.GetResult());\n }\n//USE VERY SMALL VALUES FOR THE SCALE OF RECTS/TEXT because it is dramatically larger on screen than in 3D, e.g '0.05' small.\nUsed to be called _WORLD3D_TO_SCREEN2D\nI thought we lost you from the scene forever. It does seem however that calling SET_DRAW_ORIGIN then your natives, then ending it. Seems to work better for certain things such as keeping boxes around people for a predator missile e.g.\n``` -GetScreenResolution Hardcoded to always return 1280x720. Use [`_GET_ACTIVE_SCREEN_RESOLUTION`](?\\_0x873C9F3104101DD3) to retrieve the correct screen resolution. +GetScreenResolution Hardcoded to always return 1280x720. Use [`_GET_ACTIVE_SCREEN_RESOLUTION`](#\\_0x873C9F3104101DD3) to retrieve the correct screen resolution. GetScriptGfxPosition Calculates the effective X/Y fractions when applying the values set by `SET_SCRIPT_GFX_ALIGN` and\n`SET_SCRIPT_GFX_ALIGN_PARAMS`.\n\n**Parameters**\n- `x`: The input X coordinate.\n- `y`: The input Y coordinate.\n- `calculatedX`: A pointer to the calculated X value.\n- `calculatedY`: A pointer to the calculated Y value.\n\n```lua\nlocal calcX, calcX = GetScriptGfxPosition(0.2, 0.2)\n``` GetScriptTaskStatus Gets the status of a spesifed script-assigned task on the given ped. The return value is always an int between 0-7.\n\nYou can set taskHash to `SCRIPT_TASK_ANY` to check if any task is active, it will return 1 for active, 3 for no active.\n`SCRIPT_TASK_INVALID` can be similarly used, it returns 7 if there are any active task, and 3 if there are no active tasks.\n\ntaskHash list: https://alloc8or.re/gta5/doc/enums/eScriptTaskHash.txt\n\nReturns:\n\n```\n0 = WAITING_TO_START_TASK\n1 = PERFORMING_TASK\n2 = DORMANT_TASK\n3 = VACANT_STAGE\n7 = TASK_FINISHED_OR_NOT_FOUND\n```\n\n**Parameters**\n- `ped`: The ped the task is running on\n- `taskHash`: The hash of the task\n\n**Returns** The status of the script-assigned task.\n\n```lua\nlocal playerPed = PlayerPedId()\nlocal coords = GetOffsetFromEntityInWorldCoords(playerPed, 0.0, 6.0, 0.0)\nTaskGoStraightToCoord(playerPed, coords, 1.0, 5000, GetEntityHeading(playerPed), 0.15)\n\nCitizen.CreateThread(function()\n while true do\n local taskStatus = GetScriptTaskStatus(PlayerPedId(), "SCRIPT_TASK_GO_STRAIGHT_TO_COORD")\n print(taskStatus)\n if taskStatus == 7 then print("task was finished!"); break end\n Citizen.Wait(250)\n end\nend)\n``` GetSeatPedIsUsing \n\n**Parameters**\n- `ped`: the ped id\n\n**Returns** Returns the seat index for specified `ped`, if the ped is not sitting in a vehicle it will return -3. +GetSelectedPedWeapon \n\n**Returns** Hash: The weapon hash of the currently selected weapon. GetSequenceProgress ```\nreturned values:\n0 to 7 = task that's currently in progress, 0 meaning the first one.\n-1 no task sequence in progress.\n``` GetShapeTestResult Returns the result of a shape test.\n\nWhen used with an asynchronous shape test, this native should be looped until returning 0 or 2, after which the handle is invalidated.\n\nUnless the return value is 2, the other return values are undefined.\n\n**Parameters**\n- `shapeTestHandle`: A shape test handle.\n- `hit`: Whether or not the shape test hit any collisions.\n- `endCoords`: The resulting coordinates where the shape test hit a collision.\n- `surfaceNormal`: The surface normal of the hit position.\n- `entityHit`: Any dynamic entity hit by the shape test.\n\n**Returns** `0` if the handle is invalid, `1` if the shape test is still pending, or `2` if the shape test has completed, and the handle should be invalidated. GetShapeTestResultIncludingMaterial Returns the result of a shape test, also returning the material of any touched surface.\n\nWhen used with an asynchronous shape test, this native should be looped until returning 0 or 2, after which the handle is invalidated.\n\nUnless the return value is 2, the other return values are undefined.\n\n**Parameters**\n- `shapeTestHandle`: A shape test handle.\n- `hit`: Whether or not the shape test hit any collisions.\n- `endCoords`: The resulting coordinates where the shape test hit a collision.\n- `surfaceNormal`: The surface normal of the hit position.\n- `materialHash`: hash of the hit material or surface type, see materialFX.dat\n- `entityHit`: Any dynamic entity hit by the shape test.\n\n**Returns** `0` if the handle is invalid, `1` if the shape test is still pending, or `2` if the shape test has completed, and the handle should be invalidated. @@ -1034,6 +1074,7 @@ GetTextSubstringSlice ```\nReturns a substring that is between two specified pos GetTextureResolution ```\nReturns the texture resolution of the passed texture dict+name. \nNote: Most texture resolutions are doubled compared to the console version of the game. \n``` GetThrusterSideRcsThrottle \n\n**Parameters**\n- `jetpack`: The jetpack to check.\n\n**Returns** Returns a value representing the side RCS (Reaction Control System) throttle of the jetpack. The values range from `0.0` (no throttle) to `1.0` (full throttle). GetThrusterThrottle \n\n**Parameters**\n- `jetpack`: The jetpack to check.\n\n**Returns** Returns a value representing the main throttle of the jetpack. The values range from `0.0` (no throttle) to `1.0` (full throttle) +GetTimeBeforeVehicleWeaponReloadFinishes ```\nNativeDB Introduced: v3407\n``` GetTimeDifference ```\nSubtracts the second argument from the first. \n``` GetTimeOfLastPedWeaponDamage ```\nGET_TIME_*\n``` GetTimeOffset ```\nAdds the first argument to the second. \n``` @@ -1083,6 +1124,7 @@ GetVehicleCheatPowerIncrease A getter for [SET_VEHICLE_CHEAT_POWER_INCREASE](#\\ GetVehicleClass ```\nReturns an int \nVehicle Classes: \n0: Compacts \n1: Sedans \n2: SUVs \n3: Coupes \n4: Muscle \n5: Sports Classics \n6: Sports \n7: Super \n8: Motorcycles \n9: Off-road \n10: Industrial \n11: Utility \n12: Vans \n13: Cycles \n14: Boats \n15: Helicopters \n16: Planes \n17: Service \n18: Emergency \n19: Military \n20: Commercial \n21: Trains \n22: Open Wheel\nchar buffer[128]; \nstd::sprintf(buffer, "VEH_CLASS_%i", VEHICLE::GET_VEHICLE_CLASS(vehicle)); \nchar* className = UI::_GET_LABEL_TEXT(buffer); \n``` GetVehicleClassFromName ```\nFor a full enum, see here : pastebin.com/i2GGAjY0\nchar buffer[128];\nstd::sprintf(buffer, "VEH_CLASS_%i", VEHICLE::GET_VEHICLE_CLASS_FROM_NAME (hash));\nconst char* className = HUD::_GET_LABEL_TEXT(buffer);\n``` GetVehicleColor See [`SET_VEHICLE_CUSTOM_PRIMARY_COLOUR`](#\\_0x7141766F91D15BEA) and [`SET_VEHICLE_CUSTOM_SECONDARY_COLOUR`](#\\_0x36CED73BFED89754).\n\n**Parameters**\n- `vehicle`: The target vehicle +GetVehicleColoursWhichCanBeSet ```cpp\nenum eColourBitField {\n HAS_BODY_COLOUR1 = 1,\n HAS_BODY_COLOUR2 = 2,\n HAS_BODY_COLOUR3 = 4,\n HAS_BODY_COLOUR4 = 8,\n HAS_BODY_COLOUR5 = 16\n}\n```\n\n**Parameters**\n- `vehicle`: The vehicle handle\n\n**Returns** Returns a bitfield of the colours supported by the vehicle's shader. GetVehicleCountermeasureCount Similar to [`_GET_AIRCRAFT_BOMB_COUNT`](#\\_0xEA12BD130D7569A1), this gets the amount of countermeasures that are present on this vehicle.\n\nUse [`_SET_AIRCRAFT_COUNTERMEASURE_COUNT`](#\\_0x9BDA23BF666F0855) to set the current amount.\n\n**Parameters**\n- `aircraft`: The vehicle to get the amount of countermeasures from.\n\n**Returns** An int indicating the amount of countermeasures remaining on that plane.\n\n```lua\nlocal vehicle = GetVehiclePedIsIn(PlayerPedId(), false)\nprint("This plane has " .. GetAircraftCountermeasureCount(vehicle) .. " countermeasures left.")\n``` GetVehicleCurrentSlipstreamDraft ```\nReturns a float value between 0.0 and 3.0 related to its slipstream draft (boost/speedup).\nGET_VEHICLE_*\n``` GetVehicleDashboardCurrentGear Retrieves the current gear displayed on the dashboard of the vehicle the player is in, returned as a float. This value represents the gear shown in the instrument cluster, such as "R" (0.0) or positive values (e.g., 1.0, 2.0, etc.) for drive gears.\n\n**Returns** The current gear. @@ -1158,6 +1200,8 @@ GetVehicleTotalRepairs \n\n**Returns** Returns the total amount of repairs. Each GetVehicleTrailerVehicle ```\nGets the trailer of a vehicle and puts it into the trailer parameter. \n``` GetVehicleType Returns the type of the passed vehicle.\n\nFor client scripts, reference the more detailed [GET_VEHICLE_TYPE_RAW](#\\_0xDE73BC10) native.\n\n### Vehicle types\n\n* automobile\n* bike\n* boat\n* heli\n* plane\n* submarine\n* trailer\n* train\n\n**Parameters**\n- `vehicle`: The vehicle's entity handle.\n\n**Returns** If the entity is a vehicle, the vehicle type. If it is not a vehicle, the return value will be null. GetVehicleTypeRaw Returns the model type of the vehicle as defined by:\n\n```cpp\nenum VehicleType\n{\n VEHICLE_TYPE_NONE = -1,\n VEHICLE_TYPE_CAR = 0,\n VEHICLE_TYPE_PLANE = 1,\n VEHICLE_TYPE_TRAILER = 2,\n VEHICLE_TYPE_QUADBIKE = 3,\n VEHICLE_TYPE_DRAFT = 4,\n VEHICLE_TYPE_SUBMARINECAR = 5,\n VEHICLE_TYPE_AMPHIBIOUS_AUTOMOBILE = 6,\n VEHICLE_TYPE_AMPHIBIOUS_QUADBIKE = 7,\n VEHICLE_TYPE_HELI = 8,\n VEHICLE_TYPE_BLIMP = 9,\n VEHICLE_TYPE_AUTOGYRO = 10,\n VEHICLE_TYPE_BIKE = 11,\n VEHICLE_TYPE_BICYCLE = 12,\n VEHICLE_TYPE_BOAT = 13,\n VEHICLE_TYPE_TRAIN = 14,\n VEHICLE_TYPE_SUBMARINE = 15,\n};\n```\n\n**Parameters**\n- `vehicle`: The vehicle's entity handle.\n\n**Returns** Returns the vehicles model type +GetVehicleWeaponReloadTime ```\nNativeDB Introduced: v3407\n``` +GetVehicleWeaponRestrictedAmmo \n\n**Parameters**\n- `vehicle`: The vehicle handle\n- `weaponIndex`: The weapon index we're getting ammo for (see [SET_VEHICLE_WEAPON_RESTRICTED_AMMO](#\\_0x44CD1F493DB2A0A6) for information on how to access these slots).\n\n**Returns** Gets the current restricted ammo count for a particular vehicle weapon index on a vehicle. GetVehicleWheelBrakePressure Gets brake pressure of a wheel.\nMax number of wheels can be retrieved with the native GET_VEHICLE_NUMBER_OF_WHEELS.\nNormal values around 1.0f when braking. GetVehicleWheelFlags Gets the flags of a wheel.\nMax number of wheels can be retrieved with the native GET_VEHICLE_NUMBER_OF_WHEELS.\n\n**Returns** An unsigned int containing bit flags. GetVehicleWheelIsPowered Gets whether the wheel is powered.\nMax number of wheels can be retrieved with the native GET_VEHICLE_NUMBER_OF_WHEELS.\nThis is a shortcut to a flag in GET_VEHICLE_WHEEL_FLAGS. @@ -1219,12 +1263,12 @@ GetWeaponObjectFromPed ```\nDrops the current weapon and returns the object \nU GetWeaponRecoilShakeAmplitude A getter for the recoil shake amplitude of a weapon.\n\n**Parameters**\n- `weaponHash`: Weapon name hash.\n\n**Returns** The recoil shake amplitude of a weapon. GetWeapontypeGroup Gets and returns the hash of the group of the specified weapon (group names can be found/changed under "Group" in the weapons' meta file).\nNote that the group is **not** the same as the location on the weapon wheel.\n\n**Parameters**\n- `weaponHash`: The hash of the weapon.\n\n**Returns** Returns the hash of the group of the weapon. Hashes:| Group | Unsigned | Signed | Example |\n|:----------------------:|:----------:|:-----------:|:-----------------------:|\n| GROUP_DIGISCANNER | 3539449195 | -755518101 | WEAPON_DIGISCANNER |\n| GROUP_FIREEXTINGUISHER | 4257178988 | -37788308 | WEAPON_FIREEXTINGUISHER |\n| GROUP_HACKINGDEVICE | 1175761940 | 1175761940 | WEAPON_HACKINGDEVICE |\n| GROUP_HEAVY | 2725924767 | -1569042529 | WEAPON_RPG |\n| GROUP_MELEE | 3566412244 | -728555052 | WEAPON_BAT |\n| GROUP_METALDETECTOR | 3759491383 | -535475913 | WEAPON_METALDETECTOR |\n| GROUP_MG | 1159398588 | 1159398588 | WEAPON_COMBATMG |\n| GROUP_NIGHTVISION | 3493187224 | -801780072 | GADGET_NIGHTVISION |\n| GROUP_PARACHUTE | 431593103 | 431593103 | GADGET_PARACHUTE |\n| GROUP_PETROLCAN | 1595662460 | 1595662460 | WEAPON_PETROLCAN |\n| GROUP_PISTOL | 416676503 | 416676503 | WEAPON_PISTOL |\n| GROUP_RIFLE | 970310034 | 970310034 | WEAPON_ASSAULTRIFLE |\n| GROUP_SHOTGUN | 860033945 | 860033945 | WEAPON_PUMPSHOTGUN |\n| GROUP_SMG | 3337201093 | -957766203 | WEAPON_MICROSMG |\n| GROUP_SNIPER | 3082541095 | -1212426201 | WEAPON_SNIPERRIFLE |\n| GROUP_STUNGUN | 690389602 | 690389602 | WEAPON_STUNGUN |\n| GROUP_THROWN | 1548507267 | 1548507267 | WEAPON_SNOWBALL |\n| GROUP_TRANQILIZER | 75159441 | 75159441 | WEAPON_TRANQUILIZER |\n| GROUP_UNARMED | 2685387236 | -1609580060 | WEAPON_UNARMED |\n\n```lua\nprint(GetWeapontypeGroup(`WEAPON_PISTOL`)) -- Outputs the hash of GROUP_PISTOL\nprint(GetWeapontypeGroup(`WEAPON_RPG`)) -- Outputs the hash of GROUP_HEAVY\nprint(GetWeapontypeGroup(`WEAPON_SNOWBALL`)) -- Outputs the hash of GROUP_THROWN\nprint(GetWeapontypeGroup(`WEAPON_MUSKET`)) -- Outputs the hash of GROUP_SNIPER\nprint(GetWeapontypeGroup(GetSelectedPedWeapon(PlayerPedId()))) -- Outputs the hash of the currently selected weapon\n``` GetWeapontypeModel ```\nReturns the model of any weapon. \nCan also take an ammo hash? \nsub_6663a(&l_115B, WEAPON::GET_WEAPONTYPE_MODEL(${ammo_rpg})); \n``` -GetWeatherTypeTransition Refer to [`SET_WEATHER_TYPE_NOW_PERSIST`](#\\_0xED712CA327900C8A) for weather types. +GetWeatherTypeTransition Refer to [`SET_WEATHER_TYPE_NOW`](#\\_0x29B487C359E19889) for weather types. GetWindDirection Used for hunting in singleplayer and for golfing in both sp and online. The [`GET_HEADING_FROM_VECTOR_2D`](#\\_0x2FFB6B224F4B2926) native can be used to get the wind heading from the direction.\n\n**Returns** The wind direction\n\n```lua\nCreateThread(function()\n while true do\n local windDirection = GetWindDirection()\n\n -- Gets the wind direction in degrees (math.atan converts the inverse tangent into radians and then math.deg converts it from radians to degrees)\n local degrees = math.deg(math.atan(windDirection.x, windDirection.y))\n print("wind direction in degrees:", degrees)\n\n -- Draws an airplane marker above the player's head to show the wind direction\n local coords = GetEntityCoords(PlayerPedId())\n DrawMarker(7, coords.x, coords.y, coords.z + 1.0, windDirection.x, windDirection.y, 0.0, 0.0, 0.0, 0.0, 2.0, 2.0, 2.0, 255, 128, 0, 50, false, false, 2, false, nil, nil, false)\n\n -- Get world heading from the direction\n print("wind direction in world heading:", GetHeadingFromVector_2d(windDirection.x, windDirection.y))\n\n Wait(0)\n end\nend)\n``` GetWindSpeed \n\n**Returns** The wind speed in meters per second\n\n```lua\nlocal beaufortScale = {\n [0] = 0.2,\n [1] = 1.5,\n [2] = 3.3,\n [3] = 5.4,\n [4] = 7.9,\n [5] = 10.7,\n [6] = 13.8,\n [7] = 17.1,\n [8] = 20.7,\n [9] = 24.4,\n [10] = 28.4,\n [11] = 32.6,\n [12] = 32.7\n}\n\nlocal windSpeed = GetWindSpeed()\nfor i = 0, 12 do\n if windSpeed <= beaufortScale[i] or i == 12 then\n print(string.format("The current wind speed (%.2f m/s) is the equivalent to Beaufort number %s on the Beaufort scale", windSpeed, i))\n break\n end\nend\n``` GetWorldCoordFromScreenCoord Converts a screen coordinate into its relative world coordinate.\n\n**Parameters**\n- `screenX`: A screen horizontal axis coordinate (0.0 - 1.0).\n- `screenY`: A screen vertical axis coordinate (0.0 - 1.0).\n- `worldVector`: The world coord vector pointer.\n- `normalVector`: The screen normal vector pointer.\n\n**Returns** A Vector3 representing the world coordinates relative to the specified screen coordinates and a screen plane normal Vector3 (normalised).\n\n```lua\nCreateThread(function()\n while true do\n local screenX = GetDisabledControlNormal(0, 239)\n local screenY = GetDisabledControlNormal(0, 240)\n\n local world, normal = GetWorldCoordFromScreenCoord(screenX, screenY)\n\n local depth = 10\n\n local target = world + normal * depth\n\n DrawSphere(target.x, target.y, target.z, 0.5, 255, 0, 0, 0.5)\n\n Wait(0)\n end\nend)\n``` GetWorldPositionOfEntityBone ```\nReturns the coordinates of an entity-bone. \n``` -GetZoneFromNameId ```\n'zoneName' corresponds to an entry in 'popzone.ipl'. \nAIRP = Los Santos International Airport \nALAMO = Alamo Sea \nALTA = Alta \nARMYB = Fort Zancudo \nBANHAMC = Banham Canyon Dr \nBANNING = Banning \nBEACH = Vespucci Beach \nBHAMCA = Banham Canyon \nBRADP = Braddock Pass \nBRADT = Braddock Tunnel \nBURTON = Burton \nCALAFB = Calafia Bridge \nCANNY = Raton Canyon \nCCREAK = Cassidy Creek \nCHAMH = Chamberlain Hills \nCHIL = Vinewood Hills \nCHU = Chumash \nCMSW = Chiliad Mountain State Wilderness \nCYPRE = Cypress Flats \nDAVIS = Davis \nDELBE = Del Perro Beach \nDELPE = Del Perro \nDELSOL = La Puerta \nDESRT = Grand Senora Desert \nDOWNT = Downtown \nDTVINE = Downtown Vinewood \nEAST_V = East Vinewood \nEBURO = El Burro Heights \nELGORL = El Gordo Lighthouse \nELYSIAN = Elysian Island \nGALFISH = Galilee \nGOLF = GWC and Golfing Society \nGRAPES = Grapeseed \nGREATC = Great Chaparral \nHARMO = Harmony \nHAWICK = Hawick \nHORS = Vinewood Racetrack \nHUMLAB = Humane Labs and Research \nJAIL = Bolingbroke Penitentiary \nKOREAT = Little Seoul \nLACT = Land Act Reservoir \nLAGO = Lago Zancudo \nLDAM = Land Act Dam \nLEGSQU = Legion Square \nLMESA = La Mesa \nLOSPUER = La Puerta \nMIRR = Mirror Park \nMORN = Morningwood \nMOVIE = Richards Majestic \nMTCHIL = Mount Chiliad \nMTGORDO = Mount Gordo \nMTJOSE = Mount Josiah \nMURRI = Murrieta Heights \nNCHU = North Chumash \nNOOSE = N.O.O.S.E \nOCEANA = Pacific Ocean \nPALCOV = Paleto Cove \nPALETO = Paleto Bay \nPALFOR = Paleto Forest \nPALHIGH = Palomino Highlands \nPALMPOW = Palmer-Taylor Power Station \nPBLUFF = Pacific Bluffs \nPBOX = Pillbox Hill \nPROCOB = Procopio Beach \nRANCHO = Rancho \nRGLEN = Richman Glen \nRICHM = Richman \nROCKF = Rockford Hills \nRTRAK = Redwood Lights Track \nSANAND = San Andreas \nSANCHIA = San Chianski Mountain Range \nSANDY = Sandy Shores \nSKID = Mission Row \nSLAB = Stab City \nSTAD = Maze Bank Arena \nSTRAW = Strawberry \nTATAMO = Tataviam Mountains \nTERMINA = Terminal \nTEXTI = Textile City \nTONGVAH = Tongva Hills \nTONGVAV = Tongva Valley \nVCANA = Vespucci Canals \nVESP = Vespucci \nVINE = Vinewood \nWINDF = Ron Alternates Wind Farm \nWVINE = West Vinewood \nZANCUDO = Zancudo River \nZP_ORT = Port of South Los Santos \nZQ_UAR = Davis Quartz \n``` +GetZoneFromNameId Refer to https://docs.fivem.net/docs/game-references/zones/ for a list of all zones including their integer ID, string ID, short name and full name\n\n**Parameters**\n- `zoneName`: The zone name like "Z_RMAN2", most-left column of popzone.ipl\n\n**Returns** The zone ID, index in the popzone.ipl file starting with 1\n\n```lua\nlocal zoneId = GetZoneFromNameId("Z_GOLF3")\nprint(zoneId) -- 3\n``` GetZoneScumminess Gets the zone scumminess level, used to calculate the cellphone signal strength.\n\n```cpp\nenum eZoneScumminess\n{\n SCUMMINESS_POSH = 0,\n SCUMMINESS_NICE = 1,\n SCUMMINESS_ABOVE_AVERAGE = 2,\n SCUMMINESS_BELOW_AVERAGE = 3,\n SCUMMINESS_CRAP = 4,\n SCUMMINESS_SCUM = 5\n}\n```\n\n**Parameters**\n- `zoneId`: The zone id\n\n**Returns** The zone scumminess level GiveAchievementToPlayer ```\nAchievements from 0-57\nmore achievements came with update 1.29 (freemode events update), I'd say that they now go to 60, but I'll need to check.\n``` GiveDelayedWeaponToPed ```\nGives a weapon to PED with a delay, example:\nWEAPON::GIVE_DELAYED_WEAPON_TO_PED(PED::PLAYER_PED_ID(), MISC::GET_HASH_KEY("WEAPON_PISTOL"), 1000, false)\n``` @@ -1243,7 +1287,7 @@ HasAnimEventFired ```\nif (ENTITY::HAS_ANIM_EVENT_FIRED(PLAYER::PLAYER_PED_ID(), HasAnimSetLoaded Gets whether the specified animation set has finished loading. An animation set provides movement animations for a ped.\n\nAnimation set and clip set are synonymous. See [`SET_PED_MOVEMENT_CLIPSET`](#\\_0xAF8A94EDE7712BEF). HasAsyncInstallFinished ```\nHardcoded to always return true.\n``` HasBulletImpactedInArea ```\np3 - possibly radius? \n``` -HasButtonCombinationJustBeenEntered ```\nThis native appears on the cheat_controller script and tracks a combination of buttons, which may be used to toggle cheats in-game. Credits to ThreeSocks for the info. The hash contains the combination, while the "amount" represents the amount of buttons used in a combination. The following page can be used to make a button combination: gta5offset.com/ts/hash/\nINT_SCORES_SCORTED was a hash collision\n``` +HasButtonCombinationJustBeenEntered ```\nThis native appears on the cheat_controller script and tracks a combination of buttons, which may be used to toggle cheats in-game. Credits to ThreeSocks for the info. The hash contains the combination, while the "amount" represents the amount of buttons used in a combination. \nINT_SCORES_SCORTED was a hash collision\n``` HasCheatStringJustBeenEntered ```\nGet inputted "Cheat code", for example:\nwhile (TRUE)\n{\n if (MISC::_557E43C447E700A8(${fugitive}))\n {\n // Do something.\n }\n SYSTEM::WAIT(0);\n}\nCalling this will also set the last saved string hash to zero.\n``` HasClipSetLoaded ```\nAlias for HAS_ANIM_SET_LOADED. \n``` HasCloudRequestsFinished ```\nSets the value of the specified variable to 0.\nAlways returns true.\n``` @@ -1259,6 +1303,7 @@ HasEntityCollidedWithAnything ```\nCalled on tick. \nTested with vehicles, retu HasFilledVehiclePopulation ```\nHAS_*\n``` HasLoadedMpDataSet \n\n**Returns** Returns true if the audio for the Multiplayer data set has loaded HasLoadedSpDataSet \n\n**Returns** Returns true if the audio for the Single Player data set has loaded +HasMenuLayoutChangedEventOccurred Make sure to use [`GET_MENU_LAYOUT_CHANGED_EVENT_DETAILS`](#\\_0x7E17BE53E1AAABAF) when this function returns true in a frame.\n\n**Returns** Returns true every frame when a layout change event is active. Do note you can only check this with one script at a time.\nLayout change events become active whenever the player navigates the menu up or down. HasMinimapOverlayLoaded Returns whether or not the specific minimap overlay has loaded.\n\n**Parameters**\n- `id`: A minimap overlay ID.\n\n**Returns** A boolean indicating load status. HasModelLoaded Returns whether the specified model (archetype) is currently loaded.\n\nNote that this will return 'true' even if the model has been requested and loaded by something other than the current script, if you're intending to actually use the model in a later frame, you should call REQUEST_MODEL anyway.\n\n**Parameters**\n- `model`: The model hash to check for.\n\n**Returns** A boolean indicating whether the archetype is loaded (true) or not (false). HasObjectBeenBroken ```\nNativeDB Added Parameter 2: Any p1\n``` @@ -1267,11 +1312,13 @@ HasPedGotWeapon ```\np2 should be FALSE, otherwise it seems to always return FAL HasPlayerBeenShotByCop \n\n**Parameters**\n- `ms`: Time since last bullet fired\n- `p2`: Always false HasResumedFromSuspend ```\nHardcoded to return false.\n``` HasScaleformMovieFilenameLoaded ```\nOnly values used in the scripts are:\n"heist_mp"\n"heistmap_mp"\n"instructional_buttons"\n"heist_pre"\n``` +HasScaleformMovieNamedLoaded Check if a Scaleform movie with the given name has been loaded.\n\n```\nNativeDB Introduced: v3407\n```\n\n**Parameters**\n- `scaleformHandle`: Scaleform movie handle\n- `scaleformName`: Name of the Scaleform movie to check\n\n**Returns** Returns `true` if the named Scaleform movie is loaded, `false` otherwise. HasScriptLoaded Returns if a script has been loaded into the game. Used to see if a script was loaded after requesting. HasSoundFinished \n\n**Returns** Returns true if the sound has finished playing, false otherwise. HasThisAdditionalTextLoaded ```\nChecks if the specified gxt has loaded into the passed slot. \n``` HasVehicleBeenDamagedByBullets \n\n**Parameters**\n- `vehicle`: The target vehicle.\n\n**Returns** Returns whether or not the target vehicle has been damaged by bullets. HasVehicleGotProjectileAttached ```\nThird Parameter = unsure, but pretty sure it is weapon hash \n--> get_hash_key("weapon_stickybomb") \nFourth Parameter = unsure, almost always -1 \n``` +HasWeaponReloadingInVehicle ```\nNativeDB Introduced: v3407\n``` HideAreaAndVehicleNameThisFrame ```\nHIDE_*_THIS_FRAME\n\nHides area and vehicle name HUD components for one frame.\n``` HideHudAndRadarThisFrame ```\nI think this works, but seems to prohibit switching to other weapons (or accessing the weapon wheel) \n``` HideHudComponentThisFrame This function hides various HUD (Heads-up Display) components.\n\nListed below are the integers and the corresponding HUD component.\n\n* 1 : WANTED_STARS\n* 2 : WEAPON_ICON\n* 3 : CASH\n* 4 : MP_CASH\n* 5 : MP_MESSAGE\n* 6 : VEHICLE_NAME\n* 7 : AREA_NAME\n* 8 : VEHICLE_CLASS\n* 9 : STREET_NAME\n* 10 : HELP_TEXT\n* 11 : FLOATING_HELP_TEXT\\_1\n* 12 : FLOATING_HELP_TEXT\\_2\n* 13 : CASH_CHANGE\n* 14 : RETICLE\n* 15 : SUBTITLE_TEXT\n* 16 : RADIO_STATIONS\n* 17 : SAVING_GAME\n* 18 : GAME_STREAM\n* 19 : WEAPON_WHEEL\n* 20 : WEAPON_WHEEL_STATS\n* 21 : HUD_COMPONENTS\n* 22 : HUD_WEAPONS\n\nThese integers also work for the [`SHOW_HUD_COMPONENT_THIS_FRAME`](#\\_0x0B4DF1FA60C0E664) native, but instead shows the HUD Component. @@ -1280,7 +1327,7 @@ HideVehicleTombstone ```\nNativeDB Introduced: v1604\n``` HintAmbientAudioBank This native is marked as a deprecated native internally, use [HINT_SCRIPT_AUDIO_BANK](#\\_0xFB380A29641EC31A) instead HintMissionAudioBank This is marked as a deprecated function internally, please use [HINT_SCRIPT_AUDIO_BANK](#\\_0xFB380A29641EC31A) instead. HintScriptAudioBank Hints that this bank would be good to load if there are free slots.\nDoes not guarentee loading of the bank, [REQUEST_SCRIPT_AUDIO_BANK](#\\_0xFE02FFBED8CA9D99) MUST be used as normal before triggering sounds"\n\nThis native has a new argument on newer game builds:\n\n* **playerBits**: likely used to specifiy players to sync to as a bit mask (1 << (0-128)) -HudDisplayLoadingScreenTips Displays loading screen tips, requires `_0x56C8B608CFD49854` to be called beforehand. +HudDisplayLoadingScreenTips Displays loading screen tips.\nSeems to do the same as [`_THEFEED_DISPLAY_LOADING_SCREEN_TIPS`](#\\_0x15CFA549788D35EF).\nRequires [`THEFEED_AUTO_POST_GAMETIPS_ON`](#0\\_x56C8B608CFD49854) to be called beforehand.\nCall [`_THEFEED_DISABLE_LOADING_SCREEN_TIPS`](#\\_0x32888337579A5970) to disable immediately, or [`THEFEED_AUTO_POST_GAMETIPS_OFF`](#\\_0xADED7F5748ACAFE6) to disable after the current tip.\n\nExample result:\n![](https://i.imgur.com/hzaHuPb.png)\n\n```lua\nHudDisplayLoadingScreenTips()\n``` HudForceWeaponWheel ```\nForces the weapon wheel to show/hide.\n``` HudSetWeaponWheelTopSlot ```\nSet the active slotIndex in the wheel weapon to the slot associated with the provided Weapon hash\n``` HudWeaponWheelGetSelectedHash ```\nReturns the weapon hash to the selected/highlighted weapon in the wheel\n``` @@ -1296,6 +1343,7 @@ InvalidateIdleCam Resets the idle camera timer. Calling that in a loop once ever InvalidateVehicleIdleCam Resets the vehicle idle camera timer. Calling this in a loop will disable the idle camera.\n\n```lua\nCitizen.CreateThread(function()\n while true do\n InvalidateIdleCam()\n InvalidateVehicleIdleCam()\n Wait(1000) --The idle camera activates after 30 second so we don't need to call this per frame\n end\nend)\n``` IsAimCamThirdPersonActive ```\nIS_A*\n``` IsAlarmPlaying \n\n**Returns** Returns true if an alarm is currently playing with the specified name\n\n```lua\nlocal bAlarmPlaying = IsAlarmPlaying("PORT_OF_LS_HEIST_FORT_ZANCUDO_ALARMS")\n``` +IsAllowedIndependentCameraModes \n\n**Returns** Returns if the "Allow Independent Camera Modes" setting in Pause Menu is turned On or Off. IsAmbientSpeechDisabled \n\n**Returns** Returns true if ambient speech for the ped has been disabled IsAmbientSpeechPlaying \n\n**Returns** Returns true if the ped is currently playing ambient speech IsAmbientZoneEnabled \n\n**Returns** Returns true if the given ambient zone is allowed to be active @@ -1316,6 +1364,13 @@ IsCamActive ```\nReturns whether or not the passed camera handle is active. \n` IsCamPlayingAnim [Animations list](https://alexguirre.github.io/animations-list/) IsCinematicCamInputActive ```\nNativeDB Introduced: v1493\n``` IsCollisionMarkedOutside Returns true if the collision at the specified coords is marked as being outside (false if there's an interior) +IsColshapeCircle > This native only works in FiveM for GTAV Enhanced.\n\nReturns whether the collision shape is a circle type.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n\n**Returns** `true` if the collision shape is a circle, `false` otherwise. +IsColshapeCuboid > This native only works in FiveM for GTAV Enhanced.\n\nReturns whether the collision shape is a cuboid type.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n\n**Returns** `true` if the collision shape is a cuboid, `false` otherwise. +IsColshapeCylinder > This native only works in FiveM for GTAV Enhanced.\n\nReturns whether the collision shape is a cylinder type.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n\n**Returns** `true` if the collision shape is a cylinder, `false` otherwise. +IsColshapeEntityTypeSet > This native only works in FiveM for GTAV Enhanced.\n\nReturns whether the collision shape has a specific entity type enabled for detection.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n- `entityType`: The entity type index to check.\n\n**Returns** `true` if the entity type is enabled for this collision shape, `false` otherwise. +IsColshapePolygon > This native only works in FiveM for GTAV Enhanced.\n\nReturns whether the collision shape is a polygon type.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n\n**Returns** `true` if the collision shape is a polygon, `false` otherwise. +IsColshapeRectangle > This native only works in FiveM for GTAV Enhanced.\n\nReturns whether the collision shape is a rectangle type.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n\n**Returns** `true` if the collision shape is a rectangle, `false` otherwise. +IsColshapeSphere > This native only works in FiveM for GTAV Enhanced.\n\nReturns whether the collision shape is a sphere type.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n\n**Returns** `true` if the collision shape is a sphere, `false` otherwise. IsCommandLineBenchmarkValueSet ```\nReturns true if command line option '-benchmark' is set.\n``` IsControlEnabled \n\n**Parameters**\n- `padIndex`: The control system instance to use. See [`ENABLE_ALL_CONTROL_ACTIONS`](#\\_0xA5FFE9B05F199DE7).\n- `control`: The [control ID](https://docs.fivem.net/docs/game-references/controls/#controls) to check. IsControlJustPressed Returns whether a control was newly pressed since the last check.\n\n**Parameters**\n- `padIndex`: The control system instance to use. See [`ENABLE_ALL_CONTROL_ACTIONS`](#\\_0xA5FFE9B05F199DE7).\n- `control`: The [control ID](https://docs.fivem.net/docs/game-references/controls/#controls) to check.\n\n**Returns** True if the control was pressed. @@ -1338,8 +1393,8 @@ IsDuiAvailable Returns whether or not a browser is created for a specified DUI b IsDuplicityVersion Gets whether or not this is the CitizenFX server.\n\n**Returns** A boolean value. IsDurangoVersion \n\n**Returns** Hard-coded to always return 0. IsEntityAPed \n\n**Parameters**\n- `entity`: The entity to check if it's a Ped.\n\n**Returns** Whether the entity is a Ped. -IsEntityAtCoord ```\nChecks if entity is within x/y/zSize distance of x/y/z. \nLast three are unknown ints, almost always p7 = 0, p8 = 1, p9 = 0 \n``` -IsEntityAtEntity ```\nChecks if entity1 is within the box defined by x/y/zSize of entity2. \nLast three parameters are almost alwasy p5 = 0, p6 = 1, p7 = 0 \n``` +IsEntityAtCoord Checks if the entity is within the given square of size xSize, ySize, zSize centered around the given coordinates.\n\nThe sizes given are the apothem (half of side) of the square, so a size of 5 would result in a square of 10x10, not 5x5.\n\nFor the highlightArea, if do3dCheck is true, the marker will be drawn at the bottom of the target area. So if the square is centered on the ground with a zSize larger than 0, the marker will appear under the ground.\nThe marker also doesn't scale, so it is always the same size (around half a meter).\nSo unfortunately the marker isn't that useful as it doesn't convey the correct information about the area (the marker doesn't reflect when the player is actually in the marker or not)\n\n**Parameters**\n- `entity`: The entity to check the position of\n- `xPos`: The position of the square along the x-axis\n- `yPos`: The position of the square along the y-axis\n- `zPos`: The position of the square along the z-axis (only applicable if do3dCheck is true)\n- `xSize`: The apothem of the square along the x-axis\n- `ySize`: The apothem of the square along the y-axis\n- `zSize`: The apothem of the square along the z-axis (only applicable if do3dCheck is true)\n- `highlightArea`: Whether to draw a marker (yellow cylindrical marker at the given coords)\n- `do3dCheck`: Whether to check the z-axis\n- `transportMode`: Checks the transport mode the ped is using, only does something if entity is a ped. Transport modes are: 0 (any), 1 (on foot), 2 (in vehicle)\n\n**Returns** A boolean value which represents if the entity is within the given square area.\n\n```lua\n-- Simple demonstration which slides the ped along the x and y axis until the ped is outside the given area\nlocal offset = 10\nwhile IsEntityAtCoord(PlayerPedId(), coords.x, coords.y, coords.z, 20.0, 20.0, 20.0, false, false, 0) do\n offset += 0.1\n local targetCoords = coords + vector3(offset, offset, 0)\n SetEntityCoords(PlayerPedId(), targetCoords.x, targetCoords.y, targetCoords.z)\n Citizen.Wait(0)\nend\nprint(i) -- Prints 20.1, as expected\n``` +IsEntityAtEntity Checks if entity is within the specified axis aligned box around the target entity.\n\n```cpp\nenum eTransportMode {\n SCRIPT_TM_ANY = 0,\n SCRIPT_TM_ON_FOOT = 1,\n SCRIPT_TM_IN_VEHICLE = 2\n};\n```\n\n**Parameters**\n- `entity`: The source entity handle.\n- `target`: The target entity handle.\n- `xSize`: The x size of the axis aligned box around the target entity to check.\n- `ySize`: The y size of the axis aligned box around the target entity to check.\n- `zSize`: The z size of the axis aligned box around the target entity to check.\n- `do3dCheck`: If the check should be 2d or 3d.\n- `transportMode`: The transport mode. Returns early if the entity is not in that mode of transportation. IsEntityAttached \n\n**Parameters**\n- `entity`: The entity to check if it is attached to another entity.\n\n**Returns** Whether the entity is attached to another entity.\n\n```lua\nlocal ped = PlayerPedId()\n\nif IsEntityAttached(ped) then\n DetachEntity(ped, true, true)\nend\n``` IsEntityDead ```\nNativeDB Added Parameter 2: BOOL p1\n``` IsEntityInAngledArea p10 is some entity flag check, also used in [`IS_ENTITY_AT_ENTITY`](#\\_0x751B70C3D034E187), [`IS_ENTITY_IN_AREA`](#\\_0x54736AA40E271165) and [`IS_ENTITY_AT_COORD`](#\\_0x20B60995556D004F).\n\nSee [`IS_POINT_IN_ANGLED_AREA`](#\\_0x2A70BAE8883E4C81) for the definition of an angled area.\n\n**Parameters**\n- `x1`: X dimension of the angled area 'origin'\n- `y1`: Y dimension of the angled area 'origin'\n- `z1`: Z dimension of the angled area 'origin'\n- `x2`: X dimension of the angled area 'extent'\n- `y2`: Y dimension of the angled area 'extent'\n- `z2`: Z dimension of the angled area 'extent'\n- `width`: Width of the angled area\n- `debug`: a debug flag invoking functions in the same path as `DRAW_MARKER`\n- `includez`: If true, include the Z dimension when doing the height check; otherwise the query becomes two-dimensional @@ -1347,6 +1402,7 @@ IsEntityOnScreen Determines whether the screen position of the specified entity IsEntityPlayingAnim See also [`IS_SCRIPTED_SCENARIO_PED_USING_CONDITIONAL_ANIM`](#\\_0x6EC47A344923E1ED)\n\n```\nTaken from ENTITY::IS_ENTITY_PLAYING_ANIM(PLAYER::PLAYER_PED_ID(), "creatures@shark@move", "attack_player", 3) \np4 is always 3 in the scripts. \ntaskFlag: \n2 - Check synchronized scene \n```\n\n[Animations list](https://alexguirre.github.io/animations-list/) IsEntityPositionFrozen A getter for [FREEZE_ENTITY_POSITION](#\\_0x428CA6DBD1094446).\n\n**Parameters**\n- `entity`: The entity to check for\n\n**Returns** Boolean stating if it is frozen or not.\n\n```lua\nlocal isFrozen = IsEntityPositionFrozen(PlayerPedId())\n``` IsEntityStatic ```\nA static ped will not react to natives like "APPLY_FORCE_TO_ENTITY" or "SET_ENTITY_VELOCITY" and oftentimes will not react to task-natives like "AI::TASK_COMBAT_PED". The only way I know of to make one of these peds react is to ragdoll them (or sometimes to use CLEAR_PED_TASKS_IMMEDIATELY(). Static peds include almost all far-away peds, beach-combers, peds in certain scenarios, peds crossing a crosswalk, peds walking to get back into their cars, and others. If anyone knows how to make a ped non-static without ragdolling them, please edit this with the solution. \n^ Attach a phCollider to the ped. \n``` +IsEntryPointForSeatClear Check if a entry point for a certain seat is clear, useful for checking if a vehicle seat is accesible.\nIf you park your vehicle near a wall and the ped cannot enter/exit this side, the return value toggles from true (not blocked) to false (blocked).\n\nKeep in mind, with checkSide set to true, that only certain vehicles have entry points on both sides for the same seat, like motorcycles, most normal vehicles don't have this and if the native doesn't find a entry point with the given parameters it will always return false. So for most normal usecases leaving checkSide set to false would result in the expected behavior.\n\n**Parameters**\n- `ped`: The ped to check.\n- `vehicle`: The vehicle to check.\n- `seatIndex`: See eSeatPosition declared in [`IS_VEHICLE_SEAT_FREE`](#\\_0x22AC59A870E6A669).\n- `checkSide`: True to check the side of the entry point relative to the vehicle\n- `leftSide`: When checkSide is true together with this it only checks if entrypoints on the left side of the vehicle are clear, and for the right side when given false\n\n**Returns** True if the entry point is accesible and the area is clear for the given ped. IsExplosionActiveInArea \n\n**Parameters**\n- `explosionType`: See [`ADD_EXPLOSION`](#\\_0xE3AD2BDBAEE269AC). IsExplosionInAngledArea See [`IS_POINT_IN_ANGLED_AREA`](#\\_0x2A70BAE8883E4C81) for the definition of an angled area.\n\n**Parameters**\n- `explosionType`: explosion enum, -1 for any explosion type. See [ADD_EXPLOSION](#\\_0xE3AD2BDBAEE269AC).\n- `x1`: X dimension of the angled area 'origin'\n- `y1`: Y dimension of the angled area 'origin'\n- `z1`: Z dimension of the angled area 'origin'\n- `x2`: X dimension of the angled area 'extent'\n- `y2`: Y dimension of the angled area 'extent'\n- `z2`: Z dimension of the angled area 'extent'\n- `width`: Width of the angled area IsExplosionInArea \n\n**Parameters**\n- `explosionType`: See [`ADD_EXPLOSION`](#\\_0xE3AD2BDBAEE269AC). @@ -1378,7 +1434,7 @@ IsMultiplayerChatActive ```\nReturns whether or not the text chat (MULTIPLAYER_C IsMusicOneshotPlaying \n\n**Returns** Returns true if a one shot is currently playing or prepared IsNavmeshLoadedInArea ```\nReturns whether navmesh for the region is loaded. The region is a rectangular prism defined by it's top left deepest corner to it's bottom right shallowest corner. \nIf you can re-word this so it makes more sense, please do. I'm horrible with words sometimes... \n``` IsNavmeshRequiredRegionOwnedByAnyThread ```\nIS_*\n``` -IsNextWeatherType Refer to [`SET_WEATHER_TYPE_NOW_PERSIST`](#\\_0xED712CA327900C8A) for weather types. +IsNextWeatherType Refer to [`SET_WEATHER_TYPE_NOW`](#\\_0x29B487C359E19889) for weather types. IsNitrousActive ```\nNativeDB Introduced: 3095\n```\n\nDetermines if the nitrous is currently activated in the specified vehicle.\n\n**Parameters**\n- `vehicle`: The vehicle to check.\n\n**Returns** Returns `true` if nitrous is active, otherwise `false`.\n\n```lua\n-- Retrieve the player ped\nlocal playerPed = PlayerPedId()\n\n-- Retrieve the vehicle the player is currently in. \nlocal vehicle = GetVehiclePedIsIn(playerPed, false)\n\n-- Check if the vehicle exists in the game world.\nif vehicle == 0 then return end\n\n-- Print whether nitrous is active in the vehicle (True or False).\nprint(IsNitrousActive(vehicle))\n``` IsNuiFocusKeepingInput Checks if keyboard input is enabled during NUI focus using `SET_NUI_FOCUS_KEEP_INPUT`.\n\n**Returns** True or false. IsNuiFocused Returns the current NUI focus state previously set with `SET_NUI_FOCUS`.\n\n**Returns** True or false. @@ -1409,6 +1465,7 @@ IsPedInCombat Examines whether the ped is engaged in combat; when given a target IsPedInCover ```\np1 is nearly always 0 in the scripts. \n``` IsPedInCurrentConversation \n\n**Returns** Returns true if the ped is in the currently playing conversation IsPedInMeleeCombat ```\nNotes: The function only returns true while the ped is: \nA.) Swinging a random melee attack (including pistol-whipping) \nB.) Reacting to being hit by a melee attack (including pistol-whipping) \nC.) Is locked-on to an enemy (arms up, strafing/skipping in the default fighting-stance, ready to dodge+counter). \nYou don't have to be holding the melee-targetting button to be in this stance; you stay in it by default for a few seconds after swinging at someone. If you do a sprinting punch, it returns true for the duration of the punch animation and then returns false again, even if you've punched and made-angry many peds \n``` +IsPedInSphereAreaOfAnyEnemyPeds ```\nNativeDB Introduced: v3407\n```\n\n**Parameters**\n- `ped`: The ped to check.\n- `x`: X coordinate\n- `y`: Y coordinate\n- `z`: Z coordinate\n- `range`: Radius of sphere.\n\n**Returns** Returns `true` if ped is within range of any enemies, `false` otherwise. IsPedInVehicle ```\nGets a value indicating whether the specified ped is in the specified vehicle. \nIf 'atGetIn' is false, the function will not return true until the ped is sitting in the vehicle and is about to close the door. If it's true, the function returns true the moment the ped starts to get onto the seat (after opening the door). Eg. if false, and the ped is getting into a submersible, the function will not return true until the ped has descended down into the submersible and gotten into the seat, while if it's true, it'll return true the moment the hatch has been opened and the ped is about to descend into the submersible. \n``` IsPedInWrithe This native checks if a ped is on the ground, in pain from a (gunshot) wound.\n\n**Returns** Returns `true` if the ped is in [writhe](https://dictionary.cambridge.org/dictionary/english/writhe), `false` otherwise. IsPedInjured Indicates whether this ped's health is below its injured threshold.\nThe default threshold is 100, these are stored in the `pedhealth.meta` file located in `common:\\data\\`\n\n### Below are some of the values\n\n| InjuredHealthThreshold | Name |\n|------------------------|-----------|\n| 100.000000 | Strong |\n| 100.000000 | Average |\n| 100.000000 | Weak |\n\n**Parameters**\n- `ped`: The ped to check for injuries.\n\n**Returns** Returns `true` if the ped is injured, `false` otherwise. @@ -1419,6 +1476,7 @@ IsPedOpeningADoor ```\nIS_PED_*\n\nReturns true if the ped is currently opening IsPedRagdoll ```\nIf the ped handle passed through the parenthesis is in a ragdoll state this will return true. \n``` IsPedReloading ```\nReturns whether the specified ped is reloading. \n``` IsPedRingtonePlaying \n\n**Returns** Returns true if the peds ringtone is currently playing +IsPedSheltered Returns whether the specified ped is currently sheltered.\nA ped is considered sheltered if they are under a **roof**, a **bridge**, inside a **tunnel**, or within a **vehicle with a solid roof**, meaning they are not directly exposed to the open sky.\n\n**Parameters**\n- `ped`: The ped entity to check.\n\n**Returns** Returns `true` if the ped is sheltered, `false` otherwise.\n\n```lua\n-- Check if the player's ped is currently under a shelter.\nlocal playerPed = PlayerPedId()\nlocal isSheltered = IsPedSheltered(playerPed)\n\nif isSheltered then\n print("The player is currently sheltered.")\nelse\n print("The player is out in the open.")\nend\n``` IsPedShooting ```\nReturns whether the specified ped is shooting. \n``` IsPedSittingInAnyVehicle ```\nDetect if ped is in any vehicle \n[True/False] \n``` IsPedSittingInVehicle ```\nDetect if ped is sitting in the specified vehicle \n[True/False] \n``` @@ -1432,7 +1490,6 @@ IsPedheadshotReady ```\ngtaforums.com/topic/885580-ped-headshotmugshot-txd/ \n` IsPedheadshotValid ```\ngtaforums.com/topic/885580-ped-headshotmugshot-txd/ \n``` IsPlayerBattleAware ```\nReturns true if an unk value is greater than 0.0f \n``` IsPlayerBeingArrested ```\nReturn true while player is being arrested / busted. \nIf atArresting is set to 1, this function will return 1 when player is being arrested (while player is putting his hand up, but still have control) \nIf atArresting is set to 0, this function will return 1 only when the busted screen is shown. \n``` -IsPlayerCamControlDisabled ```\nReturns true when the player is not able to control the cam i.e. when running a benchmark test, switching the player or viewing a cutscene. \nNote: I am not 100% sure if the native actually checks if the cam control is disabled but it seems promising. \n``` IsPlayerClimbing ```\nReturns TRUE if the player ('s ped) is climbing at the moment. \n``` IsPlayerCommerceInfoLoaded > This native is deprecated and may be removed in a future version. Use [`IS_PLAYER_COMMERCE_INFO_LOADED_EXT`](#\\_0x1D14F4FE) instead.\n\nRequests whether or not the commerce data for the specified player has loaded.\n\n**Parameters**\n- `playerSrc`: The player handle\n\n**Returns** A boolean. IsPlayerCommerceInfoLoadedExt Requests whether or not the commerce data for the specified player has loaded from Tebex.\n\n**Parameters**\n- `playerSrc`: The player handle\n\n**Returns** A boolean. @@ -1449,11 +1506,12 @@ IsPlayerRidingTrain ```\nReturns true if the player is riding a train. \n``` IsPlayerSwitchInProgress ```\nReturns true if the player is currently switching, false otherwise. \n(When the camera is in the sky moving from Trevor to Franklin for example) \n``` IsPlayerUsingSuperJump \n\n**Parameters**\n- `playerSrc`: The player handle\n\n**Returns** A boolean. IsPlaylistUnk ```\nNativeDB Introduced: v1604\n``` -IsPointInAngledArea An **angled area** is an X-Z oriented rectangle with three parameters:\n\n1. **origin**: the mid-point along a base edge of the rectangle;\n2. **extent**: the mid-point of opposite base edge on the other Z;\n3. **width**: the length of the base edge; (named derived from logging strings `CNetworkRoadNodeWorldStateData`).\n\nThe oriented rectangle can then be derived from the direction of the two points (`norm(origin - extent)`), its orthonormal, and the width, e.g:\n\n1. [golf_mp](https://i.imgur.com/JhsQAK9.png)\n2. [am_taxi](https://i.imgur.com/TJWCZaT.jpg)\n\n**Parameters**\n- `xPos`: The x coordinate.\n- `yPos`: The y coordinate.\n- `zPos`: The z coordinate.\n- `x1`: X dimension of the angled area 'origin'\n- `y1`: Y dimension of the angled area 'origin'\n- `z1`: Z dimension of the angled area 'origin'\n- `x2`: X dimension of the angled area 'extent'\n- `y2`: Y dimension of the angled area 'extent'\n- `z2`: Z dimension of the angled area 'extent'\n- `width`: Width of the angled area\n- `p10`: a debug flag invoking functions in the same path as `DRAW_MARKER`\n- `includez`: If true, include the Z dimension when doing the height check; otherwise the query becomes two-dimensional +IsPointInAngledArea An **angled area** is an X-Z oriented rectangle with three parameters:\n\n1. **origin**: the mid-point along a base edge of the rectangle;\n2. **extent**: the mid-point of opposite base edge on the other Z;\n3. **width**: the length of the base edge; (named derived from logging strings `CNetworkRoadNodeWorldStateData`).\n\nThe oriented rectangle can then be derived from the direction of the two points (`norm(origin - extent)`), its orthonormal, and the width, e.g:\n\n1. ![golf_mp](https://i.imgur.com/WoIozPt.png)\n2. ![am_taxi](https://i.imgur.com/lipbffH.png)\n\n**Parameters**\n- `xPos`: The x coordinate.\n- `yPos`: The y coordinate.\n- `zPos`: The z coordinate.\n- `x1`: X dimension of the angled area 'origin'\n- `y1`: Y dimension of the angled area 'origin'\n- `z1`: Z dimension of the angled area 'origin'\n- `x2`: X dimension of the angled area 'extent'\n- `y2`: Y dimension of the angled area 'extent'\n- `z2`: Z dimension of the angled area 'extent'\n- `width`: Width of the angled area\n- `p10`: a debug flag invoking functions in the same path as `DRAW_MARKER`\n- `includez`: If true, include the Z dimension when doing the height check; otherwise the query becomes two-dimensional +IsPointInsideColshape > This native only works in FiveM for GTAV Enhanced.\n\nTests whether a 3D point is inside the specified collision shape.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n- `x`: Point X coordinate.\n- `y`: Point Y coordinate.\n- `z`: Point Z coordinate.\n\n**Returns** `true` if the point is inside the collision shape, `false` otherwise. IsPointOnRoad ```\nGets a value indicating whether the specified position is on a road. \nThe vehicle parameter is not implemented (ignored). \n``` IsPopMultiplierAreaUnk ```\nNativeDB Introduced: v1290\n``` IsPositionOccupied The BOOL parameters that are documented have not been confirmed. They are just documented from what I've found during testing. They may not work as expected in all cases.\n\n**Parameters**\n- `x`: X coordinate of the position to check.\n- `y`: Y coordinate of the position to check.\n- `z`: Z coordinate of the position to check.\n- `range`: The range, seems to not be very accurate during testing.\n- `p4`: Unknown, when set to true it seems to always return true no matter what I try.\n- `checkVehicles`: Check for any vehicles in that area.\n- `checkPeds`: Check for any peds in that area.\n- `p7`: Unknown.\n- `p8`: Unknown.\n- `ignoreEntity`: This entity will be ignored if it's in the area. Set to 0 if you don't want to exclude any entities.\n- `p10`: Unknown.\n\n**Returns** Returns true if there is anything in that location matching the provided parameters. -IsPrevWeatherType Refer to [`SET_WEATHER_TYPE_NOW_PERSIST`](#\\_0xED712CA327900C8A) for weather types. +IsPrevWeatherType Refer to [`SET_WEATHER_TYPE_NOW`](#\\_0x29B487C359E19889) for weather types. IsProjectileInArea ```\nDetermines whether there is a projectile within the specified coordinates. The coordinates form a rectangle. \nownedByPlayer = only projectiles fired by the player will be detected. \n``` IsProjectileTypeInAngledArea See [`IS_POINT_IN_ANGLED_AREA`](#\\_0x2A70BAE8883E4C81) for the definition of an angled area.\n\n```\nNativeDB Removed Parameter 7: float p7\n```\n\n**Parameters**\n- `x1`: X dimension of the angled area 'origin'\n- `y1`: Y dimension of the angled area 'origin'\n- `z1`: Z dimension of the angled area 'origin'\n- `x2`: X dimension of the angled area 'extent'\n- `y2`: Y dimension of the angled area 'extent'\n- `z2`: Z dimension of the angled area 'extent'\n- `width`: Width of the angled area IsProjectileTypeInArea ```\nDetermines whether there is a projectile of a specific type within the specified coordinates. The coordinates form a axis-aligned bounding box. \n``` @@ -1500,9 +1558,9 @@ IsTrackedPedVisible ```\nreturns whether or not a ped is visible within your FOV IsTrainCaboose \n\n**Parameters**\n- `train`: The train handle\n\n**Returns** Returns true if the train is the caboose of the chain. IsTurretSeat \n\n**Parameters**\n- `vehicle`: The vehicle to check.\n- `seatIndex`: See eSeatPosition declared in [`IS_VEHICLE_SEAT_FREE`](#\\_0x22AC59A870E6A669). IsTvPlaylistItemPlaying ```\nIS_*\n``` +IsUpdatingMpGamerTagNameAndCrewDetails When this native returns true, do not call [`SET_MP_GAMER_TAG_NAME`](#\\_0xDEA2B8283BAA3944).\n\n**Parameters**\n- `playerId`: Local ID of the player.\n\n**Returns** Returns if game code is currently updating gamer tag and crew details for a player's name tag. IsUsingKeyboard \n\n**Parameters**\n- `padIndex`: The control system instance to use. See [`ENABLE_ALL_CONTROL_ACTIONS`](#\\_0xA5FFE9B05F199DE7). IsUsingKeyboard_2 \n\n**Parameters**\n- `padIndex`: The control system instance to use. See [`ENABLE_ALL_CONTROL_ACTIONS`](#\\_0xA5FFE9B05F199DE7). -IsValidMpGamerTagMovie ```\nIS_*\n``` IsVehicleAConvertible Determines if a vehicle is a convertible with an animatable roof. This native checks if the specified vehicle model features a convertible roof that can be lowered or raised through an animation.\n\n```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `vehicle`: The vehicle to check.\n- `checkRoofExtras`: When set to `false`, the native checks only for vehicles with an animatable convertible roof. Set to `true` to include additional checks for vehicles that might have a non-animatable roof (i.e., using vehicle extras)\n\n**Returns** Returns `true` if the vehicle is a convertible with an animatable roof or if `checkRoofExtras` is `true` and the vehicle has a roof (animatable or not). Returns `false` if the vehicle does not meet the criteria.\n\n```lua\nlocal vehicle = GetVehiclePedIsIn(PlayerPedId(), false)\nif IsVehicleAConvertible(vehicle, false) then\n print("The vehicle is a convertible with an animatable roof.")\nelse\n print("The vehicle is not a convertible or does not have an animatable roof.")\nend\n``` IsVehicleAttachedToTowTruck ```\nScripts verify that towTruck is the first parameter, not the second. \n``` IsVehicleAudiblyDamaged \n\n**Returns** Returns true if the vehicle has any audible damage effects applied to it. @@ -1515,15 +1573,16 @@ IsVehicleEngineOnFire Only ever used once in decompiled scripts: **am_pi_menu**: IsVehicleInBurnout ```\nReturns whether the specified vehicle is currently in a burnout. \nvb.net \nPublic Function isVehicleInBurnout(vh As Vehicle) As Boolean \n Return Native.Function.Call(Of Boolean)(Hash.IS_VEHICLE_IN_BURNOUT, vh) \n End Function \n``` IsVehicleInGarageArea ```\ngarageName example "Michael - Beverly Hills"\n``` IsVehicleInSubmarineMode ```\nNativeDB Introduced: v1290\n``` -IsVehicleModHswExclusive ```\nmpsum2_g9ec\n```\n\n```\nNativeDB Introduced: v2699\n``` +IsVehicleModGen9Exclusive \n\n**Parameters**\n- `vehicle`: The vehicle handle\n- `modType`: The mod type (see [`SET_VEHICLE_MOD`](#\\_0x6AF0636DDEDCB6DD))\n- `modIndex`: The mod index\n\n**Returns** Returns whether the specified mod is exclusive to gen9 or not. IsVehicleNeonLightEnabled ```\nindices: \n0 = Left \n1 = Right \n2 = Front \n3 = Back \n``` IsVehicleNodeIdValid ```\nReturns true if the id is non zero. \n``` IsVehicleOnAllWheels ```\nPublic Function isVehicleOnAllWheels(vh As Vehicle) As Boolean \nReturn Native.Function.Call(Of Boolean)(Hash.IS_VEHICLE_ON_ALL_WHEELS, vh) \n End Function \n``` +IsVehicleOnBoostPad ```\nNativeDB Introduced: v3407\n```\n\n**Parameters**\n- `vehicle`: The vehicle to check.\n\n**Returns** Return `true` if the vehicle is on a boost pad, `false` otherwise. IsVehicleParachuteActive Does not work for vehicle of type: CBike, CBmx, CBoat, CTrain, CSubmarine. IsVehicleRadioOn \n\n**Parameters**\n- `vehicle`: The vehicle to check\n\n**Returns** Returns true if the given vehicle's radio on\n\n```lua\nlocal radioEnabled = IsVehicleRadioEnabled(GetVehiclePedIsIn(PlayerPedId(), false))\nprint(radioEnabled)\n``` IsVehicleSearchlightOn ```\nPossibly: Returns whether the searchlight (found on police vehicles) is toggled on. \n``` -IsVehicleSeatAccessible ```\nCheck if a vehicle seat is accessible. If you park your vehicle near a wall and the ped cannot enter/exit this side, the return value toggles from true (not blocked) to false (blocked).\nside = only relevant for bikes/motorcycles to check if the left (false)/right (true) side is blocked.\nonEnter = check if you can enter (true) or exit (false) a vehicle.\n```\n\n**Parameters**\n- `vehicle`: The vehicle to check.\n- `seatIndex`: See eSeatPosition declared in [`IS_VEHICLE_SEAT_FREE`](#\\_0x22AC59A870E6A669). IsVehicleSeatFree Seat indices range from -1 to [`GET_VEHICLE_MAX_NUMBER_OF_PASSENGERS`](#\\_0xA7C4F2C6E744A550) minus one.\n\n```cpp\n// CTaskExitVehicleSeat::eSeatPosition - 1\nenum eSeatPosition\n{\n SF_FrontDriverSide = -1,\n SF_FrontPassengerSide = 0,\n SF_BackDriverSide = 1,\n SF_BackPassengerSide = 2,\n SF_AltFrontDriverSide = 3,\n SF_AltFrontPassengerSide = 4,\n SF_AltBackDriverSide = 5,\n SF_AltBackPassengerSide = 6,\n};\n```\n\n```\nNativeDB Added Parameter 3: BOOL isTaskRunning\n\nisTaskRunning = on true the function returns already false while a task on the target seat is running (TASK_ENTER_VEHICLE/TASK_SHUFFLE_TO_NEXT_VEHICLE_SEAT) - on false only when a ped is finally sitting in the seat.\n```\n\n**Parameters**\n- `vehicle`: The vehicle to check.\n- `seatIndex`: The eSeatPosition or -2 for **any** vehicle seat. +IsVehicleSirenAudioOn Checks if the siren audio is currently playing on the given vehicle.\n\nThis only checks the sound not the lights. A vehicle can have its siren lights active while the audio is silent, for example when [`SET_VEHICLE_HAS_MUTED_SIRENS`](#\\_0xD8050E0EB60CF274) has been used to suppress the sound.\n\n**Parameters**\n- `vehicle`: The vehicle to check.\n\n**Returns** Returns `true` if the siren audio is currently playing, `false` if it is silent or the vehicle does not have a siren.\n\n```lua\nlocal vehicle = GetVehiclePedIsIn(PlayerPedId(), false)\n\nif IsVehicleSirenAudioOn(vehicle) then\n print("Siren is audible")\nend\n``` IsVehicleSirenOn Returns whether the vehicle's lights and sirens are on.\n\n**Returns** Returns false if siren and lights are disabled or true if they are enabled.\n\n```lua\nlocal veh = GetVehiclePedIsIn(PlayerPedId())\nprint(tostring(IsVehicleSirenOn(veh))\n``` IsVehicleSlipstreamLeader \n\n**Returns** True if the vehicle is being slipstreamed by another vehicle IsVehicleSprayable ```\nReturns false if the vehicle has the FLAG_NO_RESPRAY flag set.\n``` @@ -1534,7 +1593,7 @@ IsVehicleTyreBurst ```cpp\nenum eVehicleWheels\n{\n WHEEL_LF = 0, // Vehicle Lef IsVehicleWheelBrokenOff Getter for [BREAK_OFF_VEHICLE_WHEEL](?\\_0xA274CADB).\n\n**Parameters**\n- `vehicle`: The vehicle handle.\n- `wheelIndex`: The wheel index.\n\n```lua\nlocal vehicle = GetVehiclePedIsIn(PlayerPedId())\n\nif DoesEntityExist(vehicle) then\n local isWheelBroken = IsVehicleWheelBrokenOff(vehicle, 1)\n print("Is wheel 1 broken? ", isWheelBroken)\nend\n``` IsVehicleWindowIntact ```cpp\nenum eWindowId {\n VEH_EXT_WINDOW_LF = 0,\n VEH_EXT_WINDOW_RF = 1,\n VEH_EXT_WINDOW_LR = 2,\n VEH_EXT_WINDOW_RR = 3,\n VEH_EXT_WINDOW_LM = 4,\n VEH_EXT_WINDOW_RM = 5,\n VEH_EXT_WINDSCREEN = 6,\n VEH_EXT_WINDSCREEN_R = 7,\n}\n```\n\n**Parameters**\n- `vehicle`: The vehicle handle\n- `windowIndex`: The index of the window IsWarningMessageActive Returns true if a Warning Message or ReportUGC menu is active. -IsWarningMessageActive_2 ```\nIS_WARNING_MESSAGE_*\n``` +IsWarningMessageReadyForControl \n\n**Returns** Returns if the warning message scaleform/ui movie is loaded and ready to be controlled. IsWorldPointWithinBrainActivationRange ```\nGets whether the world point the calling script is registered to is within desired range of the player. \n``` IsXbox360Version \n\n**Returns** Hard-coded to always return 0. LandingMenuIsActive ```\nReturns true if the current frontend menu is FE_MENU_VERSION_LANDING_MENU\n``` @@ -1563,6 +1622,7 @@ LogDebugInfo ```\nNot present in retail version of the game, actual definiton se LowerConvertibleRoof Lowers the roof on a convertible vehicle, utilizing any available animations for the action. This native is particularly useful for creating a realistic interaction with convertible vehicles by animating the process of lowering the roof.\n\nYou can check if the vehicle has an convertible roof using [`IS_VEHICLE_A_CONVERTIBLE`](#\\_0x52F357A30698BCCE).\n\n```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `vehicle`: The convertible vehicle whose roof you want to lower.\n- `instantlyLower`: A boolean value indicating whether the roof should be lowered instantly without transitioning through the animation. Set to `false` to lower the roof with the animation or `true` to lower it instantly.\n\n```lua\nlocal vehicle = GetVehiclePedIsIn(PlayerPedId(), false)\nif not IsVehicleAConvertible(vehicle, false) then return end\nLowerConvertibleRoof(vehicle, false)\n``` MakePedReload Forces a ped to reload only if they are able to; if they have a full magazine, they will not reload. MarkObjectForDeletion ```\nis this like setting is as no longer needed? \n``` +ModifyVehicleTopSpeed Modifies a vehicle's top speed.\n\nThis is the native you have to call when trying to apply handling changes related to `fInitialDriveForce` and `fInitialDriveMaxFlatVel` via the [`SET_VEHICLE_HANDLING_FLOAT`](#\\_0x488C86D2) native, otherwise your changes won't apply.\n\nCalling this native will initiate transmission setup for the given vehicle so any transmission related changes apply, it will also update the drag coefficient on the vehicle based on the percentage change.\n\n**Parameters**\n- `vehicle`: The vehicle handle.\n- `percentChange`: A percentage from 0 to 100, it can go past 100. ModifyWater ```\nSets the water height for a given position and radius. \n``` MumbleAddVoiceChannelListen Starts listening to the specified channel, when available.\n\n**Parameters**\n- `channel`: A game voice channel ID. MumbleAddVoiceTargetChannel Adds the specified channel to the target list for the specified Mumble voice target ID.\n\n**Parameters**\n- `targetId`: A Mumble voice target ID, ranging from 1..30 (inclusive).\n- `channel`: A game voice channel ID. @@ -1630,7 +1690,6 @@ N_0x1a092bb0c3808b96 ```\nSET_ENTITY_* \n``` N_0x1a330d297aac6bc1 ```\nOnly appears in lamar1 script. \n``` N_0x1a6cbb06e2d0d79d ```\nNativeDB Introduced: v1604\n``` N_0x1c57c94a6446492a ```\nNativeDB Introduced: v1604\n``` -N_0x1cba05ae7bd7ee05 ```\nSET_TRA*\n``` N_0x1d12a56fc95be92e ```\nNativeDB Added Parameter 1: char* p0\nNativeDB Added Parameter 2: char* p1\nNativeDB Added Parameter 3: char* p2\nNativeDB Introduced: v323\n``` N_0x1d4dc17c38feaff0 ```\nIS_COMMERCE_*\n``` N_0x1dc9b749e7ae282b ```\nNativeDB Introduced: v1493\n``` @@ -1728,7 +1787,6 @@ N_0x4e52e752c76e7e7a **This native does absolutely nothing, just a nullsub** N_0x4ed9c8d6da297639 ```\nNativeDB Introduced: v323\n``` N_0x4fcd976da686580c ```\nNativeDB Introduced: v1290\n``` N_0x4fcdbd3f0a813c25 ```\nNativeDB Introduced: v1868\n``` -N_0x50276ef8172f5f12 Related to the ped's weapon - flag used when disabling ped vehicle weapon\n\nSET_PED_\\*\n\n```\nNativeDB Introduced: v1734\n``` N_0x50a8a36201dbf83e ```\nNativeDB Added Parameter 1: char* p0\nNativeDB Added Parameter 2: float* p1\nNativeDB Introduced: v323\n``` N_0x511f1a683387c7e2 ```\nGET_*\n``` N_0x51f30db60626a20e Usex in decompiled scripts in combination with [`_GET_VEHICLE_SUSPENSION_BOUNDS`](#\\_0xDF7E3EEB29642C38).\n\nNativeDB Introduced: v1180\n\n```\n// Example from fm_bj_race_controller.c\nif (!VEHICLE::_0x51F30DB60626A20E(uParam0->f_26, uParam0->f_12.f_3, uParam0->f_12, 2, 1) && !func_282(uParam0->f_6))\n{\n VEHICLE::_GET_VEHICLE_SUSPENSION_BOUNDS(*uParam0, &vVar15, &uVar16);\n VEHICLE::_GET_VEHICLE_SUSPENSION_BOUNDS(uParam0->f_26, &vVar17, &uVar18);\n fVar19 = SYSTEM::VDIST2(0f, 0f, vVar15.z, 0f, 0f, vVar17.z);\n uParam0->f_12.f_3.f_2 = (uParam0->f_12.f_3.f_2 + fVar19);\n if (!VEHICLE::_0x51F30DB60626A20E(uParam0->f_26, uParam0->f_12.f_3, uParam0->f_12, 2, 1))\n {\n uParam0->f_12.f_3 = { uParam0->f_6 };\n uParam0->f_12 = { uParam0->f_9 };\n }\n}\n```\n\n**Parameters**\n- `vehicle`: the target vehicle\n- `x`: vehicle location\n- `y`: vehicle location\n- `z`: vehicle location\n- `rotX`: some kind of vehicle rotation value\n- `rotY`: some kind of vehicle rotation value\n- `rotZ`: some kind of vehicle rotation value\n- `p7`: usually 2\n- `p8`: usually 1\n\n**Returns** A BOOL value, purpose unknown. @@ -1813,7 +1871,6 @@ N_0x79d310a861697cc9 ```\nSets profile setting 940 and 941\n\n_SET_F* - _SET_G*\ N_0x79edac677ca62f81 ```\nNET_GAMESERVER_*\n\nChecks if the transaction status is equal to 3.\n\nNativeDB Introduced: v1365\n``` N_0x7a42b2e236e71415 ```\nUI3DSCENE_*\n``` N_0x7bae68775557ae0b ```\nNativeDB Introduced: v1290\n``` -N_0x7d6f9a3ef26136a0 ```\nSET_VEHICLE_AL*\n``` N_0x7e2bd3ef6c205f09 **This native does absolutely nothing, just a nullsub**\n\n```\nSomething to do with phone cameras. \nstartup.c4: \nvoid sub_2a3d() { \n UNK2::_7E2BD3EF6C205F09("No_Filter", 1); \n UNK2::_7E2BD3EF6C205F09("phone_cam1", 1); \n UNK2::_7E2BD3EF6C205F09("phone_cam2", 1); \n UNK2::_7E2BD3EF6C205F09("phone_cam3", 1); \n UNK2::_7E2BD3EF6C205F09("phone_cam4", 1); \n UNK2::_7E2BD3EF6C205F09("phone_cam5", 1); \n UNK2::_7E2BD3EF6C205F09("phone_cam6", 1); \n UNK2::_7E2BD3EF6C205F09("phone_cam7", 1); \n UNK2::_7E2BD3EF6C205F09("phone_cam9", 1); \n UNK2::_7E2BD3EF6C205F09("phone_cam12", 0); \n} \n``` N_0x7ec6f9a478a6a512 ```\nPossibly used to clear scenario points.\n\nCLEAR_*\n``` N_0x7ecdf98587e92dec ```\nNativeDB Introduced: v1604\n``` @@ -1879,7 +1936,6 @@ N_0x9b079e5221d984d3 ```\nFORCE_*\n``` N_0x9b5016a6433a68c5 ```\nHardcoded to return 0.\n\nNativeDB Introduced: v323\n``` N_0x9bd7bd55e4533183 ```\nNativeDB Introduced: v1290\n``` N_0x9d252648778160df ```\nNativeDB Introduced: v1868\n``` -N_0x9d3af56e94c9ae98 ```\nSET_H*\n``` N_0x9d724b400a7e8ffc ```\nNativeDB Introduced: v2189\n``` N_0x9d7afcbf21c51712 ```\nSets some voice chat related value.\n\nNETWORK_SET_*\n``` N_0x9de5d2f723575ed0 ```\nNativeDB Added Parameter 1: char* p0\nNativeDB Added Parameter 2: char* p1\nNativeDB Introduced: v323\n``` @@ -2000,7 +2056,6 @@ N_0xdbf860cf1db8e599 ```\nNativeDB Introduced: v2189\n``` N_0xdcc07526b8ec45af Always returns false.\n\n```\nNativeDB Introduced: v1868\n``` N_0xdce97bdf8a0eabc8 ```\nNativeDB Added Parameter 1: Vehicle vehicle\nNativeDB Added Parameter 2: Any p1\n``` N_0xdd2620b7b9d16ff1 ```\n2 occurrences in agency_heist3a. p1 was 0.7f then 0.4f. \n``` -N_0xdd6bcf9e94425df9 ```\nTune Backwards... ?\nSET_RADIO_*\n``` N_0xde68e30d89f97132 ```\nNativeDB Introduced: v2060\n``` N_0xdfbd93bf2943e29b ```\nNativeDB Introduced: v1868\n``` N_0xdfcdb14317a9b361 ```\nNativeDB Introduced: v2189\n``` @@ -2013,7 +2068,6 @@ N_0xe2bb399d90942091 ```\nNativeDB Introduced: v2189\n``` N_0xe2e244ab823b4483 ```\nNativeDB Introduced: v2060\n``` N_0xe2f53f172b45ede1 ```\nRESET_*\n\nResets the effect of 0x428AD3E26C8D9EB0\n``` N_0xe3d969d2785ffb5e ```\nsets something to 1 \n``` -N_0xe3e2c1b4c59dbc77 ```\nSets an unknown value related to timecycles. \n``` N_0xe42d626eec94e5d9 ```\nNativeDB Introduced: v1290\n``` N_0xe4c3b169876d33d7 ```\nNativeDB Introduced: v1290\n``` N_0xe4f6e8d07a2f0f51 ```\nNativeDB Introduced: v1290\n``` @@ -2038,9 +2092,7 @@ N_0xec72c258667be5ea ```\nThis function is hard-coded to always return 0. \n``` N_0xecb41ac6ab754401 ```\nSTAT_LOAD_*\n``` N_0xed3c76adfa6d07c4 ```\nFORCE_*\n``` N_0xed76d195e6e3bf7f ```\nNativeDB Introduced: v1493\n``` -N_0xeebfc7a7efdc35b4 ```\nSome kind of flags. \n``` N_0xef9d388f8d377f44 ```\nOnly used in R* Script fm_content_cargo\n```\n\n```\nNativeDB Introduced: v2699\n``` -N_0xefabc7722293da7c ```\nAD*\n``` N_0xf033419d1b81fae8 ```\nGET_*\n``` N_0xf083835b70ba9bfe ```\nNETWORK_RE*\n``` N_0xf1a1803d3476f215 ```\nSets profile setting 933 \n``` @@ -2048,7 +2100,6 @@ N_0xf2385935bffd4d92 Initial guess of native: `_IS_PED_WEARING_MOTORCYCLE_HELMET N_0xf2bebcdfafdaa19e ```\nSET_PED_ALLOW*\ntoggle was always false except in one instance (b678).\nThe one time this is set to true seems to do with when you fail the mission.\n``` N_0xf2ca003f167e21d2 \n\n**Returns** Hard-coded to always return 0. N_0xf2e07819ef1a5289 \n\n**Returns** Hard-coded to always return 1. -N_0xf3365489e0dd50f9 ```\nSET_VEHICLE_*\n``` N_0xf3f776ada161e47d ```\nNativeDB Introduced: v1604\n``` N_0xf83d0febe75e62c9 ```\nNativeDB Added Parameter 9: int hudColour\nNativeDB Introduced: v1290\n```\n\nSets the 'data' for a cone for a blip\n\nSee [here](https://docs.fivem.net/docs/game-references/hud-colors/) for the hud colours for the cone\n\nName in scripts: `SETUP_FAKE_CONE_DATA()`\n\nFor people who don't know how to convert degrees to radians and the other way around:\n\n```\ndegrees = radians * 180 / pi\nradians = degrees * pi / 180\n```\n\n**Parameters**\n- `blip`: A blip from an entity. The entity can not be a ped. The width and length will not change if it is a ped.\n- `p1`: \\-1.0 in decompiled scripts (unk)\n- `p2`: 1.0 in decompiled scripts (unk)\n- `width`: Width of the cone (0.0 to ~3.0)\n- `p4`: 1.0 in decompiled scripts (unk)\n- `length`: Length of the cone. (8.2 is 'normal' sized)\n- `heading`: This heading is in radians, this can be calculated with (heading + 180.00) \\* (pi/180)\n- `p7`: 1 in decompiled scripts (unk)\n\n```lua\nlocal ped = PlayerPedId()\nlocal blip = AddBlipForEntity(ped)\n\nCitizen.InvokeNative(0xF83D0FEBE75E62C9, blip, -1.0, 1.0, 0.36, 1.0, 8.2, (0.5 * math.pi), 0, 11)\nSetBlipShowCone(blip, true, 11)\n``` N_0xf8b49f5ba7f850e7 ```\nNativeDB Introduced: v2060\n``` @@ -2061,8 +2112,7 @@ N_0xfac18e7356bd3210 ```\nNativeDB Introduced: v1180\n``` N_0xfb1f9381e80fa13f ```\np0 is always 0. p1 is pointing to a global. \n``` N_0xfcf6788fc4860cd4 SET_CHECKPOINT_\\*\n\n```\nNativeDB Introduced: v1734\n``` N_0xfdc07c58e8aab715 A\\*\n\n```\nNativeDB Introduced: v1734\n``` -N_0xfec9a3b1820f3331 Native to check whether [`_SET_PED_SCUBA_GEAR_VARIATION`](#\\_0x36c6984c3ed0c911) is enabled/actived. -N_0xff266d1d0eb1195d ```\nTune Forward... ?\nSET_RADIO_*\n``` +N_0xfec9a3b1820f3331 Native to check whether [`_SET_PED_SCUBA_GEAR_VARIATION`](#\\_0x36C6984C3ED0C911) is enabled/actived. N_0xff4803bc019852d9 ```\nRelated to Peds dropping pickup_health_snack; p0 is a value between [0.0, 1.0] that corresponds to drop rate\n``` N_0xffee8fa29ab9a18e ```\nNativeDB Added Parameter 2: Any p1\n``` NetGameserverBasketDelete ```\nNativeDB Introduced: v372\n``` @@ -2080,7 +2130,7 @@ NetworkAddEntityAngledArea To remove, see: [`NETWORK_REMOVE_ENTITY_AREA`](#\\_0x NetworkAddEntityToSynchronisedScene Adds an entity to a network synchronised scene.\n\n**Parameters**\n- `entity`: Entity handle to add to the scene.\n- `netScene`: Which network scene to add this entity to (Returned by [`NETWORK_CREATE_SYNCHRONISED_SCENE`](#\\_0x7CD6BC4C2BBDD526))\n- `animDict`: Animation dictionary to play on this entity.\n- `animName`: Animation clip from the dictionary to play on this entity.\n- `blendIn`: Blend in speed of the animation. Default is `8.0`.\n- `blendOut`: Blend out speed of the animation. Default is `-8.0`.\n- `flag`: Synchronized scene flags. See [`NETWORK_ADD_PED_TO_SYNCHRONISED_SCENE`](#\\_0x742A637471BCECD9) for more info. NetworkAddFollowers ```\n.. \n``` NetworkAddMapEntityToSynchronisedScene Adds a map entity to a network synchronized scene. This native function is utilized only once as of game build 2944 within the casino_slots script.\nPlease note that it's only possible to add a single map entity to synchronised scenes.\n\nIt's advisable to initially locate the object and retrieve its actual coordinates using [`GET_CLOSEST_OBJECT_OF_TYPE`](#\\_0xE143FA2249364369).\n\n```\nNativeDB Introduced: v1734\n```\n\n**Parameters**\n- `netScene`: Net scene ID returned by [`NETWORK_CREATE_SYNCHRONISED_SCENE`](#\\_0x7CD6BC4C2BBDD526)\n- `modelHash`: Model hash of the object the script should look for.\n- `x`: Object X coord.\n- `y`: Object Y coord.\n- `z`: Object Z coord.\n- `animDict`: Anim dictionary to play on this object.\n- `animName`: Anim name to play on this object.\n- `blendInSpeed`: Float representing how quickly the animation should be blended into. Default is `8.0`.\n- `blendOutSpeed`: Float representing how quickly the animation should be blended out of. Default is `-8.0`\n- `flags`: See [`NETWORK_ADD_PED_TO_SYNCHRONISED_SCENE`](#\\_0x742A637471BCECD9). -NetworkAddPedToSynchronisedScene Adds a ped to a networked synchronised scene.\n\nSynchronized scene playback flags (Also works in other `NETWORK_ADD_*_TO_SYNCHRONISED_SCENE` natives):\n| Value | Name | Notes |\n| :-------: | :---------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: |\n| `0` | None | No flag set. |\n| `1` | USE_PHYSICS | Allows the ped to have physics during the scene. |\n| `2` | TAG_SYNC_OUT | The task will do a tag synchronized blend out with the movement behaviour of the ped. |\n| `4` | DONT_INTERRUPT | The scene will not be interrupted by external events. |\n| `8` | ON_ABORT_STOP_SCENE | The scene will be stopped if the scripted task is aborted. |\n| `16` | ABORT_ON_WEAPON_DAMAGE | The scene will be stopped if the ped is damaged by a weapon. |\n| `32` | BLOCK_MOVER_UPDATE | The task will not update the mover. |\n| `64` | LOOP_WITHIN_SCENE | Animations within this scene will be looped until the scene is finished. |\n| `128` | PRESERVE_VELOCITY | The task will keep it's velocity when the scene is cleaned up/stopped. Do note that the `USE_PHYSICS` flag must also be present. |\n| `256` | EXPAND_PED_CAPSULE_FROM_SKELETON | The task will apply the `ExpandPedCapsuleFromSkeleton` reset flag to the ped (See [`SET_PED_RESET_FLAG`](#\\_0xC1E8A365BF3B29F2)). |\n| `512` | ACTIVATE_RAGDOLL_ON_COLLISION | The ped will be ragdoll if it comes in contact with an object. |\n| `1024` | HIDE_WEAPON | The ped's current weapon will be hidden during the scene. |\n| `2048` | ABORT_ON_DEATH | The synchronised scene will be aborted if the ped dies. |\n| `4096` | VEHICLE_ABORT_ON_LARGE_IMPACT | If the scene is running on a vehicle, then it will be aborted if the vehicle takes a heavy collision with another vehicle. |\n| `8192` | VEHICLE_ALLOW_PLAYER_ENTRY | If the scene is on a vehicle, it allows players to enter it. |\n| `16384` | PROCESS_ATTACHMENTS_ON_START | Attachments will be processed at the start of the scene. |\n| `32768` | NET_ON_EARLY_NON_PED_STOP_RETURN_TO_START | A non-ped entity will be returned to their starting position if the scene finishes early. |\n| `65536` | SET_PED_OUT_OF_VEHICLE_AT_START | If the ped is in a vehicle when the scene starts, it will be set out of the vehicle. |\n| `131072` | NET_DISREGARD_ATTACHMENT_CHECKS | Attachment checks will be disregarded when the scene is running. |\n\nThese flags can be combined with the `|` operator.\n\n**Parameters**\n- `ped`: Ped handle to add.\n- `netScene`: Network scene handle (Returned by [`NETWORK_CREATE_SYNCHRONISED_SCENE`](#\\_0x7CD6BC4C2BBDD526))\n- `animDict`: Dictionary of the animation that the ped will play. Network synchronised scenes don't require the animation dictionary to be loaded, unlike [`TASK_SYNCHRONIZED_SCENE`](#\\_0xEEA929141F699854).\n- `animClip`: Clip name from the anim dictionary that the ped will play.\n- `blendInSpeed`: Blend in speed. The lower the value, the slower the blend in speed is. Default is `8.0`.\n- `blendOutSpeed`: Blend out speed. This should be the negative value of `blendInSpeed`. Default is `-8.0`.\n- `syncedSceneFlags`: Synchronized scene flags bit field from the above table.\n- `ragdollFlags`: Ragdoll blocking flags. Default is `0`.\n- `moverBlendInDelta`: Determines the rate at which the mover blends in to the scene. Useful for ensuring a seamless entry onto a synchronized scene. Default is `1000.0`.\n- `ikFlags`: Inverse kinematics flags. Default is `0`. +NetworkAddPedToSynchronisedScene Adds a ped to a networked synchronised scene.\n\nSynchronized scene playback flags (Also works in other `NETWORK_ADD_*_TO_SYNCHRONISED_SCENE` natives):\n\n| Value | Name | Notes |\n| :-------: | :---------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: |\n| `0` | None | No flag set. |\n| `1` | USE_PHYSICS | Allows the ped to have physics during the scene. |\n| `2` | TAG_SYNC_OUT | The task will do a tag synchronized blend out with the movement behaviour of the ped. |\n| `4` | DONT_INTERRUPT | The scene will not be interrupted by external events. |\n| `8` | ON_ABORT_STOP_SCENE | The scene will be stopped if the scripted task is aborted. |\n| `16` | ABORT_ON_WEAPON_DAMAGE | The scene will be stopped if the ped is damaged by a weapon. |\n| `32` | BLOCK_MOVER_UPDATE | The task will not update the mover. |\n| `64` | LOOP_WITHIN_SCENE | Animations within this scene will be looped until the scene is finished. |\n| `128` | PRESERVE_VELOCITY | The task will keep it's velocity when the scene is cleaned up/stopped. Do note that the `USE_PHYSICS` flag must also be present. |\n| `256` | EXPAND_PED_CAPSULE_FROM_SKELETON | The task will apply the `ExpandPedCapsuleFromSkeleton` reset flag to the ped (See [`SET_PED_RESET_FLAG`](#\\_0xC1E8A365BF3B29F2)). |\n| `512` | ACTIVATE_RAGDOLL_ON_COLLISION | The ped will be ragdoll if it comes in contact with an object. |\n| `1024` | HIDE_WEAPON | The ped's current weapon will be hidden during the scene. |\n| `2048` | ABORT_ON_DEATH | The synchronised scene will be aborted if the ped dies. |\n| `4096` | VEHICLE_ABORT_ON_LARGE_IMPACT | If the scene is running on a vehicle, then it will be aborted if the vehicle takes a heavy collision with another vehicle. |\n| `8192` | VEHICLE_ALLOW_PLAYER_ENTRY | If the scene is on a vehicle, it allows players to enter it. |\n| `16384` | PROCESS_ATTACHMENTS_ON_START | Attachments will be processed at the start of the scene. |\n| `32768` | NET_ON_EARLY_NON_PED_STOP_RETURN_TO_START | A non-ped entity will be returned to their starting position if the scene finishes early. |\n| `65536` | SET_PED_OUT_OF_VEHICLE_AT_START | If the ped is in a vehicle when the scene starts, it will be set out of the vehicle. |\n| `131072` | NET_DISREGARD_ATTACHMENT_CHECKS | Attachment checks will be disregarded when the scene is running. |\n\nThese flags can be combined with the `|` operator.\n\n**Parameters**\n- `ped`: Ped handle to add.\n- `netScene`: Network scene handle (Returned by [`NETWORK_CREATE_SYNCHRONISED_SCENE`](#\\_0x7CD6BC4C2BBDD526))\n- `animDict`: Dictionary of the animation that the ped will play. Network synchronised scenes don't require the animation dictionary to be loaded, unlike [`TASK_SYNCHRONIZED_SCENE`](#\\_0xEEA929141F699854).\n- `animClip`: Clip name from the anim dictionary that the ped will play.\n- `blendInSpeed`: Blend in speed. The lower the value, the slower the blend in speed is. Default is `8.0`.\n- `blendOutSpeed`: Blend out speed. This should be the negative value of `blendInSpeed`. Default is `-8.0`.\n- `syncedSceneFlags`: Synchronized scene flags bit field from the above table.\n- `ragdollFlags`: Ragdoll blocking flags. Default is `0`.\n- `moverBlendInDelta`: Determines the rate at which the mover blends in to the scene. Useful for ensuring a seamless entry onto a synchronized scene. Default is `1000.0`.\n- `ikFlags`: Inverse kinematics flags. Default is `0`. NetworkAddPedToSynchronisedSceneWithIk Adds a ped to a networked synchronized scene but extends [`NETWORK_ADD_PED_TO_SYNCHRONISED_SCENE`](#\\_0x742A637471BCECD9) to support IK flags.\nThere is barely any difference between this and [`NETWORK_ADD_PED_TO_SYNCHRONISED_SCENE`](#\\_0x742A637471BCECD9).\n\n```\nNativeDB Introduced: v1290\n```\n\n**Parameters**\n- `ped`: Index of the ped to add to the scene.\n- `netSceneID`: Network scene ID returned by [`NETWORK_CREATE_SYNCHRONISED_SCENE`](#\\_0x7CD6BC4C2BBDD526).\n- `animDict`: Which anim dictionary to use on this ped.\n- `animClip`: Which clip from the anim dictionary to use on this ped.\n- `blendIn`: Blend in speed of the animation. Default is `8.0`.\n- `blendOut`: Blend out speed of the animation. Default is `-8.0`.\n- `sceneFlags`: Synchronized scene flags. See [`NETWORK_ADD_PED_TO_SYNCHRONISED_SCENE`](#\\_0x742A637471BCECD9).\n- `ragdollFlags`: Ragdoll blocking flags. Default is 0.\n- `moverBlendInDelta`: Determines the rate at which the mover blends in to the scene. Useful for ensuring a seamless entry onto a synchronized scene. Default is `1000.0`.\n- `ikFlags`: Inverse kinematics flags. Default is `0`. NetworkAllowRemoteAttachmentModification Allows scripts to use attachment commands on entities (eg. [`ATTACH_ENTITY_TO_ENTITY`](#\\_0x6B9BBD38AB0796DF)) that are not controlled by the client.\n\n**Note:** This is only local and does not affect entities on other machines. This is used by the ferris wheel script to sync players on carts.\n\n**Parameters**\n- `entity`: Entity handle to allow remote attachment for.\n- `toggle`: true/false. NetworkAreCutsceneEntities ```\nGetter for SET_NETWORK_CUTSCENE_ENTITIES.\n```\n\n```\nNativeDB Introduced: v2699\n``` @@ -2244,12 +2294,12 @@ NetworkIsConnectionEndpointRelayServer ```\nNETWORK_IS_*\n\nNativeDB Introduced: NetworkIsEntityConcealed Note: This only works for vehicles, which appears to be a bug (since the setter *does* work for every entity type and the name is 99% correct). NetworkIsFriendInSameTitle ```\nIn scripts R* calls 'NETWORK_GET_FRIEND_NAME' in this param. \n``` NetworkIsHost ```\nIf you are host, returns true else returns false.\n``` -NetworkIsInParty ```\nNote according to IDA TU27 X360(Console), \nThis native & 'NETWORK_IS_PARTY_MEMBER' both jump to the same location. \nSide note: This location just stops where it's at once jumped to. \nScreenshot for side note, \nh t t p ://i.imgur.com/m2ci1mF.png \nh t t p://i.imgur.com/Z0Wx2B6.png \n``` +NetworkIsInParty ```\nNote according to IDA TU27 X360(Console), \nThis native & 'NETWORK_IS_PARTY_MEMBER' both jump to the same location. \nSide note: This location just stops where it's at once jumped to. \nScreenshot for side note, \nhttps://i.imgur.com/0yMiTs9.png\nhttps://i.imgur.com/td7SjGH.png\n``` NetworkIsInPlatformParty ```\nHardcoded to return false.\n``` NetworkIsInPlatformPartyChat ```\nHardcoded to return false.\n``` NetworkIsInactiveProfile Checks if the networkHandle is the same as any other user that is signed in on the local machine.\nFor example, if your console has two or more users signed in (on different controllers), the profile that is not controlling the game would be "inactive".\n\n**Returns** Returns true if the networkHandle is signed in on the same machine, but is not the main player. NetworkIsNetworkIdAClone Returns true if the specified network id is controlled by someone else.\n\n**Parameters**\n- `netId`: The network id for an object or entity.\n\n**Returns** Probably a bool, returns 1 if you don't have control over the netId entity. -NetworkIsPartyMember ```\nNote according to IDA TU27 X360(Console), \nThis native & 'NETWORK_IS_PARTY_MEMBER' both jump to the same location. \nSide note: This location just stops where it's at once jumped to. \nScreenshot for side note, \nh t t p ://i.imgur.com/m2ci1mF.png \nh t t p://i.imgur.com/Z0Wx2B6.png \n``` +NetworkIsPartyMember ```\nNote according to IDA TU27 X360(Console), \nThis native & 'NETWORK_IS_PARTY_MEMBER' both jump to the same location. \nSide note: This location just stops where it's at once jumped to. \nScreenshot for side note, \nhttps://i.imgur.com/1CIH2VT.png\nhttps://i.imgur.com/6QTCRj2.png\n``` NetworkIsPendingFriend ```\nThis function is hard-coded to always return 0.\n``` NetworkIsPlayerEqualToIndex ```\nNETWORK_ARE_* \n``` NetworkIsPlayerTalking ```\nreturns true if someone is screaming or talking in a microphone \n``` @@ -2394,26 +2444,27 @@ PassKeyboardInputToScaleform Passes keyboard input to scaleform. You must call t PatchDecalDiffuseMap ```\nREQUEST_STREAMED_TEXTURE_DICT("MPOnMissMarkers", false); \n*uParam0.f_809 = add_decal(9120, vParam1, vVar4, vVar7, 2f, 2f, to_float(iVar0) / 255f, to_float(iVar1) / 255f, to_float(iVar2) / 255f, 1f, -1f, 1, 0, 0); \nPATCH_DECAL_DIFFUSE_MAP(9120, "MPOnMissMarkers", "Capture_The_Flag_Base_Icon"); \n``` PauseMenuActivateContext Activates the specified frontend menu context.\n\npausemenu.xml defines some specific menu options using 'context'. Context is basically a 'condition'.\n\nThe `*ALL*` part of the context means that whatever is being defined, will be active when any or all of those conditions after `*ALL*` are met.\n\nThe `*NONE*` part of the context section means that whatever is being defined, will NOT be active if any or all of the conditions after `*NONE*` are met.\n\nThis basically allows you to hide certain menu sections, or things like instructional buttons.\n\nSee the old description below for more info.\n\n***\n\n> Seems to add/set the current menu context (to show/hide buttons?)\n> Pausemenu.xml:\n> `*ALL*, DISPLAY_CORONA_BUTTONS, *NONE*, BET_LOCKED, BET_AVAILABLE, SCROLL_OPTION`\n> Code:\n>\n> ```\n> if (...) {\n> sub_bbd34(a_0, 0, "FM_BET_HELP");\n> UI::PAUSE_MENU_ACTIVATE_CONTEXT(${bet_available}); // This native\n> UI::OBJECT_DECAL_TOGGLE(${bet_locked});\n> } else {\n> sub_bbd34(a_0, 0, "");\n> UI::OBJECT_DECAL_TOGGLE(${bet_available});\n> UI::PAUSE_MENU_ACTIVATE_CONTEXT(${bet_locked}); // This native\n> }\n> ```\n>\n> OBJECT_DECAL_TOGGLE seems to remove a context, It also has a hash collision\n> // Old\n> Scripts do not make this native's purpose clear. However, this native most likely has something to do with decals since in nearly every instance, "OBJECT_DECAL_TOGGLE" is called prior.\n\n**Parameters**\n- `hash`: Context name hash. PauseMenuDisableBusyspinner Disables the loading spinner in Pause Menu when switching from one header tab to another.\n\n**Parameters**\n- `toggle`: true to disable and false to re-enable the loading icon. -PauseMenuGetIndexOfMouseHoveredSlot If mouse is hovering on a slot, it returns the slot's index, else it returns -1. -PauseMenuGetUniqueIdOfMouseHoveredSlot If mouse is hovering on a slot, it returns uniqueid of that slot, else it returns -1. +PauseMenuGetMouseHoverIndex \n\n**Returns** Returns the index of a menu item the mouse is hovering on in Pause Menu. -1 if nothing is being hovered on. +PauseMenuGetMouseHoverUniqueId \n\n**Returns** Returns the uniqueID of the pause menu item the mouse is hovering on. -1 if the mouse isn't rolled over any item. PauseMenuRedrawInstructionalButtons Updates instructional buttons in Pause Menu after menu contexts have been toggled. p0 purpose is currently unknown, only 0 is used in scripts. PauseMenuSetBusySpinner Sets a loading icon in the pause menu.\n\n**Parameters**\n- `bVisible`: Sets or removes this spinner.\n- `iColumnID`: Location of this spinner (0 - 17). Indexes can be found in `common:\\data\\ui\\frontend.xml`, `PauseMenu\\PersistentData\\Spinner\\Offsets`. If `bVisible` is `false`, this will be ignored.\n- `iSpinnerIndex`: Index of this spinner. Can have a maximum of three spinners at a time. -PauseMenuSetWarnOnTabChange Shows this warning message when trying to switch pause menu header tabs: https://i.imgur.com/8qmfztu.png\n\n**Parameters**\n- `setWarn`: Wether to show the message or not. +PauseMenuSetWarnOnTabChange Shows this warning message when trying to switch pause menu header tabs:\n![](https://imgur.com/a/5jugFi9)\n\n**Parameters**\n- `setWarn`: Wether to show the message or not. PauseMenuceptionGoDeeper Sets current pause menu page/component to the specified value.\nAvailable page IDs: https://pastebin.com/qxuhwjPT PauseMenuceptionTheKick Forces the Pause Menu to back out of unique pages such as Awards, Unlocks, Key Bindings etc PauseScriptedConversation To resume the conversation use [RESTART_SCRIPTED_CONVERSATION](#\\_0x9AEB285D1818C9AC) PauseToggleFullscreenMap Toggles pause menu map rendering. PedToNet ```\ngets the network id of a ped \n``` +PlaceObjectOnGroundOrObjectProperly Casts a ray downward from the object's position and places the object on the surface it hits (including world surface and objects). Use [`PLACE_OBJECT_ON_GROUND_PROPERLY`](#\\_0x58A850EAEE20FAA3) to not include objects when determining the surface.\n\n**Parameters**\n- `object`: The object handle. PlayAmbientSpeechFromPositionNative \n\n**Parameters**\n- `speechParam`: See [`PLAY_PED_AMBIENT_SPEECH_NATIVE`](#\\_0x8E04FEDD28D42462) for params PlayAnimOnRunningScenario [Animations list](https://alexguirre.github.io/animations-list/) PlayAnimalVocalization ```cpp\nenum eAudAnimalType {\n AUD_ANIMAL_NONE = -1,\n AUD_ANIMAL_BOAR = 0,\n AUD_ANIMAL_CHICKEN = 1,\n AUD_ANIMAL_DOG = 2,\n AUD_ANIMAL_DOG_ROTTWEILER = 3,\n AUD_ANIMAL_HORSE = 4,\n AUD_NUM_ANIMALS = 5\n}\n``` PlayBinkMovie ```\nNativeDB Introduced: v1290\n``` PlayCamAnim ```\nAtleast one time in a script for the zRot Rockstar uses GET_ENTITY_HEADING to help fill the parameter. \np9 is unknown at this time. \np10 throughout all the X360 Scripts is always 2. \n```\n\n[Animations list](https://alexguirre.github.io/animations-list/) -PlayEntityAnim ```\ndelta and bitset are guessed fields. They are based on the fact that most of the calls have 0 or nil field types passed in. \nThe only time bitset has a value is 0x4000 and the only time delta has a value is during stealth with usually <1.0f values. \n```\n\n[Animations list](https://alexguirre.github.io/animations-list/) +PlayEntityAnim [Animations list](https://alexguirre.github.io/animations-list/)\n\n**Parameters**\n- `entity`: The entity handle to play the animation on.\n- `animName`: The name of the animation to play.\n- `animDict`: The name of the animation dictionary to use.\n- `fBlendDelta`: Blend in and out time.\n- `bLoop`: Sets `AF_LOOPING` in the flags.\n- `bHoldLastFrame`: Sets `AF_HOLD_LAST_FRAME` in the flags.\n- `bDriveToPose`: unused\n- `fStartPhase`: Clamped between `0.0` and `1.0`. Sets the start phase of the animation.\n- `iFlags`: The flags to use when playing the animation. See [`TASK_PLAY_ANIM`](#\\_0xEA47FE3719165B94). PlayMissionCompleteAudio ```\nCalled 38 times in the scripts. There are 5 different audioNames used.\n One unknown removed below.\nAUDIO::PLAY_MISSION_COMPLETE_AUDIO("DEAD");\nAUDIO::PLAY_MISSION_COMPLETE_AUDIO("FRANKLIN_BIG_01");\nAUDIO::PLAY_MISSION_COMPLETE_AUDIO("GENERIC_FAILED");\nAUDIO::PLAY_MISSION_COMPLETE_AUDIO("TREVOR_SMALL_01");\n``` PlayPain This native had a 4th parameter added in newer game builds\n`syncOverNetwork` creates a `CPedPlayPainEvent` when set to true, by default this variable is false.\n\nYou won't be able to use this for clones (remote pedestrians that are not owned by you) or migrating peds if `syncOverNetwork` is set to true; it simply won't execute.\n\nThe `ped` should also have speech for this to work.\n\n```cpp\nenum eAudDamageReason {\n AUD_DAMAGE_REASON_DEFAULT = 0,\n AUD_DAMAGE_REASON_FALLING = 1,\n AUD_DAMAGE_REASON_SUPER_FALLING = 2,\n AUD_DAMAGE_REASON_SCREAM_PANIC = 3,\n AUD_DAMAGE_REASON_SCREAM_PANIC_SHORT = 4,\n AUD_DAMAGE_REASON_SCREAM_SCARED = 5,\n AUD_DAMAGE_REASON_SCREAM_SHOCKED = 6,\n AUD_DAMAGE_REASON_SCREAM_TERROR = 7,\n AUD_DAMAGE_REASON_ON_FIRE = 8,\n AUD_DAMAGE_REASON_DROWNING = 9,\n // drowning on the surface of water, after we time out\n AUD_DAMAGE_REASON_SURFACE_DROWNING = 10,\n AUD_DAMAGE_REASON_INHALE = 11,\n AUD_DAMAGE_REASON_EXHALE = 12,\n AUD_DAMAGE_REASON_POST_FALL_GRUNT = 13,\n AUD_DAMAGE_REASON_ENTERING_RAGDOLL_DEATH = 14,\n AUD_DAMAGE_REASON_EXPLOSION = 15,\n AUD_DAMAGE_REASON_MELEE = 16,\n AUD_DAMAGE_REASON_SHOVE = 17,\n AUD_DAMAGE_REASON_WHEEZE = 18,\n AUD_DAMAGE_REASON_COUGH = 19,\n AUD_DAMAGE_REASON_TAZER = 20,\n AUD_DAMAGE_REASON_EXHAUSTION = 21,\n AUD_DAMAGE_REASON_CLIMB_LARGE = 22,\n AUD_DAMAGE_REASON_CLIMB_SMALL = 23,\n AUD_DAMAGE_REASON_JUMP = 24,\n AUD_DAMAGE_REASON_COWER = 25,\n AUD_DAMAGE_REASON_WHIMPER = 26,\n AUD_DAMAGE_REASON_DYING_MOAN = 27,\n AUD_DAMAGE_REASON_CYCLING_EXHALE = 28,\n AUD_DAMAGE_REASON_PAIN_RAPIDS = 29,\n AUD_DAMAGE_REASON_SNEEZE = 30,\n AUD_DAMAGE_REASON_MELEE_SMALL_GRUNT = 31,\n AUD_DAMAGE_REASON_MELEE_LARGE_GRUNT = 32,\n AUD_DAMAGE_REASON_POST_FALL_GRUNT_LOW = 33\n}\n```\n\n**Parameters**\n- `ped`: The ped entity.\n- `damageReason`: The damage reason/type, refer to eAudDamageReason\n- `rawDamage`: Damage value, defaults to 0.0\n\n```lua\n-- Play ON_FIRE (8) for all nearby peds, don't create an event (last parameter set to false)\nfor _, ped in ipairs(GetGamePool('CPed')) do\n PlayPain(ped, 8, 0.0, false)\nend\n``` PlayPedAmbientSpeechAndCloneNative See [`PLAY_PED_AMBIENT_SPEECH_NATIVE`](#\\_0x8E04FEDD28D42462) for parameter specifications.\n\n```\nNativeDB Added Parameter 4: Any p3\n``` -PlayPedAmbientSpeechNative Plays ambient speech; see also [`PLAY_PED_AMBIENT_SPEECH_AND_CLONE_NATIVE`](#\\_0xC6941B4A3A8FBBB9).\n\n```\nspeechParam: Can be one of the following:\nSPEECH_PARAMS_STANDARD\nSPEECH_PARAMS_ALLOW_REPEAT\nSPEECH_PARAMS_BEAT\nSPEECH_PARAMS_FORCE\nSPEECH_PARAMS_FORCE_FRONTEND\nSPEECH_PARAMS_FORCE_NO_REPEAT_FRONTEND\nSPEECH_PARAMS_FORCE_NORMAL\nSPEECH_PARAMS_FORCE_NORMAL_CLEAR\nSPEECH_PARAMS_FORCE_NORMAL_CRITICAL\nSPEECH_PARAMS_FORCE_SHOUTED\nSPEECH_PARAMS_FORCE_SHOUTED_CLEAR\nSPEECH_PARAMS_FORCE_SHOUTED_CRITICAL\nSPEECH_PARAMS_FORCE_PRELOAD_ONLY\nSPEECH_PARAMS_MEGAPHONE\nSPEECH_PARAMS_HELI\nSPEECH_PARAMS_FORCE_MEGAPHONE\nSPEECH_PARAMS_FORCE_HELI\nSPEECH_PARAMS_INTERRUPT\nSPEECH_PARAMS_INTERRUPT_SHOUTED\nSPEECH_PARAMS_INTERRUPT_SHOUTED_CLEAR\nSPEECH_PARAMS_INTERRUPT_SHOUTED_CRITICAL\nSPEECH_PARAMS_INTERRUPT_NO_FORCE\nSPEECH_PARAMS_INTERRUPT_FRONTEND\nSPEECH_PARAMS_INTERRUPT_NO_FORCE_FRONTEND\nSPEECH_PARAMS_ADD_BLIP\nSPEECH_PARAMS_ADD_BLIP_ALLOW_REPEAT\nSPEECH_PARAMS_ADD_BLIP_FORCE\nSPEECH_PARAMS_ADD_BLIP_SHOUTED\nSPEECH_PARAMS_ADD_BLIP_SHOUTED_FORCE\nSPEECH_PARAMS_ADD_BLIP_INTERRUPT\nSPEECH_PARAMS_ADD_BLIP_INTERRUPT_FORCE\nSPEECH_PARAMS_FORCE_PRELOAD_ONLY_SHOUTED\nSPEECH_PARAMS_FORCE_PRELOAD_ONLY_SHOUTED_CLEAR\nSPEECH_PARAMS_FORCE_PRELOAD_ONLY_SHOUTED_CRITICAL\nSPEECH_PARAMS_SHOUTED\nSPEECH_PARAMS_SHOUTED_CLEAR\nSPEECH_PARAMS_SHOUTED_CRITICAL\nNote: A list of Name and Parameters can be found here pastebin.com/1GZS5dCL\n```\n\n```\nNativeDB Added Parameter 4: Any p3\n```\n\n**Parameters**\n- `ped`: The ped to play the ambient speech.\n- `speechName`: Name of the speech to play, eg. "GENERIC_HI". +PlayPedAmbientSpeechNative Plays ambient speech; see also [`PLAY_PED_AMBIENT_SPEECH_AND_CLONE_NATIVE`](#\\_0xC6941B4A3A8FBBB9). Some speeches only play on certain ped models.\n\nA full list of speech names can be found [here](https://docs.fivem.net/docs/game-references/speeches/).\n\n```cpp\nstatic const char *SpeechParams[] = {\n "SPEECH_PARAMS_ADD_BLIP",\n "SPEECH_PARAMS_ADD_BLIP_ALLOW_REPEAT",\n "SPEECH_PARAMS_ADD_BLIP_FORCE",\n "SPEECH_PARAMS_ADD_BLIP_INTERRUPT",\n "SPEECH_PARAMS_ADD_BLIP_INTERRUPT_FORCE",\n "SPEECH_PARAMS_ADD_BLIP_SHOUTED",\n "SPEECH_PARAMS_ADD_BLIP_SHOUTED_FORCE",\n "SPEECH_PARAMS_ALLOW_REPEAT",\n "SPEECH_PARAMS_BEAT",\n "SPEECH_PARAMS_FORCE",\n "SPEECH_PARAMS_FORCE_FRONTEND",\n "SPEECH_PARAMS_FORCE_HELI",\n "SPEECH_PARAMS_FORCE_MEGAPHONE",\n "SPEECH_PARAMS_FORCE_NO_REPEAT_FRONTEND",\n "SPEECH_PARAMS_FORCE_NORMAL",\n "SPEECH_PARAMS_FORCE_NORMAL_CLEAR",\n "SPEECH_PARAMS_FORCE_NORMAL_CRITICAL",\n "SPEECH_PARAMS_FORCE_PRELOAD_ONLY",\n "SPEECH_PARAMS_FORCE_PRELOAD_ONLY_SHOUTED",\n "SPEECH_PARAMS_FORCE_PRELOAD_ONLY_SHOUTED_CLEAR",\n "SPEECH_PARAMS_FORCE_PRELOAD_ONLY_SHOUTED_CRITICAL",\n "SPEECH_PARAMS_FORCE_SHOUTED",\n "SPEECH_PARAMS_FORCE_SHOUTED_CLEAR",\n "SPEECH_PARAMS_FORCE_SHOUTED_CRITICAL",\n "SPEECH_PARAMS_HELI",\n "SPEECH_PARAMS_INTERRUPT",\n "SPEECH_PARAMS_INTERRUPT_FRONTEND",\n "SPEECH_PARAMS_INTERRUPT_NO_FORCE",\n "SPEECH_PARAMS_INTERRUPT_NO_FORCE_FRONTEND",\n "SPEECH_PARAMS_INTERRUPT_SHOUTED",\n "SPEECH_PARAMS_INTERRUPT_SHOUTED_CLEAR",\n "SPEECH_PARAMS_INTERRUPT_SHOUTED_CRITICAL",\n "SPEECH_PARAMS_MEGAPHONE",\n "SPEECH_PARAMS_SHOUTED",\n "SPEECH_PARAMS_SHOUTED_CLEAR",\n "SPEECH_PARAMS_SHOUTED_CRITICAL",\n "SPEECH_PARAMS_STANDARD"\n}\n```\n\n**Parameters**\n- `ped`: The ped to play the ambient speech.\n- `speechName`: Name of the speech to play, eg. "GENERIC_HI".\n- `speechParam`: Name of the speechParam rage game object to look to for various details on how the speech should be played. PlayPedAmbientSpeechWithVoiceNative ```\nThis is the same as PLAY_PED_AMBIENT_SPEECH_NATIVE and PLAY_PED_AMBIENT_SPEECH_AND_CLONE_NATIVE but it will allow you to play a speech file from a specific voice file. It works on players and all peds, even animals.\nEX (C#):\nGTA.Native.Function.Call(Hash._0x3523634255FC3318, Game.Player.Character, "GENERIC_INSULT_HIGH", "s_m_y_sheriff_01_white_full_01", "SPEECH_PARAMS_FORCE_SHOUTED", 0);\nThe first param is the ped you want to play it on, the second is the speech name, the third is the voice name, the fourth is the speech param, and the last param is usually always 0.\n``` PlayPedRingtone ```\nAll found occurrences in b617d, sorted alphabetically and identical lines removed: pastebin.com/RFb4GTny \nAUDIO::PLAY_PED_RINGTONE("Remote_Ring", PLAYER::PLAYER_PED_ID(), 1); \nAUDIO::PLAY_PED_RINGTONE("Dial_and_Remote_Ring", PLAYER::PLAYER_PED_ID(), 1); \n``` PlayPoliceReport ```\nPlays the given police radio message.\nAll found occurrences in b617d, sorted alphabetically and identical lines removed: pastebin.com/GBnsQ5hr\n``` @@ -2426,8 +2477,8 @@ PlayStreamFromPed Plays a preloaded stream back from the specified ped. PlayStreamFromPosition Plays a preloaded stream back from the specified Vector3. PlayStreamFromVehicle Plays a preloaded stream back from the specified ped vehicle PlaySynchronizedCamAnim ```\nExamples: \nCAM::PLAY_SYNCHRONIZED_CAM_ANIM(l_2734, NETWORK::_02C40BF885C567B6(l_2739), "PLAYER_EXIT_L_CAM", "mp_doorbell"); \nCAM::PLAY_SYNCHRONIZED_CAM_ANIM(l_F0D[7/*1*/], l_F4D[15/*1*/], "ah3b_attackheli_cam2", "missheistfbi3b_helicrash"); \n```\n\n[Animations list](https://alexguirre.github.io/animations-list/) -PlaySynchronizedEntityAnim ```\np4 and p7 are usually 1000.0f. \n```\n\n[Animations list](https://alexguirre.github.io/animations-list/) -PlaySynchronizedMapEntityAnim [Animations list](https://alexguirre.github.io/animations-list/) +PlaySynchronizedEntityAnim [Animations list](https://alexguirre.github.io/animations-list/)\n\n**Parameters**\n- `entity`: The entity handle to play the animation on.\n- `animName`: The name of the animation to play.\n- `animDictName`: The name of the animation dictionary to use.\n- `fBlendInDelta`: Blend in time.\n- `fBlendOutDelta`: Blend out time.\n- `iFlags`: The flags to use when playing the animation. See [`TASK_PLAY_ANIM`](#\\_0xEA47FE3719165B94). +PlaySynchronizedMapEntityAnim [Animations list](https://alexguirre.github.io/animations-list/)\n\n**Parameters**\n- `pAnimName`: The name of the animation to play.\n- `pAnimDictName`: The name of the animation dictionary to use.\n- `fBlendDelta`: Blend in time.\n- `fBlendOutDelta`: Blend out time.\n- `flags`: The flags to use when playing the animation. See [`TASK_PLAY_ANIM`](#\\_0xEA47FE3719165B94). PlayerAttachVirtualBound ```\nOnly 1 match. ob_sofa_michael. \nPLAYER::PLAYER_ATTACH_VIRTUAL_BOUND(-804.5928f, 173.1801f, 71.68436f, 0f, 0f, 0.590625f, 1f, 0.7f);1.0.335.2, 1.0.350.1/2, 1.0.372.2, 1.0.393.2, 1.0.393.4, 1.0.463.1; \n``` PlayerDetachVirtualBound ```\n1.0.335.2, 1.0.350.1/2, 1.0.372.2, 1.0.393.2, 1.0.393.4, 1.0.463.1; \n``` PlayerId Returns the player index for the local player.\n\n**Returns** The local player's player index. @@ -2506,6 +2557,10 @@ RaceGalleryFullscreen ```\nIf toggle is true, the map is shown in full screen\nI RaceGalleryNextBlipSprite ```\nSets the sprite of the next BLIP_GALLERY blip, values used in the native scripts: 143 (ObjectiveBlue), 144 (ObjectiveGreen), 145 (ObjectiveRed), 146 (ObjectiveYellow).\n``` RaiseConvertibleRoof Raises the roof on a convertible vehicle, utilizing any available animations for the action. This native is particularly useful for creating a realistic interaction with convertible vehicles by animating the process of raising the roof.\n\nYou can check if the vehicle has an convertible roof using [`IS_VEHICLE_A_CONVERTIBLE`](#\\_0x52F357A30698BCCE).\n\nTo lower the convertible roof, you can use [`LOWER_CONVERTIBLE_ROOF`](#\\_0xDED51F703D0FA83D).\n\n```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `vehicle`: The convertible vehicle whose roof you wish to raise.\n- `instantlyRaise`: A boolean indicating whether the roof should be raised instantly without the animation transition. Set `false` to raise the roof with the animation, or `true` to raise it immediately.\n\n```lua\nlocal vehicle = GetVehiclePedIsIn(PlayerPedId(), false)\nif not IsVehicleAConvertible(vehicle, false) then return end\nRaiseConvertibleRoof(vehicle, false)\n``` RecordBrokenGlass Creates a broken glass area +RecorderStartRecording > This native only works in FiveM for GTAV Enhanced.\n\nStarts recording the network sync of the entity with the given network ID to a file.\n\n**Parameters**\n- `netId`: The network ID of the entity to record.\n- `compressed`: Whether to enable compression of the recording.\n- `fileName`: The name of the file to write the recording to. +RecorderStartReplay > This native only works in FiveM for GTAV Enhanced.\n\nStarts replaying a previously recorded file. The `mode` argument controls playback behavior:\n\n* `0`: Once. Play the recording a single time.\n* `1`: Loop. Repeat the recording continuously.\n* `2`: Perfect loop. Repeat the recording seamlessly.\n\n**Parameters**\n- `fileName`: The name of the recorded file to replay.\n- `mode`: The playback mode. See the description for supported values.\n\n**Returns** A replay ID that can be passed to `RECORDER_STOP_REPLAY`. +RecorderStopRecording > This native only works in FiveM for GTAV Enhanced.\n\nStops the recording in progress for the entity with the given network ID.\n\n**Parameters**\n- `netId`: The network ID of the entity whose recording should be stopped. +RecorderStopReplay > This native only works in FiveM for GTAV Enhanced.\n\nStops the replay with the given replay ID.\n\n**Parameters**\n- `replayId`: The replay ID as returned by `RECORDER_START_REPLAY`. RefreshClosestOceanShoreline Refreshes the closest shoreline using the nearest road position. RegisterArchetypes **Experimental**: This native may be altered or removed in future versions of CitizenFX without warning.\n\nRegisters a set of archetypes with the game engine. These should match `CBaseArchetypeDef` class information from the game.\n\n**Parameters**\n- `factory`: A function returning a list of archetypes.\n\n```lua\nRegisterArchetypes(function()\n return {\n {\n flags = 32,\n bbMin = vector3(-39.99570000, -8.00155600, -2.56818800),\n bbMax = vector3(40.00439000, 7.99858000, 1.44575100),\n bsCentre = vector3(0.00434110, -0.00148870, -0.56121830),\n bsRadius = 40.84160000,\n name = 'my_asset',\n textureDictionary = 'my_asset',\n physicsDictionary = 'my_asset',\n assetName = 'my_asset',\n assetType = 'ASSET_TYPE_DRAWABLE',\n lodDist = 450.45,\n specialAttribute = 0\n }\n }\nend)\n``` RegisterCommand Registered commands can be executed by entering them in the client console (this works for client side and server side registered commands). Or by entering them in the server console/through an RCON client (only works for server side registered commands). Or if you use a supported chat resource, like the default one provided in the cfx-server-data repository, then you can enter the command in chat by prefixing it with a `/`.\n\nCommands registered using this function can also be executed by resources, using the [`ExecuteCommand` native](#\\_0x561C060B).\n\nThe restricted bool is not used on the client side. Permissions can only be checked on the server side, so if you want to limit your command with an ace permission automatically, make it a server command (by registering it in a server script).\n\n**Example result**:\n\n![](https://i.imgur.com/TaCnG09.png)\n\n**Parameters**\n- `commandName`: The command you want to register.\n- `handler`: A handler function that gets called whenever the command is executed.\n- `restricted`: If this is a server command and you set this to true, then players will need the command.yourCommandName ace permission to execute this command.\n\n```lua\n-- (server side script)\n-- Registers a command named 'ping'.\nRegisterCommand("ping", function(source, args, rawCommand)\n -- If the source is > 0, then that means it must be a player.\n if (source > 0) then\n \n -- result (using the default GTA:O chat theme) https://i.imgur.com/TaCnG09.png\n TriggerClientEvent("chat:addMessage", -1, {\n args = {\n GetPlayerName(source),\n "PONG!"\n },\n color = { 5, 255, 255 }\n })\n \n -- If it's not a player, then it must be RCON, a resource, or the server console directly.\n else\n print("This command was executed by the server console, RCON client, or a resource.")\n end\nend, false --[[this command is not restricted, everyone can use this.]])\n``` @@ -2518,7 +2573,7 @@ RegisterKeyMapping Registers a key mapping for the current resource.\n\nSee the RegisterNoirScreenEffectThisFrame Used with 'NG_filmnoir_BW{01,02}' timecycles and the "NOIR_FILTER_SOUNDS" audioref. RegisterObjectScriptBrain ```\nRegisters a script for any object with a specific model hash.\nBRAIN::REGISTER_OBJECT_SCRIPT_BRAIN("ob_telescope", ${prop_telescope_01}, 100, 4.0, -1, 9);\n``` RegisterPedheadshot ```\ngtaforums.com/topic/885580-ped-headshotmugshot-txd/ \n```\n\n**Parameters**\n- `ped`: The ped you want to take the "headshot" of.\n\n**Returns** It returns a Pedheadshot handle, which can be used by natives such as [`GET_PEDHEADSHOT_TXD_STRING`](#\\_0xDB4EACD4AD0A5D6B)\n\n```lua\nCreateThread(function()\n -- Get the ped headshot image.\n local handle = RegisterPedheadshot(PlayerPedId())\n while not IsPedheadshotReady(handle) or not IsPedheadshotValid(handle) do\n Wait(0)\n end\n local txd = GetPedheadshotTxdString(handle)\n\n -- Add the notification text, the more text you add the smaller the font\n -- size will become (text is forced on 1 line only), so keep this short!\n SetNotificationTextEntry("STRING")\n AddTextComponentSubstringPlayerName("Headshot")\n\n -- Draw the notification\n DrawNotificationAward(txd, txd, 200, 0, "FM_GEN_UNLOCK")\n\n -- Cleanup after yourself!\n UnregisterPedheadshot(handle)\nend)\n``` -RegisterPedheadshotTransparent Similar to REGISTER_PEDHEADSHOT but creates a transparent background instead of black.\n\n**Result of the example code:**\n\n\n**Parameters**\n- `ped`: A ped handle.\n\n**Returns** The Pedheadshot handle.\n\n```lua\nCreateThread(function()\n -- Get the ped headshot image.\n local handle = RegisterPedheadshotTransparent(PlayerPedId())\n while not IsPedheadshotReady(handle) or not IsPedheadshotValid(handle) do\n Wait(0)\n end\n local txd = GetPedheadshotTxdString(handle)\n\n -- Add the notification text, the more text you add the smaller the font\n -- size will become (text is forced on 1 line only), so keep this short!\n SetNotificationTextEntry("STRING")\n AddTextComponentSubstringPlayerName("Transparent Headshot")\n\n -- Draw the notification\n DrawNotificationAward(txd, txd, 200, 0, "FM_GEN_UNLOCK")\n \n -- Cleanup after yourself!\n UnregisterPedheadshot(handle)\nend)\n``` +RegisterPedheadshotTransparent Similar to REGISTER_PEDHEADSHOT but creates a transparent background instead of black.\n\n**Result of the example code:**\n\n![](https://i.imgur.com/TDV7XMx.png)\n\n**Parameters**\n- `ped`: A ped handle.\n\n**Returns** The Pedheadshot handle.\n\n```lua\nCreateThread(function()\n -- Get the ped headshot image.\n local handle = RegisterPedheadshotTransparent(PlayerPedId())\n while not IsPedheadshotReady(handle) or not IsPedheadshotValid(handle) do\n Wait(0)\n end\n local txd = GetPedheadshotTxdString(handle)\n\n -- Add the notification text, the more text you add the smaller the font\n -- size will become (text is forced on 1 line only), so keep this short!\n SetNotificationTextEntry("STRING")\n AddTextComponentSubstringPlayerName("Transparent Headshot")\n\n -- Draw the notification\n DrawNotificationAward(txd, txd, 200, 0, "FM_GEN_UNLOCK")\n \n -- Cleanup after yourself!\n UnregisterPedheadshot(handle)\nend)\n``` RegisterRawKeymap Registers a keymap that will be triggered whenever `rawKeyIndex` is pressed or released.\n\n`onKeyUp` and `onKeyDown` will not provide any arguments.\n\n```ts\nfunction onStateChange();\n```\n\n**Parameters**\n- `keymapName`: A **unique** name that the keymap will be bound to, duplicates will result in the keymap not being registered.\n- `onKeyDown`: The function to run when the key is being pressed, or `nil`.\n- `onKeyUp`: The function to run when the key is no longer being pressed, or `nil`.\n- `rawKeyIndex`: The virtual key to bind this keymap to, see a list [here](https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes)\n- `canBeDisabled`: If calls to [DISABLE_RAW_KEY_THIS_FRAME](#\\_0x8BCF0014) will disable this keymap, if a keymap was disabled when the key was pressed down it will still call `onKeyUp` on release.\n\n```lua\nfunction on_key_up()\n print("key no longer pressed")\nend\n\nfunction on_key_down()\n print("key is pressed")\nend\n\nlocal KEY_E = 69\nlocal canBeDisabled = false\n\n\nRegisterRawKeymap("our_keymap", on_key_up, on_key_down, KEY_E, canBeDisabled)\n``` RegisterResourceAsEventHandler An internal function which allows the current resource's HLL script runtimes to receive state for the specified event.\n\n**Parameters**\n- `eventName`: An event name, or "\\*" to disable HLL event filtering for this resource. RegisterResourceAsset **Experimental**: This native may be altered or removed in future versions of CitizenFX without warning.\n\nRegisters a cached resource asset with the resource system, similar to the automatic scanning of the `stream/` folder.\n\n**Parameters**\n- `resourceName`: The resource to add the asset to.\n- `fileName`: A file name in the resource.\n\n**Returns** A cache string to pass to `REGISTER_STREAMING_FILE_FROM_CACHE` on the client. @@ -2548,7 +2603,7 @@ RemoveAllPickupsOfType Pickup hashes can be found [here](https://gist.github.com RemoveAllProjectilesOfType If `explode` true, then removal is done through exploding the projectile. Basically the same as EXPLODE_PROJECTILES but without defining the owner ped. RemoveAllStickyBombsFromEntity ```\nUsed in am_mp_property_ext and am_mp_property_int \n```\n\n```\nNativeDB Added Parameter 2: Ped ped\n``` RemoveAnimSet Unloads the specified animation set. An animation set provides movement animations for a ped.\n\nAnimation set and clip set are synonymous. See [`SET_PED_MOVEMENT_CLIPSET`](#\\_0xAF8A94EDE7712BEF). -RemoveBlip Removes the blip from your map.\n\n**Note:** This function only works on the script that created the blip, if you wish to remove blips created by other scripts, see [`SET_THIS_SCRIPT_CAN_REMOVE_BLIPS_CREATED_BY_ANY_SCRIPT`](#\\_0x86A652570E5F25DD).\n\n**Parameters**\n- `blip`: Blip handle to remove.\n\n```lua\n-- Create the blip\nlocal coords = vector3(200.0, 200.0, 5.0)\nlocal blip = AddBlipForCoord(coords)\n\n-- When you want to remove it\nRemoveBlip(blip)\n``` +RemoveBlip Removes the blip from your map.\n\n**Note:** This function only works on the script that created the blip, if you wish to remove blips created by other scripts, see [`SET_THIS_SCRIPT_CAN_REMOVE_BLIPS_CREATED_BY_ANY_SCRIPT`](#\\_0xB98236CAAECEF897).\n\n**Parameters**\n- `blip`: Blip handle to remove.\n\n```lua\n-- Create the blip\nlocal coords = vector3(200.0, 200.0, 5.0)\nlocal blip = AddBlipForCoord(coords)\n\n-- When you want to remove it\nRemoveBlip(blip)\n``` RemoveClipSet ```\nAlias for REMOVE_ANIM_SET. \n``` RemoveConvarChangeListener \n\n**Parameters**\n- `cookie`: The cookie returned from [ADD_CONVAR_CHANGE_LISTENER](#\\_0xAB7F7241) RemoveCurrentRise ```\np0 is the handle returned from _0xFDBF4CDBC07E1706 \n``` @@ -2559,7 +2614,7 @@ RemoveDryVolume Removes a dry volume from the game session.\nSee CREATE_DRY_VOLU RemoveEntityFromAudioMixGroup Removes an entity from its current mix group.\n\n**Parameters**\n- `fadeOut`: Defaults to 0.0 RemoveHealthConfig Removes health config.\n\n**Parameters**\n- `configName`: Removes config name. Cannot be default game health config name. RemoveIpl IPL list can be found [here](https://gist.github.com/4mmonium/4c8a076b5f712a7cc64666003009a2e7). -RemoveModelHide p5 requires more research. See also [`CREATE_MODEL_HIDE`](#\\_0x8A97BCA30A0CE478) and [`CREATE_MODEL_SWAP`](#\\_0x92C47782FDA8B2A3).\n\nNetwork players do not see changes done with this.\n\n**Parameters**\n- `radius`: The radius specified in gta units\n- `model`: The model that you want to make visible\n\n```lua\n-- This could be any coordinates, in this example I am using the players ped coordinates\nlocal playerPedCoords = GetEntityCoords(PlayerPedId())\n\n-- Hides all entities with the hash "1437508529" within 1.0 gta units.\nCreateModelHide(playerPedCoords, 1.0, 1437508529, true)\n\nCitizen.Wait(2500)\n\n-- This will make all hidden entities with the hash "1437508529" within 1.0 gta units visible.\nRemoveModelHide(playerPedCoords, 1.0, 1437508529, false)\n``` +RemoveModelHide Makes all objects of the specified model that were hidden using [`CREATE_MODEL_HIDE`](#\\_0x8A97BCA30A0CE478) or [`CREATE_MODEL_HIDE_EXCLUDING_SCRIPT_OBJECTS`](#\\_0x3A52AE588830BF7F) visible again.\n\nIf lazy is false, all matching objects currently in scope are restored immediately.\nIf lazy is true, objects will only reappear when their map is reloaded.\n\n**Parameters**\n- `x`: X Coordinate of the sphere center.\n- `y`: Y Coordinate of the sphere center.\n- `z`: Z Coordinate of the sphere center.\n- `radius`: Radius of the sphere.\n- `model`: The model hash to make visible again.\n- `lazy`: false to apply the change immediately.\n\n```lua\n-- This could be any coordinates, in this example I am using the players ped coordinates\nlocal playerPedCoords = GetEntityCoords(PlayerPedId())\n\n-- Hides all entities with the hash "1437508529" within 1.0 gta units.\nCreateModelHide(playerPedCoords, 1.0, 1437508529, true)\n\nCitizen.Wait(2500)\n\n-- This will make all hidden entities with the hash "1437508529" within 1.0 gta units visible.\nRemoveModelHide(playerPedCoords, 1.0, 1437508529, false)\n``` RemoveMpGamerTag Removes the gamer tag associated with the provided ID. This does not happen instantly. Use [IS_MP_GAMER_TAG_FREE](#\\_0x595B5178E412E199) to determine when the ID is free for reuse.\n\n**Parameters**\n- `gamerTagId`: A player ID with a gamer tag or a fake gamer tag ID. RemoveMultiplayerHudCash ```\nRemoves multiplayer cash hud each frame \n``` RemovePedDefensiveArea ```\nPed will no longer get angry when you stay near him. \n``` @@ -2588,9 +2643,10 @@ RequestAdditionalText ```\nRequest a gxt into the passed slot. \n``` RequestAmbientAudioBank This native is marked as deprecated internally, please use [REQUEST_SCRIPT_AUDIO_BANK](#\\_0x2F844A8B08D76685)\n\nThis native has a new argument on newer game builds:\n\n* **playerBits**: RequestAnimSet Starts loading the specified animation set. An animation set provides movement animations for a ped. See [`SET_PED_MOVEMENT_CLIPSET`](#\\_0xAF8A94EDE7712BEF). RequestCutFile ```\nSimply loads the cutscene and doesn't do extra stuff that REQUEST_CUTSCENE does.\n``` -RequestCutscene \n\n**Parameters**\n- `cutsceneName`: Case insensitive\n- `flags`: Usually 8 +RequestCutscene \n\n**Parameters**\n- `cutsceneName`: Case insensitive name of the .cut file\n- `flags`: Usually 8 RequestCutsceneWithPlaybackList ```\nplaybackFlags: Which scenes should be played.\nExample: 0x105 (bit 0, 2 and 8 set) will enable scene 1, 3 and 9.\n```\n\n**Parameters**\n- `flags`: Usually 8 RequestIpl ```\nExemple: REQUEST_IPL("TrevorsTrailerTrash");\n``` +RequestMenuPedModel Calls [`REQUEST_MODEL`](#\\_0x963D27A58DF860AC) with the `STRFLAG_PRIORITY_LOAD` and `STRFLAG_FORCE_LOAD` set.\n\n**Parameters**\n- `model`: The model to request. RequestMissionAudioBank This native is marked as deprecated internally, please use [REQUEST_SCRIPT_AUDIO_BANK](#\\_0x2F844A8B08D76685)\n\nThis native has a new argument on newer game builds:\n\n* **playerBits**: RequestModel Request a model (archetype) to be loaded for use by the current script. Use SET_MODEL_AS_NO_LONGER_NEEDED when done using the model in script.\n\n**Parameters**\n- `model`: The model to request.\n\n```lua\nlocal modelHash = `adder`\nRequestModel(modelHash)\nwhile not HasModelLoaded(modelHash) do\n Wait(0)\nend\n\n-- omitted: creating a vehicle\n\n-- when done using the model\nSetModelAsNoLongerNeeded(modelHash)\n``` RequestModelsInRoom ```\nSTREAMING::REQUEST_MODELS_IN_ROOM(l_13BC, "V_FIB01_cur_elev");\nSTREAMING::REQUEST_MODELS_IN_ROOM(l_13BC, "limbo");\nSTREAMING::REQUEST_MODELS_IN_ROOM(l_13BB, "V_Office_gnd_lifts");\nSTREAMING::REQUEST_MODELS_IN_ROOM(l_13BB, "limbo");\nSTREAMING::REQUEST_MODELS_IN_ROOM(l_13BC, "v_fib01_jan_elev");\nSTREAMING::REQUEST_MODELS_IN_ROOM(l_13BC, "limbo");\n``` @@ -2614,6 +2670,7 @@ RequestWaypointRecording ```\nFor a full list of the points, see here: goo.gl/wI RequestWeaponAsset ```\nNearly every instance of p1 I found was 31. Nearly every instance of p2 I found was 0. \nREQUEST_WEAPON_ASSET(iLocal_1888, 31, 26); \n``` ReserveNetworkLocalObjects ```\nInternal logging string: SCRIPT_RESERVING_LOCAL_OBJECTS\n```\n\n```\nNativeDB Introduced: v1290\n``` ReserveNetworkLocalPeds ```\nInternal logging string: SCRIPT_RESERVING_LOCAL_PEDS\n```\n\n```\nNativeDB Introduced: v1493\n``` +ResetAdaptation Resets AnimPostFX adaptation.\n\n**Parameters**\n- `numFrames`: Number of frames. ResetBenchmarkRecording ```\nBegins with RESET_*. Next character in the name is either D or E.\n``` ResetDeepOceanScaler ```\nSets the waves intensity back to original (1.0 in most cases). \n``` ResetDispatchSpawnLocation ```\nNativeDB Introduced: v1868\n``` @@ -2710,6 +2767,7 @@ SetAmbientZoneListState \n\n**Parameters**\n- `enabled`: Enables/disables a list SetAmbientZoneListStatePersistent \n\n**Parameters**\n- `enabled`: Enables/disables a list of ambient zones persistently\n- `forceUpdate`: Set to true to force a zone to become disabled even if its currently active, default behaviour is to only change state when the player leaves the zone. SetAmbientZoneState \n\n**Parameters**\n- `enabled`: Enables/disables an ambient zone for the duration of this script\n- `forceUpdate`: Set to true to force a zone to become disabled even if its currently active, default behaviour is to only change state when the player leaves the zone. SetAmbientZoneStatePersistent \n\n**Parameters**\n- `enabled`: Enables/disables an ambient zone for the duration of this script\n- `forceUpdate`: Set to true to force a zone to become disabled even if its currently active, default behaviour is to only change state when the player leaves the zone. +SetAmmoInVehicleWeaponClip ```\nNativeDB Introduced: v3407\n``` SetAnimPhase ```\nNativeDB Introduced: v2372\n``` SetAnimalMood ```cpp\nenum eAudAnimalMood {\n AUD_ANIMAL_MOOD_ANGRY = 0,\n AUD_ANIMAL_MOOD_PLAYFUL = 1,\n\n AUD_ANIMAL_MOOD_NUM_MOODS = 2\n}\n```\n\n**Parameters**\n- `mood`: Refer to `eAudAnimalMood` SetArtificialLightsState Does not affect weapons, particles, fire/explosions, flashlights or the sun.\n\nWhen set to true, all emissive textures (including ped components that have light effects), street lights, building lights, vehicle lights, etc will all be turned off.\n\nUsed in Humane Labs Heist for EMP.\n\n**Parameters**\n- `state`: True turns off all artificial light sources in the map: buildings, street lights, car lights, etc. False turns them back on.\n\n```lua\n-- Disable all lights in the map.\nSetArtificialLightsState(true)\n\n-- Enable all lights in the map.\nSetArtificialLightsState(false)\n``` @@ -2724,7 +2782,7 @@ SetAudioSubmixEffectRadioFx Assigns a RadioFX effect to a submix effect slot.\n\ SetAudioSubmixOutputVolumes Sets the volumes for the sound channels in a submix effect.\nValues can be between 0.0 and 1.0.\nChannel 5 and channel 6 are not used in voice chat but are believed to be center and LFE channels.\nOutput slot starts at 0 for the first ADD_AUDIO_SUBMIX_OUTPUT call then incremented by 1 on each subsequent call.\n\n**Parameters**\n- `submixId`: The submix.\n- `outputSlot`: The output slot index.\n- `frontLeftVolume`: The volume for the front left channel.\n- `frontRightVolume`: The volume for the front right channel.\n- `rearLeftVolume`: The volume for the rear left channel.\n- `rearRightVolume`: The volume for the rear right channel.\n- `channel5Volume`: The volume for channel 5.\n- `channel6Volume`: The volume for channel 6. SetAudioVehiclePriority Sets the priority for the given vehicle. This is a hint for the audio system as to what LOD the\nvehicle should use.\n\n'High' priority will bump up the activation range significantly and prevent it\nfrom dropping when the vehicle is not within the view frustrum.\n\n'Max' will attempt to keep the vehicle at maximum LOD regardless of how far it is from the listener or what it is currently doing. Be careful with this!\n\nThere is a hard limit of 5 simulataneous granular cars (including the player) so we are quite limited on the number\nwe can play at once, so setting vehicles to max priority will reduce the number of engines availble for regular NPC vehicles\n\n```cpp\nenum eAudVehiclePriority {\n AUDIO_VEHICLE_PRIORITY_NORMAL = 0,\n AUDIO_VEHICLE_PRIORITY_MEDIUM = 1,\n AUDIO_VEHICLE_PRIORITY_MAX = 2,\n AUDIO_VEHICLE_PRIORITY_HIGH = 3,\n}\n``` SetBigmapActive Toggles the big minimap state like in GTA:Online.\n\nTo get the current state of the minimap, use [`IS_BIGMAP_ACTIVE`](#\\_0xFFF65C63).\n\n**Parameters**\n- `toggleBigMap`: Enable or disable the expanded minimap.\n- `showFullMap`: Enable or disable the full map from being shown on the minimap, requires p0 to be true. -SetBikeOnStand ```\nOnly works on bikes, both X and Y work in the -1 - 1 range.\nX forces the bike to turn left or right (-1, 1)\nY forces the bike to lean to the left or to the right (-1, 1)\nExample with X -1/Y 1\nhttp://i.imgur.com/TgIuAPJ.jpg\n``` +SetBikeOnStand Only works on bikes, both X and Y work in the -1 - 1 range.\nX forces the bike to turn left or right (-1, 1)\nY forces the bike to lean to the left or to the right (-1, 1)\n\nExample with X -1/Y 1:\n\n![](https://i.imgur.com/91sAMD5.png) SetBinkMovie Creates an integer (usually 1) for a BINK movie to be called with other natives.\n[List of all BINK movies (alphabetically ordered) as of b2802](https://gist.github.com/ItsJunction/8046f28c29ea8ff2821e9e4f933f595f)\n\n**Parameters**\n- `name`: The BINK movie to play (with or without file extension).\n\n```lua\nCitizen.CreateThread(function()\n local binkint = SetBinkMovie("casino_trailer")\n SetBinkMovieTime(binkint, 0.0) -- Seeks to 0%\n\n while (GetBinkMovieTime(binkint) < 100.0) do -- Very Basic Idea That Works?\n print(math.floor(GetBinkMovieTime(binkint) * 100)/100 .. "%") -- Prints current playtime (as percentage).\n PlayBinkMovie(binkint)\n DrawBinkMovie(binkint, 0.5, 0.5, 1.0, 1.0, 0.0, 255, 255, 255, 255) -- This example draws and plays in Fullscreen and in the center of screen (no matter the resolution).\n Citizen.Wait(0)\n end\nend)\n``` SetBinkMovieTime Seeks a BINK movie to a specified position.\n\n**Parameters**\n- `binkMovie`: The movie that is being played.\n- `progress`: As a percentage (0.0 - 100.0).\n\n```lua\n-- Movie drawn prior\nSetBinkMovieTime(1, 50.0) -- Seeks to 50% in.\n``` SetBinkMovieUnk_2 ```\nNativeDB Introduced: v1868\n``` @@ -2734,7 +2792,7 @@ SetBit ```\nThis sets bit [offset] of [address] to on.\nThe offsets used are dif SetBlipAlpha ```\nSets alpha-channel for blip color.\nExample:\nBlip blip = HUD::ADD_BLIP_FOR_ENTITY(entity);\nHUD::SET_BLIP_COLOUR(blip , 3);\nHUD::SET_BLIP_ALPHA(blip , 64);\n``` SetBlipAsFriendly Allows the user to set a blip as friendly or enemy based on the toggle.\n\n**Parameters**\n- `blip`: The blip handle\n- `toggle`: True for friendly, false for enemy SetBlipAsShortRange Sets whether or not the specified blip should only be displayed when nearby, or on the minimap.\n\n**Parameters**\n- `blip`: The blip handle.\n- `toggle`: True to only display the blip as 'short range', false to display the blip from a longer distance. -SetBlipCategory Examples result:\n\n![](https://i.imgur.com/skY6vAJ.png)\n\n**index:**\n\n```\n1 = No distance shown in legend\n2 = Distance shown in legend\n7 = "Other Players" category, also shows distance in legend\n10 = "Property" category\n11 = "Owned Property" category\n```\n\nAny other value behaves like `index = 1`, `index` wraps around after 255\n\nBlips with categories `7`, `10` or `11` will all show under the specific categories listing in the map legend, regardless of sprite or name.\n\n**Legend entries**\n\n| index | Legend entry | Label |\n| --- | --- | --- |\n| 7 | Other Players | `BLIP_OTHPLYR` |\n| 10 | Property | `BLIP_PROPCAT` |\n| 11 | Owned Property | `BLIP_APARTCAT` |\n\n**Parameters**\n- `blip`: The blip to change the category index of\n- `index`: The category index to change to\n\n```lua\nblip = AddBlipForCoord(-702.97290039063, -1393.2911376953, 5.1502623558044)\nSetBlipSprite(blip, 370) -- Helipad For Sale\nSetBlipCategory(blip, 10)\n\nblip = AddBlipForCoord(-712.40521240234, -1298.7811279297, 5.1019215583801)\nSetBlipSprite(blip, 371) -- Dock For Sale\nSetBlipCategory(blip, 10)\n\nblip = AddBlipForCoord(-927.92755126953, -2824.1362304688, 13.947744369507)\nSetBlipSprite(blip, 372) -- Hangar For Sale\nSetBlipCategory(blip, 10)\n``` +SetBlipCategory Examples result:\n\n![](https://i.imgur.com/8MrVdmB.png)\n\n**index:**\n\n```\n1 = No distance shown in legend\n2 = Distance shown in legend\n7 = "Other Players" category, also shows distance in legend\n10 = "Property" category\n11 = "Owned Property" category\n12 - 133 = Custom named categories\n134 - 254 = Custom unnamed categories\n```\n\n`index` wraps around after 255.\n\nBlips with categories `7`, `10`, `11` or `12 - 254` (custom categories) will all show under the specific categories listing in the map legend, regardless of sprite or name.\n\n**Legend entries**\n\n| index | Legend entry | Label |\n| --- | --- | --- |\n| 7 | Other Players | `BLIP_OTHPLYR` |\n| 10 | Property | `BLIP_PROPCAT` |\n| 11 | Owned Property | `BLIP_APARTCAT` |\n| 12 - 133 | Custom categories (Named) | `BLIP_CAT_` + `index` |\n| 134 - 254 | Custom categories (Unnamed) | `-` |\n\n**Parameters**\n- `blip`: The blip to change the category index of\n- `index`: The category index to change to\n\n```lua\nblip = AddBlipForCoord(-702.97290039063, -1393.2911376953, 5.1502623558044)\nSetBlipSprite(blip, 370) -- Helipad For Sale\nSetBlipCategory(blip, 10)\n\nblip = AddBlipForCoord(-712.40521240234, -1298.7811279297, 5.1019215583801)\nSetBlipSprite(blip, 371) -- Dock For Sale\nSetBlipCategory(blip, 10)\n\nblip = AddBlipForCoord(-927.92755126953, -2824.1362304688, 13.947744369507)\nSetBlipSprite(blip, 372) -- Hangar For Sale\nSetBlipCategory(blip, 10)\n\n-- Custom named categories\nblip = AddBlipForCoord(0.0, 0.0, 0.0)\nSetBlipSprite(blip, 375) -- Business For Sale\nSetBlipCategory(blip, 12)\nAddTextEntry("BLIP_CAT_" .. 12, "Businesses For Sale")\n``` SetBlipColour \n\n**Parameters**\n- `blip`: The blip handle to set the color of\n- `color`: This can be a hex color code, or a [blip color](https://docs.fivem.net/docs/game-references/blips/#blip-colors).\n\n```lua\nlocal coords = GetEntityCoords(PlayerPedId())\nlocal blip = AddBlipForCoord(coords.x, coords.y, coords.z)\n\nSetBlipColour(blip, 1) -- Sets the color to red (see list above)\n\n-- You can also use a hex like so:\nSetBlipColour(blip, 0x3A7F3AFF) -- Our custom green\n``` SetBlipDisplay **displayId Behaviour**\n\n| display ID | Behaviour |\n|------------ |------------------------------------------------------------- |\n| 0 | Doesn't show up, ever, anywhere. |\n| 1 | Doesn't show up, ever, anywhere. |\n| 2 | Shows on both main map and minimap. (Selectable on map) |\n| 3 | Shows on main map only. (Selectable on map) |\n| 4 | Shows on main map only. (Selectable on map) |\n| 5 | Shows on minimap only. |\n| 6 | Shows on both main map and minimap. (Selectable on map) |\n| 7 | Doesn't show up, ever, anywhere. |\n| 8 | Shows on both main map and minimap. (Not selectable on map) |\n| 9 | Shows on minimap only. |\n| 10 | Shows on both main map and minimap. (Not selectable on map) |\n\nAnything higher than 10 seems to be exactly the same as 10.\n\nRockstar seem to only use 0, 2, 3, 4, 5 and 8 in the decompiled scripts. SetBlipDisplayIndicatorOnBlip ```\nMust be toggled before being queued for animation\n``` @@ -2744,10 +2802,10 @@ SetBlipNameFromTextFile ```\nDoesn't work if the label text of gxtEntry is >= 80 SetBlipPriority ```\nSee this topic for more details : gtaforums.com/topic/717612-v-scriptnative-documentation-and-research/page-35?p=1069477935 \n``` SetBlipRotation ```\nAfter some testing, looks like you need to use CEIL() on the rotation (vehicle/ped heading) before using it there.\n``` SetBlipRoute ```\nEnable / disable showing route for the Blip-object. \n``` -SetBlipScaleTransformation See https://imgur.com/a/lLkEsMN\n\n```\nNativeDB Introduced: v1734\n``` +SetBlipScaleTransformation Preview:\n![](https://i.imgur.com/jH2JMUl.png)\n\n```\nNativeDB Introduced: v1734\n``` SetBlipShowCone ```\nNativeDB Added Parameter 3: Any p2\n``` SetBlipShrink ```\nMakes a blip go small when off the minimap.\nSET_BLIP_AS_*\n``` -SetBlipSprite Sets the displayed sprite for a specific blip.\n\nThere's a [list of sprites](https://docs.fivem.net/game-references/blips/) on the FiveM documentation site.\n\n**Parameters**\n- `blip`: The blip to change.\n- `spriteId`: The sprite ID to set.\n\n```lua\nSetBlipSprite(blip, 588) -- changes `blip` to radar_nhp_orbit\n``` +SetBlipSprite Sets the displayed sprite for a specific blip.\n\nThere's a [list of sprites](https://docs.fivem.net/docs/game-references/blips/) on the FiveM documentation site.\n\n**Parameters**\n- `blip`: The blip to change.\n- `spriteId`: The sprite ID to set.\n\n```lua\nSetBlipSprite(blip, 588) -- changes `blip` to radar_nhp_orbit\n``` SetBlipSquaredRotation ```\nDoes not require whole number/integer rotations.\n``` SetBlockAmbientPedsFromDroppingWeaponsThisFrame Prevents ambient peds from dropping their weapons for the current frame.\n\n```\nNativeDB Introduced: v3258\n``` SetBlockingOfNonTemporaryEvents ```\nworks with TASK::TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS to make a ped completely oblivious to all events going on around him\n``` @@ -2777,7 +2835,7 @@ SetCamNearDof Specifies when the camera should start being in focus. Can be used SetCamParams \n\n**Parameters**\n- `transitionSpeed`: The speed of transition/interpolation to these new values\n- `rotationOrder`: The order of rotation, see [`GET_ENTITY_ROTATION`](#\\_0xAFBD61CC738D9EB9)\n\n```lua\n-- This is recreating the above mentioned heli transition from finale_heist2a.c\n local cam = CreateCameraWithParams('DEFAULT_SCRIPTED_CAMERA', -1659.574, -707.8544, 29.23778, -7.422939, 0.059666, -117.3886, 43.0557, false, 2)\nSetCamActive(cam, true)\nRenderScriptCams(true, false, 3000, true, false, false)\nSetCamParams(cam, -1660.919, -710.7487, 28.88381, -7.50235, 0.059666, -111.7328, 43.0557, 9100, 0, 0, 2);\n``` SetCamRot Sets the rotation of the camera.\n\n**Parameters**\n- `cam`: The camera handle to use, in order to change the rotation\n- `rotX`: Rotation on X\n- `rotY`: Rotation on Y\n- `rotZ`: Rotation on Z\n- `rotationOrder`: The order of rotation, see [`GET_ENTITY_ROTATION`](#\\_0xAFBD61CC738D9EB9)\n\n```lua\n-- We need a valid camera handle for this to work.\nlocal theCamHandle = CreateCam("DEFAULT_SCRIPTED_CAMERA", true)\nSetCamRot(theCamHandle, 0.1, 0.2, 0.3, 0)\n``` SetCamSplineDuration ```\nI named p1 as timeDuration as it is obvious. I'm assuming tho it is ran in ms(Milliseconds) as usual. \n``` -SetCamSplineSmoothingStyle Sets the smoothing style for a DEFAULT_SPLINE_CAMERA\nRanges from 0 to 3 in rockstar scripts although there are actually 26\n\n```\n0: No lead-in or lead-out smoothing\n1: Smooth lead-in\n2: Smooth lead-out\n3: Both lead-in and lead-out are smoothed\n4-6: Longer speed up, lead-in, lead-out, and both in order as above. \n6: see above, but missed a node in testing(?)\n7: Smoothed lead-in, longer smoothed lead-out\n8: Longer lead-in and lead-out than 6, didn't drop node\n9: Constant acceleration\n10: Constant deceleration. Dropped 2 nodes in testing.\n11: Same as 0\n12: 10 but slower lead-in, reaches end node less early\n13: Extremely close to 3, slightly longer lead-in/lead-out\n14: Constant acceleration, dropped last 2 nodes in testing and halted (?)\n15: Very similar to 10, did not drop any nodes.\n16: Long lead-in, dropped 2 nodes in testing, very long leadout.\n17: Constant acceleration, slower speed-up than 9\n18: Same as 17 is to 9, slightly longer lead-out, lingers at end node\n19: Very long lead in and out\n20: Very long, gradual lead-in acceleration at start, gets extremely fast\n21: Same as 20 but for constant deceleration\n22: 20 and 21 combined, long linger at end node. Dropped 2 nodes in testing\n23: Constant acceleration, doesn't complete path before it stops\n24: Same as 23 but with constant deceleration, but completes path\n25: 23 and 24 combined, insanely fast at middle.\n26: No noticable lead-in, misses last 2 nodes in testing\n27+: Alternates between 0 and 26\n```\n\nThe above is documented and graphed at [Spline Cam Interp Graphs](https://docs.google.com/spreadsheets/d/1ejyiMcEYrhhQOL0mLe8664UN-vU4Oh-SBqQnVcKlFIk/edit?usp=sharing)\n\n```\n\nUsing 1-3 will result in misalignment from the passed durations for the spline nodes, the overall duration will remain but other nodes will be shortened if smoothing anything.\n\nGraph below demonstrates interpolation between 0-1000 and back 10 times.\n\n![](https://i.imgur.com/cixWh7m.png)\n\n## Parameters\n* **cam**: The DEFAULT_SPLINE_CAMERA to apply the smoothing to\n* **smoothingStyle**: 0 to 3, 0 no additional smoothing, 1 smooth lead-in, 2 smooth lead-out, 3 smooth lead-in & lead-out\n``` +SetCamSplineSmoothingStyle Sets the smoothing style for a DEFAULT_SPLINE_CAMERA\nRanges from 0 to 3 in rockstar scripts although there are actually 26\n\n```\n0: No lead-in or lead-out smoothing\n1: Smooth lead-in\n2: Smooth lead-out\n3: Both lead-in and lead-out are smoothed\n4-6: Longer speed up, lead-in, lead-out, and both in order as above. \n6: see above, but missed a node in testing(?)\n7: Smoothed lead-in, longer smoothed lead-out\n8: Longer lead-in and lead-out than 6, didn't drop node\n9: Constant acceleration\n10: Constant deceleration. Dropped 2 nodes in testing.\n11: Same as 0\n12: 10 but slower lead-in, reaches end node less early\n13: Extremely close to 3, slightly longer lead-in/lead-out\n14: Constant acceleration, dropped last 2 nodes in testing and halted (?)\n15: Very similar to 10, did not drop any nodes.\n16: Long lead-in, dropped 2 nodes in testing, very long leadout.\n17: Constant acceleration, slower speed-up than 9\n18: Same as 17 is to 9, slightly longer lead-out, lingers at end node\n19: Very long lead in and out\n20: Very long, gradual lead-in acceleration at start, gets extremely fast\n21: Same as 20 but for constant deceleration\n22: 20 and 21 combined, long linger at end node. Dropped 2 nodes in testing\n23: Constant acceleration, doesn't complete path before it stops\n24: Same as 23 but with constant deceleration, but completes path\n25: 23 and 24 combined, insanely fast at middle.\n26: No noticable lead-in, misses last 2 nodes in testing\n27+: Alternates between 0 and 26\n```\n\nThe above is documented and graphed at [Spline Cam Interp Graphs](https://docs.google.com/spreadsheets/d/1ejyiMcEYrhhQOL0mLe8664UN-vU4Oh-SBqQnVcKlFIk/edit?usp=sharing)\n\nUsing 1-3 will result in misalignment from the passed durations for the spline nodes, the overall duration will remain but other nodes will be shortened if smoothing anything.\n\nGraph below demonstrates interpolation between 0-1000 and back 10 times.\n\n![](https://i.imgur.com/68htz5K.png)\n\n**Parameters**\n- `cam`: The DEFAULT_SPLINE_CAMERA to apply the smoothing to\n- `smoothingStyle`: 0 to 3, 0 no additional smoothing, 1 smooth lead-in, 2 smooth lead-out, 3 smooth lead-in & lead-out SetCamUseShallowDofMode Enables or disables the usage of a shallow DOF. Needs to be set to true to use [`SET_CAM_NEAR_DOF`](#\\_0x3FA4BF0A7AB7DE2C), [`SET_CAM_FAR_DOF`](#\\_0xEDD91296CD01AEE0), etc. Doesn't need to be called every tick.\n\n### Usage Example\n\nA usage example for this native can be found in the following native documentation: [`SET_CAM_DOF_STRENGTH`](#\\_0x5EE29B4D7D5DF897).\n\n**Parameters**\n- `cam`: The camera handle\n- `toggle`: Boolean if the camera should use a shallow depth of field or not SetCamViewModeForContext \n\n**Parameters**\n- `context`: The view context; see [`_GET_CAM_ACTIVE_VIEW_MODE_CONTEXT`](#\\_0x19CAFA3C87F7C2FF).\n- `viewMode`: The view mode; see [`GET_FOLLOW_PED_CAM_VIEW_MODE`](#\\_0x8D4D46230B2C353A). SetCanAttackFriendly ```\nSetting ped to true allows the ped to shoot "friendlies". \np2 set to true when toggle is also true seams to make peds permanently unable to aim at, even if you set p2 back to false. \np1 = false & p2 = false for unable to aim at. \np1 = true & p2 = false for able to aim at. \n``` @@ -2797,6 +2855,8 @@ SetCinematicModeActive ```\nToggles the vehicle cinematic cam; requires the play SetClockTime ```\nSET_CLOCK_TIME(12, 34, 56); \n``` SetCloudSettingsOverride Overrides the cloud settings, which are normally controlled by the weather, with the specified named version. This native allows for custom cloud formations and behaviors that deviate from the default settings associated with the game's current weather conditions.\n\n```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `overrideSettingsName`: The name of the cloud settings to use. Use a empty string to clear the override and return to the default settings. SetCloudsAlpha Allows modification of the cloud opacity. It can also be used in other contexts, such as when the player is in a switch state [`IS_PLAYER_SWITCH_IN_PROGRESS`](#\\_0xD9D2CFFF49FAB35F).\n\n**Parameters**\n- `opacity`: The opacity value to set for clouds.\n\n```lua\n-- Check if the player is in a Switch "state"\nif IsPlayerSwitchInProgress() then\n -- If the player is in a Switch state, set the clouds opacity to 1.0\n SetCloudsAlpha(1.0)\nend\n``` +SetColshapeDimension > This native only works in FiveM for GTAV Enhanced.\n\nSets the dimension (routing bucket) of the collision shape. Only entities in the same dimension will trigger enter/exit events.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n- `dimension`: The dimension (routing bucket) to assign.\n\n```lua\n-- Server-side: create a sphere colshape in a specific dimension\nlocal colShape = CreateColshapeSphere(100.0, 200.0, 30.0, 25.0)\nSetColshapeDimension(colShape, 5)\n\nAddEventHandler('onColshapeEnter', function(entity, shape)\n if shape == colShape then\n print('entity entered the sphere zone in dimension 5')\n end\nend)\n``` +SetColshapeEntityType > This native only works in FiveM for GTAV Enhanced.\n\nSets whether the collision shape should detect a specific entity type.\n\n**Parameters**\n- `colShapeId`: The collision shape ID.\n- `entityType`: The entity type index.\n- `value`: `true` to include this entity type in detection, `false` to exclude it. SetCombatFloat \n\n**Parameters**\n- `combatType`: A value between 0-14, See [`GET_COMBAT_FLOAT`](#\\_0x52DFF8A10508090A) for a list of possible parameters. SetControlLightEffectColor \n\n**Parameters**\n- `padIndex`: The control system instance to use. See [`ENABLE_ALL_CONTROL_ACTIONS`](#\\_0xA5FFE9B05F199DE7). SetControlNormal This is for simulating player input.\n\n**Parameters**\n- `padIndex`: The control system instance to use. See [`ENABLE_ALL_CONTROL_ACTIONS`](#\\_0xA5FFE9B05F199DE7).\n- `control`: The [control ID](https://docs.fivem.net/docs/game-references/controls/#controls) to check.\n- `amount`: An unbounded normal value. @@ -2806,13 +2866,14 @@ SetConversationAudioPlaceholder Used to determine whether conversation should us SetConvertibleRoof Enables or disables the convertible roof on vehicles that support old-style GTA IV roofs, which are not animated. Setting `toggle` to true will apply the roof to the vehicle, and setting it to false will remove the roof, assuming the vehicle has versions with and without a roof.\n\nIf you want to lock or unlock the roof mechanism, use [`SET_CONVERTIBLE_ROOF_LATCH_STATE`](#\\_0x1A78AD3D8240536F).\n\nYou can check if the vehicle has a roof with [`DOES_VEHICLE_HAVE_ROOF`](#\\_0x8AC862B0B32C5B80).\n\n```\nNativeDB Introduced: v323\n```\n\n#### Vehicles with both roofed and roofless versions (others may exist; this list is compiled from decompiled scripts).\n\n* chino\n* voltic\n* buccaneer\n* buccaneer2\n* chino2\n* faction\n* faction2\n* mamba\n\n**Parameters**\n- `vehicle`: The vehicle to which the roof state will be applied.\n- `toggle`: Boolean value where `true` adds the roof and `false` removes it, applicable only if the vehicle has a version with and without a roof.\n\n```lua\n-- In this case we are removing the roof from the vehicle.\nlocal vehicle = GetVehiclePedIsIn(PlayerPedId(), false)\nif not DoesVehicleHaveRoof(vehicle) then return end\nSetConvertibleRoof(vehicle, false)\n``` SetConvertibleRoofLatchState This native is used to latch or unlatch the convertible roof of a vehicle. It allows for direct control over the roof's mechanism without actually opening or closing the roof. This can be useful for scenarios where you need to prepare a vehicle's roof to be opened or closed by another action or to ensure it remains fixed in its current state regardless of other interactions.\n\n```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `vehicle`: The vehicle whose convertible roof latch state is to be set.\n- `bLatched`: A boolean value indicating the desired latch state of the roof. Set to `true` to latch (lock) the roof, preventing it from being opened. Set to `false` to unlatch (unlock) the roof, allowing it to be opened or closed.\n\n```lua\n-- To latch (lock) the convertible roof, preventing it from being opened\nlocal vehicle = GetVehiclePedIsIn(PlayerPedId(), false)\nif not DoesVehicleHaveRoof(vehicle) then return end\nSetConvertibleRoofLatchState(vehicle, true)\n``` SetCreateWeaponObjectLightSource ```\nRequires a component_at_*_flsh to be attached to the weapon object\n``` +SetCursorLocation Sets the position of the mouse cursor within the current UI context (e.g., NUI menu or pause menu).\\\nCoordinates must be in the range 0.0 to 1.0, where (0.5, 0.5) represents the center of the screen.\n\n**Parameters**\n- `x`: Horizontal position (0.0 = left, 1.0 = right)\n- `y`: Vertical position (0.0 = top, 1.0 = bottom)\n\n**Returns** Returns `true` if the cursor position was successfully set, otherwise `false`. SetCustomMpHudColor Set a custom color for the MP HUD, providing a way to customize the HUD's appearance similar to character color changes in MP.\n\n```cpp\nenum eHudColours {\n HUD_COLOUR_PURE_WHITE = 0,\n HUD_COLOUR_WHITE = 1,\n HUD_COLOUR_BLACK = 2,\n HUD_COLOUR_GREY = 3,\n HUD_COLOUR_GREYLIGHT = 4,\n HUD_COLOUR_GREYDARK = 5,\n HUD_COLOUR_RED = 6,\n HUD_COLOUR_REDLIGHT = 7,\n HUD_COLOUR_REDDARK = 8,\n HUD_COLOUR_BLUE = 9,\n HUD_COLOUR_BLUELIGHT = 10,\n HUD_COLOUR_BLUEDARK = 11,\n HUD_COLOUR_YELLOW = 12,\n HUD_COLOUR_YELLOWLIGHT = 13,\n HUD_COLOUR_YELLOWDARK = 14,\n HUD_COLOUR_ORANGE = 15,\n HUD_COLOUR_ORANGELIGHT = 16,\n HUD_COLOUR_ORANGEDARK = 17,\n HUD_COLOUR_GREEN = 18,\n HUD_COLOUR_GREENLIGHT = 19,\n HUD_COLOUR_GREENDARK = 20,\n HUD_COLOUR_PURPLE = 21,\n HUD_COLOUR_PURPLELIGHT = 22,\n HUD_COLOUR_PURPLEDARK = 23,\n HUD_COLOUR_PINK = 24,\n HUD_COLOUR_STAR = 25,\n HUD_COLOUR_STARLIGHT = 26,\n HUD_COLOUR_STARDARK = 27,\n HUD_COLOUR_NET_PLAYER1 = 28,\n HUD_COLOUR_NET_PLAYER2 = 29,\n HUD_COLOUR_NET_PLAYER3 = 30,\n HUD_COLOUR_NET_PLAYER4 = 31,\n HUD_COLOUR_NET_PLAYER5 = 32,\n HUD_COLOUR_NET_PLAYER6 = 33,\n HUD_COLOUR_NET_PLAYER7 = 34,\n HUD_COLOUR_NET_PLAYER8 = 35,\n HUD_COLOUR_NET_PLAYER9 = 36,\n HUD_COLOUR_NET_PLAYER10 = 37,\n HUD_COLOUR_NET_PLAYER11 = 38,\n HUD_COLOUR_NET_PLAYER12 = 39,\n HUD_COLOUR_NET_PLAYER13 = 40,\n HUD_COLOUR_NET_PLAYER14 = 41,\n HUD_COLOUR_NET_PLAYER15 = 42,\n HUD_COLOUR_NET_PLAYER16 = 43,\n HUD_COLOUR_NET_PLAYER17 = 44,\n HUD_COLOUR_NET_PLAYER18 = 45,\n HUD_COLOUR_NET_PLAYER19 = 46,\n HUD_COLOUR_NET_PLAYER20 = 47,\n HUD_COLOUR_NET_PLAYER21 = 48,\n HUD_COLOUR_NET_PLAYER22 = 49,\n HUD_COLOUR_NET_PLAYER23 = 50,\n HUD_COLOUR_NET_PLAYER24 = 51,\n HUD_COLOUR_NET_PLAYER25 = 52,\n HUD_COLOUR_NET_PLAYER26 = 53,\n HUD_COLOUR_NET_PLAYER27 = 54,\n HUD_COLOUR_NET_PLAYER28 = 55,\n HUD_COLOUR_NET_PLAYER29 = 56,\n HUD_COLOUR_NET_PLAYER30 = 57,\n HUD_COLOUR_NET_PLAYER31 = 58,\n HUD_COLOUR_NET_PLAYER32 = 59,\n HUD_COLOUR_SIMPLEBLIP_DEFAULT = 60,\n HUD_COLOUR_MENU_BLUE = 61,\n HUD_COLOUR_MENU_GREY_LIGHT = 62,\n HUD_COLOUR_MENU_BLUE_EXTRA_DARK = 63,\n HUD_COLOUR_MENU_YELLOW = 64,\n HUD_COLOUR_MENU_YELLOW_DARK = 65,\n HUD_COLOUR_MENU_GREEN = 66,\n HUD_COLOUR_MENU_GREY = 67,\n HUD_COLOUR_MENU_GREY_DARK = 68,\n HUD_COLOUR_MENU_HIGHLIGHT = 69,\n HUD_COLOUR_MENU_STANDARD = 70,\n HUD_COLOUR_MENU_DIMMED = 71,\n HUD_COLOUR_MENU_EXTRA_DIMMED = 72,\n HUD_COLOUR_BRIEF_TITLE = 73,\n HUD_COLOUR_MID_GREY_MP = 74,\n HUD_COLOUR_NET_PLAYER1_DARK = 75,\n HUD_COLOUR_NET_PLAYER2_DARK = 76,\n HUD_COLOUR_NET_PLAYER3_DARK = 77,\n HUD_COLOUR_NET_PLAYER4_DARK = 78,\n HUD_COLOUR_NET_PLAYER5_DARK = 79,\n HUD_COLOUR_NET_PLAYER6_DARK = 80,\n HUD_COLOUR_NET_PLAYER7_DARK = 81,\n HUD_COLOUR_NET_PLAYER8_DARK = 82,\n HUD_COLOUR_NET_PLAYER9_DARK = 83,\n HUD_COLOUR_NET_PLAYER10_DARK = 84,\n HUD_COLOUR_NET_PLAYER11_DARK = 85,\n HUD_COLOUR_NET_PLAYER12_DARK = 86,\n HUD_COLOUR_NET_PLAYER13_DARK = 87,\n HUD_COLOUR_NET_PLAYER14_DARK = 88,\n HUD_COLOUR_NET_PLAYER15_DARK = 89,\n HUD_COLOUR_NET_PLAYER16_DARK = 90,\n HUD_COLOUR_NET_PLAYER17_DARK = 91,\n HUD_COLOUR_NET_PLAYER18_DARK = 92,\n HUD_COLOUR_NET_PLAYER19_DARK = 93,\n HUD_COLOUR_NET_PLAYER20_DARK = 94,\n HUD_COLOUR_NET_PLAYER21_DARK = 95,\n HUD_COLOUR_NET_PLAYER22_DARK = 96,\n HUD_COLOUR_NET_PLAYER23_DARK = 97,\n HUD_COLOUR_NET_PLAYER24_DARK = 98,\n HUD_COLOUR_NET_PLAYER25_DARK = 99,\n HUD_COLOUR_NET_PLAYER26_DARK = 100,\n HUD_COLOUR_NET_PLAYER27_DARK = 101,\n HUD_COLOUR_NET_PLAYER28_DARK = 102,\n HUD_COLOUR_NET_PLAYER29_DARK = 103,\n HUD_COLOUR_NET_PLAYER30_DARK = 104,\n HUD_COLOUR_NET_PLAYER31_DARK = 105,\n HUD_COLOUR_NET_PLAYER32_DARK = 106,\n HUD_COLOUR_BRONZE = 107,\n HUD_COLOUR_SILVER = 108,\n HUD_COLOUR_GOLD = 109,\n HUD_COLOUR_PLATINUM = 110,\n HUD_COLOUR_GANG1 = 111,\n HUD_COLOUR_GANG2 = 112,\n HUD_COLOUR_GANG3 = 113,\n HUD_COLOUR_GANG4 = 114,\n HUD_COLOUR_SAME_CREW = 115,\n HUD_COLOUR_FREEMODE = 116,\n HUD_COLOUR_PAUSE_BG = 117,\n HUD_COLOUR_FRIENDLY = 118,\n HUD_COLOUR_ENEMY = 119,\n HUD_COLOUR_LOCATION = 120,\n HUD_COLOUR_PICKUP = 121,\n HUD_COLOUR_PAUSE_SINGLEPLAYER = 122,\n HUD_COLOUR_FREEMODE_DARK = 123,\n HUD_COLOUR_INACTIVE_MISSION = 124,\n HUD_COLOUR_DAMAGE = 125,\n HUD_COLOUR_PINKLIGHT = 126,\n HUD_COLOUR_PM_MITEM_HIGHLIGHT = 127,\n HUD_COLOUR_SCRIPT_VARIABLE = 128,\n HUD_COLOUR_YOGA = 129,\n HUD_COLOUR_TENNIS = 130,\n HUD_COLOUR_GOLF = 131,\n HUD_COLOUR_SHOOTING_RANGE = 132,\n HUD_COLOUR_FLIGHT_SCHOOL = 133,\n HUD_COLOUR_NORTH_BLUE = 134,\n HUD_COLOUR_SOCIAL_CLUB = 135,\n HUD_COLOUR_PLATFORM_BLUE = 136,\n HUD_COLOUR_PLATFORM_GREEN = 137,\n HUD_COLOUR_PLATFORM_GREY = 138,\n HUD_COLOUR_FACEBOOK_BLUE = 139,\n HUD_COLOUR_INGAME_BG = 140,\n HUD_COLOUR_DARTS = 141,\n HUD_COLOUR_WAYPOINT = 142,\n HUD_COLOUR_MICHAEL = 143,\n HUD_COLOUR_FRANKLIN = 144,\n HUD_COLOUR_TREVOR = 145,\n HUD_COLOUR_GOLF_P1 = 146,\n HUD_COLOUR_GOLF_P2 = 147,\n HUD_COLOUR_GOLF_P3 = 148,\n HUD_COLOUR_GOLF_P4 = 149,\n HUD_COLOUR_WAYPOINTLIGHT = 150,\n HUD_COLOUR_WAYPOINTDARK = 151,\n HUD_COLOUR_PANEL_LIGHT = 152,\n HUD_COLOUR_MICHAEL_DARK = 153,\n HUD_COLOUR_FRANKLIN_DARK = 154,\n HUD_COLOUR_TREVOR_DARK = 155,\n HUD_COLOUR_OBJECTIVE_ROUTE = 156,\n HUD_COLOUR_PAUSEMAP_TINT = 157,\n HUD_COLOUR_PAUSE_DESELECT = 158,\n HUD_COLOUR_PM_WEAPONS_PURCHASABLE = 159,\n HUD_COLOUR_PM_WEAPONS_LOCKED = 160,\n HUD_COLOUR_END_SCREEN_BG = 161,\n HUD_COLOUR_CHOP = 162,\n HUD_COLOUR_PAUSEMAP_TINT_HALF = 163,\n HUD_COLOUR_NORTH_BLUE_OFFICIAL = 164,\n HUD_COLOUR_SCRIPT_VARIABLE_2 = 165,\n HUD_COLOUR_H = 166,\n HUD_COLOUR_HDARK = 167,\n HUD_COLOUR_T = 168,\n HUD_COLOUR_TDARK = 169,\n HUD_COLOUR_HSHARD = 170,\n HUD_COLOUR_CONTROLLER_MICHAEL = 171 \n HUD_COLOUR_CONTROLLER_FRANKLIN = 172 \n HUD_COLOUR_CONTROLLER_TREVOR = 173 \n HUD_COLOUR_CONTROLLER_CHOP = 174,\n HUD_COLOUR_VIDEO_EDITOR_VIDEO = 175,\n HUD_COLOUR_VIDEO_EDITOR_AUDIO = 176,\n HUD_COLOUR_VIDEO_EDITOR_TEXT = 177,\n HUD_COLOUR_HB_BLUE = 178,\n HUD_COLOUR_HB_YELLOW = 179,\n HUD_COLOUR_VIDEO_EDITOR_SCORE = 180,\n HUD_COLOUR_VIDEO_EDITOR_AUDIO_FADEOUT = 181,\n HUD_COLOUR_VIDEO_EDITOR_TEXT_FADEOUT = 182,\n HUD_COLOUR_VIDEO_EDITOR_SCORE_FADEOUT = 183,\n HUD_COLOUR_HEIST_BACKGROUND = 184,\n HUD_COLOUR_VIDEO_EDITOR_AMBIENT = 185,\n HUD_COLOUR_VIDEO_EDITOR_AMBIENT_FADEOUT = 186,\n HUD_COLOUR_GANG_BOSS = 187,\n HUD_COLOUR_GOON = 188,\n HUD_COLOUR_BOSS = 189,\n HUD_COLOUR_LOW_FLOW = 190,\n HUD_COLOUR_LOW_FLOW_DARK = 191,\n HUD_COLOUR_G1 = 192,\n HUD_COLOUR_G2 = 193,\n HUD_COLOUR_G3 = 194,\n HUD_COLOUR_G4 = 195,\n HUD_COLOUR_G5 = 196,\n HUD_COLOUR_G6 = 197,\n HUD_COLOUR_G7 = 198,\n HUD_COLOUR_G8 = 199,\n HUD_COLOUR_G9 = 200,\n HUD_COLOUR_G10 = 201,\n HUD_COLOUR_G11 = 202,\n HUD_COLOUR_G12 = 203,\n HUD_COLOUR_G13 = 204,\n HUD_COLOUR_G14 = 205,\n HUD_COLOUR_G15 = 206,\n HUD_COLOUR_ADVERSARY = 207,\n HUD_COLOUR_DEGEN_RED = 208,\n HUD_COLOUR_DEGEN_YELLOW = 209,\n HUD_COLOUR_DEGEN_GREEN = 210,\n HUD_COLOUR_DEGEN_CYAN = 211,\n HUD_COLOUR_DEGEN_BLUE = 212,\n HUD_COLOUR_DEGEN_MAGENTA = 213,\n HUD_COLOUR_STUNT_1 = 214,\n HUD_COLOUR_STUNT_2 = 215,\n HUD_COLOUR_SPECIAL_RACE_SERIES = 216 \n HUD_COLOUR_SPECIAL_RACE_SERIES_DARK = 217,\n HUD_COLOUR_CS = 218 \n HUD_COLOUR_CS_DARK = 219,\n HUD_COLOUR_TECH_GREEN = 220,\n HUD_COLOUR_TECH_GREEN_DARK = 221,\n HUD_COLOUR_TECH_RED = 222,\n HUD_COLOUR_TECH_GREEN_VERY_DARK = 223,\n HUD_COLOUR_PLACEHOLDER_01 = 224,\n HUD_COLOUR_PLACEHOLDER_02 = 225,\n HUD_COLOUR_PLACEHOLDER_03 = 226,\n HUD_COLOUR_PLACEHOLDER_04 = 227,\n HUD_COLOUR_PLACEHOLDER_05 = 228,\n HUD_COLOUR_PLACEHOLDER_06 = 229,\n HUD_COLOUR_PLACEHOLDER_07 = 230,\n HUD_COLOUR_PLACEHOLDER_08 = 231,\n HUD_COLOUR_PLACEHOLDER_09 = 232,\n HUD_COLOUR_PLACEHOLDER_10 = 233,\n HUD_COLOUR_JUNK_ENERGY = 234\n};\n```\n\n```\nNativeDB Introduced: 2545\n```\n\n**Parameters**\n- `hudColorId`: The ID of the custom HUD color. Use -1 (`HUD_COLOUR_INVALID`) to clear the custom color. Refer to the `eHudColours` enum for valid color IDs. SetCustomRadioTrackList Queues up a custom track list on the specified radio station. The content in the track list will be played as soon as possible.\nThe station does not have to be frozen.\n\n**Parameters**\n- `forceNow`: wheter or not to interrupt the current track on the tracklist SetCutsceneAudioOverride ```\nAll occurrences found in b617d, sorted alphabetically and identical lines removed:\nAUDIO::SET_CUTSCENE_AUDIO_OVERRIDE("_AK");\nAUDIO::SET_CUTSCENE_AUDIO_OVERRIDE("_CUSTOM");\nAUDIO::SET_CUTSCENE_AUDIO_OVERRIDE("_TOOTHLESS");\n```\n\nAdd a suffix to the cutscene audio name. Call before loading the cutscene. SetCutsceneEntityStreamingFlags Only used in networked environment with MP cutscenes\n\n**Parameters**\n- `cutsceneEntName`: MP\\_1, MP\\_2, etc\n- `p1`: Always 0 in R\\* scripts\n- `p2`: Always 1 in R\\* scripts SetCutsceneOrigin Sets cutscene location, used for multiplayer apartments/businesses.\n\n**Parameters**\n- `p4`: Often -1, 0 or 1 SetCutscenePedComponentVariation See [`SET_PED_COMPONENT_VARIATION`](#\\_0x262B14F48D29DE80) -SetCutscenePedComponentVariationFromPed Sets the components for a cutscene ped, this will take precendence over the cutscene's component overrides. This does not require the entity be registered.\n\nSee\n\n**Parameters**\n- `cutsceneEntName`: cut file cHandle, i.e Michael, Lamar, Franklin, MP\\_1-MP\\_4 etc\n- `ped`: Ped to copy components from\n- `modelHash`: Not strictly neccasary, can be 0 +SetCutscenePedComponentVariationFromPed Sets the components for a cutscene ped, this will take precendence over the cutscene's component overrides. This does not require the entity be registered.\n\nSee [`REGISTER_ENTITY_FOR_CUTSCENE`](#\\_0xE40C1C56DF95C2E8) for an example.\n\n**Parameters**\n- `cutsceneEntName`: Cutscene file cHandle, i.e Michael, Lamar, Franklin, MP\\_1-MP\\_4\n- `ped`: Ped to copy components from\n- `modelHash`: Not strictly neccasary, can be 0 SetCutscenePedPropVariation See [`SET_PED_PROP_INDEX`](#\\_0x93376B65A266EB5F)\n\n**Parameters**\n- `cutsceneEntName`: i.e Michael, Trevor, MP\\_1, MP\\_4 SetCutsceneTriggerArea ```\nOnly used twice in R* scripts \n``` SetDebugLinesAndSpheresDrawingActive ```\nNOTE: Debugging functions are not present in the retail version of the game. \n``` @@ -2821,8 +2882,9 @@ SetDefaultVehicleNumberPlateTextPattern Sets the default number plate text patte SetDeployHeliStubWings Only used with the "akula" and "annihilator2" in the decompiled native scripts.\n\n```\nNativeDB Introduced: v1290\n``` SetDirectorModeClearTriggeredFlag ```\nSET_*\n``` SetDisableBmxExtraTrickForces Disables the additional physics forces applied to BMX bikes that enable them to perform tricks.\n\n```\nNativeDB Introduced: v463\n```\n\n**Parameters**\n- `disableExtraTrickForces`: Set to `true` to disable the extra forces applied for tricks on BMX bicycles, making the bike behave more like a regular bicycle without trick capabilities. Set to `false` to allow BMX bikes to perform tricks normally.\n\n```lua\n-- Retrieve the player ped\nlocal playerPed = PlayerPedId()\n\n-- Retrieve the BMX bike the player is currently riding\nlocal bmx = GetVehiclePedIsIn(playerPed, false)\n\n-- If the player is not riding a BMX bike, return\nif not IsThisModelABicycle(GetEntityModel(bmx)) then return end\n\n-- Disable the extra forces applied to BMX bikes for tricks\nSetDisableBmxExtraTrickForces(bmx, true)\n``` -SetDisableExplodeFromBodyDamageOnCollision Prevents a vehicle from exploding upon sustaining body damage from physical collisions. This can be used to increase the durability of vehicles in high-impact scenarios, such as races or combat situations, by preventing them from being destroyed due to collision-induced body damage.\n\nFor helicopters, you might want to check [`SET_DISABLE_HELI_EXPLODE_FROM_BODY_DAMAGE`](#\\_0xEDBC8405B3895CC9) instead.\n\n```\nNativeDB Introduced: v1290\n```\n\n**Parameters**\n- `vehicle`: The vehicle to apply this setting to.\n- `disableExplode`: `true` to disable explosion from body damage on collision; `false` to allow explosions as normal.\n\n```lua\n-- Retrieve the player ped\nlocal playerPed = PlayerPedId()\n\n-- Retrieve the vehicle the player is currently in\nlocal vehicle = GetVehiclePedIsIn(playerPed, false)\n\n-- Disable explosion from body damage on collision for the vehicle\nSetDisableExplodeFromBodyDamageOnCollision(vehicle, true)\n``` -SetDisableHeliExplodeFromBodyDamage Prevents a helicopter from exploding due to relatively minor body damage.\n\n```\nNativeDB Introduced: v1103\n```\n\n**Parameters**\n- `helicopter`: The helicopter to apply this setting to.\n- `disableExplode`: `true` to disable explosion from body damage on collision; `false` to allow explosions as normal.\n\n```lua\n-- Retrieve the player ped.\nlocal playerPed = PlayerPedId()\n\n-- Retrieve the helicopter the player is currently in.\nlocal helicopter = GetVehiclePedIsIn(playerPed, false)\n\n-- If the player is not in a helicopter, or the vehicle is not a helicopter, return.\nif (helicopter == 0) or (not IsThisModelAHeli(GetEntityModel(helicopter))) then return end\n\n-- Disable explosion from body damage for the helicopter.\nSetDisableHeliExplodeFromBodyDamage(helicopter, true)\n``` +SetDisableExplodeFromBodyDamageOnCollision This only works for planes.\n\nPrevents a vehicle from exploding upon sustaining body damage from physical collisions.\n\nFor helicopters, you might want to check [`SET_DISABLE_HELI_EXPLODE_FROM_BODY_DAMAGE`](#\\_0xEDBC8405B3895CC9) instead.\n\n```\nNativeDB Introduced: v1290\n```\n\n**Parameters**\n- `vehicle`: The vehicle to apply this setting to.\n- `disableExplode`: `true` to disable explosion from body damage on collision; `false` to allow explosions as normal.\n\n```lua\n-- Retrieve the player ped\nlocal playerPed = PlayerPedId()\n\n-- Retrieve the vehicle the player is currently in\nlocal vehicle = GetVehiclePedIsIn(playerPed, false)\n\n-- Disable explosion from body damage on collision for the vehicle\nSetDisableExplodeFromBodyDamageOnCollision(vehicle, true)\n``` +SetDisableExplodeFromBodyDamageReceivedByAiVehicle ```\nNativeDB Introduced: v3407\n```\n\nPrevents the plane from exploding when taking body damage if the inflictor is an AI-controlled vehicle. Only works for planes. +SetDisableHeliExplodeFromBodyDamage This works on helicopters and planes.\n\nPrevents a helicopter from exploding due to relatively minor body damage.\n\n```\nNativeDB Introduced: v1103\n```\n\n**Parameters**\n- `helicopter`: The helicopter to apply this setting to.\n- `disableExplode`: `true` to disable explosion from body damage on collision; `false` to allow explosions as normal.\n\n```lua\n-- Retrieve the player ped.\nlocal playerPed = PlayerPedId()\n\n-- Retrieve the helicopter the player is currently in.\nlocal helicopter = GetVehiclePedIsIn(playerPed, false)\n\n-- If the player is not in a helicopter, or the vehicle is not a helicopter, return.\nif (helicopter == 0) or (not IsThisModelAHeli(GetEntityModel(helicopter))) then return end\n\n-- Disable explosion from body damage for the helicopter.\nSetDisableHeliExplodeFromBodyDamage(helicopter, true)\n``` SetDisableHoverModeFlight Disables wings for `Deluxo` and `Oppressor MK II`. For the Deluxo, it retracts the wings immediately, preventing flight. For the Oppressor Mk II, the wings retract after landing and take-off is not possible, though it can still glide if launched into the air.\n\n**Parameters**\n- `vehicle`: The vehicle to which the toggle will be applied.\n- `toggle`: Boolean parameter where setting `true` disables the vehicle's wings, preventing flight. Setting it to `false` allows the vehicle to fly as usual.\n\n```lua\n-- In this case we are disabling the wings of the vehicle\nlocal vehicle = GetVehiclePedIsIn(PlayerPedId(), false)\nSetDisableHoverModeFlight(vehicle, true)\n``` SetDisablePetrolDecalsIgnitingThisFrame Prevents gas / petrol decals (aka gas / petrol trails and puddles) to be ignited on fire during the frame in which the native is called.\n\n**Note**: This native needs to be called every frame to prevent ignition.\n\n```lua\nCitizen.CreateThread(function()\n while true do\n SetDisablePetrolDecalsIgnitingThisFrame()\n Citizen.Wait(0)\n end\nend)\n``` SetDisableTurretMovementThisFrame Disables turret movement when called in a loop. You can still fire and aim. You cannot shoot backwards though.\n\n```\nNativeDB Introduced: v1365\n``` @@ -2851,7 +2913,7 @@ SetEmitterRadioStation Retunes a named static emitter to the specified station SetEnableArenaPropPhysics ```\nActivate the physics to: "xs_prop_arena_{flipper,wall,bollard,turntable,pit}"\n```\n\n```\nNativeDB Introduced: v1604\n``` SetEnableArenaPropPhysicsOnPed ```\nNativeDB Introduced: v1604\n``` SetEnableBoundAnkles Used with [SET_ENABLE_HANDCUFFS](#\\_0xDF1AF8B5D56542FA) in decompiled scripts. From my observations, I have noticed that while being ragdolled you are not able to get up but you can still run. Your legs can also bend. -SetEnableHandcuffs ```\nped can not pull out a weapon when true \n``` +SetEnableHandcuffs Sets the IsHandCuffed (120) config flag on the ped. This blocks the ped from switching weapons (with the exception of switching to `weapon_unarmed`), makes the ped ragdoll on getting punched and forces a different get-up animation after ragdolling. The ped can also not vault over or climb on top of objects.\n\nUsed in combination with [SET_ENABLE_BOUND_ANKLES](#\\_0xC52E0F855C58FC2E) in decompiled scripts.\n\n**Parameters**\n- `ped`: The ped to toggle handcuffs on\n- `toggle`: true to enable handcuffs, false to disable\n\n```lua\nlocal playerId = PlayerId()\nlocal isHandcuffed = false\n\nlocal function whileCuffed()\n while isHandcuffed do\n local playerPed = PlayerPedId()\n -- The ragdoll and getting up checks prevents race-conditions when the game syncs the animation to other players\n if not (IsPedRagdoll(playerPed) or IsPedGettingUp(playerPed)) and not IsEntityPlayingAnim(playerPed, 'mp_arresting', 'idle', 3) then\n TaskPlayAnim(playerPed, 'mp_arresting', 'idle', 8.0, -8, -1, 49, 0.0, false, false, false)\n end\n\n -- Prevents the player from punching / firing weapons\n DisablePlayerFiring(playerId, true)\n DisableControlAction(0, 140, true) -- INPUT_MELEE_ATTACK_LIGHT\n\n Wait(0)\n end\nend\n\nlocal function setPlayerInHandcuffs(state)\n local playerPed = PlayerPedId()\n SetEnableHandcuffs(playerPed, state)\n isHandcuffed = state\n\n if state then\n -- Request the handcuff animations (and don't proceed until it has loaded)\n RequestAnimDict('mp_arresting')\n while not HasAnimDictLoaded('mp_arresting') do Wait(0) end\n\n -- Disarms the player and calls the whileCuffed function inside a thread\n SetCurrentPedWeapon(playerPed, `WEAPON_UNARMED`, true)\n CreateThread(whileCuffed)\n else\n -- Unloads and stops the handcuff animation\n RemoveAnimDict('mp_arresting')\n StopAnimTask(playerPed, 'mp_arresting', 'idle', 2.0)\n end\nend\n\nsetPlayerInHandcuffs(true)\n``` SetEnableScuba ```\nEnables diving motion when underwater. \n``` SetEnableScubaGearLight ```\nNativeDB Introduced: v1493\n``` SetEnableVehicleSlipstreaming Enable/Disables global slipstream physics @@ -2874,6 +2936,7 @@ SetEntityHeading Set the heading of an entity in degrees also known as "Yaw".\n\ SetEntityHealth When setting health for a player ped, the game will clamp the health value to ensure it does not exceed the maximum health. This maximum health can be retrieved by calling [`GET_PED_MAX_HEALTH`](#\\_0x4700A416E8324EF3). It can also be modified by calling [`SET_PED_MAX_HEALTH`](#\\_0xF5F6378C4F3419D3).\n\nWhen setting the health for non-player peds or entities, the maximum health will be increased if the new health value exceeds the current maximum.\n\nDefault health for male peds is `200`, for female peds it is `175`.\n\n### Added parameters\n\n* **inflictor**: The handle for the entity that caused the damage.\n\n**Parameters**\n- `entity`: The entity handle.\n- `health`: The health we should set this entity to. SetEntityIgnoreRequestControlFilter It allows to flag an entity to ignore the request control filter policy.\n\n**Parameters**\n- `entity`: The entity handle to ignore the request control filter.\n- `ignore`: Define if the entity ignores the request control filter policy. SetEntityInvincible ```\nSets a ped or an object totally invincible. It doesn't take any kind of damage. Peds will not ragdoll on explosions and the tazer animation won't apply either. \nIf you use this for a ped and you want Ragdoll to stay enabled, then do: \n*(DWORD *)(pedAddress + 0x188) |= (1 << 9); \nUse this if you want to get the invincibility status: \n bool IsPedInvincible(Ped ped) \n { \nauto addr = getScriptHandleBaseAddress(ped); \nif (addr) \n{ \n DWORD flag = *(DWORD *)(addr + 0x188); \n return ((flag & (1 << 8)) != 0) || ((flag & (1 << 9)) != 0); \n} \nreturn false; \n } \n``` +SetEntityLights \n\n**Parameters**\n- `toggle`: To turn the lights on, set to "false". To turn the lights off, set to "true". SetEntityLoadCollisionFlag Loads collision grid for an entity spawned outside of a player's loaded area. This allows peds to execute tasks rather than sit dormant because of a lack of a physics grid.\n\nCertainly not the main usage of this native but when set to true for a Vehicle, it will prevent the vehicle to explode if it is spawned far away from the player.\n\n```\nNativeDB Added Parameter 3: Any p2\n``` SetEntityLocallyInvisible Sets the provided entity not visible for yourself for the current frame.\n\n```lua\nCreateThread(function()\n -- Any random entity should work\n local entity = PlayerPedId()\n -- Make the entity visible for all players\n SetEntityVisible(entity, true)\n while true do\n Wait(0)\n -- Make the entity invisible for the current player only.\n SetEntityLocallyInvisible(entity)\n end\nend)\n``` SetEntityLocallyVisible Sets the provided entity visible for yourself for the current frame.\n\n**Parameters**\n- `entity`: The entity to set locally visible.\n\n```lua\nCreateThread(function()\n -- Any random entity should work\n local entity = GetVehiclePedIsIn(PlayerPedId(), false)\n -- Sets the entity not visible to other players\n SetEntityVisible(entity, false)\n while true do\n Wait(0)\n -- Sets the entity as visible for yourself\n SetEntityLocallyVisible(entity)\n end\nend)\n``` @@ -2882,6 +2945,7 @@ SetEntityMatrix Sets an entity's matrix. Arguments are in the same order as with SetEntityMaxHealth ```\nFor instance: ENTITY::SET_ENTITY_MAX_HEALTH(PLAYER::PLAYER_PED_ID(), 200); // director_mode.c4: 67849 \n``` SetEntityMaxSpeed \n\n**Parameters**\n- `entity`: Entity to apply a maximum speed on\n- `speed`: Speed in meters per second SetEntityNoCollisionEntity ```\nCalling this function disables collision between two entities.\nThe importance of the order for entity1 and entity2 is unclear.\nThe third parameter, `thisFrame`, decides whether the collision is to be disabled until it is turned back on, or if it's just this frame.\n``` +SetEntityNoCollisionWithNetworkedEntity ```\nNativeDB Introduced: v3407\n``` SetEntityOrphanMode ```cpp\nenum EntityOrphanMode {\n // Default, this will delete the entity when it isn't relevant to any players\n // NOTE: this *doesn't* mean when they're no longer in scope\n DeleteWhenNotRelevant = 0,\n // The entity will be deleted whenever its original owner disconnects\n // NOTE: if this is set when the entities original owner has already left it will be\n // marked for deletion (similar to just calling DELETE_ENTITY)\n DeleteOnOwnerDisconnect = 1,\n // The entity will never be deleted by the server when it does relevancy checks\n // you should only use this on entities that need to be relatively persistent\n KeepEntity = 2\n}\n```\n\nSets what the server will do when the entity no longer has its original owner. By default the server will cleanup entities that it considers "no longer relevant".\n\nWhen used on trains, this native will recursively call onto all attached carriages.\n\n**NOTE**: When used with `KeepEntity` (2) this native only guarantees that the ***server*** will not delete the entity, client requests to delete the entity will still work perfectly fine.\n\n**Parameters**\n- `entity`: The entity to set the orphan mode of\n- `orphanMode`: The mode that the server should use for determining if an entity should be removed. SetEntityProofs ```\nEnable / disable each type of damage. \n-------------- \np7 is to to '1' in am_mp_property_ext/int: entity::set_entity_proofs(uParam0->f_19, true, true, true, true, true, true, 1, true); \n``` SetEntityQuaternion ```\nw is the correct parameter name! \n``` @@ -2936,7 +3000,7 @@ SetGlobalMinBirdFlightHeight ```\nBirds will try to reach the given height. \n` SetGlobalPassengerMassMultiplier \n\n**Parameters**\n- `massMul`: Weight of each passenger (not counting the driver) as a percentage of vehicle mass. Is applied to all vehicles. Default value is 0.05 SetGlobalRadioSignalLevel Sets the global radio signal level, lower value will cause radio static.\nUsed only a handful of times in scripts.\n\n**Parameters**\n- `signalLevel`: Radio signal level. SetGpsCustomRouteRender \n\n**Parameters**\n- `radarThickness`: The width of the GPS route on the radar\n- `mapThickness`: The width of the GPS route on the map -SetGpsDisabledZoneAtIndex Disables the GPS route displayed on the minimap while within a certain zone (area). When in a disabled zone and creating a waypoint, the GPS route is not shown on the minimap until you are outside of the zone. When disabled, the direct distance is shown on minimap opposed to distance to travel. Seems to only work before setting a waypoint.\n\nYou can clear the disabled zone with CLEAR_GPS_DISABLED_ZONE_AT_INDEX.\n\n**Setting a waypoint at the same coordinate:**\n\nDisabled Zone: \n\nEnabled Zone (normal): \n\n**Parameters**\n- `x1`: X coordinate of first vector.\n- `y1`: Y coordinate of first vector.\n- `z1`: Z coordinate of first vector.\n- `x2`: X coordinate of second vector.\n- `y2`: Y coordinate of second vector.\n- `z2`: Z coordinate of second vector.\n- `index`: Index of zone. +SetGpsDisabledZoneAtIndex Disables the GPS route displayed on the minimap while within a certain zone (area). When in a disabled zone and creating a waypoint, the GPS route is not shown on the minimap until you are outside of the zone. When disabled, the direct distance is shown on minimap opposed to distance to travel. Seems to only work before setting a waypoint.\n\nYou can clear the disabled zone with CLEAR_GPS_DISABLED_ZONE_AT_INDEX.\n\n**Setting a waypoint at the same coordinate:**\n\nDisabled Zone:\n\n![](https://i.imgur.com/vsxkvjC.png)\n\nEnabled Zone (normal):\n\n![](https://i.imgur.com/OUZYLWL.png)\n\n**Parameters**\n- `x1`: X coordinate of first vector.\n- `y1`: Y coordinate of first vector.\n- `z1`: Z coordinate of first vector.\n- `x2`: X coordinate of second vector.\n- `y2`: Y coordinate of second vector.\n- `z2`: Z coordinate of second vector.\n- `index`: Index of zone. SetGpsFlags ```\nOnly the script that originally called SET_GPS_FLAGS can set them again. Another script cannot set the flags, until the first script that called it has called CLEAR_GPS_FLAGS.\nDoesn't seem like the flags are actually read by the game at all.\n``` SetGravityLevel ```cpp\nenum eGravityLevel\n{\n GRAV_EARTH = 0, // earth gravity 9.8m/s2\n GRAV_MOON = 1, // moon gravity 2.4m/s2\n GRAV_LOW = 2, // very low gravity\n GRAV_ZERO = 3 // zero gravity\n}\n``` SetGroupFormation ```\n0: Freedom to move\n1: Circle Around Leader\n2: Alternative Circle Around Leader \n3: Line, with Leader at center \n4: Arrow Formation\n5: "V" Formation\n6: Line Follow Formation\n7: Single Formation\n8: Pairwise\n``` @@ -2958,12 +3022,13 @@ SetHealthConfigInjuredThreshold Sets default injured health threshold value for SetHealthConfigInvincible Sets default invincible value for specific health config.\n\n**Parameters**\n- `configName`: Name of health config.\n- `newValue`: Value SetHealthConfigMeleeFatalAttack Sets default melee cardinal fatal attack value for specific health config.\n\n**Parameters**\n- `configName`: Name of health config.\n- `newValue`: Value SetHealthConfigWritheFromBulletThreshold Sets default writhe from bullet threshold value for specific health config.\n\n**Parameters**\n- `configName`: Name of health config.\n- `newValue`: Value -SetHeliBladesFullSpeed ```\nEquivalent of SET_HELI_BLADES_SPEED(vehicleHandle, 1.0f); \nthis native works on planes to? \n``` -SetHeliBladesSpeed ```\nSets the speed of the helicopter blades in percentage of the full speed. \nvehicleHandle: The helicopter. \nspeed: The speed in percentage, 0.0f being 0% and 1.0f being 100%. \n``` +SetHeliBladesFullSpeed Despite its name, this works on Helicopters and Planes.\n\nSets the speed of the helicopter blades to full speed.\n\nThis is equivalent to calling `SetHeliBladesSpeed(vehicleHandle, 1.0);`\n\n**Parameters**\n- `vehicle`: The helicopter or the plane +SetHeliBladesSpeed Despite its name, this works on Helicopters and Planes.\n\nSets the speed of the helicopter blades in percentage of the full speed.\n\n**Parameters**\n- `vehicle`: The helicopter or the plane\n- `speed`: Desired blade rotation speed from 0.0 to 1.0 SetHeliCombatOffset Set a specific offset for helis chasing target in combat\n\n```\nNativeDB Introduced: v1180\n```\n\n**Parameters**\n- `vehicle`: Helicopter for which the combat offset is being set.\n- `x`: Offset along the X-axis (left/right) relative to the helicopter's current position and orientation\n- `y`: Offset along the Y-axis (forward/backward) relative to the helicopter's current position and orientation\n- `z`: Offset along the Z-axis (up/down) relative to the helicopter's current position and orientation. SetHeliResistToExplosion Makes a helicopter resistant to multiple explosions. When enabled, helicopters can survive two or more explosions.\n\n```\nNativeDB Introduced: 2545\n```\n\n**Parameters**\n- `helicopter`: The helicopter to apply resistance to.\n- `bResistToExplosion`: Set to `true` to make the helicopter resistant to explosions, or `false` to disable this resistance. SetHeliTailBoomCanBreakOff Enables or disables the ability for a helicopter's tail boom to break off.\n\n```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `heli`: The helicopter for which the tail boom can break off.\n- `toggle`: Determines whether the helicopter's tail boom can break off.\n\n```lua\nlocal heli = GetVehiclePedIsIn(PlayerPedId(), false)\nif heli == 0 or GetVehicleType(heli) ~= "heli" then return end\n\nSetHeliTailBoomCanBreakOff(heli, true)\n``` SetHelicopterRollPitchYawMult ```\nvalue between 0.0 and 1.0 \n``` +SetHornPermanentlyOnTime Sounds the vehicle's horn for a specified duration. The behavior of this native changes significantly depending on the occupancy of the driver's seat:\n\n* **Empty Driver Seat:** The horn will sound continuously for the entire duration specified in the `time` parameter.\n* **Occupied Driver Seat:** The `time` parameter is entirely ignored. The horn will only sound very briefly, simulating a quick tap of the horn button.\n* **Interruption:** If a ped enters the driver seat while the horn is actively sounding (triggered by this native), the horn will stop immediately.\n\n**Parameters**\n- `vehicle`: The target vehicle.\n- `time`: The duration for the horn to sound, in milliseconds. SetHoverModeWingRatio This native allows opening or closing the wings of the Deluxo/Oppressor. For the Deluxo, wing deployment depends on sufficient altitude.\n\n**Parameters**\n- `vehicle`: The vehicle to which the ratio will be applied.\n- `ratio`: Between 0.0 and 1.0. 0.0 is wings closed, 1.0 is wings open.\n\n```lua\n-- In this case we are opening the wings of the vehicle\nlocal vehicle = GetVehiclePedIsIn(PlayerPedId(), false)\nSetHoverModeWingRatio(vehicle, 1.0)\n``` SetHttpHandler Sets the handler for HTTP requests made to the executing resource.\n\nExample request URL: `http://localhost:30120/http-test/ping` - this request will be sent to the `http-test` resource with the `/ping` path.\n\nThe handler function assumes the following signature:\n\n```ts\nfunction HttpHandler(\n request: {\n address: string;\n headers: Record;\n method: string;\n path: string;\n setDataHandler(handler: (data: string) => void): void;\n setDataHandler(handler: (data: ArrayBuffer) => void, binary: 'binary'): void;\n setCancelHandler(handler: () => void): void;\n },\n response: {\n writeHead(code: number, headers?: Record): void;\n write(data: string): void;\n send(data?: string): void;\n }\n): void;\n```\n\n* **request**: The request object.\n * **address**: The IP address of the request sender.\n * **path**: The path to where the request was sent.\n * **headers**: The headers sent with the request.\n * **method**: The request method.\n * **setDataHandler**: Sets the handler for when a data body is passed with the request. Additionally you can pass the `'binary'` argument to receive a `BufferArray` in JavaScript or `System.Byte[]` in C# (has no effect in Lua).\n * **setCancelHandler**: Sets the handler for when the request is cancelled.\n* **response**: An object to control the response.\n * **writeHead**: Sets the status code & headers of the response. Can be only called once and won't work if called after running other response functions.\n * **write**: Writes to the response body without sending it. Can be called multiple times.\n * **send**: Writes to the response body and then sends it along with the status code & headers, finishing the request.\n\n**Parameters**\n- `handler`: The handler function.\n\n```lua\nSetHttpHandler(function(request, response)\n if request.method == 'GET' and request.path == '/ping' then -- if a GET request was sent to the `/ping` path\n response.writeHead(200, { ['Content-Type'] = 'text/plain' }) -- set the response status code to `200 OK` and the body content type to plain text\n response.send('pong') -- respond to the request with `pong`\n else -- otherwise\n response.writeHead(404) -- set the response status code to `404 Not Found`\n response.send() -- respond to the request with no data\n end\nend)\n``` SetHudComponentAlign See [SET_SCRIPT_GFX_ALIGN](#\\_0xB8A850F20A067EB6) for details about how gfx align works.\n\n**Parameters**\n- `id`: The hud component id.\n- `horizontalAlign`: The horizontal alignment.\n- `verticalAlign`: The vertical alignment. @@ -2990,7 +3055,7 @@ SetInteriorZoomLevelIncreased ```\nNativeDB Introduced: v1493\n``` SetIslandEnabled Enables the specified island. For more information, see islandhopper.meta\n\n```\nNativeDB Introduced: v2189\n```\n\n**Parameters**\n- `islandName`: The name of the island to be enabled or disabled.\n- `toggle`: A boolean value where `true` enables the island and `false` disables it. SetKeyMappingHideResources Toggles the visibility of resource names in the FiveM key mapping page.\n\n**Parameters**\n- `hide`: `true` will disable the display of resource names, and `false` will enable it. SetKillFallHeight A setter for [GET_KILL_FALL_HEIGHT](#\\_0x884C8B5A).\n\n**Parameters**\n- `height`: height from which the non-player peds will instantly die from fall damage. Default value is `10.0`. -SetLaunchControlEnabled Related to the lower-end of a vehicles fTractionCurve, e.g., from standing starts and acceleration from low/zero speeds.\n\n```\nNativeDB Introduced: v1604\n``` +SetLaunchControlEnabled Toggles "Arena Mode", a global flag that affects physics, damage, and handling for all vehicles.\n\nWhen enabled:\n\n* fTractionLossMult is multiplied by 0.25, increasing grip significantly.\n* Mid-air vehicle control rotation force is increased by 50%.\n* Vehicles explode immediately when body health reaches 0.\n* Disables chain-reaction explosions for nearby vehicles.\n* Prevents engine damage from colliding with Ramp Cars.\n* Overrides the Stunt Mode ([`N_0x9ebd751e5787baf2`](#\\_0x9EBD751E5787BAF2)) collision protection.\n* Reduces the chance of falling off bikes/quads.\n\n```\nNativeDB Introduced: v1604\n``` SetLightAlpha Set the alpha transparency of the light.\n\n**Parameters**\n- `alpha`: The alpha transparency value (0.0 to 1.0) SetLightAo Set ambient occlusion (AO) parameters for a specified light.\n\n**Parameters**\n- `intensity`: The AO intensity\n- `radius`: The AO radius\n- `bias`: The AO bias\n- `intensity2`: Secondary AO intensity SetLightCapsuleSize Set the capsule size of a specified light.\n\n**Parameters**\n- `size`: The capsule size value @@ -3046,7 +3111,7 @@ SetMovementModeOverride ```\nname: "MP_FEMALE_ACTION" found multiple times in th SetMpGamerTagAlpha ```\nSets flag's sprite transparency. 0-255. \n``` SetMpGamerTagColour Sets a gamer tag's component colour\n\n**Parameters**\n- `gamerTagId`: a gamerTagId obtained using for example: [`CREATE_FAKE_MP_GAMER_TAG`](#\\_0xBFEFE3321A3F5015).\n- `component`: a component id, see the full list here: [link](https://docs.fivem.net/docs/game-references/gamer-tags/#components-list)\n- `hudColorIndex`: a hud color index, see the full list here: [link](https://docs.fivem.net/docs/game-references/hud-colors/)\n\n```lua\nlocal playerPed = PlayerPedId() --get our players ped\nlocal playerName = GetPlayerName(PlayerId()) --get our players name\nlocal gamerTagId = CreateFakeMpGamerTag(playerPed, playerName, 0, 0, "", 0) --create a gamer tag\nSetMpGamerTagColour(gamerTagId, 0, 129) --set component 0(GAMER_NAME) color to 129(HUD_COLOUR_YOGA)\n``` SetMpGamerTagDisablePlayerHealthSync By default, the player health value shown by a gamer tag's health bar is synchronised with the health of the ped it is attached to.\nThis native disables that behaviour, allowing [`_SET_MP_GAMER_TAG_OVERRIDE_PLAYER_HEALTH`](#\\_0x1563FE35E9928E67) to have an effect.\n\n**Parameters**\n- `toggle`: If player health synchronisation should be disabled. -SetMpGamerTagHealthBarColour Should be enabled as component (2). Has 0 alpha by default.\n\n**Parameters**\n- `gamerTagId`: a gamerTagId obtained using for example: [CREATE_FAKE_MP_GAMER_TAG](https://runtime.fivem.net/doc/natives/?\\_0xBFEFE3321A3F5015)\n- `hudColorIndex`: a hud color index, see the full list here: [link](https://docs.fivem.net/docs/game-references/hud-colors/)\n\n```lua\nlocal playerPed = PlayerPedId() --get our players ped\nlocal playerName = GetPlayerName(PlayerId()) --get our players name\nlocal gamerTagId = CreateFakeMpGamerTag(playerPed, playerName, 0, 0, "", 0) --create a gamer tag\nSetMpGamerTagVisibility(gamerTagId, 2, 1) --set the visibility of component 2(healthArmour) to true\nSetMpGamerTagAlpha(gamerTagId, 2, 255) --set the alpha of component 2(healthArmour) to 255\nSetMpGamerTagHealthBarColor(gamerTagId, 129) --set component 2(healthArmour) color to 129(HUD_COLOUR_YOGA)\n``` +SetMpGamerTagHealthBarColour Should be enabled as component (2). Has 0 alpha by default.\n\n**Parameters**\n- `gamerTagId`: a gamerTagId obtained using for example: [CREATE_FAKE_MP_GAMER_TAG](#\\_0xBFEFE3321A3F5015)\n- `hudColorIndex`: a hud color index, see the full list here: [link](https://docs.fivem.net/docs/game-references/hud-colors/)\n\n```lua\nlocal playerPed = PlayerPedId() --get our players ped\nlocal playerName = GetPlayerName(PlayerId()) --get our players name\nlocal gamerTagId = CreateFakeMpGamerTag(playerPed, playerName, 0, 0, "", 0) --create a gamer tag\nSetMpGamerTagVisibility(gamerTagId, 2, 1) --set the visibility of component 2(healthArmour) to true\nSetMpGamerTagAlpha(gamerTagId, 2, 255) --set the alpha of component 2(healthArmour) to 255\nSetMpGamerTagHealthBarColor(gamerTagId, 129) --set component 2(healthArmour) color to 129(HUD_COLOUR_YOGA)\n``` SetMpGamerTagMpBagLargeCount ```\ndisplays wanted star above head \n``` SetMpGamerTagOverridePlayerHealth Manually sets the player health value for a gamer tag, using the maximum health to calculate what percentage of the bar should be filled.\nHas no effect unless [\\_SET_MP_GAMER_TAG_DISABLE_PLAYER_HEALTH_SYNC](#\\_0xD29EC58C2F6B5014) has been called prior to disable synchronisation with the attached ped.\n\n**Parameters**\n- `health`: The amount the health the player has.\n- `maximumHealth`: The maximum amount of health the player could have. SetMpGamerTagUseVehicleHealth Sets the health bar of a gamer tag to show the health of the last (or current) vehicle of the ped the gamer tag is attached to.\nThe vehicle health value is stored separate from the player health and using it won't clear any player health overrides.\n\n**Parameters**\n- `toggle`: If vehicle health should be displayed instead of player health. @@ -3055,9 +3120,9 @@ SetMpGamerTagVisibilityAll Sets the visibility of all components of the gamer ta SetMpGamerTagWantedLevel ```\ndisplays wanted star above head \n``` SetMpGamerTagsUseVehicleBehavior Sets whether all tags should group (normal game behavior) or should remain independent and above each ped's respective head when in a vehicle.\n\n**Parameters**\n- `enabled`: Whether tags should use normal game behavior. Default is true. SetMpGamerTagsVisibleDistance Sets the maximum distance at which all tags will be visible and which beyond will not be displayed. Distance is measured from the camera position.\n\n**Parameters**\n- `distance`: The visible distance. Default is 100.0f. -SetMultiplayerBankCash Preview image:\n\n![](https://i.imgur.com/1BTmdyv.png)\n\nTo change the bank balance use [`STAT_SET_INT`](#\\_0xB3271D7AB655B441) with "BANK_BALANCE" to whatever value you need to. +SetMultiplayerBankCash Preview:\n\n![](https://i.imgur.com/b7lU2nl.png)\n\nTo change the bank balance use [`STAT_SET_INT`](#\\_0xB3271D7AB655B441) with "BANK_BALANCE" to whatever value you need to. SetMultiplayerHudCash **This native does absolutely nothing, just a nullsub** -SetMultiplayerWalletCash Preview image:\n\n![](https://i.imgur.com/1BTmdyv.png)\n\nTo change money value use [`STAT_SET_INT`](#\\_0xB3271D7AB655B441) with "MP0\\_WALLET_BALANCE" to whatever value you need to. +SetMultiplayerWalletCash Preview:\n\n![](https://i.imgur.com/b7lU2nl.png)\n\nTo change money value use [`STAT_SET_INT`](#\\_0xB3271D7AB655B441) with "MP0\\_WALLET_BALANCE" to whatever value you need to. SetNetworkEnableVehiclePositionCorrection ```\nEnables a periodic ShapeTest within the NetBlender and invokes rage::netBlenderLinInterp::GoStraightToTarget (or some functional wrapper).\n``` SetNetworkIdCanMigrate ```\nWhether or not another player is allowed to take control of the entity \n``` SetNetworkVehiclePositionUpdateMultiplier ```\nrage::netBlenderLinInterp::GetPositionMaxForUpdateLevel\n``` @@ -3065,6 +3130,7 @@ SetNetworkVehicleRespotTimer ```\nNativeDB Added Parameter 3: Any p2\nNativeDB A SetNextDesiredMoveState **This native does absolutely nothing, just a nullsub** SetNightvision ```\nEnables Night Vision. \nExample: \nC#: Function.Call(Hash.SET_NIGHTVISION, true); \nC++: GRAPHICS::SET_NIGHTVISION(true); \nBOOL toggle: \ntrue = turns night vision on for your player. \nfalse = turns night vision off for your player. \n``` SetNitrousIsActive ```\nNativeDB Introduced: 3095\n```\n\nActivates or deactivates the nitrous system in the specified vehicle, based on the boolean value provided.\nYou can clear the nitrous with [`CLEAR_NITROUS`](#\\_0xC889AE921400E1ED), if you want to have more control on the nitrous and those settings, use [`SET_OVERRIDE_NITROUS_LEVEL`](#\\_0xC8E9B6B71B8E660D)\n\n**Parameters**\n- `vehicle`: The vehicle whose nitrous system is to be controlled.\n- `isActive`: A boolean value where `true` activates the nitrous system and `false` deactivates it.\n\n```lua\n-- Retrieve the player ped\nlocal playerPed = PlayerPedId()\n\n-- Retrieve the vehicle the player is currently in. \nlocal vehicle = GetVehiclePedIsIn(playerPed, false)\n\n-- Check if the vehicle exists in the game world.\nif vehicle == 0 then return end\n\n -- Enable the nitrous system on the vehicle.\nSetNitrousIsActive(vehicle, true)\n``` +SetNoLoadingScreen Doesn't seem to do anything. Set value can be retrieved using [`GET_NO_LOADING_SCREEN`](#\\_0x18C1270EA7F199BC).\n\n**Parameters**\n- `toggle`: Enabled/Disable\n\n```lua\nSetNoLoadingScreen(true)\nprint(GetNoLoadingScreen()) -- will return true\n``` SetNuiZindex Set the z-index of the NUI resource.\n\n**Parameters**\n- `zIndex`: New z-index value. SetObjectAllowLowLodBuoyancy ```\nOverrides the climbing/blocking flags of the object, used in the native scripts mostly for "prop_dock_bouy_*"\n``` SetObjectAsNoLongerNeeded ```\nThis is an alias of SET_ENTITY_AS_NO_LONGER_NEEDED. \n``` @@ -3072,11 +3138,12 @@ SetObjectForceVehiclesToAvoid Overrides a flag on the object which determines if SetObjectLightColor Sets color of embedded light source.\nOnly appears in am_mp_nightclub.c for the nightclub dancefloor.\n\nNot sure what p1 does, seems to only ever be '1' in scripts.\n\n```\nNativeDB Introduced: v1493\n``` SetObjectPhysicsParams ```\nrage::phArchetypeDamp\np9: Some phBoundGeometry margin value, limited to (0.0, 0.1) exclusive.\n``` SetObjectStuntPropSpeedup Sets the intensity of Speed Boost and Slow Down props.\n\nThe corresponding values for Speed Boosts in the Creator are:\\\nWeak: `15`\\\nNormal: `25`\\\nStrong: `35`\\\nExtra Strong: `45`\\\nUltra Strong: `100`\n\nFor Slow Downs:\\\nWeak: `44`\\\nNormal: `30`\\\nStrong: `16`\n\n**Parameters**\n- `object`: A Speed Boost or Slow Down prop\n- `intensity`: Ranges from `1`-`254`, other values are ignored. Higher values will increase the effect of Speed Boosts and decrease the effect of Slow Downs. +SetObjectTargettableByPlayer Sets the 34th and 35th object flags related to player peds.\n\n```\nNativeDB Introduced: v3258\n``` SetObjectTextureVariation ```cpp\nenum eObjectPaintVariants\n{ \n Pacific = 0, \n Azure = 1, \n Nautical = 2, \n Continental = 3, \n Battleship = 4, \n Intrepid = 5, \n Uniform = 6, \n Classico = 7, \n Mediterranean = 8, \n Command = 9, \n Mariner = 10, \n Ruby = 11, \n Vintage = 12, \n Pristine = 13, \n Merchant = 14, \n Voyager = 15 \n}; \n``` SetOpenRearDoorsOnExplosion Enables or disables the opening of a vehicle's rear doors in the event of a sticky bomb explosion. This native is effective for armored vehicles, such as the Stockade (Brinks vehicle), allowing the rear doors to be opened through controlled explosions, which might otherwise remain locked due to the vehicle nature.\n\n**Parameters**\n- `vehicle`: The vehicle to apply this setting to.\n- `toggle`: A boolean value where `true` allows the rear doors to open upon explosion, and `false` prevents them from opening.\n\n**Returns** This native does not return any value.\n\n```lua\n-- This example disables the rear doors of the vehicle from opening upon explosion.\n\n-- Retrieve the LocalPlayer.\nlocal playerPed = PlayerPedId()\n\n-- Retrieve the vehicle the player is currently in. \nlocal vehicle = GetVehiclePedIsIn(playerPed, false)\n\n-- Check if the vehicle exists in the game world.\nif not DoesEntityExist(vehicle) then \n -- If the vehicle does not exist, end the execution of the code here.\n return \nend\n\n-- Retrieve the model of the vehicle\nlocal modelVehicle = GetEntityModel(vehicle)\n\n-- Retrieve the hash of the Stockade.\nlocal hashStockade = GetHashKey("stockade")\n\n-- Check if the vehicle is a Stockade.\nif (modelVehicle == hashStockade) then\n -- Disable the rear doors from opening upon explosion.\n SetOpenRearDoorsOnExplosion(vehicle, true)\nend\n``` SetOppressorTransformState Set state to true to extend the wings, false to retract them.\n\n**Parameters**\n- `vehicle`: The vehicle (tested with oppressor only)\n- `extend`: Set to true to extend the wings, false to retract them. SetOverrideNitrousLevel ```\nNativeDB Introduced: v1604\nNativeDB Added Parameter 2 (2060): float durationMod : A multiplier applied to the default nitrous duration (default is 3 seconds). \nNativeDB Added Parameter 3 (2060): float power : A multiplier applied to the default nitrous power multiplier (default is 3).\nNativeDB Added Parameter 4 (2060): float rechargeTime : A multiplier applied to the default nitrous recharge rate.\nNativeDB Added Parameter 5 (2060): BOOL disableSound : A boolean to disable the default nitrous sound when the nitrous is active.\n```\n\nOverrides the default settings of a vehicle's nitrous system, allowing custom control over its performance characteristics.\n\n**Parameters**\n- `vehicle`: The vehicle whose nitrous system is to be overridden.\n- `override`: A boolean toggle to enable or disable the override settings.\n\n```lua\n-- Retrieve the player ped\nlocal playerPed = PlayerPedId()\n\n-- Retrieve the vehicle the player is currently in. \nlocal vehicle = GetVehiclePedIsIn(playerPed, false)\n\n-- Check if the vehicle exists in the game world.\nif vehicle == 0 then return end\n\n-- Configure the vehicle's nitrous system with custom settings for maximum effect.\nSetOverrideNitrousLevel(vehicle, true, 100, 100, 99999999999, false);\n``` -SetOverrideWeather Refer to [`SET_WEATHER_TYPE_NOW_PERSIST`](#\\_0xED712CA327900C8A) for weather types. +SetOverrideWeather Refer to [`SET_WEATHER_TYPE_NOW`](#\\_0x29B487C359E19889) for weather types. SetPadShake ```\np0 always seems to be 0 \nduration in milliseconds \nfrequency should range from about 10 (slow vibration) to 255 (very fast) \nexample: \nSET_PAD_SHAKE(0, 100, 200); \n``` SetParticleFxLoopedColour Sets the colour tint of a previously started looped particle effect\n\nYou can use the [inverse lerp](https://www.gamedev.net/articles/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/) method to normalize in a range from 0.0 to 1.0 an rgb\n\n**Parameters**\n- `r`: range from 0.0 to 1.0\n- `g`: range from 0.0 to 1.0\n- `b`: range from 0.0 to 1.0\n- `bLocalOnly`: False by default. Defines whether the effect should be sent and modified over the network or not. Set this to `true` if you don't want to send the effect over the network. SetParticleFxNonLoopedAlpha ```\nUsage example for C#: \nFunction.Call(Hash.SET_PARTICLE_FX_NON_LOOPED_ALPHA, new InputArgument[] { 0.1f }); \n Note: the argument alpha ranges from 0.0f-1.0f ! \n``` @@ -3118,6 +3185,7 @@ SetPedCoordsKeepVehicle ```\nteleports ped to coords along with the vehicle ped SetPedCoverClipsetOverride ```\nFound in the b617d scripts:\nPED::_9DBA107B4937F809(v_7, "trevor_heist_cover_2h");\nSET_PED_MO*\n``` SetPedCowerHash ```\np1: Only "CODE_HUMAN_STAND_COWER" found in the b617d scripts. \n``` SetPedCurrentWeaponVisible ```\nHas 5 parameters since latest patches. \n``` +SetPedCycleVehicleWeaponsOnly Restricts weapon selection when cycling through weapons, to select only vehicle weapons.\n\n**Parameters**\n- `ped`: The ped handle SetPedDefaultComponentVariation ```\nSets Ped Default Clothes \n``` SetPedDensityMultiplierThisFrame **Usage:** Call this native every frame\n\n**Parameters**\n- `multiplier`: Adjust from 0.0 (minimum, indicating no pedestrians in the street) to 1.0 (maximum, representing a normal amount of pedestrians on the street).\n\n```lua\n-- 0.0 means no peds, while 1.0 indicates the regular density of peds.\nlocal pedsDensityFactor = 0.0 \n\nCitizen.CreateThread(function()\n while true do\n SetPedDensityMultiplierThisFrame(pedsDensityFactor)\n Citizen.Wait(0) \n end\nend)\n``` SetPedDucking ```\nThis is the SET_CHAR_DUCKING from GTA IV, that makes Peds duck. This function does nothing in GTA V. It cannot set the ped as ducking in vehicles, and IS_PED_DUCKING will always return false. \n``` @@ -3134,7 +3202,7 @@ SetPedGravity ```\nenable or disable the gravity of a ped \nExamples: \nPED::S SetPedHairTint Sets the tint index for the hair on the specified ped.\n\n```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `ped`: The Ped whose hair tint is to be set.\n- `colorID`: The tint index for the primary hair color.\n- `highlightColorID`: The tint index for the hair highlight color. SetPedHasAiBlip ```\nThis native turns on the AI blip on the specified ped. It also disappears automatically when the ped is too far or if the ped is dead. You don't need to control it with other natives.\nSee gtaforums.com/topic/884370-native-research-ai-blips for further information.\n``` SetPedHasAiBlipWithColor \n\n**Parameters**\n- `color`: See [`SET_BLIP_COLOUR`](#\\_0x03D7FB09E75D6B7E). -SetPedHeadBlendData For more info please refer to [this](https://gtaforums.com/topic/858970-all-gtao-face-ids-pedset-ped-head-blend-data-explained) topic.\n\n**Other information:**\n\nIDs start at zero and go Male Non-DLC, Female Non-DLC, Male DLC, and Female DLC.
\n\nThis native function is often called prior to calling natives such as:\n\n* [`SetPedHairColor`](#\\_0xBB43F090)\n* [`SetPedHeadOverlayColor`](#\\_0x78935A27)\n* [`SetPedHeadOverlay`](#\\_0xD28DBA90)\n* [`SetPedFaceFeature`](#\\_0x6C8D4458)\n\n**Parameters**\n- `ped`: The ped entity\n- `shapeFirstID`: Controls the shape of the first ped's face\n- `shapeSecondID`: Controls the shape of the second ped's face\n- `shapeThirdID`: Controls the shape of the third ped's face\n- `skinFirstID`: Controls the first id's skin tone\n- `skinSecondID`: Controls the second id's skin tone\n- `skinThirdID`: Controls the third id's skin tone\n- `shapeMix`: 0.0 - 1.0 Of whose characteristics to take Mother -> Father (shapeFirstID and shapeSecondID)\n- `skinMix`: 0.0 - 1.0 Of whose characteristics to take Mother -> Father (skinFirstID and skinSecondID)\n- `thirdMix`: Overrides the others in favor of the third IDs.\n- `isParent`: IsParent is set for "children" of the player character's grandparents during old-gen character creation. It has unknown effect otherwise.\n\n```lua\n-- Unfortunately, there's no clear way of getting the head blend data in lua out of the box, but there are wrappers:\n-- https://forum.cfx.re/t/small-c-export-event-wrapper-for-getpedheadblenddata/214611\nSetPedHeadBlendData(PlayerPedId(), 0, 0, 0, 0, 0, 0, 0, 0, 0, false)\n``` +SetPedHeadBlendData For more info and the list of faceIDs please refer to [this](https://gtaforums.com/topic/858970-all-gtao-face-ids-pedset-ped-head-blend-data-explained) topic. Note that the Skin and Shape IDs are shared. This native will use this same list for both Skin and Shape IDs.\n\n**Other information:**\n\nIDs start at zero and go Male Non-DLC, Female Non-DLC, Male DLC, and Female DLC.\n\nThis native function is often called prior to calling natives such as:\n\n* [`SetPedHairColor`](#\\_0xA23FE32C)\n* [`SetPedHeadOverlayColor`](#\\_0x78935A27)\n* [`SetPedHeadOverlay`](#\\_0xD28DBA90)\n* [`SetPedFaceFeature`](#\\_0x6C8D4458)\n\n**Parameters**\n- `ped`: The ped entity\n- `shapeFirstID`: Controls the shape of the first ped's face\n- `shapeSecondID`: Controls the shape of the second ped's face\n- `shapeThirdID`: Controls the shape of the third ped's face\n- `skinFirstID`: Controls the first id's skin tone\n- `skinSecondID`: Controls the second id's skin tone\n- `skinThirdID`: Controls the third id's skin tone\n- `shapeMix`: 0.0 - 1.0 Of whose characteristics to take Mother -> Father (shapeFirstID and shapeSecondID)\n- `skinMix`: 0.0 - 1.0 Of whose characteristics to take Mother -> Father (skinFirstID and skinSecondID)\n- `thirdMix`: Overrides the others in favor of the third IDs.\n- `isParent`: IsParent is set for "children" of the player character's grandparents during old-gen character creation. It has unknown effect otherwise.\n\n```lua\n-- Unfortunately, there's no clear way of getting the head blend data in lua out of the box, but there are wrappers:\n-- https://forum.cfx.re/t/small-c-export-event-wrapper-for-getpedheadblenddata/214611\nSetPedHeadBlendData(PlayerPedId(), 0, 0, 0, 0, 0, 0, 0, 0, 0, false)\n``` SetPedHeadOverlay ```\nOverlayID ranges from 0 to 12, index from 0 to _GET_NUM_OVERLAY_VALUES(overlayID)-1, and opacity from 0.0 to 1.0. \noverlayID Part Index, to disable \n0 Blemishes 0 - 23, 255 \n1 Facial Hair 0 - 28, 255 \n2 Eyebrows 0 - 33, 255 \n3 Ageing 0 - 14, 255 \n4 Makeup 0 - 74, 255 \n5 Blush 0 - 6, 255 \n6 Complexion 0 - 11, 255 \n7 Sun Damage 0 - 10, 255 \n8 Lipstick 0 - 9, 255 \n9 Moles/Freckles 0 - 17, 255 \n10 Chest Hair 0 - 16, 255 \n11 Body Blemishes 0 - 11, 255 \n12 Add Body Blemishes 0 - 1, 255 \n```\n\n**Note:**\n\nYou may need to call [`SetPedHeadBlendData`](#\\_0x9414E18B9434C2FE) prior to calling this native in order for it to work.\n\n**Parameters**\n- `ped`: The ped entity\n- `overlayID`: The overlay id displayed up above.\n- `index`: An integer representing the index (from 0 to `_GET_NUM_OVERLAY_VALUES(overlayID)-1`)\n- `opacity`: A float ranging from 0.0 to 1.0 SetPedHeadOverlayColor ```\nUsed for freemode (online) characters. \nCalled after SET_PED_HEAD_OVERLAY(). \n```\n\n**Note:**\n\nYou may need to call [`SetPedHeadBlendData`](#\\_0x9414E18B9434C2FE) prior to calling this native in order for it to work.\n\n**Parameters**\n- `ped`: The ped entity\n- `overlayID`: An integer representing the overlay id\n- `colorType`: 1 for eyebrows, beards, makeup, and chest hair; 2 for blush and lipstick; and 0 otherwise, though not called in those cases.\n- `colorID`: An integer representing the primary color id\n- `secondColorID`: An integer representing the secondary color id SetPedHelmet Sets whether a pedestrian should wear a helmet.\n\n**Parameters**\n- `ped`: Ped index.\n- `bEnable`: Boolean value that indicates whether the helmet should be worn or not. @@ -3177,10 +3245,11 @@ SetPedShootsAtCoord Fires a weapon at a coordinate using a ped.\n\n**Parameters* SetPedShouldPlayDirectedScenarioExit When this ped receives its next script task, they will exit from their scenario using the normal scenario exit.\nExiting the scenario may take several frames while the ped is playing the exit animation.\nIf the ped is not currently using a scenario at the time of the command or 0,0,0 is specified as the reaction position,\nthen the ped will by default attempt to direct their exit forwards.\n\n**Parameters**\n- `ped`: the ped who should play a normal (unhurried) exit the next time they are given a script command.\n- `x`: X Coordinate.\n- `y`: Y Coordinate.\n- `z`: Z Coordinate.\n\n**Returns** Returns true if the position was successfully set. SetPedStealthMovement ```\np1 is usually 0 in the scripts. action is either 0 or a pointer to "DEFAULT_ACTION". \n``` SetPedSuffersCriticalHits Ped no longer takes critical damage modifiers if set to FALSE.\n\nExample: Headshotting a player no longer one shots them. Instead they will take the same damage as a torso shot. +SetPedSurvivesBeingOutOfWater Allows marine animals to survive outside of water (R\\* is using it for sharks).\n\n```\nNativeDB Introduced: v3407\n```\n\n**Parameters**\n- `ped`: The marine animal ped\n- `toggle`: `true` to allow survival out of water, `false` to apply normal water restrictions.\n\n**Returns** Returns `true` if successful. SetPedSweat ```\nSweat is set to 100.0 or 0.0 in the decompiled scripts. \n``` SetPedTargetLossResponse ```\nOnly 1 and 2 appear in the scripts. combatbehaviour.meta seems to only have TLR_SearchForTarget for all peds, but we don't know if that's 1 or 2. \n``` -SetPedToRagdoll p4/p5: Unusued in TU27\n\n### Ragdoll Types\n\n**0**: CTaskNMRelax\n**1**: CTaskNMScriptControl: Hardcoded not to work in networked environments.\n**Else**: CTaskNMBalance\n\n**Parameters**\n- `time1`: Time(ms) Ped is in ragdoll mode; only applies to ragdoll types 0 and not 1. -SetPedToRagdollWithFall ```\nReturn variable is never used in R*'s scripts. \nNot sure what p2 does. It seems like it would be a time judging by it's usage in R*'s scripts, but didn't seem to affect anything in my testings. \nx, y, and z are coordinates, most likely to where the ped will fall. \np7 is probably the force of the fall, but untested, so I left the variable name the same. \np8 to p13 are always 0f in R*'s scripts. \n(Simplified) Example of the usage of the function from R*'s scripts: \nped::set_ped_to_ragdoll_with_fall(ped, 1500, 2000, 1, -entity::get_entity_forward_vector(ped), 1f, 0f, 0f, 0f, 0f, 0f, 0f); \n``` +SetPedToRagdoll p4/p5: Unusued in TU27\n\n### Ragdoll Types\n\n**0**: CTaskNMRelax\n**1**: CTaskNMScriptControl: Hardcoded not to work in networked environments.\n**Else**: CTaskNMBalance\n\n**Parameters**\n- `ped`: The ped to ragdoll.\n- `minTime`: Time(ms) Ped is in ragdoll mode; only applies to ragdoll types 0 and not 1.\n- `bAbortIfInjured`: unused\n- `bAbortIfDead`: unused +SetPedToRagdollWithFall ```cpp\nenum eNMFallType {\n TYPE_FROM_HIGH = 0,\n TYPE_OVER_WALL = 1,\n TYPE_DOWN_STAIRS = 2,\n TYPE_DIE_TYPES = 3,\n TYPE_DIE_FROM_HIGH = 4,\n TYPE_DIE_OVER_WALL = 5,\n TYPE_DIE_DOWN_STAIRS = 6\n}\n```\n\n```\nReturn variable is never used in R*'s scripts. \nNot sure what p2 does. It seems like it would be a time judging by it's usage in R*'s scripts, but didn't seem to affect anything in my testings. \nx, y, and z are coordinates, most likely to where the ped will fall. \np7 is probably the force of the fall, but untested, so I left the variable name the same. \np8 to p13 are always 0f in R*'s scripts. \n(Simplified) Example of the usage of the function from R*'s scripts: \nped::set_ped_to_ragdoll_with_fall(ped, 1500, 2000, 1, -entity::get_entity_forward_vector(ped), 1f, 0f, 0f, 0f, 0f, 0f, 0f); \n```\n\n**Parameters**\n- `ped`: The ped to ragdoll.\n- `nFallType`: The type of fall.\n- `dirX`: The x direction of the fall.\n- `dirY`: The y direction of the fall.\n- `dirZ`: The z direction of the fall.\n- `fGroundHeight`: The ground height (z).\n- `grab1X`: unused\n- `grab1Y`: unused\n- `grab1Z`: unused\n- `grab2X`: unused\n- `grab2Y`: unused\n- `grab2Z`: unused SetPedTurningThresholds Purpose: The game's default values for these make shooting while traveling Left quite a bit slower than shooting while traveling right (This could be a game-balance thing?)\n\nDefault Min: -45 Degrees\nDefault Max: 135 Degrees\n\n```\n \\ ,- ~ ||~ - ,\n, ' \\ x x ' ,\n```\n\n, \\ x x x ,\n, \\ x x ,\n, \\ x x ,\n, \\ x ,\n, \\ x ,\n, \\ x x ,\n, \\ x ,\n, , '\n' - , \\_ \\_ \\_ , ' \\\\\n\nIf the transition angle is within the shaded portion (x), there will be no transition(Quicker)\nThe angle corresponds to where you are looking(North on the circle) vs. the heading of your Ped.\nNote: For some reason,\n\nYou can set these values to whatever you'd like with this native, but keep in mind that the transitional spin is only clockwise for some reason.\n\nI'd personally recommend something like -135/135\n\n**Parameters**\n- `min`: Leftside angle on the above diagram\n- `max`: Rightside angle on the above diagram SetPedUsingActionMode ```\np2 is usually -1 in the scripts. action is either 0 or "DEFAULT_ACTION". \n``` SetPedVehicleForcedSeatUsage ```\nNativeDB Added Parameter 5: Any p4\n```\n\n**Parameters**\n- `seatIndex`: See eSeatPosition declared in [`IS_VEHICLE_SEAT_FREE`](#\\_0x22AC59A870E6A669). @@ -3195,6 +3264,8 @@ SetPedWetnessEnabledThisFrame ```\ncombined with PED::SET_PED_WETNESS_HEIGHT(), SetPedWetnessHeight ```\nIt adds the wetness level to the player clothing/outfit. As if player just got out from water surface. \n``` SetPickUpByCargobobDisabled Configures an entity to either allow or prevent it from being picked up by Cargobobs.\n\n```\nNativeDB Introduced: v1180\n```\n\n**Parameters**\n- `entity`: The entity to be configured for pick up by Cargobob.\n- `toggle`: A boolean value where `true` prevents the entity from being picked up by Cargobobs, and `false` allows it.\n\n```lua\n-- This example prevents a entity (in this example the vehicle of the player) from being picked up by any Cargobobs.\n\n-- Retrieve the player ped\nlocal playerPed = PlayerPedId()\n\n-- Retrieve the player's vehicle (cargobob)\nlocal vehicle = GetVehiclePedIsIn(playerPed, false)\n\n-- Check if the vehicle exists in the game world.\nif not DoesEntityExist(vehicle) then\n -- If the vehicle does not exist, end the execution of the code here.\n return\nend\n\n-- Prevent the vehicle from being picked up by Cargobobs.\nSetPickUpByCargobobDisabled(vehicle, true)\n``` SetPickupRopeLengthForCargobob ```\nmin: 1.9f, max: 100.0f\n``` +SetPlaneAvoidsOthers ```\nNativeDB Introduced: v3407\n``` +SetPlaneControlSectionsShouldBreakOffFromExplosions ```\nNativeDB Introduced: v3407\n``` SetPlaneEngineHealth ```\nWorks just like SET_VEHICLE_ENGINE_HEALTH, didn't saw any difference. But this native works only for planes.\n``` SetPlaneSectionDamageScale Adjusts the scale of damage applied to a specified section of a plane.\nIn the decompiled scripts the `damageScale` is always set to `0f` (maybe to disable damages on the specified section)\n\n```cpp\nenum ePlaneDamageSection {\n WING_L = 0,\n WING_R = 1,\n TAIL = 2,\n ENGINE_L = 3,\n ENGINE_R = 4,\n ELEVATOR_L = 5,\n ELEVATOR_R = 6,\n AILERON_L = 7,\n AILERON_R = 8,\n RUDDER = 9,\n RUDDER_2 = 10,\n AIRBRAKE_L = 11,\n AIRBRAKE_R = 12\n}\n```\n\n```\nNativeDB Introduced: v1290\n```\n\n**Parameters**\n- `vehicle`: Plane to which the damage scale adjustment will be applied.\n- `damageSection`: Specific section of the plane, as defined in the `ePlaneDamageSection` enum, where the damage scale will be adjusted.\n- `damageScale`: A float value representing the scale of damage to be applied to the specified section.\n\n**Returns** This native does not return any value. SetPlaneTurbulenceMultiplier This native sets the turbulence multiplier. It only works for planes.\n0.0 = no turbulence at all.\n1.0 = heavy turbulence.\n\nWorks by just calling it once, does not need to be called every tick.\n\n**Parameters**\n- `vehicle`: The plane to set the multiplier for\n- `multiplier`: The turbulence multiplier. Value between 0.0 and 1.0\n\n```lua\nlocal plane = GetVehiclePedIsIn(PlayerPedId(), false)\nif IsThisModelAPlane(GetEntityModel(plane)) then\n -- Goodbye turbulence!\n SetPlaneTurbulenceMultiplier(plane, 0.0)\nend\n``` @@ -3202,7 +3273,7 @@ SetPlaybackToUseAi Identical to SET_PLAYBACK_TO_USE_AI_TRY_TO_REVERT_BACK_LATER SetPlaybackToUseAiTryToRevertBackLater ```\nTime is number of milliseconds before reverting, zero for indefinitely.\n```\n\n**Parameters**\n- `drivingStyle`: The driving style (default is 0) (see [SetDriveTaskDrivingStyle](#\\_0xDACE1BE37D88AF67)). SetPlayerAngry Sets a player ped to use his ANGRY speech contexts SetPlayerCanBeHassledByGangs ```\nSets whether this player can be hassled by gangs. \n``` -SetPlayerCanDoDriveBy Sets whether the player is able to do drive-bys in vehicle (shooting & aiming in vehicles), this also includes middle finger taunts.\n\nThis is a toggle, it does not have to be ran every frame.\n\n**Parameters**\n- `player`: The player to target.\n- `toggle`: If set to false, disables the players ability to do drive bys. +SetPlayerCanDoDriveBy Sets whether the player is able to do drive-bys in vehicle (shooting & aiming in vehicles), this also includes middle finger taunts.\n\nThis is a toggle, it does not have to be ran every frame.\n\n**Parameters**\n- `player`: The player to target.\n- `toggle`: If set to false, disables the players ability to do drive bys.\n\n```lua\nSetPlayerCanDoDriveBy(PlayerId(), false)\n``` SetPlayerCanUseCover ```\nSets whether this player can take cover.\n``` SetPlayerClothLockCounter ```\n6 matches across 4 scripts. 5 occurrences were 240. The other was 255. \n``` SetPlayerClothPackageIndex ```\nEvery occurrence was either 0 or 2. \n``` @@ -3249,6 +3320,7 @@ SetPlayerWantedLevel \n\n**Parameters**\n- `player`: the target player\n- `wante SetPlayerWantedLevelNoDrop \n\n**Parameters**\n- `player`: the target player\n- `wantedLevel`: the wanted level 1-5\n- `delayedResponse`: false = 0-10sec police spawn response time, true = 10-20sec police spawn response time\n\n```lua\nlocal player = PlayerId()\nSetPlayerWantedLevelNoDrop(player, 5, false) -- 5 star wanted level\n``` SetPlayerWantedLevelNow ```\nForces any pending wanted level to be applied to the specified player immediately. \nCall SET_PLAYER_WANTED_LEVEL with the desired wanted level, followed by SET_PLAYER_WANTED_LEVEL_NOW. \nSecond parameter is unknown (always false). \n``` SetPlayerWeaponDamageModifier The native ensures the 'modifier' parameter is 0.1 or greater. +SetPmWarningscreenActive Doesn't seem to change anything visual and input-wise. Scripts use this in conjuction with the [`SHOW_WARNING_MESSAGE`](#\\_0xAB58C27C2E6123C6) scaleform function.\nExample of a "Pause Menu Warning Screen":\n![](https://imgur.com/a/LJERmPC)\n\n**Parameters**\n- `isActive`: Lets the game code know that a pause menu warning message is active. SetPoliceFocusWillTrackVehicle Sets flag on vehicle that changes behaviour in relation to when player gets wanted level SetPoliceIgnorePlayer ```\nThe player will be ignored by the police if toggle is set to true \n``` SetPoliceRadarBlips ```\nIf toggle is set to false:\n The police won't be shown on the (mini)map\nIf toggle is set to true:\n The police will be shown on the (mini)map\n``` @@ -3257,13 +3329,15 @@ SetPositionedPlayerVehicleRadioEmitterEnabled \n\n**Parameters**\n- `enabled`: e SetRadarAsInteriorThisFrame ```\nList of interior hashes: pastebin.com/1FUyXNqY \nNot for every interior zoom > 0 available. \n``` SetRadarZoom ```\nzoomLevel ranges from 0 to 200 \n``` SetRadioAutoUnfreeze \n\n**Parameters**\n- `toggle`: if true the radio will automatically unfreeze as soon as the player gets in a vehicle +SetRadioRetuneDown Sets radio to tune down. (Changes radio station) +SetRadioRetuneUp Sets the radio to tune up. (changes radio station) SetRadioStationIsVisible Doesn't have an effect in Story Mode.\n\n```\nNativeDB Introduced: v2372\n``` SetRadioStationMusicOnly ```\n6 calls in the b617d scripts, removed identical lines:\nAUDIO::SET_RADIO_STATION_MUSIC_ONLY("RADIO_01_CLASS_ROCK", 1);\nAUDIO::SET_RADIO_STATION_MUSIC_ONLY(AUDIO::GET_RADIO_STATION_NAME(10), 0);\nAUDIO::SET_RADIO_STATION_MUSIC_ONLY(AUDIO::GET_RADIO_STATION_NAME(10), 1);\n``` SetRadioToStationIndex ```\nSets radio station by index. \n``` SetRadioToStationName Find the radio station list [here](https://gist.github.com/4mmonium/b47d6512a2d992cbf4eea15d9038b581) SetRadioTrack ```\nOnly found this one in the decompiled scripts: \nAUDIO::SET_RADIO_TRACK("RADIO_03_HIPHOP_NEW", "ARM1_RADIO_STARTS"); \n``` SetRadioTrackMix ```\nNativeDB Introduced: v1493\n``` -SetRadiusBlipEdge Enabling this on a radius blip will make it outline only.\\\nPlease note that this only works on a **radius** blip (i.e. one generated using [`ADD_BLIP_FOR_RADIUS`](#\\_0x46818D79B1F7499A)), not a normal blip.\n\n**Example result:**\\\n![example-image](https://i.imgur.com/hS6ki7p.png)\n\n**Parameters**\n- `blip`: The blip handle\n- `toggle`: Whether to turn off or on the effect\n\n```lua\nlocal coords = GetEntityCoords(PlayerPedId())\nlocal radiusBlip = AddBlipForRadius(coords, 100.0) -- need to have .0\nSetBlipColour(radiusBlip, 1)\nSetBlipAlpha(radiusBlip, 255)\nSetRadiusBlipEdge(radiusBlip, true)\n``` +SetRadiusBlipEdge Enabling this on a radius blip will make it outline only.\\\nPlease note that this only works on a **radius** blip (i.e. one generated using [`ADD_BLIP_FOR_RADIUS`](#\\_0x46818D79B1F7499A)), not a normal blip.\n\n**Parameters**\n- `blip`: The blip handle\n- `toggle`: Whether to turn off or on the effect\n\n```lua\nlocal coords = GetEntityCoords(PlayerPedId())\nlocal radiusBlip = AddBlipForRadius(coords, 100.0) -- need to have .0\nSetBlipColour(radiusBlip, 1)\nSetBlipAlpha(radiusBlip, 255)\nSetRadiusBlipEdge(radiusBlip, true)\n``` SetRagdollBlockingFlags ```\nWorks for both player and peds, but some flags don't seem to work for the player (1, for example) \n1 - Blocks ragdolling when shot. \n2 - Blocks ragdolling when hit by a vehicle. The ped still might play a falling animation. \n4 - Blocks ragdolling when set on fire. \n----------------------------------------------------------------------- \nThere seem to be 26 flags \n``` SetRainLevel Controls rain, rain sounds and the creation of puddles.\n\nWith an `level` higher than `0.5f`, only the creation of puddles gets faster, rain and rain sound won't increase after that.\n\nWith an `level` of `0.0f` rain and rain sounds are disabled and there won't be any new puddles.\n\nTo use the rain level of the current weather, call this native with `-1f` as `level`.\n\n**Parameters**\n- `level`: Strength of rain effects SetRandomBoatsInMp ```\nNativeDB Introduced: v2372\n``` @@ -3347,6 +3421,7 @@ SetTrackBrakingDistance Sets the braking distance of the track. Used by trains t SetTrackEnabled Toggles the track being active. If disabled mission trains will not be able to spawn on this track and will look for the next closest track to spawn\n\n**Parameters**\n- `track`: The track id (between 0 - 27)\n- `enabled`: Should this track be enabled SetTrackJunctionActive Sets the state of a track junction.\n\n**Parameters**\n- `junctionIndex`: The junctions index\n- `state`: Toggles the state of the junction\n\n**Returns** Returns if it succeeds setting the junctions state or not SetTrackMaxSpeed Sets the max speed for the train tracks. Used by ambient trains and for station calculations\n\n**Parameters**\n- `track`: The track id (between 0 - 27)\n- `newSpeed`: The tracks new speed +SetTrailerAttachmentEnabled Sets whether the trailer can attach to vehicles\n\n**Parameters**\n- `vehicle`: The trailer to set attachment state for\n- `enabled`: Enable or disable attachment\n\n```lua\nlocal trailerModel = `tanker`\nlocal trailerCoordinates = vector3(-323.59, -757.83, 53.25)\nlocal trailerHeading = 247.77\n\nRequestModel(trailerModel)\n\nwhile not HasModelLoaded(trailerModel) do\n Wait(0)\nend\n\nlocal trailerIndex = CreateVehicle(trailerModel, trailerCoordinates.x, trailerCoordinates.y, trailerCoordinates.z, trailerHeading, true, false)\n\nSetTrailerAttachmentEnabled(trailerIndex, false)\nSetModelAsNoLongerNeeded(trailerModel)\n``` SetTrailerLegsLowered ```\nInverse of 0x95CF53B3D687F9FA\n```\n\n```\nNativeDB Added Parameter 1: Vehicle vehicle\n``` SetTrailerLegsRaised ```\nin the decompiled scripts, seems to be always called on the vehicle right after being attached to a trailer.\n``` SetTrainCruiseSpeed Used to control train speed, can be used to start and stop its movement as well.\n\n```lua\nlocal train = CreateMissionTrain(21, 40.2, -1201.3, 31.0, false)\nSetTrainCruiseSpeed(train, 20.0) -- Can be used to 'start' the train\nSetTrainCruiseSpeed(train, 0.0) -- Can be used to 'stop' the train\n``` @@ -3357,6 +3432,7 @@ SetTrainTrackSpawnFrequency ```\nOnly called once inside main_persitant with the SetTrainsForceDoorsOpen Enables or disables whether train doors should be forced open whilst a player is inside the train. This is enabled by default in multiplayer.\n\n**Parameters**\n- `forceOpen`: Should force open. SetTransformRateForAnimation Affects the playback speed of the submarine car conversion animations. Does not affect hardcoded animations such as the wheels being retracted. In decompiled scripts the only value used for transformRate is 2.5.\n\n**Parameters**\n- `vehicle`: The vehicle for which the submarine car conversion animation speed should be adjusted.\n- `transformRate`: The rate at which the submarine car conversion animations will be played.\n\n```lua\n-- This example sets the transform rate for the submarine car conversion animations to 2.5\n\n-- Retrieve the player ped\nlocal playerPed = PlayerPedId()\n\n-- Retrieve the vehicle in which the player is currently seated\nlocal vehicle = GetVehiclePedIsIn(playerPed, false) -- Get the vehicle in which the player is currently seated\n\n-- Retrieve the vehicle model hash\nlocal vehicleHash = GetEntityModel(vehicle)\n\n-- Check if the vehicle exists in the game world and if it is a Stromberg.\nif not DoesEntityExist(vehicle) or not vehicleHash == GetHashKey("stromberg") then\n -- If the vehicle does not exist or it's not a stromberg, end the execution of the code here.\n return\nend\n\n-- Set the transform rate for the submarine car conversion animations to 2.5\nSetTransformRateForAnimation(vehicle, 2.5)\n``` SetTransformToSubmarineUsesAlternateInput Changes the key used to transform a vehicle into submarine mode. When set to true, the transformation key switches from the default raise/lower convertible roof key (usually 'H') to the special vehicle transformation key (usually 'X').\n\n```\nNativeDB Introduced: v1365\n```\n\n**Parameters**\n- `vehicle`: The vehicle for which the submarine mode should be configured.\n- `useAlternateInput`: A boolean switch to enable/disable the use of alternate input.\n\n```lua\n-- This example sets the key for submarine mode transformation to special vehicle transform \n\n-- Retrieve the player ped\nlocal playerPed = PlayerPedId()\n\n-- Retrieve the vehicle in which the player is currently seated\nlocal vehicle = GetVehiclePedIsIn(playerPed, false)\n\n-- Retrieve the vehicle model hash\nlocal vehicleHash = GetEntityModel(vehicle)\n\n-- Check if the vehicle exists in the game world and if it is a Stromberg.\nif not DoesEntityExist(vehicle) or not vehicleHash == GetHashKey("stromberg") then\n -- If the vehicle does not exist or it's not a stromberg, end the execution of the code here.\n return\nend\n\n-- Set the key for submarine mode transformation to special vehicle transform (X by default)\nSetTransformToSubmarineUsesAlternateInput(vehicle, true)\n``` +SetTransitionOutOfTimecycleModifier Transitions current timecycle modifier out.\n\n**Parameters**\n- `transitionTime`: How long the transition should take (In seconds) SetTransitionTimecycleModifier This native doesn't work like [`SetWeatherTypeTransition`](#\\_0x578C752848ECFA0C).\n\n**Parameters**\n- `modifierName`: The name of a timecycle\n- `transition`: The speed to transition to `modifierName`. Appears to be half-seconds (?) SetTvAudioFrontend ```\nProbably changes tvs from being a 3d audio to being "global" audio\n``` SetTvChannelPlaylist Loads specified video sequence into the TV Channel\nTV_Channel ranges from 0-2\nVideoSequence can be any of the following:\n"PL_STD_CNT" CNT Standard Channel\n"PL_STD_WZL" Weazel Standard Channel\n"PL_LO_CNT"\n"PL_LO_WZL"\n"PL_SP_WORKOUT"\n"PL_SP_INV" - Jay Norris Assassination Mission Fail\n"PL_SP_INV_EXP" - Jay Norris Assassination Mission Success\n"PL_LO_RS" - Righteous Slaughter Ad\n"PL_LO_RS_CUTSCENE" - Righteous Slaughter Cut-scene\n"PL_SP_PLSH1\\_INTRO"\n"PL_LES1\\_FAME_OR_SHAME"\n"PL_STD_WZL_FOS_EP2"\n"PL_MP_WEAZEL" - Weazel Logo on loop\n"PL_MP_CCTV" - Generic CCTV loop\nRestart:\n0=video sequence continues as normal\n1=sequence restarts from beginning every time that channel is selected\nThe above playlists work as intended, and are commonly used, but there are many more playlists, as seen in `tvplaylists.xml`. A pastebin below outlines all playlists, they will be surronded by the name tag I.E. (PL_STD_CNT = PL_STD_CNT).\nhttps://pastebin.com/zUzGB6h7 @@ -3376,6 +3452,7 @@ SetVariableOnUnderWaterStream ```\nAUDIO::SET_VARIABLE_ON_UNDER_WATER_STREAM("in SetVehHasRadioOverride ```\nNativeDB Introduced: v2372\n``` SetVehRadioStation Find the radio station list [here](https://gist.github.com/4mmonium/b47d6512a2d992cbf4eea15d9038b581) SetVehicleActAsIfHighSpeedForFragSmashing This native is used to simulate a high-speed impact for a vehicle when it collides with a breakable object (frag). It's particularly useful in scripted sequences where a vehicle is required to break through a barrier but might not actually be moving at a sufficient speed to do so realistically. Note that this setting is temporary and will reset after one frame, so it needs to be called every frame for a lasting effect.\n\n**Parameters**\n- `vehicle`: The vehicle to be affected by this setting.\n- `actHighSpeed`: A boolean flag. Set to `true` to make the vehicle act as if it's at high speed for the current frame +SetVehicleAllowHomingMissleLockon Sets whether homing missiles can lock onto the specified vehicle.\nWhen set to `false`, players using a Homing Launcher or vehicles with homing missiles will not be able to lock onto the target vehicle.\n\n**Parameters**\n- `vehicle`: The target vehicle.\n- `toggle`: `true` to allow homing missile lock-on, `false` to disable it.\n- `p2`: Unknown parameter, typically `false`.\n\n```lua\n-- Disable homing missile lock-on for the player's current vehicle.\nlocal playerPed = PlayerPedId()\nlocal vehicle = GetVehiclePedIsIn(playerPed, false)\n\nif vehicle ~= 0 then\n SetVehicleAllowHomingMissleLockon(vehicle, false, false)\nend\n``` SetVehicleAllowNoPassengersLockon ```\nMakes the vehicle accept no passengers. \n``` SetVehicleAsNoLongerNeeded ```\nThis is an alias of SET_ENTITY_AS_NO_LONGER_NEEDED. \n``` SetVehicleAudioBodyDamageFactor Vehicle will make a 'rattling' noise when decelerating\n\n**Parameters**\n- `vehicle`: Vehicle to modify\n- `intensity`: A value 0.0 - 1.0. Higher the value, the more likely the vehicle is to make the sound while decelerating @@ -3410,13 +3487,14 @@ SetVehicleDoorShut Sets the specified door index shut on the passed vehicle.\n\n SetVehicleDoorsLocked Locks the doors of a specified vehicle to a defined lock state, affecting how players and NPCs can interact with the vehicle.\n\n```\nNativeDB Introduced: v323\n```\n\n```cpp\nenum eVehicleLockState {\n // No specific lock state, vehicle behaves according to the game's default settings.\n VEHICLELOCK_NONE = 0,\n // Vehicle is fully unlocked, allowing free entry by players and NPCs.\n VEHICLELOCK_UNLOCKED = 1,\n // Vehicle is locked, preventing entry by players and NPCs.\n VEHICLELOCK_LOCKED = 2,\n // Vehicle locks out only players, allowing NPCs to enter.\n VEHICLELOCK_LOCKOUT_PLAYER_ONLY = 3,\n // Vehicle is locked once a player enters, preventing others from entering.\n VEHICLELOCK_LOCKED_PLAYER_INSIDE = 4,\n // Vehicle starts in a locked state, but may be unlocked through game events.\n VEHICLELOCK_LOCKED_INITIALLY = 5,\n // Forces the vehicle's doors to shut and lock.\n VEHICLELOCK_FORCE_SHUT_DOORS = 6,\n // Vehicle is locked but can still be damaged.\n VEHICLELOCK_LOCKED_BUT_CAN_BE_DAMAGED = 7,\n // Vehicle is locked, but its trunk/boot remains unlocked.\n VEHICLELOCK_LOCKED_BUT_BOOT_UNLOCKED = 8,\n // Vehicle is locked and does not allow passengers, except for the driver.\n VEHICLELOCK_LOCKED_NO_PASSENGERS = 9,\n // Vehicle is completely locked, preventing entry entirely, even if previously inside.\n VEHICLELOCK_CANNOT_ENTER = 10 \n};\n\n```\n\n**Parameters**\n- `vehicle`: The vehicle whose doors are to be locked.\n- `doorLockStatus`: The lock state to apply to the vehicle's doors, see `eVehicleLockState`.\n\n```lua\n-- Command to lock the car of the player for everyone.\nRegisterCommand("lockcar", function()\n local playerPed = PlayerPedId() -- Get the player ped\n local vehicle = GetVehiclePedIsIn(playerPed, false) -- Get the vehicle the player is in\n if (vehicle == 0) then return end -- If the player is not in a vehicle, return\n SetVehicleDoorsLocked(vehicle, 2) -- Lock the doors of the vehicle\nend, false)\n\n-- Command to unlock the car of the player for everyone.\nRegisterCommand("unlockcar", function()\n local playerPed = PlayerPedId() -- Get the player ped\n local vehicle = GetVehiclePedIsIn(playerPed, false) -- Get the vehicle the player is in\n if (vehicle == 0) then return end -- If the player is not in a vehicle, return\n SetVehicleDoorsLocked(vehicle, 1) -- Unlock the doors of the vehicle\nend, false)\n``` SetVehicleDoorsLockedForUnk ```\nNativeDB Introduced: v1365\n``` SetVehicleDoorsShut ```\nCloses all doors of a vehicle: \n``` -SetVehicleDropsMoneyWhenBlownUp ```\nMoney pickups are created around cars when they explode. Only works when the vehicle model is a car. A single pickup is between 1 and 18 dollars in size. All car models seem to give the same amount of money.\nyoutu.be/3arlUxzHl5Y\ni.imgur.com/WrNpYFs.jpg\n``` +SetVehicleDropsMoneyWhenBlownUp Money pickups are created around cars when they explode. Only works when the vehicle model is a car. A single pickup is between 1 and 18 dollars in size. All car models seem to give the same amount of money.\n\nPreview:\n\nhttps://youtu.be/3arlUxzHl5Y\n![](https://i.imgur.com/KsaWO6E.png) SetVehicleEngineHealth ```\n1000 is max health\nBegins leaking gas at around 650 health\n-999.90002441406 appears to be minimum health, although nothing special occurs <- false statement\n-------------------------\nMinimum: -4000\nMaximum: 1000\n-4000: Engine is destroyed\n0 and below: Engine catches fire and health rapidly declines\n300: Engine is smoking and losing functionality\n1000: Engine is perfect\n``` SetVehicleEngineOn Starts or stops the engine on the specified vehicle.\nFrom what I've tested when I do this to a helicopter the propellers turn off after the engine has started.\n\n**Parameters**\n- `vehicle`: The vehicle to start or stop the engine on.\n- `value`: true to turn the vehicle on; false to turn it off.\n- `instantly`: if true, the vehicle will be set to the state immediately; otherwise, the current driver will physically turn on or off the engine.\n- `disableAutoStart`: If true, the system will prevent the engine from starting when the player got into it. -SetVehicleEnveffScale Examples with a besra:\n\n* [fade value `0.0`](https://i.imgur.com/DXNk63e.jpg)\n* [fade value `0.5`](https://i.imgur.com/2Vb35fq.jpg)\n* [fade value `1.0`](https://i.imgur.com/aa8cxaD.jpg)\n\nThe parameter fade is a value from 0-1, where 0 is fresh paint.\n\n**Parameters**\n- `vehicle`: Target vehicle\n- `fade`: The paint fade effect strength +SetVehicleEnveffScale Examples with a besra:\n\n* Fade value `0.0`:![](https://i.imgur.com/dlWnhgZ.png)\n* Fade value `0.5`:![](https://i.imgur.com/rbzMfh6.png)\n* Fade value `1.0`:![](https://i.imgur.com/pRqLnSP.png)\n\nThe parameter fade is a value from 0-1, where 0 is fresh paint.\n\n**Parameters**\n- `vehicle`: Target vehicle\n- `fade`: The paint fade effect strength SetVehicleExclusiveDriver Incorrectly named `SET_VEHICLE_EXCLUSIVE_DRIVER`; likely `SET_VEHICLE_ALLOW_*`.\n\nToggles a flag related to `SET_VEHICLE_EXCLUSIVE_DRIVER`, however, doesn't enable that feature (or trigger script events related to it).\n\nSee [`_SET_VEHICLE_EXCLUSIVE_DRIVER_2`](#\\_0xB5C51B5502E85E83).\n\n```\nNativeDB Removed Parameter 2: int index\n``` SetVehicleExclusiveDriver_2 The **actual** [`SET_VEHICLE_EXCLUSIVE_DRIVER`](#\\_0x41062318F23ED854) native. SetVehicleExplodesOnHighExplosionDamage ```\nSets a vehicle to be strongly resistant to explosions. p0 is the vehicle; set p1 to false to toggle the effect on/off. \n``` +SetVehicleExplosiveDamageScale ```\nNativeDB Introduced: v3407\n```\n\n**Returns** Does not actually return anything. SetVehicleExtendedRemovalRange ```\nMax value is 32767\n``` SetVehicleExtra ```\nNote: only some vehicle have extras \nextra ids are from 1 - 9 depending on the vehicle \n------------------------------------------------- \n^ not sure if outdated or simply wrong. Max extra ID for b944 is 14 \n------------------------------------------------- \np2 is not a on/off toggle. mostly 0 means on and 1 means off. \nnot sure if it really should be a BOOL. \n------------------------------------------------- \nConfirmed p2 does not work as a bool. Changed to int. [0=on, 1=off] \n``` SetVehicleExtraColours ```\nThey use the same color indexs as SET_VEHICLE_COLOURS. \n``` @@ -3446,6 +3524,7 @@ SetVehicleKeepEngineOnWhenAbandoned Calling this native will keep a vehicle's en SetVehicleLightMultiplier This multiplier has no limit, by default the game has this set to `1.0`.\n\n**Parameters**\n- `vehicle`: The vehicle handle.\n- `multiplier`: The multiplier applied to the vehicle's headlights. SetVehicleLights Sets the vehicle lights state. Allowing for different lighting modes.\n\n```\nNativeDB Introduced: v323\n```\n\n```cpp\nenum eVehicleLightSetting {\n // Normal light behavior. Lights cycle through off, then low beams, then high beams.\n // Note: It's affected by day or night; high beams don't exist in daytime.\n NO_VEHICLE_LIGHT_OVERRIDE = 0,\n // Vehicle doesn't have lights, always off.\n FORCE_VEHICLE_LIGHTS_OFF = 1, \n // Vehicle has always-on lights.\n // During day: Cycles between low beams and high beams. \n // At night: Cycles between low beams, low beams, and high beams.\n FORCE_VEHICLE_LIGHTS_ON = 2,\n // Sets vehicle lights on. Behaves like normal lights (same as 0).\n SET_VEHICLE_LIGHTS_ON = 3,\n // Sets vehicle lights off. Behaves like normal lights (same as 0).\n SET_VEHICLE_LIGHTS_OFF = 4 \n};\n```\n\n**Parameters**\n- `vehicle`: The target vehicle.\n- `state`: A value from `eVehicleLightSetting` representing the desired light setting.\n\n```lua\nlocal vehicle = GetVehiclePedIsIn(PlayerPedId(), false)\nif not vehicle then return end\n\n-- Set the vehicle lights to always on\nSetVehicleLights(vehicle, 2)\n``` SetVehicleMaxSpeed To reset the max speed, set the `speed` value to `0.0` or lower.\n\n**Parameters**\n- `vehicle`: The vehicle handle.\n- `speed`: The speed limit in meters per second. +SetVehicleMissileWarningEnabled Toggles the incoming missile warning system for specified vehicle.\n\n**Parameters**\n- `vehicle`: Vehicle to toggle warning system for.\n- `toggle`: `true` to enable, `false` to disable. SetVehicleMod ```cpp\n// eVehicleModType values modified to conform to script native reorganization (see 0x140D25327 in 1604).\nenum eVehicleModType\n{\n VMT_SPOILER = 0,\n VMT_BUMPER_F = 1,\n VMT_BUMPER_R = 2,\n VMT_SKIRT = 3,\n VMT_EXHAUST = 4,\n VMT_CHASSIS = 5,\n VMT_GRILL = 6,\n VMT_BONNET = 7,\n VMT_WING_L = 8,\n VMT_WING_R = 9,\n VMT_ROOF = 10,\n VMT_ENGINE = 11,\n VMT_BRAKES = 12,\n VMT_GEARBOX = 13,\n VMT_HORN = 14,\n VMT_SUSPENSION = 15,\n VMT_ARMOUR = 16,\n VMT_NITROUS = 17,\n VMT_TURBO = 18,\n VMT_SUBWOOFER = 19,\n VMT_TYRE_SMOKE = 20,\n VMT_HYDRAULICS = 21,\n VMT_XENON_LIGHTS = 22,\n VMT_WHEELS = 23,\n VMT_WHEELS_REAR_OR_HYDRAULICS = 24,\n VMT_PLTHOLDER = 25,\n VMT_PLTVANITY = 26,\n VMT_INTERIOR1 = 27,\n VMT_INTERIOR2 = 28,\n VMT_INTERIOR3 = 29,\n VMT_INTERIOR4 = 30,\n VMT_INTERIOR5 = 31,\n VMT_SEATS = 32,\n VMT_STEERING = 33,\n VMT_KNOB = 34,\n VMT_PLAQUE = 35,\n VMT_ICE = 36,\n VMT_TRUNK = 37,\n VMT_HYDRO = 38,\n VMT_ENGINEBAY1 = 39,\n VMT_ENGINEBAY2 = 40,\n VMT_ENGINEBAY3 = 41,\n VMT_CHASSIS2 = 42,\n VMT_CHASSIS3 = 43,\n VMT_CHASSIS4 = 44,\n VMT_CHASSIS5 = 45,\n VMT_DOOR_L = 46,\n VMT_DOOR_R = 47,\n VMT_LIVERY_MOD = 48,\n VMT_LIGHTBAR = 49,\n};\n``` SetVehicleModColor_1 ```\npaintType: \n0: Normal \n1: Metallic \n2: Pearl \n3: Matte \n4: Metal \n5: Chrome \ncolor: number of the color. \np3 seems to always be 0. \n``` SetVehicleModColor_2 ```\nChanges the secondary paint type and color \npaintType: \n0: Normal \n1: Metallic \n2: Pearl \n3: Matte \n4: Metal \n5: Chrome \ncolor: number of the color \n``` @@ -3486,8 +3565,10 @@ SetVehicleTyreBurst ```\n"To burst tyres VEHICLE::SET_VEHICLE_TYRE_BURST(vehicle SetVehicleTyreFixed ```\ntyreIndex = 0 to 4 on normal vehicles \n'0 = wheel_lf / bike, plane or jet front \n'1 = wheel_rf \n'2 = wheel_lm / in 6 wheels trailer, plane or jet is first one on left \n'3 = wheel_rm / in 6 wheels trailer, plane or jet is first one on right \n'4 = wheel_lr / bike rear / in 6 wheels trailer, plane or jet is last one on left \n'5 = wheel_rr / in 6 wheels trailer, plane or jet is last one on right \n'45 = 6 wheels trailer mid wheel left \n'47 = 6 wheels trailer mid wheel right \n``` SetVehicleTyreSmokeColor ```\nSets the tire smoke's color of this vehicle. \nvehicle: The vehicle that is the target of this method. \nr: The red level in the RGB color code. \ng: The green level in the RGB color code. \nb: The blue level in the RGB color code. \nNote: \nsetting r,g,b to 0 will give the car independance day tyre smoke \n``` SetVehicleTyresCanBurst ```\nAllows you to toggle bulletproof tires. \n``` +SetVehicleUndriveable Marks a vehicle as undriveable. While this is set, the engine cannot be started by anyone. Peds can still open the door, sit in the driver seat and close the door and try to start the car, but it will only turn over.\n\nWhen set to `true`, the engine is forced off instantly even if it was running. A moving vehicle will coast, brakes and steering still respond.\n\nToggling this to `false` will not restart the engine. The driver must start it again, or you must call [SET_VEHICLE_ENGINE_ON](#\\_0x2497C4717C8B881E).\n\nThe state is local to each client and is not synced via the network. Every client that has the vehicle in scope needs to apply it.\n\nThis flag persists across damage and repair; [SET_VEHICLE_FIXED](#\\_0x115722B1B9C14C1C) does not clear it. If you set it, you are expected to clear it.\n\nPair with [SET_VEHICLE_DOORS_LOCKED](#\\_0xB664292EAECF7FA6) to keep peds out entirely.\n\nBicycles accept the flag but have no engine to shut off, so the call has no meaningful effect on them.\n\n**Parameters**\n- `vehicle`: The vehicle to modify.\n- `toggle`: `true` to mark the vehicle as undriveable and immediately shut the engine off, `false` allows the vehicle to be driven again.\n\n```lua\n-- /lockengine toggles the undriveable flag on the player's current vehicle\nlocal locked = false\nRegisterCommand("lockengine", function()\n local ped = PlayerPedId()\n local vehicle = GetVehiclePedIsIn(ped, false)\n if vehicle == 0 then return end\n locked = not locked\n SetVehicleUndriveable(vehicle, locked)\nend, false)\n``` SetVehicleUseHornButtonForNitrous ```\nNativeDB Introduced: v3095\n```\n\nEnables or disables the use of the vehicle's horn button for activating the nitrous system.\n\n**Parameters**\n- `vehicle`: The vehicle where this setting will be applied.\n- `bToggle`: If set to `true`, the horn button will activate the nitrous system; if `false`, it will not.\n\n```lua\n-- Retrieve the player ped\nlocal playerPed = PlayerPedId()\n\n-- Retrieve the vehicle the player is currently in. \nlocal vehicle = GetVehiclePedIsIn(playerPed, false)\n\n-- Check if the vehicle exists in the game world.\nif vehicle == 0 then return end\n\n-- Enable activating nitrous in the vehicle using the horn button.\nSetVehicleUseHornButtonForNitrous(vehicle, true)\n``` SetVehicleUsesLargeRearRamp ```\nvehicle must be a plane\n``` +SetVehicleWeaponRestrictedAmmo Sets a limited number of ammo for a particular vehicle weapon index on a vehicle.\n\nInformation about weapon indexes can be found in `handling.meta`.\n\nIn the example given below, `uWeaponHash` defines weapon hashes for the vehicle. Each `` corresponds to an index starting from `0`.\n\n```\n\n VEHICLE_WEAPON_PLAYER_BUZZARD \n VEHICLE_WEAPON_SPACE_ROCKET \n VEHICLE_WEAPON_SEARCHLIGHT \n\n```\n\n**Parameters**\n- `vehicle`: The vehicle handle\n- `weaponIndex`: The weapon index we're setting ammo for (between `0` and `3`), see description for more.\n- `ammoCount`: When set positive, will count down with every fire and prevent firing at `0`. Set `-1` to disable restricted ammo. SetVehicleWheelBrakePressure Sets brake pressure of a wheel.\nMax number of wheels can be retrieved with the native GET_VEHICLE_NUMBER_OF_WHEELS.\nNormal values around 1.0f SetVehicleWheelFlags Sets the flags of a wheel.\nMax number of wheels can be retrieved with the native GET_VEHICLE_NUMBER_OF_WHEELS.\n\n**Parameters**\n- `flags`: bit flags SetVehicleWheelIsPowered Sets whether the wheel is powered.\nOn all wheel drive cars this works to change which wheels receive power, but if a car's fDriveBiasFront doesn't send power to that wheel, it won't get power anyway. This can be fixed by changing the fDriveBiasFront with SET_VEHICLE_HANDLING_FLOAT.\nMax number of wheels can be retrieved with the native GET_VEHICLE_NUMBER_OF_WHEELS.\nThis is a shortcut to a flag in SET_VEHICLE_WHEEL_FLAGS.\n\n```lua\nSetVehicleWheelIsPowered(vehicle, 0, true);\n``` @@ -3511,9 +3592,8 @@ SetVisualSettingFloat Overrides a floating point value from `visualsettings.dat` SetWaitForCollisionsBeforeProbe ```\nSET_*\nOnly called within 1 script for x360. 'fm_mission_controller' and it used on an object.\nRan after these 2 natives,\nset_object_targettable(uParam0, 0);\nset_entity_invincible(uParam0, 1);\n``` SetWantedLevelDifficulty ```\nMax value is 1.0 \n``` SetWantedLevelHiddenEvasionTime ```\nNativeDB Introduced: v2060\n``` -SetWarningMessage ```cpp\nenum eInstructionalButtonTypes\n{\n NONE = 0,\n SELECT = 1,\n OK = 2,\n YES = 4,\n BACK = 8,\n BACK_SELECT = 9,\n BACK_OK = 10,\n BACK_YES = 12,\n CANCEL = 16,\n CANCEL_SELECT = 17,\n CANCEL_OK = 18,\n CANCEL_YES = 20,\n NO = 32,\n NO_SELECT = 33,\n NO_OK = 34,\n YES_NO = 36,\n RETRY = 64,\n RETRY_SELECT = 65,\n RETRY_OK = 66,\n RETRY_YES = 68,\n RETRY_BACK = 72,\n RETRY_BACK_SELECT = 73,\n RETRY_BACK_OK = 74,\n RETRY_BACK_YES = 76,\n RETRY_CANCEL = 80,\n RETRY_CANCEL_SELECT = 81,\n RETRY_CANCEL_OK = 82,\n RETRY_CANCEL_YES = 84,\n SKIP = 256,\n SKIP_SELECT = 257,\n SKIP_OK = 258,\n SKIP_YES = 260,\n SKIP_BACK = 264,\n SKIP_BACK_SELECT = 265,\n SKIP_BACK_OK = 266,\n SKIP_BACK_YES = 268,\n SKIP_CANCEL = 272,\n SKIP_CANCEL_SELECT = 273,\n SKIP_CANCEL_OK = 274,\n SKIP_CANCEL_YES = 276,\n CONTINUE = 16384,\n BACK_CONTINUE = 16392,\n CANCEL_CONTINUE = 16400,\n LOADING_SPINNER = 134217728,\n SELECT_LOADING_SPINNER = 134217729,\n OK_LOADING_SPINNER = 134217730,\n YES_LOADING_SPINNER = 134217732,\n BACK_LOADING_SPINNER = 134217736,\n BACK_SELECT_LOADING_SPINNER = 134217737,\n BACK_OK_LOADING_SPINNER = 134217738,\n BACK_YES_LOADING_SPINNER = 134217740,\n CANCEL_LOADING_SPINNER = 134217744,\n CANCEL_SELECT_LOADING_SPINNER = 134217745,\n CANCEL_OK_LOADING_SPINNER = 134217746,\n CANCEL_YES_LOADING_SPINNER = 134217748\n}\n```\n\nNote: this list is definitely NOT complete, but these are the ones I've been able to find before giving up because it's such a boring thing to look for 'good' combinations.\n\n**Result of the example code:**\n\n\n**Parameters**\n- `entryLine1`: The text label to display as the first line of the warning message.\n- `instructionalKey`: This is an enum, check the description for a list.\n- `entryLine2`: The text label to display as the second line of the warning message.\n- `p3`: Purpose unknown.\n- `p4`: Purpose unknown.\n- `background`: Set to anything other than 0 or false (even any string) and it will draw a background. Setting it to 0 or false will draw no background.\n- `p6`: Purpose unknown.\n- `showBg`: Purpose unknown.\n- `errorCode`: When not 0, adds a field displaying the value as 'error code' to the warning message.\n\n```lua\n-- Make the first line using custom text.\nAddTextEntry("warning_message_first_line", "This is the first line.")\n\n-- Make the second line using custom text.\nAddTextEntry("warning_message_second_line", "This is the second line!")\n\n-- Add an event handler for when the screen is dismissed.\nAddEventHandler("optionSelected", function(selected)\n print(selected) -- do whatever you want with the selected choice.\n -- players can either press the physicial buttons, or they can click\n -- the instructional buttons with their mouse and it will trigger\n -- the event as well.\nend)\n\n\n-- Create a thread to loop this warning message.\nCreateThread(function()\n while true do\n Wait(0)\n -- Display the warning message every tick.\n SetWarningMessage("warning_message_first_line", 82, "warning_message_second_line", 0, -1, true, 0, 0, 0)\n \n -- Check for key presses or instructional button clicks.\n -- Input group of 2 is required for this to work while the warning is being displayed.\n \n if (IsControlJustReleased(2, 201) or IsControlJustReleased(2, 217)) then -- any select/confirm key was pressed.\n TriggerEvent("optionSelected", "select")\n break\n elseif (IsControlJustReleased(2, 203)) then -- spacebar/x on controller (alt option) was pressed.\n TriggerEvent("optionSelected", "alt")\n break\n elseif (IsControlJustReleased(2, 202)) then -- any of the cancel/back buttons was pressed\n TriggerEvent("optionSelected", "cancel")\n break\n end\n end\nend)\n``` -SetWarningMessageListRow ```\nParam names copied from the corresponding scaleform function "SET_LIST_ROW"\n``` -SetWarningMessageWithAlert instructionalKey enum list:\n\n```\nButtons = {\n Empty = 0,\n Select = 1, -- (RETURN)\n Ok = 2, -- (RETURN)\n Yes = 4, -- (RETURN)\n Back = 8, -- (ESC)\n Cancel = 16, -- (ESC)\n No = 32, -- (ESC)\n RetrySpace = 64, -- (SPACE)\n Restart = 128, -- (SPACE)\n Skip = 256, -- (SPACE)\n Quit = 512, -- (ESC)\n Adjust = 1024, -- (ARROWS)\n SpaceKey = 2048, -- (SPACE)\n Share = 4096, -- (SPACE)\n SignIn = 8192, -- (SPACE)\n Continue = 16384, -- (RETURN)\n AdjustLeftRight = 32768, -- (SCROLL L/R)\n AdjustUpDown = 65536, -- (SCROLL U/D)\n Overwrite = 131072, -- (SPACE)\n SocialClubSignup = 262144, -- (RETURN)\n Confirm = 524288, -- (RETURN)\n Queue = 1048576, -- (RETURN)\n RetryReturn = 2097152, -- (RETURN)\n BackEsc = 4194304, -- (ESC)\n SocialClub = 8388608, -- (RETURN)\n Spectate = 16777216, -- (SPACE)\n OkEsc = 33554432, -- (ESC)\n CancelTransfer = 67108864, -- (ESC)\n LoadingSpinner = 134217728,\n NoReturnToGTA = 268435456, -- (ESC)\n CancelEsc = 536870912, -- (ESC)\n}\n\nAlt = {\n Empty = 0,\n No = 1, -- (SPACE)\n Host = 2, -- (ESC)\n SearchForJob = 4, -- (RETURN)\n ReturnKey = 8, -- (TURN)\n Freemode = 16, -- (ESC)\n}\n```\n\n**Result of the example code:** \n\n**Parameters**\n- `labelTitle`: Label of the alert's title.\n- `labelMsg`: Label of the alert's message.\n- `p2`: This is an enum, check the description for a list.\n- `p3`: This is an enum, check the description for a list.\n- `labelMsg2`: Label of another message line\n- `p5`: usually 0\n- `p6`: usually -1\n- `p7`: usually 0\n- `p8`: unknown label\n- `p9`: unknown label\n- `background`: Set to anything other than 0 or false (even any string) and it will draw a background. Setting it to 0 or false will draw no background.\n- `errorCode`: Error code, shown at the bottom left if set to value other than 0.\n\n```lua\nCitizen.CreateThread(function()\n AddTextEntry("FACES_WARNH2", "Nice title")\n AddTextEntry("QM_NO_0", "Cool message")\n AddTextEntry("QM_NO_3", "Cool message 2")\n while true do\n Citizen.Wait(0)\n DrawFrontendAlert("FACES_WARNH2", "QM_NO_0", 3, 3, "QM_NO_3", 2, -1, false, "FM_NXT_RAC", "QM_NO_1", true, 10)\n end\nend)\n``` +SetWarningMessage ```cpp\nenum eInstructionalButtonTypes\n{\n NONE = 0,\n SELECT = 1,\n OK = 2,\n YES = 4,\n BACK = 8,\n BACK_SELECT = 9,\n BACK_OK = 10,\n BACK_YES = 12,\n CANCEL = 16,\n CANCEL_SELECT = 17,\n CANCEL_OK = 18,\n CANCEL_YES = 20,\n NO = 32,\n NO_SELECT = 33,\n NO_OK = 34,\n YES_NO = 36,\n RETRY = 64,\n RETRY_SELECT = 65,\n RETRY_OK = 66,\n RETRY_YES = 68,\n RETRY_BACK = 72,\n RETRY_BACK_SELECT = 73,\n RETRY_BACK_OK = 74,\n RETRY_BACK_YES = 76,\n RETRY_CANCEL = 80,\n RETRY_CANCEL_SELECT = 81,\n RETRY_CANCEL_OK = 82,\n RETRY_CANCEL_YES = 84,\n SKIP = 256,\n SKIP_SELECT = 257,\n SKIP_OK = 258,\n SKIP_YES = 260,\n SKIP_BACK = 264,\n SKIP_BACK_SELECT = 265,\n SKIP_BACK_OK = 266,\n SKIP_BACK_YES = 268,\n SKIP_CANCEL = 272,\n SKIP_CANCEL_SELECT = 273,\n SKIP_CANCEL_OK = 274,\n SKIP_CANCEL_YES = 276,\n CONTINUE = 16384,\n BACK_CONTINUE = 16392,\n CANCEL_CONTINUE = 16400,\n LOADING_SPINNER = 134217728,\n SELECT_LOADING_SPINNER = 134217729,\n OK_LOADING_SPINNER = 134217730,\n YES_LOADING_SPINNER = 134217732,\n BACK_LOADING_SPINNER = 134217736,\n BACK_SELECT_LOADING_SPINNER = 134217737,\n BACK_OK_LOADING_SPINNER = 134217738,\n BACK_YES_LOADING_SPINNER = 134217740,\n CANCEL_LOADING_SPINNER = 134217744,\n CANCEL_SELECT_LOADING_SPINNER = 134217745,\n CANCEL_OK_LOADING_SPINNER = 134217746,\n CANCEL_YES_LOADING_SPINNER = 134217748\n}\n```\n\nNote: this list is definitely NOT complete, but these are the ones I've been able to find before giving up because it's such a boring thing to look for 'good' combinations.\n\n**Result of the example code:**\n![](https://i.imgur.com/aG6ROkP.png)\n\n**Parameters**\n- `entryLine1`: The text label to display as the first line of the warning message.\n- `instructionalKey`: This is an enum, check the description for a list.\n- `entryLine2`: The text label to display as the second line of the warning message.\n- `p3`: Purpose unknown.\n- `p4`: Purpose unknown.\n- `background`: Set to anything other than 0 or false (even any string) and it will draw a background. Setting it to 0 or false will draw no background.\n- `p6`: Purpose unknown.\n- `showBg`: Purpose unknown.\n- `errorCode`: When not 0, adds a field displaying the value as 'error code' to the warning message.\n\n```lua\n-- Make the first line using custom text.\nAddTextEntry("warning_message_first_line", "This is the first line.")\n\n-- Make the second line using custom text.\nAddTextEntry("warning_message_second_line", "This is the second line!")\n\n-- Add an event handler for when the screen is dismissed.\nAddEventHandler("optionSelected", function(selected)\n print(selected) -- do whatever you want with the selected choice.\n -- players can either press the physicial buttons, or they can click\n -- the instructional buttons with their mouse and it will trigger\n -- the event as well.\nend)\n\n\n-- Create a thread to loop this warning message.\nCreateThread(function()\n while true do\n Wait(0)\n -- Display the warning message every tick.\n SetWarningMessage("warning_message_first_line", 82, "warning_message_second_line", 0, -1, true, 0, 0, 0)\n \n -- Check for key presses or instructional button clicks.\n -- Input group of 2 is required for this to work while the warning is being displayed.\n \n if (IsControlJustReleased(2, 201) or IsControlJustReleased(2, 217)) then -- any select/confirm key was pressed.\n TriggerEvent("optionSelected", "select")\n break\n elseif (IsControlJustReleased(2, 203)) then -- spacebar/x on controller (alt option) was pressed.\n TriggerEvent("optionSelected", "alt")\n break\n elseif (IsControlJustReleased(2, 202)) then -- any of the cancel/back buttons was pressed\n TriggerEvent("optionSelected", "cancel")\n break\n end\n end\nend)\n``` +SetWarningMessageWithAlert instructionalKey enum list:\n\n```\nButtons = {\n Empty = 0,\n Select = 1, -- (RETURN)\n Ok = 2, -- (RETURN)\n Yes = 4, -- (RETURN)\n Back = 8, -- (ESC)\n Cancel = 16, -- (ESC)\n No = 32, -- (ESC)\n RetrySpace = 64, -- (SPACE)\n Restart = 128, -- (SPACE)\n Skip = 256, -- (SPACE)\n Quit = 512, -- (ESC)\n Adjust = 1024, -- (ARROWS)\n SpaceKey = 2048, -- (SPACE)\n Share = 4096, -- (SPACE)\n SignIn = 8192, -- (SPACE)\n Continue = 16384, -- (RETURN)\n AdjustLeftRight = 32768, -- (SCROLL L/R)\n AdjustUpDown = 65536, -- (SCROLL U/D)\n Overwrite = 131072, -- (SPACE)\n SocialClubSignup = 262144, -- (RETURN)\n Confirm = 524288, -- (RETURN)\n Queue = 1048576, -- (RETURN)\n RetryReturn = 2097152, -- (RETURN)\n BackEsc = 4194304, -- (ESC)\n SocialClub = 8388608, -- (RETURN)\n Spectate = 16777216, -- (SPACE)\n OkEsc = 33554432, -- (ESC)\n CancelTransfer = 67108864, -- (ESC)\n LoadingSpinner = 134217728,\n NoReturnToGTA = 268435456, -- (ESC)\n CancelEsc = 536870912, -- (ESC)\n}\n\nAlt = {\n Empty = 0,\n No = 1, -- (SPACE)\n Host = 2, -- (ESC)\n SearchForJob = 4, -- (RETURN)\n ReturnKey = 8, -- (TURN)\n Freemode = 16, -- (ESC)\n}\n```\n\n**Result of the example code:**\n![](https://i.imgur.com/Cw5GoGs.png)\n\n**Parameters**\n- `labelTitle`: Label of the alert's title.\n- `labelMsg`: Label of the alert's message.\n- `p2`: This is an enum, check the description for a list.\n- `p3`: This is an enum, check the description for a list.\n- `labelMsg2`: Label of another message line\n- `p5`: usually 0\n- `p6`: usually -1\n- `p7`: usually 0\n- `p8`: unknown label\n- `p9`: unknown label\n- `background`: Set to anything other than 0 or false (even any string) and it will draw a background. Setting it to 0 or false will draw no background.\n- `errorCode`: Error code, shown at the bottom left if set to value other than 0.\n\n```lua\nCitizen.CreateThread(function()\n AddTextEntry("FACES_WARNH2", "Nice title")\n AddTextEntry("QM_NO_0", "Cool message")\n AddTextEntry("QM_NO_3", "Cool message 2")\n while true do\n Citizen.Wait(0)\n DrawFrontendAlert("FACES_WARNH2", "QM_NO_0", 3, 3, "QM_NO_3", 2, -1, false, "FM_NXT_RAC", "QM_NO_1", true, 10)\n end\nend)\n``` SetWarningMessageWithHeader ```\nYou can only use text entries. No custom text. \nC# Example : \nFunction.Call(Hash._SET_WARNING_MESSAGE_2, "HUD_QUIT", "HUD_CGIGNORE", 2, "HUD_CGINVITE", 0, -1, 0, 0, 1); \nyou can recreate this easily with scaleforms \n--------------- \nFixed native name, from before nativedb restoration. \n```\n\n```\nNativeDB Added Parameter 10: Any p9\n``` SetWarningMessageWithHeaderAndSubstringFlags ```\nYou can only use text entries. No custom text. \n```\n\n```\nNativeDB Added Parameter 11: Any p10\n``` SetWarningMessageWithHeaderExtended Sets a warning message for one frame with header and upper buttons bit field that don't fit the standard 32 bit set.\n\n**Parameters**\n- `headerTextLabel`: Text label to set on the header/title.\n- `line1TextLabel`: Text label to set on the first line of the body..\n- `buttonsBitField`: Bit field of the button flags. See [`SET_WARNING_MESSAGE`](#\\_0x7B1776B3B53F8D74).\n- `buttonsBitFieldUpper`: Bit field of the upper button flags. See [`SET_WARNING_MESSAGE_WITH_HEADER_AND_SUBSTRING_FLAGS_EXTENDED`](#\\_0x15803FEC3B9A872B).\n- `line2TextLabel`: Text label to set on the second line of the body.\n- `addNumber`: If number should be inserted into `~1~` in the body.\n- `numberToAdd`: What number to insert into `~1~` in the body.\n- `firstSubstring`: First substring text label to insert into `~a~` in the body.\n- `secondSubstring`: Second substring text label to insert into `~a~` in the body.\n- `showBackground`: Bool indicating if the message should have a black background.\n- `errorCode`: Error number to show at the bottom of the message. `0` is the default. @@ -3539,11 +3619,11 @@ SetWeaponsNoAutoreload Disables the game's built-in auto-reloading.\n\n**Paramet SetWeaponsNoAutoswap Disables autoswapping to another weapon when the current weapon runs out of ammo.\n\n**Parameters**\n- `state`: On/Off SetWeatherCycleEntry \n\n**Parameters**\n- `index`: The index of the entry to set. Must be between 0 and 255\n- `typeName`: The name of the weather type for this cycle\n- `timeMult`: The relative duration of this cycle, which is multiplied by `msPerCycle` during ['APPLY_WEATHER_CYCLES'](#\\_0x3422291C). Must be between 1 and 255\n\n**Returns** Returns true if all parameters were valid, otherwise false. SetWeatherOwnedByNetwork Sets whether or not the weather should be owned by the network subsystem.\n\nTo be able to use [\\_SET_WEATHER_TYPE_TRANSITION](#\\_0x578C752848ECFA0C), this has to be set to false.\n\n**Parameters**\n- `network`: true to let the network control weather, false to not use network weather behavior. -SetWeatherTypeNow Immediately changes the game's weather to the specified type, which will then persist for one cycle before the game resumes its natural weather progression.\n\n**Note:** This native is not supported in networked sessions. Please refer to [`SET_OVERRIDE_WEATHER`](#\\_0xA43D5C6FE51ADBEF) or [`SET_WEATHER_TYPE_NOW_PERSIST`](#\\_0xED712CA327900C8A) if you want to override weather in networked sessions.\n\n```\nNativeDB Introduced: v323\n```\n\n**Weather Types:**\n\n* CLEAR\n* EXTRASUNNY\n* CLOUDS\n* OVERCAST\n* RAIN\n* CLEARING\n* THUNDER\n* SMOG\n* FOGGY\n* XMAS\n* SNOW\n* SNOWLIGHT\n* BLIZZARD\n* HALLOWEEN\n* NEUTRAL\n\n**Parameters**\n- `weatherType`: The weather type to set. This should be one of the predefined weather type strings. +SetWeatherTypeNow Immediately changes the game's weather to the specified type, which will then persist for one cycle before the game resumes its natural weather progression.\n\n**Note:** This native is not supported in networked sessions. Please refer to [`SET_OVERRIDE_WEATHER`](#\\_0xA43D5C6FE51ADBEF) or [`SET_WEATHER_TYPE_NOW_PERSIST`](#\\_0xED712CA327900C8A) if you want to override weather in networked sessions.\n\n```\nNativeDB Introduced: v323\n```\n\n**Weather Types:**\n\n* CLEAR\n* EXTRASUNNY\n* CLOUDS\n* OVERCAST\n* RAIN\n* CLEARING\n* THUNDER\n* SMOG\n* FOGGY\n* XMAS\n* SNOW\n* SNOWLIGHT\n* BLIZZARD\n* HALLOWEEN\n* NEUTRAL\n* RAIN_HALLOWEEN\n* SNOW_HALLOWEEN\n\n**Parameters**\n- `weatherType`: The weather type to set. This should be one of the predefined weather type strings. SetWeatherTypeNowPersist Refer to [`SET_WEATHER_TYPE_NOW`](#\\_0x29B487C359E19889) for weather types. -SetWeatherTypeOvertimePersist Refer to [`SET_WEATHER_TYPE_NOW_PERSIST`](#\\_0xED712CA327900C8A) for weather types.\n\n**Parameters**\n- `weatherType`: The weather type to override to.\n- `time`: A float on how long to take to transition (in seconds). -SetWeatherTypePersist Sets the current weather type to persist indefinitely until changed.\n\n**Note:** This native is not supported in networked sessions. Please refer to [`SET_OVERRIDE_WEATHER`](#\\_0xA43D5C6FE51ADBEF) or [`SET_WEATHER_TYPE_NOW_PERSIST`](#\\_0xED712CA327900C8A) if you want to override weather in networked sessions.\n\n```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `weatherType`: The weather type to be set as persistent. Refer to [`SET_WEATHER_TYPE_NOW_PERSIST`](#\\_0xED712CA327900C8A) for a list of weather type strings. -SetWeatherTypeTransition Refer to [`SET_WEATHER_TYPE_NOW_PERSIST`](#\\_0xED712CA327900C8A) for weather types.\n\n```\nMixes two weather types. If percentWeather2 is set to 0.0f, then the weather will be entirely of weatherType1, if it is set to 1.0f it will be entirely of weatherType2. If it's set somewhere in between, there will be a mixture of weather behaviors. To test, try this in the RPH console, and change the float to different values between 0 and 1: \nexecute "NativeFunction.Natives.x578C752848ECFA0C(Game.GetHashKey(""RAIN""), Game.GetHashKey(""SMOG""), 0.50f); \n``` +SetWeatherTypeOvertimePersist Refer to [`SET_WEATHER_TYPE_NOW`](#\\_0x29B487C359E19889) for weather types.\n\n**Parameters**\n- `weatherType`: The weather type to override to.\n- `time`: A float on how long to take to transition (in seconds). +SetWeatherTypePersist Sets the current weather type to persist indefinitely until changed.\n\n**Note:** This native is not supported in networked sessions. Please refer to [`SET_OVERRIDE_WEATHER`](#\\_0xA43D5C6FE51ADBEF) or [`SET_WEATHER_TYPE_NOW_PERSIST`](#\\_0xED712CA327900C8A) if you want to override weather in networked sessions.\n\n```\nNativeDB Introduced: v323\n```\n\n**Parameters**\n- `weatherType`: The weather type to be set as persistent. Refer to [`SET_WEATHER_TYPE_NOW`](#\\_0x29B487C359E19889) for a list of weather type strings. +SetWeatherTypeTransition Refer to [`SET_WEATHER_TYPE_NOW`](#\\_0x29B487C359E19889) for weather types.\n\n```\nMixes two weather types. If percentWeather2 is set to 0.0f, then the weather will be entirely of weatherType1, if it is set to 1.0f it will be entirely of weatherType2. If it's set somewhere in between, there will be a mixture of weather behaviors. To test, try this in the RPH console, and change the float to different values between 0 and 1: \nexecute "NativeFunction.Natives.x578C752848ECFA0C(Game.GetHashKey(""RAIN""), Game.GetHashKey(""SMOG""), 0.50f); \n``` SetWetClothPinRadiusScale Modifies the radius scale used in the simulation of wet cloth physics.\nThis affects how cloth behaves when wet, changing how it sticks or reacts to movement.\n\n**Parameters**\n- `scale`: A value that controls the wet cloth radius scale, default: 0.3, maximum: 1.0(used for dry cloth by default), lower values increase the adhesion effect of wet cloth, making it cling more tightly to the surface.\n\n```lua\nSetWetClothPinRadiusScale(1.0)\n``` SetWind Sets the the raw wind speed value. The wind speed will stay persistent until it is reset (see examples).\n\n**Parameters**\n- `speed`: The wind speed (clamped to between 0.0 and 1.0)\n\n```lua\n-- Stops all and any wind\nSetWind(0)\n\n-- Sets the wind to 6 m/s\nSetWind(0.5)\n\n-- Allows the game dynamically change the wind again\nSetWind(-1)\n``` SetWindDirection Sets the wind direction. The wind direction will stay persistent until it is reset (see examples).\n\n**Parameters**\n- `direction`: the [wind direction](https://en.wikipedia.org/wiki/Wind_direction) in radians\n\n```lua\n-- 180 degrees, wind will blow from the south\nSetWindDirection(math.rad(180.0))\n\n-- Allows the game to dynamically change the wind direction again\nSetWindDirection(-1)\n``` @@ -3552,9 +3632,9 @@ Settimera Sets the value for the timer A in milliseconds\n\n**Parameters**\n- `v Settimerb Sets the value for the timer B in milliseconds\n\n**Parameters**\n- `value`: In milliseconds. SetupShopPedApparelQueryTu ```\ncharacter is 0 for Michael, 1 for Franklin, 2 for Trevor, 3 for freemode male, and 4 for freemode female.\ncomponentId is between 0 and 11 and corresponds to the usual component slots.\np1 could be the outfit number; unsure.\np2 is usually -1; unknown function.\np3 appears to be for selecting between clothes and props; false is used with components/clothes, true is used with props.\np4 is usually -1; unknown function.\ncomponentId is -1 when p3 is true in decompiled scripts.\n``` SetupShopPedOutfitQuery ```\ncharacters\n0: Michael\n1: Franklin\n2: Trevor\n3: MPMale\n4: MPFemale\n``` -ShakeCam ```\nPossible shake types (updated b617d): \nDEATH_FAIL_IN_EFFECT_SHAKE \nDRUNK_SHAKE \nFAMILY5_DRUG_TRIP_SHAKE \nHAND_SHAKE \nJOLT_SHAKE \nLARGE_EXPLOSION_SHAKE \nMEDIUM_EXPLOSION_SHAKE \nSMALL_EXPLOSION_SHAKE \nROAD_VIBRATION_SHAKE \nSKY_DIVING_SHAKE \nVIBRATE_SHAKE \n``` -ShakeCinematicCam ```\np0 argument found in the b617d scripts: "DRUNK_SHAKE" \n``` -ShakeGameplayCam ```\nPossible shake types (updated b617d): \nDEATH_FAIL_IN_EFFECT_SHAKE \nDRUNK_SHAKE \nFAMILY5_DRUG_TRIP_SHAKE \nHAND_SHAKE \nJOLT_SHAKE \nLARGE_EXPLOSION_SHAKE \nMEDIUM_EXPLOSION_SHAKE \nSMALL_EXPLOSION_SHAKE \nROAD_VIBRATION_SHAKE \nSKY_DIVING_SHAKE \nVIBRATE_SHAKE \n``` +ShakeCam See [`SHAKE_GAMEPLAY_CAM`](#\\_0xFD55E49555E017CF) for a full list of camera shakes.\n\n**Parameters**\n- `cam`: The camera handle.\n- `shakeName`: The name of the shake.\n- `intensity`: The intensity of the shake. +ShakeCinematicCam See [`SHAKE_GAMEPLAY_CAM`](#\\_0xFD55E49555E017CF) for a full list of camera shakes.\n\n**Parameters**\n- `shakeName`: The name of the shake.\n- `intensity`: The intensity of the shake. +ShakeGameplayCam Shakes the gameplay cam with the specified shake name and intensity.\n\nList of camera shake names:\n\n```\nASSAULT_RIFLE_RECOIL_SHAKE\nBOAT_WATER_ENTRY_SHAKE\nCAMERA_OPERATOR_SHAKE_X\nCAMERA_OPERATOR_SHAKE_Z\nCAMERA_OPERATOR_TURBULENCE_SHAKE\nCARBINE_RIFLE_ACCURACY_OFFSET_SHAKE\nCARBINE_RIFLE_RECOIL_SHAKE\nCINEMATIC_SHOOTING_RUN_SHAKE\nDAMPED_HAND_SHAKE\nDEATH_FAIL_IN_EFFECT_SHAKE\nDEATH_FAIL_OUT_EFFECT_SHAKE\nDEFAULT_DEPLOY_PARACHUTE_SHAKE\nDEFAULT_FIRST_PERSON_RECOIL_SHAKE\nDEFAULT_KILL_EFFECT_SHAKE\nDEFAULT_THIRD_PERSON_ACCURACY_OFFSET_SHAKE\nDEFAULT_THIRD_PERSON_RECOIL_SHAKE\nDRUNK_SHAKE\nFAMILY5_DRUG_TRIP_SHAKE\nFIRST_PERSON_AIM_SHAKE\nFIRST_PERSON_DEPLOY_PARACHUTE_SHAKE\nFOLLOW_RUN_SHAKE\nFOLLOW_SWIM_SHAKE\nFPS_ASSAULT_RIFLE_RECOIL_SHAKE\nFPS_BOLT_RELOAD_SHAKE\nFPS_BULLET_HIT_SHAKE\nFPS_DEATH_SHAKE\nFPS_GRENADE_LAUNCHER_RECOIL_SHAKE\nFPS_MAG_DROP_SHAKE\nFPS_MAG_RELOAD_SHAKE\nFPS_MELEE_HIT_SHAKE\nFPS_MG_RECOIL_SHAKE\nFPS_MINIGUN_RECOIL_SHAKE\nFPS_PISTOL_RECOIL_SHAKE\nFPS_RPG_RECOIL_SHAKE\nFPS_SHOTGUN_PUMP_SHAKE\nFPS_SHOTGUN_RECOIL_SHAKE\nFPS_SMG_RECOIL_SHAKE\nFPS_STEERING_WHEEL_HIT_SHAKE\nFPS_TANK_RECOIL_SHAKE\nFPS_THROW_SHAKE\nFPS_VEHICLE_HIT_SHAKE\nFPS_ZOOM_IN_SHAKE\nGAMEPLAY_EXPLOSION_SHAKE\nGRENADE_EXPLOSION_SHAKE\nGRENADE_LAUNCHER_RECOIL_SHAKE\nHAND_SHAKE\nHAND_SHAKE_ROLL\nHIGH_DIVE_SHAKE\nHIGH_FALL_SHAKE\nHIGH_SPEED_BOAT_SHAKE\nHIGH_SPEED_POV_SHAKE\nHIGH_SPEED_VEHICLE_SHAKE\nHIGH_SPEED_VIBRATION_POV_SHAKE\nIDLE_HAND_SHAKE\nJOLT_SHAKE\nKILL_SHOT_SHAKE\nLARGE_EXPLOSION_SHAKE\nLOW_ORBIT_HIGH_SPEED_CAMERA_SHAKE\nLOW_ORBIT_INACCURACY_CAMERA_SHAKE\nMEDIUM_EXPLOSION_SHAKE\nMG_RECOIL_SHAKE\nMINIGUN_RECOIL_SHAKE\nPARACHUTING_SHAKE\nPISTOL_RECOIL_SHAKE\nPLANE_PART_SPEED_SHAKE\nPOV_IDLE_SHAKE\nREPLAY_DRUNK_SHAKE\nREPLAY_EXPLOSION_SHAKE\nREPLAY_HAND_SHAKE\nREPLAY_HIGH_SPEED_VEHICLE_SHAKE\nREPLAY_SKY_DIVING_SHAKE\nROAD_VIBRATION_SHAKE\nRPG_RECOIL_SHAKE\nSHOTGUN_RECOIL_SHAKE\nSKY_DIVING_SHAKE\nSMALL_EXPLOSION_SHAKE\nSMG_RECOIL_SHAKE\nSTUNT_HAND_SHAKE\nSWITCH_HAND_SHAKE\nTANK_RECOIL_SHAKE\nVEH_IMPACT_HEADING_SHAKE\nVEH_IMPACT_PITCH_HEADING_SHAKE_FPS\nVEH_IMPACT_PITCH_SHAKE\nVIBRATE_SHAKE\nWATER_BOB_SHAKE\nWOBBLY_SHAKE\n```\n\n**Parameters**\n- `shakeName`: The name of the shake.\n- `intensity`: The intensity of the shake. ShakeScriptGlobal ```\nCAM::SHAKE_SCRIPT_GLOBAL("HAND_SHAKE", 0.2);\n``` ShiftLeft Left bit shifts a value.\nIt is advised you use the `<<` operator instead of this native. It does the same and is faster. ShiftRight Right bit shifts a value.\nIt is advised you use the `>>` operator instead of this native. It does the same and is faster. @@ -3563,22 +3643,24 @@ ShootSingleBulletBetweenCoordsIgnoreEntity ```\nentity - entity to ignore \n``` ShootSingleBulletBetweenCoordsIgnoreEntityNew ```\nNativeDB Added Parameter 19: Any p18\nNativeDB Added Parameter 20: Any p19\nNativeDB Added Parameter 21: Any p20\n``` ShouldUseMetricMeasurements Returns true if the game is using the metric measurement system (profile setting 227), false if imperial is used.\n\n**Returns** Returns true if the game is using the metric measurement system, false if imperial is used.\n\n```lua\nif (ShouldUseMetricMeasurements()) then\n print("Distance to finish line: 8,04672 km.")\nelse\n print("Distance to finish line: 5 mi.")\nend\n``` ShowContactInstructionalButton Controls the visibility of the "Contact" instructional buttons on the map screen.\n\n```\nNativeDB Introduced: 2545\n```\n\n**Parameters**\n- `toggle`: Set to `true` to show the instructional buttons, or `false` to hide them. -ShowCrewIndicatorOnBlip Enables or disables the blue half circle ![](https://i.imgur.com/iZes9Ec.png) around the specified blip on the left side of the blip. This is used to indicate that the player is in your crew in GTA:O. Color is changeable by using [`SET_BLIP_SECONDARY_COLOUR`](#\\_0x14892474891E09EB).\n\nTo toggle the right side of the circle use: [`SHOW_FRIEND_INDICATOR_ON_BLIP`](#\\_0x23C3EB807312F01A).\n\nExample code result:\n![](https://i.imgur.com/iZ9tNWl.png)\n\n**Parameters**\n- `blip`: The blip to toggle the half blue circle around the blip on.\n- `toggle`: Enables or disables the half blue circle around the blip (on the left side).\n\n```lua\nlocal player = 1 -- make sure this is an actual player, dont just use this example code!\nlocal blip = GetBlipFromEntity(GetPlayerPed(player))\n\n-- Toggle the crew display.\nShowCrewIndicatorOnBlip(blip, true)\n\n-- Set the crew circle color.\n-- hud color 18 seems to be the closest color to the green crew color from GTA:O.\nSetBlipSecondaryColour(blip, GetHudColour(18))\n-- Result: https://i.imgur.com/iZ9tNWl.png\n``` -ShowFriendIndicatorOnBlip Highlights a blip by a half cyan circle on the right side of the blip. ![](https://i.imgur.com/FrV9M4e.png) Indicating that that player is a friend (in GTA:O). This color can not be changed.\n\nTo toggle the left side (crew member indicator) of the half circle around the blip, use: [`SHOW_CREW_INDICATOR_ON_BLIP`](#\\_0xDCFB5D4DB8BF367E).\n\n**Parameters**\n- `blip`: The blip to toggle the half circle on.\n- `toggle`: Enables or disables the half circle around the blip (on the right side of the blip).\n\n```lua\nlocal player = 1 -- make sure this is an actual player, dont just use this example code!\nlocal blip = GetBlipFromEntity(GetPlayerPed(player))\n\n-- Toggle the friend outline indicator on the blip.\nShowFriendIndicatorOnBlip(blip, true)\n``` -ShowHasCompletedIndicatorOnBlip ```\nAdds a orange checkmark on top of a given blip handle: https://imgur.com/a/aw5OTMF\n_SHOW_FRIEND_INDICATOR_ON_BLIP* - _SHOW_HEADING_INDICATOR_ON_BLIP*\n```\n\n```\nNativeDB Introduced: v2699\n``` +ShowCrewIndicatorOnBlip Enables or disables the blue half circle around the specified blip on the left side of the blip. This is used to indicate that the player is in your crew in GTA:O. Color is changeable by using [`SET_BLIP_SECONDARY_COLOUR`](#\\_0x14892474891E09EB).\n\nPreview:\n\n![](https://i.imgur.com/JgRMbHb.png)\n\nTo toggle the right side of the circle use: [`SHOW_FRIEND_INDICATOR_ON_BLIP`](#\\_0x23C3EB807312F01A).\n\n**Parameters**\n- `blip`: The blip to toggle the half blue circle around the blip on.\n- `toggle`: Enables or disables the half blue circle around the blip (on the left side).\n\n```lua\nlocal player = 1 -- make sure this is an actual player, dont just use this example code!\nlocal blip = GetBlipFromEntity(GetPlayerPed(player))\n\n-- Toggle the crew display.\nShowCrewIndicatorOnBlip(blip, true)\n\n-- Set the crew circle color.\n-- hud color 18 seems to be the closest color to the green crew color from GTA:O.\nSetBlipSecondaryColour(blip, GetHudColour(18))\n\n\n-- result: https://i.imgur.com/iZ9tNWl.png\n``` +ShowFriendIndicatorOnBlip Highlights a blip by a half cyan circle on the right side of the blip, indicating that that player is a friend (in GTA:O). This color can not be changed.\n\nPreview:\n\n![](https://i.imgur.com/v9FsjYl.png)\n\nTo toggle the left side (crew member indicator) of the half circle around the blip, use: [`SHOW_CREW_INDICATOR_ON_BLIP`](#\\_0xDCFB5D4DB8BF367E).\n\n**Parameters**\n- `blip`: The blip to toggle the half circle on.\n- `toggle`: Enables or disables the half circle around the blip (on the right side of the blip).\n\n```lua\nlocal player = 1 -- make sure this is an actual player, dont just use this example code!\nlocal blip = GetBlipFromEntity(GetPlayerPed(player))\n\n-- Toggle the friend outline indicator on the blip.\nShowFriendIndicatorOnBlip(blip, true)\n``` +ShowHasCompletedIndicatorOnBlip Adds a orange checkmark on top of a given blip handle.\n\nPreview:\n\n![](https://i.imgur.com/KG9k6Fk.png)\n\n```\n_SHOW_FRIEND_INDICATOR_ON_BLIP* - _SHOW_HEADING_INDICATOR_ON_BLIP*\n```\n\n```\nNativeDB Introduced: v2699\n``` ShowHeadingIndicatorOnBlip ```\nAdds the GTA: Online player heading indicator to a blip. \n``` ShowHudComponentThisFrame This function shows various HUD (Heads-up Display) components.\n\nListed below are the integers and the corresponding HUD component.\n\n* 1 : WANTED_STARS\n* 2 : WEAPON_ICON\n* 3 : CASH\n* 4 : MP_CASH\n* 5 : MP_MESSAGE\n* 6 : VEHICLE_NAME\n* 7 : AREA_NAME\n* 8 : VEHICLE_CLASS\n* 9 : STREET_NAME\n* 10 : HELP_TEXT\n* 11 : FLOATING_HELP_TEXT\\_1\n* 12 : FLOATING_HELP_TEXT\\_2\n* 13 : CASH_CHANGE\n* 14 : RETICLE\n* 15 : SUBTITLE_TEXT\n* 16 : RADIO_STATIONS\n* 17 : SAVING_GAME\n* 18 : GAME_STREAM\n* 19 : WEAPON_WHEEL\n* 20 : WEAPON_WHEEL_STATS\n* 21 : HUD_COMPONENTS\n* 22 : HUD_WEAPONS\n\nThese integers also work for the [`HIDE_HUD_COMPONENT_THIS_FRAME`](#\\_0x6806C51AD12B83B8) native, but instead hides the HUD component. ShowOutlineIndicatorOnBlip Toggles a cyan outline around the blip.\n\nColor can be changed with [`SET_BLIP_SECONDARY_COLOUR`](#\\_0x14892474891E09EB). Enabling this circle will override the "crew" and "friend" half-circles (see [`SHOW_CREW_INDICATOR_ON_BLIP`](#\\_0xDCFB5D4DB8BF367E) and [`SHOW_FRIEND_INDICATOR_ON_BLIP`](#\\_0x23C3EB807312F01A)).\n\n**Parameters**\n- `blip`: The blip to toggle the outline on.\n- `toggle`: Enables or disables the outline. +ShowPurchaseInstructionalButton ```\nNativeDB Introduced: v3407\n``` ShowScriptedHudComponentThisFrame SHOW_\\*\n\n```\nNativeDB Introduced: v1734\n``` ShowTickOnBlip ```\nAdds a green checkmark on top of a blip. \n``` ShutdownAndLaunchSinglePlayerGame ```\nStarts a new singleplayer game (at the prologue). \n``` ShutdownAndLoadMostRecentSave Disconnects you from the session, and starts loading single player, however you still remain connected to the server (only if you're the host, if you're not then you also (most likely) get disconnected from the server) and other players will not be able to join until you exit the game.\n\nIf you're already in SP then it'll re-load singleplayer.\n\nYou might need to DoScreenFadeIn and ShutdownLoadingScreen otherwise you probably won't end up loading into SP at all.\n\nSomewhat related note: opening the pause menu after loading into this 'singleplayer' mode crashes the game.\n\n**Returns** always seems to be 1 +ShutdownLoadingScreen Shuts down the loading screen and switches to normal game view. Should only be used by [spawnmanager](https://docs.fivem.net/docs/resources/spawnmanager/) or similar resources after loading and spawning the player ped. If no script does this, the game is stuck in the infamous bridge screen with the "Awaiting scripts" text and loading circle at the bottom right corner.\n\n![](https://i.imgur.com/WULopNH.jpeg)\n\n```lua\nShutdownLoadingScreen()\n``` ShutdownLoadingScreenNui Shuts down the `loadingScreen` NUI frame, similarly to `SHUTDOWN_LOADING_SCREEN`. SimulatePlayerInputGait This is to make the player walk without accepting input.\n\nCall this native every frame so you can control the direction of your ped.\n\n**Parameters**\n- `player`: The player to target (always your local player id).\n- `amount`: For game pads, using anything less than 1.0 will make it partially press analog controls (like sticks/triggers).\n- `gaitType`: Value in increments of 100's. 2000, 500, 300, 200, etc. Set to -1 if you want your ped to walk forever.\n- `rotationSpeed`: Determines the counterclockwise rotation angle when walking.\n- `p4`: Always true\n- `p5`: Always false Sin Returns the sine of the given number.\n\n**Parameters**\n- `value`: The number of degrees (in degrees, not radians)\n\n**Returns** The sine of the given number\n\n```lua\n-- Get the heading\nlocal heading = GetEntityHeading(PlayerPedId())\nlocal sin = Sin(heading)\n\n-- equivalent in lua\nlocal sinLua = math.sin(heading * (math.pi / 180))\n``` SkipTimeInPlaybackRecordedVehicle ```\nSET_TIME_POSITION_IN_RECORDING can be emulated by: desired_time - GET_TIME_POSITION_IN_RECORDING(vehicle)\n``` SlerpNearQuaternion This native always come right before SET_ENTITY_QUATERNION where its final 4 parameters are SLERP_NEAR_QUATERNION p9 to p12\n\n**Parameters**\n- `t`: acceleration differenzial (am_rollercoaster.c func\\_134)\n- `x`: rotation parameter (maybe X axys)\n- `y`: rotation parameter (maybe X axys)\n- `z`: rotation parameter (maybe X axys)\n- `w`: rotation parameter (maybe X axys)\n- `x1`: rotation parameter (maybe Y axys)\n- `y1`: rotation parameter (maybe Y axys)\n- `z1`: rotation parameter (maybe Y axys)\n- `w1`: rotation parameter (maybe Y axys)\n- `outX`: output value calculated (X)\n- `outY`: output value calculated (Y)\n- `outZ`: output value calculated (Z)\n- `outW`: output value calculated (W) -SlideObject ```\nReturns true if the object has finished moving. \nIf false, moves the object towards the specified X, Y and Z coordinates with the specified X, Y and Z speed. \nSee also: https://gtagmodding.com/opcode-database/opcode/034E/\nHas to be looped until it returns true. \n``` +SlideObject ```\nReturns true if the object has finished moving. \nIf false, moves the object towards the specified X, Y and Z coordinates with the specified X, Y and Z speed. \nSee also: https://gtag.sannybuilder.com/opcode-database/opcode/034E/\nHas to be looped until it returns true. \n``` SmashVehicleWindow Smashes a vehicles window. See eWindowId declared in [`IS_VEHICLE_WINDOW_INTACT`](#\\_0x46E571A0E20D01F1).\n\n**Parameters**\n- `vehicle`: The vehicle id.\n- `windowIndex`: Windows to smash index. SoundVehicleHornThisFrame ```\nSET_*\n``` SpecialAbilityActivate ```\nNativeDB Added Parameter 2: Any p1\n``` @@ -3606,11 +3688,11 @@ StartCutsceneAtCoords Similar to [`SET_CUTSCENE_ORIGIN`](#\\_0xB812B3FD1C01CF27) StartExpensiveSynchronousShapeTestLosProbe Does the same as [START_SHAPE_TEST_LOS_PROBE](#\\_0x7EE9F5D83DD4F90E), except blocking until the shape test completes.\n\nUse [START_SHAPE_TEST_LOS_PROBE](#\\_0x7EE9F5D83DD4F90E) instead. Literally. Rockstar named this correctly: it's expensive, and it's synchronous.\n\n**Parameters**\n- `x1`: Starting X coordinate.\n- `y1`: Starting Y coordinate.\n- `z1`: Starting Z coordinate.\n- `x2`: Ending X coordinate.\n- `y2`: Ending Y coordinate.\n- `z2`: Ending Z coordinate.\n- `flags`: See [START_SHAPE_TEST_LOS_PROBE](#\\_0x7EE9F5D83DD4F90E).\n- `entity`: An entity to ignore, or 0.\n- `p8`: A bit mask with bits 1, 2 and/or 4, relating to collider types. 4 should usually be used.\n\n**Returns** A shape test handle. StartFindExternalKvp Equivalent of [START_FIND_KVP](#\\_0xDD379006), but for another resource than the current one.\n\n**Parameters**\n- `resourceName`: The resource to try finding the key/values for\n- `prefix`: A prefix match\n\n**Returns** A KVP find handle to use with [FIND_KVP](#\\_0xBD7BEBC5) and close with [END_FIND_KVP](#\\_0xB3210203)\n\n```lua\nlocal kvpHandle = StartFindExternalKvp('drugs', 'mollis:')\n\nif kvpHandle ~= -1 then \n local key\n \n repeat\n key = FindKvp(kvpHandle)\n\n if key then\n print(('%s: %s'):format(key, GetResourceKvpString(key)))\n end\n until not key\n\n EndFindKvp(kvpHandle)\nelse\n print('No KVPs found')\nend\n``` StartFindKvp \n\n**Parameters**\n- `prefix`: A prefix match\n\n**Returns** A KVP find handle to use with [FIND_KVP](#\\_0xBD7BEBC5) and close with [END_FIND_KVP](#\\_0xB3210203)\n\n```lua\nSetResourceKvp('mollis:2', 'should be taken with alcohol')\nSetResourceKvp('mollis:1', 'vesuvius citrate')\nSetResourceKvp('mollis:manufacturer', 'Betta Pharmaceuticals')\n\nlocal kvpHandle = StartFindKvp('mollis:')\n\nif kvpHandle ~= -1 then \n local key\n \n repeat\n key = FindKvp(kvpHandle)\n\n if key then\n print(('%s: %s'):format(key, GetResourceKvpString(key)))\n end\n until not key\n\n EndFindKvp(kvpHandle)\nelse\n print('No KVPs found')\nend\n``` -StartGpsCustomRoute Starts a new GPS custom-route, allowing you to plot lines on the map.\nLines are drawn directly between points.\nThe GPS custom route works like the GPS multi route, except it does not follow roads.\n\n**Example result:**\n\n![](https://i.imgur.com/BDm5pzt.png)\n\n**Parameters**\n- `hudColor`: The HUD color of the GPS path.\n- `displayOnFoot`: Draws the path regardless if the player is in a vehicle or not.\n- `followPlayer`: Draw the path partially between the previous and next point based on the players position between them. When false, the GPS appears to not disappear after the last leg is completed.\n\n```lua\n-- Clear any old route first\nClearGpsCustomRoute()\n\n-- Start a new route\nStartGpsCustomRoute(6, false, true)\n\n-- Add the points\nAddPointToGpsCustomRoute(1638.2155761719, -2344.685546875, 95.610511779785)\nAddPointToGpsCustomRoute(1653.0858154297, -2068.8654785156, 96.737915039063)\nAddPointToGpsCustomRoute(1451.9561767578, -2113.5344238281, 56.082130432129)\nAddPointToGpsCustomRoute(1540.6088867188, -2514.4519042969, 58.842422485352)\nAddPointToGpsCustomRoute(1638.2155761719, -2344.685546875, 95.610511779785)\n\n-- Set the route to render\nSetGpsCustomRouteRender(true, 16, 16)\n``` -StartGpsMultiRoute Starts a new GPS multi-route, allowing you to create custom GPS paths.\nGPS functions like the waypoint, except it can contain multiple points it's forced to go through.\nOnce the player has passed a point, the GPS will no longer force its path through it.\n\nWorks independently from the player-placed waypoint and blip routes.\n\n**Example result:**\n\n![](https://i.imgur.com/ZZHQatX.png)\n\n**Parameters**\n- `hudColor`: The HUD color of the GPS path.\n- `routeFromPlayer`: Makes the GPS draw a path from the player to the next point, rather than the original path from the previous point.\n- `displayOnFoot`: Draws the GPS path regardless if the player is in a vehicle or not.\n\n```lua\n-- Clear any old route first\nClearGpsMultiRoute()\n\n-- Start a new route\nStartGpsMultiRoute(6, false, true)\n\n-- Add the points\nAddPointToGpsMultiRoute(1638.2155761719, -2344.685546875, 95.610511779785)\nAddPointToGpsMultiRoute(1653.0858154297, -2068.8654785156, 96.737915039063)\nAddPointToGpsMultiRoute(1451.9561767578, -2113.5344238281, 56.082130432129)\nAddPointToGpsMultiRoute(1540.6088867188, -2514.4519042969, 58.842422485352)\nAddPointToGpsMultiRoute(1638.2155761719, -2344.685546875, 95.610511779785)\n\n-- Set the route to render\nSetGpsMultiRouteRender(true)\n``` +StartGpsCustomRoute Starts a new GPS custom-route, allowing you to plot lines on the map.\nLines are drawn directly between points.\nThe GPS custom route works like the GPS multi route, except it does not follow roads.\n\n**Example result:**\n\n![](https://i.imgur.com/DqmZyp2.png)\n\n**Parameters**\n- `hudColor`: The HUD color of the GPS path.\n- `displayOnFoot`: Draws the path regardless if the player is in a vehicle or not.\n- `followPlayer`: Draw the path partially between the previous and next point based on the players position between them. When false, the GPS appears to not disappear after the last leg is completed.\n\n```lua\n-- Clear any old route first\nClearGpsCustomRoute()\n\n-- Start a new route\nStartGpsCustomRoute(6, false, true)\n\n-- Add the points\nAddPointToGpsCustomRoute(1638.2155761719, -2344.685546875, 95.610511779785)\nAddPointToGpsCustomRoute(1653.0858154297, -2068.8654785156, 96.737915039063)\nAddPointToGpsCustomRoute(1451.9561767578, -2113.5344238281, 56.082130432129)\nAddPointToGpsCustomRoute(1540.6088867188, -2514.4519042969, 58.842422485352)\nAddPointToGpsCustomRoute(1638.2155761719, -2344.685546875, 95.610511779785)\n\n-- Set the route to render\nSetGpsCustomRouteRender(true, 16, 16)\n``` +StartGpsMultiRoute Starts a new GPS multi-route, allowing you to create custom GPS paths.\nGPS functions like the waypoint, except it can contain multiple points it's forced to go through.\nOnce the player has passed a point, the GPS will no longer force its path through it.\n\nWorks independently from the player-placed waypoint and blip routes.\n\n**Example result:**\n\n![](https://i.imgur.com/xIuEhwA.png)\n\n**Parameters**\n- `hudColor`: The HUD color of the GPS path.\n- `routeFromPlayer`: Makes the GPS draw a path from the player to the next point, rather than the original path from the previous point.\n- `displayOnFoot`: Draws the GPS path regardless if the player is in a vehicle or not.\n\n```lua\n-- Clear any old route first\nClearGpsMultiRoute()\n\n-- Start a new route\nStartGpsMultiRoute(6, false, true)\n\n-- Add the points\nAddPointToGpsMultiRoute(1638.2155761719, -2344.685546875, 95.610511779785)\nAddPointToGpsMultiRoute(1653.0858154297, -2068.8654785156, 96.737915039063)\nAddPointToGpsMultiRoute(1451.9561767578, -2113.5344238281, 56.082130432129)\nAddPointToGpsMultiRoute(1540.6088867188, -2514.4519042969, 58.842422485352)\nAddPointToGpsMultiRoute(1638.2155761719, -2344.685546875, 95.610511779785)\n\n-- Set the route to render\nSetGpsMultiRouteRender(true)\n``` StartNetworkedParticleFxLoopedOnEntity ```\nnetwork fx \n```\n\n```\nNativeDB Added Parameter 13: Any p12\nNativeDB Added Parameter 14: Any p13\nNativeDB Added Parameter 15: Any p14\nNativeDB Added Parameter 16: Any p15\n``` StartNetworkedParticleFxLoopedOnEntityBone ```\nnetwork fx \n```\n\n```\nNativeDB Added Parameter 14: Any p13\nNativeDB Added Parameter 15: Any p14\nNativeDB Added Parameter 16: Any p15\nNativeDB Added Parameter 17: Any p16\n``` -StartNetworkedParticleFxNonLoopedAtCoord NOTE: the [USE_PARTICLE_FX_ASSET](#\\_0x6C38AF3693A69A91) needs to be called before EVERY StartNetworkedParticleFxNonLoopedAtCoord(....) call!\n\nList with lots of particle effects: https://vespura.com/fivem/particle-list/\n\nNote: Not all particles on this list are for non looped and vice versa, neither are all of them suited/meant to have SetParticleFxNonLoopedColour(....) called on them.\n\n```\nNativeDB Added Parameter 12: BOOL p11\n```\n\n```lua\n-- If the PtfxAsset hasn't been loaded yet, you'll need to load it first\nif not HasNamedPtfxAssetLoaded("scr_indep_fireworks") then\n RequestNamedPtfxAsset("scr_indep_fireworks")\n while not HasNamedPtfxAssetLoaded("scr_indep_fireworks") do\n Wait(10)\n end\nend\n\nlocal CurrentPlayerCoords = GetEntityCoords(GetPlayerPed(-1))\n\nUseParticleFxAssetNextCall("scr_indep_fireworks") -- Prepare the Particle FX for the next upcomming Particle FX call\nSetParticleFxNonLoopedColour(1.0, 0.0, 0.0) -- Setting the color to Red (R, G, B)\nStartNetworkedParticleFxNonLoopedAtCoord("scr_indep_firework_burst_spawn", CurrentPlayerCoords, 0.0, 0.0, 0.0, 1.0, false, false, false, false) -- Start the animation itself\n\nRemoveNamedPtfxAsset("scr_indep_fireworks") -- Clean up\n``` +StartNetworkedParticleFxNonLoopedAtCoord NOTE: the [USE_PARTICLE_FX_ASSET](#\\_0x6C38AF3693A69A91) needs to be called before EVERY StartNetworkedParticleFxNonLoopedAtCoord(....) call!\n\nList with lots of particle effects: https://gist.githubusercontent.com/alexguirre/af70f0122957f005a5c12bef2618a786/raw/899e93c5611ba58138c56873bb6f56664a776af4/Particles%2520Effects%2520Dump.txt\n\nNote: Not all particles on this list are for non looped and vice versa, neither are all of them suited/meant to have SetParticleFxNonLoopedColour(....) called on them.\n\n```\nNativeDB Added Parameter 12: BOOL p11\n```\n\n```lua\n-- If the PtfxAsset hasn't been loaded yet, you'll need to load it first\nif not HasNamedPtfxAssetLoaded("scr_indep_fireworks") then\n RequestNamedPtfxAsset("scr_indep_fireworks")\n while not HasNamedPtfxAssetLoaded("scr_indep_fireworks") do\n Wait(10)\n end\nend\n\nlocal CurrentPlayerCoords = GetEntityCoords(GetPlayerPed(-1))\n\nUseParticleFxAssetNextCall("scr_indep_fireworks") -- Prepare the Particle FX for the next upcomming Particle FX call\nSetParticleFxNonLoopedColour(1.0, 0.0, 0.0) -- Setting the color to Red (R, G, B)\nStartNetworkedParticleFxNonLoopedAtCoord("scr_indep_firework_burst_spawn", CurrentPlayerCoords, 0.0, 0.0, 0.0, 1.0, false, false, false, false) -- Start the animation itself\n\nRemoveNamedPtfxAsset("scr_indep_fireworks") -- Clean up\n``` StartNetworkedParticleFxNonLoopedOnEntityBone ```\nNativeDB Introduced: v2189\n``` StartNewScript ```\nExamples:\n g_384A = SYSTEM::START_NEW_SCRIPT("cellphone_flashhand", 1424);\n l_10D = SYSTEM::START_NEW_SCRIPT("taxiService", 1828);\n SYSTEM::START_NEW_SCRIPT("AM_MP_YACHT", 5000);\n SYSTEM::START_NEW_SCRIPT("emergencycall", 512);\n SYSTEM::START_NEW_SCRIPT("emergencycall", 512);\n SYSTEM::START_NEW_SCRIPT("FM_maintain_cloud_header_data", 1424);\n SYSTEM::START_NEW_SCRIPT("FM_Mission_Controller", 31000);\n SYSTEM::START_NEW_SCRIPT("tennis_family", 3650);\n SYSTEM::START_NEW_SCRIPT("Celebrations", 3650);\nDecompiled examples of usage when starting a script:\n\n SCRIPT::REQUEST_SCRIPT(a_0);\n if (SCRIPT::HAS_SCRIPT_LOADED(a_0)) {\n SYSTEM::START_NEW_SCRIPT(a_0, v_3);\n SCRIPT::SET_SCRIPT_AS_NO_LONGER_NEEDED(a_0);\n return 1;\n }\n\nor:\n v_2 = "MrsPhilips2";\n SCRIPT::REQUEST_SCRIPT(v_2);\n while (!SCRIPT::HAS_SCRIPT_LOADED(v_2)) {\n SCRIPT::REQUEST_SCRIPT(v_2);\n SYSTEM::WAIT(0);\n }\n sub_8792(36);\n SYSTEM::START_NEW_SCRIPT(v_2, 17000);\n SCRIPT::SET_SCRIPT_AS_NO_LONGER_NEEDED(v_2);\nAll native script names: pastebin.com/K9adDsu4 and pastebin.com/yLNWicUi\n``` StartNewScriptWithArgs ```\nreturn : script thread id, 0 if failed \nPass pointer to struct of args in p1, size of struct goes into p2 \n``` @@ -3632,7 +3714,7 @@ StartShapeTestBound See [`START_SHAPE_TEST_LOS_PROBE`](#\\_0x7EE9F5D83DD4F90E) f StartShapeTestBoundingBox See [`START_SHAPE_TEST_LOS_PROBE`](#\\_0x7EE9F5D83DD4F90E) for flags. StartShapeTestBox For more information, see [`START_EXPENSIVE_SYNCHRONOUS_SHAPE_TEST_LOS_PROBE`](#\\_0x377906D8A31E5586) and [`START_SHAPE_TEST_LOS_PROBE`](#\\_0x7EE9F5D83DD4F90E).\n\n**Parameters**\n- `x`: Starting X coordinate.\n- `y`: Starting Y coordinate.\n- `z`: Starting Z coordinate.\n- `x1`: Ending X coordinate.\n- `y1`: Ending Y coordinate.\n- `z1`: Ending Z coordinate.\n- `p9`: Unknown, always 2 or 0\n- `flags`: See [`START_SHAPE_TEST_LOS_PROBE`](#\\_0x7EE9F5D83DD4F90E)\n- `p12`: A bit mask with bits 1, 2, 4, or 7 relating to collider types. 4 and 7 are usually used. StartShapeTestCapsule Raycast from point to point, where the ray has a radius.\n\n**Parameters**\n- `x1`: Starting X coordinate.\n- `y1`: Starting Y coordinate.\n- `z1`: Starting Z coordinate.\n- `x2`: Ending X coordinate.\n- `y2`: Ending Y coordinate.\n- `z2`: Ending Z coordinate.\n- `flags`: See [`START_SHAPE_TEST_LOS_PROBE`](#\\_0x7EE9F5D83DD4F90E)\n- `entity`: Entity to ignore, or 0.\n- `p9`: A bit mask with bits 1, 2, 4, or 7 relating to collider types. 4 and 7 are usually used. -StartShapeTestLosProbe Asynchronously starts a line-of-sight (raycast) world probe shape test.\n\n```cpp\nenum eTraceFlags\n{\n None = 0,\n IntersectWorld = 1,\n IntersectVehicles = 2,\n IntersectPeds = 4,\n IntersectRagdolls = 8,\n IntersectObjects = 16,\n IntersectWater = 32,\n IntersectGlass = 64,\n IntersectRiver = 128,\n IntersectFoliage = 256,\n IntersectEverything = -1\n}\n```\n\nNOTE: Raycasts that intersect with mission_entites (flag = 2) has limited range and will not register for far away entites. The range seems to be about 30 metres.\n\nUse the handle with [GET_SHAPE_TEST_RESULT](#\\_0x3D87450E15D98694) or [GET_SHAPE_TEST_RESULT_INCLUDING_MATERIAL](#\\_0x65287525D951F6BE) until it returns 0 or 2.\n\n**Parameters**\n- `x1`: Starting X coordinate.\n- `y1`: Starting Y coordinate.\n- `z1`: Starting Z coordinate.\n- `x2`: Ending X coordinate.\n- `y2`: Ending Y coordinate.\n- `z2`: Ending Z coordinate.\n- `traceFlags`: Refer to `eTraceFlags`, this defines what the shape test will intersect with\n- `entity`: An entity to ignore, or 0.\n- `options`: A bit mask with bits 1, 2, 4, or 7 relating to collider types. 4 and 7 are usually used.\n\n**Returns** A shape test handle. +StartShapeTestLosProbe Asynchronously starts a line-of-sight (raycast) world probe shape test.\n\n```cpp\nenum eTraceFlags\n{\n None = 0,\n IntersectWorld = 1,\n IntersectVehicles = 2,\n IntersectPeds = 4,\n IntersectRagdolls = 8,\n IntersectObjects = 16,\n IntersectPickup = 32,\n IntersectGlass = 64,\n IntersectRiver = 128,\n IntersectFoliage = 256,\n\n IntersectEverything = 511\n}\n```\n\n```cpp\nenum eTraceOptionFlags\n{\n None = 0,\n OptionIgnoreGlass = 1,\n OptionIgnoreSeeThrough = 2,\n OptionIgnoreNoCollision = 4,\n\n OptionDefault = 7\n}\n```\n\nNOTE: Raycasts that intersect with mission_entites (flag = 2) has limited range and will not register for far away entites. The range seems to be about 30 metres.\n\nUse the handle with [GET_SHAPE_TEST_RESULT](#\\_0x3D87450E15D98694) or [GET_SHAPE_TEST_RESULT_INCLUDING_MATERIAL](#\\_0x65287525D951F6BE) until it returns 0 or 2.\n\n**Parameters**\n- `x1`: Starting X coordinate.\n- `y1`: Starting Y coordinate.\n- `z1`: Starting Z coordinate.\n- `x2`: Ending X coordinate.\n- `y2`: Ending Y coordinate.\n- `z2`: Ending Z coordinate.\n- `traceFlags`: Refer to `eTraceFlags`, this defines what the shape test will intersect with\n- `entity`: An entity to ignore, or 0.\n- `optionFlags`: Refer to `eTraceOptionFlags`, this defines additional options for the shape test\n\n**Returns** A shape test handle. StartShapeTestSurroundingCoords Since it is only used in the PC version, likely some mouse-friendly shape test. Uses **in** vector arguments.\n\nAsynchronous.\n\n```\nit returns a ShapeTest handle that can be used with GET_SHAPE_TEST_RESULT. \nIn its only usage in game scripts its called with flag set to 511, entity to player_ped_id and flag2 set to 7 \n```\n\nSee [`START_SHAPE_TEST_LOS_PROBE`](#\\_0x7EE9F5D83DD4F90E) for flags. StartShapeTestSweptSphere Performs the same type of trace as START_SHAPE_TEST_CAPSULE, but with some different hardcoded parameters.\n\n**Parameters**\n- `x1`: Starting X coordinate.\n- `y1`: Starting Y coordinate.\n- `z1`: Starting Z coordinate.\n- `x2`: Ending X coordinate.\n- `y2`: Ending Y coordinate.\n- `z2`: Ending Z coordinate.\n- `flags`: See [`START_SHAPE_TEST_LOS_PROBE`](#\\_0x7EE9F5D83DD4F90E)\n- `entity`: An entity to ignore, or 0.\n- `p9`: A bit mask with bits 1, 2, 4, or 7 relating to collider types. 4 and 7 are usually used. StartVehicleHorn Sounds the horn for the specified vehicle. Note that if a player is in the vehicle, it will only sound briefly.\n\n**Parameters**\n- `vehicle`: Vehicle id\n- `duration`: The duration to sound the horn, in milliseconds.\n- `mode`: The hash of "NORMAL" or "HELDDOWN". Can be 0. @@ -3726,6 +3808,8 @@ TaskGoToCoordWhileAimingAtEntity Will make the ped move to a coordinate while ai TaskGoToEntity ```\nThe entity will move towards the target until time is over (duration) or get in target's range (distance). p5 and p6 are unknown, but you could leave p5 = 1073741824 or 100 or even 0 (didn't see any difference but on the decompiled scripts, they use 1073741824 mostly) and p6 = 0\nNote: I've only tested it on entity -> ped and target -> vehicle. It could work differently on other entities, didn't try it yet.\nExample: TASK::TASK_GO_TO_ENTITY(pedHandle, vehicleHandle, 5000, 4.0, 100, 1073741824, 0)\nPed will run towards the vehicle for 5 seconds and stop when time is over or when he gets 4 meters(?) around the vehicle (with duration = -1, the task duration will be ignored).\n``` TaskGoToEntityWhileAimingAtEntity ```\nshootatEntity: \nIf true, peds will shoot at Entity till it is dead. \nIf false, peds will just walk till they reach the entity and will cease shooting. \n``` TaskGotoEntityAiming ```\neg\n TASK::TASK_GOTO_ENTITY_AIMING(v_2, PLAYER::PLAYER_PED_ID(), 5.0, 25.0);\nped = Ped you want to perform this task.\ntarget = the Entity they should aim at.\ndistanceToStopAt = distance from the target, where the ped should stop to aim.\nStartAimingDist = distance where the ped should start to aim.\n``` +TaskGotoEntityOffset Instructs the ped to go to the entity with the given offset.\n\n```cpp\nenum eSeekEntityOffsetFlags {\n ESEEK_OFFSET_ORIENTATES_WITH_ENTITY = 1,\n ESEEK_KEEP_TO_PAVEMENTS = 2\n};\n```\n\n**Parameters**\n- `ped`: The ped handle\n- `entity`: The target entity handle\n- `duration`: The duration in seconds or -1 for forever\n- `seekRadius`: How many meters the destination is from the entity\n- `seekAngleDeg`: The angle the destination is from the entity\n- `moveBlendRatio`: The move blend ratio (speed)\n- `gotoEntityOffsetFlags`: The goto entity offset flags +TaskGotoEntityOffsetXy Instructs the ped to go to the entity with the given offset.\n\n**Parameters**\n- `ped`: The ped handle\n- `entity`: The target entity handle\n- `duration`: The duration in seconds or -1 for forever\n- `targetRadius`: How far away the ped needs to be from the target entity before it starts moving\n- `offsetX`: The X offset\n- `offsetY`: The Y offset\n- `moveBlendRatio`: The move blend ratio (speed)\n- `gotoEntityOffsetFlags`: The goto entity offset flags (see [`TASK_GOTO_ENTITY_OFFSET`](#\\_0xE39B4FF4FDEBDE27)) TaskGuardCurrentPosition ```\nFrom re_prisonvanbreak:\nTASK::TASK_GUARD_CURRENT_POSITION(l_DD, 35.0, 35.0, 1);\n``` TaskGuardSphereDefensiveArea ```\np0 - Guessing PedID \np1, p2, p3 - XYZ? \np4 - ??? \np5 - Maybe the size of sphere from XYZ? \np6 - ??? \np7, p8, p9 - XYZ again? \np10 - Maybe the size of sphere from second XYZ? \n``` TaskHandsUp ```\nIn the scripts, p3 was always -1. \np3 seems to be duration or timeout of turn animation. \nAlso facingPed can be 0 or -1 so ped will just raise hands up. \n``` @@ -3746,9 +3830,9 @@ TaskPatrol ```\nAfter looking at some scripts the second parameter seems to be a TaskPause This tasks the ped to do nothing for the specified amount of miliseconds.\nThis is useful if you want to add a delay between tasks when using a sequence task.\n\n**Parameters**\n- `ped`: The ped to pause. Set to this 0 when using task sequences.\n- `ms`: The amount of miliseconds to wait. TaskPerformSequence For an example on how to use this please refer to [OPEN_SEQUENCE_TASK](#\\_0xE8854A4326B9E12B)\n\n**Parameters**\n- `ped`: The ped to perform the sequence on\n- `taskSequenceId`: The sequenceId to perform TaskPerformSequenceFromProgress \n\n**Parameters**\n- `ped`: The ped to perform the task on\n- `progress1`: The progress to start from\n- `progress2`: Unknown what it does, it has to be set higher than 0 to not break the sequence\n\n```lua\nCitizen.CreateThread(function()\n local animDict = 'timetable@ron@ig_5_p3'\n\n RequestAnimDict(animDict)\n while not HasAnimDictLoaded(animDict) do\n Wait(0)\n end\n\n local ped = PlayerPedId()\n local pos = GetEntityCoords(ped)\n\n -- you can change the model, but you might have to change the offsets below.\n local objModelHash = `prop_bench_01a`\n\n local obj = GetClosestObjectOfType(pos.x, pos.y, pos.z, 5.0, objModelHash, false, false, false)\n if obj == 0 then\n print("No valid object within range!")\n return\n end\n\n local tgtPos = GetOffsetFromEntityInWorldCoords(obj, 0.0, -0.7, 0.0)\n\n -- open the task sequence so we can get our sequence id\n local sequence = OpenSequenceTask()\n\n local desiredHeading = GetEntityHeading(obj) - 180.0\n\n -- go to the entities offset\n TaskGoStraightToCoord(nil, tgtPos.x, tgtPos.y, tgtPos.z, 1.0, 4000, desiredHeading, 1.0)\n\n -- sit on the bench indefinitely (you can change -1 here to however long you want to sit)\n TaskPlayAnim(nil, animDict, 'ig_5_p3_base', 8.0, 8.0, -1, 1)\n\n -- close the sequence so we can perform it\n CloseSequenceTask(sequence)\n\n -- perform the sequence, this will not work if the sequence is still open.\n -- note that progress1 is set to 1, this means it will skip the first sequence\n TaskPerformSequenceFromProgress(ped, sequence, 1, 1)\n\n -- free the sequence slot so it can be re-used\n ClearSequenceTask(sequence)\n\n -- cleanup the animation dict so the engine can remove it when its no longer needed\n RemoveAnimDict(animDict)\nend)\n``` -TaskPerformSequenceLocally For an example on how to use this please refer to \\[OPEN_SEQUENCE_TASK]\\(#\\_0xE8854A4326B9E12B\n\n**Parameters**\n- `ped`: The ped to perform the sequence on\n- `taskSequenceId`: The sequence to perform +TaskPerformSequenceLocally For an example on how to use this please refer to [OPEN_SEQUENCE_TASK](#\\_0xE8854A4326B9E12B)\n\n**Parameters**\n- `ped`: The ped to perform the sequence on\n- `taskSequenceId`: The sequence to perform TaskPlaneGotoPreciseVtol ```\nNativeDB Introduced: v1290\n``` -TaskPlaneMission ```\nEDITED (7/13/2017) \nNOTE: If you want air combat, AI::TASK_COMBAT_PED (while your pilot is in an aircraft) also does the same thing as this native. \nDESCRIPTION: \nEver wish your buddy could shoot down one of your enemies for you? Ever wanted an auto-pilot? Well look no further! This is the native for you! (Ped intelligence may vary) \nUSAGE: \n-- REQUIRED -- \n• pilot = The ped flying the aircraft. \n• aircraft = The aircraft the pilot is flying \n-- OPTIONAL -- [atleast 1 must be assigned] \n• targetVehicle = The vehicle the pilot will target. \n• targetPed = The ped the pilot will target. \n• destinationX, destinationY, destinationZ = The location the pilot will target. \n-- LOGIC -- \n• missionFlag = The type of mission. pastebin.com/R8x73dbv \n• angularDrag = The higher the value, the slower the plane will rotate. Value ranges from 0 - Infinity. \n• unk = Set to 0, and you'll be fine. \n• targetHeading = The target angle (from world space north) that the pilot will try to acheive before executing an attack/landing. \n• maxZ = Maximum Z coordinate height for flying. \n• minZ = Minimum Z coordinate height for flying. \nZ: 2,700 is the default max height a pilot will be able to fly. Anything greater and he will fly downward until reaching 2,700 again. \nMission Types (incase you don't like links..): \n0 = None \n1 = Unk \n2 = CTaskVehicleRam \n3 = CTaskVehicleBlock \n4 = CTaskVehicleGoToPlane \n5 = CTaskVehicleStop \n6 = CTaskVehicleAttack \n7 = CTaskVehicleFollow \n8 = CTaskVehicleFleeAirborne \n9 = CTaskVehicleCircle \n10 = CTaskVehicleEscort \n15 = CTaskVehicleFollowRecording \n16 = CTaskVehiclePoliceBehaviour \n17 = CTaskVehicleCrash \nExample C#: \nFunction.Call(Hash.TASK_PLANE_MISSION, pilot, vehicle, 0, Game.Player.Character, 0, 0, 0, 6, 0f, 0f, 0f, 2500.0f, -1500f); \nExample C++ \nAI::TASK_PLANE_MISSION(pilot, vehicle, 0, PLAYER::GET_PLAYER_PED(PLAYER::GET_PLAYER_INDEX()), 0, 0, 0, 6, 0.0, 0.0, 0.0, 2500.0, -1500.0); \n[DEPRECATED] EXAMPLE USAGE: \npastebin.com/gx7Finsk \n```\n\n```\nNativeDB Added Parameter 14: Any p13\n``` +TaskPlaneMission Gives the plane a mission (purpose or objective), the mission is passed onto the `iMissionIndex` parameter.\n\n```cpp\nenum eVehicleMission {\n MISSION_NONE = 0,\n MISSION_CRUISE, // 1\n MISSION_RAM, // 2\n MISSION_BLOCK, // 3\n MISSION_GOTO, // 4\n MISSION_STOP, // 5\n MISSION_ATTACK, // 6\n MISSION_FOLLOW, // 7\n MISSION_FLEE, // 8\n MISSION_CIRCLE, // 9\n MISSION_ESCORT_LEFT, // 10\n MISSION_ESCORT_RIGHT, // 11\n MISSION_ESCORT_REAR, // 12\n MISSION_ESCORT_FRONT, // 13\n MISSION_GOTO_RACING, // 14\n MISSION_FOLLOW_RECORDING, // 15\n MISSION_POLICE_BEHAVIOUR, // 16\n MISSION_PARK_PERPENDICULAR, // 17\n MISSION_PARK_PARALLEL, // 18\n MISSION_LAND, // 19\n MISSION_LAND_AND_WAIT, // 20\n MISSION_CRASH, // 21\n MISSION_PULL_OVER, // 22\n MISSION_PROTECT // 23\n};\n```\n\n**Parameters**\n- `ped`: The `Ped` handle.\n- `vehicle`: The `Vehicle` handle for the actual plane that will be flown.\n- `targetVehicle`: The target `Vehicle` handle (in case `eVehicleMission` requires one).\n- `targetPed`: The target `Ped` (in case `eVehicleMission` requires one).\n- `iMissionIndex`: The mission to be executed. See `eVehicleMission`.\n- `fCruiseSpeed`: The cruise speed (in m/s).\n- `fTargetReachedDist`: Distance (in meters) (at which the plane thinks it has arrived), this is also used as the hover distance for `MISSION_ATTACK` and `MISSION_CIRCLE`.\n- `fOrientation`: Used to specify the desired orientation of the plane in degrees (`0` to `360`). Use `-1` if no specific orientation is required.\n- `iFlightHeight`: The height above sea level the plane tries to maintain, i.e. `50` meters.\n- `iMinHeightAboveTerrain`: The minimum height above terrain, i.e. `30` meters.\n- `bPrecise`: A boolean value, defaults to `true`. TaskPlaneTaxi The given ped will try to drive the plane to the given coordinates and will then drive around the given coords (the plane will form 8s on the ground)\n\n**Parameters**\n- `pilot`: The ped driving the plane.\n- `aircraft`: The plane used.\n- `xPos`: The X coordinate.\n- `yPos`: The Y coordinate.\n- `zPos`: The Z coordinate.\n- `fCruiseSpeed`: The speed of the plane (in m/s).\n- `fTargetReachedDist`: Distance (in meters) at which the plane thinks it has arrived to the given coordinates. TaskPlayAnim [Animations list](https://alexguirre.github.io/animations-list/)\n\n```cpp\nenum eScriptedAnimFlags\n{\n AF_LOOPING = 1,\n AF_HOLD_LAST_FRAME = 2,\n AF_REPOSITION_WHEN_FINISHED = 4,\n AF_NOT_INTERRUPTABLE = 8,\n AF_UPPERBODY = 16,\n AF_SECONDARY = 32,\n AF_REORIENT_WHEN_FINISHED = 64,\n AF_ABORT_ON_PED_MOVEMENT = 128,\n AF_ADDITIVE = 256,\n AF_TURN_OFF_COLLISION = 512,\n AF_OVERRIDE_PHYSICS = 1024,\n AF_IGNORE_GRAVITY = 2048,\n AF_EXTRACT_INITIAL_OFFSET = 4096,\n AF_EXIT_AFTER_INTERRUPTED = 8192,\n AF_TAG_SYNC_IN = 16384,\n AF_TAG_SYNC_OUT = 32768,\n AF_TAG_SYNC_CONTINUOUS = 65536,\n AF_FORCE_START = 131072,\n AF_USE_KINEMATIC_PHYSICS = 262144,\n AF_USE_MOVER_EXTRACTION = 524288,\n AF_HIDE_WEAPON = 1048576,\n AF_ENDS_IN_DEAD_POSE = 2097152,\n AF_ACTIVATE_RAGDOLL_ON_COLLISION = 4194304,\n AF_DONT_EXIT_ON_DEATH = 8388608,\n AF_ABORT_ON_WEAPON_DAMAGE = 16777216,\n AF_DISABLE_FORCED_PHYSICS_UPDATE = 33554432,\n AF_PROCESS_ATTACHMENTS_ON_START = 67108864,\n AF_EXPAND_PED_CAPSULE_FROM_SKELETON = 134217728,\n AF_USE_ALTERNATIVE_FP_ANIM = 268435456,\n AF_BLENDOUT_WRT_LAST_FRAME = 536870912,\n AF_USE_FULL_BLENDING = 1073741824\n}\n```\n\n**Parameters**\n- `ped`: The ped you want to play the animation\n- `animDictionary`: The animation dictionary\n- `animationName`: The animation name\n- `blendInSpeed`: The speed at which the animation blends in. Lower is slower and higher is faster, 1.0 is normal, 8.0 is basically instant\n- `blendOutSpeed`: The speed at which the animation blends out. Lower is slower and higher is faster, 1.0 is normal, 8.0 is basically instant\n- `duration`: The duration of the animation in milliseconds. -1 will play the animation until canceled\n- `flag`: The animation flags (see enum)\n- `playbackRate`: The playback rate (between 0.0 and 1.0) TaskPlayAnimAdvanced Similar in functionality to [`TASK_PLAY_ANIM`](#\\_0xEA47FE3719165B94), except the position and rotation parameters let you specify the initial position and rotation of the task. The ped is teleported to the position specified.\n\n[Animations list](https://alexguirre.github.io/animations-list/)\n\n**Parameters**\n- `ped`: The ped you want to play the animation\n- `animDictionary`: The animation dictionary\n- `animationName`: The animation name\n- `posX`: Initial X position of the task\n- `posY`: Initial Y position of the task\n- `posZ`: Initial Z position of the task\n- `rotX`: Initial X rotation of the task\n- `rotY`: Initial Y rotation of the task\n- `rotZ`: Initial Z rotation of the task\n- `blendInSpeed`: The speed at which the animation blends in. Lower is slower and higher is faster, 1.0 is normal, 8.0 is basically instant\n- `blendOutSpeed`: The speed at which the animation blends out. Lower is slower and higher is faster, 1.0 is normal, 8.0 is basically instant\n- `duration`: The duration of the animation in milliseconds. -1 will play the animation until canceled\n- `flag`: See [`TASK_PLAY_ANIM`](#\\_0xEA47FE3719165B94)\n- `animTime`: Value between 0.0 and 1.0, lets you start an animation from the given point @@ -3761,6 +3845,7 @@ TaskScriptedAnimation ```\nFrom fm_mission_controller.c: \nreserve_network_miss TaskSeekCoverToCoords ```\nfrom michael2:\nTASK::TASK_SEEK_COVER_TO_COORDS(ped, 967.5164794921875, -2121.603515625, 30.479299545288086, 978.94677734375, -2125.84130859375, 29.4752, -1, 1);\nappears to be shorter variation\nfrom michael3:\nTASK::TASK_SEEK_COVER_TO_COORDS(ped, -2231.011474609375, 263.6326599121094, 173.60195922851562, -1, 0);\n``` TaskSetBlockingOfNonTemporaryEvents ```\nI cant believe I have to define this, this is one of the best natives. \nIt makes the ped ignore basically all shocking events around it. Occasionally the ped may comment or gesture, but other than that they just continue their daily activities. This includes shooting and wounding the ped. And - most importantly - they do not flee. \nSince it is a task, every time the native is called the ped will stop for a moment. \n``` TaskSetDecisionMaker ```\np1 is always GET_HASH_KEY("empty") in scripts, for the rare times this is used \n``` +TaskSharkCircleCoord Makes a shark ped circle around specified coordinates.\n\n```\nNativeDB Introduced: v3407\n```\n\n**Parameters**\n- `ped`: The shark ped.\n- `x`: X coordinate to circle around\n- `y`: Y coordinate to circle around\n- `z`: Z coordinate to circle around\n- `moveBlendRatio`: Animation blend ratio from 0.0 to 1.0\n- `radius`: Radius of the circular path in meters\n\n```lua\nCreateThread(function()\n local sharkModel = GetHashKey("a_c_sharktiger")\n RequestModel(sharkModel)\n \n while not HasModelLoaded(sharkModel) do\n Wait(0)\n end\n\n local coords = GetEntityCoords(PlayerPedId(), false)\n local shark = CreatePed(28, sharkModel, coords.x, coords.y, coords.z, 0.0, true, true)\n \n SetModelAsNoLongerNeeded(sharkModel)\n \n if shark == 0 then return end\n \n TaskSharkCircleCoord(shark, coords.x, coords.y, coords.z - 5.0, 1.0, 10.0)\n \n Wait(10000) -- We're letting the shark do circle movement for 10 seconds\n ClearPedTasks(shark) -- Going to stop the task\nend)\n``` TaskShootAtCoord ```\nFiring Pattern Hash Information: https://pastebin.com/Px036isB\n``` TaskShootAtEntity ```\n//this part of the code is to determine at which entity the player is aiming, for example if you want to create a mod where you give orders to peds\nEntity aimedentity;\nPlayer player = PLAYER::PLAYER_ID();\nPLAYER::_GET_AIMED_ENTITY(player, &aimedentity);\n//bg is an array of peds\nTASK::TASK_SHOOT_AT_ENTITY(bg[i], aimedentity, 5000, MISC::GET_HASH_KEY("FIRING_PATTERN_FULL_AUTO"));\nin practical usage, getting the entity the player is aiming at and then task the peds to shoot at the entity, at a button press event would be better.\nFiring Pattern Hash Information: https://pastebin.com/Px036isB\n``` TaskShuffleToNextVehicleSeat ```\nMakes the specified ped shuffle to the next vehicle seat. \nThe ped MUST be in a vehicle and the vehicle parameter MUST be the ped's current vehicle. \n```\n\n```\nNativeDB Added Parameter 3: Any p2\n``` @@ -3805,15 +3890,15 @@ TaskWarpPedDirectlyIntoCover This task warps a ped directly into a cover positio TaskWarpPedIntoVehicle ```\nNativeDB Introduced: v323\n```\n\nWarp a ped into a vehicle.\n\n**Note**: It's better to use [`TASK_ENTER_VEHICLE`](#\\_0xC20E50AA46D09CA8) with the flag "warp" flag instead of this native.\n\n**Parameters**\n- `ped`: The Ped to be warped into the vehicle.\n- `vehicle`: The target vehicle into which the ped will be warped.\n- `seatIndex`: See eSeatPosition declared in [`IS_VEHICLE_SEAT_FREE`](#\\_0x22AC59A870E6A669).\n\n```lua\n-- This example creates a vehicle and warps the player into the driver's seat\n\n-- Retrieve the player ped\nlocal playerPed = PlayerPedId()\n\n-- Define the vehicle model and check if it exists in the game files\nlocal modelHash = `adder` -- Use Compile-time hashes to get the model hash\nif not IsModelInCdimage(modelHash) then\n return\nend\n\n-- Request the model and wait for it to load\nRequestModel(modelHash) \nrepeat\n Wait(0)\nuntil HasModelLoaded(modelHash)\n\n-- Create the vehicle at the player's coordinates with a heading of 0.0\nlocal coordsPlayer, heading = GetEntityCoords(playerPed), 0.0\nlocal vehicle = CreateVehicle(modelHash, coordsPlayer, heading, true, false)\n\n-- Define the seat index for the Ped (e.g., -1 for the driver's seat)\nlocal seatIndex = -1 \n\n-- Check if the vehicle exists and the player is alive\nif not DoesEntityExist(vehicle) or IsEntityDead(playerPed) then\n return\nend\n\n-- Warp the Ped into the specified vehicle seat\nTaskWarpPedIntoVehicle(playerPed, vehicle, seatIndex)\n``` TaskWrithe ```\nNativeDB Added Parameter 5: Any p4\nNativeDB Added Parameter 6: Any p5\n``` TerminateAllScriptsWithThisName For a full list, see [here](https://gist.github.com/4mmonium/f76f3ecef649ed275b260b433ea84494). -TerraingridActivate This native enables/disables the gold putting grid display (https://i.imgur.com/TC6cku6.png).\nThis requires these two natives to be called as well to configure the grid: [`TERRAINGRID_SET_PARAMS`](#\\_0x1C4FC5752BCD8E48) and [`TERRAINGRID_SET_COLOURS`](#\\_0x5CE62918F8D703C7).\n\n**Parameters**\n- `toggle`: Enables or disables the golf putting grid display. -TerraingridSetColours This native is used along with these two natives: [`TERRAINGRID_ACTIVATE`](#\\_0xA356990E161C9E65) and [`TERRAINGRID_SET_PARAMS`](#\\_0x1C4FC5752BCD8E48).\nThis native sets the colors for the golf putting grid. the 'min...' values are for the lower areas that the grid covers, the 'max...' values are for the higher areas that the grid covers, all remaining values are for the 'normal' ground height.\nAll those natives combined they will output something like this: https://i.imgur.com/TC6cku6.png\n\nOld description:\nOnly called in golf and golf_mp\\\nparameters used are\\\nGRAPHICS::\\_0x5CE62918F8D703C7(255, 0, 0, 64, 255, 255, 255, 5, 255, 255, 0, 64);\n\n**Parameters**\n- `lowR`: red value for the lower level\n- `lowG`: green value for the lower level\n- `lowB`: blue value for the lower level\n- `lowAlpha`: alpha value for the lower level\n- `R`: red value for the normal level\n- `G`: green value for the normal level\n- `B`: blue value for the normal level\n- `Alpha`: alpha value for the normal level\n- `highR`: red value for the upper level\n- `highG`: green value for the upper level\n- `highB`: blue value for the upper level\n- `highAlpha`: alpha value for the upper level -TerraingridSetParams This native is used along with these two natives: [`TERRAINGRID_ACTIVATE`](#\\_0xA356990E161C9E65) and [`TERRAINGRID_SET_COLOURS`](#\\_0x5CE62918F8D703C7).\n\nThis native configures the location, size, rotation, normal height, and the difference ratio between min, normal and max.\n\nAll those natives combined they will output something like this: https://i.imgur.com/TC6cku6.png\n\n**Parameters**\n- `x`: Grid center x coord.\n- `y`: Grid center y coord.\n- `z`: Grid center z coord.\n- `p3`: Not sure, but seems to be the amount of lines top/bottom there are in the grid. -1.0 works best.\n- `rotation`: Grid rotation (keep between 0.0 and 1.0).\n- `p5`: Offset top/bottom (? not sure about this one, seems weird).\n- `width`: Grid width (usually 15.0).\n- `height`: Grid height (usually 15.0).\n- `p8`: Not sure, but seems to be the amount of lines left/right there are in the grid. -1.0 works best.\n- `scale`: Zoom / scale (higher values = smaller (more) squares) (lower values = bigger (less) squares).\n- `glowIntensity`: glow intensity / opacity (40.0 is fine for daylight, 15.0 is fine for night time).\n- `normalHeight`: The z coord for 'normal' height (white grid lines level).\n- `heightDiff`: This is the height difference/margin used for line color changes. 0.2 works fine (normalHeight + 0.2 = yellow, normalHeight - 0.2 = red). +TerraingridActivate This native enables/disables the gold putting grid display (https://i.imgur.com/slYthff.png).\nThis requires these two natives to be called as well to configure the grid: [`TERRAINGRID_SET_PARAMS`](#\\_0x1C4FC5752BCD8E48) and [`TERRAINGRID_SET_COLOURS`](#\\_0x5CE62918F8D703C7).\n\n**Parameters**\n- `toggle`: Enables or disables the golf putting grid display. +TerraingridSetColours This native is used along with these two natives: [`TERRAINGRID_ACTIVATE`](#\\_0xA356990E161C9E65) and [`TERRAINGRID_SET_PARAMS`](#\\_0x1C4FC5752BCD8E48).\nThis native sets the colors for the golf putting grid. the 'min...' values are for the lower areas that the grid covers, the 'max...' values are for the higher areas that the grid covers, all remaining values are for the 'normal' ground height.\nAll those natives combined they will output something like this:\n![](https://i.imgur.com/slYthff.png)\n\nOld description:\nOnly called in golf and golf_mp\\\nparameters used are\\\nGRAPHICS::\\_0x5CE62918F8D703C7(255, 0, 0, 64, 255, 255, 255, 5, 255, 255, 0, 64);\n\n**Parameters**\n- `lowR`: red value for the lower level\n- `lowG`: green value for the lower level\n- `lowB`: blue value for the lower level\n- `lowAlpha`: alpha value for the lower level\n- `R`: red value for the normal level\n- `G`: green value for the normal level\n- `B`: blue value for the normal level\n- `Alpha`: alpha value for the normal level\n- `highR`: red value for the upper level\n- `highG`: green value for the upper level\n- `highB`: blue value for the upper level\n- `highAlpha`: alpha value for the upper level +TerraingridSetParams This native is used along with these two natives: [`TERRAINGRID_ACTIVATE`](#\\_0xA356990E161C9E65) and [`TERRAINGRID_SET_COLOURS`](#\\_0x5CE62918F8D703C7).\n\nThis native configures the location, size, rotation, normal height, and the difference ratio between min, normal and max.\n\nAll those natives combined they will output something like this:\n![](https://i.imgur.com/slYthff.png)\n\n**Parameters**\n- `x`: Grid center x coord.\n- `y`: Grid center y coord.\n- `z`: Grid center z coord.\n- `p3`: Not sure, but seems to be the amount of lines top/bottom there are in the grid. -1.0 works best.\n- `rotation`: Grid rotation (keep between 0.0 and 1.0).\n- `p5`: Offset top/bottom (? not sure about this one, seems weird).\n- `width`: Grid width (usually 15.0).\n- `height`: Grid height (usually 15.0).\n- `p8`: Not sure, but seems to be the amount of lines left/right there are in the grid. -1.0 works best.\n- `scale`: Zoom / scale (higher values = smaller (more) squares) (lower values = bigger (less) squares).\n- `glowIntensity`: glow intensity / opacity (40.0 is fine for daylight, 15.0 is fine for night time).\n- `normalHeight`: The z coord for 'normal' height (white grid lines level).\n- `heightDiff`: This is the height difference/margin used for line color changes. 0.2 works fine (normalHeight + 0.2 = yellow, normalHeight - 0.2 = red). TestProbeAgainstAllWater Flags are identical to START_SHAPE_TEST\\*, however, 128 is automatically set.\n\n**Parameters**\n- `flag`: See [`START_SHAPE_TEST_LOS_PROBE`](#\\_0x7EE9F5D83DD4F90E) TestVerticalProbeAgainstAllWater \n\n**Parameters**\n- `flag`: See [`START_SHAPE_TEST_LOS_PROBE`](#\\_0x7EE9F5D83DD4F90E) -ThefeedCommentTeleportPoolOff ```\nDisplays "normal" notifications again after calling `_0x56C8B608CFD49854` (those that were drawn before calling this native too), though those will have a weird offset and stay on screen forever (tested with notifications created from same script).\n``` -ThefeedCommentTeleportPoolOn ```\nEnables loading screen tips to be be shown (`_0x15CFA549788D35EF` and `_0x488043841BBE156F`), blocks other kinds of notifications from being displayed (at least from current script). Call `0xADED7F5748ACAFE6` to display those again.\n``` +ThefeedAutoPostGametipsOff Disables tip notifications enabled by [`THEFEED_AUTO_POST_GAMETIPS_ON`](#\\_0x56C8B608CFD49854) +ThefeedAutoPostGametipsOn Enables loading screen tips to be be shown, blocks other kinds of notifications from being displayed.\nCall [`THEFEED_AUTO_POST_GAMETIPS_OFF`](#\\_0xADED7F5748ACAFE6) to disable.\n\nExample result:\n![](https://i.imgur.com/GdRa0kw.png)\n\n```lua\nThefeedAutoPostGametipsOn()\n``` ThefeedDisableLoadingScreenTips Stops loading screen tips shown by invoking either `0x488043841BBE156F` or `0x15CFA549788D35EF` -ThefeedDisplayLoadingScreenTips Displays loading screen tips, requires `0x56C8B608CFD49854` to be called beforehand. +ThefeedDisplayLoadingScreenTips Displays loading screen tips.\nSeems to do the same as [`_HUD_DISPLAY_LOADING_SCREEN_TIPS`](#\\_0x488043841BBE156F).\nRequires [`THEFEED_AUTO_POST_GAMETIPS_ON`](#\\_0x56C8B608CFD49854) to be called beforehand.\nCall [`_THEFEED_DISABLE_LOADING_SCREEN_TIPS`](#\\_0x32888337579A5970) to disable immediately, or [`THEFEED_AUTO_POST_GAMETIPS_OFF`](#\\_0xADED7F5748ACAFE6) to disable after the current tip.\n\nExample result:\n![](https://i.imgur.com/hzaHuPb.png)\n\n```lua\nThefeedDisplayLoadingScreenTips()\n``` ThefeedForceRenderOff Enables loading screen tips to be be shown (`_0x15CFA549788D35EF` and `_0x488043841BBE156F`), blocks other kinds of notifications from being displayed (at least from current script). Call `0xADED7F5748ACAFE6` to display those again. ThefeedFreezeNextPost ```\nRequires manual management of game stream handles (i.e., 0xBE4390CB40B3E627).\n``` ThefeedGetFirstVisibleDeleteRemaining ```\nReturns the handle for the notification currently displayed on the screen. Name may be a hash collision, but describes the function accurately.\n``` @@ -3828,7 +3913,7 @@ Timera ```\nCounts up. Every 1000 is 1 real-time second. Use SETTIMERA(int value Timestep ```\nGets the current frame time. \n``` TogglePausedRenderphases Switches the rendering display to exclude everything except PostFX, resulting in a frozen screen before the UI pass.\n\n**Parameters**\n- `toggle`: Setting it to `false` will exclude render updates as mentioned in the description, until it's set back to `true`. ToggleShowOptionalStuntJumpCamera Enable/disable optional stunt camera.\n\n```\nNativeDB Introduced: v757\n```\n\n**Parameters**\n- `toggle`: Set to `true` to enable the optional stunt jump camera angles, or `false` to disable them and use the default camera view. -ToggleUsePickupsForPlayer ```\nDisabling/enabling a player from getting pickups. From the scripts:\nOBJECT::_616093EC6B139DD9(PLAYER::PLAYER_ID(), ${pickup_portable_package}, 0);\nOBJECT::_616093EC6B139DD9(PLAYER::PLAYER_ID(), ${pickup_portable_package}, 0);\nOBJECT::_616093EC6B139DD9(PLAYER::PLAYER_ID(), ${pickup_portable_package}, 1);\nOBJECT::_616093EC6B139DD9(PLAYER::PLAYER_ID(), ${pickup_portable_package}, 0);\nOBJECT::_616093EC6B139DD9(PLAYER::PLAYER_ID(), ${pickup_armour_standard}, 0);\nOBJECT::_616093EC6B139DD9(PLAYER::PLAYER_ID(), ${pickup_armour_standard}, 1);\nSET_PLAYER_*\n``` +ToggleUsePickupsForPlayer ```\nDisabling/enabling a player from getting pickups. From the scripts:\nOBJECT::_616093EC6B139DD9(PLAYER::PLAYER_ID(), ${pickup_portable_package}, 0);\n```\n\n**Parameters**\n- `player`: Player ID. Use [`PLAYER_ID`](#\\_0x4F8644AF03D0E0D6) for your own player.\n- `pickupHash`: Hash of the pickup, obtainable with [`GET_HASH_KEY`](#\\_0xD24D37CC275948CC)\n- `toggle`: boolean that enables/disables the pickup drop (false to disable, true to enable)\n\n```lua\n-- Toggles the possibility for the player to drop the weapon pickups after death\nlocal pickup = GetHashKey("PICKUP_WEAPON_ADVANCEDRIFLE")\nToggleUsePickupsForPlayer(PlayerId(), pickup, false)\n``` ToggleVehicleMod Enables or disables a vehicle mod by index (`modType`) for a given vehicle.\n\n`eVehicleModType` enum, used for `modType` index can be found under [`SET_VEHICLE_MOD`](#\\_0x6AF0636DDEDCB6DD).\n\n**Parameters**\n- `vehicle`: The vehicle handle\n- `modType`: Refer to eVehicleModType in [`SET_VEHICLE_MOD`](#\\_0x6AF0636DDEDCB6DD).\n- `toggle`: A bool indicating whether the mod should be enabled/disabled (true/false) TrackVehicleVisibility ```\nin script hook .net \nVehicle v = ...; \nFunction.Call(Hash.TRACK_VEHICLE_VISIBILITY, v.Handle); \n``` TransformToCar Transforms the `stormberg` to its "road vehicle" variant. If the vehicle is already in that state then the vehicle transformation audio will still play, but the vehicle won't change at all.\n\n**Parameters**\n- `vehicle`: A vehicle handle.\n- `instantly`: If true, the vehicle will be instantly transformed, when false the transform animation plays normally. @@ -3844,6 +3929,7 @@ TriggerScriptEvent ```\neventGroup: 0 = SCRIPT_EVENT_QUEUE_AI (CEventGroupScript TriggerScriptEvent_2 ```\nSee TRIGGER_SCRIPT_EVENT\n``` TriggerServerEventInternal The backing function for TriggerServerEvent. TriggerSiren ... When not in a vehicle\n\n```\nNativeDB Introduced: v1290\n``` +TriggerVehicleWeaponReload Start a reload for a vehicle's weapon.\n\n```\nNativeDB Introduced: v3407\n```\n\n**Parameters**\n- `vehicle`: The vehicle containing the weapon to reload.\n- `seat`: The seat/weapon index.\n- `ped`: The ped initiating the reload (the one using the weapon).\n\n**Returns** Return `true` if reload was triggered successfully, `false` otherwise. UgcCreateContent ```\nNativeDB Added Parameter 8: Any p7\n``` UgcCreateMission ```\nNativeDB Added Parameter 6: Any p5\n``` UgcGetContentId ```\nReturn the mission id of a job.\n``` @@ -3860,6 +3946,7 @@ UnloadContentChangeSetGroup ```\nFrom fm_deathmatch_creator and fm_race_creator: UnlockRadioStationTrackList ```\nAUDIO::UNLOCK_RADIO_STATION_TRACK_LIST("RADIO_16_SILVERLAKE", "MIRRORPARK_LOCKED");\n``` UnpatchDecalDiffuseMap ```\nGRAPHICS::UNPATCH_DECAL_DIFFUSE_MAP(9123); \nGRAPHICS::SET_STREAMED_TEXTURE_DICT_AS_NO_LONGER_NEEDED("MPMissMarkers256"); \n``` UnpinInterior ```\nDoes something similar to INTERIOR::DISABLE_INTERIOR. \nYou don't fall through the floor but everything is invisible inside and looks the same as when INTERIOR::DISABLE_INTERIOR is used. Peds behaves normally inside. \n``` +UnregisterCommand > This native only works in FiveM for GTAV Enhanced.\n\nUnregisters a command that was previously registered with `REGISTER_COMMAND`, using the command ID returned by that native.\n\n**Parameters**\n- `commandId`: The command ID returned by `REGISTER_COMMAND`.\n\n```lua\nlocal commandId = RegisterCommand("hello", function(source, args, rawCommand)\n print("hello!")\nend, false)\n\n-- later, when the command is no longer needed\nUnregisterCommand(commandId)\n``` UnregisterPedheadshot ```\ngtaforums.com/topic/885580-ped-headshotmugshot-txd/ \n``` UnregisterRawNuiCallback Will unregister and cleanup a registered NUI callback handler.\n\nUse along side the REGISTER_RAW_NUI_CALLBACK native.\n\n**Parameters**\n- `callbackType`: The callback type to target UnregisterScriptWithAudio **This native does absolutely nothing, just a nullsub**\n\n```\nOn last-gen this just runs blr and this func is called by several other functions other then the native's table. \n``` diff --git a/crates/qbx_fivem_data/src/lib.rs b/crates/qbx_fivem_data/src/lib.rs index 3310473..ffbb8f6 100644 --- a/crates/qbx_fivem_data/src/lib.rs +++ b/crates/qbx_fivem_data/src/lib.rs @@ -42,6 +42,9 @@ pub struct Native { returns: &'static str, params: &'static str, pub alias_of: Option<&'static str>, + /// The hash, returned values and parameters of the server native of the same name, when they + /// differ from those of the client one: `GetAllVehicles` returns a table on the server. + server: Option<(&'static str, &'static str, &'static str)>, } impl Native { @@ -58,20 +61,52 @@ impl Native { let returns = cols.next()?; let params = cols.next()?; let alias_of = cols.next().filter(|a| !a.is_empty()); - Some(Self { name, side, namespace, hash, returns, params, alias_of }) + let server = match (cols.next(), cols.next(), cols.next()) { + (Some(hash), Some(returns), Some(params)) => Some((hash, returns, params)), + _ => None, + }; + Some(Self { name, side, namespace, hash, returns, params, alias_of, server }) + } + + /// The native that code on `side` calls: on the server, the server native of the same name + /// when its signature differs from the client one. + pub fn on(self, side: Option) -> Self { + match (side, self.server) { + (Some(Side::Server), Some((hash, returns, params))) => { + Self { side: Side::Server, namespace: "CFX", hash, returns, params, server: None, ..self } + } + _ => self, + } } + /// The types of the values it returns. A `table` has the LuaCATS type of `RETURN_TYPES` where + /// that table gives one. pub fn returns(&self) -> impl Iterator { - self.returns.split(',').filter(|r| !r.is_empty()) + let native = self.name; + self.returns.split(',').filter(|r| !r.is_empty()).map(move |ty| match ty { + "table" => RETURN_TYPES.iter().find(|(owner, _)| *owner == native).map_or(ty, |(_, ty)| ty), + _ => ty, + }) } - /// `(name, type)` pairs. - pub fn params(&self) -> impl Iterator { - self.params.split(',').filter_map(|p| p.split_once(':')) + /// `(name, type, optional)` triples. The table writes an optional parameter `name?`: the + /// pointer that the Lua wrapper takes as an initial value, which nil leaves 0. A function + /// parameter has the LuaCATS type of `CALLBACK_TYPES` where that table gives one. + pub fn params(&self) -> impl Iterator { + let native = self.name; + self.params.split(',').filter_map(|p| p.split_once(':')).map(move |(name, ty)| { + let (name, optional) = match name.strip_suffix('?') { + Some(name) => (name, true), + None => (name, false), + }; + let callback = CALLBACK_TYPES.iter().find(|(owner, param, _)| *owner == native && *param == name); + (name, callback.map_or(ty, |(_, _, ty)| ty), optional) + }) } pub fn signature(&self) -> String { - let params: Vec = self.params().map(|(n, t)| format!("{n}: {t}")).collect(); + let params: Vec = + self.params().map(|(n, t, optional)| format!("{n}{}: {t}", if optional { "?" } else { "" })).collect(); let returns: Vec<&str> = self.returns().collect(); let mut out = format!("function {}({})", self.name, params.join(", ")); if !returns.is_empty() { @@ -82,6 +117,51 @@ impl Native { } } +/// The LuaCATS types of the function parameters of natives, which the native data only calls +/// `function`, as their documentation describes the functions: `(native, parameter, type)`. The +/// classes they name are declared in the stubs. `RegisterRawNuiCallback` is left out, as nothing +/// documents what its callback receives. +pub static CALLBACK_TYPES: &[(&str, &str, &str)] = &[ + ("RegisterCommand", "handler", "fun(source: integer, args: string[], rawCommand: string)"), + ( + "AddStateBagChangeHandler", + "handler", + "fun(bagName: string, key: string, value: any, reserved: number, replicated: boolean)", + ), + ("AddConvarChangeListener", "handler", "fun(conVarName: string, reserved: any)"), + ("RegisterConsoleListener", "listener", "fun(channel: string, message: string)"), + ("SetHttpHandler", "handler", "fun(request: HttpHandlerRequest, response: HttpHandlerResponse)"), + ("RegisterNuiCallback", "callback", "fun(data: unknown, cb: fun(response: any))"), + ("RegisterRawKeymap", "onKeyDown", "fun()|nil"), + ("RegisterRawKeymap", "onKeyUp", "fun()|nil"), + ("ScanResourceRoot", "callback", "fun(results: table)"), + ("RegisterResourceBuildTaskFactory", "factoryFn", "fun(): ResourceBuildTask"), + ("RegisterArchetypes", "factory", "fun(): table[]"), +]; + +/// The LuaCATS types of the tables that natives return, which the native data only calls `table`: +/// `(native, type)`. Each is what the native serializes in the source of the runtime: a list of +/// handles, hashes or names, of `[a, b]` pairs, or of command objects. `GetStateBagValue` gives the +/// stored value itself, which may be of any type. +pub static RETURN_TYPES: &[(&str, &str)] = &[ + ("DoorSystemGetActive", "[Hash, Object][]"), + ("GetActivePlayers", "Player[]"), + ("GetAllObjects", "Object[]"), + ("GetAllPeds", "Ped[]"), + ("GetAllRopes", "integer[]"), + ("GetAllTrackJunctions", "integer[]"), + ("GetAllVehicleModels", "string[]"), + ("GetAllVehicles", "Vehicle[]"), + ("GetClosestTrackNodes", "[integer, integer][]"), + ("GetEntitiesInRadius", "Entity[]"), + ("GetGamePool", "Entity[]"), + ("GetPedDecorations", "[Hash, Hash][]"), + ("GetRegisteredCommands", "{ name: string, resource: string, arity: integer }[]"), + ("GetResourceCommands", "{ name: string, resource: string, arity: integer }[]"), + ("GetStateBagKeys", "string[]"), + ("GetStateBagValue", "any"), +]; + struct LineTable { text: &'static str, starts: Vec, @@ -171,17 +251,63 @@ pub fn native_docs(name: &str) -> Option { pub struct Stub { pub name: &'static str, pub side: Side, + /// Whether it declares Lua standard libraries rather than CfxLua additions. + pub library: bool, pub source: &'static str, } +const fn stub(name: &'static str, side: Side, library: bool, source: &'static str) -> Stub { + Stub { name, side, library, source } +} + +/// The runtime definitions. FiveM only opens the `io` and `os` libraries on the server +/// (`IS_FXSERVER` in citizen-scripting-lua's `LuaScriptRuntime.cpp`), so `lua54_server.lua` holds +/// them; stubs extending a table come after the one declaring it. pub static STUBS: &[Stub] = &[ - Stub { name: "lua54.lua", side: Side::Shared, source: include_str!("../stubs/lua54.lua") }, - Stub { name: "cfx.lua", side: Side::Shared, source: include_str!("../stubs/cfx.lua") }, - Stub { name: "glm.lua", side: Side::Shared, source: include_str!("../stubs/glm.lua") }, - Stub { name: "cfx_client.lua", side: Side::Client, source: include_str!("../stubs/cfx_client.lua") }, - Stub { name: "cfx_server.lua", side: Side::Server, source: include_str!("../stubs/cfx_server.lua") }, + stub("lua54.lua", Side::Shared, true, include_str!("../stubs/lua54.lua")), + stub("lua54_server.lua", Side::Server, true, include_str!("../stubs/lua54_server.lua")), + stub("cfx.lua", Side::Shared, false, include_str!("../stubs/cfx.lua")), + stub("glm.lua", Side::Shared, false, include_str!("../stubs/glm.lua")), + stub("cfx_client.lua", Side::Client, false, include_str!("../stubs/cfx_client.lua")), + stub("cfx_server.lua", Side::Server, false, include_str!("../stubs/cfx_server.lua")), + stub("cfx_events.lua", Side::Shared, false, EVENTS_STUB), ]; +static EVENTS_STUB: &str = include_str!("../stubs/cfx_events.lua"); + +/// An event that FiveM itself triggers, such as `onResourceStop` or `playerDropped`. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct BuiltinEvent { + pub name: &'static str, + /// The only side that triggers it, or `Shared` when both do. + pub side: Side, +} + +/// The events that FiveM itself triggers, as the `---@field` lines of the `CfxEvents` class in +/// `cfx_events.lua` declare them: a `(client)` or `(server)` before the name scopes one to that side. +pub fn builtin_events() -> &'static [BuiltinEvent] { + static EVENTS: OnceLock> = OnceLock::new(); + EVENTS.get_or_init(|| { + let class = EVENTS_STUB.lines().skip_while(|line| *line != "---@class CfxEvents").skip(1); + class + .map_while(|line| line.strip_prefix("---@field ")) + .filter_map(|field| { + let (side, field) = match field.split_once(") ") { + Some(("(client", rest)) => (Side::Client, rest), + Some(("(server", rest)) => (Side::Server, rest), + _ => (Side::Shared, field), + }; + Some(BuiltinEvent { name: field.split(' ').next()?, side }) + }) + .collect() + }) +} + +/// The event `name` when FiveM itself triggers it. +pub fn builtin_event(name: &str) -> Option { + builtin_events().iter().find(|event| event.name == name).copied() +} + pub struct KnownImport { pub path: &'static str, pub globals: &'static [&'static str], @@ -226,12 +352,76 @@ mod tests { fn looks_up_natives() { let native = native("GetEntityCoords").unwrap(); assert_eq!(native.returns().collect::>(), ["vector3"]); - assert_eq!(native.params().next(), Some(("entity", "Entity"))); + assert_eq!(native.params().next(), Some(("entity", "Entity", false))); assert_eq!(super::native("GetPlayerIdentifier").unwrap().side, Side::Server); assert!(super::native("NotARealNative").is_none()); assert!(native_count() > 6000); } + #[test] + fn server_natives_keep_their_own_signature() { + let vehicles = native("GetAllVehicles").unwrap(); + assert_eq!(vehicles.on(Some(Side::Client)).returns().collect::>(), ["integer", "integer"]); + assert_eq!(vehicles.on(None).returns().collect::>(), ["integer", "integer"]); + let server = vehicles.on(Some(Side::Server)); + assert_eq!(server.returns().collect::>(), ["Vehicle[]"]); + assert_eq!((server.side, server.namespace, server.hash), (Side::Server, "CFX", "0x332169F5")); + let weapon = native("GetCurrentPedWeapon").unwrap().on(Some(Side::Server)); + assert_eq!(weapon.signature(), "function GetCurrentPedWeapon(ped: Ped): Hash"); + // A native without a server signature of its own is the same everywhere. + let health = native("GetEntityHealth").unwrap(); + assert_eq!(health.on(Some(Side::Server)).hash, health.hash); + } + + #[test] + fn pointers_follow_the_lua_wrappers() { + let shape = |name: &str| { + let native = native(name).unwrap(); + (native.params().collect::>(), native.returns().collect::>()) + }; + // Two pointers: both are returned, neither is an argument. + assert_eq!(shape("GetGroupSize"), (vec![("groupID", "integer", false)], vec!["integer", "integer"])); + // The one pointer, last: an optional initial value, and returned. + assert_eq!( + shape("GetEntityPlayerIsFreeAimingAt"), + (vec![("player", "Player", false), ("entity", "Entity", true)], vec!["boolean", "Entity"]) + ); + // A native that releases the handle it is given needs one. + assert_eq!(shape("DeleteEntity"), (vec![("entity", "Entity", false)], vec!["Entity"])); + let server = native("DeleteEntity").unwrap().on(Some(Side::Server)); + assert_eq!(server.returns().count(), 0, "the server native takes the handle itself"); + // The wrapper reads an Any* as an integer, and passes none it does not take. + assert_eq!(shape("DataarrayGetInt"), (vec![("arrayIndex", "integer", false)], vec!["integer", "integer"])); + assert_eq!( + native("GetEntityPlayerIsFreeAimingAt").unwrap().signature(), + "function GetEntityPlayerIsFreeAimingAt(player: Player, entity?: Entity): boolean, Entity" + ); + } + + #[test] + fn callback_types_name_function_parameters() { + for (name, param, ty) in CALLBACK_TYPES { + let native = native(name).unwrap_or_else(|| panic!("{name} is no native")); + let declared = native.params.split(',').filter_map(|p| p.split_once(':')).find(|(n, _)| n == param); + assert_eq!(declared.map(|(_, ty)| ty), Some("function"), "{name}({param})"); + assert!(native.params().any(|(n, t, _)| n == *param && t == *ty)); + } + } + + #[test] + fn return_types_name_tables_that_natives_return() { + for (name, ty) in RETURN_TYPES { + let native = native(name).unwrap_or_else(|| panic!("{name} is no native")); + let returns = native.server.map_or(native.returns, |(_, server, _)| server); + assert!( + native.returns.split(',').chain(returns.split(',')).any(|r| r == "table"), + "{name} returns no table" + ); + let side = native.server.map(|_| Side::Server); + assert!(native.on(side).returns().any(|r| r == *ty), "{name}"); + } + } + #[test] fn natives_are_sorted_for_binary_search() { let names: Vec<&str> = natives().map(|n| n.name).collect(); @@ -246,6 +436,21 @@ mod tests { assert!(!is_hash_native_name("Foo")); } + #[test] + fn builtin_events_keep_their_side() { + let side = |name| builtin_event(name).map(|event| event.side); + assert_eq!(side("onResourceStop"), Some(Side::Shared)); + assert_eq!(side("onClientResourceStart"), Some(Side::Client)); + assert_eq!(side("playerDropped"), Some(Side::Server)); + assert_eq!(side("rconCommand"), Some(Side::Server)); + for name in ["explosionEvent", "fireEvent", "serverEntityCreated", "onPedDeath", "stopNetworkSyncedSceneEvent"] + { + assert_eq!(side(name), Some(Side::Server), "{name}"); + } + assert_eq!(side("setModel"), None, "the fields of other classes are no events"); + assert_eq!(builtin_events().len(), 46); + } + #[cfg(feature = "docs")] #[test] fn docs_are_unescaped() { diff --git a/crates/qbx_fivem_data/stubs/cfx.lua b/crates/qbx_fivem_data/stubs/cfx.lua index 00865f5..765eaff 100644 --- a/crates/qbx_fivem_data/stubs/cfx.lua +++ b/crates/qbx_fivem_data/stubs/cfx.lua @@ -3,17 +3,20 @@ ---@class CitizenLib Citizen = {} ----Suspends the current scheduler thread for at least `msec` milliseconds; 0 resumes on the next tick. Only valid inside a thread created by the scheduler. ----@param msec integer +---Suspends the current scheduler thread for at least `msec` milliseconds; 0 or none resumes on the next tick. Only valid inside a thread created by the scheduler. +---@param msec? integer function Citizen.Wait(msec) end ----Queues `handler` as a new scheduler thread (coroutine) that starts on the next tick. +---Queues `handler` as a new scheduler thread (coroutine) that starts on the next tick, and returns an id that `Citizen.ClearTimeout` cancels it with before it starts. ---@param handler fun() +---@return integer threadId function Citizen.CreateThread(handler) end ----Creates a scheduler thread and runs it immediately up to its first yield, instead of waiting for the next tick. +---Creates a scheduler thread and runs it immediately up to its first yield, instead of waiting for the next tick. Returns whether the thread yielded, so that it is still running. `name` names the thread in profiler and error output. ---@param handler fun() -function Citizen.CreateThreadNow(handler) end +---@param name? string +---@return boolean yielded +function Citizen.CreateThreadNow(handler, name) end ---Runs `callback` once in a new thread after `msec` milliseconds and returns a timer id usable with `Citizen.ClearTimeout`. ---@param msec integer @@ -21,8 +24,9 @@ function Citizen.CreateThreadNow(handler) end ---@return integer timerId function Citizen.SetTimeout(msec, callback) end ----Cancels a pending timer created by `Citizen.SetTimeout`. +---Cancels a pending timer created by `Citizen.SetTimeout`, or a thread created by `Citizen.CreateThread` that has not started yet. Returns whether one was cancelled. ---@param timerId integer +---@return boolean removed function Citizen.ClearTimeout(timerId) end ---Yields the current thread until the promise settles. Returns the resolved value, or raises the rejection value as an error. @@ -30,8 +34,8 @@ function Citizen.ClearTimeout(timerId) end ---@return any ... function Citizen.Await(p) end ----Writes raw text to the console/log without appending a newline. ----@param text string +---Writes raw text to the console/log without appending a newline. A number is written as text. +---@param text string|number function Citizen.Trace(text) end ---Calls a game native by hash. Arguments may include the pointer and result marker values produced by the other `Citizen.*` helpers. @@ -144,11 +148,12 @@ function Citizen.SetTickRoutine(routine) end function Citizen.SetEventRoutine(routine) end ---Alias of `Citizen.Wait`. ----@param msec integer +---@param msec? integer function Wait(msec) end ---Alias of `Citizen.CreateThread`. ---@param handler fun() +---@return integer threadId function CreateThread(handler) end ---Alias of `Citizen.SetTimeout`. @@ -159,6 +164,7 @@ function SetTimeout(msec, callback) end ---Alias of `Citizen.ClearTimeout`. ---@param timerId integer +---@return boolean removed function ClearTimeout(timerId) end ---Handle returned by `AddEventHandler`; pass it to `RemoveEventHandler` to unregister the handler. @@ -186,9 +192,10 @@ function RemoveEventHandler(eventData) end ---Marks the event as safe to receive over the network. When `handler` is given it is also registered and its handle returned. ---@param eventName string ----@param handler? fun(...: any) ----@return EventHandlerData? eventData ----@overload fun(eventName: string) +---@param handler fun(...: any) +---@return EventHandlerData eventData +---@overload fun(eventName: string): nil +---@overload fun(eventName: string, handler?: fun(...: any)): EventHandlerData? function RegisterNetEvent(eventName, handler) end ---Old name of `RegisterNetEvent`. @@ -249,15 +256,17 @@ json.null = {} ---@nodiscard function json.encode(value, state) end ----Parses a JSON string starting at `pos`. Returns the value, or nil with the failing position and an error message. `nullval` replaces JSON null. +---Parses a JSON string starting at `pos`. Returns the value, or nil with the failing position and an error message. `nullval` replaces JSON null, and `objectmeta` and `arraymeta` become the metatables of the decoded objects and arrays. ---@param str string ---@param pos? integer ---@param nullval? any +---@param objectmeta? table +---@param arraymeta? table ---@return any value ---@return integer? nextPos ---@return string? err ---@nodiscard -function json.decode(str, pos, nullval) end +function json.decode(str, pos, nullval, objectmeta, arraymeta) end ---Returns the value of a global encoding/decoding option. ---@param option json_options @@ -318,11 +327,14 @@ function msgpack.pack(...) end ---@nodiscard function msgpack.pack_args(...) end ----Decodes a MessagePack byte string and returns every value it contains. +---Decodes a MessagePack byte string and returns every value it contains, or up to `limit` values from `position` on, as far as `endPosition`. ---@param data string +---@param position? integer +---@param limit? integer +---@param endPosition? integer ---@return any ... ---@nodiscard -function msgpack.unpack(data) end +function msgpack.unpack(data, position, limit, endPosition) end ---Decodes up to `limit` values starting at `position` and returns where decoding stopped, 0 at the end of the string, followed by the values. ---@param data string @@ -503,6 +515,9 @@ function promise:next(onFulfilled, onRejected) end ---A vector of any size. ---@alias vector vector2|vector3|vector4 +---A string that holds an SQL query. Editors highlight the query in calls of a function whose first parameter has this type. +---@alias sql string + ---Quaternion value type. Multiplying by a vector3 rotates that vector. ---@class quat ---@field x number @@ -515,36 +530,47 @@ function promise:next(onFulfilled, onRejected) end ---@operator unm: quat ---@operator len: number ----Creates a vector2. +---Creates a vector2. Its components can also come from vectors, as in `vector2(v3)`, from a +---table, or from one number for all of them. ---@param x number ---@param y number ---@return vector2 v +---@overload fun(...: number|vector2|vector3|vector4|table): vector2 ---@nodiscard function vector2(x, y) end ----Creates a vector3. +---Creates a vector3. Its components can also come from vectors, as in `vector3(xy, z)`, from a +---table, or from one number for all of them. ---@param x number ---@param y number ---@param z number ---@return vector3 v +---@overload fun(...: number|vector2|vector3|vector4|table): vector3 ---@nodiscard function vector3(x, y, z) end ----Creates a vector4. +---Creates a vector4. Its components can also come from vectors, as in `vector4(coords, heading)`, from a +---table, or from one number for all of them. ---@param x number ---@param y number ---@param z number ---@param w number ---@return vector4 v +---@overload fun(...: number|vector2|vector3|vector4|table): vector4 ---@nodiscard function vector4(x, y, z, w) end ----Creates a quaternion. Note that the scalar part `w` comes first. +---Creates a quaternion. Note that the scalar part `w` comes first. It also takes an angle in degrees +---and the axis to rotate around, two directions to rotate the first into the second, or Euler +---angles in radians. ---@param w number ---@param x number ---@param y number ---@param z number ---@return quat q +---@overload fun(angle: number, axis: vector3): quat +---@overload fun(from: vector3, to: vector3): quat +---@overload fun(euler: vector3): quat ---@nodiscard function quat(w, x, y, z) end @@ -552,6 +578,7 @@ function quat(w, x, y, z) end ---@param x number ---@param y number ---@return vector2 v +---@overload fun(...: number|vector2|vector3|vector4|table): vector2 ---@nodiscard function vec2(x, y) end @@ -560,6 +587,7 @@ function vec2(x, y) end ---@param y number ---@param z number ---@return vector3 v +---@overload fun(...: number|vector2|vector3|vector4|table): vector3 ---@nodiscard function vec3(x, y, z) end @@ -569,6 +597,7 @@ function vec3(x, y, z) end ---@param z number ---@param w number ---@return vector4 v +---@overload fun(...: number|vector2|vector3|vector4|table): vector4 ---@nodiscard function vec4(x, y, z, w) end @@ -589,7 +618,8 @@ function vec(...) end function norm(v) end ---Computes the Jenkins one-at-a-time hash of `str`, the same value game natives use for model and asset names. ----@param str string +---An integer is returned as it is. +---@param str string|integer ---@return integer hash ---@nodiscard function joaat(str) end @@ -656,48 +686,39 @@ function string.strconcat(...) end ---Creates a table with preallocated array and hash parts. CfxLua extension. ---@param narr integer ----@param nrec? integer +---@param nrec integer ---@return table function table.create(narr, nrec) end +---Same as `table.create`. CfxLua extension. +---@param narr integer +---@param nrec integer +---@return table +function table.new(narr, nrec) end + ---Removes every key from the table and returns it. CfxLua extension. ---@generic T: table ---@param t T ---@return T function table.wipe(t) end ----Describes the table layout: "empty", "array", "hash" or "mixed". CfxLua extension. +---Same as `table.wipe`. CfxLua extension. +---@generic T: table +---@param t T +---@return T +function table.clear(t) end + +---Describes the table layout. CfxLua extension. ---@param t table ----@return string +---@return 'empty'|'array'|'hash'|'mixed' function table.type(t) end ----Returns a timestamp in microseconds. CfxLua extension. ----@return integer -function os.microtime() end - ----Returns a timestamp in nanoseconds. CfxLua extension. ----@return integer -function os.nanotime() end - ----Returns the difference between two timestamps. CfxLua extension. ----@param a integer ----@param b integer ----@return integer -function os.deltatime(a, b) end - ----Returns the processor time stamp counter. CfxLua extension. ----@return integer -function os.rdtsc() end - ----Returns the processor time stamp counter, serialized. CfxLua extension. ----@return integer -function os.rdtscp() end - ----Returns a shallow copy of the table. CfxLua extension. +---Returns a shallow copy of the table, written into `destination` when one is given. CfxLua extension. ---@generic T: table ---@param t T +---@param destination? table ---@return T -function table.clone(t) end +function table.clone(t, destination) end ---Converts every argument to a string and returns them all. CfxLua extension. ---@param ... any @@ -709,10 +730,232 @@ function string.tostringall(...) end ---@return string function string.blob(length) end ----Lists the entries of a directory. CfxLua extension, server only in practice. ----@param path string ----@return string[] -function io.readdir(path) end +---The difference between 1 and the next larger number. CfxLua extension. +---@type number +math.eps = 2.220446049250313e-16 + +---The difference between 1 and the next larger single-precision float. CfxLua extension. +---@type number +math.feps = 1.1920928955078125e-07 + +---Returns the inverse hyperbolic cosine of `x`. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.acosh(x) end + +---Returns the inverse hyperbolic sine of `x`. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.asinh(x) end + +---Returns the arc tangent of `y / x` in radians, using both signs to pick the quadrant. `x` defaults to 1. CfxLua extension. +---@param y number +---@param x? number +---@return number result +---@nodiscard +function math.atan2(y, x) end + +---Returns the inverse hyperbolic tangent of `x`. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.atanh(x) end + +---Returns the cube root of `x`. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.cbrt(x) end + +---Returns `x` limited to the range from `min` to `max`, per component for vectors. CfxLua extension. +---@param x number +---@param min number +---@param max number +---@return number result +---@overload fun(x: vector2, min: vector2, max: vector2): vector2 +---@overload fun(x: vector3, min: vector3, max: vector3): vector3 +---@overload fun(x: vector4, min: vector4, max: vector4): vector4 +---@nodiscard +function math.clamp(x, min, max) end + +---Returns `x` with the sign of `y`. CfxLua extension. +---@param x number +---@param y number +---@return number result +---@nodiscard +function math.copysign(x, y) end + +---Returns the hyperbolic cosine of `x`. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.cosh(x) end + +---Returns the error function of `x`. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.erf(x) end + +---Returns the complementary error function of `x`. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.erfc(x) end + +---Returns 2 raised to the power `x`. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.exp2(x) end + +---Returns e raised to the power `x`, minus 1. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.expm1(x) end + +---Returns `x - y` when it is positive, otherwise 0. CfxLua extension. +---@param x number +---@param y number +---@return number result +---@nodiscard +function math.fdim(x, y) end + +---Splits `x` into a mantissa in [0.5, 1) and an exponent of 2. CfxLua extension. +---@param x number +---@return number mantissa +---@return integer exponent +---@nodiscard +function math.frexp(x) end + +---Returns the gamma function of `x`. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.gamma(x) end + +---Returns the length of the hypotenuse of a right triangle with sides `x` and `y`. CfxLua extension. +---@param x number +---@param y number +---@return number result +---@nodiscard +function math.hypot(x, y) end + +---Returns whether `x` is neither infinite nor NaN. CfxLua extension. +---@param x number +---@return boolean result +---@nodiscard +function math.isfinite(x) end + +---Returns whether `x` is infinite. CfxLua extension. +---@param x number +---@return boolean result +---@nodiscard +function math.isinf(x) end + +---Returns whether `x` is NaN. CfxLua extension. +---@param x number +---@return boolean result +---@nodiscard +function math.isnan(x) end + +---Returns whether `x` is a normal number: not zero, subnormal, infinite or NaN. CfxLua extension. +---@param x number +---@return boolean result +---@nodiscard +function math.isnormal(x) end + +---Returns `m` multiplied by 2 raised to the power `e`. CfxLua extension. +---@param m number +---@param e integer +---@return number result +---@nodiscard +function math.ldexp(m, e) end + +---Returns the natural logarithm of the absolute value of the gamma function of `x`. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.lgamma(x) end + +---Returns the base-10 logarithm of `x`. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.log10(x) end + +---Returns the natural logarithm of 1 plus `x`. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.log1p(x) end + +---Returns the exponent of `x` in base 2, as a float. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.logb(x) end + +---Returns `x` rounded to an integral value, halfway cases to even, as a float. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.nearbyint(x) end + +---Returns the next representable number after `x` in the direction of `y`. CfxLua extension. +---@param x number +---@param y number +---@return number result +---@nodiscard +function math.nextafter(x, y) end + +---Returns `x` raised to the power `y`. CfxLua extension. +---@param x number +---@param y number +---@return number result +---@nodiscard +function math.pow(x, y) end + +---Returns the remainder of `x / y` with the quotient rounded to the nearest integer. CfxLua extension. +---@param x number +---@param y number +---@return number result +---@nodiscard +function math.remainder(x, y) end + +---Returns `x` rounded to an integral value, halfway cases away from zero, as a float. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.round(x) end + +---Returns `x` multiplied by 2 raised to the power `n`. CfxLua extension. +---@param x number +---@param n integer +---@return number result +---@nodiscard +function math.scalbn(x, n) end + +---Returns the hyperbolic sine of `x`. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.sinh(x) end + +---Returns the hyperbolic tangent of `x`. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.tanh(x) end + +---Returns `x` with its fractional part removed, as a float. CfxLua extension. +---@param x number +---@return number result +---@nodiscard +function math.trunc(x) end ---Builds a vector from its arguments; the result type depends on how many numbers are passed. ---@param ... number diff --git a/crates/qbx_fivem_data/stubs/cfx_client.lua b/crates/qbx_fivem_data/stubs/cfx_client.lua index c6d432b..466b32e 100644 --- a/crates/qbx_fivem_data/stubs/cfx_client.lua +++ b/crates/qbx_fivem_data/stubs/cfx_client.lua @@ -2,12 +2,12 @@ ---Registers a handler for NUI fetch requests sent to `https:///`. The handler receives the decoded request body and a reply function that must be called once. ---@param name string ----@param cb fun(data: any, cb: fun(response: any)) +---@param cb fun(data: unknown, cb: fun(response: any)) function RegisterNUICallback(name, cb) end ---Alternative spelling of `RegisterNUICallback`. ---@param name string ----@param cb fun(data: any, cb: fun(response: any)) +---@param cb fun(data: unknown, cb: fun(response: any)) function RegisterNuiCallback(name, cb) end ---JSON-encodes `message` and posts it to this resource's NUI page, where it arrives as a window `message` event. diff --git a/crates/qbx_fivem_data/stubs/cfx_events.lua b/crates/qbx_fivem_data/stubs/cfx_events.lua new file mode 100644 index 0000000..1ef1e33 --- /dev/null +++ b/crates/qbx_fivem_data/stubs/cfx_events.lua @@ -0,0 +1,256 @@ +---@meta + +---The events that FiveM itself triggers. Each field is the handler that `AddEventHandler` registers +---for the event of its name; `(client)` and `(server)` name the only side that triggers it. +---@class CfxEvents +---@field onResourceStart fun(resourceName: string) # Triggered immediately when a resource has started. [Docs](https://docs.fivem.net/docs/scripting-reference/events/list/onResourceStart/) +---@field onResourceStarting fun(resourceName: string) # Triggered when a resource is trying to start; `CancelEvent()` prevents it from starting. [Docs](https://docs.fivem.net/docs/scripting-reference/events/list/onResourceStarting/) +---@field onResourceStop fun(resourceName: string) # Triggered immediately when a resource is stopping. [Docs](https://docs.fivem.net/docs/scripting-reference/events/list/onResourceStop/) +---@field (client) onClientResourceStart fun(resourceName: string) # Queued after a resource has started. [Docs](https://docs.fivem.net/docs/scripting-reference/events/list/onClientResourceStart/) +---@field (client) onClientResourceStop fun(resourceName: string) # Triggered after a resource has stopped. [Docs](https://docs.fivem.net/docs/scripting-reference/events/list/onClientResourceStop/) +---@field (client) gameEventTriggered fun(name: string, data: integer[]) # Triggered when the game triggers an internal network event, such as `CEventNetworkEntityDamage`, with its type-specific data. [Docs](https://docs.fivem.net/docs/scripting-reference/events/list/gameEventTriggered/) +---@field (client) entityDamaged fun(victim: integer, culprit: integer, weapon: integer, baseDamage: number) # Triggered when an entity is damaged locally; `victim` and `culprit` are 0 when there is none, and `weapon` is a weapon hash. [Docs](https://docs.fivem.net/docs/scripting-reference/events/client-events/#entitydamaged) +---@field (client) mumbleConnected fun(address: string, reconnecting: boolean) # Triggered when the game completes (re)connecting to a Mumble server. [Docs](https://docs.fivem.net/docs/scripting-reference/events/client-events/#mumbleconnected) +---@field (client) mumbleDisconnected fun(address: string) # Triggered when the game disconnects from a Mumble server without being reconnected. [Docs](https://docs.fivem.net/docs/scripting-reference/events/client-events/#mumbledisconnected) +---@field (client) populationPedCreating fun(x: number, y: number, z: number, model: integer, overrideCalls: PopulationPedOverrides) # Triggered when the population system is creating a ped; `CancelEvent()` stops it, and `overrideCalls` changes its model or position. [Docs](https://docs.fivem.net/docs/scripting-reference/events/list/populationPedCreating/) +---@field (server) onServerResourceStart fun(resourceName: string) # Queued after a resource has started. [Docs](https://docs.fivem.net/docs/scripting-reference/events/server-events/#onserverresourcestart) +---@field (server) onServerResourceStop fun(resourceName: string) # Triggered after a resource has stopped. [Docs](https://docs.fivem.net/docs/scripting-reference/events/server-events/#onserverresourcestop) +---@field (server) onResourceListRefresh fun() # Triggered when the `refresh` command completes. [Docs](https://docs.fivem.net/docs/scripting-reference/events/server-events/#onresourcelistrefresh) +---@field (server) playerConnecting fun(playerName: string, setKickReason: fun(reason: string), deferrals: PlayerConnectingDeferrals) # Triggered when a player is trying to connect; `source` is their temporary id. `CancelEvent()` refuses them with the reason given to `setKickReason`. [Docs](https://docs.fivem.net/docs/scripting-reference/events/list/playerConnecting/) +---@field (server) playerJoining fun(oldID: string) # Triggered when a player has their final server id, which `source` holds; `oldID` is the temporary id of `playerConnecting`. [Docs](https://docs.fivem.net/docs/scripting-reference/events/server-events/#playerjoining) +---@field (server) playerDropped fun(reason: string, resourceName: string, clientDropReason: integer) # Triggered when a player leaves the server; `source` is the player. [Docs](https://docs.fivem.net/docs/scripting-reference/events/list/playerDropped/) +---@field (server) playerEnteredScope fun(data: PlayerScopeData) # Triggered when a player enters the scope of another player. [Docs](https://docs.fivem.net/docs/scripting-reference/events/server-events/#playerenteredscope) +---@field (server) playerLeftScope fun(data: PlayerScopeData) # Triggered when a player leaves the scope of another player. [Docs](https://docs.fivem.net/docs/scripting-reference/events/server-events/#playerleftscope) +---@field (server) entityCreating fun(handle: integer) # Triggered when an entity is being created; `CancelEvent()` stops it. [Docs](https://docs.fivem.net/docs/scripting-reference/events/server-events/#entitycreating) +---@field (server) entityCreated fun(handle: integer) # Triggered when an entity has been created. [Docs](https://docs.fivem.net/docs/scripting-reference/events/server-events/#entitycreated) +---@field (server) serverEntityCreated fun(handle: integer) # Triggered when a server script has created an entity, which may have no network owner yet. +---@field (server) entityRemoved fun(entity: integer) # Triggered when an entity is removed. [Docs](https://docs.fivem.net/docs/scripting-reference/events/server-events/#entityremoved) +---@field (server) onPedHealthChanged fun(ped: integer, oldHealth: integer, health: integer, oldArmour: integer, armour: integer, attacker: integer, weaponHash: integer) # Triggered when the health or armour of a ped changes; `attacker` and `weaponHash` are 0 when unknown. +---@field (server) onPedDeath fun(ped: integer, attacker: integer, weaponHash: integer) # Triggered when a ped dies; `attacker` and `weaponHash` are 0 when unknown. +---@field (server) onEntityBucketChange fun(entity: integer, bucket: integer, oldBucket: integer) # Triggered when an entity moves to another routing bucket. [Docs](https://docs.fivem.net/docs/scripting-reference/events/list/onEntityBucketChange/) +---@field (server) onPlayerBucketChange fun(player: string, bucket: integer, oldBucket: integer) # Triggered when a player moves to another routing bucket. [Docs](https://docs.fivem.net/docs/scripting-reference/events/list/onPlayerBucketChange/) +---@field (server) weaponDamageEvent fun(sender: string, data: WeaponDamageEventData) # Triggered when a client wants to damage an entity that another player owns; `CancelEvent()` blocks the damage. [Docs](https://docs.fivem.net/docs/scripting-reference/events/server-events/#weapondamageevent) +---@field (server) weaponDamageReply fun(sender: string, data: WeaponDamageReplyData) # Triggered when a client answers a `weaponDamageEvent` with the health of the entity hit. +---@field (server) startProjectileEvent fun(sender: string, data: StartProjectileEventData) # Triggered when a client creates a projectile; `CancelEvent()` blocks it. [Docs](https://docs.fivem.net/docs/scripting-reference/events/server-events/#startprojectileevent) +---@field (server) ptFxEvent fun(sender: string, data: PtFxEventData) # Triggered when a client creates a particle effect; `CancelEvent()` blocks it. [Docs](https://docs.fivem.net/docs/scripting-reference/events/server-events/#ptfxevent) +---@field (server) fireEvent fun(sender: string, data: [FireEventFire[]]) # Triggered when a client starts fires; `CancelEvent()` blocks them. +---@field (server) explosionEvent fun(sender: string, data: ExplosionEventData) # Triggered when a client creates an explosion; `CancelEvent()` blocks it. +---@field (server) removeAllWeaponsEvent fun(sender: string, data: RemoveAllWeaponsEventData) # Triggered when a client removes all weapons from a ped that another player owns; `CancelEvent()` blocks it. [Docs](https://docs.fivem.net/docs/scripting-reference/events/server-events/#removeallweaponsevent) +---@field (server) giveWeaponEvent fun(sender: string, data: GiveWeaponEventData) # Triggered when a client gives a weapon to a ped that another player owns; `CancelEvent()` blocks it. +---@field (server) removeWeaponEvent fun(sender: string, data: RemoveWeaponEventData) # Triggered when a client removes a weapon from a ped that another player owns; `CancelEvent()` blocks it. +---@field (server) clearPedTasksEvent fun(sender: string, data: ClearPedTasksEventData) # Triggered when a client clears the tasks of a ped that another player owns; `CancelEvent()` blocks it. +---@field (server) givePedScriptedTaskEvent fun(sender: string, data: GivePedScriptedTaskEventData) # Triggered when a client gives a scripted task to a ped that another player owns; `CancelEvent()` blocks it. +---@field (server) respawnPlayerPedEvent fun(sender: string, data: RespawnPlayerPedEventData) # Triggered when a player respawns. Needs OneSync. [Docs](https://docs.fivem.net/docs/scripting-reference/events/list/respawnPlayerPedEvent/) +---@field (server) respawnPlayerPedReply fun(sender: string, data: RespawnPlayerPedReplyData) # Triggered when a client answers a `respawnPlayerPedEvent`. +---@field (server) vehicleComponentControlEvent fun(sender: string, data: VehicleComponentControlEventData) # Triggered when a ped takes control of a component of a vehicle, such as a seat. Needs OneSync. [Docs](https://docs.fivem.net/docs/scripting-reference/events/list/vehicleComponentControlEvent/) +---@field (server) vehicleComponentControlReply fun(sender: string, data: VehicleComponentControlReplyData) # Triggered when a client answers a `vehicleComponentControlEvent`. +---@field (server) requestNetworkSyncedSceneEvent fun(sender: string, data: NetworkSyncedSceneEventData) # Triggered when a client asks to start a synchronised scene; `CancelEvent()` blocks it. +---@field (server) startNetworkSyncedSceneEvent fun(sender: string, data: StartNetworkSyncedSceneEventData) # Triggered when a client starts a synchronised scene; `CancelEvent()` blocks it. +---@field (server) updateNetworkSyncedSceneEvent fun(sender: string, data: UpdateNetworkSyncedSceneEventData) # Triggered when a client changes the rate of a synchronised scene; `CancelEvent()` blocks it. +---@field (server) stopNetworkSyncedSceneEvent fun(sender: string, data: NetworkSyncedSceneEventData) # Triggered when a client stops a synchronised scene; `CancelEvent()` blocks it. +---@field (server) rconCommand fun(command: string, arguments: string[]) # Deprecated: use `RegisterCommand` with `restricted` instead. Triggered when a command is executed over RCON. [Docs](https://docs.fivem.net/docs/scripting-reference/events/list/rconCommand/) + +---The functions of `populationPedCreating` that change the ped being created. +---@class PopulationPedOverrides +---@field setModel fun(model: string|integer) # Creates the ped with this model, a name or hash. +---@field setPosition fun(x: number, y: number, z: number) # Creates the ped at this position. + +---Controls the connection of a player from `playerConnecting`. [Docs](https://docs.fivem.net/docs/scripting-reference/events/list/playerConnecting/#deferring-connections) +---@class PlayerConnectingDeferrals +---@field defer fun() # Holds the connection until `done` is called. Wait a tick before calling the other functions. +---@field update fun(message: string) # Shows a progress message to the connecting player. +---@field presentCard fun(card: string|table, cb?: fun(data: any, rawData: string)) # Shows an Adaptive Card, given as a table or as JSON, and calls `cb` when the player submits it. +---@field handover fun(data: table) # Passes data to the connecting client. +---@field done fun(failureReason?: string) # Lets the player connect, or refuses them with `failureReason`. + +---The players of `playerEnteredScope` and `playerLeftScope`, as server ids. +---@class PlayerScopeData +---@field for string # The player whose scope the other player entered or left. +---@field player string # The player that entered or left the scope. + +---What a client sends with `weaponDamageEvent`. Some fields differ between game builds. +---@class WeaponDamageEventData +---@field damageType integer +---@field weaponType integer # The hash of the weapon. +---@field weaponDamage number +---@field damageFlags integer +---@field damageTime integer +---@field willKill boolean +---@field hitGlobalId integer # The network id of the entity hit. +---@field hitGlobalIds integer[] # The network ids of the entities hit. +---@field hitComponent integer +---@field parentGlobalId integer # The network id of the entity that deals the damage. +---@field overrideDefaultDamage boolean +---@field hitEntityWeapon boolean +---@field hitWeaponAmmoAttachment boolean +---@field silenced boolean +---@field hasActionResult boolean +---@field actionResultName integer +---@field actionResultId integer +---@field isNetTargetPos boolean +---@field localPosX number +---@field localPosY number +---@field localPosZ number +---@field hasVehicleData boolean +---@field tyreIndex integer +---@field suspensionIndex integer +---@field hasImpactDir boolean +---@field impactDirX number +---@field impactDirY number +---@field impactDirZ number +---@field [string] any + +---What a client answers a `weaponDamageEvent` with. +---@class WeaponDamageReplyData +---@field health integer # The health of the entity hit. +---@field time integer +---@field f131 boolean + +---What a client sends with `startProjectileEvent`. +---@class StartProjectileEventData +---@field ownerId integer # The network id of the entity that fires. +---@field projectileHash integer +---@field weaponHash integer +---@field initialPositionX number +---@field initialPositionY number +---@field initialPositionZ number +---@field firePositionX number +---@field firePositionY number +---@field firePositionZ number +---@field targetEntity integer +---@field effectGroup integer +---@field commandFireSingleBullet boolean +---@field throwTaskSequence integer +---@field [string] any + +---What a client sends with `ptFxEvent`. +---@class PtFxEventData +---@field effectHash integer +---@field assetHash integer +---@field posX number +---@field posY number +---@field posZ number +---@field offsetX number +---@field offsetY number +---@field offsetZ number +---@field rotX number +---@field rotY number +---@field rotZ number +---@field scale number +---@field axisBitset integer +---@field isOnEntity boolean +---@field entityNetId integer +---@field [string] any + +---A fire that a client starts with `fireEvent`. +---@class FireEventFire +---@field isEntity boolean # Whether the fire burns on an entity. +---@field entityGlobalId integer # The network id of the entity that burns, or 0. +---@field posX number +---@field posY number +---@field posZ number +---@field maxChildren integer +---@field weaponHash integer # The hash of the weapon that started the fire, or 0. +---@field fireId integer +---@field [string] any + +---What a client sends with `explosionEvent`. +---@class ExplosionEventData +---@field ownerNetId integer # The network id of the entity that causes the explosion. +---@field explosionType integer +---@field damageScale number +---@field posX number +---@field posY number +---@field posZ number +---@field cameraShake number +---@field isAudible boolean +---@field isInvisible boolean +---@field [string] any + +---What a client sends with `removeAllWeaponsEvent`. +---@class RemoveAllWeaponsEventData +---@field pedId integer # The network id of the ped. + +---What a client sends with `giveWeaponEvent`. +---@class GiveWeaponEventData +---@field pedId integer # The network id of the ped. +---@field weaponType integer # The hash of the weapon. +---@field ammo integer +---@field unk1 boolean # Whether `ammo` is negative. +---@field givenAsPickup boolean + +---What a client sends with `removeWeaponEvent`. +---@class RemoveWeaponEventData +---@field pedId integer # The network id of the ped. +---@field weaponType integer # The hash of the weapon. + +---What a client sends with `clearPedTasksEvent`. +---@class ClearPedTasksEventData +---@field pedId integer # The network id of the ped. +---@field immediately boolean + +---What a client sends with `givePedScriptedTaskEvent`. +---@class GivePedScriptedTaskEventData +---@field entityNetId integer # The network id of the ped. +---@field taskId integer + +---What a client sends with `respawnPlayerPedEvent`. Some fields differ between game builds. +---@class RespawnPlayerPedEventData +---@field posX number +---@field posY number +---@field posZ number +---@field [string] any + +---What a client answers a `respawnPlayerPedEvent` with. +---@class RespawnPlayerPedReplyData +---@field respawnFailedResult boolean + +---What a client sends with `vehicleComponentControlEvent`. +---@class VehicleComponentControlEventData +---@field vehicleGlobalId integer # The network id of the vehicle. +---@field pedGlobalId integer # The network id of the ped. +---@field componentIndex integer +---@field request boolean +---@field componentIsSeat boolean +---@field pedInSeat integer # The network id of the ped in the seat, or 0. + +---What a client answers a `vehicleComponentControlEvent` with. +---@class VehicleComponentControlReplyData +---@field isGranted boolean +---@field componentIsSeat boolean +---@field pedGlobalId integer # The network id of the ped in the seat, or 0. + +---What a client sends with `requestNetworkSyncedSceneEvent` and `stopNetworkSyncedSceneEvent`. +---@class NetworkSyncedSceneEventData +---@field sceneId integer + +---What a client sends with `updateNetworkSyncedSceneEvent`. +---@class UpdateNetworkSyncedSceneEventData +---@field sceneId integer +---@field rate number + +---What a client sends with `startNetworkSyncedSceneEvent`. +---@class StartNetworkSyncedSceneEventData +---@field sceneId integer +---@field startTime integer +---@field isActive boolean +---@field scenePosX number +---@field scenePosY number +---@field scenePosZ number +---@field sceneRotX number +---@field sceneRotY number +---@field sceneRotZ number +---@field sceneRotW number +---@field hasAttachEntity boolean +---@field attachEntityId integer # The network id of the entity the scene is attached to, or 0. +---@field attachEntityBone integer +---@field phaseToStopScene number +---@field rate number +---@field holdLastFrame boolean +---@field isLooped boolean +---@field phase number +---@field cameraAnimHash integer +---@field animDictHash integer +---@field pedEntities table[] +---@field nonPedEntities table[] +---@field mapEntities table[] diff --git a/crates/qbx_fivem_data/stubs/cfx_server.lua b/crates/qbx_fivem_data/stubs/cfx_server.lua index 5c02024..0221bcd 100644 --- a/crates/qbx_fivem_data/stubs/cfx_server.lua +++ b/crates/qbx_fivem_data/stubs/cfx_server.lua @@ -40,7 +40,7 @@ local HttpRequestOptions = {} ---Starts an asynchronous HTTP request. The callback receives the status code, the response body (nil on failure), the response headers and an error description when the request failed. ---@param url string ----@param cb fun(status: integer, body: string?, headers: table, errorData: string?) +---@param cb fun(status: integer, body?: string, headers: table, errorData?: string) ---@param method? string ---@param data? string ---@param headers? table @@ -59,6 +59,29 @@ function PerformHttpRequest(url, cb, method, data, headers, options) end ---@return string? errorData function PerformHttpRequestAwait(url, method, data, headers, options) end +---A request that `SetHttpHandler` receives, sent to `http:////`. +---@class HttpHandlerRequest +---@field address string # The IP address of the sender. +---@field headers table +---@field method string +---@field path string # The path after the resource name, as `/ping`. +---@field setDataHandler fun(handler: fun(data: string), binary?: 'binary') # Sets the function that receives the body of the request. +---@field setCancelHandler fun(handler: fun()) # Sets the function called when the request is cancelled. +local HttpHandlerRequest = {} + +---The response to a request that `SetHttpHandler` receives. +---@class HttpHandlerResponse +---@field writeHead fun(code: integer, headers?: table) # Sets the status code and headers, once and before the other functions. +---@field write fun(data: string) # Adds to the body without sending it. +---@field send fun(data?: string) # Adds to the body and sends the response. +local HttpHandlerResponse = {} + +---What the factory of `RegisterResourceBuildTaskFactory` returns. +---@class ResourceBuildTask +---@field shouldBuild fun(resourceName: string): boolean # Whether the resource needs building. +---@field build fun(resourceName: string, cb: fun(success: boolean, status: string)) # Builds the resource, then calls `cb`. +local ResourceBuildTask = {} + ---Writes a structured entry to the server log that RCON clients and txAdmin can read. ---@param data table function RconLog(data) end @@ -67,3 +90,52 @@ function RconLog(data) end ---@param playerSrc integer|string ---@return string endpoint function GetPlayerEP(playerSrc) end + +---Returns a timestamp in microseconds. CfxLua extension. +---@return integer +function os.microtime() end + +---Returns a timestamp in nanoseconds. CfxLua extension. +---@return integer +function os.nanotime() end + +---Returns the difference between two timestamps. CfxLua extension. +---@param a integer +---@param b integer +---@return integer +function os.deltatime(a, b) end + +---Returns the processor time stamp counter. CfxLua extension. +---@return integer +function os.rdtsc() end + +---Returns the processor time stamp counter, serialized. CfxLua extension. +---@return integer +function os.rdtscp() end + +---Creates a directory. Returns true, or nil plus an error message and code when it already exists or cannot be created. CfxLua extension. +---@param path string +---@return boolean? ok +---@return string? err +---@return integer? code +function os.createdir(path) end + +---The entries of a directory, as `io.readdir` lists them. CfxLua extension. +---@class directory +local directory = {} + +---Returns an iterator over the names of the entries, without "." and "..". +---@return fun(): string iterator +function directory:lines() end + +---Frees the list of entries; `lines` fails once it is closed. +---@return boolean ok +function directory:close() end + +---Lists the entries of a directory. Returns them, or nil plus an error message and code when the path is on no known device. CfxLua extension. +---@param path string +---@return directory? entries +---@return string? err +---@return integer? code +---@nodiscard +function io.readdir(path) end diff --git a/crates/qbx_fivem_data/stubs/lua54.lua b/crates/qbx_fivem_data/stubs/lua54.lua index 3e72acf..14f159d 100644 --- a/crates/qbx_fivem_data/stubs/lua54.lua +++ b/crates/qbx_fivem_data/stubs/lua54.lua @@ -39,11 +39,6 @@ function assert(v, message, ...) end ---@return any result function collectgarbage(opt, ...) end ----Runs the given file as a Lua chunk (stdin when omitted) and returns whatever the chunk returns. ----@param filename? string ----@return any ... -function dofile(filename) end - ---Throws `message` as an error and never returns. `level` selects which call frame gets blamed (1 = caller, 0 = no position info). ---@param message any ---@param level? integer @@ -68,20 +63,10 @@ function ipairs(t) end ---@param chunkname? string ---@param mode? load_mode ---@param env? table ----@return function? fn ----@return string? err +---@return function | (nil, string) ---@nodiscard function load(chunk, chunkname, mode, env) end ----Like `load`, but reads the chunk from a file (stdin when omitted). ----@param filename? string ----@param mode? load_mode ----@param env? table ----@return function? fn ----@return string? err ----@nodiscard -function loadfile(filename, mode, env) end - ---Returns the key/value pair that follows `index` in the table traversal order; pass nil to get the first pair, nil is returned after the last. ---@generic K, V ---@param t table @@ -152,19 +137,51 @@ function require(modname) end ---@nodiscard function select(index, ...) end +---The fields Lua reads from the metatable of a table: the metamethods it calls for operations on the table, and its settings. +---@class metatable +---@field __index? table|fun(t: table, key: any): any +---@field __newindex? table|fun(t: table, key: any, value: any) +---@field __call? fun(t: table, ...: any): ...any +---@field __tostring? fun(t: table): string +---@field __len? fun(t: table): integer +---@field __pairs? fun(t: table): function, any, any +---@field __close? fun(t: table, err: any) +---@field __gc? fun(t: table) +---@field __unm? fun(a: table): any +---@field __bnot? fun(a: table): any +---@field __add? fun(a: any, b: any): any +---@field __sub? fun(a: any, b: any): any +---@field __mul? fun(a: any, b: any): any +---@field __div? fun(a: any, b: any): any +---@field __mod? fun(a: any, b: any): any +---@field __pow? fun(a: any, b: any): any +---@field __idiv? fun(a: any, b: any): any +---@field __band? fun(a: any, b: any): any +---@field __bor? fun(a: any, b: any): any +---@field __bxor? fun(a: any, b: any): any +---@field __shl? fun(a: any, b: any): any +---@field __shr? fun(a: any, b: any): any +---@field __concat? fun(a: any, b: any): any +---@field __eq? fun(a: table, b: table): boolean +---@field __lt? fun(a: any, b: any): boolean +---@field __le? fun(a: any, b: any): boolean +---@field __mode? "k"|"v"|"kv" +---@field __name? string +---@field __metatable? any + ---Sets (or clears, with nil) the metatable of `t` and returns `t`. Fails if the current metatable has a `__metatable` field. ---@generic T: table ---@param t T ----@param metatable? table +---@param metatable? table|metatable ---@return T t function setmetatable(t, metatable) end ---Converts a value to a number, or returns nil if it cannot be converted. With `base` (2-36) the argument must be a string holding an integer in that base. ---@param e any ----@param base? integer ---@return number? value +---@overload fun(e: string, base: integer): integer ---@nodiscard -function tonumber(e, base) end +function tonumber(e) end ---Converts any value to a human-readable string, honouring `__tostring` and `__name`. ---@param v any @@ -278,8 +295,8 @@ function debug.gethook(co) end ---Returns a table describing a function or a stack level. `what` selects which groups of fields get filled in. ---@param f integer|function ---@param what? string ----@return debuginfo? info ----@overload fun(thread: thread, f: integer|function, what?: string): debuginfo? +---@return debuginfo info +---@overload fun(thread: thread, f: integer|function, what?: string): debuginfo ---@nodiscard function debug.getinfo(f, what) end @@ -429,87 +446,6 @@ function file:setvbuf(mode, size) end ---@return string? err function file:write(...) end ----@class iolib -io = {} - ----Standard input stream. ----@type file -io.stdin = {} - ----Standard output stream. ----@type file -io.stdout = {} - ----Standard error stream. ----@type file -io.stderr = {} - ----Closes `f`, or the default output file when omitted. ----@param f? file ----@return boolean? ok ----@return string? exitcode ----@return integer? code -function io.close(f) end - ----Flushes the default output file. -function io.flush() end - ----Opens the named file (or uses the given handle) as the default input; with no argument returns the current default input. ----@param f? string|file ----@return file input -function io.input(f) end - ----Opens the file in read mode and returns a line iterator that closes the file when it finishes. Without a name it iterates the default input. ----@param filename? string ----@param ... read_format ----@return fun(): any, ...any iterator -function io.lines(filename, ...) end - ----Opens a file in the given mode (default "r"). Returns the handle, or nil plus an error message and code. ----@param filename string ----@param mode? open_mode ----@return file? handle ----@return string? err ----@return integer? code ----@nodiscard -function io.open(filename, mode) end - ----Opens the named file (or uses the given handle) as the default output; with no argument returns the current default output. ----@param f? string|file ----@return file output -function io.output(f) end - ----Starts `prog` in a separate process and returns a handle to read from ("r", default) or write to ("w") it. Not available on every platform. ----@param prog string ----@param mode? popen_mode ----@return file? handle ----@return string? err -function io.popen(prog, mode) end - ----Reads from the default input file; see `file:read`. ----@param ... read_format ----@return any value ----@return any ... ----@nodiscard -function io.read(...) end - ----Returns a handle to a temporary file opened in update mode that is removed when the program ends. ----@return file handle ----@nodiscard -function io.tmpfile() end - ----Returns "file" for an open handle, "closed file" for a closed one and nil for anything else. ----@param obj any ----@return "file"|"closed file"|nil kind ----@nodiscard -function io.type(obj) end - ----Writes to the default output file; see `file:write`. ----@param ... string|number ----@return file? output ----@return string? err -function io.write(...) end - ---@class mathlib math = {} @@ -679,90 +615,32 @@ function math.type(x) end ---@nodiscard function math.ult(m, n) end ----@class osdate +---The date that `os.time` reads: the fields it leaves out default to noon of that day. +---@class osdateparam +---@field year integer|string +---@field month integer|string +---@field day integer|string +---@field hour? integer|string +---@field min? integer|string +---@field sec? integer|string +---@field wday? integer|string +---@field yday? integer|string +---@field isdst? boolean +local osdateparam = {} + +---The date that `os.date('*t')` gives, with every field set. +---@class osdate : osdateparam ---@field year integer ---@field month integer ---@field day integer ----@field hour? integer ----@field min? integer ----@field sec? integer ----@field wday? integer ----@field yday? integer ----@field isdst? boolean +---@field hour integer +---@field min integer +---@field sec integer +---@field wday integer +---@field yday integer +---@field isdst boolean local osdate = {} ----@class oslib -os = {} - ----Returns an approximation of the CPU time used by the program, in seconds. ----@return number seconds ----@nodiscard -function os.clock() end - ----Formats a time (default: now) using strftime-style `format`. A leading "!" selects UTC and the format "*t" returns a table of date fields. ----@param format? string ----@param time? integer ----@return string|osdate result ----@nodiscard -function os.date(format, time) end - ----Returns the number of seconds from time `t1` to time `t2`. ----@param t2 integer ----@param t1 integer ----@return number seconds ----@nodiscard -function os.difftime(t2, t1) end - ----Runs `command` through the system shell and returns success, "exit" or "signal", and the status code. Without a command it reports whether a shell is available. ----@param command? string ----@return boolean? ok ----@return string? exitcode ----@return integer? code -function os.execute(command) end - ----Terminates the host program with the given status (default success). When `close` is true the Lua state is closed first. ----@param code? boolean|integer ----@param close? boolean -function os.exit(code, close) end - ----Returns the value of an environment variable, or nil when it is not defined. ----@param varname string ----@return string? value ----@nodiscard -function os.getenv(varname) end - ----Deletes a file or an empty directory. Returns true, or nil plus an error message and code. ----@param filename string ----@return boolean? ok ----@return string? err ----@return integer? code -function os.remove(filename) end - ----Renames or moves a file or directory. Returns true, or nil plus an error message and code. ----@param oldname string ----@param newname string ----@return boolean? ok ----@return string? err ----@return integer? code -function os.rename(oldname, newname) end - ----Sets the program locale for the given category, or queries it when `locale` is nil. Returns the locale name, or nil on failure. ----@param locale? string ----@param category? locale_category ----@return string? name -function os.setlocale(locale, category) end - ----Returns the current time as a timestamp, or the timestamp described by the given date table. ----@param date? osdate ----@return integer timestamp ----@nodiscard -function os.time(date) end - ----Returns a file name that can be used for a temporary file. ----@return string name ----@nodiscard -function os.tmpname() end - ---@class packagelib package = {} @@ -812,7 +690,7 @@ function package.searchpath(name, path, sep, rep) end string = {} ---Returns the numeric codes of the bytes `s[i]` through `s[j]`; both default to `i` = 1. ----@param s string +---@param s string|number ---@param i? integer ---@param j? integer ---@return integer ... @@ -833,25 +711,23 @@ function string.char(...) end function string.dump(f, strip) end ---Finds the first match of `pattern` in `s` starting at `init`. Returns start and end indices plus any captures, or nil. `plain` disables pattern matching. ----@param s string +---@param s string|number ---@param pattern string ---@param init? integer ---@param plain? boolean ----@return integer? start ----@return integer? finish ----@return any ... +---@return (integer, integer, ...any) | nil ---@nodiscard function string.find(s, pattern, init, plain) end ---Builds a string from a printf-style format and its arguments. Supports `%q` for Lua-readable quoting and `%s` via `tostring`. ----@param s string +---@param s string|number ---@param ... any ---@return string result ---@nodiscard function string.format(s, ...) end ---Returns an iterator that yields the captures (or whole match) of each successive match of `pattern` in `s`, starting at `init`. ----@param s string +---@param s string|number ---@param pattern string ---@param init? integer ---@return fun(): string, ...string iterator @@ -859,29 +735,28 @@ function string.format(s, ...) end function string.gmatch(s, pattern, init) end ---Returns a copy of `s` where matches of `pattern` (at most `n`) are replaced by `repl`, which may be a string, a lookup table or a function. Also returns the number of matches. ----@param s string +---@param s string|number ---@param pattern string ---@param repl string|number|table|fun(...: string): any ---@param n? integer ---@return string result ---@return integer count ----@nodiscard function string.gsub(s, pattern, repl, n) end ---Returns the length of `s` in bytes. ----@param s string +---@param s string|number ---@return integer length ---@nodiscard function string.len(s) end ---Returns a copy of `s` with uppercase letters converted to lowercase. ----@param s string +---@param s string|number ---@return string result ---@nodiscard function string.lower(s) end ---Returns the captures of the first match of `pattern` in `s` (or the whole match when there are none), or nil. ----@param s string +---@param s string|number ---@param pattern string ---@param init? integer ---@return any ... @@ -903,7 +778,7 @@ function string.pack(fmt, v1, ...) end function string.packsize(fmt) end ---Returns `n` copies of `s` joined by `sep`. ----@param s string +---@param s string|number ---@param n integer ---@param sep? string ---@return string result @@ -911,13 +786,13 @@ function string.packsize(fmt) end function string.rep(s, n, sep) end ---Returns `s` with its bytes in reverse order. ----@param s string +---@param s string|number ---@return string result ---@nodiscard function string.reverse(s) end ---Returns the substring from `i` to `j` (default -1, the end). Negative indices count from the end. ----@param s string +---@param s string|number ---@param i integer ---@param j? integer ---@return string result @@ -933,7 +808,7 @@ function string.sub(s, i, j) end function string.unpack(fmt, s, pos) end ---Returns a copy of `s` with lowercase letters converted to uppercase. ----@param s string +---@param s string|number ---@return string result ---@nodiscard function string.upper(s) end @@ -960,7 +835,7 @@ function table.concat(list, sep, i, j) end ---@param list T[] ---@param pos integer ---@param value T ----@overload fun(list: table, value: any) +---@overload fun(list: T[], value: T) function table.insert(list, pos, value) end ---Copies elements `a1[f]` through `a1[e]` into `a2` (default `a1`) starting at index `t`, and returns the destination table. @@ -983,7 +858,7 @@ function table.pack(...) end ---@generic T ---@param list T[] ---@param pos? integer ----@return T? removed +---@return T removed function table.remove(list, pos) end ---Sorts the list in place. `comp(a, b)` must return true when `a` has to come before `b`; defaults to `<`. The sort is not stable. diff --git a/crates/qbx_fivem_data/stubs/lua54_server.lua b/crates/qbx_fivem_data/stubs/lua54_server.lua new file mode 100644 index 0000000..8cfb5d1 --- /dev/null +++ b/crates/qbx_fivem_data/stubs/lua54_server.lua @@ -0,0 +1,131 @@ +---@meta + +---@class iolib +io = {} + +---Standard input stream. +---@type file +io.stdin = {} + +---Standard output stream. +---@type file +io.stdout = {} + +---Standard error stream. +---@type file +io.stderr = {} + +---Closes `f`; see `file:close`. FiveM has no default output file to close when `f` is omitted. +---@param f file +---@return boolean? ok +---@return string? exitcode +---@return integer? code +function io.close(f) end + +---Does nothing: FiveM has no default output file. +function io.flush() end + +---Returns an iterator that yields nothing: FiveM does not read files here. Open the file with `io.open` and use `file:lines` instead. +---@param filename? string +---@param ... read_format +---@return fun(): any, ...any iterator +function io.lines(filename, ...) end + +---Opens a file in the given mode (default "r"). Returns the handle, or nil plus an error message and code. +---@param filename string +---@param mode? open_mode +---@return file? handle +---@return string? err +---@return integer? code +---@nodiscard +function io.open(filename, mode) end + +---Starts `prog` in a separate process and returns a handle to read from ("r", default) or write to ("w") it. Not available on every platform. +---@param prog string +---@param mode? popen_mode +---@return file? handle +---@return string? err +function io.popen(prog, mode) end + +---Returns a handle to a temporary file opened in update mode that is removed when the program ends. +---@return file handle +---@nodiscard +function io.tmpfile() end + +---Returns "file" for an open handle, "closed file" for a closed one and nil for anything else. +---@param obj any +---@return "file"|"closed file"|nil kind +---@nodiscard +function io.type(obj) end + +---Prints its arguments to the server console like `print`: FiveM has no default output file. +---@param ... string|number +function io.write(...) end + +---@class oslib +os = {} + +---Returns an approximation of the CPU time used by the program, in seconds. +---@return number seconds +---@nodiscard +function os.clock() end + +---Formats a time (default: now) using strftime-style `format`. A leading "!" selects UTC and the format "*t" returns a table of date fields. +---@param format? string +---@param time? integer +---@return string result +---@overload fun(format: "*t"|"!*t", time?: integer): osdate +---@nodiscard +function os.date(format, time) end + +---Returns the number of seconds from time `t1` to time `t2`. +---@param t2 integer +---@param t1 integer +---@return number seconds +---@nodiscard +function os.difftime(t2, t1) end + +---Runs `command` through the system shell and returns success, "exit" or "signal", and the status code. Without a command it reports whether a shell is available. +---@param command? string +---@return boolean? ok +---@return string? exitcode +---@return integer? code +function os.execute(command) end + +---Returns the value of an environment variable, or nil when it is not defined. +---@param varname string +---@return string? value +---@nodiscard +function os.getenv(varname) end + +---Deletes a file or an empty directory. Returns true, or nil plus an error message and code. +---@param filename string +---@return boolean? ok +---@return string? err +---@return integer? code +function os.remove(filename) end + +---Renames or moves a file or directory. Returns true, or nil plus an error message and code. +---@param oldname string +---@param newname string +---@return boolean? ok +---@return string? err +---@return integer? code +function os.rename(oldname, newname) end + +---Sets the program locale for the given category, or queries it when `locale` is nil. Returns the locale name, or nil on failure. +---@param locale? string +---@param category? locale_category +---@return string? name +function os.setlocale(locale, category) end + +---Returns the current time as a timestamp, or the timestamp described by the given date table. +---@param date? osdateparam +---@return integer timestamp +---@nodiscard +function os.time(date) end + +---Returns a file name that can be used for a temporary file. +---@return string name +---@nodiscard +function os.tmpname() end diff --git a/crates/qbx_lua_analysis/src/checks/arity.rs b/crates/qbx_lua_analysis/src/checks/arity.rs index 8aefc5d..232c2db 100644 --- a/crates/qbx_lua_analysis/src/checks/arity.rs +++ b/crates/qbx_lua_analysis/src/checks/arity.rs @@ -3,45 +3,144 @@ use std::sync::Arc; use qbx_lua_syntax::ast::*; use qbx_lua_syntax::visit::{self, Visitor}; use qbx_lua_syntax::{SmolStr, Span}; -use qbx_luacats::luacats::applies_on; -use qbx_luacats::types::FunType; +use qbx_luacats::luacats::{applies_on, parse_doc_lines}; +use qbx_luacats::types::{FunType, Type}; use rustc_hash::FxHashMap; use super::crossfile::{passed_count, plural}; use super::{FileInput, Sink}; +use crate::env::leading_doc_lines; use crate::project::ResourceEnv; use crate::rules; use crate::scope::{LocalId, LocalKind, Resolved}; use crate::side_guard::SideRegions; -use crate::signature::{documented, global_key, member_path, Requirement}; +use crate::signature::{ + defined, global_key, member_path, most_arguments, runtime_definition, undocumented, Requirement, +}; /// Every value assigned to a local or to a field of a local table, by local and dotted field path. type LocalDefs = FxHashMap<(LocalId, SmolStr), Vec>>>; +/// The function type that a `---@type` gives a local or a field of a local table, by local and +/// dotted field path. It holds whatever value is assigned, as in LuaLS. +type DeclaredDefs = FxHashMap<(LocalId, SmolStr), Arc>; + +const MAX_ALIAS_DEPTH: u8 = 8; + pub(super) fn check(input: &FileInput, sink: &mut Sink) { - if sink.enabled(rules::MISSING_PARAMETER).is_none() { + if sink.enabled(rules::MISSING_PARAMETER).is_none() && sink.enabled(rules::REDUNDANT_PARAMETER).is_none() { return; } - let own_env; - let env = match input.resource { - Some(resource) => resource.env, - None => { - let mut env = ResourceEnv::default(); - env.add_summary(input.summary, None); - own_env = env; - &own_env + let callees = Callees::new(input); + Calls { callees: &callees, sink }.visit_block(&input.chunk.block); +} + +/// The functions that the calls of a file may run, as far as the file and the summaries of its +/// resource tell: the documented global functions, and the local functions and fields of local +/// tables of the file. +pub(super) struct Callees<'i, 'a> { + input: &'i FileInput<'a>, + /// The file's own summary, for a file outside any resource. + own_env: ResourceEnv, + locals: LocalDefs, + declared: DeclaredDefs, + regions: SideRegions, +} + +impl<'i, 'a> Callees<'i, 'a> { + pub(super) fn new(input: &'i FileInput<'a>) -> Self { + let mut own_env = ResourceEnv::default(); + if input.resource.is_none() { + own_env.add_summary(input.summary, None); } - }; - let mut collector = LocalCollector { input, defs: LocalDefs::default() }; - collector.visit_block(&input.chunk.block); - let mut calls = - Calls { input, env, locals: collector.defs, regions: SideRegions::of(input.source, input.chunk), sink }; - calls.visit_block(&input.chunk.block); + let env = input.resource.map_or(&own_env, |resource| resource.env); + let mut collector = + LocalCollector { input, env, defs: LocalDefs::default(), declared: DeclaredDefs::default() }; + collector.visit_block(&input.chunk.block); + let (locals, declared) = (collector.defs, collector.declared); + Self { input, own_env, locals, declared, regions: SideRegions::of(input.source, input.chunk) } + } + + fn env(&self) -> &ResourceEnv { + self.input.resource.map_or(&self.own_env, |resource| resource.env) + } + + /// The signatures a call of `root.fields` may run: every definition, and its overloads unless + /// they are scoped to the other side. `None` when the call may run a function the file does not + /// know, such as one held by a parameter. + fn signatures(&self, call: &Expr, root: &Name, fields: &[&str]) -> Option>> { + let side = self.regions.effective(call.span.start, self.input.side); + let defs: Vec>> = match self.input.resolution.resolve_at(root.span.start)? { + Resolved::Local(id) => { + // Parameters and loop variables start out with a value this file does not know. + let kind = self.input.resolution.local(id).kind; + if !matches!(kind, LocalKind::Local | LocalKind::LocalFunction) { + return None; + } + let key = (id, SmolStr::new(fields.join("."))); + match (self.declared.get(&key), self.locals.get(&key)) { + (Some(declared), _) => vec![Some(declared.clone())], + (None, Some(defs)) => defs.clone(), + (None, None) => return None, + } + } + // An encrypted script of the resource may define the global differently. + Resolved::Global(_) if self.env().opaque => return None, + Resolved::Global(_) => { + let path = global_key(&root.text, fields)?; + let mut defs: Vec<_> = self.env().function_defs(&path, side).map(|def| def.cloned()).collect(); + // What the runtime and `---@extend` lines define counts beside the definitions, so a + // native or a function the resource does not define keeps the signatures it has. + if !defs.is_empty() { + defs.extend(runtime_definition(&path, side)); + defs.extend(self.env().extension_defs(&path, side).map(|fun| Some(fun.clone()))); + } + defs + } + }; + // A value other than a function literal may be any function. + let defs = defs.into_iter().collect::>>()?; + let signatures: Vec> = defs + .iter() + .flat_map(|fun| { + let overloads = fun.overloads.iter().filter(|overload| applies_on(overload.side, side)); + std::iter::once(fun).chain(overloads).cloned() + }) + .collect(); + (!signatures.is_empty()).then_some(signatures) + } + + /// The function types that the functions `call` may run declare for its argument at + /// `position`, such as the `fun(source: number, ...)` of a callback wrapper. + pub(super) fn argument_functions(&self, call: &Expr, position: usize) -> Vec> { + let callee = match &call.kind { + ExprKind::Call { callee, .. } => member_path(callee).map(|(root, fields)| (root, fields, false)), + ExprKind::MethodCall { base, method, .. } => member_path(base).map(|(root, mut fields)| { + fields.push(&method.text); + (root, fields, true) + }), + _ => None, + }; + let Some((root, fields, via_colon)) = callee else { return Vec::new() }; + let Some(signatures) = self.signatures(call, root, &fields) else { return Vec::new() }; + let alias = |name: &str| self.env().alias(name); + signatures + .iter() + .filter_map(|fun| { + // Positions count as `Requirement::of` counts them. + let index = (position + usize::from(via_colon)).checked_sub(usize::from(fun.is_method))?; + let param = fun.params.get(index).or_else(|| fun.params.last().filter(|p| p.name == "..."))?; + function_type(¶m.ty, &alias, 0) + }) + .collect() + } } struct LocalCollector<'i, 'a> { input: &'i FileInput<'a>, + env: &'i ResourceEnv, defs: LocalDefs, + declared: DeclaredDefs, } impl LocalCollector<'_, '_> { @@ -56,12 +155,28 @@ impl LocalCollector<'_, '_> { self.defs.entry((id, SmolStr::new(fields.join(".")))).or_default().push(signature); } + /// Records the function type that the `---@type` above `stmt` gives its name at `index`, when + /// it gives one. + fn declare(&mut self, stmt: &Stmt, index: usize, id: LocalId, fields: &[&str]) { + let lines = leading_doc_lines(self.input.source, &self.input.chunk.comments, stmt.span.start); + if !lines.iter().any(|line| line.contains("@type")) { + return; + } + let doc = parse_doc_lines(&lines); + let alias = |name: &str| self.env.alias(name); + if let Some(fun) = doc.type_at(index).and_then(|ty| function_type(ty, &alias, 0)) { + self.declared.insert((id, SmolStr::new(fields.join("."))), fun); + } + } + + /// The signature of a function `value`, and `None` for other values, which may be any function. fn signature(&self, stmt: &Stmt, value: Option<&Expr>, single: bool) -> Option> { match value.map(|e| &e.kind) { // A doc comment above `local a, b = ...` does not say which value it describes. Some(ExprKind::Function(func)) if single => { - documented(self.input.source, &self.input.chunk.comments, stmt.span.start, func, false) + Some(defined(self.input.source, &self.input.chunk.comments, stmt.span.start, func, false)) } + Some(ExprKind::Function(func)) => Some(undocumented(func, false)), _ => None, } } @@ -73,13 +188,14 @@ impl<'ast> Visitor<'ast> for LocalCollector<'_, '_> { StmtKind::LocalFunction { name, func } => { if let Some(id) = self.local(name) { let signature = - documented(self.input.source, &self.input.chunk.comments, stmt.span.start, func, false); + Some(defined(self.input.source, &self.input.chunk.comments, stmt.span.start, func, false)); self.add(id, &[], signature); } } StmtKind::Local { names, exprs, .. } => { for (index, name) in names.iter().enumerate() { let Some(id) = self.local(&name.name) else { continue }; + self.declare(stmt, index, id, &[]); // `local f` holds nil until it is assigned, which the assignment records. if index >= exprs.len() && !exprs.last().is_some_and(Expr::is_multi_value) { continue; @@ -91,13 +207,13 @@ impl<'ast> Visitor<'ast> for LocalCollector<'_, '_> { StmtKind::Function { name, func } => { if let Some(id) = self.local(&name.base) { let fields: Vec<&str> = name.path.iter().chain(&name.method).map(|n| n.text.as_str()).collect(); - let signature = documented( + let signature = Some(defined( self.input.source, &self.input.chunk.comments, stmt.span.start, func, name.method.is_some(), - ); + )); self.add(id, &fields, signature); } } @@ -105,6 +221,7 @@ impl<'ast> Visitor<'ast> for LocalCollector<'_, '_> { for (index, target) in targets.iter().enumerate() { let Some((root, fields)) = member_path(target) else { continue }; if let Some(id) = self.local(root) { + self.declare(stmt, index, id, &fields); let signature = self.signature(stmt, exprs.get(index), targets.len() == 1); self.add(id, &fields, signature); } @@ -123,15 +240,12 @@ impl<'ast> Visitor<'ast> for LocalCollector<'_, '_> { } } -struct Calls<'i, 'a, 's> { - input: &'i FileInput<'a>, - env: &'i ResourceEnv, - locals: LocalDefs, - regions: SideRegions, - sink: &'i mut Sink<'s>, +struct Calls<'c, 'i, 'a, 's> { + callees: &'c Callees<'i, 'a>, + sink: &'c mut Sink<'s>, } -impl<'ast> Visitor<'ast> for Calls<'_, '_, '_> { +impl<'ast> Visitor<'ast> for Calls<'_, '_, '_, '_> { fn visit_expr(&mut self, expr: &'ast Expr) { match &expr.kind { ExprKind::Call { callee, args, .. } => { @@ -156,7 +270,7 @@ impl<'ast> Visitor<'ast> for Calls<'_, '_, '_> { } } -impl Calls<'_, '_, '_> { +impl Calls<'_, '_, '_, '_> { #[allow(clippy::too_many_arguments)] fn check_call( &mut self, @@ -168,44 +282,28 @@ impl Calls<'_, '_, '_> { span: Span, display: &str, ) { - let Some(passed) = passed_count(args, 0) else { return }; - let side = self.regions.effective(call.span.start, self.input.side); - let defs: Vec>> = match self.input.resolution.resolve_at(root.span.start) { - Some(Resolved::Local(id)) => { - // Parameters and loop variables start out with a value this file does not know. - let kind = self.input.resolution.local(id).kind; - if !matches!(kind, LocalKind::Local | LocalKind::LocalFunction) { - return; - } - match self.locals.get(&(id, SmolStr::new(fields.join(".")))) { - Some(defs) => defs.iter().map(Option::as_ref).collect(), - None => return, - } - } - // An encrypted script of the resource may define the global differently. - Some(Resolved::Global(_)) if self.env.opaque => return, - Some(Resolved::Global(_)) => { - let Some(path) = global_key(&root.text, fields) else { return }; - self.env.function_defs(&path, side).collect() - } - None => return, - }; + // Any definition or overload may be the one that runs. + let Some(signatures) = self.callees.signatures(call, root, fields) else { return }; + let signatures: Vec<&FunType> = signatures.iter().map(|fun| fun.as_ref()).collect(); + self.missing(&signatures, args, via_colon, span, display); + self.redundant(&signatures, args, via_colon, display); + } - // Any definition or overload that accepts fewer arguments may be the one that runs, unless - // the overload is scoped to the other side. - let env = self.env; + /// `missing-parameter`, for the signature that needs the fewest arguments. A call at the end + /// passes as many values as it gives, which only the language server tells. + fn missing(&mut self, signatures: &[&FunType], args: &[Expr], via_colon: bool, span: Span, display: &str) { + let given = |last: &Expr| match last.is_call() { + true => self.callees.input.value_count.and_then(|count| count(last)), + false => None, + }; + let passed = passed_count(args, 0).or_else(|| Some(args.len() - 1 + given(args.last()?)?)); + let Some(passed) = passed else { return }; + let env = self.callees.env(); let alias = |name: &str| env.alias(name); - let mut least: Option = None; - for def in defs { - let Some(fun) = def else { return }; - let overloads = fun.overloads.iter().filter(|overload| applies_on(overload.side, side)); - for candidate in std::iter::once(fun).chain(overloads) { - let requirement = Requirement::of(candidate, via_colon, &alias); - if least.as_ref().is_none_or(|least| requirement.arguments < least.arguments) { - least = Some(requirement); - } - } - } + let least = signatures + .iter() + .map(|fun| Requirement::of(fun, via_colon, &alias)) + .min_by_key(|requirement| requirement.arguments); let Some(least) = least.filter(|least| passed < least.arguments) else { return }; let missing = match least.first_missing(passed) { Some(param) => format!("'{}' ({})", param.name, param.ty), @@ -221,4 +319,40 @@ impl Calls<'_, '_, '_> { ), ); } + + /// `redundant-parameter`, for the signature that takes the most arguments, at the arguments + /// after them. A call or `...` among those counts as one argument. + fn redundant(&mut self, signatures: &[&FunType], args: &[Expr], via_colon: bool, display: &str) { + let mut most = 0; + for fun in signatures { + let Some(count) = most_arguments(fun, via_colon) else { return }; + most = most.max(count); + } + let (Some(first), Some(last)) = (args.get(most), args.last()) else { return }; + let takes = match most { + 0 => "takes none".to_string(), + most => format!("takes at most {most}"), + }; + self.sink.report( + rules::REDUNDANT_PARAMETER, + first.span.to(last.span), + format!("'{display}' is called with {} argument{}, but {takes}", args.len(), plural(args.len())), + ); + } +} + +/// The function type `ty` names, through aliases and the `nil` of `fun()?`. A union of several +/// function types names none. +fn function_type<'t>(ty: &Type, alias: &impl Fn(&str) -> Option<&'t Type>, depth: u8) -> Option> { + match ty { + Type::Fun(fun) => Some(fun.clone()), + Type::Union(types) => match types.iter().filter(|t| !matches!(t, Type::Nil)).collect::>()[..] { + [only] => function_type(only, alias, depth), + _ => None, + }, + Type::Named(name, args) if args.is_empty() && depth < MAX_ALIAS_DEPTH => { + function_type(alias(name)?, alias, depth + 1) + } + _ => None, + } } diff --git a/crates/qbx_lua_analysis/src/checks/crossfile.rs b/crates/qbx_lua_analysis/src/checks/crossfile.rs index 3776a61..3a45ff1 100644 --- a/crates/qbx_lua_analysis/src/checks/crossfile.rs +++ b/crates/qbx_lua_analysis/src/checks/crossfile.rs @@ -135,7 +135,8 @@ impl CrossFile<'_, '_> { } else { arities.iter().map(|a| a.params).max() }; - let least = arities.iter().map(|a| a.params).min().unwrap_or(0); + // A parameter that the doc comment of a handler marks optional may be left out. + let least = arities.iter().map(|a| a.required).min().unwrap_or(0); if most.is_some_and(|most| passed > most) { let most = most.unwrap_or(0); self.sink.report( @@ -151,13 +152,33 @@ impl CrossFile<'_, '_> { rules::EVENT_MISSING_ARGUMENTS, expr.span, format!( - "'{name}' is triggered with {passed} argument{}, but its handler declares {least}; the rest will be nil", + "'{name}' is triggered with {passed} argument{}, but its handler requires {least}; the rest will be nil", plural(passed) ), ); } } + /// `AddEventHandler('playerDropped', ...)` in client code: FiveM triggers that event on the + /// server only, so the handler never runs. + fn builtin_handler(&mut self, call: &str, expr: &Expr, args: &[Expr]) { + if !matches!(call, "AddEventHandler" | "RegisterNetEvent" | "RegisterServerEvent") { + return; + } + let Some(name_arg) = args.first() else { return }; + let Some(name) = name_arg.as_string() else { return }; + let Some(event) = qbx_fivem_data::builtin_event(name) else { return }; + let Some(own_side) = self.regions.effective(expr.span.start, self.input.side) else { return }; + if event.side.is_available_on(own_side) { + return; + } + self.sink.report( + rules::EVENT_WRONG_SIDE, + name_arg.span, + format!("'{name}' is a {} event; this {} handler never runs", event.side.label(), own_side.label()), + ); + } + /// Whether this file also delivers the event to the other side with a network trigger. fn mirrors_over_network(&self, event: &str) -> bool { ["TriggerServerEvent", "TriggerClientEvent", "TriggerLatentServerEvent", "TriggerLatentClientEvent"].iter().any( @@ -327,9 +348,12 @@ impl<'ast> Visitor<'ast> for CrossFile<'_, '_> { fn visit_expr(&mut self, expr: &'ast Expr) { match &expr.kind { ExprKind::Call { callee, args, .. } => { - if let (Some(refs), ExprKind::Name(name)) = (self.input.crossrefs, &callee.kind) { + if let ExprKind::Name(name) = &callee.kind { if self.is_global(name) { - self.trigger(refs, &name.text, expr, args); + self.builtin_handler(&name.text, expr, args); + if let Some(refs) = self.input.crossrefs { + self.trigger(refs, &name.text, expr, args); + } } } // `pcall(function() return exports.x:Get() end)` probes for an optional resource. diff --git a/crates/qbx_lua_analysis/src/checks/diag_codes.rs b/crates/qbx_lua_analysis/src/checks/diag_codes.rs new file mode 100644 index 0000000..7d32eb2 --- /dev/null +++ b/crates/qbx_lua_analysis/src/checks/diag_codes.rs @@ -0,0 +1,36 @@ +//! `unknown-diag-code`: a `---@diagnostic` or `-- qbx-lint:` comment that names a code no rule here +//! has and lua-language-server does not know either, so it suppresses nothing. The codes of +//! lua-language-server count even when no rule here checks the same, so comments written for it are +//! left alone. + +use super::{FileInput, Sink}; +use crate::directives::directive_codes; +use crate::lua_ls_config::{is_lua_ls_code, LUA_LS_CODES}; +use crate::manifest::edit_distance; +use crate::rules; + +pub(super) fn check(input: &FileInput, sink: &mut Sink) { + if sink.enabled(rules::UNKNOWN_DIAG_CODE).is_none() { + return; + } + for (span, code) in directive_codes(input.source, &input.chunk.comments) { + if rules::find(code).is_some() || is_lua_ls_code(code) { + continue; + } + let message = match closest_code(code) { + Some(known) => format!("unknown diagnostic code '{code}'; did you mean '{known}'?"), + None => format!("unknown diagnostic code '{code}'"), + }; + sink.report(rules::UNKNOWN_DIAG_CODE, span, message); + } +} + +/// The rule or lua-language-server code that `code` most likely misspells. +fn closest_code(code: &str) -> Option<&'static str> { + let known = rules::RULES.iter().map(|rule| rule.code).chain(LUA_LS_CODES.iter().copied()); + known + .map(|known| (known, edit_distance(code, known))) + .filter(|(_, distance)| *distance <= 2) + .min_by_key(|(_, distance)| *distance) + .map(|(known, _)| known) +} diff --git a/crates/qbx_lua_analysis/src/checks/docs.rs b/crates/qbx_lua_analysis/src/checks/docs.rs new file mode 100644 index 0000000..c5e91d7 --- /dev/null +++ b/crates/qbx_lua_analysis/src/checks/docs.rs @@ -0,0 +1,1075 @@ +//! Doc comment checks that need no other file: `@param` names that no parameter of the documented +//! function has, or that one doc comment repeats, aliases, enums and class fields that one file +//! declares twice for one side, fields that follow no class, operators and cast variables that do +//! not exist, and functions whose parameters and returned values the doc comments leave out. + +use std::cell::OnceCell; +use std::fmt; +use std::ops::Range; +use std::sync::Arc; + +use qbx_fivem_data::Side; +use qbx_lua_syntax::ast::*; +use qbx_lua_syntax::visit::{self, Visitor}; +use qbx_lua_syntax::{Comment, LineIndex, SmolStr, Span}; +use qbx_luacats::luacats::{applies_on, declared_name, has_attribute, parse_cast, parse_doc_lines, DocGroup}; +use qbx_luacats::types::{FunType, Type}; +use rustc_hash::{FxHashMap, FxHashSet}; + +use super::arity::Callees; +use super::{FileInput, Sink}; +use crate::env::{doc_blocks, is_meta_file}; +use crate::rules; +use crate::scope::{LocalId, Resolution, Resolved}; + +pub(super) fn check(input: &FileInput, sink: &mut Sink) { + let source = input.source; + let wanted = |code, tags: &[&str]| sink.enabled(code).is_some() && tags.iter().any(|tag| source.contains(tag)); + // Definition files document stubs, which need not spell out the parameters they describe. + let params = wanted(rules::UNDEFINED_DOC_PARAM, &["@param"]) && !is_meta_file(source, input.chunk); + let aliases = wanted(rules::DUPLICATE_DOC_ALIAS, &["@alias", "@enum"]); + let fields = wanted(rules::DUPLICATE_DOC_FIELD, &["@field"]); + let globals = sink.enabled(rules::MISSING_GLOBAL_DOC).is_some(); + let exported = sink.enabled(rules::MISSING_LOCAL_EXPORT_DOC).is_some(); + let incomplete = wanted(rules::INCOMPLETE_SIGNATURE_DOC, &["@param", "@return"]); + let repeated_params = wanted(rules::DUPLICATE_DOC_PARAM, &["@param"]); + let classless_fields = wanted(rules::DOC_FIELD_NO_CLASS, &["@field"]); + let operators = wanted(rules::UNKNOWN_OPERATOR, &["@operator"]); + let casts = wanted(rules::UNKNOWN_CAST_VARIABLE, &["@cast"]); + let tags = repeated_params || classless_fields || operators || casts; + if !(params || aliases || fields || globals || exported || incomplete || tags) { + return; + } + let blocks: Vec = doc_blocks(source, &input.chunk.comments) + .into_iter() + .filter(|comments| comments.iter().any(|comment| comment.span.text(source).contains('@'))) + .map(|comments| DocBlock::new(source, comments)) + .collect(); + let lines = LineIndex::new(source); + let code = OnceCell::new(); + let code = || code.get_or_init(|| Code::of(input.chunk, input.resolution, &lines)); + if params { + undefined_params(input, &blocks, code, &lines, sink); + } + if globals || exported || incomplete { + missing_docs(input, &blocks, code(), &lines, sink); + } + if aliases { + duplicate_aliases(&blocks, &lines, sink); + } + if fields { + duplicate_fields(&blocks, &lines, sink); + } + if repeated_params || classless_fields { + for block in &blocks { + let groups = block.bind_groups(source, &lines); + if repeated_params { + duplicate_params(block, &groups, &lines, sink); + } + if classless_fields { + classless_fields_of(block, &groups, sink); + } + } + } + if operators { + unknown_operators(&blocks, sink); + } + if casts { + unknown_cast_variables(input.resolution, &blocks, sink); + } +} + +/// One doc comment: its `---` lines without the prefix, and what they declare. +struct DocBlock<'a> { + comments: Vec<&'a Comment>, + lines: Vec<&'a str>, + doc: DocGroup, +} + +impl<'a> DocBlock<'a> { + fn new(source: &'a str, comments: Vec<&'a Comment>) -> Self { + let lines: Vec<&str> = comments.iter().map(|comment| &comment.span.text(source)[3..]).collect(); + let doc = parse_doc_lines(&lines); + Self { comments, lines, doc } + } + + fn tag(&self, index: usize) -> Option<&'a str> { + self.lines[index].trim_start().strip_prefix('@')?.split_whitespace().next() + } + + /// The name line `index` declares, and where it is. + fn declared(&self, index: usize) -> Option<(Span, &'a str)> { + let (offset, name) = declared_name(self.lines.get(index)?)?; + Some((self.span(index, offset, name), name)) + } + + /// Where `text`, which starts at byte `offset` of line `index`, is written. + fn span(&self, index: usize, offset: usize, text: &str) -> Span { + let start = self.comments[index].span.start + 3 + offset as u32; + Span::new(start, start + text.len() as u32) + } + + /// What line `index` is to lua-language-server. + fn kind(&self, index: usize) -> LineKind<'a> { + if self.lines[index].trim_start().starts_with('|') { + return LineKind::Value; + } + match self.tag(index) { + Some(tag) if LUA_LS_TAGS.contains(&tag) => LineKind::Tag(tag), + _ => LineKind::Comment, + } + } + + /// The lines of the comment in the groups lua-language-server binds together, which decide what + /// a `@field` or `@param` belongs to. A line joins the group of the line above when the two tags + /// allow it: after a `@class`, only fields, operators, overloads and descriptions go on. A + /// comment after code on its line is a group of its own, unless it is a field. + fn bind_groups(&self, source: &str, lines: &LineIndex) -> Vec> { + let mut groups = Vec::new(); + let mut start = 0; + let mut last: Option<(LineKind, u32)> = None; + for index in 0..self.lines.len() { + let kind = self.kind(index); + let line = lines.line_of(self.comments[index].span.start); + // A `---|` line lists another value of the line above, as part of it. + if kind == LineKind::Value { + if let Some((_, last_line)) = last.as_mut() { + *last_line = line; + } + continue; + } + if let Some((last_kind, last_line)) = last { + // LuaLS reads the other comments in between, which a doc comment passes over, as + // descriptions, which anything may follow. + let last_kind = if line == last_line + 1 { last_kind } else { LineKind::Comment }; + if !continues(last_kind, kind) { + groups.push(start..index); + start = index; + } + } + last = Some((kind, line)); + if index == 0 && !starts_line(source, self.comments[0].span.start) && kind != LineKind::Tag("field") { + groups.push(0..1); + (start, last) = (1, None); + } + } + if start < self.lines.len() { + groups.push(start..self.lines.len()); + } + groups + } +} + +/// The tags lua-language-server reads; a line with any other is a description to it. +const LUA_LS_TAGS: &[&str] = &[ + "class", + "type", + "alias", + "param", + "return", + "field", + "generic", + "vararg", + "overload", + "deprecated", + "meta", + "version", + "see", + "diagnostic", + "module", + "async", + "nodiscard", + "as", + "cast", + "operator", + "source", + "enum", + "private", + "protected", + "public", + "package", +]; + +/// What a doc line is to lua-language-server when it groups the lines of a comment. +#[derive(Clone, Copy, PartialEq, Eq)] +enum LineKind<'a> { + /// A line without a tag, or with one lua-language-server does not read, such as `@author`. + Comment, + /// A `---|` line, which lists another value of the line above. + Value, + Tag(&'a str), +} + +/// Whether lua-language-server binds the line `next` to the group of the line `last` above it. +fn continues(last: LineKind, next: LineKind) -> bool { + if next == LineKind::Tag("diagnostic") { + return true; + } + let allowed = match last { + LineKind::Tag("type" | "module" | "enum") => next == LineKind::Comment, + LineKind::Tag("class" | "field" | "operator") => { + matches!(next, LineKind::Comment | LineKind::Tag("field" | "operator" | "overload" | "source")) + } + _ => true, + }; + allowed && next != LineKind::Tag("cast") +} + +fn line_number(lines: &LineIndex, span: Span) -> u32 { + lines.line_of(span.start) + 1 +} + +/// `undefined-doc-param`. A doc comment documents the functions of the statement below it, as +/// qbx-lua-ls binds it, with the functions it passes by name, and every function whose parameters +/// start on the line below it, as LuaLS does, which covers table fields and nested calls. Comment +/// lines in between do not separate them; a blank line does. A `@type fun(...)` in the comment +/// documents its parameter names too. +fn undefined_params<'a, 'c>( + input: &FileInput<'a>, + blocks: &[DocBlock], + code: impl Fn() -> &'c Code<'a>, + lines: &LineIndex, + sink: &mut Sink, +) where + 'a: 'c, +{ + for block in blocks { + // A doc comment after code on its line describes that line; only the lines below it document + // the code that follows. + let first = usize::from(!starts_line(input.source, block.comments[0].span.start)); + let params: Vec<(Span, &str)> = (first..block.lines.len()) + .filter(|&i| block.tag(i) == Some("param")) + .filter_map(|i| block.declared(i)) + .collect(); + if params.is_empty() { + continue; + } + let typed = (first..block.lines.len()) + .find(|&i| block.tag(i) == Some("type")) + .and_then(|i| parse_doc_lines(&block.lines[i..=i]).ty); + let last = block.comments[block.comments.len() - 1]; + let mut documented = documented_offset(input.source, &input.chunk.comments, last) + .map(|offset| code().documented(offset, lines)) + .unwrap_or_default(); + if let Some(fun) = typed.as_ref().and_then(Type::as_fun) { + documented.add_type(fun); + } + for (span, name) in params { + if documented.has(name) { + continue; + } + let message = if documented.functions == 0 { + format!("no function follows the @param '{name}' annotation") + } else { + format!("the function below has no parameter '{name}'") + }; + sink.report(rules::UNDEFINED_DOC_PARAM, span, message); + } + } +} + +fn starts_line(source: &str, offset: u32) -> bool { + source[..offset as usize].rsplit('\n').next().unwrap_or_default().trim().is_empty() +} + +/// Where the code a doc comment documents starts: the first token after it, past any other comment +/// lines. `None` when a blank line or the end of the file comes first. +fn documented_offset(source: &str, comments: &[Comment], last: &Comment) -> Option { + let mut cursor = last.span.end; + let mut next = comments.partition_point(|comment| comment.span.start < cursor); + loop { + let rest = &source[cursor as usize..]; + let code = rest.trim_start(); + let gap = &rest[..rest.len() - code.len()]; + if code.is_empty() || gap.bytes().filter(|b| *b == b'\n').count() > 1 { + return None; + } + let offset = cursor + gap.len() as u32; + match comments.get(next) { + Some(comment) if comment.span.start == offset => { + cursor = comment.span.end; + next += 1; + } + _ => return Some(offset), + } + } +} + +/// The statements of a file by where they start, its functions by the line their parameters start +/// on, and the functions its variables are given where they are declared or assigned. +struct Code<'a> { + resolution: &'a Resolution, + statements: FxHashMap, + functions: FxHashMap>, + named: FxHashMap, Vec<&'a FuncBody>>, +} + +/// A local or global variable. +#[derive(Clone, Copy, PartialEq, Eq, Hash)] +enum Variable<'a> { + Local(LocalId), + Global(&'a str), +} + +impl<'a> Code<'a> { + fn of(chunk: &'a Chunk, resolution: &'a Resolution, lines: &LineIndex) -> Self { + let code = Code { + resolution, + statements: FxHashMap::default(), + functions: FxHashMap::default(), + named: FxHashMap::default(), + }; + let mut collector = CodeCollector { code, lines }; + collector.visit_block(&chunk.block); + collector.code + } + + fn variable(&self, name: &'a Name) -> Option> { + match self.resolution.resolve_at(name.span.start)? { + Resolved::Local(id) => Some(Variable::Local(id)), + Resolved::Global(_) => Some(Variable::Global(&name.text)), + } + } + + /// The parameters of the code at `offset`. + fn documented(&self, offset: u32, lines: &LineIndex) -> Documented<'a> { + let mut documented = Documented::default(); + if let Some(stmt) = self.statements.get(&offset) { + match &stmt.kind { + StmtKind::Function { name, .. } if name.method.is_some() => { + documented.names.insert("self"); + } + // LuaLS lets `@param` type the variables of a `for ... in` loop. + StmtKind::GenericFor { names, .. } => documented.names.extend(names.iter().map(|n| n.text.as_str())), + _ => {} + } + } + for func in self.bound(offset, lines, true) { + documented.add(func); + } + documented + } + + /// The functions a comment above the code at `offset` describes: those the statement there + /// defines or passes, with `by_name` also those it passes by the name of a variable it gave + /// them, and every function whose parameters start on its line. + fn bound(&self, offset: u32, lines: &LineIndex, by_name: bool) -> Vec<&'a FuncBody> { + let mut statement = StatementFunctions { functions: Vec::new(), code: self, by_name }; + if let Some(stmt) = self.statements.get(&offset) { + statement.visit_stmt(stmt); + } + let mut functions = statement.functions; + functions.extend(self.functions.get(&lines.line_of(offset)).into_iter().flatten()); + functions + } + + /// The one function a doc comment above the code at `offset` annotates, as LuaLS binds `@param` + /// and `@return`: the first one whose parameters start on its line, or else, for a statement + /// that spans lines, the first one it defines or passes. + fn annotated(&self, offset: u32, lines: &LineIndex) -> Option<&'a FuncBody> { + if let Some(func) = self.functions.get(&lines.line_of(offset)).and_then(|functions| functions.first()) { + return Some(func); + } + let mut statement = StatementFunctions { functions: Vec::new(), code: self, by_name: false }; + statement.visit_stmt(self.statements.get(&offset)?); + statement.functions.first().copied() + } +} + +struct CodeCollector<'a, 'l> { + code: Code<'a>, + lines: &'l LineIndex, +} + +impl<'a> CodeCollector<'a, '_> { + fn name(&mut self, name: &'a Name, func: &'a FuncBody) { + if let Some(variable) = self.code.variable(name) { + self.code.named.entry(variable).or_default().push(func); + } + } +} + +impl<'ast> Visitor<'ast> for CodeCollector<'ast, '_> { + fn visit_stmt(&mut self, stmt: &'ast Stmt) { + self.code.statements.insert(stmt.span.start, stmt); + match &stmt.kind { + StmtKind::LocalFunction { name, func } => self.name(name, func), + StmtKind::Function { name, func } if name.path.is_empty() && name.method.is_none() => { + self.name(&name.base, func) + } + StmtKind::Local { names, exprs, .. } => { + for (name, expr) in names.iter().zip(exprs) { + if let ExprKind::Function(func) = &expr.kind { + self.name(&name.name, func); + } + } + } + StmtKind::Assign { targets, exprs } => { + for (target, expr) in targets.iter().zip(exprs) { + if let (ExprKind::Name(name), ExprKind::Function(func)) = (&target.kind, &expr.kind) { + self.name(name, func); + } + } + } + _ => {} + } + visit::walk_stmt(self, stmt); + } + + fn visit_func_body(&mut self, func: &'ast FuncBody) { + self.code.functions.entry(self.lines.line_of(func.params_span.start)).or_default().push(func); + visit::walk_func_body(self, func); + } +} + +/// The functions a statement defines or passes, with `by_name` also by the name of a variable it +/// gave them, outside the blocks it runs and the bodies of those functions. +struct StatementFunctions<'a, 'd> { + functions: Vec<&'a FuncBody>, + code: &'d Code<'a>, + by_name: bool, +} + +impl<'ast> Visitor<'ast> for StatementFunctions<'ast, '_> { + fn visit_block(&mut self, _: &'ast Block) {} + + fn visit_func_body(&mut self, func: &'ast FuncBody) { + self.functions.push(func); + } + + fn visit_expr(&mut self, expr: &'ast Expr) { + if let (true, ExprKind::Call { args, .. } | ExprKind::MethodCall { args, .. }) = (self.by_name, &expr.kind) { + for arg in args { + let ExprKind::Name(name) = &arg.kind else { continue }; + let named = self.code.variable(name).and_then(|variable| self.code.named.get(&variable)); + self.functions.extend(named.into_iter().flatten()); + } + } + visit::walk_expr(self, expr); + } +} + +#[derive(Default)] +struct Documented<'a> { + names: FxHashSet<&'a str>, + vararg: bool, + functions: usize, +} + +impl<'a> Documented<'a> { + fn add(&mut self, func: &'a FuncBody) { + self.functions += 1; + self.names.extend(func.params.iter().map(|param| param.text.as_str())); + self.vararg |= func.vararg.is_some(); + } + + /// A `@type fun(...)` beside the `@param` lines, which types what the statement below assigns. + fn add_type(&mut self, fun: &'a FunType) { + self.functions += 1; + for param in &fun.params { + match param.name.as_str() { + "..." => self.vararg = true, + name => { + self.names.insert(name); + } + } + } + } + + fn has(&self, name: &str) -> bool { + match name { + "..." => self.vararg, + _ => self.names.contains(name), + } + } +} + +/// `missing-global-doc`, `missing-local-export-doc` and `incomplete-signature-doc`, as LuaLS reports +/// them: each parameter of a function that no `@param` names, and each value of each `return` at a +/// position no `@return` covers. A global or exported function without parameters or returned +/// values needs a comment instead. A `@type fun(...)` in the doc comment documents the parameters +/// and values it lists, and so does the function type a call declares for the function it is +/// passed, when the file or its resource documents the function called. +fn missing_docs<'a>(input: &FileInput<'a>, blocks: &[DocBlock], code: &Code<'a>, lines: &LineIndex, sink: &mut Sink) { + let source = input.source; + let mut signatures: FxHashMap = FxHashMap::default(); + for block in blocks { + let first = usize::from(!starts_line(source, block.comments[0].span.start)); + let last = block.comments[block.comments.len() - 1]; + let Some(offset) = documented_offset(source, &input.chunk.comments, last) else { continue }; + let Some(func) = code.annotated(offset, lines) else { continue }; + let signature = Signature::of(block, first); + signatures.entry(func.params_span.start).or_insert_with(|| (func, Signature::default())).1.merge(&signature); + } + let gaps = Gaps { input, arguments: OnceCell::new(), callees: OnceCell::new() }; + if sink.enabled(rules::INCOMPLETE_SIGNATURE_DOC).is_some() { + for (func, signature) in signatures.values().filter(|(_, signature)| signature.annotated) { + for (span, gap) in gaps.of(func, &returned_values(func), signature) { + let message = match gap { + Gap::Param(name) => format!("incomplete signature: parameter '{name}' has no @param annotation"), + Gap::Return(index) => { + format!("incomplete signature: return value #{index} has no @return annotation") + } + }; + sink.report(rules::INCOMPLETE_SIGNATURE_DOC, span, message); + } + } + } + let globals = sink.enabled(rules::MISSING_GLOBAL_DOC).is_some(); + let exported = sink.enabled(rules::MISSING_LOCAL_EXPORT_DOC).is_some(); + if !(globals || exported) { + return; + } + let mut targets = Targets::new(input.resolution); + targets.visit_block(&input.chunk.block); + let undocumented = Signature::default(); + let commented = OnceCell::new(); + let mut check = |rule: &'static str, subject: Subject, name: Span, func: &FuncBody| { + let returns = returned_values(func); + let signature = signatures.get(&func.params_span.start).map_or(&undocumented, |(_, signature)| signature); + // LuaLS asks for a comment only here, where there is nothing to annotate. + let bare = func.params.is_empty() && func.vararg.is_none() && returns.iter().all(|values| values.is_empty()); + if bare && !commented.get_or_init(|| commented_functions(input, code, lines)).contains(&func.params_span.start) + { + sink.report(rule, name, format!("{subject} has no comment")); + } + for (span, gap) in gaps.of(func, &returns, signature) { + let message = match gap { + Gap::Param(name) => format!("parameter '{name}' of {subject} has no @param annotation"), + Gap::Return(index) => format!("return value #{index} of {subject} has no @return annotation"), + }; + sink.report(rule, span, message); + } + }; + if globals { + for &(name, func) in &targets.globals { + check(rules::MISSING_GLOBAL_DOC, Subject::Global(&name.text), name.span, func); + } + } + if exported { + for (subject, name, func) in targets.exported() { + check(rules::MISSING_LOCAL_EXPORT_DOC, subject, name, func); + } + } +} + +/// What the doc comments of one function say about its parameters and returned values. +#[derive(Default)] +struct Signature { + params: FxHashSet, + vararg: bool, + returns: usize, + /// The last `@return` is `...T`, which covers every later value. + variadic_return: bool, + /// An `@param` or `@return` annotates the function, so `incomplete-signature-doc` checks it. + annotated: bool, +} + +impl Signature { + /// What the lines of `block` from `first` on say. + fn of(block: &DocBlock, first: usize) -> Self { + let parsed; + let doc = if first == 0 { + &block.doc + } else { + parsed = parse_doc_lines(&block.lines[first..]); + &parsed + }; + let mut signature = Signature::default(); + for param in &doc.params { + signature.add_param(¶m.name); + } + signature.add_returns(doc.returns.iter().map(|value| &value.ty)); + if let Some(fun) = doc.ty.as_ref().and_then(Type::as_fun) { + for param in &fun.params { + signature.add_param(¶m.name); + } + signature.add_returns(fun.returns.iter()); + } + signature.annotated = (first..block.lines.len()).any(|i| matches!(block.tag(i), Some("param" | "return"))); + signature + } + + fn add_param(&mut self, name: &SmolStr) { + match name.as_str() { + "..." => self.vararg = true, + _ => { + self.params.insert(name.clone()); + } + } + } + + fn add_returns<'t>(&mut self, types: impl Iterator) { + let types: Vec<&Type> = types.collect(); + self.returns = self.returns.max(types.len()); + self.variadic_return |= matches!(types.last(), Some(Type::Variadic(_))); + } + + fn merge(&mut self, other: &Signature) { + self.params.extend(other.params.iter().cloned()); + self.vararg |= other.vararg; + self.returns = self.returns.max(other.returns); + self.variadic_return |= other.variadic_return; + self.annotated |= other.annotated; + } + + /// Whether an annotation covers the returned value at `index`, counting from 1. + fn covers_return(&self, index: usize) -> bool { + index <= self.returns || self.variadic_return + } +} + +/// A parameter or returned value that no annotation documents. +enum Gap<'a> { + Param(&'a str), + /// The position of the value, counting from 1. + Return(usize), +} + +/// Finds what the annotations of a function leave out. +struct Gaps<'i, 'a> { + input: &'i FileInput<'a>, + arguments: OnceCell>, + callees: OnceCell>, +} + +impl<'a> Gaps<'_, 'a> { + /// The parameters of `func` that `signature` does not name, other than `self`, placeholders and + /// those the function type it is passed as names, and the values of its `returns` at positions + /// `signature` does not cover. + fn of<'f>(&self, func: &'f FuncBody, returns: &[&'f [Expr]], signature: &Signature) -> Vec<(Span, Gap<'f>)> { + let prefix = self.input.config.ignore_unused_prefix.as_str(); + let passed_as = OnceCell::new(); + let typed = |position: usize| { + let functions = passed_as.get_or_init(|| self.passed_as(func)); + functions.iter().any(|fun| fun.params.get(position).is_some_and(|param| param.name != "...")) + }; + let mut gaps = Vec::new(); + for (position, param) in func.params.iter().enumerate() { + let name = param.text.as_str(); + let placeholder = name == "_" || (!prefix.is_empty() && name.starts_with(prefix)); + if !(name.is_empty() || name == "self" || placeholder || signature.params.contains(name) || typed(position)) + { + gaps.push((param.span, Gap::Param(name))); + } + } + if let Some(span) = func.vararg.filter(|_| !signature.vararg) { + gaps.push((span, Gap::Param("..."))); + } + for values in returns { + for (index, value) in values.iter().enumerate() { + if !signature.covers_return(index + 1) { + gaps.push((value.span, Gap::Return(index + 1))); + } + } + } + gaps + } + + /// The function types that the call `func` is passed to declares for it, such as the + /// `fun(source: number, ...)` of a callback wrapper. + fn passed_as(&self, func: &FuncBody) -> Vec> { + let arguments = self.arguments.get_or_init(|| call_arguments(self.input.chunk)); + let Some(&(call, position)) = arguments.get(&func.params_span.start) else { return Vec::new() }; + self.callees.get_or_init(|| Callees::new(self.input)).argument_functions(call, position) + } +} + +/// The functions that calls pass, by where their parameters start, with the call and the position +/// of the argument. +fn call_arguments(chunk: &Chunk) -> FxHashMap { + struct Arguments<'a>(FxHashMap); + + impl<'ast> Visitor<'ast> for Arguments<'ast> { + fn visit_expr(&mut self, expr: &'ast Expr) { + if let ExprKind::Call { args, .. } | ExprKind::MethodCall { args, .. } = &expr.kind { + for (position, arg) in args.iter().enumerate() { + if let ExprKind::Function(func) = &arg.kind { + self.0.insert(func.params_span.start, (expr, position)); + } + } + } + visit::walk_expr(self, expr); + } + } + + let mut arguments = Arguments(FxHashMap::default()); + arguments.visit_block(&chunk.block); + arguments.0 +} + +/// The values of each `return` of `func`, not of the functions inside it. +fn returned_values(func: &FuncBody) -> Vec<&[Expr]> { + struct Returns<'a>(Vec<&'a [Expr]>); + + impl<'ast> Visitor<'ast> for Returns<'ast> { + fn visit_stmt(&mut self, stmt: &'ast Stmt) { + if let StmtKind::Return(values) = &stmt.kind { + self.0.push(values); + } + visit::walk_stmt(self, stmt); + } + + fn visit_func_body(&mut self, _: &'ast FuncBody) {} + } + + let mut returns = Returns(Vec::new()); + returns.visit_block(&func.body); + returns.0 +} + +/// The functions with a comment, by where their parameters start, as LuaLS reads one: a comment of +/// any kind directly above the code that defines or passes them, or after code on the line their +/// parameters start on. A `---@diagnostic` line is no comment. +fn commented_functions(input: &FileInput, code: &Code, lines: &LineIndex) -> FxHashSet { + let source = input.source; + let mut commented = FxHashSet::default(); + for comment in &input.chunk.comments { + let text = comment.span.text(source); + if text.strip_prefix("---").is_some_and(|doc| doc.trim_start().starts_with("@diagnostic")) { + continue; + } + let functions = if starts_line(source, comment.span.start) { + match documented_offset(source, &input.chunk.comments, comment) { + Some(offset) => code.bound(offset, lines, false), + None => continue, + } + } else { + code.functions.get(&lines.line_of(comment.span.start)).cloned().unwrap_or_default() + }; + commented.extend(functions.iter().map(|func| func.params_span.start)); + } + commented +} + +/// What a finding of `missing-global-doc` or `missing-local-export-doc` calls the function. +#[derive(Clone, Copy)] +enum Subject<'a> { + Global(&'a str), + ExportedLocal(&'a str), + /// A function written in an `exports(name, function() end)` call, by the name of the export. + Export(&'a str), +} + +impl fmt::Display for Subject<'_> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + Subject::Global(name) => write!(f, "global function '{name}'"), + Subject::ExportedLocal(name) => write!(f, "exported local function '{name}'"), + Subject::Export(name) => write!(f, "exported function '{name}'"), + } + } +} + +/// The global functions of a file, and the local functions it exports: those assigned by name to +/// fields of a local table that a `return` gives, as LuaLS reads a module, and those passed to +/// `exports(name, fn)`, which also exports a function written in the call. +struct Targets<'a> { + resolution: &'a Resolution, + globals: Vec<(&'a Name, &'a FuncBody)>, + /// Locals declared with a function, by the name that declares them. + local_functions: FxHashMap, + /// Locals declared with a table constructor. + tables: FxHashSet, + returned: FxHashSet, + /// `table.field = local` assignments, as the table and the local assigned. + fields: Vec<(LocalId, LocalId)>, + exported_locals: Vec, + exported_functions: Vec<(&'a str, Span, &'a FuncBody)>, +} + +impl<'a> Targets<'a> { + fn new(resolution: &'a Resolution) -> Self { + Self { + resolution, + globals: Vec::new(), + local_functions: FxHashMap::default(), + tables: FxHashSet::default(), + returned: FxHashSet::default(), + fields: Vec::new(), + exported_locals: Vec::new(), + exported_functions: Vec::new(), + } + } + + fn local(&self, name: &Name) -> Option { + match self.resolution.resolve_at(name.span.start)? { + Resolved::Local(id) => Some(id), + Resolved::Global(_) => None, + } + } + + fn is_global(&self, name: &Name) -> bool { + matches!(self.resolution.resolve_at(name.span.start), Some(Resolved::Global(_))) + } + + /// The exported functions, each once, with the name that defines them. + fn exported(&self) -> Vec<(Subject<'a>, Span, &'a FuncBody)> { + let module = + self.fields.iter().filter(|(table, _)| self.tables.contains(table) && self.returned.contains(table)); + let locals = module.map(|&(_, local)| local).chain(self.exported_locals.iter().copied()); + let mut seen = FxHashSet::default(); + let mut exported: Vec<_> = locals + .filter(|local| seen.insert(*local)) + .filter_map(|local| self.local_functions.get(&local)) + .map(|&(name, func)| (Subject::ExportedLocal(&name.text), name.span, func)) + .collect(); + exported.extend(self.exported_functions.iter().map(|&(name, span, func)| (Subject::Export(name), span, func))); + exported + } +} + +impl<'ast> Visitor<'ast> for Targets<'ast> { + fn visit_stmt(&mut self, stmt: &'ast Stmt) { + match &stmt.kind { + StmtKind::Function { name, func } if name.path.is_empty() && name.method.is_none() => { + if self.is_global(&name.base) { + self.globals.push((&name.base, func)); + } + } + StmtKind::LocalFunction { name, func } => { + if let Some(local) = self.local(name) { + self.local_functions.insert(local, (name, func)); + } + } + StmtKind::Local { names, exprs, .. } => { + for (name, expr) in names.iter().zip(exprs) { + let Some(local) = self.local(&name.name) else { continue }; + match &expr.kind { + ExprKind::Function(func) => { + self.local_functions.insert(local, (&name.name, func)); + } + ExprKind::Table(_) => { + self.tables.insert(local); + } + _ => {} + } + } + } + StmtKind::Assign { targets, exprs } => { + for (target, expr) in targets.iter().zip(exprs) { + match (&target.kind, &expr.kind) { + (ExprKind::Name(name), ExprKind::Function(func)) if self.is_global(name) => { + self.globals.push((name, func)); + } + (ExprKind::Field { base, .. }, ExprKind::Name(value)) => { + let ExprKind::Name(table) = &base.kind else { continue }; + if let (Some(table), Some(value)) = (self.local(table), self.local(value)) { + self.fields.push((table, value)); + } + } + _ => {} + } + } + } + StmtKind::Return(values) => { + for value in values { + if let Some(local) = name_of(value).and_then(|name| self.local(name)) { + self.returned.insert(local); + } + } + } + _ => {} + } + visit::walk_stmt(self, stmt); + } + + fn visit_expr(&mut self, expr: &'ast Expr) { + if let ExprKind::Call { callee, args, .. } = &expr.kind { + let exports = name_of(callee).is_some_and(|callee| callee.text == "exports" && self.is_global(callee)); + if let (true, [name, value, ..]) = (exports, args.as_slice()) { + match (name.as_string(), &value.kind) { + (Some(export), ExprKind::Function(func)) => self.exported_functions.push((export, name.span, func)), + (Some(_), ExprKind::Name(local)) => self.exported_locals.extend(self.local(local)), + _ => {} + } + } + } + visit::walk_expr(self, expr); + } +} + +fn name_of(expr: &Expr) -> Option<&Name> { + match &expr.kind { + ExprKind::Name(name) => Some(name), + _ => None, + } +} + +/// A type name a doc comment declares. +struct TypeName<'a> { + name: &'a str, + /// What declares it, as the message names it. + kind: &'static str, + side: Option, + partial: bool, + span: Span, +} + +const CLASS: &str = "a class"; + +/// `duplicate-doc-alias`: an `@alias` or `@enum` whose name the file already gives an alias or enum, +/// or any class, for a side the two share. `(partial)` on any of them allows the repeat, as in LuaLS. +fn duplicate_aliases(blocks: &[DocBlock], lines: &LineIndex, sink: &mut Sink) { + let mut names: Vec = Vec::new(); + for block in blocks { + for index in 0..block.lines.len() { + let (kind, side) = match block.tag(index) { + Some("alias") => ("an alias", block.doc.aliases.iter().find(|a| a.line == index).and_then(|a| a.side)), + Some("enum") => ("an enum", block.doc.enum_side), + Some("class") => (CLASS, block.doc.classes.iter().find(|c| c.line == index).and_then(|c| c.side)), + _ => continue, + }; + let Some((span, name)) = block.declared(index) else { continue }; + let partial = has_attribute(block.lines[index], "partial"); + names.push(TypeName { name, kind, side, partial, span }); + } + } + let partial: FxHashSet<&str> = names.iter().filter(|n| n.partial).map(|n| n.name).collect(); + for (index, declared) in names.iter().enumerate() { + if declared.kind == CLASS || partial.contains(declared.name) { + continue; + } + let clashes = |other: &&TypeName| other.name == declared.name && applies_on(other.side, declared.side); + let earlier = names[..index].iter().rev().filter(|other| other.kind != CLASS).find(clashes); + let Some(other) = earlier.or_else(|| names.iter().filter(|other| other.kind == CLASS).find(clashes)) else { + continue; + }; + let message = format!( + "'{}' is already declared as {} on line {}", + declared.name, + other.kind, + line_number(lines, other.span) + ); + sink.report(rules::DUPLICATE_DOC_ALIAS, declared.span, message); + } +} + +/// The declarations of one field of a class, with the side each is for. +type FieldDeclarations = Vec<(Option, Span)>; + +/// `duplicate-doc-field`: a class field the file already declares for a side the two share. A +/// function field repeated under its name is another signature of it, as in LuaLS. +fn duplicate_fields(blocks: &[DocBlock], lines: &LineIndex, sink: &mut Sink) { + let mut seen: FxHashMap<(SmolStr, String), FieldDeclarations> = FxHashMap::default(); + for block in blocks { + for class in &block.doc.classes { + let named = class.fields.iter().map(|f| (f.name.to_string(), &f.ty, f.side, f.line)); + let keyed = class.indices.iter().chain(&class.literal_fields); + let keyed = keyed.map(|f| (format!("[{}]", f.key), &f.ty, f.side, f.line)); + for (key, ty, side, index) in named.chain(keyed) { + if matches!(ty, Type::Fun(_)) { + continue; + } + let Some((span, shown)) = block.declared(index) else { continue }; + let side = side.or(class.side); + let declared = seen.entry((class.name.clone(), key)).or_default(); + if let Some((_, first)) = declared.iter().find(|(other, _)| applies_on(*other, side)) { + let message = format!( + "field '{shown}' of class '{}' is already declared on line {}", + class.name, + line_number(lines, *first) + ); + sink.report(rules::DUPLICATE_DOC_FIELD, span, message); + } + declared.push((side, span)); + } + } + } +} + +/// `duplicate-doc-param`: two `@param` lines for one name in a group of doc lines, as +/// lua-language-server binds them. Each is reported, with the line of another. +fn duplicate_params(block: &DocBlock, groups: &[Range], lines: &LineIndex, sink: &mut Sink) { + for group in groups { + let params: Vec<(Span, &str)> = + group.clone().filter(|&i| block.tag(i) == Some("param")).filter_map(|i| block.declared(i)).collect(); + for (span, name) in ¶ms { + let Some((other, _)) = params.iter().find(|(other, other_name)| other != span && other_name == name) else { + continue; + }; + let message = format!("duplicate @param '{name}', also on line {}", line_number(lines, *other)); + sink.report(rules::DUPLICATE_DOC_PARAM, *span, message); + } + } +} + +/// `doc-field-no-class`: a `@field` without a `@class` before it in its group of doc lines, which +/// lua-language-server then gives to no class. qbx-lua-ls still gives it to a `@class` higher up in +/// the comment, so the message names what separates the two. +fn classless_fields_of(block: &DocBlock, groups: &[Range], sink: &mut Sink) { + for group in groups { + let class = group.clone().position(|i| block.tag(i) == Some("class")).map(|position| group.start + position); + for index in group.clone().filter(|&i| block.tag(i) == Some("field")) { + if class.is_some_and(|class| class < index) { + continue; + } + let Some((span, name)) = block.declared(index) else { continue }; + let message = match (0..group.start).any(|i| block.tag(i) == Some("class")) { + false => format!("field '{name}' has no @class above it"), + true => match separator(block, group.start) { + Some(separator) => format!("{separator} separates field '{name}' from its @class"), + None => format!("field '{name}' does not directly follow its @class"), + }, + }; + sink.report(rules::DOC_FIELD_NO_CLASS, span, message); + } + } +} + +/// The line that starts a new group of doc lines at line `start` of `block`, as a message names it: +/// a tag that may not follow a class or its fields, like `@deprecated`, or one that nothing may +/// follow, like `@type`. +fn separator(block: &DocBlock, start: usize) -> Option { + if let LineKind::Tag(tag) = block.kind(start) { + if tag != "field" { + return Some(format!("the @{tag} line")); + } + } + let above = start.checked_sub(1)?; + block.tag(above).filter(|tag| *tag != "class").map(|tag| format!("the @{tag} line")) +} + +/// The operators an `@operator` line can declare: the metamethods of Lua 5.4, without their `__`, +/// that lua-language-server reads. It also knows LuaJIT's `sar`, which is accepted unlisted. +const OPERATORS: &[&str] = &[ + "add", "sub", "mul", "div", "mod", "pow", "idiv", "band", "bor", "bxor", "shl", "shr", "concat", "unm", "bnot", + "len", "call", +]; + +/// `unknown-operator`: an `@operator` whose name is no operator lua-language-server knows, such as +/// `eq` or `index`, which it cannot apply. +fn unknown_operators(blocks: &[DocBlock], sink: &mut Sink) { + for block in blocks { + for index in (0..block.lines.len()).filter(|&i| block.tag(i) == Some("operator")) { + let line = block.lines[index]; + let Some(rest) = line.trim_start().strip_prefix("@operator") else { continue }; + let rest = rest.trim_start(); + let name = &rest[..rest.find(|c: char| !(c.is_ascii_alphanumeric() || c == '_')).unwrap_or(rest.len())]; + if name.is_empty() || name == "sar" || OPERATORS.contains(&name) { + continue; + } + let (listed, last) = OPERATORS.split_at(OPERATORS.len() - 1); + let message = format!("unknown operator '{name}'; @operator takes {} or {}", listed.join(", "), last[0]); + sink.report(rules::UNKNOWN_OPERATOR, block.span(index, line.len() - rest.len(), name), message); + } + } +} + +/// `unknown-cast-variable`: a `---@cast` whose name is no local in scope where it is written, such as +/// a global, a field or a local declared below it, whose type it cannot change. +fn unknown_cast_variables(resolution: &Resolution, blocks: &[DocBlock], sink: &mut Sink) { + for block in blocks { + for (index, line) in block.lines.iter().enumerate() { + let Some(cast) = parse_cast(line) else { continue }; + let comment = block.comments[index]; + if resolution.lookup_local_at(cast.name, comment.span.start).is_some() { + continue; + } + let Some(rest) = line.trim_start().strip_prefix("@cast") else { continue }; + let offset = line.len() - rest.trim_start().len(); + let message = format!("no local '{}' is in scope here; @cast changes the type of a local", cast.name); + sink.report(rules::UNKNOWN_CAST_VARIABLE, block.span(index, offset, cast.name), message); + } + } +} diff --git a/crates/qbx_lua_analysis/src/checks/fivem.rs b/crates/qbx_lua_analysis/src/checks/fivem.rs index 2a3fa02..f3f429d 100644 --- a/crates/qbx_lua_analysis/src/checks/fivem.rs +++ b/crates/qbx_lua_analysis/src/checks/fivem.rs @@ -11,7 +11,7 @@ use crate::rules; use crate::scope::Resolved; const CITIZEN_ALIASES: &[&str] = &["Wait", "CreateThread", "SetTimeout", "ClearTimeout"]; -const DEFERRING_CALLS: &[&str] = +pub(super) const DEFERRING_CALLS: &[&str] = &["SetTimeout", "CreateThread", "Citizen.SetTimeout", "Citizen.CreateThread", "Citizen.CreateThreadNow"]; const MAY_RUN_CALLBACKS: &[&str] = &["pcall", "xpcall", "load", "loadstring", "dofile", "require", "select", "assert", "error"]; diff --git a/crates/qbx_lua_analysis/src/checks/flow.rs b/crates/qbx_lua_analysis/src/checks/flow.rs index a5fc750..4b2bb65 100644 --- a/crates/qbx_lua_analysis/src/checks/flow.rs +++ b/crates/qbx_lua_analysis/src/checks/flow.rs @@ -1,11 +1,14 @@ use qbx_lua_syntax::ast::*; use qbx_lua_syntax::visit::{self, Visitor}; -use qbx_lua_syntax::{NumberValue, Span}; +use qbx_lua_syntax::{LineIndex, NumberValue, SmolStr, Span}; use rustc_hash::FxHashMap; use super::{FileInput, Sink}; -use crate::diagnostic::Tag; +use crate::diagnostic::{Fix, Tag, TextEdit}; +use crate::directives::Suppressions; +use crate::env::is_meta_file; use crate::rules; +use crate::scope::{LocalId, Resolved}; pub(super) fn check(input: &FileInput, sink: &mut Sink) { for label in input.resolution.labels.iter().filter(|l| !l.used) { @@ -20,12 +23,53 @@ pub(super) fn check(input: &FileInput, sink: &mut Sink) { for name in &input.resolution.undefined_gotos { sink.report(rules::UNDEFINED_LABEL, name.span, format!("no visible label '{}' for goto", name.text)); } - Flow { input, sink }.visit_block(&input.chunk.block); + // Definition files only declare signatures, which may repeat a field and leave `...` unused. + let meta = is_meta_file(input.source, input.chunk); + let set_fields = sink.enabled(rules::DUPLICATE_SET_FIELD).is_some() && !meta; + let mut flow = Flow { + input, + sink, + block: 0, + function: 0, + blocks: 0, + set_fields: set_fields.then(FxHashMap::default), + lines: None, + suppressions: None, + meta, + }; + flow.visit_block(&input.chunk.block); } struct Flow<'a, 'b> { input: &'a FileInput<'a>, sink: &'a mut Sink<'b>, + /// The block `duplicate-set-field` compares definitions in: the main chunk, a function body or + /// one branch of an `if`, as LuaLS scopes the rule, and the code after an `if` that can return, + /// which runs only when it does not. Loops and `do` blocks share the block around them. + block: u32, + /// The block of the function body the code is in. + function: u32, + blocks: u32, + /// The functions set on table fields, by the variable and the keys they are set through. `None` + /// when the rule is off. + set_fields: Option>>>, + lines: Option, + suppressions: Option, + meta: bool, +} + +/// The variable a table field is set through. +#[derive(Clone, Debug, PartialEq, Eq, Hash)] +enum Root { + Local(LocalId), + Global(SmolStr), +} + +/// The last function set on a table field in one block. +struct SetField { + block: u32, + function: u32, + span: Span, } impl Flow<'_, '_> { @@ -41,24 +85,69 @@ impl Flow<'_, '_> { } } + /// `unreachable-code`: the statements after one that never finishes, up to a label, which a + /// `goto` may still reach. fn unreachable(&mut self, block: &Block) { - let exit = block.stmts.iter().position(|s| matches!(s.kind, StmtKind::Break | StmtKind::Goto(_))); - let Some(exit) = exit else { return }; - let Some(next) = block.stmts.get(exit + 1) else { return }; - if matches!(next.kind, StmtKind::Label(_)) { - return; - } - let end = block.stmts.last().map_or(next.span.end, |s| s.span.end); + let Some(exit) = block.stmts.iter().position(|stmt| self.never_finishes(stmt)) else { return }; + let rest = &block.stmts[exit + 1..]; + let reachable = rest.iter().position(|stmt| matches!(stmt.kind, StmtKind::Label(_))).unwrap_or(rest.len()); + let (Some(first), Some(last)) = (rest.first(), rest[..reachable].last()) else { return }; self.sink.report_with( rules::UNREACHABLE_CODE, - Span::new(next.span.start, end), + Span::new(first.span.start, last.span.end), "unreachable code", Some(Tag::Unnecessary), None, ); } - fn balance(&mut self, targets: usize, exprs: &[Expr], stmt_span: Span, is_local: bool) { + /// Whether running `stmt` never goes on to the statement after it: a `break` or `goto`, an `if` + /// with an `else` none of whose branches runs past its end, or a `while true` loop that nothing + /// leaves but a `return`. A loop with a `return` in it may still run zero times, and a `do` + /// block is left alone, as `do return end` skips the rest of a function on purpose. With + /// `strict`, a call of `error` or `os.exit` is one too, as TypeScript reports the code after a + /// `throw`. + fn never_finishes(&self, stmt: &Stmt) -> bool { + match &stmt.kind { + StmtKind::Break | StmtKind::Goto(_) => true, + StmtKind::Expr(_) if self.input.config.strict() => self.exits(stmt), + StmtKind::If { branches, else_block: Some(else_block) } => { + branches.iter().map(|branch| &branch.block).chain([else_block]).all(|block| self.leaves(block)) + } + StmtKind::While { cond, body } => { + matches!(cond.unparen().kind, ExprKind::True | ExprKind::Number(_) | ExprKind::String(_)) + && !leaves_loop(body) + } + _ => false, + } + } + + /// Whether a branch of an `if` never runs past its end. Like lua-language-server, a call of + /// `error` or `os.exit` counts here, though not as a statement of its own. + fn leaves(&self, block: &Block) -> bool { + block + .stmts + .iter() + .any(|stmt| matches!(stmt.kind, StmtKind::Return(_)) || self.never_finishes(stmt) || self.exits(stmt)) + } + + /// A call of the global `error` or `os.exit`. + fn exits(&self, stmt: &Stmt) -> bool { + let StmtKind::Expr(Expr { kind: ExprKind::Call { callee, .. }, .. }) = &stmt.kind else { return false }; + let global = |name: &Name, wanted: &str| { + name.text == wanted + && matches!(self.input.resolution.resolve_at(name.span.start), Some(Resolved::Global(_))) + }; + match &callee.kind { + ExprKind::Name(name) => global(name, "error"), + ExprKind::Field { base, name, .. } => { + name.text == "exit" && matches!(&base.kind, ExprKind::Name(base) if global(base, "os")) + } + _ => false, + } + } + + fn balance(&mut self, targets: usize, exprs: &[Expr], stmt_span: Span) { let Some(last) = exprs.last() else { return }; if exprs.len() > targets { let extra = exprs[targets].span.to(last.span); @@ -67,7 +156,7 @@ impl Flow<'_, '_> { extra, format!("{} value(s) assigned to {targets} target(s); the extra values are discarded", exprs.len()), ); - } else if exprs.len() < targets && !last.is_multi_value() && !is_local { + } else if exprs.len() < targets && !last.is_multi_value() { self.sink.report( rules::UNBALANCED_ASSIGNMENTS, stmt_span, @@ -95,6 +184,204 @@ impl Flow<'_, '_> { } } } + + /// Visits code that is a block of its own for `duplicate-set-field`. + fn in_new_block(&mut self, visit: impl FnOnce(&mut Self)) { + let outer = self.block; + self.blocks += 1; + self.block = self.blocks; + visit(self); + self.block = outer; + } + + fn root(&self, name: &Name) -> Option { + match self.input.resolution.resolve_at(name.span.start)? { + Resolved::Local(id) => Some(Root::Local(id)), + Resolved::Global(_) => Some(Root::Global(name.text.clone())), + } + } + + /// The variable an `a.b.c` or `a['b']` target starts from, and the keys after it. + fn place(&self, expr: &Expr) -> Option<(Root, String)> { + let (base, key) = match &expr.kind { + ExprKind::Name(name) => return Some((self.root(name)?, String::new())), + ExprKind::Paren(inner) => return self.place(inner), + ExprKind::Field { base, name, .. } => (base, format!("s:{}", name.text)), + ExprKind::Index { base, index, .. } => match &index.kind { + ExprKind::String(key) => (base, format!("s:{key}")), + ExprKind::Number(NumberValue::Int(key)) => (base, format!("n:{key}")), + _ => return None, + }, + _ => return None, + }; + let (root, path) = self.place(base)?; + Some((root, format!("{path}.{key}"))) + } + + /// `duplicate-set-field`: `function M.f()` or `M.f = function` where the same block already set + /// a function on that field. Side guards need no check of their own: each side's definition is + /// in a branch of its `if`, or after an `if` that returns on the other side. + fn set_function(&mut self, root: Option, path: String, span: Span) { + let (Some(root), Some(set_fields)) = (root, self.set_fields.as_mut()) else { return }; + let (block, function) = (self.block, self.function); + let definitions = set_fields.entry(root).or_default().entry(path).or_default(); + let Some(earlier) = definitions.iter_mut().find(|definition| definition.block == block) else { + definitions.push(SetField { block, function, span }); + return; + }; + let earlier = std::mem::replace(&mut earlier.span, span); + if self.suppressed_at(earlier.start) { + return; + } + let line = self.line_index().line_of(earlier.start) + 1; + let shown = span.text(self.input.source); + self.sink.report( + rules::DUPLICATE_SET_FIELD, + span, + format!("'{shown}' is already defined on line {line}; this definition replaces it"), + ); + } + + fn has_set_fields(&self) -> bool { + self.set_fields.as_ref().is_some_and(|set_fields| !set_fields.is_empty()) + } + + /// A read of a field, as `local old = M.f` is before wrapping it, so a later definition does not + /// simply replace the one that was read. Reads in other functions run at another time. + fn read_field(&mut self, place: Option<(Root, String)>) { + let Some((root, path)) = place else { return }; + let function = self.function; + let set_fields = self.set_fields.as_mut().and_then(|set_fields| set_fields.get_mut(&root)); + if let Some(definitions) = set_fields.and_then(|fields| fields.get_mut(&path)) { + definitions.retain(|definition| definition.function != function); + } + } + + /// An assignment to a table, as `p = lib.points.new(b)` is, which leaves the functions set on the + /// fields of the table it replaces behind. + fn assign_table(&mut self, target: &Expr) { + let Some((root, path)) = self.place(target) else { return }; + let function = self.function; + let Some(fields) = self.set_fields.as_mut().and_then(|set_fields| set_fields.get_mut(&root)) else { return }; + for (field, definitions) in fields.iter_mut() { + if field.strip_prefix(path.as_str()).is_some_and(|rest| rest.starts_with('.')) { + definitions.retain(|definition| definition.function != function); + } + } + } + + fn line_index(&mut self) -> &LineIndex { + let source = self.input.source; + self.lines.get_or_insert_with(|| LineIndex::new(source)) + } + + /// LuaLS leaves a repeated field alone when the rule is disabled at either definition. + fn suppressed_at(&mut self, offset: u32) -> bool { + let (source, comments) = (self.input.source, &self.input.chunk.comments); + let lines = self.lines.get_or_insert_with(|| LineIndex::new(source)); + let suppressions = self.suppressions.get_or_insert_with(|| Suppressions::parse(source, comments, lines)); + suppressions.is_suppressed(rules::DUPLICATE_SET_FIELD, lines.line_of(offset)) + } + + /// `ambiguity-1`: `x + y or 0` adds before the `or`, though `x + (y or 0)` was likely meant, and + /// `x or 1 + y` adds after it, though `(x or 1) + y` was likely meant. As in lua-language-server, + /// the `or` must give a literal in the first case and take one in the second, where it reads as + /// a default; parentheses show which was meant. + fn ambiguity(&mut self, expr: &Expr, lhs: &Expr, rhs: &Expr) { + let source = self.input.source; + let text = |expr: &Expr| expr.span.text(source).split_whitespace().collect::>().join(" "); + let (computed, meant) = match (&lhs.kind, &rhs.kind) { + (ExprKind::Binary { op, lhs: a, rhs: b, .. }, _) + if is_arithmetic(*op) && is_literal(rhs) && !is_literal(b) => + { + (text(lhs), format!("{} {} ({} or {})", text(a), op.symbol(), text(b), text(rhs))) + } + (_, ExprKind::Binary { op, lhs: a, rhs: b, .. }) + if is_arithmetic(*op) && is_literal(a) && !is_operation(lhs) => + { + (text(rhs), format!("({} or {}) {} {}", text(lhs), text(a), op.symbol(), text(b))) + } + _ => return, + }; + let message = format!("'{computed}' is computed before the 'or'; write '{meant}' if that was meant"); + self.sink.report(rules::AMBIGUITY_1, expr.span, message); + } + + /// `count-down-loop`: `for i = 10, 1` never runs, and `for i = #list, 1` never runs once its start + /// is above 1. Both were meant to count down. + fn count_down(&mut self, start: &Expr, limit: &Expr, step: Option<&Expr>) { + let Some(last) = number(limit) else { return }; + if step.is_some_and(|step| !number(step).is_some_and(|step| step > 0.0)) { + return; + } + let from_length = step.is_none() && last == 1.0 && starts_with_length(start); + if !from_length && !number(start).is_some_and(|first| first > last) { + return; + } + let source = self.input.source; + let text = |expr: &Expr| expr.span.text(source).split_whitespace().collect::>().join(" "); + let (first, last) = (text(start), text(limit)); + let (edit, negative) = match step { + Some(step) => { + let negative = format!("-{}", text(step)); + (TextEdit { span: step.span, new_text: negative.clone() }, negative) + } + None => { + (TextEdit { span: Span::new(limit.span.end, limit.span.end), new_text: ", -1".into() }, "-1".into()) + } + }; + let message = if from_length { + format!("the loop counts up from {first} to 1, so it never runs when {first} is greater than 1; did you mean `{first}, 1, -1`?") + } else { + format!( + "the loop never runs: it counts up from {first} to {last}; did you mean `{first}, {last}, {negative}`?" + ) + }; + let fix = Fix { title: format!("Count down with a step of {negative}"), edits: vec![edit] }; + let span = start.span.to(step.unwrap_or(limit).span); + self.sink.report_with(rules::COUNT_DOWN_LOOP, span, message, None, Some(fix)); + } +} + +/// The value of a numeric literal, negated or in parentheses. +fn number(expr: &Expr) -> Option { + match &expr.unparen().kind { + ExprKind::Number(NumberValue::Int(value)) => Some(*value as f64), + ExprKind::Number(NumberValue::Float(value)) => Some(*value), + ExprKind::Unary { op: UnOp::Neg, expr } => number(expr).map(|value| -value), + _ => None, + } +} + +/// An operator that binds tighter than `or` and gives a value that is no boolean. +fn is_arithmetic(op: BinOp) -> bool { + use BinOp::*; + matches!(op, Add | Sub | Mul | Div | IDiv | Mod | Pow | Concat | BAnd | BOr | BXor | Shl | Shr) +} + +fn is_literal(expr: &Expr) -> bool { + matches!( + expr.kind, + ExprKind::Number(_) + | ExprKind::String(_) + | ExprKind::JenkinsHash(_) + | ExprKind::True + | ExprKind::False + | ExprKind::Table(_) + ) +} + +fn is_operation(expr: &Expr) -> bool { + matches!(expr.kind, ExprKind::Binary { .. } | ExprKind::Unary { .. }) +} + +/// `#list`, or arithmetic that starts with it, like `#list - 1`. +fn starts_with_length(expr: &Expr) -> bool { + match &expr.unparen().kind { + ExprKind::Unary { op: UnOp::Len, .. } => true, + ExprKind::Binary { op: BinOp::Add | BinOp::Sub, lhs, .. } => starts_with_length(lhs), + _ => false, + } } fn same_place(a: &Expr, b: &Expr) -> bool { @@ -104,10 +391,80 @@ fn same_place(a: &Expr, b: &Expr) -> bool { } } +/// Whether the body of a loop can leave it other than by `return`: by a `break` of its own, or by a +/// `goto` to a label it does not have. +fn leaves_loop(body: &Block) -> bool { + fn labels<'a>(block: &'a Block, out: &mut Vec<&'a str>) { + for stmt in &block.stmts { + match &stmt.kind { + StmtKind::Label(name) => out.push(&name.text), + StmtKind::Do(body) + | StmtKind::While { body, .. } + | StmtKind::Repeat { body, .. } + | StmtKind::NumericFor { body, .. } + | StmtKind::GenericFor { body, .. } => labels(body, out), + StmtKind::If { branches, else_block } => { + branches.iter().map(|branch| &branch.block).chain(else_block).for_each(|block| labels(block, out)) + } + _ => {} + } + } + } + fn escapes(block: &Block, labels: &[&str], own: bool) -> bool { + block.stmts.iter().any(|stmt| match &stmt.kind { + StmtKind::Break => own, + StmtKind::Goto(name) => !labels.contains(&name.text.as_str()), + StmtKind::Do(body) => escapes(body, labels, own), + StmtKind::If { branches, else_block } => { + branches.iter().map(|branch| &branch.block).chain(else_block).any(|block| escapes(block, labels, own)) + } + StmtKind::While { body, .. } + | StmtKind::Repeat { body, .. } + | StmtKind::NumericFor { body, .. } + | StmtKind::GenericFor { body, .. } => escapes(body, labels, false), + _ => false, + }) + } + let mut inside = Vec::new(); + labels(body, &mut inside); + escapes(body, &inside, true) +} + +/// Whether a function body uses its `...`, rather than one of a function inside it. +fn uses_vararg(body: &Block) -> bool { + struct Finder(bool); + impl<'ast> Visitor<'ast> for Finder { + fn visit_func_body(&mut self, _: &'ast FuncBody) {} + + fn visit_expr(&mut self, expr: &'ast Expr) { + self.0 |= matches!(expr.kind, ExprKind::Vararg); + visit::walk_expr(self, expr); + } + } + let mut finder = Finder(false); + finder.visit_block(body); + finder.0 +} + +/// An `if` with a branch that ends in `return`. +fn can_return(stmt: &Stmt) -> bool { + let StmtKind::If { branches, else_block } = &stmt.kind else { return false }; + let returns = |block: &Block| matches!(block.stmts.last(), Some(Stmt { kind: StmtKind::Return(_), .. })); + branches.iter().map(|branch| &branch.block).chain(else_block).any(returns) +} + impl<'ast> Visitor<'ast> for Flow<'_, '_> { fn visit_block(&mut self, block: &'ast Block) { self.unreachable(block); - visit::walk_block(self, block); + let outer = self.block; + for stmt in &block.stmts { + self.visit_stmt(stmt); + if can_return(stmt) { + self.blocks += 1; + self.block = self.blocks; + } + } + self.block = outer; } fn visit_func_body(&mut self, func: &'ast FuncBody) { @@ -116,26 +473,85 @@ impl<'ast> Visitor<'ast> for Flow<'_, '_> { self.sink.report(rules::DUPLICATE_ARGUMENT, param.span, format!("duplicate argument '{}'", param.text)); } } - visit::walk_func_body(self, func); + // `redundant-return`: a `return` without values that ends the body, not one inside a block + // of it, which may skip the code after that block. + if let Some(Stmt { kind: StmtKind::Return(values), span }) = func.body.stmts.last() { + if values.is_empty() { + self.sink.report_with( + rules::REDUNDANT_RETURN, + Span::new(span.start, span.start + "return".len() as u32), + "redundant return at the end of the function", + Some(Tag::Unnecessary), + None, + ); + } + } + // `unused-vararg`: like lua-language-server, an empty body, which declares a signature, is + // left alone. + if let Some(vararg) = func.vararg { + if !self.meta && !func.body.stmts.is_empty() && !uses_vararg(&func.body) { + self.sink.report_with( + rules::UNUSED_VARARG, + vararg, + "'...' is never used", + Some(Tag::Unnecessary), + None, + ); + } + } + let outer = self.function; + self.in_new_block(|flow| { + flow.function = flow.block; + visit::walk_func_body(flow, func); + }); + self.function = outer; } fn visit_stmt(&mut self, stmt: &'ast Stmt) { match &stmt.kind { - StmtKind::Local { names, exprs, in_unpack: false } => self.balance(names.len(), exprs, stmt.span, true), + StmtKind::Local { names, exprs, in_unpack: false } => self.balance(names.len(), exprs, stmt.span), StmtKind::Assign { targets, exprs } => { - self.balance(targets.len(), exprs, stmt.span, false); + self.balance(targets.len(), exprs, stmt.span); if let ([target], [value]) = (targets.as_slice(), exprs.as_slice()) { if same_place(target, value) { self.sink.report(rules::SELF_ASSIGNMENT, stmt.span, "value is assigned to itself"); } } + exprs.iter().for_each(|value| self.visit_expr(value)); + for (i, target) in targets.iter().enumerate() { + // What the target is reached through is read; the target itself is written. + match &target.kind { + ExprKind::Name(_) => {} + ExprKind::Field { base, .. } => self.visit_expr(base), + ExprKind::Index { base, index, .. } => { + self.visit_expr(base); + self.visit_expr(index); + } + _ => self.visit_expr(target), + } + if self.has_set_fields() { + self.assign_table(target); + } + if exprs.get(i).is_some_and(|value| matches!(value.kind, ExprKind::Function(_))) { + if let Some((root, path)) = self.place(target).filter(|(_, path)| !path.is_empty()) { + self.set_function(Some(root), path, target.span); + } + } + } + return; + } + StmtKind::Function { name, .. } if !name.path.is_empty() || name.method.is_some() => { + let path = name.path.iter().chain(&name.method).map(|key| format!(".s:{}", key.text)).collect(); + self.set_function(self.root(&name.base), path, name.span); } StmtKind::Do(body) => self.empty_block(body, stmt.span, "do"), StmtKind::While { body, .. } => self.empty_block(body, stmt.span, "while"), StmtKind::Repeat { body, .. } => self.empty_block(body, stmt.span, "repeat"), - StmtKind::NumericFor { body, .. } | StmtKind::GenericFor { body, .. } => { - self.empty_block(body, stmt.span, "for") + StmtKind::NumericFor { start, limit, step, body, .. } => { + self.empty_block(body, stmt.span, "for"); + self.count_down(start, limit, step.as_ref()); } + StmtKind::GenericFor { body, .. } => self.empty_block(body, stmt.span, "for"), StmtKind::If { branches, else_block } => { for (i, branch) in branches.iter().enumerate() { let end = branches @@ -151,6 +567,14 @@ impl<'ast> Visitor<'ast> for Flow<'_, '_> { let start = branches.last().map_or(stmt.span.start, |b| b.block.span.end.max(b.cond.span.end)); self.empty_block(block, Span::new(start, stmt.span.end), "else"); } + for branch in branches { + self.visit_expr(&branch.cond); + self.in_new_block(|flow| flow.visit_block(&branch.block)); + } + if let Some(block) = else_block { + self.in_new_block(|flow| flow.visit_block(block)); + } + return; } _ => {} } @@ -160,6 +584,7 @@ impl<'ast> Visitor<'ast> for Flow<'_, '_> { fn visit_expr(&mut self, expr: &'ast Expr) { match &expr.kind { ExprKind::Table(fields) => self.duplicate_keys(fields), + ExprKind::Binary { op: BinOp::Or, lhs, rhs, .. } => self.ambiguity(expr, lhs, rhs), ExprKind::Binary { op: BinOp::Lt | BinOp::Le | BinOp::Gt | BinOp::Ge, lhs, rhs, .. } if same_place(lhs, rhs) => { @@ -169,6 +594,13 @@ impl<'ast> Visitor<'ast> for Flow<'_, '_> { "both sides of the comparison are the same expression", ); } + ExprKind::Field { .. } | ExprKind::Index { .. } if self.has_set_fields() => { + self.read_field(self.place(expr)) + } + ExprKind::MethodCall { base, method, .. } if self.has_set_fields() => { + let place = self.place(base).map(|(root, path)| (root, format!("{path}.s:{}", method.text))); + self.read_field(place); + } _ => {} } visit::walk_expr(self, expr); diff --git a/crates/qbx_lua_analysis/src/checks/globals.rs b/crates/qbx_lua_analysis/src/checks/globals.rs index 02e3e3e..3780639 100644 --- a/crates/qbx_lua_analysis/src/checks/globals.rs +++ b/crates/qbx_lua_analysis/src/checks/globals.rs @@ -2,12 +2,15 @@ use qbx_fivem_data::{is_hash_native_name, native, Side, KNOWN_IMPORTS}; use qbx_lua_syntax::ast::*; use qbx_lua_syntax::visit::{self, Visitor}; +use rustc_hash::FxHashSet; + +use super::fivem::DEFERRING_CALLS; use super::{FileInput, Sink}; use crate::diagnostic::Tag; -use crate::env::builtins; +use crate::env::{builtins, is_meta_file}; use crate::rules; -use crate::scope::{GlobalRef, GlobalRefKind, Resolved, MAIN_CHUNK}; -use crate::side_guard::SideRegions; +use crate::scope::{GlobalRef, GlobalRefKind, Resolution, Resolved, MAIN_CHUNK}; +use crate::side_guard::{other, SideRegions}; /// Fields ox_lib adds to standard library tables when it is imported. const OX_LIB_STD_EXTENSIONS: &[(&str, &str)] = &[ @@ -26,12 +29,23 @@ const AMBIGUOUS_IMPORT_GLOBALS: &[&str] = &["player", "_", "require"]; pub(super) fn check(input: &FileInput, sink: &mut Sink) { let regions = SideRegions::of(input.source, input.chunk); + let shared = SharedCode::of(input); + // A definition file declares the globals that other code defines, such as ox_lib's `noop` and + // `cache`, which lua-language-server does not report as lowercase or implicit globals. + let meta = is_meta_file(input.source, input.chunk); for global in &input.resolution.globals { match global.kind { - GlobalRefKind::Read => check_read(input, global, ®ions, sink), - GlobalRefKind::Write | GlobalRefKind::FunctionDecl => check_definition(input, global, sink), + GlobalRefKind::Read => check_read(input, global, ®ions, &shared, sink), + GlobalRefKind::Write | GlobalRefKind::FunctionDecl => check_definition(input, global, meta, sink), } } + for field in input.resolution.env_fields.iter().filter(|field| field.nil_env) { + sink.report( + rules::GLOBAL_IN_NIL_ENV, + field.span, + format!("'{}' is looked up in the local _ENV, which is nil here, so this raises an error", field.name), + ); + } Fields { input, sink }.visit_block(&input.chunk.block); } @@ -46,16 +60,115 @@ fn defined_in_project(input: &FileInput, name: &str) -> bool { } } -fn check_read(input: &FileInput, global: &GlobalRef, regions: &SideRegions, sink: &mut Sink) { +/// The code of a shared script, which runs on both sides, as far as names that only one side has go. +struct SharedCode { + /// The functions that run on every side the script loads on, as long as the side is not known. + load_time: Option>, +} + +impl SharedCode { + fn of(input: &FileInput) -> Self { + let shared = input.side == Some(Side::Shared) && !input.config.strict(); + Self { load_time: shared.then(|| load_time_functions(input.resolution, input.chunk)) } + } + + /// Whether the code at `global`, in an unguarded part of a shared script, runs on both sides. + /// With `strict`, as TypeScript knows no sides, any code may. Otherwise only code that runs + /// while the script loads does: outside function bodies, and in the functions that + /// `CreateThread` or `SetTimeout` start then. A function the script defines is left to the side + /// that calls it, as the callbacks of a shared config only one side calls are. + fn runs_on_both(&self, input: &FileInput, global: &GlobalRef) -> bool { + let Some(load_time) = &self.load_time else { return true }; + let function = input.resolution.functions.get(global.func as usize); + global.func == MAIN_CHUNK || function.is_some_and(|function| load_time.contains(&function.span.start)) + } +} + +/// The functions, by where they start, that `CreateThread` or `SetTimeout` start while the script +/// loads, also from such a function. +fn load_time_functions(resolution: &Resolution, chunk: &Chunk) -> FxHashSet { + struct LoadTime<'a> { + resolution: &'a Resolution, + at_load: bool, + functions: FxHashSet, + } + + impl<'ast> Visitor<'ast> for LoadTime<'_> { + fn visit_func_body(&mut self, func: &'ast FuncBody) { + let outer = std::mem::replace(&mut self.at_load, self.functions.contains(&func.span.start)); + visit::walk_func_body(self, func); + self.at_load = outer; + } + + fn visit_expr(&mut self, expr: &'ast Expr) { + if let (true, ExprKind::Call { callee, args, .. }) = (self.at_load, &expr.kind) { + if starts_thread(self.resolution, callee) { + let started = args.iter().filter_map(|arg| match &arg.kind { + ExprKind::Function(func) => Some(func.span.start), + _ => None, + }); + self.functions.extend(started); + } + } + visit::walk_expr(self, expr); + } + } + + let mut finder = LoadTime { resolution, at_load: true, functions: FxHashSet::default() }; + finder.visit_block(&chunk.block); + finder.functions +} + +/// Whether `callee` is the global `CreateThread`, `SetTimeout` or one of their `Citizen` names. +fn starts_thread(resolution: &Resolution, callee: &Expr) -> bool { + let mut root = callee; + while let ExprKind::Field { base, .. } = &root.kind { + root = base; + } + let ExprKind::Name(name) = &root.kind else { return false }; + matches!(resolution.resolve_at(name.span.start), Some(Resolved::Global(_))) + && callee.dotted_path().is_some_and(|path| DEFERRING_CALLS.contains(&path.as_str())) +} + +/// `fivem/native-wrong-side` for a global the resource defines in the scripts of one side only: +/// read from code of a shared script that also runs on the other side, or that a guard keeps there. +fn check_one_sided(input: &FileInput, global: &GlobalRef, guarded: Option, shared: &SharedCode, sink: &mut Sink) { + let (Some(resource), Some(Side::Shared)) = (&input.resource, input.side) else { return }; let name = global.name.as_str(); - if defined_in_project(input, name) || is_configured(input, name) { + let only = match (resource.env.defines(name, Some(Side::Client)), resource.env.defines(name, Some(Side::Server))) { + (true, false) => Side::Client, + (false, true) => Side::Server, + _ => return, + }; + let place = match guarded { + Some(side) if side != only => format!("code that only runs on the {}", side.label()), + None if shared.runs_on_both(input, global) => { + format!("a shared script that also runs on the {}", other(only).label()) + } + _ => return, + }; + let message = format!("'{name}' is only defined by {} scripts of this resource, but this is {place}", only.label()); + sink.report(rules::NATIVE_WRONG_SIDE, global.span, message); +} + +fn check_read(input: &FileInput, global: &GlobalRef, regions: &SideRegions, shared: &SharedCode, sink: &mut Sink) { + let name = global.name.as_str(); + if is_configured(input, name) { return; } let guarded = regions.side_at(global.span.start); + if defined_in_project(input, name) { + check_one_sided(input, global, guarded, shared, sink); + return; + } let side = guarded.or(input.side).unwrap_or(Side::Shared); let place = if guarded.is_some() { "code that only runs on the" } else { "a" }; let unit = if guarded.is_some() { "" } else { " script" }; + // A shared script also runs on the side that lacks a name, unless a guard keeps the code off it. + let unguarded_shared = guarded.is_none() && input.side == Some(Side::Shared); if let Some(builtin) = builtins().get(name) { + let missing_from_shared = + builtin.side != Side::Shared && unguarded_shared && shared.runs_on_both(input, global); if !builtin.side.is_available_on(side) { sink.report( rules::NATIVE_WRONG_SIDE, @@ -66,6 +179,16 @@ fn check_read(input: &FileInput, global: &GlobalRef, regions: &SideRegions, sink side.label() ), ); + } else if missing_from_shared { + sink.report( + rules::NATIVE_WRONG_SIDE, + global.span, + format!( + "'{name}' only exists on the {}, but this shared script also runs on the {}", + builtin.side.label(), + other(builtin.side).label() + ), + ); } else if builtin.deprecated { sink.report_with( rules::DEPRECATED, @@ -84,6 +207,16 @@ fn check_read(input: &FileInput, global: &GlobalRef, regions: &SideRegions, sink global.span, format!("native '{name}' is {}-only, but this is {place} {}{unit}", native.side.label(), side.label()), ); + } else if native.side != Side::Shared && unguarded_shared && shared.runs_on_both(input, global) { + sink.report( + rules::NATIVE_WRONG_SIDE, + global.span, + format!( + "native '{name}' is {}-only, but this shared script also runs on the {}", + native.side.label(), + other(native.side).label() + ), + ); } return; } @@ -132,7 +265,7 @@ fn check_read(input: &FileInput, global: &GlobalRef, regions: &SideRegions, sink sink.report(rules::UNDEFINED_GLOBAL, global.span, format!("undefined global '{name}'")); } -fn check_definition(input: &FileInput, global: &GlobalRef, sink: &mut Sink) { +fn check_definition(input: &FileInput, global: &GlobalRef, meta: bool, sink: &mut Sink) { let name = global.name.as_str(); if is_configured(input, name) { return; @@ -143,6 +276,9 @@ fn check_definition(input: &FileInput, global: &GlobalRef, sink: &mut Sink) { sink.report(rules::BUILTIN_OVERWRITE, global.span, format!("overwriting {what} '{name}'")); return; } + if meta { + return; + } if global.func == MAIN_CHUNK { if name.starts_with(|c: char| c.is_ascii_lowercase()) { sink.report( @@ -153,8 +289,9 @@ fn check_definition(input: &FileInput, global: &GlobalRef, sink: &mut Sink) { } return; } + // An encrypted script of an opaque resource may declare it at file scope. let declared = match &input.resource { - Some(resource) => resource.env.declared_at_file_scope(name), + Some(resource) => resource.env.opaque || resource.env.declared_at_file_scope(name), None => input.summary.global_defs.iter().any(|d| d.at_file_scope && d.name == name), }; if !declared { diff --git a/crates/qbx_lua_analysis/src/checks/layout.rs b/crates/qbx_lua_analysis/src/checks/layout.rs new file mode 100644 index 0000000..1568740 --- /dev/null +++ b/crates/qbx_lua_analysis/src/checks/layout.rs @@ -0,0 +1,143 @@ +//! Checks of how code is laid out over lines: a call whose arguments start a line of their own, in a +//! statement or a table constructor, and whitespace at the end of a line. + +use qbx_lua_syntax::ast::*; +use qbx_lua_syntax::visit::{self, Visitor}; +use qbx_lua_syntax::{LineIndex, Span, TokenKind}; + +use super::{FileInput, Sink}; +use crate::diagnostic::{Fix, TextEdit}; +use crate::rules; + +pub(super) fn check(input: &FileInput, sink: &mut Sink) { + let calls = sink.enabled(rules::NEWLINE_CALL).is_some(); + let fields = sink.enabled(rules::NEWFIELD_CALL).is_some(); + let spaces = sink.enabled(rules::TRAILING_SPACE).is_some(); + if !(calls || fields || spaces) { + return; + } + let lines = LineIndex::new(input.source); + if calls { + NewlineCalls { source: input.source, lines: &lines, sink: &mut *sink }.visit_block(&input.chunk.block); + } + if fields { + NewfieldCalls { source: input.source, lines: &lines, sink: &mut *sink }.visit_block(&input.chunk.block); + } + if spaces { + trailing_spaces(input, &lines, sink); + } +} + +/// `newline-call`: Lua reads a line that starts with `(` as the arguments of a call to whatever +/// ends the line above, so `local f = g` followed by `(h):run()` calls `g`. Like lua-language-server, +/// only arguments that could also stand as a statement of their own are reported: one expression in +/// parentheses whose result is then indexed, as by `.x`, `[k]` or `:m()`, or called, as an +/// immediately invoked function is. +struct NewlineCalls<'a, 's> { + source: &'a str, + lines: &'a LineIndex, + sink: &'a mut Sink<'s>, +} + +impl NewlineCalls<'_, '_> { + fn continued(&mut self, call: &Expr) { + let ExprKind::Call { callee, args, args_span, style: CallStyle::Paren } = &call.kind else { return }; + if args.len() != 1 || self.lines.line_of(callee.span.end) == self.lines.line_of(args_span.start) { + return; + } + let text = callee.span.text(self.source); + let callee = match text.contains('\n') || text.chars().count() > 40 { + true => "the expression".to_string(), + false => format!("'{text}'"), + }; + let message = format!( + "{callee} on the line above is called with the parentheses on this line; put a ';' before the '(' if this line starts a new statement" + ); + self.sink.report(rules::NEWLINE_CALL, Span::new(call.span.start, args_span.end), message); + } +} + +impl<'ast> Visitor<'ast> for NewlineCalls<'_, '_> { + fn visit_expr(&mut self, expr: &'ast Expr) { + match &expr.kind { + ExprKind::Field { base, .. } | ExprKind::Index { base, .. } | ExprKind::MethodCall { base, .. } => { + self.continued(base) + } + ExprKind::Call { callee, .. } => self.continued(callee), + _ => {} + } + visit::walk_expr(self, expr); + } +} + +/// `newfield-call`: an entry of a table constructor that ends a line, followed by one that starts +/// the next with `(`, a string or a table, is one call, so `{ print` followed by `("x") }` holds what +/// `print("x")` returns rather than `print` and `"x"`. Like lua-language-server, only entries without +/// a key are checked. +struct NewfieldCalls<'a, 's> { + source: &'a str, + lines: &'a LineIndex, + sink: &'a mut Sink<'s>, +} + +impl<'ast> Visitor<'ast> for NewfieldCalls<'_, '_> { + fn visit_expr(&mut self, expr: &'ast Expr) { + if let ExprKind::Table(fields) = &expr.kind { + for field in fields { + let TableField::Positional(value) = field else { continue }; + let (called, args_span) = match &value.kind { + ExprKind::Call { callee, args_span, .. } => (callee.span, *args_span), + ExprKind::MethodCall { base, method, args_span, .. } => (base.span.to(method.span), *args_span), + _ => continue, + }; + if self.lines.line_of(called.end) == self.lines.line_of(args_span.start) { + continue; + } + let text = called.text(self.source); + let called = match text.contains('\n') || text.chars().count() > 40 { + true => "the expression".to_string(), + false => format!("'{text}'"), + }; + let message = format!( + "{called} is called with the arguments on the next line, which make one entry of the table; put a ',' between them if they are two" + ); + self.sink.report(rules::NEWFIELD_CALL, value.span, message); + } + } + visit::walk_expr(self, expr); + } +} + +/// `trailing-space`: spaces or tabs at the end of a line, as lua-language-server reports them. Those +/// inside a comment or a string, such as a long string that spans lines, belong to it and are left +/// alone, as the formatter leaves them. +fn trailing_spaces(input: &FileInput, lines: &LineIndex, sink: &mut Sink) { + let source = input.source; + // The comments and the strings of the file, in the order they are written. + let comments = input.chunk.comments.iter().map(|comment| comment.span); + let strings = + input.chunk.tokens.iter().filter(|token| matches!(token.kind, TokenKind::String | TokenKind::LongString)); + let mut kept: Vec = comments.chain(strings.map(|token| token.span)).collect(); + kept.sort_by_key(|span| span.start); + let is_kept = |offset: u32| { + let next = kept.partition_point(|span| span.start <= offset); + next > 0 && kept[next - 1].contains(offset) + }; + for line in 0..lines.line_count() { + let start = lines.line_start(line) as usize; + let text = source[start..].split('\n').next().unwrap_or_default(); + let text = text.strip_suffix('\r').unwrap_or(text); + let code = text.trim_end_matches([' ', '\t']); + if code.len() == text.len() { + continue; + } + let span = Span::new((start + code.len()) as u32, (start + text.len()) as u32); + if is_kept(span.end - 1) { + continue; + } + let message = if code.is_empty() { "line contains only whitespace" } else { "trailing whitespace" }; + let fix = + Fix { title: "Remove trailing whitespace".into(), edits: vec![TextEdit { span, new_text: String::new() }] }; + sink.report_with(rules::TRAILING_SPACE, span, message, None, Some(fix)); + } +} diff --git a/crates/qbx_lua_analysis/src/checks/locals.rs b/crates/qbx_lua_analysis/src/checks/locals.rs index ae0fffc..7082047 100644 --- a/crates/qbx_lua_analysis/src/checks/locals.rs +++ b/crates/qbx_lua_analysis/src/checks/locals.rs @@ -1,22 +1,55 @@ -use qbx_lua_syntax::ast::Attrib; +use qbx_lua_syntax::ast::*; +use qbx_lua_syntax::visit::{self, Visitor}; +use rustc_hash::{FxHashMap, FxHashSet}; use super::{FileInput, Sink}; use crate::diagnostic::Tag; +use crate::env::{is_meta_file, leading_doc_lines}; use crate::rules; -use crate::scope::{Local, LocalKind}; +use crate::scope::{FuncId, Local, LocalId, LocalKind, LocalRef, Resolved}; pub(super) fn check(input: &FileInput, sink: &mut Sink) { let prefix = input.config.ignore_unused_prefix.as_str(); - for local in &input.resolution.locals { + // Like lua-language-server, an `_ENV` local is in use by every name that is no local. + let ignored = |local: &Local| { + local.name == "_" || local.name == "_ENV" || (!prefix.is_empty() && local.name.starts_with(prefix)) + }; + let mut shapes = Shapes { + input, + tables: FxHashSet::default(), + field_sets: FxHashSet::default(), + functions: Vec::new(), + empty_functions: FxHashSet::default(), + }; + shapes.visit_block(&input.chunk.block); + // Definition files declare signatures, which lua-language-server does not check for use: the + // parameters of their empty functions, and their local functions. + let meta = is_meta_file(input.source, input.chunk); + let only_used_by_unused = match meta { + true => FxHashSet::default(), + false => used_only_by_unused(input, &shapes, ignored), + }; + let declares = |local: &Local| { + let function = &input.resolution.functions[local.func as usize]; + meta && local.kind == LocalKind::Param && shapes.empty_functions.contains(&function.span.start) + }; + for (id, local) in input.resolution.locals.iter().enumerate() { if local.name.is_empty() { continue; } check_const_writes(local, sink); - let ignored = local.name == "_" || (!prefix.is_empty() && local.name.starts_with(prefix)); - if ignored || local.kind == LocalKind::ImplicitSelf { + if ignored(local) || local.kind == LocalKind::ImplicitSelf { continue; } - check_unused(local, sink); + if !declares(local) { + check_unused(local, &shapes, sink); + } + if only_used_by_unused.contains(&(id as LocalId)) { + let code = + if local.kind == LocalKind::LocalFunction { rules::UNUSED_FUNCTION } else { rules::UNUSED_LOCAL }; + let message = format!("function '{}' is only used by functions that are never used", local.name); + sink.report_with(code, local.decl, message, Some(Tag::Unnecessary), None); + } if let Some(previous) = local.redefines { let previous = input.resolution.local(previous); if previous.kind != LocalKind::Param || local.kind != LocalKind::Param { @@ -32,6 +65,51 @@ pub(super) fn check(input: &FileInput, sink: &mut Sink) { } } +/// The local functions, and locals declared with a function, that only functions which are never +/// used themselves read, as lua-language-server finds them: a read in the body of a function that +/// a local holds links that local to the one read, and any other read, in the main chunk or in a +/// function no local holds, such as a callback, uses it. A function that only calls itself is +/// never used either. +fn used_only_by_unused(input: &FileInput, shapes: &Shapes, ignored: impl Fn(&Local) -> bool) -> FxHashSet { + let resolution = input.resolution; + let starts: FxHashMap = + resolution.functions.iter().enumerate().map(|(id, function)| (function.span.start, id as FuncId)).collect(); + // The local that holds each function. + let mut holders: FxHashMap = FxHashMap::default(); + for (function, name) in &shapes.functions { + if let (Some(function), Some(Resolved::Local(local))) = (starts.get(function), resolution.resolve_at(*name)) { + holders.insert(*function, local); + } + } + let mut used = Vec::new(); + let mut links: FxHashMap> = FxHashMap::default(); + for &id in holders.values() { + let local = resolution.local(id); + if ignored(local) { + used.push(id); + continue; + } + for read in local.refs.iter().filter(|r| !r.write) { + match holders.get(&read.func) { + Some(by) => links.entry(*by).or_default().push(id), + None => { + used.push(id); + break; + } + } + } + } + let mut reached: FxHashSet = used.iter().copied().collect(); + while let Some(id) = used.pop() { + for next in links.get(&id).into_iter().flatten() { + if reached.insert(*next) { + used.push(*next); + } + } + } + holders.into_values().filter(|id| !reached.contains(id) && resolution.local(*id).is_read()).collect() +} + fn check_const_writes(local: &Local, sink: &mut Sink) { let Some(attrib @ (Attrib::Const | Attrib::Close)) = local.attrib else { return }; let label = if attrib == Attrib::Const { "const" } else { "close" }; @@ -44,11 +122,20 @@ fn check_const_writes(local: &Local, sink: &mut Sink) { } } -fn check_unused(local: &Local, sink: &mut Sink) { - if local.is_read() || local.attrib == Some(Attrib::Close) { +fn check_unused(local: &Local, shapes: &Shapes, sink: &mut Sink) { + if local.attrib == Some(Attrib::Close) { return; } let name = &local.name; + if local.is_read() { + // Like lua-language-server, setting fields of a table that is never read is no use of it. + let sets_fields = |r: &LocalRef| shapes.field_sets.contains(&r.span.start); + if shapes.tables.contains(&local.decl.start) && local.refs.iter().filter(|r| !r.write).all(sets_fields) { + let message = format!("local '{name}' is never read; only its fields are set"); + sink.report_with(rules::UNUSED_LOCAL, local.decl, message, Some(Tag::Unnecessary), None); + } + return; + } let (code, message) = match local.kind { LocalKind::Param => (rules::UNUSED_ARGUMENT, format!("unused argument '{name}'")), LocalKind::LoopVar => (rules::UNUSED_LOOP_VARIABLE, format!("unused loop variable '{name}'")), @@ -61,3 +148,66 @@ fn check_unused(local: &Local, sink: &mut Sink) { }; sink.report_with(code, local.decl, message, Some(Tag::Unnecessary), None); } + +/// What the statements of the file tell about how their locals are used. +struct Shapes<'a> { + input: &'a FileInput<'a>, + /// The locals declared with a table constructor, by where their name starts, other than the + /// table a `---@class` annotation declares, whose fields its users read. + tables: FxHashSet, + /// The references that only set a field of the table they name: the `t` of `t.x = v`, + /// `t[k] = v`, `function t.f()` and `function t:m()`. + field_sets: FxHashSet, + /// Where each function that a local holds starts, with where the name of that local starts. + functions: Vec<(u32, u32)>, + /// Where the functions without statements start. + empty_functions: FxHashSet, +} + +impl<'ast> Visitor<'ast> for Shapes<'_> { + fn visit_stmt(&mut self, stmt: &'ast Stmt) { + match &stmt.kind { + StmtKind::Local { names, exprs, .. } => { + for (name, value) in names.iter().zip(exprs) { + if let ExprKind::Function(func) = &value.kind { + self.functions.push((func.span.start, name.name.span.start)); + } + } + let tables = names.iter().zip(exprs).filter(|(_, value)| matches!(value.kind, ExprKind::Table(_))); + let mut tables = tables.map(|(name, _)| name.name.span.start).peekable(); + if tables.peek().is_some() && !self.declares_class(stmt) { + self.tables.extend(tables); + } + } + StmtKind::LocalFunction { name, func } => self.functions.push((func.span.start, name.span.start)), + StmtKind::Assign { targets, .. } => { + for target in targets { + if let ExprKind::Field { base, .. } | ExprKind::Index { base, .. } = &target.kind { + if let ExprKind::Name(name) = &base.kind { + self.field_sets.insert(name.span.start); + } + } + } + } + StmtKind::Function { name, .. } if name.path.len() + usize::from(name.method.is_some()) == 1 => { + self.field_sets.insert(name.base.span.start); + } + _ => {} + } + visit::walk_stmt(self, stmt); + } + + fn visit_func_body(&mut self, func: &'ast FuncBody) { + if func.body.stmts.is_empty() { + self.empty_functions.insert(func.span.start); + } + visit::walk_func_body(self, func); + } +} + +impl Shapes<'_> { + fn declares_class(&self, stmt: &Stmt) -> bool { + let docs = leading_doc_lines(self.input.source, &self.input.chunk.comments, stmt.span.start); + docs.iter().any(|line| line.trim_start().starts_with("@class")) + } +} diff --git a/crates/qbx_lua_analysis/src/checks/mod.rs b/crates/qbx_lua_analysis/src/checks/mod.rs index 814c33f..6607240 100644 --- a/crates/qbx_lua_analysis/src/checks/mod.rs +++ b/crates/qbx_lua_analysis/src/checks/mod.rs @@ -1,15 +1,18 @@ mod arity; mod crossfile; +mod diag_codes; +mod docs; mod fivem; mod flow; mod globals; +mod layout; mod locale; mod locals; pub mod manifest; mod security; use qbx_fivem_data::Side; -use qbx_lua_syntax::ast::Chunk; +use qbx_lua_syntax::ast::{Chunk, Expr}; use qbx_lua_syntax::{LineIndex, Span}; use crate::config::FileConfig; @@ -35,8 +38,14 @@ pub struct FileInput<'a> { pub locale: Option<&'a crate::locale::LocaleFile>, /// Slash-separated path inside the resource, empty when unknown. pub relative_path: &'a str, + /// How many values a call gives, when the types of the language server tell; without it a call + /// at the end of the arguments passes any number of them. + pub value_count: Option>, } +/// Tells how many values a call gives, when that is known. +pub type ValueCount<'a> = &'a dyn Fn(&Expr) -> Option; + #[derive(Clone, Copy)] pub struct ResourceInput<'a> { pub name: &'a str, @@ -106,6 +115,9 @@ pub fn check_file(input: &FileInput) -> Vec { } locals::check(input, &mut sink); flow::check(input, &mut sink); + layout::check(input, &mut sink); + docs::check(input, &mut sink); + diag_codes::check(input, &mut sink); globals::check(input, &mut sink); arity::check(input, &mut sink); fivem::check(input, &mut sink); diff --git a/crates/qbx_lua_analysis/src/config.rs b/crates/qbx_lua_analysis/src/config.rs index a21a52f..45f2937 100644 --- a/crates/qbx_lua_analysis/src/config.rs +++ b/crates/qbx_lua_analysis/src/config.rs @@ -43,6 +43,7 @@ struct RawConfig { globals: Vec, ignore_unused_prefix: Option, strict_classes: bool, + strict: Option, rules: BTreeMap, overrides: Vec, imports: Imports, @@ -91,6 +92,7 @@ impl From for Side { struct RawOverride { files: Vec, globals: Vec, + strict: Option, rules: BTreeMap, imports: Imports, side: Option, @@ -100,6 +102,7 @@ struct RawOverride { struct Override { files: GlobSet, globals: Vec, + strict: Option, rules: BTreeMap, imports: Imports, side: Option, @@ -115,6 +118,9 @@ pub struct Config { /// Whether a `---@class` without `(strict)` or `(loose)` is strict. Only classes declared in /// files whose diagnostics are reported follow it; qbx-lua-ls applies it. pub strict_classes: bool, + /// Whether the type checks of qbx-lua-ls report what TypeScript's strict mode does beyond + /// lua-language-server. `None` leaves it to the editor's setting. + strict: Option, pub format: qbx_lua_fmt::FormatOptions, /// Whether `format` comes from a `qbxlint.toml`. Editors keep their own indentation otherwise. pub format_configured: bool, @@ -245,6 +251,7 @@ impl Config { Ok(Override { files: build_globset(o.files.iter().map(String::as_str))?, globals: o.globals, + strict: o.strict, rules: o.rules, imports: o.imports, side: o.side.map(Side::from), @@ -258,6 +265,7 @@ impl Config { globals: raw.globals, ignore_unused_prefix: raw.ignore_unused_prefix.unwrap_or_else(|| "_".to_string()), strict_classes: raw.strict_classes, + strict: raw.strict, format: raw.format, format_configured: false, notes: Vec::new(), @@ -295,11 +303,13 @@ impl Config { let relative = self.relative(path); let mut rules = self.rules.clone(); let mut globals = self.globals.clone(); + let mut strict = self.strict; for entry in self.overrides.iter().filter(|o| o.files.is_match(relative)) { rules.extend(entry.rules.iter().map(|(k, v)| (k.clone(), *v))); globals.extend(entry.globals.iter().cloned()); + strict = entry.strict.or(strict); } - FileConfig { rules, globals, ignore_unused_prefix: self.ignore_unused_prefix.clone() } + FileConfig { rules, globals, ignore_unused_prefix: self.ignore_unused_prefix.clone(), strict } } /// The configured `imports` of the resource whose manifest is `manifest_path`. The scripts of a @@ -340,6 +350,7 @@ pub struct FileConfig { rules: BTreeMap, pub globals: Vec, pub ignore_unused_prefix: String, + strict: Option, } impl Default for FileConfig { @@ -364,6 +375,18 @@ impl FileConfig { pub fn set_default(&mut self, code: &str, level: Level) { self.rules.entry(code.to_string()).or_insert(level); } + + /// Whether the rules report what TypeScript's strict mode does where lua-language-server + /// reports nothing, such as `n + 1` for a `number?` in `need-check-nil`. Off unless the + /// configuration file or the editor turns it on. + pub fn strict(&self) -> bool { + self.strict.unwrap_or(false) + } + + /// Sets `strict` unless the configuration file sets it, as an editor setting does. + pub fn set_strict_default(&mut self, strict: bool) { + self.strict.get_or_insert(strict); + } } #[cfg(test)] @@ -397,6 +420,38 @@ mod tests { assert!(Config::parse("strict_classes = true", PathBuf::from("/repo")).unwrap().strict_classes); } + #[test] + fn strict_comes_from_the_last_override_that_sets_it() { + let config = Config::parse( + r#" + strict = true + [[overrides]] + files = ["vendor/**"] + strict = false + [[overrides]] + files = ["vendor/ours/**"] + strict = true + [[overrides]] + files = ["vendor/ours/**"] + globals = ["Later"] + "#, + PathBuf::from("/repo"), + ) + .unwrap(); + let strict = |path: &str| config.for_file(Path::new(&format!("/repo/{path}"))).strict(); + assert!(strict("client/main.lua")); + assert!(!strict("vendor/lib.lua")); + assert!(strict("vendor/ours/lib.lua"), "a later override without `strict` keeps it"); + + let mut file = config.for_file(Path::new("/repo/vendor/lib.lua")); + file.set_strict_default(true); + assert!(!file.strict(), "the configuration file wins over the editor"); + let mut file = FileConfig::default(); + assert!(!file.strict()); + file.set_strict_default(true); + assert!(file.strict()); + } + #[test] fn a_file_is_excluded_when_one_of_its_directories_is() { let config = Config::parse("exclude = ['web']", PathBuf::from("/repo")).unwrap(); diff --git a/crates/qbx_lua_analysis/src/crossref.rs b/crates/qbx_lua_analysis/src/crossref.rs index d490acc..6349639 100644 --- a/crates/qbx_lua_analysis/src/crossref.rs +++ b/crates/qbx_lua_analysis/src/crossref.rs @@ -1,18 +1,38 @@ use qbx_fivem_data::Side; use qbx_lua_syntax::ast::*; use qbx_lua_syntax::visit::{self, Visitor}; -use qbx_lua_syntax::SmolStr; +use qbx_lua_syntax::{Comment, SmolStr}; use rustc_hash::{FxHashMap, FxHashSet}; +use crate::signature::{documented, Requirement}; + #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct Arity { pub params: usize, + /// How many arguments a call has to pass: all the parameters, or, when the doc comment of the + /// function documents them, those up to the last one it requires. + pub required: usize, pub vararg: bool, } impl Arity { pub fn of(func: &FuncBody) -> Self { - Self { params: func.params.len(), vararg: func.vararg.is_some() } + let params = func.params.len(); + Self { params, required: params, vararg: func.vararg.is_some() } + } + + /// The arity of `func` under the doc comment above `anchor`: a call has to pass the parameters + /// up to the last one the comment requires, as `missing-parameter` counts them, so one marked + /// optional, as `---@param model? string`, or typed to take `nil` may be left out. Without a + /// comment that documents its parameters, it has to pass them all. + pub fn documented(source: &str, comments: &[Comment], anchor: u32, func: &FuncBody) -> Self { + let arity = Self::of(func); + match documented(source, comments, anchor, func, false) { + Some(fun) => { + Self { required: Requirement::of(&fun, false, &|_| None).arguments.min(arity.params), ..arity } + } + None => arity, + } } } @@ -45,42 +65,65 @@ impl CrossRefs { self.events.entry(name).or_default().push(EventRegistration { side, handler, resource }); } - pub fn collect(&mut self, chunk: &Chunk, side: Option, resource: Option<&str>) { + pub fn collect(&mut self, source: &str, chunk: &Chunk, side: Option, resource: Option<&str>) { if let Some(resource) = resource { self.resources.insert(SmolStr::new(resource)); } let regions = crate::side_guard::SideRegions::of_chunk(chunk); - let mut collector = Collector { refs: self, side, regions, resource, functions: FxHashMap::default() }; + let mut collector = Collector { + refs: self, + source, + comments: &chunk.comments, + side, + regions, + resource, + functions: FxHashMap::default(), + anchors: FxHashMap::default(), + }; collector.visit_block(&chunk.block); } } struct Collector<'a> { refs: &'a mut CrossRefs, + source: &'a str, + comments: &'a [Comment], side: Option, regions: crate::side_guard::SideRegions, resource: Option<&'a str>, functions: FxHashMap, + /// Where the statement starts whose value a call is, by where the call starts: the functions + /// passed to it take the doc comment above that statement, as the language server reads it. + anchors: FxHashMap, } impl<'ast> Visitor<'ast> for Collector<'_> { fn visit_stmt(&mut self, stmt: &'ast Stmt) { + let documented = |func: &FuncBody| Arity::documented(self.source, self.comments, stmt.span.start, func); match &stmt.kind { StmtKind::LocalFunction { name, func } => { - self.functions.insert(name.text.clone(), Arity::of(func)); + self.functions.insert(name.text.clone(), documented(func)); } StmtKind::Function { name, func } if name.path.is_empty() && name.method.is_none() => { - self.functions.insert(name.base.text.clone(), Arity::of(func)); + self.functions.insert(name.base.text.clone(), documented(func)); } StmtKind::Local { names, exprs, .. } => { for (name, expr) in names.iter().zip(exprs) { if let ExprKind::Function(func) = &expr.kind { - self.functions.insert(name.name.text.clone(), Arity::of(func)); + self.functions.insert(name.name.text.clone(), documented(func)); } } } _ => {} } + let values = match &stmt.kind { + StmtKind::Local { exprs, .. } | StmtKind::Assign { exprs, .. } | StmtKind::Return(exprs) => &exprs[..], + StmtKind::Expr(expr) => std::slice::from_ref(expr), + _ => &[], + }; + for value in values.iter().filter(|value| value.is_call()) { + self.anchors.insert(value.span.start, stmt.span.start); + } visit::walk_stmt(self, stmt); } @@ -90,7 +133,11 @@ impl<'ast> Visitor<'ast> for Collector<'_> { let name = args.first().and_then(Expr::as_string); match (path.as_deref(), name) { (Some(call), Some(name)) if EVENT_REGISTRATION_CALLS.contains(&call) => { - let handler = args.iter().skip(1).find_map(|arg| self.arity_of(arg)); + let anchor = self.anchors.get(&expr.span.start).copied().unwrap_or(expr.span.start); + let handler = args.iter().skip(1).find_map(|arg| match &arg.kind { + ExprKind::Function(func) => Some(Arity::documented(self.source, self.comments, anchor, func)), + _ => self.arity_of(arg), + }); let side = self.regions.effective(expr.span.start, self.side); self.refs.add_event(name.clone(), side, handler, self.resource.map(SmolStr::new)); } @@ -98,7 +145,7 @@ impl<'ast> Visitor<'ast> for Collector<'_> { if let (Some(resource), Some(arity)) = (self.resource, args.get(1).and_then(|a| self.arity_of(a))) { self.refs.exports.insert((SmolStr::new(resource), name.clone()), arity); } else if let Some(resource) = self.resource { - let unknown = Arity { params: 0, vararg: true }; + let unknown = Arity { params: 0, required: 0, vararg: true }; self.refs.exports.insert((SmolStr::new(resource), name.clone()), unknown); } } diff --git a/crates/qbx_lua_analysis/src/directives.rs b/crates/qbx_lua_analysis/src/directives.rs index f221692..bba64f6 100644 --- a/crates/qbx_lua_analysis/src/directives.rs +++ b/crates/qbx_lua_analysis/src/directives.rs @@ -1,4 +1,4 @@ -use qbx_lua_syntax::{Comment, LineIndex}; +use qbx_lua_syntax::{Comment, LineIndex, Span}; #[derive(Debug)] struct LineRule { @@ -28,22 +28,20 @@ enum Action { DisableNextLine, } -fn parse_directive(text: &str, own_line: bool) -> Option<(Action, Vec)> { - let text = text.trim_start_matches('-').trim(); - if let Some(luacheck) = text.strip_prefix("luacheck:") { +/// What a directive comment does, and the codes it names with the byte of `text` each starts at. +fn parse_directive(text: &str, own_line: bool) -> Option<(Action, Vec<(usize, &str)>)> { + let body = text.trim_start_matches('-').trim_start(); + if let Some(luacheck) = body.strip_prefix("luacheck:") { let ignores = luacheck.split_whitespace().next() == Some("ignore"); let action = if own_line { Action::Disable } else { Action::DisableLine }; return ignores.then_some((action, Vec::new())); } - let rest = text - .strip_prefix("qbx-lint:") - .or_else(|| text.strip_prefix("qbxlint:")) - .or_else(|| text.strip_prefix("@diagnostic"))? - .trim(); - let (action, codes) = match rest.find(|c: char| c == ':' || c.is_whitespace()) { - Some(i) => (&rest[..i], rest[i + 1..].trim_start_matches(':').trim()), - None => (rest, ""), + let (rest, lua_ls) = match body.strip_prefix("@diagnostic") { + Some(rest) => (rest.trim_start(), true), + None => (body.strip_prefix("qbx-lint:").or_else(|| body.strip_prefix("qbxlint:"))?.trim_start(), false), }; + // Any whitespace separates, so a non-breaking space pasted in where a space was meant still works. + let (action, codes) = rest.split_once(|c: char| c == ':' || c.is_whitespace()).unwrap_or((rest, "")); let action = match action { "disable" => Action::Disable, "enable" => Action::Enable, @@ -51,16 +49,38 @@ fn parse_directive(text: &str, own_line: bool) -> Option<(Action, Vec)> "disable-next-line" => Action::DisableNextLine, _ => return None, }; - let codes = codes - .split([',', ' ']) - .map(str::trim) - .filter(|c| !c.is_empty()) - .take_while(|c| !c.starts_with("--")) - .map(str::to_string) - .collect(); + let is_separator = |c: char| c == ',' || c.is_whitespace(); + let mut rest = codes.trim_start_matches(':'); + let mut codes = Vec::new(); + loop { + rest = rest.trim_start_matches(is_separator); + if rest.is_empty() || rest.starts_with("--") { + break; + } + let end = rest.find(is_separator).unwrap_or(rest.len()); + codes.push((text.len() - rest.len(), &rest[..end])); + rest = &rest[end..]; + // LuaLS reads the codes of `---@diagnostic` up to the first that no comma follows. + if lua_ls && !rest.trim_start().starts_with(',') { + break; + } + } Some((action, codes)) } +/// The codes that inline directive comments name, with where each is written. +pub fn directive_codes<'s>(source: &'s str, comments: &[Comment]) -> Vec<(Span, &'s str)> { + let mut out = Vec::new(); + for comment in comments { + let Some((_, codes)) = parse_directive(comment.span.text(source), true) else { continue }; + for (offset, code) in codes { + let start = comment.span.start + offset as u32; + out.push((Span::new(start, start + code.len() as u32), code)); + } + } + out +} + impl Suppressions { pub fn parse(source: &str, comments: &[Comment], line_index: &LineIndex) -> Self { let mut out = Self::default(); @@ -71,6 +91,7 @@ impl Suppressions { let Some((action, codes)) = parse_directive(comment.span.text(source), before.trim().is_empty()) else { continue; }; + let codes: Vec = codes.into_iter().map(|(_, code)| code.to_string()).collect(); match action { Action::DisableLine => out.lines.push(LineRule { line, codes }), Action::DisableNextLine => out.lines.push(LineRule { line: line + 1, codes }), @@ -139,4 +160,44 @@ function B() end", assert!(!s.is_suppressed("undefined-global", 3)); assert!(s.is_suppressed("unused-local", 5)); } + + #[test] + fn codes_keep_their_position() { + let source = "local a ---@diagnostic disable-line: unused-local, empty-block -- why\n-- qbx-lint: disable\u{a0}fivem/loop-never-yields\n-- luacheck: ignore 211"; + let chunk = parse(source); + let codes: Vec<(&str, &str)> = directive_codes(source, &chunk.comments) + .into_iter() + .map(|(span, code)| (span.text(source), code)) + .collect(); + assert_eq!( + codes, + [ + ("unused-local", "unused-local"), + ("empty-block", "empty-block"), + ("fivem/loop-never-yields", "fivem/loop-never-yields") + ] + ); + } + + #[test] + fn diagnostic_codes_end_at_the_first_without_a_comma() { + let s = suppressions("---@diagnostic disable-next-line: unused-local (set later by bridge)\nlocal a\n---@diagnostic disable-next-line: empty-block ,unused-local undefined-global\nlocal b\n-- qbx-lint: disable-next-line unused-local undefined-global\nprint(c)"); + assert!(s.is_suppressed("unused-local", 1)); + assert!(!s.is_suppressed("bridge)", 1)); + assert!(s.is_suppressed("unused-local", 3)); + assert!(!s.is_suppressed("undefined-global", 3)); + assert!(s.is_suppressed("undefined-global", 5)); + } + + #[test] + fn unicode_whitespace_separates() { + let s = suppressions("-- qbx-lint: disable-next-line\u{a0}undefined-global\u{3000}unused-local\nprint(foo)\nlocal a ---@diagnostic disable-line:\u{a0}empty-block,\u{a0}unused-local\n-- qbx-lint: disable\u{3000}lowercase-global\nx = 1"); + assert!(s.is_suppressed("undefined-global", 1)); + assert!(s.is_suppressed("unused-local", 1)); + assert!(!s.is_suppressed("empty-block", 1)); + assert!(s.is_suppressed("empty-block", 2)); + assert!(s.is_suppressed("unused-local", 2)); + assert!(s.is_suppressed("lowercase-global", 4)); + assert!(!s.is_suppressed("undefined-global", 4)); + } } diff --git a/crates/qbx_lua_analysis/src/env.rs b/crates/qbx_lua_analysis/src/env.rs index 09cc12f..85a4dcb 100644 --- a/crates/qbx_lua_analysis/src/env.rs +++ b/crates/qbx_lua_analysis/src/env.rs @@ -1,13 +1,18 @@ -use std::sync::OnceLock; +use std::sync::{Arc, OnceLock}; -use qbx_fivem_data::{Side, STUBS}; +use qbx_fivem_data::{Side, Stub, STUBS}; use qbx_lua_syntax::ast::*; -use qbx_lua_syntax::{parse, Comment, SmolStr}; +use qbx_lua_syntax::{parse, Comment, CommentKind, SmolStr}; +use qbx_luacats::types::FunType; use rustc_hash::{FxHashMap, FxHashSet}; +use crate::signature::{defined, global_key}; + #[derive(Debug)] pub struct BuiltinGlobal { pub side: Side, + /// Whether it is a Lua standard library, such as `os`, rather than a CfxLua addition. + pub library: bool, pub fields: FxHashSet, pub deprecated: bool, pub deprecated_fields: FxHashSet, @@ -16,6 +21,8 @@ pub struct BuiltinGlobal { #[derive(Debug, Default)] pub struct Builtins { globals: FxHashMap, + /// The signatures of the functions the stubs declare, by dotted path, such as `os.time`. + functions: FxHashMap>, } /// Library tables whose field set is fully known, so reading anything else is a bug. @@ -40,33 +47,45 @@ impl Builtins { self.globals.iter() } - fn entry(&mut self, name: &SmolStr, side: Side) -> &mut BuiltinGlobal { + /// The signature the stubs declare for the runtime function at the dotted `path`. + pub fn function(&self, path: &str) -> Option<&Arc> { + self.functions.get(path) + } + + fn entry(&mut self, name: &SmolStr, side: Side, library: bool) -> &mut BuiltinGlobal { self.globals.entry(name.clone()).or_insert_with(|| BuiltinGlobal { side, + library, fields: FxHashSet::default(), deprecated: false, deprecated_fields: FxHashSet::default(), }) } - fn load_stub(&mut self, source: &str, side: Side) { + fn load_stub(&mut self, stub: &Stub) { + let source = stub.source; let chunk = parse(source); for stmt in &chunk.block.stmts { let deprecated = leading_doc_lines(source, &chunk.comments, stmt.span.start) .iter() .any(|line| line.trim_start().starts_with("@deprecated")); match &stmt.kind { - StmtKind::Function { name, .. } => { + StmtKind::Function { name, func } => { let member = name.path.first().or(name.method.as_ref()); - self.define(&name.base.text, member.map(|m| &m.text), side, deprecated); + self.define(stub, &name.base.text, member.map(|m| &m.text), deprecated); + let fields: Vec<&str> = name.path.iter().chain(&name.method).map(|n| n.text.as_str()).collect(); + if let Some(path) = global_key(&name.base.text, &fields) { + let signature = defined(source, &chunk.comments, stmt.span.start, func, name.method.is_some()); + self.functions.entry(path).or_insert(signature); + } } StmtKind::Assign { targets, .. } => { for target in targets { match &target.kind { - ExprKind::Name(name) => self.define(&name.text, None, side, deprecated), + ExprKind::Name(name) => self.define(stub, &name.text, None, deprecated), ExprKind::Field { base, name, .. } => { if let ExprKind::Name(base) = &base.kind { - self.define(&base.text, Some(&name.text), side, deprecated); + self.define(stub, &base.text, Some(&name.text), deprecated); } } _ => {} @@ -78,8 +97,8 @@ impl Builtins { } } - fn define(&mut self, name: &SmolStr, field: Option<&SmolStr>, side: Side, deprecated: bool) { - let global = self.entry(name, side); + fn define(&mut self, stub: &Stub, name: &SmolStr, field: Option<&SmolStr>, deprecated: bool) { + let global = self.entry(name, stub.side, stub.library); match field { Some(field) => { global.fields.insert(field.clone()); @@ -97,16 +116,18 @@ pub fn builtins() -> &'static Builtins { BUILTINS.get_or_init(|| { let mut builtins = Builtins::default(); for stub in STUBS { - builtins.load_stub(stub.source, stub.side); + builtins.load_stub(stub); } for name in EXTRA_GLOBALS { - builtins.entry(&SmolStr::new_static(name), Side::Shared); + builtins.entry(&SmolStr::new_static(name), Side::Shared, false); } builtins }) } -/// The `---` doc lines directly above `offset`, top to bottom, with the `---` prefix removed. +/// The `---` doc lines directly above `offset`, top to bottom, with the `---` prefix removed. Like +/// LuaLS, other comments on lines of their own are passed over, so a `-- qbx-lint:` directive +/// between the docs and the code keeps them; a blank line or code ends the block. pub fn leading_doc_lines<'a>(source: &'a str, comments: &[Comment], offset: u32) -> Vec<&'a str> { let mut lines = Vec::new(); let mut cursor = offset; @@ -116,18 +137,58 @@ pub fn leading_doc_lines<'a>(source: &'a str, comments: &[Comment], offset: u32) if gap.bytes().filter(|b| *b == b'\n').count() > 1 || !gap.trim().is_empty() { break; } - let text = comment.span.text(source); - let Some(doc) = text.strip_prefix("---") else { break }; if !source[..comment.span.start as usize].rsplit('\n').next().unwrap_or("").trim().is_empty() { break; } - lines.push(doc); + if let Some(doc) = comment.span.text(source).strip_prefix("---") { + lines.push(doc); + } cursor = comment.span.start; } lines.reverse(); lines } +/// Runs of adjacent `---` line comments, each one annotation block. Like LuaLS, other comments +/// inside a run are passed over; a blank line or code ends it. +pub fn doc_blocks<'c>(source: &str, comments: &'c [Comment]) -> Vec> { + let mut blocks: Vec> = Vec::new(); + let mut block: Vec<&Comment> = Vec::new(); + let mut previous_end: Option = None; + for comment in comments { + let adjacent = previous_end.is_some_and(|end| { + let gap = &source[end as usize..comment.span.start as usize]; + gap.bytes().filter(|b| *b == b'\n').count() <= 1 && gap.trim().is_empty() + }); + if !adjacent && !block.is_empty() { + blocks.push(std::mem::take(&mut block)); + } + if comment.kind == CommentKind::Line && comment.span.text(source).starts_with("---") { + block.push(comment); + } + previous_end = Some(comment.span.end); + } + if !block.is_empty() { + blocks.push(block); + } + blocks +} + +/// Whether a `---@meta` line above the first statement marks the file as a definition file. +pub fn is_meta_file(source: &str, chunk: &Chunk) -> bool { + let first_stmt = chunk.block.stmts.first().map_or(u32::MAX, |stmt| stmt.span.start); + chunk + .comments + .iter() + .take_while(|comment| comment.span.start < first_stmt) + .any(|comment| is_meta_comment(comment.span.text(source))) +} + +fn is_meta_comment(text: &str) -> bool { + let doc = text.strip_prefix("---").unwrap_or_default(); + doc.trim_start().strip_prefix("@meta").is_some_and(|rest| rest.is_empty() || rest.starts_with(char::is_whitespace)) +} + #[cfg(test)] mod tests { use super::*; @@ -154,6 +215,13 @@ mod tests { assert!(!builtins.is_defined("TriggerServerEvent", Side::Server)); assert!(builtins.is_defined("TriggerClientEvent", Side::Server)); assert!(!builtins.is_defined("TriggerClientEvent", Side::Client)); + for name in ["os", "io"] { + let library = builtins.closed_table(name).unwrap(); + assert_eq!((library.side, library.library), (Side::Server, true), "{name}"); + } + assert!(builtins.get("string").unwrap().library); + assert!(!builtins.get("Citizen").unwrap().library); + assert!(builtins.closed_table("os").unwrap().fields.contains("nanotime")); assert!(builtins.closed_table("string").unwrap().fields.contains("format")); assert!(builtins.closed_table("Citizen").unwrap().fields.contains("Wait")); assert!(builtins.closed_table("math").is_none()); @@ -169,4 +237,22 @@ mod tests { let g = chunk.block.stmts[2].span.start; assert!(leading_doc_lines(source, &chunk.comments, g).is_empty()); } + + #[test] + fn doc_lines_pass_over_other_comments_on_their_own_lines() { + let source = "---@param a number\n-- qbx-lint: disable-next-line lowercase-global\nfunction lower(a) end\n\ + ---@param b number\n-- one\n-- two\nlocal function plain(b) end\n\ + ---@param c number\n--[[ block\ncomment ]]\nlocal function block(c) end\n\ + --- first\n-- note\n---@param d number\nlocal function middle(d) end\n\ + ---@param e number\n-- one\n\nlocal function blank(e) end\n\ + ---@param f number\nlocal x = 1 -- trailing\nlocal function trailing(f) end"; + let chunk = parse(source); + let docs = |index: usize| leading_doc_lines(source, &chunk.comments, chunk.block.stmts[index].span.start); + assert_eq!(docs(0), ["@param a number"], "a qbx-lint directive"); + assert_eq!(docs(1), ["@param b number"], "plain comments"); + assert_eq!(docs(2), ["@param c number"], "a block comment"); + assert_eq!(docs(3), [" first", "@param d number"], "a plain comment inside the docs"); + assert!(docs(4).is_empty(), "a blank line after a plain comment"); + assert!(docs(6).is_empty(), "a comment after code"); + } } diff --git a/crates/qbx_lua_analysis/src/lint.rs b/crates/qbx_lua_analysis/src/lint.rs index e47d1b6..a3d4c63 100644 --- a/crates/qbx_lua_analysis/src/lint.rs +++ b/crates/qbx_lua_analysis/src/lint.rs @@ -12,8 +12,8 @@ use crate::crossref::CrossRefs; use crate::diagnostic::{Diagnostic, Severity}; use crate::locale::{locale_usage, LocaleFile}; use crate::project::{ - find_manifest_dir, is_manifest_file, lua_files_under, read_source, relative_slash_path, ParsedFile, Resource, - ResourceLocator, + find_manifest_dir, is_manifest_file, lua_files_under, read_source, relative_slash_path, walks_into, ParsedFile, + Resource, ResourceLocator, }; use crate::rules; use qbx_lua_syntax::parse; @@ -85,7 +85,7 @@ fn collect_crossrefs( match root.and_then(|root| load_resource(root, config, locator)) { Some(resource) => { for file in &resource.files { - refs.collect(&file.chunk, file.side, Some(&resource.name)); + refs.collect(&file.source, &file.chunk, file.side, Some(&resource.name)); } if resource.env.opaque || resource.manifest.has_non_lua_scripts() { refs.opaque_resources.insert(resource.name.as_str().into()); @@ -93,7 +93,7 @@ fn collect_crossrefs( } None => { for source in files.iter().filter_map(|path| read_source(path).ok()) { - refs.collect(&parse(&source), None, None); + refs.collect(&source, &parse(&source), None, None); } } } @@ -118,6 +118,7 @@ fn lint_loose_file(path: &Path, config: &Config, crossrefs: &CrossRefs) -> Optio crossrefs: Some(crossrefs), locale: None, relative_path: "", + value_count: None, }); Some(FileReport { path: file.path, source: file.source, diagnostics }) } @@ -178,8 +179,9 @@ fn lint_resource( let mut reports: Vec = resource .files .par_iter() - .filter(|file| targets.contains(&file.path) && !config.ignores_diagnostics(&file.path)) - .map(|file| { + .enumerate() + .filter(|(_, file)| targets.contains(&file.path) && !config.ignores_diagnostics(&file.path)) + .map(|(index, file)| { let mut file_config = config.for_file(&file.path); if resource.manifest.is_map_file(&file.relative) { file_config.set(rules::UNDEFINED_GLOBAL, crate::config::Level::Off); @@ -193,7 +195,7 @@ fn lint_resource( side: file.side, resource: Some(ResourceInput { name: &resource.name, - env: &resource.env, + env: resource.env_for(index), manifest: &resource.manifest, started_before: started_before.as_ref(), installed: start_order.as_ref().map(|order| &order.installed), @@ -201,6 +203,7 @@ fn lint_resource( crossrefs: Some(crossrefs), locale: locale.as_ref(), relative_path: &file.relative, + value_count: None, }); FileReport { path: file.path.clone(), source: file.source.clone(), diagnostics } }) @@ -241,11 +244,14 @@ fn lint_resource( } pub fn all_files(root: &Path) -> Vec { + let walked = root.canonicalize().ok(); WalkDir::new(root) + .follow_links(true) .into_iter() .filter_entry(|e| { let name = e.file_name().to_string_lossy(); - e.depth() == 0 || !(name == "node_modules" || name == ".git") + let skipped = e.depth() > 0 && (name == "node_modules" || name == ".git"); + !skipped && walks_into(walked.as_deref(), e) }) .flatten() .filter(|e| e.file_type().is_file()) diff --git a/crates/qbx_lua_analysis/src/lua_ls_config.rs b/crates/qbx_lua_analysis/src/lua_ls_config.rs index c18cc93..7247772 100644 --- a/crates/qbx_lua_analysis/src/lua_ls_config.rs +++ b/crates/qbx_lua_analysis/src/lua_ls_config.rs @@ -13,30 +13,214 @@ pub const FILE_NAMES: &[&str] = &[".luarc.json", ".luarc.jsonc", ".emmyrc.json"] /// EmmyLua codes that cover several qbx-lint rules. const ALIASES: &[(&str, &[&str])] = - &[("unused", &["unused-local", "unused-function", "unused-argument", "unused-loop-variable"])]; + &[("unused", &["unused-local", "unused-function", "unused-argument", "unused-loop-variable", "unused-vararg"])]; /// Codes that check the same thing in both tools. `undefined-field` and `deprecated` only share the /// name: projects often turn off the broad LuaLS checks, which must not turn off the narrow ones here. const EQUIVALENT_CODES: &[&str] = &[ "undefined-global", "lowercase-global", + "global-in-nil-env", "unused-local", "unused-function", "unused-label", + "unused-vararg", "redefined-local", "unreachable-code", "empty-block", "unbalanced-assignments", "duplicate-index", + "duplicate-set-field", + "count-down-loop", "missing-parameter", + "redundant-parameter", "undefined-doc-name", + "undefined-doc-param", + "duplicate-doc-alias", + "duplicate-doc-field", + "missing-global-doc", + "missing-local-export-doc", + "incomplete-signature-doc", "missing-fields", "assign-type-mismatch", + "invisible", + "param-type-mismatch", "return-type-mismatch", "missing-return", + "redundant-return-value", + "discard-returns", + "cast-type-mismatch", + "cast-local-type", "no-unknown", + "need-check-nil", + "inject-field", + "newline-call", + "newfield-call", + "ambiguity-1", + "trailing-space", + "redundant-return", + "duplicate-doc-param", + "doc-field-no-class", + "unknown-operator", + "unknown-cast-variable", + "unknown-diag-code", + "close-non-object", + "circle-doc-class", ]; +/// The diagnostic codes of lua-language-server 3.19.1, including those that have no rule here. +pub const LUA_LS_CODES: &[&str] = &[ + "unused-local", + "unused-function", + "unused-label", + "unused-vararg", + "trailing-space", + "redundant-return", + "empty-block", + "code-after-break", + "unreachable-code", + "redundant-value", + "unbalanced-assignments", + "redundant-parameter", + "missing-parameter", + "missing-return-value", + "redundant-return-value", + "missing-return", + "missing-fields", + "need-check-nil", + "undefined-field", + "cast-local-type", + "assign-type-mismatch", + "param-type-mismatch", + "cast-type-mismatch", + "return-type-mismatch", + "inject-field", + "unnecessary-assert", + "duplicate-doc-alias", + "undefined-doc-class", + "undefined-doc-name", + "circle-doc-class", + "undefined-doc-param", + "duplicate-doc-param", + "doc-field-no-class", + "duplicate-doc-field", + "unknown-diag-code", + "unknown-cast-variable", + "unknown-operator", + "incomplete-signature-doc", + "missing-global-doc", + "missing-local-export-doc", + "codestyle-check", + "spell-check", + "name-style-check", + "newline-call", + "newfield-call", + "ambiguity-1", + "count-down-loop", + "different-requires", + "await-in-sync", + "not-yieldable", + "no-unknown", + "redefined-local", + "undefined-global", + "global-in-nil-env", + "lowercase-global", + "undefined-env-child", + "global-element", + "duplicate-index", + "duplicate-set-field", + "close-non-object", + "deprecated", + "discard-returns", + "invisible", +]; + +/// The names of lua-language-server's syntax errors, which `---@diagnostic` comments may name too. +const LUA_LS_SYNTAX_ERRORS: &[&str] = &[ + "action-after-return", + "ambiguous-syntax", + "args-after-dots", + "assign-const-global", + "block-after-else", + "break-outside", + "declare-const", + "env-is-global", + "err-assign-as-eq", + "err-c-long-comment", + "err-comment-prefix", + "err-do-as-then", + "err-eq-as-assign", + "err-esc", + "err-nonstandard-symbol", + "err-then-as-do", + "exp-in-action", + "global-close-attribute", + "index-in-func-name", + "jump-local-scope", + "keyword", + "local-limit", + "lua-doc-miss-sign", + "luadoc-error-diag-mode", + "luadoc-miss-alias-extends", + "luadoc-miss-alias-name", + "luadoc-miss-arg-name", + "luadoc-miss-cate-name", + "luadoc-miss-class-extends-name", + "luadoc-miss-class-name", + "luadoc-miss-diag-mode", + "luadoc-miss-diag-name", + "luadoc-miss-field-extends", + "luadoc-miss-field-name", + "luadoc-miss-fun-after-overload", + "luadoc-miss-generic-name", + "luadoc-miss-local-name", + "luadoc-miss-module-name", + "luadoc-miss-operator-name", + "luadoc-miss-param-extends", + "luadoc-miss-param-name", + "luadoc-miss-see-name", + "luadoc-miss-sign-name", + "luadoc-miss-symbol", + "luadoc-miss-type-name", + "luadoc-miss-vararg-type", + "luadoc-miss-version", + "malformed-number", + "miss-end", + "miss-esc-x", + "miss-exp", + "miss-exponent", + "miss-field", + "miss-loop-max", + "miss-loop-min", + "miss-method", + "miss-name", + "miss-sep-in-table", + "miss-space-between", + "miss-symbol", + "multi-close", + "need-paren", + "nesting-long-mark", + "no-visible-label", + "redefined-label", + "set-const", + "unexpect-dots", + "unexpect-efunc-name", + "unexpect-gfunc-name", + "unexpect-lfunc-name", + "unexpect-symbol", + "unicode-name", + "unknown-attribute", + "unknown-symbol", + "unsupport-named-vararg", + "unsupport-symbol", + "variable-not-declared", +]; + +/// Whether lua-language-server knows `code` as one of its diagnostics or syntax errors. +pub fn is_lua_ls_code(code: &str) -> bool { + LUA_LS_CODES.contains(&code) || LUA_LS_SYNTAX_ERRORS.contains(&code) +} + #[derive(Debug, Default)] pub(crate) struct Settings { pub globals: Vec, @@ -63,6 +247,8 @@ pub(crate) fn parse(text: &str, emmylua: bool, settings: &mut Settings) -> Resul let mut severities = Vec::new(); let mut disabled = Vec::new(); + let mut turned_on = Vec::new(); + let mut turned_off = Vec::new(); for (key, value) in entries { // LuaLS also accepts the settings under the client's `Lua.` prefix. let key = key.strip_prefix("Lua.").unwrap_or(&key); @@ -84,13 +270,25 @@ pub(crate) fn parse(text: &str, emmylua: bool, settings: &mut Settings) -> Resul if let Some(level) = level_from_severity(level) { severities.push((code.to_string(), level)); } + } else if let (Some(code), Some(status)) = + (key.strip_prefix("diagnostics.neededFileStatus."), value.as_str()) + { + match status.trim_end_matches('!').to_ascii_lowercase().as_str() { + "any" | "opened" => turned_on.push(code.to_string()), + "none" => turned_off.push(code.to_string()), + _ => {} + } } } } } - // Both servers let `diagnostics.disable` win over a severity for the same code. - let disabled = disabled.into_iter().map(|code| (code, Level::Off)); - for (code, level) in severities.into_iter().chain(disabled) { + // A LuaLS file status turns a check on at the check's own severity, a warning for each check + // that is off here by default, unless `diagnostics.severity` gives one, and `None` turns it off + // whatever its severity. Both servers let `diagnostics.disable` win over everything. + let off_by_default = |code: &String| crate::rules::find(code).is_some_and(|rule| rule.default.is_none()); + let turned_on = turned_on.into_iter().filter(off_by_default).map(|code| (code, Level::Warning)); + let turned_off = turned_off.into_iter().chain(disabled).map(|code| (code, Level::Off)); + for (code, level) in turned_on.chain(severities).chain(turned_off) { match ALIASES.iter().find(|(alias, _)| *alias == code) { Some((_, codes)) => settings.rules.extend(codes.iter().map(|c| (c.to_string(), level))), None if EQUIVALENT_CODES.contains(&code.as_str()) => settings.rules.push((code, level)), @@ -262,16 +460,23 @@ mod tests { #[test] fn maps_only_codes_that_mean_the_same() { let settings = parse_luals( - r#"{ "diagnostics.disable": ["undefined-field", "deprecated", "syntax-error", "undefined-global", "missing-parameter"] }"#, + r#"{ "diagnostics.disable": ["undefined-field", "deprecated", "syntax-error", "undefined-global", "missing-parameter", "duplicate-set-field"] }"#, ); assert_eq!( settings.rules, - [("undefined-global".to_string(), Level::Off), ("missing-parameter".to_string(), Level::Off)] + [ + ("undefined-global".to_string(), Level::Off), + ("missing-parameter".to_string(), Level::Off), + ("duplicate-set-field".to_string(), Level::Off) + ] ); let targets = EQUIVALENT_CODES.iter().chain(ALIASES.iter().flat_map(|(_, codes)| codes.iter())); for code in targets { assert!(crate::rules::find(code).is_some(), "{code} is not a rule"); } + for code in EQUIVALENT_CODES { + assert!(LUA_LS_CODES.contains(code), "{code} is not a lua-language-server code"); + } } #[test] @@ -284,10 +489,30 @@ mod tests { assert!(settings.rules.contains(&("undefined-global".to_string(), Level::Error))); let settings = parse_luals(r#"{ "diagnostics": { "disable": ["unused"] } }"#); - assert_eq!(settings.rules.len(), 4); + assert_eq!(settings.rules.len(), 5); assert!(settings.rules.iter().all(|(code, level)| code.starts_with("unused-") && *level == Level::Off)); } + #[test] + fn file_status_turns_checks_on_and_off() { + let settings = parse_luals( + r#"{ "diagnostics.neededFileStatus": { "missing-global-doc": "Any", "incomplete-signature-doc": "Opened!", + "missing-local-export-doc": "Any", "unused-local": "Opened", "need-check-nil": "None", "no-unknown": "Any" }, + "diagnostics.severity": { "missing-local-export-doc": "Hint", "need-check-nil": "Error" }, + "diagnostics.disable": ["no-unknown"] }"#, + ); + let level = |code: &str| settings.rules.iter().rev().find(|(c, _)| c == code).map(|(_, level)| *level); + // Checks that are off here by default turn on as warnings, unless a severity is given. + assert_eq!(level("missing-global-doc"), Some(Level::Warning)); + assert_eq!(level("incomplete-signature-doc"), Some(Level::Warning)); + assert_eq!(level("missing-local-export-doc"), Some(Level::Hint)); + // Rules on by default keep their level. + assert_eq!(level("unused-local"), None); + // `None` wins over a severity, and `diagnostics.disable` over a status. + assert_eq!(level("need-check-nil"), Some(Level::Off)); + assert_eq!(level("no-unknown"), Some(Level::Off)); + } + #[test] fn accepts_comments_and_trailing_commas() { let settings = parse_luals( diff --git a/crates/qbx_lua_analysis/src/manifest.rs b/crates/qbx_lua_analysis/src/manifest.rs index b8a829d..b0142f5 100644 --- a/crates/qbx_lua_analysis/src/manifest.rs +++ b/crates/qbx_lua_analysis/src/manifest.rs @@ -210,7 +210,7 @@ pub fn closest_directive(name: &str) -> Option<&'static str> { .map(|(known, _)| known) } -fn edit_distance(a: &str, b: &str) -> usize { +pub(crate) fn edit_distance(a: &str, b: &str) -> usize { let (a, b) = (a.as_bytes(), b.as_bytes()); let mut prev: Vec = (0..=b.len()).collect(); for (i, ca) in a.iter().enumerate() { diff --git a/crates/qbx_lua_analysis/src/project.rs b/crates/qbx_lua_analysis/src/project.rs index 5c542e5..fedaeae 100644 --- a/crates/qbx_lua_analysis/src/project.rs +++ b/crates/qbx_lua_analysis/src/project.rs @@ -4,9 +4,10 @@ use std::sync::Arc; use qbx_fivem_data::{known_import, Side}; use qbx_lua_syntax::ast::Chunk; use qbx_lua_syntax::{parse, SmolStr}; +use qbx_luacats::luacats::applies_on; use qbx_luacats::types::{FunType, Type}; use rustc_hash::{FxHashMap, FxHashSet}; -use walkdir::WalkDir; +use walkdir::{DirEntry, WalkDir}; use crate::config::Config; use crate::glob::{is_glob, manifest_glob_match}; @@ -99,12 +100,59 @@ pub fn relative_slash_path(root: &Path, path: &Path) -> String { path.strip_prefix(root).unwrap_or(path).to_string_lossy().replace('\\', "/") } +/// The real path of `entry` when it is a folder that a walk reached through a symbolic link. +fn linked_folder(entry: &DirEntry) -> Option { + let linked = entry.depth() > 0 && entry.path_is_symlink() && entry.file_type().is_dir(); + linked.then(|| entry.path().canonicalize().ok()).flatten() +} + +/// Whether a folder at `target` that a link leads to is somewhere else than the folders a walk from +/// `root`, by its real path, covers anyway, or one above them, which it would walk again. +fn leads_elsewhere(root: Option<&Path>, target: &Path) -> bool { + root.is_some_and(|root| !target.starts_with(root) && !root.starts_with(target)) +} + +/// Whether a walk from `root`, by its real path, goes into `entry`. FiveM loads resources from +/// symlinked folders too, as a server's `[local]` linked to where they are developed, so walks +/// follow links, but only those that lead somewhere else. +pub fn walks_into(root: Option<&Path>, entry: &DirEntry) -> bool { + linked_folder(entry).is_none_or(|target| leads_elsewhere(root, &target)) +} + +/// The real path of `path`, a folder that a walk reached through one of the `linked` folders, each a +/// link and its real path, by the nearest of them. +fn real_path(linked: &[(PathBuf, PathBuf)], path: &Path) -> Option { + let reached = linked.iter().filter_map(|(link, target)| Some((link, target, path.strip_prefix(link).ok()?))); + reached.max_by_key(|(link, ..)| link.components().count()).map(|(_, target, rest)| target.join(rest)) +} + +/// The Lua files under `root`, sorted. Symbolic links are followed as `walks_into` decides, and a +/// folder that several of them lead to, also as part of a folder another leads to, is read once, +/// through the first by name. pub fn lua_files_under(root: &Path, config: &Config) -> Vec { let mut files = Vec::new(); - let walker = WalkDir::new(root).follow_links(false).into_iter().filter_entry(|entry| { + let canonical_root = root.canonicalize().ok(); + let mut linked: Vec<(PathBuf, PathBuf)> = Vec::new(); + let walker = WalkDir::new(root).follow_links(true).sort_by_file_name().into_iter().filter_entry(|entry| { let name = entry.file_name().to_string_lossy(); let hidden_dir = entry.file_type().is_dir() && name.starts_with('.') && entry.depth() > 0; - !(hidden_dir || name == "node_modules" || config.excludes_entry(entry.path())) + if hidden_dir || name == "node_modules" || config.excludes_entry(entry.path()) { + return false; + } + match linked_folder(entry) { + Some(target) => { + let elsewhere = leads_elsewhere(canonical_root.as_deref(), &target) + && !linked.iter().any(|(_, followed)| target.starts_with(followed)); + if elsewhere { + linked.push((entry.path().to_path_buf(), target)); + } + elsewhere + } + None if entry.file_type().is_dir() => { + real_path(&linked, entry.path()).is_none_or(|real| linked.iter().all(|(_, followed)| *followed != real)) + } + None => true, + } }); for entry in walker.flatten() { if entry.file_type().is_file() && entry.path().extension().is_some_and(|e| e == "lua") { @@ -160,6 +208,9 @@ pub struct UnresolvedImport { /// The side of the file that assigns a function, and its signature as in `FunctionDef`. type SidedSignature = (Option, Option>); +/// The side of the file of an `---@extend` line, and the signature it adds. +type SidedExtension = (Option, Arc); + /// Where a global that a definition file outside any resource declares exists at runtime. #[derive(Clone, Debug)] pub struct Declaration { @@ -184,6 +235,9 @@ pub struct ResourceEnv { imports: Vec<(SmolStr, Side)>, /// Every assignment to a global or global table field by dotted path, with the side of its file. functions: FxHashMap>, + /// The signatures `---@extend` lines add to the functions at a dotted path, with the side of + /// their file. + extensions: FxHashMap>, aliases: FxHashMap, /// Globals that definition files outside any resource describe, such as type libraries. They /// exist at runtime on the side of their file, and those of a provider only with its import. @@ -219,6 +273,17 @@ impl ResourceEnv { } pub fn add_summary(&mut self, summary: &FileSummary, side: Option) { + self.add_file(summary, side, true); + } + + /// Adds a file of the resource that no manifest runs and the configuration gives no side, such as + /// a test that stubs natives: its globals count, but unless it is a definition file, the + /// functions it defines may be any. + pub fn add_unlisted_summary(&mut self, summary: &FileSummary) { + self.add_file(summary, None, summary.meta); + } + + fn add_file(&mut self, summary: &FileSummary, side: Option, signatures: bool) { for def in &summary.global_defs { self.add_global(&def.name, side); if def.at_file_scope { @@ -228,7 +293,11 @@ impl ResourceEnv { self.field_defs.extend(summary.global_field_defs.iter().cloned()); self.module_imports.extend(summary.module_imports.iter().cloned()); for def in &summary.functions { - self.functions.entry(def.path.clone()).or_default().push((side, def.signature.clone())); + let signature = def.signature.clone().filter(|_| signatures); + self.functions.entry(def.path.clone()).or_default().push((side, signature)); + } + for (path, fun) in summary.extensions.iter().filter(|_| signatures) { + self.extensions.entry(path.clone()).or_default().push((side, fun.clone())); } for (name, ty) in &summary.aliases { let merged = match self.aliases.remove(name) { @@ -250,6 +319,14 @@ impl ResourceEnv { .map(|(_, sig)| sig.as_ref()) } + /// The signatures that `---@extend` lines add to the function at `path` for code on `side`: + /// those of files of that side, unless their attributes scope them to the other one. + pub fn extension_defs(&self, path: &str, side: Option) -> impl Iterator> { + let extensions = self.extensions.get(path).into_iter().flatten(); + let visible = extensions.filter(move |(def, fun)| is_visible_on(*def, side) && applies_on(fun.side, side)); + visible.map(|(_, fun)| fun) + } + pub fn alias(&self, name: &str) -> Option<&Type> { self.aliases.get(name) } @@ -308,6 +385,37 @@ impl ResourceEnv { self.unresolved_imports.iter().find(|import| side.is_none_or(|s| import.side.is_available_on(s))) } + /// The environment of a file that `loaders`, other resources, also run: what they define and + /// import is there too, though this resource's own aliases win. It is opaque when this resource + /// is, or when every loader is. + pub fn with_loaders<'a>(&self, loaders: impl IntoIterator) -> ResourceEnv { + let mut env = self.clone(); + let mut loaded = false; + let mut all_opaque = true; + for loader in loaders { + loaded = true; + all_opaque &= loader.opaque; + env.client.extend(loader.client.iter().cloned()); + env.server.extend(loader.server.iter().cloned()); + env.field_defs.extend(loader.field_defs.iter().cloned()); + env.file_scope.extend(loader.file_scope.iter().cloned()); + env.module_imports.extend(loader.module_imports.iter().cloned()); + env.imports.extend(loader.imports.iter().cloned()); + for (path, defs) in &loader.functions { + env.functions.entry(path.clone()).or_default().extend(defs.iter().cloned()); + } + for (path, extensions) in &loader.extensions { + env.extensions.entry(path.clone()).or_default().extend(extensions.iter().cloned()); + } + for (name, ty) in &loader.aliases { + env.aliases.entry(name.clone()).or_insert_with(|| ty.clone()); + } + env.unresolved_imports.extend(loader.unresolved_imports.iter().cloned()); + } + env.opaque |= loaded && all_opaque; + env + } + /// Adds what an `@resource/path` import provides on `side`: the globals of the files it names, /// and the usual globals of well-known imports such as `@ox_lib/init.lua`, which also cover /// imports whose resource is not installed. Any other import that names no file is recorded as @@ -341,6 +449,8 @@ pub struct ResourceLocator { roots: FxHashMap>, lua_files: FxHashMap>, summaries: FxHashMap>, + manifests: FxHashMap>, + envs: FxHashMap, } impl ResourceLocator { @@ -357,11 +467,18 @@ impl ResourceLocator { pub fn locate(&mut self, from_resource: &Path, name: &str) -> Option { let dir = Self::resources_dir(from_resource)?; - let index = self.roots.entry(dir.clone()).or_insert_with(|| { + self.resource_roots(dir).get(&name.to_lowercase()).cloned() + } + + /// The resources in the resources folder `dir`, by lowercase name. + fn resource_roots(&mut self, dir: PathBuf) -> &FxHashMap { + self.roots.entry(dir.clone()).or_insert_with(|| { let mut index = FxHashMap::default(); - let walker = WalkDir::new(&dir).max_depth(6).into_iter().filter_entry(|entry| { + let root = dir.canonicalize().ok(); + let walker = WalkDir::new(&dir).max_depth(6).follow_links(true).into_iter().filter_entry(|entry| { let name = entry.file_name().to_string_lossy(); - entry.depth() == 0 || !(name.starts_with('.') || name == "node_modules") + let hidden = entry.depth() > 0 && (name.starts_with('.') || name == "node_modules"); + !hidden && walks_into(root.as_deref(), entry) }); for entry in walker.flatten() { if entry.file_type().is_file() && is_manifest_file(entry.path()) { @@ -373,8 +490,7 @@ impl ResourceLocator { } } index - }); - index.get(&name.to_lowercase()).cloned() + }) } /// The summaries of the readable files an `@resource/path` import names, where the path may be @@ -393,20 +509,92 @@ impl ResourceLocator { vec![path] }; for path in &paths { - self.summaries.entry(path.clone()).or_insert_with(|| { - let source = read_source(path).ok()?; - let chunk = parse(&source); - Some(summarize(&source, &chunk, &resolve(&chunk))) - }); + self.read_summary(path); } paths.iter().filter_map(|path| self.summaries.get(path)?.as_ref()).collect() } + + /// Reads the summary of the file at `path` once; `None` when it cannot be read as Lua source. + fn read_summary(&mut self, path: &Path) -> Option<&FileSummary> { + let summary = self.summaries.entry(path.to_path_buf()).or_insert_with(|| { + let source = read_source(path).ok()?; + let chunk = parse(&source); + Some(summarize(&source, &chunk, &resolve(&chunk))) + }); + summary.as_ref() + } + + /// The resources next to `resource_root`, the resource `name`, whose manifest or configured + /// imports name files of it, with the path of each such import inside it. + pub fn loaders(&mut self, resource_root: &Path, name: &str, config: &Config) -> Vec<(PathBuf, String)> { + let Some(dir) = Self::resources_dir(resource_root) else { return Vec::new() }; + let mut roots: Vec = self.resource_roots(dir).values().cloned().collect(); + roots.sort(); + let mut found = Vec::new(); + for root in roots.into_iter().filter(|root| root != resource_root) { + let Some((manifest_path, manifest)) = self.manifest_of(&root) else { continue }; + for (pattern, _) in resource_imports(manifest, manifest_path, config) { + match split_import(pattern) { + Some((imported, path)) if imported.eq_ignore_ascii_case(name) => { + found.push((root.clone(), path.to_string())); + } + _ => {} + } + } + } + found + } + + /// The manifest of the resource at `root` and its path, read once. + fn manifest_of(&mut self, root: &Path) -> Option<&(PathBuf, Manifest)> { + let manifest = self.manifests.entry(root.to_path_buf()).or_insert_with(|| { + let path = manifest_path(root)?; + let manifest = Manifest::from_chunk(&parse(&read_source(&path).ok()?)); + Some((path, manifest)) + }); + manifest.as_ref() + } + + /// The globals the scripts of the resource at `root` see, for the files that it loads from + /// other resources: those of its own files and of its imports. + pub fn loader_env(&mut self, root: &Path, config: &Config) -> Option { + if let Some(env) = self.envs.get(root) { + return Some(env.clone()); + } + let (manifest_path, manifest) = self.manifest_of(root)?.clone(); + let mut env = ResourceEnv { opaque: is_escrowed_resource(root), ..ResourceEnv::default() }; + let paths = self.lua_files.entry(root.to_path_buf()).or_insert_with(|| lua_files_under(root, config)).clone(); + for path in paths.iter().filter(|path| !is_manifest_file(path)) { + let side = side_of(&manifest, &relative_slash_path(root, path)).or_else(|| config.side_for(path)); + match self.read_summary(path) { + Some(summary) if side.is_none() => env.add_unlisted_summary(summary), + Some(summary) => env.add_summary(summary, side), + None => env.opaque = true, + } + } + for (pattern, side) in resource_imports(&manifest, &manifest_path, config) { + env.add_import(pattern, side, self.import_summaries(root, pattern, config)); + } + self.envs.insert(root.to_path_buf(), env.clone()); + Some(env) + } } pub fn split_import(pattern: &str) -> Option<(&str, &str)> { pattern.strip_prefix('@')?.split_once('/') } +/// Whether an import of the file `path` of a resource, as `@lb-bridge/phone/load.lua` imports +/// `phone/load.lua`, runs its file at `relative`, a Lua file that its manifest does not list as a +/// script, in the importing resource: those in the folder of the file it names and below do, since +/// such an import is usually a loader that runs them with `load(LoadResourceFile(...))`, `require` or +/// `lib.load`. A glob names the folder before its first wildcard. +pub fn import_loads(path: &str, relative: &str) -> bool { + let fixed = path.find('*').map_or(path, |wildcard| &path[..wildcard]); + let folder = fixed.rfind('/').map_or("", |slash| &fixed[..=slash]); + relative.get(..folder.len()).is_some_and(|start| start.eq_ignore_ascii_case(folder)) +} + pub struct Resource { pub name: String, pub root: PathBuf, @@ -414,9 +602,22 @@ pub struct Resource { pub manifest: Manifest, pub files: Vec, pub env: ResourceEnv, + /// The environments of the files that other resources load, one for each set of loaders. + loaded_envs: Vec, + /// For each of `files`, its environment in `loaded_envs` when other resources load it. + file_envs: Vec>, } impl Resource { + /// The globals that the file at `index` of `files` sees: those of the resource, and of the + /// resources that load it when its manifest does not list it as a script. + pub fn env_for(&self, index: usize) -> &ResourceEnv { + match self.file_envs.get(index).copied().flatten() { + Some(loaded) => &self.loaded_envs[loaded], + None => &self.env, + } + } + pub fn load(root: &Path, config: &Config, locator: &mut ResourceLocator) -> Option { let manifest_path = manifest_path(root)?; let manifest_source = read_source(&manifest_path).ok()?; @@ -434,15 +635,52 @@ impl Resource { }; let relative = relative_slash_path(root, &path); let side = side_of(&manifest, &relative).or_else(|| config.side_for(&path)); - let file = ParsedFile::new(path, relative, source, side); - env.add_summary(&file.summary, side); - files.push(file); + files.push(ParsedFile::new(path, relative, source, side)); + } + let name = root.file_name().map(|n| n.to_string_lossy().into_owned()).unwrap_or_default(); + let unlisted: Vec> = files + .iter() + .map(|file| side_of(&manifest, &file.relative).is_none().then_some(file.relative.as_str())) + .collect(); + let loads_any = |path: &str| unlisted.iter().flatten().any(|relative| import_loads(path, relative)); + let loader_paths: Vec<(PathBuf, String)> = + locator.loaders(root, &name, config).into_iter().filter(|(_, path)| loads_any(path)).collect(); + for file in &files { + match file.side { + None if !loader_paths.iter().any(|(_, path)| import_loads(path, &file.relative)) => { + env.add_unlisted_summary(&file.summary) + } + side => env.add_summary(&file.summary, side), + } } for (pattern, side) in resource_imports(&manifest, &manifest_path, config) { env.add_import(pattern, side, locator.import_summaries(root, pattern, config)); } - let name = root.file_name().map(|n| n.to_string_lossy().into_owned()).unwrap_or_default(); - Some(Self { name, root: root.to_path_buf(), manifest_path, manifest, files, env }) + // What `loader_env` finds for this resource, for the files it loads from other resources. + locator.envs.entry(root.to_path_buf()).or_insert_with(|| env.clone()); + let loaders: Vec<(String, ResourceEnv)> = loader_paths + .into_iter() + .filter_map(|(loader, path)| Some((path, locator.loader_env(&loader, config)?))) + .collect(); + let mut loaded_envs = Vec::new(); + let mut loader_sets: Vec> = Vec::new(); + let file_envs = unlisted + .iter() + .map(|relative| { + let relative = (*relative)?; + let loading = loaders.iter().enumerate().filter(|(_, (path, _))| import_loads(path, relative)); + let set: Vec = loading.map(|(i, _)| i).collect(); + if set.is_empty() { + return None; + } + Some(loader_sets.iter().position(|known| *known == set).unwrap_or_else(|| { + loaded_envs.push(env.with_loaders(set.iter().map(|i| &loaders[*i].1))); + loader_sets.push(set); + loader_sets.len() - 1 + })) + }) + .collect(); + Some(Self { name, root: root.to_path_buf(), manifest_path, manifest, files, env, loaded_envs, file_envs }) } } @@ -465,6 +703,81 @@ mod tests { assert!(!is_not_source(format!("local t={{{}}}\n", "functions=1,_function=2,".repeat(200)).as_bytes())); } + /// Links `link` to the folder `target`, unless the platform refuses to, as Windows refuses + /// symbolic links without the right to create them; a junction needs no such right. + fn link_folder(target: &Path, link: &Path) -> bool { + #[cfg(unix)] + return std::os::unix::fs::symlink(target, link).is_ok(); + #[cfg(windows)] + return std::os::windows::fs::symlink_dir(target, link).is_ok() + || std::process::Command::new("cmd") + .args(["/C", "mklink", "/J"]) + .arg(link) + .arg(target) + .output() + .is_ok_and(|output| output.status.success()); + #[cfg(not(any(unix, windows)))] + false + } + + #[test] + fn lua_files_under_follows_linked_folders_once() { + let root = std::env::temp_dir().join(format!("qbx-linked-folders-{}", std::process::id())); + let _ = std::fs::remove_dir_all(&root); + // `mklink` takes no forward slashes. + let at = |relative: &str| relative.split('/').fold(root.clone(), |path, part| path.join(part)); + for file in ["elsewhere/racing/client.lua", "server/resources/[core]/core.lua", "server/cache/stray.lua"] { + std::fs::create_dir_all(at(file).parent().unwrap()).unwrap(); + std::fs::write(at(file), "").unwrap(); + } + let resources = at("server/resources"); + let links = [ + ("elsewhere", "server/resources/[symlink]"), + ("elsewhere", "server/resources/[again]"), + ("server/resources/[core]", "server/resources/[core-link]"), + ("server/resources", "server/resources/[core]/loop"), + ("server", "server/resources/[up]"), + ]; + if !links.iter().all(|(target, link)| link_folder(&at(target), &at(link))) { + eprintln!("skipped: folder links cannot be created here"); + let _ = std::fs::remove_dir_all(&root); + return; + } + let files = lua_files_under(&resources, &Config::default()); + let relative: Vec = files.iter().map(|file| relative_slash_path(&resources, file)).collect(); + let _ = std::fs::remove_dir_all(&root); + // The folder two links lead to is read through the first, and links into the tree, or to a + // folder above it, are left out. + assert_eq!(relative, ["[again]/racing/client.lua", "[core]/core.lua"]); + } + + #[test] + fn lua_files_under_reads_a_linked_folder_inside_another_once() { + let root = std::env::temp_dir().join(format!("qbx-nested-links-{}", std::process::id())); + let _ = std::fs::remove_dir_all(&root); + let at = |relative: &str| relative.split('/').fold(root.clone(), |path, part| path.join(part)); + for file in ["elsewhere/racing/client.lua", "elsewhere/shop/client.lua"] { + std::fs::create_dir_all(at(file).parent().unwrap()).unwrap(); + std::fs::write(at(file), "").unwrap(); + } + std::fs::create_dir_all(at("server/resources")).unwrap(); + let resources = at("server/resources"); + let links = [ + ("elsewhere/racing", "server/resources/[a]"), + ("elsewhere", "server/resources/[b]"), + ("elsewhere/racing", "server/resources/[c]"), + ]; + if !links.iter().all(|(target, link)| link_folder(&at(target), &at(link))) { + eprintln!("skipped: folder links cannot be created here"); + let _ = std::fs::remove_dir_all(&root); + return; + } + let files = lua_files_under(&resources, &Config::default()); + let relative: Vec = files.iter().map(|file| relative_slash_path(&resources, file)).collect(); + let _ = std::fs::remove_dir_all(&root); + assert_eq!(relative, ["[a]/client.lua", "[b]/shop/client.lua"]); + } + #[test] fn declarations_need_their_side_and_the_import_of_their_provider() { let declare = |side, provider: Option<&str>| Declaration { side, provider: provider.map(SmolStr::new) }; diff --git a/crates/qbx_lua_analysis/src/rules.rs b/crates/qbx_lua_analysis/src/rules.rs index 0a18ba7..1f92076 100644 --- a/crates/qbx_lua_analysis/src/rules.rs +++ b/crates/qbx_lua_analysis/src/rules.rs @@ -53,42 +53,85 @@ const OFF: Option = None; pub const SYNTAX_ERROR: &str = "syntax-error"; pub const UNDEFINED_GLOBAL: &str = "undefined-global"; +/// The linter reports it for the standard library tables, and qbx-lua-ls, which reads the LuaCATS +/// types, also for other values. pub const UNDEFINED_FIELD: &str = "undefined-field"; pub const UNUSED_LOCAL: &str = "unused-local"; pub const UNUSED_FUNCTION: &str = "unused-function"; pub const UNUSED_ARGUMENT: &str = "unused-argument"; pub const UNUSED_LOOP_VARIABLE: &str = "unused-loop-variable"; +pub const UNUSED_VARARG: &str = "unused-vararg"; pub const UNUSED_LABEL: &str = "unused-label"; pub const UNDEFINED_LABEL: &str = "undefined-label"; pub const REDEFINED_LOCAL: &str = "redefined-local"; pub const SHADOWED_LOCAL: &str = "shadowed-local"; pub const UNREACHABLE_CODE: &str = "unreachable-code"; +pub const REDUNDANT_RETURN: &str = "redundant-return"; pub const EMPTY_BLOCK: &str = "empty-block"; +pub const TRAILING_SPACE: &str = "trailing-space"; pub const UNBALANCED_ASSIGNMENTS: &str = "unbalanced-assignments"; +pub const NEWLINE_CALL: &str = "newline-call"; +pub const NEWFIELD_CALL: &str = "newfield-call"; +pub const AMBIGUITY_1: &str = "ambiguity-1"; pub const DUPLICATE_INDEX: &str = "duplicate-index"; +pub const DUPLICATE_SET_FIELD: &str = "duplicate-set-field"; pub const DUPLICATE_ARGUMENT: &str = "duplicate-argument"; pub const MISSING_PARAMETER: &str = "missing-parameter"; +pub const REDUNDANT_PARAMETER: &str = "redundant-parameter"; /// Reported by qbx-lua-ls, which indexes the LuaCATS types; the linter itself has no type information. pub const UNDEFINED_DOC_NAME: &str = "undefined-doc-name"; +pub const UNDEFINED_DOC_PARAM: &str = "undefined-doc-param"; +pub const DUPLICATE_DOC_ALIAS: &str = "duplicate-doc-alias"; +pub const DUPLICATE_DOC_FIELD: &str = "duplicate-doc-field"; +pub const DUPLICATE_DOC_PARAM: &str = "duplicate-doc-param"; +pub const DOC_FIELD_NO_CLASS: &str = "doc-field-no-class"; +/// Reported by qbx-lua-ls, which indexes the classes of every file; the linter itself sees one file. +pub const CIRCLE_DOC_CLASS: &str = "circle-doc-class"; +pub const UNKNOWN_OPERATOR: &str = "unknown-operator"; +pub const UNKNOWN_CAST_VARIABLE: &str = "unknown-cast-variable"; +pub const UNKNOWN_DIAG_CODE: &str = "unknown-diag-code"; +pub const MISSING_GLOBAL_DOC: &str = "missing-global-doc"; +pub const MISSING_LOCAL_EXPORT_DOC: &str = "missing-local-export-doc"; +pub const INCOMPLETE_SIGNATURE_DOC: &str = "incomplete-signature-doc"; /// Reported by qbx-lua-ls, which reads the LuaCATS classes; the linter itself has no type information. pub const MISSING_FIELDS: &str = "missing-fields"; /// Reported by qbx-lua-ls, which reads the LuaCATS classes; the linter itself has no type information. pub const ASSIGN_TYPE_MISMATCH: &str = "assign-type-mismatch"; +/// Reported by qbx-lua-ls, which reads the LuaCATS types; the linter itself has no type information. +pub const PARAM_TYPE_MISMATCH: &str = "param-type-mismatch"; /// Reported by qbx-lua-ls, which reads the LuaCATS classes; the linter itself has no type information. pub const UNDECLARED_FIELD: &str = "undeclared-field"; +/// Reported by qbx-lua-ls, which reads the LuaCATS classes; the linter itself has no type information. +pub const INJECT_FIELD: &str = "inject-field"; +/// Reported by qbx-lua-ls, which reads the LuaCATS classes; the linter itself has no type information. +pub const INVISIBLE: &str = "invisible"; /// Reported by qbx-lua-ls, which infers the returned values; the linter itself has no type information. pub const RETURN_TYPE_MISMATCH: &str = "return-type-mismatch"; /// Reported by qbx-lua-ls, which reads the `@return` annotations with the types they allow. pub const MISSING_RETURN: &str = "missing-return"; +/// Reported by qbx-lua-ls, which reads the `@return` annotations of every function. +pub const REDUNDANT_RETURN_VALUE: &str = "redundant-return-value"; +/// Reported by qbx-lua-ls, which reads the `@nodiscard` annotations of every function. +pub const DISCARD_RETURNS: &str = "discard-returns"; +/// Reported by qbx-lua-ls, which reads the LuaCATS types; the linter itself has no type information. +pub const CAST_TYPE_MISMATCH: &str = "cast-type-mismatch"; +/// Reported by qbx-lua-ls, which infers the types; the linter itself has no type information. +pub const CAST_LOCAL_TYPE: &str = "cast-local-type"; /// Reported by qbx-lua-ls, which infers the types; the linter itself has no type information. pub const NO_UNKNOWN: &str = "no-unknown"; pub const CONST_REASSIGN: &str = "const-reassign"; +/// Reported by qbx-lua-ls, which infers the types; the linter itself has no type information. +pub const CLOSE_NON_OBJECT: &str = "close-non-object"; pub const SELF_ASSIGNMENT: &str = "self-assignment"; pub const SELF_COMPARISON: &str = "self-comparison"; +pub const COUNT_DOWN_LOOP: &str = "count-down-loop"; /// Reported by qbx-lua-ls, which infers the types; the linter itself has no type information. pub const IMPOSSIBLE_COMPARISON: &str = "impossible-comparison"; +/// Reported by qbx-lua-ls, which infers the types; the linter itself has no type information. +pub const NEED_CHECK_NIL: &str = "need-check-nil"; pub const LOWERCASE_GLOBAL: &str = "lowercase-global"; pub const IMPLICIT_GLOBAL: &str = "implicit-global"; +pub const GLOBAL_IN_NIL_ENV: &str = "global-in-nil-env"; pub const BUILTIN_OVERWRITE: &str = "builtin-overwrite"; pub const DEPRECATED: &str = "deprecated"; pub const LOOP_NEVER_YIELDS: &str = "fivem/loop-never-yields"; @@ -122,39 +165,70 @@ pub const UNUSED_LOCALE_KEY: &str = "qbox/unused-locale-key"; pub static RULES: &[Rule] = &[ rule(SYNTAX_ERROR, Correctness, ERROR, false, "The file cannot be parsed by the CfxLua 5.4 runtime."), rule(UNDEFINED_GLOBAL, Correctness, WARN, false, "A global is read that no script in the resource, its imports, the runtime or the natives define."), - rule(UNDEFINED_FIELD, Correctness, WARN, false, "A field that does not exist is read from a standard library table."), - rule(UNUSED_LOCAL, Suspicious, WARN, false, "A local variable is never read."), - rule(UNUSED_FUNCTION, Suspicious, WARN, false, "A local function is never used."), + rule(UNDEFINED_FIELD, Correctness, WARN, false, "A field that does not exist is read from a standard library table or, in the language server, from a value whose LuaCATS class or table type does not have it."), + rule(UNUSED_LOCAL, Suspicious, WARN, false, "A local variable is never read, or is declared with a table whose fields are set and never read."), + rule(UNUSED_FUNCTION, Suspicious, WARN, false, "A local function is never used, or only by itself and local functions that are never used."), rule(UNUSED_ARGUMENT, Style, HINT, false, "A function parameter is never read."), rule(UNUSED_LOOP_VARIABLE, Style, HINT, false, "A loop variable is never read."), + rule(UNUSED_VARARG, Style, HINT, false, "A function takes `...` and never uses it."), rule(UNUSED_LABEL, Suspicious, WARN, false, "A label is never the target of a goto."), rule(UNDEFINED_LABEL, Correctness, ERROR, false, "A goto targets a label that is not visible."), - rule(REDEFINED_LOCAL, Suspicious, WARN, false, "A local is declared twice in the same scope."), + rule(REDEFINED_LOCAL, Suspicious, WARN, false, "A local is declared twice in the same scope, such as a parameter again at the top of its function's body."), rule(SHADOWED_LOCAL, Style, OFF, false, "A local hides a local from an enclosing scope."), - rule(UNREACHABLE_CODE, Suspicious, WARN, false, "Code follows a return, break or goto and can never run."), + rule(UNREACHABLE_CODE, Suspicious, WARN, false, "Code follows a break or goto, an `if` with an `else` none of whose branches runs past its end, or a `while true` loop that only a return leaves, and can never run."), + rule(REDUNDANT_RETURN, Style, HINT, false, "A function ends with a `return` that gives no values, which changes nothing."), rule(EMPTY_BLOCK, Style, INFO, false, "A block has no statements."), - rule(UNBALANCED_ASSIGNMENTS, Suspicious, WARN, false, "An assignment has more values than targets, or leaves targets without a value."), + rule(TRAILING_SPACE, Style, HINT, true, "A line ends in spaces or tabs outside a comment or string."), + rule(UNBALANCED_ASSIGNMENTS, Suspicious, WARN, false, "An assignment or `local` statement has more values than targets, or leaves targets without a value."), + rule(NEWLINE_CALL, Suspicious, WARN, false, "A parenthesized expression that starts a line, and is indexed or called, is read as the argument of a call to the expression that ends the line above."), + rule(NEWFIELD_CALL, Suspicious, WARN, false, "An entry of a table constructor is called with arguments that start on the next line, which were likely meant as an entry of their own."), rule(DUPLICATE_INDEX, Suspicious, WARN, false, "A table constructor sets the same key twice."), + rule(DUPLICATE_SET_FIELD, Suspicious, WARN, false, "A function is assigned to the same table field twice in one block of a file, so the second replaces the first."), rule(DUPLICATE_ARGUMENT, Correctness, ERROR, false, "Two parameters of one function share a name."), rule(MISSING_PARAMETER, Correctness, WARN, false, "A function is called without an argument for a parameter its LuaCATS annotations require."), + rule(REDUNDANT_PARAMETER, Correctness, WARN, false, "A function is called with more arguments than it has parameters, so the extra values are lost."), rule(UNDEFINED_DOC_NAME, Correctness, WARN, false, "A LuaCATS annotation names a type that no @class, @alias or @enum declares for the file's side (language server only)."), - rule(MISSING_FIELDS, Correctness, WARN, false, "A table constructor typed as a LuaCATS class leaves out required fields (language server only)."), + rule(UNDEFINED_DOC_PARAM, Correctness, WARN, false, "A LuaCATS @param names no parameter of the function its doc comment documents, or no function follows the comment."), + rule(DUPLICATE_DOC_ALIAS, Suspicious, WARN, false, "An @alias or @enum reuses the name of an alias, enum or class that the same file declares for the same side."), + rule(DUPLICATE_DOC_FIELD, Suspicious, WARN, false, "A class declares the same field twice in one file for the same side; repeated function fields are overloads."), + rule(DUPLICATE_DOC_PARAM, Suspicious, WARN, false, "A doc comment has two @param annotations for the same parameter."), + rule(DOC_FIELD_NO_CLASS, Correctness, WARN, false, "A @field does not directly follow the @class it belongs to, so lua-language-server attaches it to no class."), + rule(CIRCLE_DOC_CLASS, Correctness, WARN, false, "A @class inherits from itself, directly or through its parents (language server only)."), + rule(UNKNOWN_OPERATOR, Correctness, WARN, false, "An @operator names an operator that LuaCATS annotations cannot declare, such as `eq`."), + rule(UNKNOWN_CAST_VARIABLE, Correctness, WARN, false, "A ---@cast names no local that is in scope where it is written."), + rule(UNKNOWN_DIAG_CODE, Suspicious, WARN, false, "A ---@diagnostic or qbx-lint comment names a code that is neither a rule here nor a lua-language-server diagnostic."), + rule(MISSING_GLOBAL_DOC, Style, OFF, false, "A global function has a parameter without @param or returns a value without @return; one that has neither needs a comment."), + rule(MISSING_LOCAL_EXPORT_DOC, Style, OFF, false, "A local function that a module's returned table or exports() exports, or a function passed to exports(), has a parameter without @param or returns a value without @return; one that has neither needs a comment."), + rule(INCOMPLETE_SIGNATURE_DOC, Style, OFF, false, "A function whose doc comment has @param or @return annotations leaves out a parameter or a returned value."), + rule(MISSING_FIELDS, Correctness, WARN, false, "A table constructor typed as a LuaCATS class, or a union of classes, leaves out required fields; with `strict`, also one typed as a shape (language server only)."), rule(ASSIGN_TYPE_MISMATCH, Correctness, WARN, false, "A table constructor or assignment stores a value of the wrong type in a field of a LuaCATS class, or in a variable typed with @type or @param (language server only)."), + rule(PARAM_TYPE_MISMATCH, Correctness, WARN, false, "A call passes an argument of a different type than its parameter's LuaCATS annotation declares (language server only)."), rule(UNDECLARED_FIELD, Correctness, WARN, false, "A field or key that a strict LuaCATS class does not declare is set or read (language server only)."), + rule(INJECT_FIELD, Correctness, WARN, false, "A field is set through a value whose LuaCATS class or table type does not have it, rather than through the name that owns the table (language server only)."), + rule(INVISIBLE, Correctness, WARN, false, "A private, protected or package field or method of a LuaCATS class is used outside its class, subclasses or file (language server only)."), rule(RETURN_TYPE_MISMATCH, Correctness, WARN, false, "A function returns a value of a different type than its @return annotation declares (language server only)."), rule(MISSING_RETURN, Correctness, WARN, false, "A function with a required @return value can end, or return, without it (language server only)."), - rule(NO_UNKNOWN, Style, OFF, false, "A parameter, local or loop variable has no type: none is declared and none can be inferred (language server only)."), + rule(REDUNDANT_RETURN_VALUE, Correctness, WARN, false, "A function returns more values than its @return annotations declare (language server only)."), + rule(DISCARD_RETURNS, Correctness, WARN, false, "A call drops the values of a function whose @nodiscard annotation requires using them (language server only)."), + rule(CAST_TYPE_MISMATCH, Correctness, WARN, false, "A ---@cast gives a variable a type that its declared type does not take (language server only)."), + rule(CAST_LOCAL_TYPE, Correctness, WARN, false, "A local without @type or @param is given a value that the type of the value it is declared with does not take, such as a string after `local speed = 5` (language server only)."), + rule(NO_UNKNOWN, Style, OFF, false, "A parameter, local or loop variable has no type, or a value of unknown type goes where a type is declared (language server only)."), rule(CONST_REASSIGN, Correctness, ERROR, false, "A or local is assigned to."), + rule(CLOSE_NON_OBJECT, Correctness, WARN, false, "A local has no value, or one that cannot be closed, such as a number or a string (language server only)."), rule(SELF_ASSIGNMENT, Suspicious, WARN, false, "A variable is assigned to itself."), rule(SELF_COMPARISON, Suspicious, WARN, false, "Both sides of a comparison are the same expression."), + rule(AMBIGUITY_1, Suspicious, WARN, false, "An `or` gives or takes a literal next to arithmetic that binds tighter, as in `x + y or 0` or `x or 1 + y`, where the parentheses were likely meant around the `or`."), + rule(COUNT_DOWN_LOOP, Suspicious, WARN, true, "A numeric for loop counts up from a start above its end, or from #list to 1, without a negative step."), rule(IMPOSSIBLE_COMPARISON, Suspicious, INFO, false, "Both sides of an == or ~= have types that share no value, so the comparison always gives the same answer (language server only)."), + rule(NEED_CHECK_NIL, Correctness, WARN, false, "A local whose declared type allows nil or false is indexed, called or used as a key without a check; with `strict`, also used in arithmetic, concatenation, # or an ordering comparison, or given as a for bound, and so are fields, keys, call values and nil itself (language server only)."), rule(LOWERCASE_GLOBAL, Suspicious, WARN, false, "A global with a lowercase first letter is defined; this is usually a missing 'local'."), rule(IMPLICIT_GLOBAL, Suspicious, WARN, false, "A global is created from inside a function and never declared at file scope."), rule(BUILTIN_OVERWRITE, Suspicious, WARN, false, "A runtime global or native is overwritten."), - rule(DEPRECATED, Style, WARN, false, "A deprecated runtime function is used."), + rule(GLOBAL_IN_NIL_ENV, Correctness, WARN, false, "A global is read or set where a local _ENV that is nil is in scope, which raises an error."), + rule(DEPRECATED, Style, WARN, false, "A deprecated runtime function is used or, in the language server, a global, field or method whose definitions are all marked @deprecated."), rule(LOOP_NEVER_YIELDS, FiveM, ERROR, false, "An infinite loop has no Wait and will freeze the game or server thread."), rule(SOURCE_AFTER_YIELD, FiveM, WARN, false, "The global 'source' is read after a yield or inside a deferred callback, where it may belong to another event."), - rule(NATIVE_WRONG_SIDE, FiveM, ERROR, false, "A client-only native is called from a server script, or the reverse."), + rule(NATIVE_WRONG_SIDE, FiveM, ERROR, false, "A native or runtime global is used on a side that lacks it, such as a client-only native in a server script, the server's `os` and `io` libraries in a client script, or a name of one side in unguarded shared code that runs while the script loads, or anywhere with `strict`."), rule(CITIZEN_PREFIX, FiveM, INFO, true, "Citizen.Wait/CreateThread/SetTimeout have shorter global aliases."), rule(HASH_LITERAL, Performance, INFO, true, "GetHashKey/joaat of a string literal can be a compile-time `hash` literal."), rule(DEPRECATED_NATIVE_USAGE, Performance, INFO, true, "A slow legacy native pattern has a faster modern replacement."), @@ -168,8 +242,8 @@ pub static RULES: &[Rule] = &[ rule(MANIFEST_UNLISTED_SCRIPT, Manifest, OFF, false, "A Lua file in the resource is not referenced by fxmanifest.lua."), rule(MANIFEST_MISSING_DEPENDENCY, Manifest, INFO, false, "Exports of another resource are used but the resource is not listed under dependencies, so load order is not guaranteed."), rule(EVENT_ARGUMENT_COUNT, FiveM, WARN, false, "An event is triggered with more arguments than its handler takes; the extra values are lost."), - rule(EVENT_MISSING_ARGUMENTS, FiveM, INFO, false, "An event is triggered with fewer arguments than its handler declares; fine for optional parameters, a bug otherwise."), - rule(EVENT_WRONG_SIDE, FiveM, WARN, false, "An event is triggered towards a side where nothing handles it, while a handler exists on the other side."), + rule(EVENT_MISSING_ARGUMENTS, FiveM, INFO, false, "An event is triggered with fewer arguments than its handler requires; a parameter its doc comment marks optional may be left out."), + rule(EVENT_WRONG_SIDE, FiveM, WARN, false, "An event is triggered towards a side where nothing handles it, while a handler exists on the other side, or a handler waits for an event that FiveM only triggers on the other side."), rule(EXPORT_ARGUMENT_COUNT, FiveM, WARN, false, "An export is called with more arguments than the exported function accepts."), rule(UNKNOWN_EXPORT, FiveM, INFO, false, "A resource that is part of the workspace does not register the export that is called."), rule(RESOURCE_NOT_FOUND, FiveM, INFO, false, "An export of a resource is called outside any condition, but the server's resources folder contains no such resource. The enclosing function may still never run."), diff --git a/crates/qbx_lua_analysis/src/scope.rs b/crates/qbx_lua_analysis/src/scope.rs index e7d830c..5cc8495 100644 --- a/crates/qbx_lua_analysis/src/scope.rs +++ b/crates/qbx_lua_analysis/src/scope.rs @@ -69,6 +69,16 @@ impl GlobalRef { } } +/// A name that would be a global, read or set while a local `_ENV` is in scope, which makes it a +/// field of that table instead. `local _ENV = _ENV` keeps the globals. +#[derive(Clone, Debug)] +pub struct EnvField { + pub name: SmolStr, + pub span: Span, + /// The `_ENV` local is declared without a value or as `nil`, so using the name raises an error. + pub nil_env: bool, +} + #[derive(Clone, Debug)] pub struct Function { pub span: Span, @@ -95,6 +105,7 @@ pub struct Resolution { pub functions: Vec, pub labels: Vec