├── .github
└── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
├── .gitignore
├── LICENSE
├── README.md
├── _config.yml
├── docker
├── .DS_Store
├── build
│ ├── Dockerfile
│ ├── build.sh
│ └── docker-entrypoint.sh
├── run.sh
└── server
│ ├── Dockerfile
│ ├── docker-entrypoint.sh
│ ├── empty.amx
│ ├── empty.pwn
│ ├── empty.py
│ └── server.cfg.template
├── gamemodes
├── grandlarc
│ ├── __init__.py
│ ├── funcs.py
│ ├── player.py
│ ├── spawns.py
│ └── vars.py
└── scriptfiles
│ └── vehicles
│ └── vehicles
│ ├── bone.txt
│ ├── flint.txt
│ ├── ls_airport.txt
│ ├── ls_gen_inner.txt
│ ├── ls_gen_outer.txt
│ ├── ls_law.txt
│ ├── lv_airport.txt
│ ├── lv_gen.txt
│ ├── lv_law.txt
│ ├── pilots.txt
│ ├── red_county.txt
│ ├── sf_airport.txt
│ ├── sf_gen.txt
│ ├── sf_law.txt
│ ├── sf_train.txt
│ ├── tierra.txt
│ ├── trains.txt
│ ├── trains_platform.txt
│ └── whetstone.txt
├── pysamp
├── __init__.py
├── actor.py
├── callbacks
│ ├── __init__.py
│ ├── _path_hook.py
│ └── names.py
├── commands.py
├── dialog.py
├── docs
│ ├── Makefile
│ ├── actor.rst
│ ├── conf.py
│ ├── dialog.rst
│ ├── index.rst
│ ├── menu.rst
│ ├── modules.rst
│ ├── object.rst
│ ├── pickup.rst
│ ├── player.rst
│ ├── playerobject.rst
│ ├── playertextdraw.rst
│ ├── textdraw.rst
│ ├── textlabel.rst
│ └── vehicle.rst
├── event.py
├── gangzone.py
├── menu.py
├── object.py
├── pickup.py
├── player.py
├── playerobject.py
├── playertextdraw.py
├── textdraw.py
├── textlabel.py
├── timer.py
└── vehicle.py
├── requirements.txt
├── samp
└── __init__.pyi
├── scripts
├── APIGenerator.py
├── FunctionGenerator.py
├── constants.txt
├── cpp
│ └── tests.txt
├── functions.h
├── functions
│ ├── callbacks.txt
│ └── functions.txt
├── idl
│ ├── a_actor.idl
│ ├── a_http.idl
│ ├── a_objects.idl
│ ├── a_players.idl
│ ├── a_samp.idl
│ ├── a_vehicles.idl
│ └── callbacks.idl
├── json
│ ├── AddMenuItem.txt
│ ├── AddPlayerClass.txt
│ ├── AddPlayerClassEx.txt
│ ├── AddStaticPickup.txt
│ ├── AddStaticVehicle.txt
│ ├── AddStaticVehicleEx.txt
│ ├── AddVehicleComponent.txt
│ ├── AllowAdminTeleport.txt
│ ├── AllowInteriorWeapons.txt
│ ├── AllowPlayerTeleport.txt
│ ├── ApplyActorAnimation.txt
│ ├── ApplyAnimation.txt
│ ├── AttachCameraToObject.txt
│ ├── AttachCameraToPlayerObject.txt
│ ├── AttachObjectToObject.txt
│ ├── AttachObjectToPlayer.txt
│ ├── AttachObjectToVehicle.txt
│ ├── AttachPlayerObjectToPlayer.txt
│ ├── AttachPlayerObjectToVehicle.txt
│ ├── AttachTrailerToVehicle.txt
│ ├── Ban.txt
│ ├── BanEx.txt
│ ├── BlockIpAddress.txt
│ ├── CancelEdit.txt
│ ├── CancelSelectTextDraw.txt
│ ├── ChangeVehicleColor.txt
│ ├── ChangeVehiclePaintjob.txt
│ ├── ClearActorAnimations.txt
│ ├── ClearAnimations.txt
│ ├── ConnectNPC.txt
│ ├── CreateActor.txt
│ ├── CreateExplosion.txt
│ ├── CreateExplosionForPlayer.txt
│ ├── CreateMenu.txt
│ ├── CreateObject.txt
│ ├── CreatePickup.txt
│ ├── CreatePlayerObject.txt
│ ├── CreatePlayerTextDraw.txt
│ ├── CreateVehicle.txt
│ ├── DeletePVar.txt
│ ├── DeleteSVar.txt
│ ├── DestroyActor.txt
│ ├── DestroyMenu.txt
│ ├── DestroyObject.txt
│ ├── DestroyPickup.txt
│ ├── DestroyPlayerObject.txt
│ ├── DestroyVehicle.txt
│ ├── DetachTrailerFromVehicle.txt
│ ├── DisableInteriorEnterExits.txt
│ ├── DisableMenu.txt
│ ├── DisableMenuRow.txt
│ ├── DisableNameTagLOS.txt
│ ├── DisablePlayerCheckpoint.txt
│ ├── DisablePlayerRaceCheckpoint.txt
│ ├── DisableRemoteVehicleCollisions.txt
│ ├── EditAttachedObject.txt
│ ├── EditObject.txt
│ ├── EditPlayerObject.txt
│ ├── EnablePlayerCameraTarget.txt
│ ├── EnableStuntBonusForAll.txt
│ ├── EnableStuntBonusForPlayer.txt
│ ├── EnableTirePopping.txt
│ ├── EnableVehicleFriendlyFire.txt
│ ├── EnableZoneNames.txt
│ ├── ForceClassSelection.txt
│ ├── GameModeExit.txt
│ ├── GameTextForAll.txt
│ ├── GameTextForPlayer.txt
│ ├── GangZoneCreate.txt
│ ├── GangZoneDestroy.txt
│ ├── GangZoneFlashForAll.txt
│ ├── GangZoneFlashForPlayer.txt
│ ├── GangZoneHideForAll.txt
│ ├── GangZoneHideForPlayer.txt
│ ├── GangZoneShowForAll.txt
│ ├── GangZoneShowForPlayer.txt
│ ├── GangZoneStopFlashForAll.txt
│ ├── GangZoneStopFlashForPlayer.txt
│ ├── GetActorFacingAngle.txt
│ ├── GetActorHealth.txt
│ ├── GetActorPoolSize.txt
│ ├── GetActorPos.txt
│ ├── GetActorVirtualWorld.txt
│ ├── GetAnimationName.txt
│ ├── GetConsoleVarAsBool.txt
│ ├── GetConsoleVarAsInt.txt
│ ├── GetConsoleVarAsString.txt
│ ├── GetGravity.txt
│ ├── GetMaxPlayers.txt
│ ├── GetNetworkStats.txt
│ ├── GetObjectModel.txt
│ ├── GetObjectPos.txt
│ ├── GetObjectRot.txt
│ ├── GetPVarFloat.txt
│ ├── GetPVarInt.txt
│ ├── GetPVarNameAtIndex.txt
│ ├── GetPVarString.txt
│ ├── GetPVarType.txt
│ ├── GetPVarsUpperIndex.txt
│ ├── GetPlayerAmmo.txt
│ ├── GetPlayerAnimationIndex.txt
│ ├── GetPlayerArmour.txt
│ ├── GetPlayerCameraAspectRatio.txt
│ ├── GetPlayerCameraFrontVector.txt
│ ├── GetPlayerCameraMode.txt
│ ├── GetPlayerCameraPos.txt
│ ├── GetPlayerCameraTargetActor.txt
│ ├── GetPlayerCameraTargetObject.txt
│ ├── GetPlayerCameraTargetPlayer.txt
│ ├── GetPlayerCameraTargetVehicle.txt
│ ├── GetPlayerCameraZoom.txt
│ ├── GetPlayerColor.txt
│ ├── GetPlayerDistanceFromPoint.txt
│ ├── GetPlayerDrunkLevel.txt
│ ├── GetPlayerFacingAngle.txt
│ ├── GetPlayerFightingStyle.txt
│ ├── GetPlayerHealth.txt
│ ├── GetPlayerInterior.txt
│ ├── GetPlayerIp.txt
│ ├── GetPlayerKeys.txt
│ ├── GetPlayerLastShotVectors.txt
│ ├── GetPlayerMenu.txt
│ ├── GetPlayerMoney.txt
│ ├── GetPlayerName.txt
│ ├── GetPlayerNetworkStats.txt
│ ├── GetPlayerObjectModel.txt
│ ├── GetPlayerObjectPos.txt
│ ├── GetPlayerObjectRot.txt
│ ├── GetPlayerPing.txt
│ ├── GetPlayerPoolSize.txt
│ ├── GetPlayerPos.txt
│ ├── GetPlayerScore.txt
│ ├── GetPlayerSkin.txt
│ ├── GetPlayerSpecialAction.txt
│ ├── GetPlayerState.txt
│ ├── GetPlayerSurfingObjectID.txt
│ ├── GetPlayerSurfingVehicleID.txt
│ ├── GetPlayerTargetActor.txt
│ ├── GetPlayerTargetPlayer.txt
│ ├── GetPlayerTeam.txt
│ ├── GetPlayerTime.txt
│ ├── GetPlayerVehicleID.txt
│ ├── GetPlayerVehicleSeat.txt
│ ├── GetPlayerVelocity.txt
│ ├── GetPlayerVersion.txt
│ ├── GetPlayerVirtualWorld.txt
│ ├── GetPlayerWantedLevel.txt
│ ├── GetPlayerWeapon.txt
│ ├── GetPlayerWeaponData.txt
│ ├── GetPlayerWeaponState.txt
│ ├── GetSVarFloat.txt
│ ├── GetSVarInt.txt
│ ├── GetSVarNameAtIndex.txt
│ ├── GetSVarString.txt
│ ├── GetSVarType.txt
│ ├── GetSVarsUpperIndex.txt
│ ├── GetServerTickRate.txt
│ ├── GetServerVarAsBool.txt
│ ├── GetServerVarAsInt.txt
│ ├── GetServerVarAsString.txt
│ ├── GetTickCount.txt
│ ├── GetVehicleComponentInSlot.txt
│ ├── GetVehicleComponentType.txt
│ ├── GetVehicleDamageStatus.txt
│ ├── GetVehicleDistanceFromPoint.txt
│ ├── GetVehicleHealth.txt
│ ├── GetVehicleModel.txt
│ ├── GetVehicleModelInfo.txt
│ ├── GetVehicleParamsCarDoors.txt
│ ├── GetVehicleParamsCarWindows.txt
│ ├── GetVehicleParamsEx.txt
│ ├── GetVehicleParamsSirenState.txt
│ ├── GetVehiclePoolSize.txt
│ ├── GetVehiclePos.txt
│ ├── GetVehicleRotationQuat.txt
│ ├── GetVehicleTrailer.txt
│ ├── GetVehicleVelocity.txt
│ ├── GetVehicleVirtualWorld.txt
│ ├── GetVehicleZAngle.txt
│ ├── GetWeaponName.txt
│ ├── GivePlayerMoney.txt
│ ├── GivePlayerWeapon.txt
│ ├── HideMenuForPlayer.txt
│ ├── InterpolateCameraLookAt.txt
│ ├── InterpolateCameraPos.txt
│ ├── IsActorInvulnerable.txt
│ ├── IsActorStreamedIn.txt
│ ├── IsObjectMoving.txt
│ ├── IsPlayerAdmin.txt
│ ├── IsPlayerAttachedObjectSlotUsed.txt
│ ├── IsPlayerConnected.txt
│ ├── IsPlayerInAnyVehicle.txt
│ ├── IsPlayerInCheckpoint.txt
│ ├── IsPlayerInRaceCheckpoint.txt
│ ├── IsPlayerInRangeOfPoint.txt
│ ├── IsPlayerInVehicle.txt
│ ├── IsPlayerNPC.txt
│ ├── IsPlayerObjectMoving.txt
│ ├── IsPlayerStreamedIn.txt
│ ├── IsTrailerAttachedToVehicle.txt
│ ├── IsValidActor.txt
│ ├── IsValidMenu.txt
│ ├── IsValidObject.txt
│ ├── IsValidPlayerObject.txt
│ ├── IsValidVehicle.txt
│ ├── IsVehicleStreamedIn.txt
│ ├── Kick.txt
│ ├── LimitGlobalChatRadius.txt
│ ├── LimitPlayerMarkerRadius.txt
│ ├── LinkVehicleToInterior.txt
│ ├── ManualVehicleEngineAndLights.txt
│ ├── MoveObject.txt
│ ├── MovePlayerObject.txt
│ ├── NetStats_BytesReceived.txt
│ ├── NetStats_BytesSent.txt
│ ├── NetStats_ConnectionStatus.txt
│ ├── NetStats_GetConnectedTime.txt
│ ├── NetStats_GetIpPort.txt
│ ├── NetStats_MessagesReceived.txt
│ ├── NetStats_MessagesRecvPerSecond.txt
│ ├── NetStats_MessagesSent.txt
│ ├── NetStats_PacketLossPercent.txt
│ ├── PlayAudioStreamForPlayer.txt
│ ├── PlayCrimeReportForPlayer.txt
│ ├── PlayerPlaySound.txt
│ ├── PlayerSpectatePlayer.txt
│ ├── PlayerSpectateVehicle.txt
│ ├── PlayerTextDrawAlignment.txt
│ ├── PlayerTextDrawBackgroundColor.txt
│ ├── PlayerTextDrawBoxColor.txt
│ ├── PlayerTextDrawColor.txt
│ ├── PlayerTextDrawDestroy.txt
│ ├── PlayerTextDrawFont.txt
│ ├── PlayerTextDrawHide.txt
│ ├── PlayerTextDrawLetterSize.txt
│ ├── PlayerTextDrawSetOutline.txt
│ ├── PlayerTextDrawSetPreviewModel.txt
│ ├── PlayerTextDrawSetPreviewRot.txt
│ ├── PlayerTextDrawSetPreviewVehCol.txt
│ ├── PlayerTextDrawSetProportional.txt
│ ├── PlayerTextDrawSetSelectable.txt
│ ├── PlayerTextDrawSetShadow.txt
│ ├── PlayerTextDrawSetString.txt
│ ├── PlayerTextDrawShow.txt
│ ├── PlayerTextDrawTextSize.txt
│ ├── PlayerTextDrawUseBox.txt
│ ├── PutPlayerInVehicle.txt
│ ├── RemoveBuildingForPlayer.txt
│ ├── RemovePlayerAttachedObject.txt
│ ├── RemovePlayerFromVehicle.txt
│ ├── RemovePlayerMapIcon.txt
│ ├── RemoveVehicleComponent.txt
│ ├── RepairVehicle.txt
│ ├── ResetPlayerMoney.txt
│ ├── ResetPlayerWeapons.txt
│ ├── SelectObject.txt
│ ├── SelectTextDraw.txt
│ ├── SendClientMessage.txt
│ ├── SendClientMessageToAll.txt
│ ├── SendDeathMessage.txt
│ ├── SendDeathMessageToPlayer.txt
│ ├── SendPlayerMessageToAll.txt
│ ├── SendPlayerMessageToPlayer.txt
│ ├── SendRconCommand.txt
│ ├── SetActorFacingAngle.txt
│ ├── SetActorHealth.txt
│ ├── SetActorInvulnerable.txt
│ ├── SetActorPos.txt
│ ├── SetActorVirtualWorld.txt
│ ├── SetCameraBehindPlayer.txt
│ ├── SetDeathDropAmount.txt
│ ├── SetGameModeText.txt
│ ├── SetGravity.txt
│ ├── SetMenuColumnHeader.txt
│ ├── SetNameTagDrawDistance.txt
│ ├── SetObjectMaterial.txt
│ ├── SetObjectMaterialText.txt
│ ├── SetObjectNoCameraCol.txt
│ ├── SetObjectPos.txt
│ ├── SetObjectRot.txt
│ ├── SetObjectsDefaultCameraCol.txt
│ ├── SetPVarFloat.txt
│ ├── SetPVarInt.txt
│ ├── SetPVarString.txt
│ ├── SetPlayerAmmo.txt
│ ├── SetPlayerArmedWeapon.txt
│ ├── SetPlayerArmour.txt
│ ├── SetPlayerAttachedObject.txt
│ ├── SetPlayerCameraLookAt.txt
│ ├── SetPlayerCameraPos.txt
│ ├── SetPlayerChatBubble.txt
│ ├── SetPlayerCheckpoint.txt
│ ├── SetPlayerColor.txt
│ ├── SetPlayerDrunkLevel.txt
│ ├── SetPlayerFacingAngle.txt
│ ├── SetPlayerFightingStyle.txt
│ ├── SetPlayerHealth.txt
│ ├── SetPlayerInterior.txt
│ ├── SetPlayerMapIcon.txt
│ ├── SetPlayerMarkerForPlayer.txt
│ ├── SetPlayerName.txt
│ ├── SetPlayerObjectMaterial.txt
│ ├── SetPlayerObjectMaterialText.txt
│ ├── SetPlayerObjectNoCameraCol.txt
│ ├── SetPlayerObjectPos.txt
│ ├── SetPlayerObjectRot.txt
│ ├── SetPlayerPos.txt
│ ├── SetPlayerPosFindZ.txt
│ ├── SetPlayerRaceCheckpoint.txt
│ ├── SetPlayerScore.txt
│ ├── SetPlayerShopName.txt
│ ├── SetPlayerSkillLevel.txt
│ ├── SetPlayerSkin.txt
│ ├── SetPlayerSpecialAction.txt
│ ├── SetPlayerTeam.txt
│ ├── SetPlayerTime.txt
│ ├── SetPlayerVelocity.txt
│ ├── SetPlayerVirtualWorld.txt
│ ├── SetPlayerWantedLevel.txt
│ ├── SetPlayerWeather.txt
│ ├── SetPlayerWorldBounds.txt
│ ├── SetSVarFloat.txt
│ ├── SetSVarInt.txt
│ ├── SetSVarString.txt
│ ├── SetSpawnInfo.txt
│ ├── SetTeamCount.txt
│ ├── SetVehicleAngularVelocity.txt
│ ├── SetVehicleHealth.txt
│ ├── SetVehicleNumberPlate.txt
│ ├── SetVehicleParamsCarDoors.txt
│ ├── SetVehicleParamsCarWindows.txt
│ ├── SetVehicleParamsEx.txt
│ ├── SetVehicleParamsForPlayer.txt
│ ├── SetVehiclePos.txt
│ ├── SetVehicleToRespawn.txt
│ ├── SetVehicleVelocity.txt
│ ├── SetVehicleVirtualWorld.txt
│ ├── SetVehicleZAngle.txt
│ ├── SetWeather.txt
│ ├── SetWorldTime.txt
│ ├── ShowMenuForPlayer.txt
│ ├── ShowNameTags.txt
│ ├── ShowPlayerDialog.txt
│ ├── ShowPlayerMarkers.txt
│ ├── ShowPlayerNameTagForPlayer.txt
│ ├── SpawnPlayer.txt
│ ├── StartRecordingPlayerData.txt
│ ├── StopAudioStreamForPlayer.txt
│ ├── StopObject.txt
│ ├── StopPlayerObject.txt
│ ├── StopRecordingPlayerData.txt
│ ├── TextDrawAlignment.txt
│ ├── TextDrawBackgroundColor.txt
│ ├── TextDrawBoxColor.txt
│ ├── TextDrawColor.txt
│ ├── TextDrawCreate.txt
│ ├── TextDrawDestroy.txt
│ ├── TextDrawFont.txt
│ ├── TextDrawHideForAll.txt
│ ├── TextDrawHideForPlayer.txt
│ ├── TextDrawLetterSize.txt
│ ├── TextDrawSetOutline.txt
│ ├── TextDrawSetPreviewModel.txt
│ ├── TextDrawSetPreviewRot.txt
│ ├── TextDrawSetPreviewVehCol.txt
│ ├── TextDrawSetProportional.txt
│ ├── TextDrawSetSelectable.txt
│ ├── TextDrawSetShadow.txt
│ ├── TextDrawSetString.txt
│ ├── TextDrawShowForAll.txt
│ ├── TextDrawShowForPlayer.txt
│ ├── TextDrawTextSize.txt
│ ├── TextDrawUseBox.txt
│ ├── TogglePlayerClock.txt
│ ├── TogglePlayerControllable.txt
│ ├── TogglePlayerSpectating.txt
│ ├── UnBlockIpAddress.txt
│ ├── UpdateVehicleDamageStatus.txt
│ ├── UsePlayerPedAnims.txt
│ ├── VectorSize.txt
│ └── gpci.txt
├── setup_workspace.bat
└── setup_workspace.sh
└── src
├── CMakeLists.txt
├── Doxyfile.in
├── bindings
├── logprintf.cpp
├── logprintf.h
├── samp.cpp
└── samp.h
├── config.h.in
├── limited_api_python.h
├── main.cpp
├── main.def
├── main.h
└── pysamp
├── callbacks.cpp
├── callbacks.h
├── param_converter.cpp
├── param_converter.h
├── pygamemode.cpp
├── pygamemode.h
├── pysamp.cpp
├── pysamp.h
├── timer.cpp
└── timer.h
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 | - OS: [e.g. iOS]
28 | - Browser [e.g. chrome, safari]
29 | - Version [e.g. 22]
30 |
31 | **Smartphone (please complete the following information):**
32 | - Device: [e.g. iPhone6]
33 | - OS: [e.g. iOS8.1]
34 | - Browser [e.g. stock browser, safari]
35 | - Version [e.g. 22]
36 |
37 | **Additional context**
38 | Add any other context about the problem here.
39 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | Win32/
2 | build/*
3 | src/amx/*
4 | src/cmake/*
5 | .vs/
6 | sh/
7 | src/plugin.h
8 | src/sampgdk.h
9 | src/plugincommon.h
10 | src/sampgdk.c
11 | src/sampgdk.h
12 | src/amxplugin.cpp
13 | pySAMP.dir/
14 | python/idl/
15 | python/json/
16 | python/functions/
17 | .vscode/
18 | doc/plantuml/
19 | test/
20 | *.pyc
21 | gamemodes/reloadable-gamemode/
22 | gamemodes/remote-client/
23 | gamemodes/remote-server/
24 | target/
25 | **/.DS_Store
26 | docker/data
27 | docker/build/PySAMP.so
28 | venv/
29 | _static/
30 | _templates/
31 | _build/
32 | compose-dev.yaml
33 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-cayman
--------------------------------------------------------------------------------
/docker/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pysamp/PySAMP/b147c162af3dd00ef8cd0b91c0b538d04ba5cfd2/docker/.DS_Store
--------------------------------------------------------------------------------
/docker/build/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM cheaterman/manylinux2014_i686:latest
2 |
3 | ARG sampgdk_ref=v4.6.4
4 | ARG pysamp_ref=v2.1.0-rc3
5 | ARG build_type=RelWithDebInfo
6 |
7 | WORKDIR /root
8 |
9 | RUN \
10 | git clone \
11 | --depth 1 \
12 | --recursive \
13 | --branch ${sampgdk_ref} \
14 | https://github.com/Zeex/sampgdk \
15 | && \
16 | git clone \
17 | --depth 1 \
18 | --recursive \
19 | https://github.com/Zeex/samp-plugin-sdk \
20 | && \
21 | git clone \
22 | --depth 1 \
23 | --recursive \
24 | --branch ${pysamp_ref} \
25 | https://github.com/pysamp/PySAMP \
26 | && \
27 | ( \
28 | cd sampgdk && \
29 | export PATH="/opt/python/cp312-cp312/bin:${PATH}" && \
30 | sed -i 's/PythonInterp 2\.7/Python3 3.12/' CMakeLists.txt && \
31 | pip3.12 install --user ply && \
32 | chmod +x scripts/*.py{,.in} && \
33 | cmake \
34 | -S . \
35 | -B build \
36 | -DCMAKE_BUILD_TYPE=${build_type} \
37 | -DSAMPSDK_DIR=../samp-plugin-sdk \
38 | -DSAMPGDK_BUILD_AMALGAMATION=ON \
39 | && \
40 | cmake \
41 | --build build \
42 | --verbose \
43 | && \
44 | mkdir dist && \
45 | cd dist && \
46 | unzip ../build/sampgdk-*-amalgamation.zip \
47 | )
48 |
49 | WORKDIR /root/PySAMP
50 | COPY docker-entrypoint.sh /
51 | CMD ["/docker-entrypoint.sh"]
52 |
--------------------------------------------------------------------------------
/docker/build/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | docker build \
3 | --platform linux/386 \
4 | -t pysamp/build \
5 | . \
6 | &&
7 | docker run \
8 | --platform linux/386 \
9 | --rm -ti \
10 | -v $PWD:/root/output \
11 | pysamp/build
12 |
--------------------------------------------------------------------------------
/docker/build/docker-entrypoint.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | targets=(
3 | cp36-cp36m
4 | cp37-cp37m
5 | cp38-cp38
6 | cp39-cp39
7 | cp310-cp310
8 | cp311-cp311
9 | cp312-cp312
10 | )
11 | libcrypt_path=/usr/local/lib/libcrypt.so
12 | config="${CONFIG:-RelWithDebInfo}"
13 |
14 | if grep '.so.2' "${libcrypt_path}"; then
15 | # Force linking against libcrypt.so.1
16 | cp "${libcrypt_path}"{.1,}
17 | ldconfig
18 | fi
19 |
20 | for target in "${targets[@]}"; do
21 | (
22 | echo "Building for ${target}..."
23 | export PATH="/opt/python/${target}/bin:${PATH}"
24 | build_dir="build_${target}"
25 | target_dir="../output/python3.$(python3 -c 'import sys; print(sys.version_info[1])')"
26 | cmake \
27 | -S src \
28 | -B "build_${target}" \
29 | -D SAMPSDK_DIR="${PWD}/../samp-plugin-sdk" \
30 | -D SAMPGDK_DIR="${PWD}/../sampgdk" \
31 | -D CMAKE_BUILD_TYPE="${config}" \
32 | &&
33 | cmake \
34 | --build ${build_dir} \
35 | --config "${config}" \
36 | --parallel $(nproc) \
37 | --verbose \
38 | &&
39 | mkdir -p ${target_dir} &&
40 | cp "${build_dir}/PySAMP.so" ${target_dir}
41 | )
42 | done
43 |
--------------------------------------------------------------------------------
/docker/run.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | cd $(dirname $0)/server
4 | pysamp_path='../build/python3.10/PySAMP.so'
5 | pysamp_module_path='../../pysamp'
6 |
7 | if [ ! -e "$pysamp_path" ]
8 | then
9 | (
10 | cd ../build
11 | ./build.sh
12 | ) || exit 1
13 | cp "$pysamp_path" ./ &&
14 | cp -r "$pysamp_module_path" ./ &&
15 | docker build \
16 | --no-cache \
17 | --platform linux/amd64 \
18 | -t pysamp/server \
19 | . \
20 | &&
21 | rm $(basename "$pysamp_path")
22 | rm -rf "./pysamp"
23 | fi
24 |
25 | docker run \
26 | --name pysamp_server \
27 | --platform linux/amd64 \
28 | -v "$PWD/../data:/server" \
29 | -p 7777:7777/udp \
30 | --rm \
31 | -ti \
32 | pysamp/server
33 |
--------------------------------------------------------------------------------
/docker/server/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:22.04
2 |
3 | ARG samp_url=https://gta-multiplayer.cz/downloads/samp037svr_R2-2-1.tar.gz
4 | ARG crashdetect_version=4.20
5 |
6 | ENV DEBIAN_FRONTEND=noninteractive
7 |
8 | RUN \
9 | dpkg --add-architecture i386 && \
10 | apt-get update && \
11 | apt-get install -y --no-install-recommends \
12 | python3-dev:i386 \
13 | python3-pip \
14 | gcc-i686-linux-gnu \
15 | g++-i686-linux-gnu \
16 | libc6:i386 \
17 | libstdc++6:i386 \
18 | wget \
19 | gettext-base \
20 | && \
21 | mkdir /default_server && \
22 | ( \
23 | cd /default_server && \
24 | wget ${samp_url} -O server.tar.gz && \
25 | tar xf server.tar.gz && \
26 | rm server.tar.gz && \
27 | ls -lah samp03 && \
28 | mv samp03/announce samp03/samp-npc samp03/samp03svr ./ && \
29 | rm -rf samp03 && \
30 | mkdir gamemodes plugins scriptfiles && \
31 | wget https://github.com/Zeex/samp-plugin-crashdetect/releases/download/v${crashdetect_version}/crashdetect-${crashdetect_version}-linux.tar.gz && \
32 | tar xf crashdetect-${crashdetect_version}-linux.tar.gz && \
33 | rm crashdetect-${crashdetect_version}-linux.tar.gz && \
34 | mv crashdetect-${crashdetect_version}-linux/crashdetect.so plugins/ && \
35 | rm -rf crashdetect-${crashdetect_version}-linux && \
36 | touch requirements.txt \
37 | )
38 |
39 | COPY server.cfg.template /root
40 | RUN \
41 | cd /default_server && \
42 | export generated_password=$(python3 -c 'import os;print(os.urandom(24).hex())') && \
43 | envsubst < /root/server.cfg.template > server.cfg && \
44 | rm /root/server.cfg.template
45 |
46 | COPY empty.amx /default_server/gamemodes
47 | COPY empty.py /default_server/python.py
48 | COPY docker-entrypoint.sh /
49 | COPY pysamp/ /default_server/pysamp
50 | COPY PySAMP.so /default_server/plugins
51 |
52 | VOLUME /server
53 | WORKDIR /server
54 |
55 | ENTRYPOINT ["/docker-entrypoint.sh"]
56 | CMD ["samp03svr"]
57 |
--------------------------------------------------------------------------------
/docker/server/docker-entrypoint.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | if [ -z "$(ls -A /server)" ]
4 | then
5 | cp -r /default_server/* /server/
6 | fi
7 |
8 | if [ "$1" = "samp03svr" ]
9 | then
10 | pip install -r /server/requirements.txt &&
11 | exec /server/samp03svr 2>&1
12 | fi
13 |
14 | exec "$@"
15 |
--------------------------------------------------------------------------------
/docker/server/empty.amx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pysamp/PySAMP/b147c162af3dd00ef8cd0b91c0b538d04ba5cfd2/docker/server/empty.amx
--------------------------------------------------------------------------------
/docker/server/empty.pwn:
--------------------------------------------------------------------------------
1 | main(){}
2 |
--------------------------------------------------------------------------------
/docker/server/empty.py:
--------------------------------------------------------------------------------
1 | from pysamp.player import Player
2 |
3 | from pysamp import callbacks # needs to be before any submodules you make
4 |
5 |
6 | # Called when a player connects.
7 | @Player.on_connect
8 | def on_player_connection(player: Player):
9 | player_name = player.get_name()
10 | player.send_client_message(
11 | 0xFF0000FF,
12 | f'Hello from Python, {player_name}!',
13 | )
14 |
15 |
16 | # required to make the events work. Needs to be on bottom:
17 | callbacks.hook()
18 |
--------------------------------------------------------------------------------
/docker/server/server.cfg.template:
--------------------------------------------------------------------------------
1 | lanmode 0
2 | rcon_password ${generated_password}
3 | maxplayers 500
4 | port 7777
5 | hostname PySAMP server
6 | weburl github.com/habecker/PySAMP
7 | language Python
8 | mapname GitHub
9 | gamemodetext PySAMP
10 | gamemode0 empty
11 | plugins crashdetect.so PySAMP.so
12 | output 1
13 | announce 0
14 | query 1
15 | maxnpc 0
16 | onfoot_rate 40
17 | incar_rate 40
18 | weapon_rate 40
19 | stream_distance 300.0
20 | stream_rate 1000
21 | cookielogging 0
22 |
--------------------------------------------------------------------------------
/gamemodes/grandlarc/funcs.py:
--------------------------------------------------------------------------------
1 | from pysamp import add_static_vehicle_ex
2 | import os
3 |
4 | def load_from_file(filename):
5 | vehicles_loaded = 0
6 | try:
7 | with open(filename, "r") as f:
8 | lines = f.readlines()
9 | for line in lines:
10 | index = 0
11 |
12 | index = line.split(",")
13 | if len(index) < 1:
14 | continue
15 |
16 | vehicletype = int(index[0])
17 | spawn_x = float(index[1])
18 | spawn_y = float(index[2])
19 | spawn_z = float(index[3])
20 | spawn_rot = float(index[4])
21 | color_1 = int(index[5])
22 | color_2 = int(index[6].split(";")[0])
23 |
24 | if vehicletype < 400 or vehicletype > 611:
25 | continue
26 | if (
27 | index[0] == -1 or
28 | index[1] == -1 or
29 | index[2] == -1 or
30 | index[3] == -1 or
31 | index[4] == -1
32 | ):
33 | continue
34 |
35 | add_static_vehicle_ex(vehicletype, spawn_x, spawn_y, spawn_z, spawn_rot, color_1, color_2, 1800)
36 | vehicles_loaded +=1
37 | f.close()
38 | print(f"Loaded {int(vehicles_loaded)} vehicles from: {filename}")
39 | except IOError as error:
40 | print(error)
41 |
--------------------------------------------------------------------------------
/gamemodes/grandlarc/player.py:
--------------------------------------------------------------------------------
1 | from pysamp.player import Player as BasePlayer
2 | from functools import wraps
3 |
4 | class Player(BasePlayer):
5 | _registry = {}
6 | """
7 | Retrieve an instance from the registry, creating it if needed.
8 | """
9 | def __init__(self, playerid):
10 | super().__init__(playerid)
11 | self.city_selection = -1
12 | self.has_city_selected = False
13 | self.last_city_selection_tick = 0
14 |
15 |
16 | @classmethod
17 | def from_registry_native(cls, player: BasePlayer) -> "Player":
18 | if isinstance(player, int):
19 | player_id = player
20 |
21 | if isinstance(player, BasePlayer):
22 | player_id = player.id
23 |
24 | player = cls._registry.get(player_id)
25 |
26 | if not player:
27 | cls._registry[player_id] = player = cls(player_id)
28 |
29 | return player
30 |
31 |
32 | @classmethod
33 | def using_registry(cls, func):
34 | """
35 | This should be used to make sure that our callback takes an instance of the class from the dictionary
36 | """
37 | @wraps(func)
38 | def from_registry(*args, **kwargs):
39 | args = list(args)
40 | args[0] = cls.from_registry_native(args[0])
41 | return func(*args, **kwargs)
42 |
43 | return from_registry
44 |
45 |
46 | @classmethod
47 | def delete_registry(cls, player: BasePlayer):
48 | """
49 | Removes an instance from the registry
50 | """
51 | playerid = player.id
52 | del cls._registry[playerid]
53 |
--------------------------------------------------------------------------------
/gamemodes/grandlarc/vars.py:
--------------------------------------------------------------------------------
1 | COLOR_WHITE = 0xFFFFFFFF
2 | COLOR_NORMAL_PLAYER = 0xFF4444FF
3 | CITY_LOS_SANTOS = 0
4 | CITY_SAN_FIERRO = 1
5 | CITY_LAS_VENTURAS = 2
6 | total_vehicles_from_files = 0
7 |
--------------------------------------------------------------------------------
/gamemodes/scriptfiles/vehicles/vehicles/flint.txt:
--------------------------------------------------------------------------------
1 | 599,-807.0116,-942.0936,104.6271,314.7196,0,1 ;
2 | 405,-589.3418,-1079.1355,23.3771,236.8904,24,1 ;
3 | 505,-569.3895,-1048.4032,24.0146,237.8018,14,123 ;
4 | 403,-349.3221,-1052.6652,59.4551,89.0788,14,123 ;
5 | 505,-388.6629,-1150.0758,69.5786,357.9839,14,123 ;
6 | 403,-76.0173,-1110.5597,1.0456,157.5384,36,2 ;
7 | 531,-41.9499,-1153.2262,1.0440,63.5908,36,2 ;
8 | 403,-39.6653,-1149.7799,1.0409,65.3597,36,2 ;
9 | 531,-82.1817,-1137.4266,1.0402,340.8923,36,2 ;
10 | 531,-85.4142,-1135.9938,1.0412,337.3026,36,2 ;
11 | 403,-184.4848,-1307.1466,5.7091,103.7043,36,2 ;
12 | 531,-367.7308,-1437.3649,25.6921,89.2236,36,2 ;
13 | 422,-587.1984,-1499.8407,10.1747,36.7555,97,25 ;
14 | 422,-657.5599,-1606.0066,25.1821,175.4014,97,25 ;
15 | 400,-495.5439,-1834.0343,17.7955,184.7055,101,1 ;
16 | 473,-512.5999,-1902.9431,5.0016,179.0171,56,53 ;
17 | 468,-655.3087,-1998.3328,26.7546,211.5583,46,46 ;
18 | 466,-841.4815,-2274.6650,20.8199,210.7536,68,76 ;
19 | 466,-714.6012,-2547.3081,50.9399,128.7565,68,76 ;
20 | 473,-485.8806,-2852.4319,-0.1373,248.4979,56,15 ;
21 | 473,-196.7365,-2925.3259,0.0006,269.7706,56,15 ;
22 | 473,-237.4600,-1794.3876,-0.1057,3.6694,56,15 ;
23 | 468,-271.2445,-1790.1851,10.9364,163.2745,3,3 ;
24 | 400,-379.1094,-2171.6399,46.6781,140.2350,62,1 ;
25 | 410,-1196.9539,-2364.4788,18.5773,236.2259,9,1 ;
26 | 532,-759.8405,-2458.4460,72.6366,319.4753,0,0 ;
27 | 400,-20.6879,-2498.1814,36.7408,122.2802,4,1 ;
28 | 400,-17.0690,-2520.2581,36.7478,213.8456,4,1 ;
29 | 410,-31.9095,-2493.5383,36.3036,194.0151,10,1 ;
30 | 599,-11.5140,-2512.1458,36.8428,121.2561,0,1 ;
31 | 489,20.0119,-2648.0332,40.6164,92.6500,112,120 ;
32 | 489,-186.1633,-2516.2021,31.3678,342.0027,112,120 ;
33 | 466,-384.6082,-2474.8984,102.4780,268.9366,25,76 ;
34 | 466,-485.5412,-2688.4248,152.3252,102.3787,25,76 ;
35 | 471,-765.0049,-2686.1196,83.7728,114.8461,120,112 ;
36 | 586,-1541.8571,-1342.7786,50.5056,14.3390,122,1 ;
37 | 586,-1029.8485,-638.6542,31.5280,93.4600,8,1 ;
38 | 586,-1006.8740,-674.1090,31.5279,275.2718,8,1 ;
39 | 400,-983.5594,-641.0239,32.1002,271.1476,101,1 ;
40 | 400,-1006.5243,-623.0823,32.1002,90.1122,101,1 ;
41 | 483,-1030.8571,-658.6420,32.0001,90.1086,1,31 ;
42 | 531,-940.2722,-498.2120,25.9274,256.5565,51,53 ;
43 | 531,-918.0818,-534.8812,25.9175,357.6102,51,53 ;
44 | 532,-1140.0840,-991.7651,130.1964,86.3863,0,0 ;
45 | 532,-1164.6876,-1057.4521,130.2022,277.3220,0,0 ;
46 | 466,-1407.8011,-1165.6597,103.0781,151.5499,78,76 ;
47 | 531,-1444.6823,-1496.3507,101.7242,183.6463,91,2 ;
48 | 531,-1417.1289,-1534.5874,101.7193,184.5565,91,2 ;
49 | 531,-1451.8495,-1456.9764,101.7236,175.8479,91,2 ;
50 | 468,-219.3871,-906.6091,40.6608,186.4501,46,46 ;
51 | 471,-504.2122,-1660.6406,10.6085,43.9901,103,111 ;
52 | 468,-916.9662,-1459.5214,122.9255,13.1392,46,46 ;
53 | 468,-1071.7697,-1296.8829,128.8868,278.9760,46,46 ;
54 | 468,-1112.6062,-1671.9421,76.0362,359.7007,46,46 ;
55 | 532,-1058.2371,-1612.5803,77.3616,174.8907,0,0 ;
56 | 471,-1040.5020,-1662.9651,77.5813,217.8248,74,91 ;
57 | 471,-925.3805,-1439.3502,125.5587,24.4562,74,83 ;
58 | 531,-85.5815,-1608.7993,2.7154,300.0013,36,2 ;
59 | 403,-47.9698,-1570.7786,3.2227,152.9310,37,1 ;
60 | 400,-93.0630,-1194.6671,2.3429,344.3191,123,1 ;
61 | 422,-81.0025,-1198.4222,2.2849,345.3639,97,25 ;
62 |
--------------------------------------------------------------------------------
/gamemodes/scriptfiles/vehicles/vehicles/ls_airport.txt:
--------------------------------------------------------------------------------
1 | 519,1806.1066,-2406.8108,14.4731,220.1901,1,1 ;
2 | 519,1851.0873,-2397.0818,14.4738,221.0776,1,1 ;
3 | 519,1881.2903,-2364.6726,14.4760,231.6925,1,1 ;
4 | 593,1990.4940,-2400.4700,14.0069,126.8314,58,8 ;
5 | 593,1991.9357,-2377.5691,14.0096,111.9823,19,33 ;
6 | 593,1994.2283,-2329.9182,14.0074,123.6920,68,8 ;
7 | 593,1993.0359,-2307.1487,14.0073,121.4826,2,1 ;
8 | 485,2005.4028,-2340.4004,13.2026,353.8798,1,74 ;
9 | 485,1944.1885,-2234.3225,13.2017,358.4947,1,75 ;
10 | 485,1893.2838,-2320.5076,13.2070,285.2385,1,76 ;
11 | 485,1882.2479,-2390.3965,13.2133,266.7464,1,77 ;
12 | 485,1915.2466,-2643.3474,13.2050,2.2446,1,78 ;
13 | 553,1944.5242,-2639.1465,14.8823,28.0299,55,23 ;
14 | 553,1984.2778,-2637.7561,14.8831,9.0602,94,116 ;
15 | 553,2019.7615,-2642.5803,14.8759,318.3256,128,7 ;
16 | 476,2124.7380,-2418.2964,14.2641,205.4615,7,6 ;
17 | 476,2142.8672,-2434.3076,14.2587,144.2144,1,6 ;
18 | 476,2107.1399,-2417.1648,14.2647,150.9743,135,14 ;
19 | 476,2083.0217,-2429.4854,14.2543,182.9969,119,117 ;
20 | 510,2081.9866,-2359.7229,13.1551,64.1485,39,39 ;
21 | 510,1866.6115,-2660.4602,13.1552,18.6151,6,6 ;
22 | 513,1881.0273,-2632.3281,14.0996,40.9586,21,36 ;
23 | 513,1891.9824,-2632.7056,14.1085,332.5663,138,122 ;
24 | 593,1840.4315,-2631.8525,14.0080,319.2033,22,1 ;
25 | 593,1822.1689,-2629.8713,14.0076,35.6965,36,8 ;
26 | 593,1806.7133,-2630.3167,14.0037,32.0461,51,1 ;
27 | 476,1752.8643,-2632.2061,14.2631,1.4834,103,102 ;
28 | 481,1698.6532,-2692.0225,13.0592,256.1956,26,1 ;
29 | 485,1707.5415,-2646.3325,13.2052,359.6846,1,73 ;
30 | 487,1716.0422,-2437.5767,13.7316,148.7897,18,108 ;
31 | 487,1737.4827,-2432.7019,13.7340,192.0326,24,78 ;
32 | 487,1752.5586,-2452.2275,13.7322,147.2027,54,29 ;
33 | 417,1636.0142,-2409.7209,13.6266,193.2301,0,0 ;
34 | 417,1655.8718,-2410.4551,13.6350,156.9428,0,0 ;
35 | 510,1600.9696,-2395.0103,13.2262,298.2056,28,28 ;
36 | 497,1575.9307,-2408.7253,13.7347,153.2041,0,1 ; Police Maverick
37 | 497,1554.8207,-2406.4417,13.7308,190.6669,0,1 ; Police Maverick 2
--------------------------------------------------------------------------------
/gamemodes/scriptfiles/vehicles/vehicles/ls_gen_inner.txt:
--------------------------------------------------------------------------------
1 | 446,728.1595,-1495.2687,-0.4906,179.7909,1,5 ;
2 | 454,720.7040,-1633.3224,0.1487,177.6009,26,26 ;
3 | 454,720.5267,-1699.9827,0.1866,358.9251,26,26 ;
4 | 429,764.7679,-1660.5485,4.2160,94.0819,12,12 ;
5 | 541,688.0235,-1600.1552,13.7216,359.7577,58,8 ;
6 | 466,594.6932,-1519.6713,14.8586,178.9838,68,76 ;
7 | 458,601.2115,-1519.8091,14.8971,359.8546,101,1 ;
8 | 496,648.1077,-1507.8370,14.7836,88.3481,35,35 ;
9 | 429,729.7592,-1433.3433,13.2151,90.2927,13,13 ;
10 | 506,665.4387,-1421.5520,14.3497,1.6522,7,7 ;
11 | 506,587.3435,-1499.5959,15.0621,273.6347,6,6 ;
12 | 413,691.4462,-1570.2456,14.3358,179.2636,91,1 ;
13 | 451,489.1148,-1514.9581,20.0516,186.2239,46,46 ;
14 | 541,494.3372,-1604.7161,18.2000,275.6070,60,1 ;
15 | 603,259.4689,-1597.9203,33.1167,299.1694,69,1 ;
16 | 429,262.3868,-1603.2013,33.0642,323.2319,2,2 ;
17 | 518,258.0661,-1591.6113,33.1217,275.3944,36,36 ;
18 | 409,867.4957,-1285.9368,13.8859,357.4155,1,1 ;
19 | 457,844.4999,-1197.9865,16.6038,0.3980,2,1 ;
20 | 457,880.8410,-1199.7491,16.6031,357.7022,21,108 ;
21 | 457,914.7440,-1199.8364,16.6032,359.8655,106,56 ;
22 | 463,920.4453,-1290.5063,13.3508,118.6505,121,14 ;
23 | 542,863.2733,-1375.0151,13.3187,85.7265,32,92 ;
24 | 561,903.8953,-1454.9287,12.8651,270.7864,8,17 ;
25 | 429,881.5562,-1453.8588,13.3618,271.8305,99,93 ;
26 | 507,809.9615,-1448.9109,12.9680,87.2106,35,54 ;
27 | 589,810.5452,-1464.3678,12.7191,85.7123,134,97 ;
28 | 496,821.6033,-1473.7249,12.5756,357.5008,54,120 ;
29 | 461,1031.1113,-1446.3105,13.1411,59.0580,67,86 ;
30 | 418,1005.0084,-1461.3424,13.6427,183.0261,119,119 ;
31 | 463,990.1287,-1354.9878,12.9125,285.7227,65,6 ;
32 | 479,991.3929,-1345.2102,13.1759,271.1148,123,108 ;
33 | 489,990.5985,-1306.8129,13.5204,179.0488,24,6 ;
34 | 475,1002.5063,-1306.5654,13.1866,359.6424,37,0 ;
35 | 518,981.5054,-1306.6899,13.1630,181.0135,71,18 ;
36 | 414,979.2278,-1258.1351,16.8071,182.5786,24,1 ;
37 | 506,955.9268,-1184.0712,16.6498,269.9031,30,31 ;
38 | 549,955.8333,-1190.2795,16.6425,270.2728,75,39 ;
39 | 482,956.0022,-1199.3633,17.1270,268.5538,20,20 ;
40 | 468,956.3898,-1193.4253,16.6297,89.6432,46,46 ;
41 | 567,1085.8342,-1199.3883,17.7945,90.5839,93,64 ;
42 | 542,1097.0354,-1218.1705,17.5471,356.6483,45,92 ;
43 | 461,1084.2866,-1232.2461,15.3945,243.6654,61,1 ;
44 | 461,1083.9337,-1235.0449,15.4088,243.8919,75,1 ;
45 | 461,1083.7941,-1238.1573,15.4110,243.1097,79,1 ;
46 | 405,1109.0310,-1225.8809,15.6987,181.5343,75,1 ;
47 | 458,1000.3081,-1084.5488,23.7069,179.6207,30,1 ;
48 | 542,1015.8254,-1083.9113,23.5711,0.6381,119,113 ;
49 | 461,1032.2993,-1082.4255,23.4136,166.6669,35,27 ;
50 | 475,1003.6659,-1054.6088,30.6946,3.0438,122,102 ;
51 | 560,1070.9109,-1102.3247,24.4439,270.7971,41,81 ;
52 | 496,1137.6492,-1025.5586,31.5121,177.9917,67,6 ;
53 | 558,1131.7341,-1010.0580,29.4899,95.0937,40,1 ;
54 | 581,1205.2384,-977.0176,43.0742,179.7537,58,1 ;
55 | 536,1227.2596,-974.1713,43.2139,180.2966,30,96 ;
56 | 414,1110.5709,-1331.4204,13.1385,0.6026,43,1 ;
57 | 581,989.3703,-1589.3812,13.0903,21.5606,66,1 ;
58 | 542,1061.2451,-1665.2649,13.4966,91.9120,32,92 ;
59 | 405,1136.5767,-1695.5199,13.6956,88.9354,75,1 ;
60 | 463,1137.1466,-1700.1902,13.3869,87.9396,132,112 ;
61 | 518,1280.4908,-1816.1259,13.0556,270.4623,133,56 ;
62 | 482,1250.2468,-1835.0884,13.5047,180.4024,85,85 ;
63 | 527,1196.9360,-1829.6980,13.1197,269.7545,90,9 ;
64 | 589,1280.9364,-1833.0607,13.0418,90.8050,46,126 ;
65 | 562,1267.0612,-1795.2074,13.0702,0.6533,102,24 ;
66 | 463,1281.6627,-1805.1254,12.9241,62.4969,53,53 ;
67 | 545,1238.0167,-1835.2385,13.2008,177.5310,40,96 ;
68 | 400,1423.8417,-1845.0616,13.4772,270.4685,109,109 ;
69 | 546,1536.6632,-1846.7765,13.2712,0.8185,3,87 ;
70 | 475,1614.0917,-1893.9027,13.3521,357.9483,102,80 ;
71 | 546,1796.2775,-1933.2837,13.1180,180.4499,113,78 ;
72 | 545,1776.1965,-1917.6884,13.1976,90.7850,39,1 ;
73 | 400,1776.1498,-1907.3949,13.4788,271.3831,101,1 ;
74 | 400,1804.1429,-1909.4020,13.3328,269.6684,10,10 ;
75 | 474,1804.4889,-1919.3353,13.1556,269.8831,110,1 ;
76 | 496,1785.9353,-1933.2903,13.1750,0.8605,52,69 ;
77 | 496,1776.2777,-1894.0770,12.9741,272.6132,15,15 ;
78 | 482,1776.5122,-1899.9752,13.5071,87.3522,10,10 ;
79 | 482,1791.3899,-1933.2008,13.5101,180.1195,118,118 ;
80 | 461,1775.7963,-1912.6582,12.9720,269.4815,61,1 ;
81 | 461,1775.7340,-1914.1243,12.9716,262.3925,75,1 ;
82 | 536,1834.7808,-1871.9734,13.0925,179.2434,30,96 ;
83 | 496,1836.6301,-1853.6381,13.1059,179.9886,20,20 ;
84 | 414,1858.8854,-1875.5944,13.5724,180.1933,95,1 ;
85 | 468,1900.5659,-1849.8379,13.2277,44.6102,94,63 ;
86 | 589,1251.2297,-2042.1305,59.4474,180.0659,40,1 ;
87 | 521,1244.8016,-2023.3499,59.4330,292.8341,92,3 ;
88 | 506,1256.9205,-2009.4756,59.2126,0.8008,7,7 ;
89 | 522,1277.8240,-2011.9354,58.4634,268.7320,7,79 ;
90 | 463,1097.5217,-1763.8896,12.8933,267.4286,36,36 ;
91 | 475,892.6356,-1668.8604,13.3544,179.2466,37,0 ;
92 | 506,874.8234,-1658.4843,13.2514,181.7123,1,15 ;
93 | 521,870.1176,-1676.6573,13.1183,186.2732,115,118 ;
94 | 496,888.5651,-1679.1317,13.2628,357.5185,102,135 ;
95 | 411,1671.5546,-1719.5422,20.2115,269.5804,132,108 ;
96 | 415,1656.9489,-1695.5144,20.2285,358.9435,131,53 ;
97 | 496,1671.9685,-1704.4779,20.2006,270.8929,66,72 ;
98 | 461,1673.9683,-1713.0564,20.0617,67.1318,43,1 ;
99 |
--------------------------------------------------------------------------------
/gamemodes/scriptfiles/vehicles/vehicles/ls_law.txt:
--------------------------------------------------------------------------------
1 | 596,1554.5928,-1615.0944,13.1075,143.0,0,1 ;
2 | 596,1560.2781,-1614.7255,13.1065,143.0,0,1 ;
3 | 596,1565.3577,-1615.1208,13.1006,143.0,0,1 ;
4 | 596,1570.3990,-1615.1421,13.1035,143.0,0,1 ;
5 | 596,1575.5455,-1615.0767,13.1051,143.0,0,1 ;
6 | 427,1600.4679,-1607.5685,13.6005,88.3196,0,1 ;
7 | 427,1599.9907,-1613.6184,13.5959,89.1377,0,1 ;
8 | 427,1600.0579,-1619.9817,13.5981,89.7130,0,1 ;
9 | 427,1599.8956,-1626.2255,13.5964,89.2148,0,1 ;
10 | 596,1602.4196,-1683.8865,5.6119,269.8652,0,1 ;
11 | 596,1591.4985,-1711.0421,5.6128,0.0437,0,1 ;
12 | 596,1602.2015,-1687.9944,5.6107,89.8454,0,1 ;
13 | 596,1602.0392,-1692.0045,5.6110,89.1947,0,1 ;
14 | 596,1595.4047,-1711.5936,5.6116,180.3378,0,1 ;
15 | 523,1582.1798,-1667.0845,5.4650,240.5349,0,0 ;
16 | 523,1582.3419,-1669.2539,5.4650,239.3729,0,0 ;
17 | 523,1582.1704,-1671.2072,5.4657,237.9856,0,0 ;
18 | 523,1582.1514,-1673.4630,5.4652,238.0086,0,0 ;
19 | 574,1526.7522,-1655.7896,5.6158,270.8942,26,26 ;
20 | 574,1526.7056,-1652.4664,5.6158,270.6263,26,26 ;
21 | 574,1526.5553,-1642.8456,5.6158,180.3993,26,26 ;
22 | 574,1530.7841,-1642.8046,5.6158,179.2186,26,26 ;
23 | 416,2033.1270,-1432.2743,17.2845,180.0169,1,3 ;
24 | 416,2016.3477,-1414.9769,17.1412,86.7151,1,3 ;
--------------------------------------------------------------------------------
/gamemodes/scriptfiles/vehicles/vehicles/lv_airport.txt:
--------------------------------------------------------------------------------
1 | 519,1328.6196,1612.2500,11.7437,270.0001,1,1 ; SA Shamal
2 | 593,1352.1102,1779.0000,11.2880,270.0000,2,1 ; SA Dodo
3 | 593,1352.1116,1801.5000,11.2863,269.9999,36,8 ; SA Dodo
4 | 522,1676.4335,1322.1592,10.3320,87.7189,7,79 ; Hidden NRG
5 | 417,1286.8724,1449.6250,10.8722,270.0000,0,0 ; SA Livathan
6 | 553,1571.4385,1487.7513,12.1685,311.1577,71,87 ; Nevada 1
7 | 553,1597.4109,1342.6935,12.1865,344.8449,71,87 ; Nevada 2
8 | 487,1655.0576,1554.5649,10.9879,64.4211,26,3 ; Maverick 1
9 | 487,1397.5690,1770.0475,10.9971,269.3060,26,3 ; Maverick 2
10 | 487,1618.4143,1357.5428,10.9893,169.4555,26,3 ; Maverick 3
11 | 469,1358.1189,1253.5436,10.8285,358.5788,1,3 ; Sparrow 1
12 | 609,1341.5886,1729.4564,10.8864,91.6428,36,36 ; Boxville by a hanger
13 | 519,1303.7971,1360.9348,11.7405,267.7907,1,1 ; Shamal 2
14 | 511,1341.3031,1682.6432,12.1967,268.5870,3,90 ; Beagle
15 | 512,1326.1611,1420.4333,11.1030,178.1441,17,39 ; Cropduster
16 | 513,1280.1281,1411.8032,11.3653,223.4432,48,18 ; Stunt plane
17 | 515,1573.4801,1654.4058,11.8422,91.4976,24,77 ; Roadtrain 1b
18 | 435,1554.5338,1669.4784,11.4542,180.0,1,1 ; Trailer 1 - 180
19 | 435,1581.9742,1664.0665,11.4526,180.0,1,1 ; Trailer 2 - 180
20 | 404,1309.7848,1279.5735,10.5544,359.2681,101,101 ; Perennial
21 | 411,1682.5769,1316.6561,10.5474,358.3994,123,1 ; Infernus in Carpark
22 | 436,1663.4026,1297.1321,10.5877,359.4867,83,1 ; wtf is a previon?
23 | 439,1642.0035,1293.2332,10.7156,268.6615,54,38 ; Carpark Stallion
24 | 462,1713.8118,1319.2559,10.4165,268.4222,2,1 ; faggio
25 | 474,1695.4330,1306.1843,10.5853,179.3891,110,1 ; Harmes (maybe)
26 | 480,1682.4532,1286.9058,10.5945,179.2040,6,6 ; Comet
27 | 420,1723.8730,1501.4979,10.5187,167.0140,6,1 ; Taxi out front
28 | 420,1712.5610,1461.2471,10.5375,162.1933,6,1 ; Taxi out front
29 | 420,1707.1067,1437.8787,10.4501,182.4505,6,1 ; Taxi out front
30 | 438,1717.6479,1479.1417,10.7440,163.7234,6,76 ; Taxi out front
31 | 438,1707.2537,1415.7250,10.5640,189.8016,6,76 ; Taxi out front
32 | 437,1719.1062,1381.2042,10.6256,197.7497,123,20 ; bus out front
33 | 485,1537.6528,1211.1794,10.4701,0.8908,1,79 ; baggage
34 | 592,1340.5055,1495.6396,12.0169,270.7770,1,1 ; Andromeda
35 | 485,1353.3430,1642.0271,10.4825,175.0001,1,76 ; baggage 1
36 | 422,1325.3158,1278.7190,10.8037,180.6936,101,25 ; bobcat
37 | 505,1282.6981,1304.3754,10.9647,82.8840,76,102 ; rancher
38 | 407,1282.0891,1477.3781,11.0577,244.1416,3,1 ; fire 1
39 | 407,1312.9038,1580.9365,11.0562,272.9746,3,1 ; fire 2
--------------------------------------------------------------------------------
/gamemodes/scriptfiles/vehicles/vehicles/lv_law.txt:
--------------------------------------------------------------------------------
1 | 598,2269.0366,2460.2317,8.2674,181.9338,-1,-1 ;
2 | 490,2278.0327,2459.1831,8.9495,1.6668,0,0 ; rancher 2
3 | 490,2255.8301,2443.1006,8.2475,179.7459,-1,-1 ;
4 | 490,2239.7317,2456.6294,1.4036,88.4757,-1,-1 ;
5 | 598,2276.6790,2473.7705,1.0201,184.7489,-1,-1 ;
6 | 598,2315.3213,2464.7903,1.0219,270.0937,-1,-1 ;
7 | 523,2297.4980,2464.5881,1.0,88.5560,-1,-1 ;
8 | 490,2314.2158,2484.8979,3.3994,92.8849,0,0 ;
9 | 490,2240.0923,2436.7124,3.4017,91.8532,0,0 ;
10 | 598,2299.4771,2451.7512,3.0199,270.3331,0,1 ;
11 | 416,1590.5470,1849.9900,10.9690,359.8599,1,3 ; Ambulance
12 | 544,1769.6177,2075.1941,11.0567,179.5683,3,1 ; firetruck
13 | 544,1750.6584,2077.1130,11.0558,180.0440,3,1 ; firetruck LA
14 | 544,1763.4852,2076.7075,11.0525,179.6720,3,1 ; firetruck LA
15 | 544,1757.0782,2075.0398,11.0568,177.5558,3,1 ; firetruck
--------------------------------------------------------------------------------
/gamemodes/scriptfiles/vehicles/vehicles/pilots.txt:
--------------------------------------------------------------------------------
1 | 577,1477.4631,1647.4589,10.7281,180.2741,8,7 ; at400 LV rwy
2 | 577,-1513.0963,-21.4589,14.0641,314.4915,8,7 ; at400 SF rwy
3 | 577,2014.6605,-2493.9668,13.4887,89.6533,8,7 ; at400 LS rwy
--------------------------------------------------------------------------------
/gamemodes/scriptfiles/vehicles/vehicles/red_county.txt:
--------------------------------------------------------------------------------
1 | 466,287.4403,-53.5151,1.3217,180.3743,62,34 ;
2 | 422,109.2890,-150.6062,1.7835,182.5754,89,108 ;
3 | 498,-196.8096,-232.7299,1.4901,90.5921,133,57 ;
4 | 403,-199.9957,-285.4144,2.0351,90.5924,133,57 ;
5 | 403,-200.2189,-275.2891,2.0383,91.6567,133,57 ;
6 | 578,-194.7877,-196.3295,2.0529,257.8566,133,57 ;
7 | 422,-169.0730,-202.1836,1.4064,257.8462,133,57 ;
8 | 402,-39.7196,-377.4630,5.2613,180.2380,29,36 ;
9 | 566,-9.5253,-377.6481,5.2111,178.0852,30,8 ;
10 | 529,-0.4525,-353.8910,5.0621,269.4471,42,42 ;
11 | 603,-62.5941,-324.9349,5.2677,90.3766,70,67 ;
12 | 401,179.2976,-310.8240,1.3519,207.7475,47,47 ;
13 | 445,319.0325,-126.0534,2.0656,90.7404,120,119 ;
14 | 440,329.5297,-52.3254,1.6189,177.8881,32,32 ;
15 | 458,319.1395,-84.5798,2.0518,91.7452,101,1 ;
16 | 467,218.0327,-178.1497,1.3182,270.4043,58,8 ;
17 | 475,218.7911,-173.3128,1.3817,270.2328,123,65 ;
18 | 489,244.8729,-148.5339,1.7217,88.8350,14,123 ;
19 | 492,247.1553,-129.2907,2.0627,90.8534,77,26 ;
20 | 498,176.3295,-7.4976,1.6480,180.2088,105,113 ;
21 | 439,278.4608,-54.8498,1.4740,359.8853,8,17 ;
22 | 475,320.5600,-253.1715,1.3886,176.4384,17,1 ;
23 | 524,312.2956,-251.1326,2.5129,175.4649,61,27 ;
24 | 527,235.0123,-300.2693,1.2937,2.3086,53,1 ;
25 | 536,213.0004,-244.5481,1.3203,272.8867,38,103 ;
26 | 531,1077.2228,-288.7220,73.9531,358.7784,36,2 ;
27 | 422,1112.7650,-306.5776,73.9655,267.5965,101,25 ;
28 | 531,1067.0962,-288.6843,73.9569,2.3921,51,53 ;
29 | 599,622.2627,-610.1340,17.3154,270.2242,0,1 ;
30 | 599,622.2755,-606.0399,17.3060,269.8338,0,1
31 | 585,707.2459,-461.4757,15.9223,269.7682,91,35 ;
32 | 500,667.6416,-461.4851,16.4435,268.6327,40,84 ;
33 | 461,669.1239,-471.0320,15.9138,270.8030,37,1 ;
34 | 542,668.1328,-546.3011,16.0794,269.8267,90,90 ;
35 | 522,753.7540,-586.7284,16.9004,181.3295,36,105 ;
36 | 549,748.6429,-581.7985,16.9131,269.3827,94,94 ;
37 | 429,763.1589,-509.2891,16.8662,180.4318,127,44 ;
38 | 547,786.0645,-498.4352,17.0708,3.0965,123,1 ;
39 | 456,797.4796,-607.9578,16.5112,0.4182,84,63 ;
40 | 554,751.6056,-553.2162,17.3698,180.8741,15,32 ;
41 | 445,1396.5654,395.3847,19.6327,66.5844,47,47 ;
42 | 559,1404.2180,411.9715,19.4141,67.1748,58,8 ;
43 | 580,768.8481,348.3186,19.7428,190.0995,81,81 ;
44 | 473,2103.2500,-98.4897,-0.2214,122.9253,56,53 ;
45 | 473,2108.5276,-106.2102,-0.2394,122.9441,56,15 ;
46 | 448,2323.3232,63.0302,26.0883,265.2746,3,6 ;
47 | 439,2358.1836,-62.4556,27.3646,179.8344,37,78 ;
48 | 436,2443.9980,-47.9166,26.9963,179.6730,87,1 ;
49 | 436,2503.7507,125.9338,26.2435,1.0102,92,1 ;
50 | 419,2493.9170,95.9780,26.2806,179.8299,47,76 ;
51 | 412,2549.9116,81.1802,26.3143,270.4565,10,8 ;
52 | 410,2551.1191,9.4253,26.6691,270.6199,9,1 ;
53 | 508,2502.7742,6.0906,27.5812,2.9588,1,1 ;
54 | 505,2380.9570,37.7925,27.1163,89.9017,120,123 ;
55 | 500,2211.6929,-88.3423,26.9028,88.7287,13,119 ;
56 | 496,2263.8970,-82.7569,26.2452,1.1014,66,72 ;
57 | 492,2257.5105,-83.1763,26.3074,359.2125,30,26 ;
58 | 405,2290.2622,155.5207,26.9788,0.1090,24,1 ;
59 | 532,1996.7520,175.8992,31.3614,79.7076,0,0 ;
60 | 532,1914.0114,192.1063,36.0155,358.2132,0,0 ;
61 | 478,1905.3486,174.1229,37.1748,341.5607,66,1 ;
62 | 549,1240.2759,214.9924,19.2519,243.7370,79,39 ;
63 | 550,1367.7468,365.9338,20.3661,246.2637,15,15 ;
64 | 547,1289.3826,339.9178,19.2903,247.1900,123,1 ;
65 | 536,1231.7341,295.6075,19.2922,336.8393,57,96 ;
66 | 455,-580.8631,-64.8466,65.3632,3.7867,84,31 ;
67 | 468,-543.4543,-180.5744,78.0750,4.1580,53,53 ;
68 | 468,-541.5284,-180.6667,78.0747,0.2240,53,53 ;
69 | 471,-774.8654,-115.3844,64.6716,24.2185,120,112 ;
70 | 471,-771.7146,-113.4644,64.8308,26.8406,120,112 ;
71 | 532,-273.9301,-41.3983,3.4405,339.6638,0,0 ;
72 | 532,-127.1731,55.7261,4.0943,158.3291,0,0 ;
73 | 478,-137.3239,-48.9942,3.1078,342.2244,35,1 ;
74 | 475,1368.2947,476.2750,19.9363,335.9672,37,0 ;
75 | 475,2331.3064,133.1183,26.7203,270.6836,17,1 ;
76 | 482,2308.6682,-74.7184,26.5995,89.9092,48,48 ;
77 | 468,2208.6223,110.5543,27.0101,275.3439,53,53 ;
78 | 471,1923.8339,147.8248,36.7282,93.4718,103,111 ;
79 | 415,1586.3274,38.5556,24.6067,272.3959,25,1 ;
80 | 468,1547.5862,10.6921,23.7739,265.3787,3,3 ;
81 | 402,889.0992,-21.7845,63.1125,152.4678,13,13 ;
82 | 403,1207.5240,189.3297,20.9522,334.8106,37,1 ;
83 | 416,1249.8207,338.2164,19.6291,66.7975,1,3 ;
84 | 482,1335.0803,284.7404,19.6860,243.0011,52,52 ;
85 | 468,1414.2616,248.6772,19.2239,65.7798,6,6 ;
86 | 475,751.2299,277.2577,27.1364,199.6289,56,29 ;
87 | 468,747.8585,346.7843,20.1559,209.1134,6,6 ;
88 | 403,221.6420,30.1998,3.1849,186.4463,28,1 ;
89 | 525,157.2517,-166.2276,1.4527,90.9328,17,20 ;
90 | 532,20.7659,24.6322,4.0942,340.4432,0,0 ;
91 | 532,-6.4192,-11.1534,4.0939,163.1182,0,0 ;
92 | 460,-332.7806,-467.6667,1.6828,228.5235,1,9 ;
93 | 403,-564.8430,-473.1027,26.1267,178.3205,113,1 ;
94 | 415,-535.2667,-488.2196,25.2958,358.2053,40,1 ;
95 | 479,-499.9452,-472.3691,25.3184,178.8490,59,36 ;
96 | 482,-480.4370,-486.2536,25.6331,177.1059,64,64 ;
97 |
--------------------------------------------------------------------------------
/gamemodes/scriptfiles/vehicles/vehicles/sf_airport.txt:
--------------------------------------------------------------------------------
1 | 485,-1644.8495,-593.8191,13.8045,244.2475,1,74 ;
2 | 485,-1433.6989,-639.9345,13.8059,351.8341,1,74 ;
3 | 485,-1354.3955,-426.7434,13.8022,293.6214,1,74 ;
4 | 485,-1284.1956,60.9789,13.8074,96.5168,1,74 ;
5 | 485,-1556.3772,-156.9351,13.8067,135.6197,1,74 ;
6 | 592,-1562.6097,-191.8931,15.3402,135.3354,1,1 ;
7 | 583,-1467.6941,-68.7159,13.6890,135.9720,1,1 ;
8 | 583,-1438.1007,-178.1787,13.6843,333.7912,1,1 ;
9 | 583,-1396.8986,-226.8979,13.6890,329.7987,1,1 ;
10 | 583,-1634.3322,-377.9814,13.6890,335.1347,1,1 ;
11 | 583,-1299.0438,-286.9009,13.6891,341.6255,1,1 ;
12 | 525,-1354.0233,-375.1031,14.0255,263.6050,18,20 ;
13 | 513,-1285.7555,24.0493,14.6993,121.8480,21,36 ;
14 | 513,-1260.6040,7.5347,14.7070,118.6241,21,36 ;
15 | 511,-1704.6077,-239.2016,15.5222,314.2837,4,90 ;
16 | 476,-1367.2609,-485.4558,14.8787,209.5813,7,6 ;
17 | 476,-1440.4191,-526.5578,14.8939,207.2082,1,6 ;
18 | 519,-1371.1775,-232.3967,15.0767,315.6230,1,1 ;
19 | 519,-1341.1079,-254.3787,15.0773,321.6316,1,1 ;
20 | 420,-1472.3452,-272.3332,13.7749,78.9964,6,1 ;
21 | 420,-1459.8147,-275.6010,13.8146,65.6229,6,1 ;
22 | 420,-1439.7112,-284.8562,13.8131,58.6121,6,1 ;
23 | 420,-1421.4268,-298.8921,13.7817,46.1681,6,1 ;
24 | 519,-1331.5316,-618.3227,15.0629,325.7105,1,1 ;
25 | 593,-1384.5905,-625.2684,14.6115,321.7572,58,8 ;
26 | 511,-1449.8151,-617.1895,15.5199,329.7999,12,60 ;
27 | 593,-1325.9851,-276.6170,14.6107,296.5465,60,1 ;
28 | 563,-1598.6353,-615.8722,14.8537,276.2098,1,6 ;
29 | 476,-1426.4314,-518.3584,14.8958,180.5740,119,117 ;
30 | 513,-1281.6588,-627.3807,14.6996,356.9070,21,36 ;
31 | 519,-1299.0974,-353.5505,15.0716,278.4124,1,1 ;
32 | 487,-1182.6599,22.4607,14.3251,45.0604,29,42 ;
33 | 417,-1222.6132,-11.1500,14.2353,42.9828,0,0 ;
34 | 544,-1258.5739,68.2615,14.3863,43.9776,3,1 ;
35 | 544,-1262.4766,64.5995,14.3817,43.9013,3,1 ;
--------------------------------------------------------------------------------
/gamemodes/scriptfiles/vehicles/vehicles/sf_law.txt:
--------------------------------------------------------------------------------
1 | 470,-1493.2729,466.8754,7.1792,359.6406,43,0 ;
2 | 470,-1456.7275,456.4803,7.1827,1.8612,43,0 ;
3 | 470,-1433.3401,455.8417,7.1754,359.2850,43,0 ;
4 | 433,-1424.8402,457.6088,7.6209,359.6164,43,0 ;
5 | 433,-1402.0039,460.9283,7.6209,0.1365,43,0 ;
6 | 470,-1387.7540,457.1161,7.1786,356.7607,43,0 ;
7 | 548,-1269.9818,501.5400,18.8272,88.8878,43,0 ;
8 | 548,-1415.5240,517.8834,19.8976,270.0524,1,1 ;
9 | 497,-1679.7035,706.0008,30.7781,89.8724,0,1 ;
10 | 523,-1576.0360,673.7034,6.7563,174.5967,0,0 ;
11 | 523,-1575.9231,650.4584,6.7582,0.9076,0,0 ;
12 | 597,-1593.6233,651.7213,6.9566,1.3899,0,1 ;
13 | 597,-1622.5198,651.7484,6.9555,359.8126,0,1 ;
14 | 427,-1634.3652,653.2300,7.3195,359.8379,0,1 ;
15 | 597,-1573.9720,726.4003,-5.4722,91.1968,0,1 ;
16 | 523,-1612.2233,674.1516,6.7545,184.0847,0,0 ;
17 | 427,-1600.1411,678.0489,-5.1103,1.1345,0,1 ;
18 | 597,-1596.5836,749.3448,-5.4725,178.5932,0,1 ;
19 | 416,-2643.2285,630.0392,14.6034,87.3837,1,3 ;
20 | 416,-2683.8833,628.2059,14.6035,272.5255,1,3 ;
21 | 416,-2668.5364,610.7019,14.6043,179.8035,1,3 ;
22 | 416,-2639.3809,609.7971,14.6020,180.4547,1,3 ;
23 | 544,-2053.1836,75.5582,28.6258,91.8533,3,1 ;
24 | 544,-2020.6779,75.7322,28.2849,270.8804,3,1 ;
25 | 544,-2020.4115,92.3531,28.1826,271.5041,3,1 ;
26 | 472,-1165.9481,376.5309,0.1491,315.1259,56,53 ;
27 | 472,-1421.6274,285.5732,-0.2879,265.8000,46,26 ;
28 | 472,-1653.0968,254.7862,0.2592,268.0484,112,20 ;
29 | 597,-1606.3083,673.1804,6.9553,179.1846,0,1 ;
30 | 427,-1582.2726,672.2101,7.3207,180.9814,0,1 ;
31 | 470,-1383.2446,457.2296,7.1794,359.1241,43,0 ;
32 | 597,-1610.8358,651.5052,6.9564,359.9975,0,1 ;
33 | 597,-1622.9977,653.4961,-5.4742,89.9343,0,1 ;
34 | 597,-1639.4895,677.9890,-5.4743,269.9376,0,1 ;
35 | 548,-1415.3323,492.7466,19.8676,271.5521,1,1 ;
36 | 548,-1304.2273,507.9386,19.8769,269.1332,1,1 ;
37 | 433,-1362.9229,458.9281,7.6241,357.4277,43,0 ;
38 | 433,-1529.5907,457.3813,7.6238,358.3718,43,0 ;
--------------------------------------------------------------------------------
/gamemodes/scriptfiles/vehicles/vehicles/sf_train.txt:
--------------------------------------------------------------------------------
1 | 538,-1948.4922,121.7808,25.7186,0.0,121,1
2 | 537,-1943.3127,158.0254,27.0006,200.0,0,0
--------------------------------------------------------------------------------
/gamemodes/scriptfiles/vehicles/vehicles/tierra.txt:
--------------------------------------------------------------------------------
1 | 487,-2227.7432,2327.1260,7.7581,178.6620,29,42 ;
2 | 400,-2272.3713,2285.2505,4.9224,270.0000,120,123 ;
3 | 400,-2251.1697,2284.9854,4.9106,91.8943,62,1 ;
4 | 418,-2251.1719,2290.9373,4.9096,270.3710,108,108 ;
5 | 587,-2272.0286,2300.4329,4.5463,89.7395,53,1 ;
6 | 581,-2184.2810,2418.5032,4.6261,225.5440,36,1 ;
7 | 484,-2227.5676,2446.2383,0.2238,229.2436,40,26 ;
8 | 454,-2323.5996,2492.2419,-0.0163,230.2643,26,26 ;
9 | 454,-2238.8279,2533.3970,0.0677,228.0608,26,26 ;
10 | 454,-2235.0234,2394.8408,0.2049,225.3403,26,26 ;
11 | 484,-2222.4343,2399.7363,0.3907,47.6966,50,32 ;
12 | 484,-2211.9019,2412.5371,0.3222,45.0241,66,36 ;
13 | 484,-2035.5737,2337.9326,0.3638,93.8940,66,36 ;
14 | 460,-2044.7676,2348.1140,1.5708,85.2721,46,23 ;
15 | 492,-2351.7927,2438.0439,7.5216,326.6075,81,27 ;
16 | 484,-2319.6973,2297.0566,0.1447,177.2915,66,36 ;
17 | 524,-2380.8870,2370.3657,4.4518,109.2159,83,66 ;
18 | 525,-2451.8999,2302.0273,4.8566,90.9255,1,1 ;
19 | 541,-2621.1914,2250.5889,8.0296,183.8325,123,1 ;
20 | 541,-2616.7476,2250.0974,7.8063,184.5472,22,1 ;
21 | 554,-2609.3669,2251.1685,8.2939,182.2681,12,32 ;
22 | 446,-2597.6831,2231.7883,-0.5205,262.0586,1,22 ;
23 | 581,-2632.2297,2299.0674,8.0274,266.4473,54,1 ;
24 | 587,-2500.2227,2326.0215,4.6304,267.2316,95,1 ;
25 | 409,-2492.2183,2410.7954,16.2328,29.6430,1,1 ;
26 | 581,-2635.7234,2423.7803,13.5265,165.2141,36,1 ;
27 | 419,-2472.6233,2490.2595,17.5856,1.8418,69,76 ;
28 | 419,-2455.7502,2489.7153,16.0495,2.9791,87,76 ;
29 | 400,-2471.6484,2511.5083,17.8420,178.3649,84,110 ;
30 | 421,-2377.9495,2410.4937,8.1698,324.3596,52,66 ;
31 | 493,-2417.5188,2297.3801,-0.1381,265.4497,36,13 ;
32 | 493,-2417.7244,2291.5913,-0.2166,266.5734,36,13 ;
33 | 493,-2418.0994,2286.5984,0.1419,268.6934,36,13 ;
34 | 587,-2426.7017,2346.5630,5.0736,282.6106,40,84 ;
35 | 587,-2446.9214,2224.6204,4.6071,179.3380,118,1 ;
36 | 496,-2440.6040,2224.3320,4.5603,179.5986,0,0 ;
37 | 480,-2470.7988,2224.3967,4.6180,180.6733,53,53 ;
38 | 477,-2482.4893,2224.7783,4.5955,179.0414,75,1 ;
39 | 530,-2509.7058,2369.0825,4.7508,179.0875,110,1 ;
40 | 473,-1374.8508,2116.4690,40.4058,319.3678,56,53 ;
41 | 473,-1366.9723,2106.8796,40.2918,315.0820,56,53 ;
42 | 573,-1804.4702,2045.1581,9.6246,294.1870,91,38 ;
43 | 468,-1824.8999,2035.1219,8.3037,212.8331,46,46 ;
44 | 453,-1854.5022,2098.8430,-0.2039,102.5433,56,56 ;
45 | 453,-1860.6494,2115.2981,-0.3292,107.9941,56,56 ;
46 | 453,-1869.9406,2128.6624,-0.2785,113.4106,56,56 ;
47 | 444,-1871.3125,2166.4583,4.9119,130.7896,32,42 ;
48 | 444,-1877.4138,2173.9583,4.4635,128.7793,32,66 ;
49 | 445,-1940.1118,2393.2588,49.3672,291.4925,39,39 ;
50 | 482,-1934.0543,2377.3718,49.6189,290.8993,34,34 ;
51 | 482,-865.7496,1541.4736,22.7941,89.7060,109,1 ;
52 | 602,-865.9515,1547.8240,23.0657,268.7399,75,77 ;
53 | 602,-866.0584,1563.5151,24.3648,269.9845,32,1 ;
54 | 420,-866.0000,1557.1432,23.8370,269.2511,6,1 ;
55 | 400,-904.0693,1546.9365,26.0011,270.6434,36,1 ;
56 | 400,-880.8666,1518.9015,26.0064,84.4363,113,1 ;
57 | 552,-837.0482,1528.4155,21.4272,356.9085,56,56 ;
58 | 428,-836.9631,1518.5033,20.9587,356.9585,4,75 ;
59 | 522,-855.4826,1529.1183,22.1490,175.2427,7,79 ;
60 | 522,-854.3849,1528.8517,21.8310,177.4948,36,105 ;
61 | 508,-763.8517,1643.9420,27.8381,359.3427,1,1 ;
62 | 508,-759.1082,1643.9677,27.7561,357.9965,1,1 ;
63 | 508,-753.8820,1643.4702,27.6587,357.3247,1,1 ;
64 | 508,-779.0374,1557.9280,27.1835,359.2580,20,117 ;
65 | 495,-771.3682,1431.5581,14.1421,91.6766,116,115 ;
66 | 495,-771.4456,1436.7625,14.1395,89.8264,5,6 ;
67 | 554,-772.0689,1443.1458,13.8807,91.3204,12,32 ;
68 | 554,-771.5674,1486.2036,24.4291,89.6569,45,32 ;
69 | 508,-720.9415,1438.1919,18.8516,358.8137,1,1 ;
70 | 483,-685.9806,1444.2805,17.2557,358.8250,1,5 ;
71 | 452,-859.7170,1383.5663,-0.4432,255.0147,1,35 ;
72 | 525,-967.3431,1322.6412,39.9578,290.9068,52,54 ;
73 | 525,-1202.8787,1677.6721,20.1641,63.4200,52,54 ;
74 | 525,-1492.0199,1877.8156,32.5073,3.4296,52,54 ;
75 | 554,-1485.6687,1877.9529,32.7206,2.7033,53,32 ;
76 | 522,-1460.4990,1871.0664,32.2060,3.0444,36,105 ;
77 | 522,-1459.1002,1871.1023,32.1946,6.0306,51,118 ;
78 | 522,-1457.7523,1871.1093,32.1942,8.4307,3,8 ;
79 | 420,-1450.4545,1870.4369,32.4111,2.9921,6,1 ;
80 | 525,-1766.5353,1882.8726,17.5407,198.3129,1,1 ;
81 | 525,-837.5615,813.0668,18.5289,199.0021,1,1 ;
82 | 421,-680.4999,948.1251,12.0152,36.5625,36,1 ;
83 | 444,-669.6081,945.8578,12.5041,89.2779,32,36 ;
84 | 444,-669.8880,950.3906,12.5041,92.0677,32,53 ;
85 | 444,-669.9730,955.0541,12.5041,91.0209,32,14 ;
86 | 545,-710.5756,939.2571,12.2113,182.5872,53,53 ;
87 | 572,-666.9449,962.4420,11.7128,180.1996,116,1 ;
88 | 473,-792.8611,937.9167,0.1685,121.3300,56,15 ;
89 | 472,-615.6752,1807.6965,0.1010,81.7140,56,53 ;
90 | 473,-527.8143,1634.6472,-0.2518,232.0554,56,15 ;
91 | 468,-1044.5811,1559.1265,32.8485,222.2500,3,3 ;
92 | 462,-1214.5260,1841.3584,41.3185,264.4565,13,13 ;
93 | 482,-1203.9337,1813.2631,41.8329,44.3244,62,62 ;
94 | 568,-1295.9022,2496.5747,86.8474,198.8607,9,39 ;
95 | 568,-1506.3029,1966.6509,48.2421,293.1870,9,39 ;
96 | 510,-767.7841,1103.9338,44.4799,321.7752,39,39 ;
--------------------------------------------------------------------------------
/gamemodes/scriptfiles/vehicles/vehicles/trains.txt:
--------------------------------------------------------------------------------
1 | 538,1462.0745,2630.8787,10.8203,200.0,-1,-1 ; LV passenger
2 | 538,-1942.7950,168.4164,27.0006,200.0,-1,-1 ; SF passenger
3 | 538,1700.7551,-1953.6531,14.8756,200.0,-1,-1 ; LS passenger
--------------------------------------------------------------------------------
/gamemodes/scriptfiles/vehicles/vehicles/trains_platform.txt:
--------------------------------------------------------------------------------
1 | 537,1462.0745,2630.8787,10.8203,200.0,-1,-1 ; LV passenger
2 | 537,-1942.7950,168.4164,27.0006,200.0,-1,-1 ; SF passenger
3 | 537,1700.7551,-1953.6531,14.8756,200.0,-1,-1 ; LS passenger
--------------------------------------------------------------------------------
/gamemodes/scriptfiles/vehicles/vehicles/whetstone.txt:
--------------------------------------------------------------------------------
1 | 402,-2507.2949,-2661.3745,41.6141,47.4363,110,110 ;
2 | 489,-2226.7434,-2328.2502,30.7267,320.7235,112,120 ;
3 | 489,-2222.2510,-2313.6255,30.7043,139.2188,84,110 ;
4 | 492,-2237.1716,-2319.5217,30.1612,320.8835,81,27 ;
5 | 416,-2202.5034,-2315.8738,30.7133,319.2146,1,3 ;
6 | 437,-2183.7781,-2251.1504,30.7739,50.7582,47,74 ;
7 | 439,-2195.2422,-2265.3093,30.5210,141.9245,67,8 ;
8 | 468,-2119.6216,-2309.6587,30.2906,236.4014,46,46 ;
9 | 468,-2090.2646,-2343.2664,30.2931,133.5882,46,46 ;
10 | 478,-2139.3381,-2394.7605,30.5346,321.4478,39,1 ;
11 | 403,-2000.1112,-2415.5122,31.5910,229.2187,42,76 ;
12 | 578,-1969.7488,-2437.8750,31.2884,278.4375,1,1 ;
13 | 483,-2047.1421,-2548.5454,30.6175,143.9577,1,5 ;
14 | 496,-2090.5361,-2547.2097,30.3414,319.1863,22,22 ;
15 | 499,-2147.2827,-2540.9390,30.6123,321.3171,30,44 ;
16 | 507,-2198.5273,-2501.1497,30.4429,142.3857,42,42 ;
17 | 508,-2238.4976,-2476.8638,31.5504,135.3413,1,1 ;
18 | 525,-2201.8979,-2431.7083,30.5065,143.2419,18,20 ;
19 | 542,-2208.8726,-2301.8511,30.3685,141.4184,24,118 ;
20 | 468,-2408.1938,-2180.6550,32.9574,359.2591,46,46 ;
21 | 468,-2408.5000,-2185.9998,32.9470,320.6251,46,46 ;
22 | 468,-2404.6194,-2184.0007,32.9580,180.5767,46,46 ;
23 | 468,-2410.8003,-2193.1538,32.9575,98.7390,46,46 ;
24 | 468,-2383.4412,-2195.6008,32.9551,269.5914,46,46 ;
25 | 421,-2232.4705,-2168.4863,40.0861,269.7545,60,72 ;
26 | 586,-2211.9084,-2152.1482,44.5665,39.1714,32,1 ;
27 | 586,-2341.5479,-1617.2042,483.2097,282.5971,32,1 ;
28 | 483,-2343.2617,-1613.8766,483.6216,105.4733,17,0 ;
29 | 508,-2338.5103,-1593.7384,483.9936,19.6733,1,1 ;
30 | 542,-1903.3435,-1648.1373,21.4948,0.2053,119,113 ;
31 | 543,-1884.3240,-1746.2726,21.5641,116.1925,11,11 ;
32 | 568,-1425.6388,-1964.6725,16.7105,350.8758,21,1 ;
33 | 568,-1422.0557,-1774.0085,46.2861,324.6743,21,1 ;
34 | 424,-1642.4336,-2250.6626,31.2032,90.7391,3,2 ;
35 | 471,-1623.8788,-1935.3231,98.1842,9.9608,120,113 ;
36 | 471,-1423.5978,-1480.9163,101.1533,181.2331,120,113 ;
37 | 478,-1446.1260,-1494.6138,101.7287,5.6246,20,1 ;
38 | 468,-1460.7500,-1566.6244,101.4172,1.4063,3,3 ;
39 | 455,-1921.1332,-1376.5702,40.8204,60.9558,43,31 ;
40 | 568,-2675.9160,-2647.4185,8.6870,28.6794,21,1 ;
41 | 527,-2504.5608,-2310.4421,14.8242,97.2619,81,1 ;
42 | 543,-2522.9070,-2151.9607,30.3162,29.5732,67,8 ;
43 | 568,-2675.9160,-2647.4185,8.6870,28.6794,21,1 ;
44 | 487,-2249.4399,-1714.5770,480.3400,224.1963,26,3 ;
45 | 500,-2390.3206,-1866.1573,405.1097,113.9224,25,119 ;
46 | 533,-2096.2732,-1879.9227,110.1080,326.6144,79,1 ;
47 | 540,-2515.5264,-1995.7284,166.3035,28.0149,7,7 ;
48 | 554,-2669.3086,-1735.2327,252.3595,12.2743,53,32 ;
49 | 559,-2590.5930,-1618.1426,343.4677,186.3544,2,1 ;
50 | 579,-2106.7739,-1752.2147,195.3652,327.5763,53,53 ;
51 | 595,-2819.6802,-2525.9888,0.4586,189.6302,112,20 ;
52 | 453,-2741.3564,-2707.7283,0.1389,208.1954,56,56 ;
53 | 484,-2548.1646,-2873.2219,0.3669,268.3289,40,26 ;
54 | 484,-2476.8723,-2872.8672,0.4027,271.5837,40,26 ;
55 | 473,-2251.1206,-2847.8003,-0.3512,165.8474,56,53 ;
56 | 424,-2242.9829,-2821.8870,2.7472,94.0740,15,30 ;
57 | 506,-1604.3470,-2709.3530,48.2387,54.1573,3,3 ;
58 | 536,-1561.9785,-2720.5659,48.2750,234.6728,37,1 ;
59 | 545,-1569.3097,-2733.4148,48.3547,326.8112,28,96 ;
60 | 582,-1557.6207,-2741.3735,48.5990,146.9182,41,20 ;
61 | 430,-1190.5161,-2686.8108,-0.2699,13.1617,46,26 ;
62 | 478,-1220.1482,-2632.0308,9.9623,84.2916,59,1 ;
63 | 473,-1249.5088,-2431.4194,-0.1994,349.6535,56,15 ;
64 | 473,-1183.5031,-2138.8706,-0.2420,8.5587,56,15 ;
65 | 446,-1429.5232,-2080.6206,-0.3127,148.7616,1,35 ;
66 | 446,-1544.0499,-2232.3506,-0.5151,167.9522,1,35 ;
67 | 453,-1639.3208,-1706.3165,-0.3042,73.0880,56,56 ;
68 | 460,-2038.7720,-1314.9452,1.7166,80.6954,17,23 ;
69 | 493,-2417.8992,-944.8141,-0.1597,61.3139,36,13 ;
70 | 542,-2217.0332,-2407.2427,30.8341,232.1176,24,118 ;
71 | 468,-2508.1077,-1892.6254,297.1185,25.0147,46,46 ;
72 |
--------------------------------------------------------------------------------
/pysamp/actor.py:
--------------------------------------------------------------------------------
1 | from pysamp import (
2 | apply_actor_animation,
3 | clear_actor_animations,
4 | create_actor,
5 | destroy_actor,
6 | get_actor_facing_angle,
7 | get_actor_health,
8 | get_actor_pos,
9 | get_actor_virtual_world,
10 | is_actor_invulnerable,
11 | is_actor_streamed_in,
12 | is_valid_actor,
13 | set_actor_facing_angle,
14 | set_actor_health,
15 | set_actor_invulnerable,
16 | set_actor_pos,
17 | set_actor_virtual_world,
18 | )
19 | from typing import Optional, Tuple
20 | from pysamp.event import event
21 |
22 |
23 | class Actor:
24 | """A class that represents actors, also known as NPC's.
25 |
26 | These 'actors' are like NPCs, however they have limited functionality.
27 | They do not take up server player slots.
28 |
29 | Read more about actors here:
30 | https://open.mp/docs/scripting/functions/CreateActor
31 | """
32 |
33 | def __init__(self, id: int) -> None:
34 | self.id: int = id
35 |
36 | @classmethod
37 | def create(
38 | cls,
39 | modelid: int,
40 | x: float,
41 | y: float,
42 | z: float,
43 | rotation: float
44 | ) -> Optional["Actor"]:
45 | """Create a new actor.
46 |
47 | :param int modelid: The model of the actor.
48 | :param float x: The model of the actor.
49 | :param float y: The model of the actor.
50 | :param float z: The model of the actor.
51 | :param float rotation: The model of the actor.
52 | :return: An :class:`Actor` object. Will return ``None`` if the actor
53 | limit is reached of 1000 actors.
54 | """
55 | return cls(
56 | create_actor(modelid, x, y, z, rotation)
57 | )
58 |
59 | def get_id(self) -> int:
60 | return self.id
61 |
62 | def destroy(self) -> bool:
63 | """Remove a created actor from the world."""
64 | return destroy_actor(self.id)
65 |
66 | def is_streamed_in(self, for_player: "Player") -> bool:
67 | """Check if a player has streamed in the actor."""
68 | return is_actor_streamed_in(self.id, for_player.id)
69 |
70 | def get_virtual_world(self) -> int:
71 | """Get which virtual world ID the actor is in."""
72 | return get_actor_virtual_world(self.id)
73 |
74 | def set_virtual_world(self, virtual_world: int) -> bool:
75 | """Set the actor to a specific virtual world id."""
76 | return set_actor_virtual_world(self.id, virtual_world)
77 |
78 | def apply_animation(
79 | self,
80 | animation_library: str,
81 | animation_name: str,
82 | delta: float,
83 | loop: bool,
84 | lock_x: bool,
85 | lock_y: bool,
86 | freeze: bool,
87 | time: int,
88 | ) -> bool:
89 | """Set an animation on the actor."""
90 | return apply_actor_animation(
91 | self.id,
92 | animation_library,
93 | animation_name,
94 | delta,
95 | loop,
96 | lock_x,
97 | lock_y,
98 | freeze,
99 | time,
100 | )
101 |
102 | def clear_animations(self) -> bool:
103 | """Clear the animations that are in use by the actor, if any."""
104 | return clear_actor_animations(self.id)
105 |
106 | def get_position(self) -> Tuple[float, float, float]:
107 | """Gets the current world coordinates of where the actor is located."""
108 | return get_actor_pos(self.id)
109 |
110 | def set_position(self, x: float, y: float, z: float) -> bool:
111 | """Set a new position for the actor."""
112 | return set_actor_pos(self.id, x, y, z)
113 |
114 | def get_facing_angle(self) -> float:
115 | """Get the actor's facing angle."""
116 | return get_actor_facing_angle(self.id)
117 |
118 | def set_facing_angle(self, angle: float) -> bool:
119 | """Set the actor's facing angle."""
120 | return set_actor_facing_angle(self.id, angle)
121 |
122 | def get_health(self) -> float:
123 | """Get how much health the actor has."""
124 | return get_actor_health(self.id)
125 |
126 | def set_health(self, health: float) -> bool:
127 | """Set the health of the actor."""
128 | return set_actor_health(self.id, health)
129 |
130 | def is_invulnerable(self) -> bool:
131 | """See if the actor is invulnerable to damage."""
132 | return is_actor_invulnerable(self.id)
133 |
134 | def set_invulnerable(self, invulnerable: bool = True) -> bool:
135 | """Set the actor to be invlunerable to damage."""
136 | return set_actor_invulnerable(self.id, invulnerable)
137 |
138 | def is_valid(self) -> bool:
139 | """Check if the actor is valid."""
140 | return is_valid_actor(self.id)
141 |
142 | @event("OnActorStreamIn")
143 | def on_stream_in(cls, actorid: int, forplayerid: int):
144 | return (cls(actorid), Player(forplayerid))
145 |
146 | @event("OnActorStreamOut")
147 | def on_stream_out(cls, actorid: int, forplayerid: int):
148 | return (cls(actorid), Player(forplayerid))
149 |
150 | from pysamp.player import Player # noqa
--------------------------------------------------------------------------------
/pysamp/callbacks/__init__.py:
--------------------------------------------------------------------------------
1 | from collections import defaultdict
2 | from dataclasses import dataclass, field
3 | from types import ModuleType
4 | from typing import Any, Callable, Optional
5 |
6 | from .names import names as builtin_callback_names
7 |
8 |
9 | @dataclass
10 | class HookedCallback:
11 | """A hooked callback. Assigned to python module on pysamp import.
12 |
13 | Calls main callback in "python" module, then registered module callbacks.
14 | """
15 | name: str
16 | original: Optional[Callable[..., None]]
17 |
18 | def __call__(self, *args: tuple[Any], **kwargs: dict[str, Any]) -> None:
19 | """Call the real callback first, then all registered modules'."""
20 | if self.original:
21 | ret = self.original(*args, **kwargs)
22 | if ret is not None:
23 | return ret
24 |
25 | return registry.dispatch(self.name, *args, **kwargs)
26 |
27 |
28 | @dataclass
29 | class RegisteredCallback:
30 | """A registered callback. Wraps user-provided callables in the registry.
31 |
32 | Used to track the actual (SAMP) callback name a callable is registered to.
33 | """
34 | name: str
35 | callback: Callable[..., Optional[bool]]
36 |
37 | def __call__(
38 | self,
39 | *args: tuple[Any],
40 | **kwargs: dict[str, Any]
41 | ) -> Optional[bool]:
42 | return self.callback(*args, **kwargs)
43 |
44 |
45 | @dataclass
46 | class CallbackRegistry:
47 | """A registry for module callbacks. Gets populated on pysamp import."""
48 | _by_group: dict[str, list[RegisteredCallback]] = field(
49 | default_factory=lambda: defaultdict(list)
50 | )
51 | _by_callback_name: dict[str, list[RegisteredCallback]] = field(
52 | default_factory=lambda: defaultdict(list)
53 | )
54 |
55 | def _register_module(self) -> None:
56 | """Register all callbacks in a module, called on import."""
57 | module = _path_hook._module_being_imported
58 |
59 | for name in builtin_callback_names:
60 | callback = getattr(module, name, None)
61 |
62 | if not callback:
63 | continue
64 |
65 | self.register_callback(name, callback)
66 |
67 | def register_callback(
68 | self,
69 | name: str,
70 | callback: Callable[..., None],
71 | group: Optional[Any] = None,
72 | ) -> None:
73 | """Register callback, called by register_module for each callback.
74 |
75 | group is used to group callbacks for later unregistration. If not
76 | specified, it will default to the name of the module currently being
77 | imported, or raise a ValueError if no import is taking place.
78 | """
79 | import python
80 | original = getattr(python, name, None)
81 |
82 | if not isinstance(original, HookedCallback):
83 | hook_callback(python, name)
84 |
85 | if not group:
86 | module = _path_hook._module_being_imported
87 |
88 | if not module:
89 | raise ValueError(
90 | f'No module is being imported and group is {group!r}.'
91 | )
92 |
93 | group = module.__name__
94 |
95 | registered_callback = RegisteredCallback(name, callback)
96 | self._by_callback_name[name].append(registered_callback)
97 | self._by_group[group].append(registered_callback)
98 |
99 | def unregister(self, group: Any) -> None:
100 | """Unregisters all callbacks from given group.
101 |
102 | Raises KeyError if group doesn't exist.
103 | """
104 | callbacks = self._by_group.get(group)
105 |
106 | if not callbacks:
107 | raise KeyError(f'Group {group!r} does not exist.')
108 |
109 | by_name = self._by_callback_name
110 |
111 | for callback in callbacks:
112 | name = callback.name
113 | by_name[name].remove(callback)
114 |
115 | def dispatch(
116 | self,
117 | callback_name: str,
118 | *args: tuple[Any],
119 | **kwargs: dict[str, Any]
120 | ) -> None:
121 | """Dispatch an event to all registered module callbacks."""
122 | for callback in self._by_callback_name[callback_name]:
123 | ret = callback(*args, **kwargs)
124 | if ret is not None:
125 | return ret
126 |
127 |
128 | def hook_callback(module: ModuleType, name: str) -> None:
129 | """Hooks a single callback from given module.
130 |
131 | Makes top level callbacks in the module use callbacks registry.
132 | """
133 | original = getattr(module, name, None)
134 |
135 | if isinstance(original, HookedCallback):
136 | return
137 |
138 | setattr(module, name, HookedCallback(name, original))
139 |
140 |
141 | def hook() -> None:
142 | """Hooks all callbacks from user's "python" module.
143 |
144 | Hooks are later used to call registered callbacks inside submodules.
145 | """
146 | import python
147 |
148 | for name in builtin_callback_names:
149 | hook_callback(python, name)
150 |
151 |
152 | registry = CallbackRegistry()
153 |
154 | from . import _path_hook # noqa
155 |
--------------------------------------------------------------------------------
/pysamp/callbacks/_path_hook.py:
--------------------------------------------------------------------------------
1 | import os
2 | import sys
3 | import warnings
4 | from importlib.machinery import SOURCE_SUFFIXES, FileFinder, SourceFileLoader
5 | from types import ModuleType
6 |
7 | from . import registry
8 |
9 |
10 | _module_being_imported = None
11 |
12 |
13 | class PySAMPImportWarning(RuntimeWarning):
14 | """Gets issued if it seems like import order is incorrect."""
15 |
16 |
17 | class PySAMPLoader(SourceFileLoader):
18 | """Custom loader that registers module callbacks on import."""
19 | def exec_module(self, module: ModuleType) -> None:
20 | global _module_being_imported
21 | _module_being_imported = module
22 | super().exec_module(module)
23 | registry._register_module()
24 | _module_being_imported = None
25 |
26 |
27 | class PySAMPFinder(FileFinder):
28 | """Custom finder that ignores modules outside `python` package."""
29 | @classmethod
30 | def path_hook(cls, *loader_details):
31 | closure = super().path_hook(*loader_details)
32 |
33 | def path_hook_for_PySAMPFinder(path):
34 | """Path hook for pysamp.callbacks._path_hook.PySAMPFinder."""
35 | if not any(
36 | path == os.path.join(sys_path, 'python')
37 | for sys_path in sys.path
38 | ):
39 | raise ImportError(
40 | 'Only pysamp submodules are supported.',
41 | path=path
42 | )
43 | return closure(path)
44 |
45 | return path_hook_for_PySAMPFinder
46 |
47 |
48 | for module_name in sys.modules:
49 | if module_name.startswith('python.'):
50 | warnings.warn(
51 | f'Module {module_name} was imported before pysamp, '
52 | 'this is probably not what you want.',
53 | category=PySAMPImportWarning,
54 | )
55 |
56 | sys.path_hooks.insert(
57 | 0,
58 | # See typeshed issues #7085 and #7086
59 | PySAMPFinder.path_hook((PySAMPLoader, SOURCE_SUFFIXES)) # type: ignore
60 | )
61 |
--------------------------------------------------------------------------------
/pysamp/callbacks/names.py:
--------------------------------------------------------------------------------
1 | names = set((
2 | 'OnGameModeInit',
3 | 'OnGameModeExit',
4 | 'OnActorStreamIn',
5 | 'OnActorStreamOut',
6 | 'OnClientCheckResponse',
7 | 'OnDialogResponse',
8 | 'OnEnterExitModShop',
9 | 'OnIncomingConnection',
10 | 'OnObjectMoved',
11 | 'OnPlayerClickMap',
12 | 'OnPlayerClickPlayer',
13 | 'OnPlayerClickPlayerTextDraw',
14 | 'OnPlayerClickTextDraw',
15 | 'OnPlayerCommandText',
16 | 'OnPlayerConnect',
17 | 'OnPlayerDeath',
18 | 'OnPlayerDisconnect',
19 | 'OnPlayerEditAttachedObject',
20 | 'OnPlayerEditObject',
21 | 'OnPlayerEnterCheckpoint',
22 | 'OnPlayerEnterRaceCheckpoint',
23 | 'OnPlayerEnterVehicle',
24 | 'OnPlayerExitVehicle',
25 | 'OnPlayerExitedMenu',
26 | 'OnPlayerGiveDamage',
27 | 'OnPlayerGiveDamageActor',
28 | 'OnPlayerInteriorChange',
29 | 'OnPlayerKeyStateChange',
30 | 'OnPlayerLeaveCheckpoint',
31 | 'OnPlayerLeaveRaceCheckpoint',
32 | 'OnPlayerObjectMoved',
33 | 'OnPlayerPickUpPickup',
34 | 'OnPlayerRequestClass',
35 | 'OnPlayerRequestSpawn',
36 | 'OnPlayerSelectObject',
37 | 'OnPlayerSelectedMenuRow',
38 | 'OnPlayerSpawn',
39 | 'OnPlayerStateChange',
40 | 'OnPlayerStreamIn',
41 | 'OnPlayerStreamOut',
42 | 'OnPlayerTakeDamage',
43 | 'OnPlayerText',
44 | 'OnPlayerUpdate',
45 | 'OnPlayerWeaponShot',
46 | 'OnRconCommand',
47 | 'OnRconLoginAttempt',
48 | 'OnTrailerUpdate',
49 | 'OnUnoccupiedVehicleUpdate',
50 | 'OnVehicleDamageStatusUpdate',
51 | 'OnVehicleDeath',
52 | 'OnVehicleMod',
53 | 'OnVehiclePaintjob',
54 | 'OnVehicleRespray',
55 | 'OnVehicleSirenStateChange',
56 | 'OnVehicleSpawn',
57 | 'OnVehicleStreamIn',
58 | 'OnVehicleStreamOut',
59 | ))
60 |
--------------------------------------------------------------------------------
/pysamp/dialog.py:
--------------------------------------------------------------------------------
1 | import string
2 | from typing import Callable, Dict, Optional
3 |
4 | from pysamp import show_player_dialog
5 | from pysamp.event import registry
6 |
7 |
8 | class ColorCompatibleFormatter(string.Formatter):
9 | def get_value(self, key, args, kwargs):
10 | # Allow color escapes like {FF0000} or {808080}
11 | if key not in kwargs:
12 | return '{%s}' % key
13 | return kwargs[key]
14 |
15 |
16 | dialog_formatter = ColorCompatibleFormatter()
17 |
18 |
19 | class Dialog:
20 | """Class to create and show dialogs.
21 |
22 | A dialog is a menu that the player can interact with.
23 | To create a new dialog, use :meth:`create`.
24 |
25 | The player will see the dialog when you do :meth:`show`. The Dialog class
26 | will behind the scenes keep track of if a dialog is shown to a player, and
27 | will that way automatically prevent traditional spoofing of dialogs.
28 | """
29 |
30 | _ID: int = 32767 # just a random dialog ID that will be used on SA-MP
31 | _shown_for: Dict[int, "Dialog"] = {}
32 |
33 | def __init__(
34 | self,
35 | type: int,
36 | title: str,
37 | content: str,
38 | button_1: str,
39 | button_2: str,
40 | on_response: Optional[Callable] = None,
41 | ) -> None:
42 | self.type = type
43 | self.title = title
44 | self.content = content
45 | self.button_1 = button_1
46 | self.button_2 = button_2
47 | self.on_response = on_response
48 |
49 | @classmethod
50 | def create(
51 | cls,
52 | type: int,
53 | title: str,
54 | content: str,
55 | button_1: str,
56 | button_2: str,
57 | on_response: Optional[Callable] = None,
58 | ) -> "Dialog":
59 | """Create/prepare a dialog for use later.
60 |
61 | Use :meth:`show` to show the dialog to a player after creating it.
62 |
63 | :param type: The type of dialog you want to make. There are 6 different
64 | types: ``DIALOG_STYLE_MSGBOX``, ``DIALOG_STYLE_INPUT``,
65 | ``DIALOG_STYLE_LIST``, ``DIALOG_STYLE_PASSWORD``,
66 | ``DIALOG_STYLE_TABLIST``and ``DIALOG_STYLE_TABLIST_HEADERS``.
67 | :param title: The dialog title show at top.
68 | :param content: The content of the dialog.
69 | :param button_1: The positive dialog response button. Can't be longer
70 | than 8 characters, else it looks weird.
71 | :param button_2: The second button, negative response.
72 | If it is left empty, it will be hidden from the dialog.
73 | :param Callable on_response: The function to call on response.
74 | :return: This classmethod creates a new instance of :class:`Dialog`.
75 | """
76 | return cls(type, title, content, button_1, button_2, on_response)
77 |
78 | def show(
79 | self,
80 | for_player: "Player",
81 | title_format=None,
82 | content_format=None,
83 | ) -> None:
84 | """Show the dialog created with :meth:`create` to a specific player.
85 |
86 | :param Player for_player: The player you want to show
87 | the dialog for.
88 | :return: No return value.
89 |
90 | .. note:: You can only show one dialog to a player at a time. Showing
91 | a new dialog will close the old one, if shown.
92 | """
93 | title, content = self.title, self.content
94 |
95 | if title_format:
96 | title = dialog_formatter.vformat(title, (), title_format)
97 |
98 | if content_format:
99 | content = dialog_formatter.vformat(content, (), content_format)
100 |
101 | show_player_dialog(
102 | for_player.id,
103 | Dialog._ID, # we only occupy one ID on SA-MP side.
104 | self.type,
105 | title,
106 | content,
107 | self.button_1,
108 | self.button_2,
109 | )
110 | Dialog._shown_for[for_player.id] = self
111 |
112 | @staticmethod
113 | def hide(for_player: "Player") -> None:
114 | """Shows a dialog with ID -1 to hide open dialog.
115 |
116 | :param Player for_player: The player you'd like to hide open
117 | dialogs for.
118 | :return: No return value.
119 | """
120 | show_player_dialog(for_player.id, -1, 0, "", "", "", "")
121 | Dialog._shown_for.pop(for_player.id, None)
122 |
123 | @classmethod
124 | def handle(
125 | cls,
126 | player_id: int,
127 | dialog_id: int,
128 | response: int,
129 | list_item: int,
130 | input_text: str,
131 | ):
132 | if dialog_id != Dialog._ID:
133 | # This dialog is either invalid or handled in pawn.
134 | return
135 |
136 | instance = Dialog._shown_for.get(player_id)
137 |
138 | if not instance or not instance.on_response:
139 | return
140 |
141 | return instance.on_response(
142 | Player(player_id), response, list_item, input_text
143 | )
144 |
145 |
146 | registry.register_callback(
147 | 'OnDialogResponse',
148 | Dialog.handle,
149 | 'pysamp.dialogs',
150 | )
151 |
152 | from pysamp.player import Player # noqa
153 |
--------------------------------------------------------------------------------
/pysamp/docs/Makefile:
--------------------------------------------------------------------------------
1 | # Minimal makefile for Sphinx documentation
2 | #
3 |
4 | # You can set these variables from the command line, and also
5 | # from the environment for the first two.
6 | SPHINXOPTS ?=
7 | SPHINXBUILD ?= sphinx-build
8 | SOURCEDIR = .
9 | BUILDDIR = _build
10 |
11 | # Put it first so that "make" without argument is like "make help".
12 | help:
13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14 |
15 | .PHONY: help Makefile
16 |
17 | # Catch-all target: route all unknown targets to Sphinx using the new
18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19 | %: Makefile
20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
21 |
--------------------------------------------------------------------------------
/pysamp/docs/actor.rst:
--------------------------------------------------------------------------------
1 | Actor
2 | =============
3 |
4 | .. automodule:: pysamp.actor
5 | :members:
6 | :undoc-members:
7 | :show-inheritance:
8 |
--------------------------------------------------------------------------------
/pysamp/docs/conf.py:
--------------------------------------------------------------------------------
1 | # Configuration file for the Sphinx documentation builder.
2 | #
3 | # This file only contains a selection of the most common options. For a full
4 | # list see the documentation:
5 | # https://www.sphinx-doc.org/en/master/usage/configuration.html
6 |
7 | # -- Path setup --------------------------------------------------------------
8 |
9 | # If extensions (or modules to document with autodoc) are in another directory,
10 | # add these directories to sys.path here. If the directory is relative to the
11 | # documentation root, use os.path.abspath to make it absolute, like shown here.
12 | #
13 | import os
14 | import sys
15 | sys.path.insert(0, os.path.abspath('../'))
16 | sys.path.insert(0, os.path.abspath('../../'))
17 |
18 |
19 | # -- Project information -----------------------------------------------------
20 |
21 | project = 'PySAMP'
22 | copyright = '2022, PySAMP Authors'
23 | author = 'PySAMP Authors'
24 |
25 | # The full version, including alpha/beta/rc tags
26 | release = '2.1.0'
27 |
28 |
29 | # -- General configuration ---------------------------------------------------
30 |
31 | # Add any Sphinx extension module names here, as strings. They can be
32 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
33 | # ones.
34 | extensions = [
35 | 'sphinx.ext.autodoc',
36 | 'sphinx.ext.intersphinx',
37 | ]
38 |
39 | # Add any paths that contain templates here, relative to this directory.
40 | templates_path = ['_templates']
41 |
42 | # List of patterns, relative to source directory, that match files and
43 | # directories to ignore when looking for source files.
44 | # This pattern also affects html_static_path and html_extra_path.
45 | exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
46 |
47 |
48 | # -- Options for HTML output -------------------------------------------------
49 |
50 | # The theme to use for HTML and HTML Help pages. See the documentation for
51 | # a list of builtin themes.
52 | #
53 | html_theme = 'sphinx_rtd_theme'
54 |
55 |
56 | # Add any paths that contain custom static files (such as style sheets) here,
57 | # relative to this directory. They are copied after the builtin static files,
58 | # so a file named "default.css" will overwrite the builtin "default.css".
59 | html_static_path = ['_static']
60 |
61 | # Since contents.rst is not the main file, we override it to index.
62 | master_doc = 'index'
63 |
64 | # Sphinx will try to import python, but it will not exist. We need to mock it
65 | autodoc_mock_imports = ['python']
66 |
--------------------------------------------------------------------------------
/pysamp/docs/dialog.rst:
--------------------------------------------------------------------------------
1 | Dialog
2 | =============
3 |
4 | .. automodule:: pysamp.dialog
5 | :members:
6 | :undoc-members:
7 | :show-inheritance:
8 |
--------------------------------------------------------------------------------
/pysamp/docs/index.rst:
--------------------------------------------------------------------------------
1 | .. PySAMP documentation master file, created by
2 | sphinx-quickstart on Sat Jan 22 17:45:56 2022.
3 | You can adapt this file completely to your liking, but it should at least
4 | contain the root `toctree` directive.
5 |
6 | Welcome to PySAMP's documentation!
7 | ==================================
8 |
9 | .. toctree::
10 | :maxdepth: 2
11 | :caption: Contents:
12 |
13 | modules
14 |
15 |
16 |
17 | Indices and tables
18 | ==================
19 |
20 | * :ref:`genindex`
21 | * :ref:`modindex`
22 | * :ref:`search`
23 |
--------------------------------------------------------------------------------
/pysamp/docs/menu.rst:
--------------------------------------------------------------------------------
1 | Menu
2 | =============
3 |
4 | .. automodule:: pysamp.menu
5 | :members:
6 | :undoc-members:
7 | :show-inheritance:
8 |
--------------------------------------------------------------------------------
/pysamp/docs/modules.rst:
--------------------------------------------------------------------------------
1 | pysamp
2 | ============
3 |
4 | .. toctree::
5 | :maxdepth: 4
6 |
7 | actor
8 | dialog
9 | menu
10 | object
11 | pickup
12 | player
13 | playerobject
14 | playertextdraw
15 | textdraw
16 | textlabel
17 | vehicle
18 |
--------------------------------------------------------------------------------
/pysamp/docs/object.rst:
--------------------------------------------------------------------------------
1 | Object
2 | =============
3 |
4 | .. automodule:: pysamp.object
5 | :members:
6 | :undoc-members:
7 | :show-inheritance:
8 |
--------------------------------------------------------------------------------
/pysamp/docs/pickup.rst:
--------------------------------------------------------------------------------
1 | Pickup
2 | =============
3 |
4 | .. automodule:: pysamp.pickup
5 | :members:
6 | :undoc-members:
7 | :show-inheritance:
8 |
--------------------------------------------------------------------------------
/pysamp/docs/player.rst:
--------------------------------------------------------------------------------
1 | Player
2 | =============
3 |
4 | .. automodule:: pysamp.player
5 | :members:
6 | :undoc-members:
7 | :show-inheritance:
8 |
--------------------------------------------------------------------------------
/pysamp/docs/playerobject.rst:
--------------------------------------------------------------------------------
1 | Player Object
2 | ==============
3 |
4 | .. automodule:: pysamp.playerobject
5 | :members:
6 | :undoc-members:
7 | :show-inheritance:
8 |
--------------------------------------------------------------------------------
/pysamp/docs/playertextdraw.rst:
--------------------------------------------------------------------------------
1 | Player Textdraw
2 | ================
3 |
4 | .. automodule:: pysamp.playertextdraw
5 | :members:
6 | :undoc-members:
7 | :show-inheritance:
8 |
--------------------------------------------------------------------------------
/pysamp/docs/textdraw.rst:
--------------------------------------------------------------------------------
1 | Textdraw
2 | =============
3 |
4 | .. automodule:: pysamp.textdraw
5 | :members:
6 | :undoc-members:
7 | :show-inheritance:
8 |
--------------------------------------------------------------------------------
/pysamp/docs/textlabel.rst:
--------------------------------------------------------------------------------
1 | Textlabel
2 | =============
3 |
4 | .. automodule:: pysamp.textlabel
5 | :members:
6 | :undoc-members:
7 | :show-inheritance:
8 |
--------------------------------------------------------------------------------
/pysamp/docs/vehicle.rst:
--------------------------------------------------------------------------------
1 | Vehicle
2 | =============
3 |
4 | .. automodule:: pysamp.vehicle
5 | :members:
6 | :undoc-members:
7 | :show-inheritance:
8 |
--------------------------------------------------------------------------------
/pysamp/event.py:
--------------------------------------------------------------------------------
1 | import functools
2 | import io
3 | import traceback
4 | import warnings
5 |
6 | from .callbacks import registry
7 |
8 |
9 | def event(callback_name):
10 | def named_event(args_converter):
11 | @functools.wraps(args_converter)
12 | def register(cls, handler):
13 | @functools.wraps(handler)
14 | def wrapper(*args):
15 | return handler(*args_converter(cls, *args))
16 |
17 | if handler.__name__ == callback_name:
18 | message = io.StringIO()
19 | traceback.print_stack(file=message, limit=2)
20 | location = message.getvalue().rsplit('\n', 4)[0].lstrip()
21 | warnings.warn(
22 | f'Handler {handler} has the same name as callback '
23 | f'"{callback_name}", this is probably not what you want.\n'
24 | f'{location}',
25 | stacklevel=2,
26 | )
27 |
28 | registry.register_callback(
29 | callback_name,
30 | wrapper,
31 | args_converter.__name__,
32 | )
33 | return handler
34 |
35 | return classmethod(register)
36 |
37 | return named_event
38 |
--------------------------------------------------------------------------------
/pysamp/gangzone.py:
--------------------------------------------------------------------------------
1 | from pysamp import (
2 | gang_zone_create,
3 | gang_zone_destroy,
4 | gang_zone_flash_for_all,
5 | gang_zone_flash_for_player,
6 | gang_zone_hide_for_all,
7 | gang_zone_hide_for_player,
8 | gang_zone_show_for_all,
9 | gang_zone_show_for_player,
10 | gang_zone_stop_flash_for_all,
11 | gang_zone_stop_flash_for_player,
12 | )
13 |
14 |
15 | class Gangzone:
16 | """Create and manage Gangzones on the server.
17 |
18 | Gangzones are created in 2D space, and covers a rectangular area.
19 | Even if a gangzone has been created, it is not shown
20 | by default. You need to show it for players.
21 | Be aware that you can only have up to 1024 gangzones.
22 | ```
23 | MinY
24 | v
25 | MinX > *-------------
26 | | |
27 | | Gangzone |
28 | | center |
29 | | |
30 | -------------* < MaxX
31 | ^
32 | MaxY
33 | ```
34 | """
35 |
36 | def __init__(
37 | self, id: int, min_x: float, min_y: float, max_x: float, max_y: float
38 | ) -> None:
39 | self.id = id
40 | self.min_x = min_x
41 | self.min_y = min_y
42 | self.max_x = max_x
43 | self.max_y = max_y
44 |
45 | @classmethod
46 | def create(
47 | cls, min_x: float, min_y: float, max_x: float, max_y: float
48 | ) -> "Gangzone":
49 | """Create a new gangzone (colored radar area).
50 |
51 | :param min_x: The X coordinate for the west side of the gangzone.
52 | :param min_y: The Y coordinate for the south side of the gangzone.
53 | :param max_x: The X coordinate for the east side of the gangzone.
54 | :param max_y: The Y coordinate for the north side of the gangzone.
55 | :return: An instance of :class:`Gangzone`.
56 | """
57 | return cls(
58 | gang_zone_create(min_x, min_y, max_x, max_y),
59 | min_x,
60 | min_y,
61 | max_x,
62 | max_y,
63 | )
64 |
65 | def get_id(self) -> int:
66 | """Get the gangzone id."""
67 | return self.id
68 |
69 | def destroy(self) -> bool:
70 | """Destroy the gangzone."""
71 | return gang_zone_destroy(self.id)
72 |
73 | def show_for_player(self, player: "Player", color: int) -> bool:
74 | """Show the gangzone for a player."""
75 | return gang_zone_show_for_player(player.id, self.id, color)
76 |
77 | def hide_for_player(self, player: "Player") -> bool:
78 | """Hide the ganzone for a player."""
79 | return gang_zone_hide_for_player(player.id, self.id)
80 |
81 | def show_for_all(self, color: int) -> bool:
82 | """Show the ganzone for all players, with the desired color."""
83 | return gang_zone_show_for_all(self.id, color)
84 |
85 | def hide_for_all(self) -> bool:
86 | """Hide the gangzone for everyone."""
87 | return gang_zone_hide_for_all(self.id)
88 |
89 | def flash_for_player(self, player: "Player", flash_color: int) -> bool:
90 | """Make the gangzone flash for the given player,
91 | with the desired color.
92 | """
93 | return gang_zone_flash_for_player(player.id, self.id, flash_color)
94 |
95 | def flash_for_all(self, flash_color: int) -> bool:
96 | """Make the gangzone flash for all players."""
97 | return gang_zone_flash_for_all(self.id, flash_color)
98 |
99 | def stop_flash_for_player(self, player: "Player") -> bool:
100 | """If a gangzone is flashing for a player,
101 | this can be used to stop it.
102 | """
103 | return gang_zone_stop_flash_for_player(player.id, self.id)
104 |
105 | def stop_flash_for_all(self) -> bool:
106 | """Stop the flashing of a ganzone for all online players."""
107 | return gang_zone_stop_flash_for_all(self.id)
108 |
109 |
110 | from pysamp.player import Player # noqa
111 |
--------------------------------------------------------------------------------
/pysamp/menu.py:
--------------------------------------------------------------------------------
1 | from typing import Optional
2 | from pysamp import (
3 | create_menu,
4 | destroy_menu,
5 | add_menu_item,
6 | set_menu_column_header,
7 | show_menu_for_player,
8 | hide_menu_for_player,
9 | is_valid_menu,
10 | disable_menu,
11 | disable_menu_row,
12 | get_player_menu
13 | )
14 | from samp import INVALID_MENU
15 |
16 |
17 | class Menu:
18 | """Create and manage menus using this class.
19 |
20 | Create a new menu with :meth:`create`. Then add items to it with
21 | :meth:`add_item`, and finally show it to players using :meth:`show`.
22 | """
23 | def __init__(
24 | self,
25 | id: int
26 | ) -> None:
27 | self.id = id
28 |
29 | @classmethod
30 | def create(
31 | cls,
32 | title: str,
33 | columns: int,
34 | x: float,
35 | y: float,
36 | column_1_width: float,
37 | column_2_width: float = 0.0
38 | ) -> "Menu":
39 | """Create a new menu.
40 |
41 | :param str title: The menu title.
42 | :param int columns: How many columns the meny should have.
43 | :param float x: The X position on the screen (horizontally).
44 | :param float y: the Y position on the screen (vertically)
45 | :param float column_1_width: The width of the first column.
46 | :param optional float column_2_width: The width of the second column.
47 | :return: Returns an instance of :class:`~pysamp.menu.Menu`.
48 |
49 | .. note:: If the title's length is equal to or greater than 32 chars,
50 | the title is truncated to 30 characters.
51 | You can only create and access 2 columns (0 & 1).
52 |
53 | .. warning:: There is a limit of 12 items per menu, and a limit of
54 | 128 menus in total.
55 | """
56 | return cls(
57 | create_menu(
58 | title, columns, x, y, column_1_width, column_2_width
59 | )
60 | )
61 |
62 | def add_item(self, column: int, text: str) -> None:
63 | """Add a new menu item to the menu.
64 |
65 | :param int column: The columt to add to. (0 or 1)
66 | :param str text: The text to write. Max length: 31
67 | :return: No return value.
68 |
69 | .. note:: You can only have 12 items per menu.
70 | You can only add 8 color codes per one item.
71 | """
72 | if self.is_valid():
73 | add_menu_item(self.id, column, text)
74 | return
75 |
76 | def destroy(self) -> None:
77 | """Destroy the menu.
78 |
79 | :return: No return value.
80 | """
81 | if self.is_valid():
82 | destroy_menu(self.id)
83 | return
84 |
85 | def disable(self) -> None:
86 | """Disable the menu.
87 |
88 | :return: No return value.
89 | """
90 | if self.is_valid():
91 | disable_menu(self.id)
92 | return
93 |
94 | def disable_row(self, row: int) -> None:
95 | """Disable one of the menu rows for all players.
96 |
97 | :param int row: The row to disable. Rows start at 0.
98 | :return: No return value.
99 | """
100 | if self.is_valid():
101 | disable_menu_row(self.id, row)
102 | return
103 |
104 | @staticmethod
105 | def get_player_menu(player: "Player") -> Optional["Menu"]:
106 | """Figure out which menu a has last had open when no menu is currently
107 | open.
108 |
109 | :param Player player: The player to check last open menu for.
110 | :return: An instance of the menu. None if no menu was opened.
111 | """
112 | id = get_player_menu(player.id)
113 | if id == INVALID_MENU or id is None:
114 | return None
115 | return Menu(id)
116 |
117 | def hide_for_player(self, player: "Player") -> None:
118 | """Hide the menu for a player.
119 |
120 | :param Player player: The player you want to hide the menu for.
121 | :return: No return value.
122 | """
123 | if self.is_valid():
124 | hide_menu_for_player(self.id, player.id)
125 | return
126 |
127 | def is_valid(self) -> bool:
128 | """Check if the menu is valid.
129 |
130 | :return: ``True`` if valid, otherwise ``False``.
131 | """
132 | return is_valid_menu(self.id)
133 |
134 | def set_column_header(self, column: int, text: str) -> None:
135 | """Set the menu column header text.
136 |
137 | :param int column: The column you want to set the header for. (0 or 1)
138 | :param str text: The header text you would like to set.
139 | :return: No return value.
140 | """
141 | if self.is_valid():
142 | set_menu_column_header(self.id, column, text)
143 | return
144 |
145 | def show(self, player: "Player") -> None:
146 | """Show the menu for a given player.
147 |
148 | :param Player player: The player you would like to see the menu.
149 | :return: No return value.
150 | """
151 | if self.is_valid():
152 | show_menu_for_player(self.id, player.id)
153 | return
154 |
155 | from pysamp.player import Player # noqa
156 |
--------------------------------------------------------------------------------
/pysamp/pickup.py:
--------------------------------------------------------------------------------
1 | from pysamp import (
2 | create_pickup, destroy_pickup,
3 | # add_static_pickup
4 | )
5 |
6 |
7 | class Pickup:
8 | """Pickups are global items that can be "picked" up by a player.
9 |
10 | Pickups triggers :meth:`~pysamp.Player.on_pick_up_pickup` when picked up.
11 |
12 | Benefit of having pickups compared to static pickups, is that you can
13 | recreate, destroy and modify pickups, while static pickups can only be
14 | created and have pre-made actions that make them work (such as health).
15 | """
16 |
17 | def __init__(self, id: int) -> None:
18 | self.id = id
19 | """The pickup ID (readonly int)."""
20 |
21 | @classmethod
22 | def create(
23 | cls,
24 | model: int,
25 | type: int,
26 | x: float,
27 | y: float,
28 | z: float,
29 | virtual_world: int = 0,
30 | ) -> "Pickup":
31 | """Create a new global pickup.
32 |
33 | :param int model: The pickup model to use. `You can use any model here.
34 | `_
35 | :param int type: The pickup type. `See here for available types
36 | `_.
37 | :param float x: The x coordinate to place the pickup at.
38 | :param float y: The y coordinate to place the pickup at.
39 | :param float z: The z coordinate to place the pickup at.
40 | :param optional int virtual_world: Which world should it be visible in?
41 | The default value is 0.
42 | :return: This method does not return anything.
43 |
44 | .. warning:: Pickups that have a X or Y < -4096.0 or > 4096.0 will not
45 | show up and won't trigger any events either.
46 |
47 | .. note::
48 | - Only pickup type that can be picked up from within a car,\
49 | is ID 14.
50 | - Certain pickup types come with 'automatic responses',\
51 | for example using an M4 model in the pickup will automatically\
52 | give the player the weapon and some ammo.
53 | """
54 | return cls(
55 | create_pickup(model, type, x, y, z, virtual_world))
56 |
57 | def destroy(self) -> bool:
58 | """Destroy the pickup.
59 |
60 | :return: No return value.
61 |
62 | This removes the pickup from the world.
63 | """
64 | return destroy_pickup(self.id)
65 |
--------------------------------------------------------------------------------
/pysamp/textlabel.py:
--------------------------------------------------------------------------------
1 | from pysamp import (
2 | attach_3d_text_label_to_player,
3 | attach_3d_text_label_to_vehicle,
4 | create_3d_text_label,
5 | delete_3d_text_label,
6 | update_3d_text_label_text,
7 | )
8 |
9 |
10 | class TextLabel:
11 | """
12 | Create and adjust 3D-Textlabels that can be attached to
13 | vehicles, players or world coordinates.
14 | """
15 |
16 | def __init__(self, id: int) -> None:
17 | self.id: int = id
18 |
19 | @classmethod
20 | def create(
21 | cls,
22 | text: str,
23 | color: int,
24 | x: float,
25 | y: float,
26 | z: float,
27 | draw_distance: float,
28 | virtual_world: int,
29 | testLOS: bool = False,
30 | ) -> "TextLabel":
31 |
32 | return cls(create_3d_text_label(
33 | text,
34 | color,
35 | x,
36 | y,
37 | z,
38 | draw_distance,
39 | virtual_world,
40 | testLOS,
41 | ))
42 |
43 | def delete(self) -> bool:
44 | """Deletes a 3D text label.
45 |
46 | :return: This method does not return any value.
47 | """
48 | return delete_3d_text_label(self.id)
49 |
50 | def attach_to_player(
51 | self,
52 | player: "Player",
53 | offset_x: float,
54 | offset_y: float,
55 | offset_z: float
56 | ) -> bool:
57 | """Attach a 3D Textlabel to a player.
58 |
59 | :param Player player: The player to attach to.
60 | :param float offset_x: The relative X coordinate offset on the player.
61 | :param float offset_y: The relative Y coordinate offset on the player.
62 | :param float offset_z: The relative Z coordinate offset on the player.
63 | :return: This method does not return anything.
64 | """
65 | return attach_3d_text_label_to_player(
66 | self.id, player.id, offset_x, offset_y, offset_z
67 | )
68 |
69 | def attach_to_vehicle(
70 | self,
71 | vehicle: "Vehicle",
72 | offset_x: float,
73 | offset_y: float,
74 | offset_z: float
75 | ) -> bool:
76 | """Attach a 3D Textlabel to a vehicle.
77 |
78 | :param Vehicle vehicle: The vehicle to attach to.
79 | :param float offset_x: The relative X coordinate offset on the vehicle.
80 | :param float offset_y: The relative Y coordinate offset on the vehicle.
81 | :param float offset_z: The relative Z coordinate offset on the vehicle.
82 | :return: This method does not return anything.
83 | """
84 | return attach_3d_text_label_to_vehicle(
85 | self.id, vehicle.id, offset_x, offset_y, offset_z
86 | )
87 |
88 | def update_text(self, color: int, text: str) -> bool:
89 | """Update the 3D Textlabel text.
90 |
91 | :param int color: The color you would like the text to have.
92 | :param str text: The text you want to show.
93 | :return: This method does not return anything.
94 | """
95 | return update_3d_text_label_text(self.id, color, text)
96 |
97 | from pysamp.vehicle import Vehicle # noqa
98 | from pysamp.player import Player # noqa
99 |
--------------------------------------------------------------------------------
/pysamp/timer.py:
--------------------------------------------------------------------------------
1 | from pysamp import (
2 | set_timer,
3 | kill_timer
4 | )
5 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | alabaster==0.7.12
2 | Babel==2.10.3
3 | certifi==2024.7.4
4 | charset-normalizer==2.1.0
5 | docutils==0.17.1
6 | flake8==4.0.1
7 | idna==3.3
8 | imagesize==1.4.1
9 | Jinja2==3.1.2
10 | MarkupSafe==2.1.1
11 | mccabe==0.6.1
12 | mypy==0.961
13 | mypy-extensions==0.4.3
14 | packaging==21.3
15 | pycodestyle==2.8.0
16 | pyflakes==2.4.0
17 | Pygments==2.15.0
18 | pyparsing==3.0.9
19 | pytz==2022.1
20 | requests==2.28.1
21 | snowballstemmer==2.2.0
22 | Sphinx==5.0.2
23 | sphinx-rtd-theme==1.0.0
24 | sphinxcontrib-applehelp==1.0.2
25 | sphinxcontrib-devhelp==1.0.2
26 | sphinxcontrib-htmlhelp==2.0.0
27 | sphinxcontrib-jsmath==1.0.1
28 | sphinxcontrib-qthelp==1.0.3
29 | sphinxcontrib-serializinghtml==1.1.5
30 | tomli==2.0.1
31 | typing_extensions==4.3.0
32 | urllib3==1.26.9
33 |
--------------------------------------------------------------------------------
/scripts/cpp/tests.txt:
--------------------------------------------------------------------------------
1 | CallbacksTest::testCallback("OnGameModeInit", "");
2 | CallbacksTest::testCallback("OnGameModeExit", "");
3 | CallbacksTest::testCallback("OnPlayerConnect", "i");
4 | CallbacksTest::testCallback("OnPlayerDisconnect", "ii");
5 | CallbacksTest::testCallback("OnPlayerSpawn", "i");
6 | CallbacksTest::testCallback("OnPlayerDeath", "iii");
7 | CallbacksTest::testCallback("OnVehicleSpawn", "i");
8 | CallbacksTest::testCallback("OnVehicleDeath", "ii");
9 | CallbacksTest::testCallback("OnPlayerText", "is");
10 | CallbacksTest::testCallback("OnPlayerCommandText", "is");
11 | CallbacksTest::testCallback("OnPlayerRequestClass", "ii");
12 | CallbacksTest::testCallback("OnPlayerEnterVehicle", "iip");
13 | CallbacksTest::testCallback("OnPlayerExitVehicle", "ii");
14 | CallbacksTest::testCallback("OnPlayerStateChange", "iii");
15 | CallbacksTest::testCallback("OnPlayerEnterCheckpoi", "i");
16 | CallbacksTest::testCallback("OnPlayerLeaveCheckpoi", "i");
17 | CallbacksTest::testCallback("OnPlayerEnterRaceCheckpoi", "i");
18 | CallbacksTest::testCallback("OnPlayerLeaveRaceCheckpoi", "i");
19 | CallbacksTest::testCallback("OnRconCommand", "s");
20 | CallbacksTest::testCallback("OnPlayerRequestSpawn", "i");
21 | CallbacksTest::testCallback("OnObjectMoved", "i");
22 | CallbacksTest::testCallback("OnPlayerObjectMoved", "ii");
23 | CallbacksTest::testCallback("OnPlayerPickUpPickup", "ii");
24 | CallbacksTest::testCallback("OnVehicleMod", "iii");
25 | CallbacksTest::testCallback("OnEnterExitModShop", "iii");
26 | CallbacksTest::testCallback("OnVehiclePaijob", "iii");
27 | CallbacksTest::testCallback("OnVehicleRespray", "iiii");
28 | CallbacksTest::testCallback("OnVehicleDamageStatusUpdate", "ii");
29 | CallbacksTest::testCallback("OnUnoccupiedVehicleUpdate", "iiiffffff");
30 | CallbacksTest::testCallback("OnPlayerSelectedMenuRow", "ii");
31 | CallbacksTest::testCallback("OnPlayerExitedMenu", "i");
32 | CallbacksTest::testCallback("OnPlayerieriorChange", "iii");
33 | CallbacksTest::testCallback("OnPlayerKeyStateChange", "iii");
34 | CallbacksTest::testCallback("OnRconLoginAttempt", "ssp");
35 | CallbacksTest::testCallback("OnPlayerUpdate", "i");
36 | CallbacksTest::testCallback("OnPlayerStreamIn", "ii");
37 | CallbacksTest::testCallback("OnPlayerStreamOut", "ii");
38 | CallbacksTest::testCallback("OnVehicleStreamIn", "ii");
39 | CallbacksTest::testCallback("OnVehicleStreamOut", "ii");
40 | CallbacksTest::testCallback("OnActorStreamIn", "ii");
41 | CallbacksTest::testCallback("OnActorStreamOut", "ii");
42 | CallbacksTest::testCallback("OnDialogResponse", "iiiis");
43 | CallbacksTest::testCallback("OnPlayerTakeDamage", "iifii");
44 | CallbacksTest::testCallback("OnPlayerGiveDamage", "iifii");
45 | CallbacksTest::testCallback("OnPlayerGiveDamageActor", "iifii");
46 | CallbacksTest::testCallback("OnPlayerClickMap", "ifff");
47 | CallbacksTest::testCallback("OnPlayerClickTextDraw", "ii");
48 | CallbacksTest::testCallback("OnPlayerClickPlayerTextDraw", "ii");
49 | CallbacksTest::testCallback("OnIncomingConnection", "isi");
50 | CallbacksTest::testCallback("OnTrailerUpdate", "ii");
51 | CallbacksTest::testCallback("OnVehicleSirenStateChange", "iii");
52 | CallbacksTest::testCallback("OnPlayerClickPlayer", "iii");
53 | CallbacksTest::testCallback("OnPlayerEditObject", "ipiiffffff");
54 | CallbacksTest::testCallback("OnPlayerEditAttachedObject", "iiiiifffffffff");
55 | CallbacksTest::testCallback("OnPlayerSelectObject", "iiiifff");
56 | CallbacksTest::testCallback("OnPlayerWeaponShot", "iiiifff");
57 |
--------------------------------------------------------------------------------
/scripts/functions/callbacks.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pysamp/PySAMP/b147c162af3dd00ef8cd0b91c0b538d04ba5cfd2/scripts/functions/callbacks.txt
--------------------------------------------------------------------------------
/scripts/idl/a_actor.idl:
--------------------------------------------------------------------------------
1 | /* Copyright (C) 2011-2015 Zeex
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 |
16 | [native] int CreateActor(int modelid, float x, float y, float z, float rotation);
17 | [native] bool DestroyActor(int actorid);
18 | [native] bool IsActorStreamedIn(int actorid, int forplayerid);
19 |
20 | [native] bool SetActorVirtualWorld(int actorid, int vworld);
21 | [native] int GetActorVirtualWorld(int actorid);
22 |
23 | [native] bool ApplyActorAnimation(int actorid, string animlib, string animname, float fDelta, bool loop, bool lockx, bool locky, bool freeze, int time);
24 | [native] bool ClearActorAnimations(int actorid);
25 |
26 | [native] bool SetActorPos(int actorid, float x, float y, float z);
27 | [native] bool GetActorPos(int actorid, [out] float x, [out] float y, [out] float z);
28 | [native] bool SetActorFacingAngle(int actorid, float angle);
29 | [native] bool GetActorFacingAngle(int actorid, [out] float angle);
30 |
31 | [native] bool SetActorHealth(int actorid, float health);
32 | [native] bool GetActorHealth(int actorid, [out] float health);
33 | [native] bool SetActorInvulnerable(int actorid, bool invulnerable = true);
34 | [native] bool IsActorInvulnerable(int actorid);
35 |
36 | [native] bool IsValidActor(int actorid);
37 |
--------------------------------------------------------------------------------
/scripts/idl/a_http.idl:
--------------------------------------------------------------------------------
1 | /* Copyright (C) 2013-2015 Zeex
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 |
16 | const int HTTP_GET = 1;
17 | const int HTTP_POST = 2;
18 | const int HTTP_HEAD = 3;
19 |
20 | const int HTTP_ERROR_BAD_HOST = 1;
21 | const int HTTP_ERROR_NO_SOCKET = 2;
22 | const int HTTP_ERROR_CANT_CONNECT = 3;
23 | const int HTTP_ERROR_CANT_WRITE = 4;
24 | const int HTTP_ERROR_CONTENT_TOO_BIG = 5;
25 | const int HTTP_ERROR_MALFORMED_RESPONSE = 6;
26 |
27 | [native] bool HTTP(int index,
28 | int type,
29 | string url,
30 | string data,
31 | [in, bind("OnHTTPResponse")] string callback);
32 |
33 | [callback, nonstandard] void OnHTTPResponse(int index,
34 | int response_code,
35 | string data);
36 |
--------------------------------------------------------------------------------
/scripts/idl/a_objects.idl:
--------------------------------------------------------------------------------
1 | /* Copyright (C) 2011-2015 Zeex
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 |
16 | [native] int CreateObject(int modelid, float x, float y, float z, float rX, float rY, float rZ, float DrawDistance = 0.0);
17 | [native] bool AttachObjectToVehicle(int objectid, int vehicleid, float fOffsetX, float fOffsetY, float fOffsetZ, float fRotX, float fRotY, float fRotZ);
18 | [native] bool AttachObjectToObject(int objectid, int attachtoid, float fOffsetX, float fOffsetY, float fOffsetZ, float fRotX, float fRotY, float fRotZ, bool SyncRotation = false);
19 | [native] bool AttachObjectToPlayer(int objectid, int playerid, float fOffsetX, float fOffsetY, float fOffsetZ, float fRotX, float fRotY, float fRotZ);
20 | [native] bool SetObjectPos(int objectid, float x, float y, float z);
21 | [native] bool GetObjectPos(int objectid, [out] float x, [out] float y, [out] float z);
22 | [native] bool SetObjectRot(int objectid, float rotX, float rotY, float rotZ);
23 | [native] bool GetObjectRot(int objectid, [out] float rotX, [out] float rotY, [out] float rotZ);
24 | [native] int GetObjectModel(int objectid);
25 | [native] bool SetObjectNoCameraCol(int objectid);
26 | [native] bool IsValidObject(int objectid);
27 | [native] bool DestroyObject(int objectid);
28 | [native] int MoveObject(int objectid, float X, float Y, float Z, float Speed, float RotX = -1000.0, float RotY = -1000.0, float RotZ = -1000.0);
29 | [native] bool StopObject(int objectid);
30 | [native] bool IsObjectMoving(int objectid);
31 | [native] bool EditObject(int playerid, int objectid);
32 | [native] bool EditPlayerObject(int playerid, int objectid);
33 | [native] bool SelectObject(int playerid);
34 | [native] bool CancelEdit(int playerid);
35 | [native] int CreatePlayerObject(int playerid, int modelid, float x, float y, float z, float rX, float rY, float rZ, float DrawDistance = 0.0);
36 | [native] bool AttachPlayerObjectToPlayer(int objectplayer, int objectid, int attachplayer, float OffsetX, float OffsetY, float OffsetZ, float rX, float rY, float rZ);
37 | [native] bool AttachPlayerObjectToVehicle(int playerid, int objectid, int vehicleid, float fOffsetX, float fOffsetY, float fOffsetZ, float fRotX, float fRotY, float RotZ);
38 | [native] bool SetPlayerObjectPos(int playerid, int objectid, float x, float y, float z);
39 | [native] bool GetPlayerObjectPos(int playerid, int objectid, [out] float x, [out] float y, [out] float z);
40 | [native] bool SetPlayerObjectRot(int playerid, int objectid, float rotX, float rotY, float rotZ);
41 | [native] bool GetPlayerObjectRot(int playerid, int objectid, [out] float rotX, [out] float rotY, [out] float rotZ);
42 | [native] int GetPlayerObjectModel(int playerid, int objectid);
43 | [native] bool SetPlayerObjectNoCameraCol(int playerid, int objectid);
44 | [native] bool IsValidPlayerObject(int playerid, int objectid);
45 | [native] bool DestroyPlayerObject(int playerid, int objectid);
46 | [native] int MovePlayerObject(int playerid, int objectid, float x, float y, float z, float Speed, float RotX = -1000.0, float RotY = -1000.0, float RotZ = -1000.0);
47 | [native] bool StopPlayerObject(int playerid, int objectid);
48 | [native] bool IsPlayerObjectMoving(int playerid, int objectid);
49 |
50 | const int OBJECT_MATERIAL_SIZE_32x32 = 10;
51 | const int OBJECT_MATERIAL_SIZE_64x32 = 20;
52 | const int OBJECT_MATERIAL_SIZE_64x64 = 30;
53 | const int OBJECT_MATERIAL_SIZE_128x32 = 40;
54 | const int OBJECT_MATERIAL_SIZE_128x64 = 50;
55 | const int OBJECT_MATERIAL_SIZE_128x128 = 60;
56 | const int OBJECT_MATERIAL_SIZE_256x32 = 70;
57 | const int OBJECT_MATERIAL_SIZE_256x64 = 80;
58 | const int OBJECT_MATERIAL_SIZE_256x128 = 90;
59 | const int OBJECT_MATERIAL_SIZE_256x256 = 100;
60 | const int OBJECT_MATERIAL_SIZE_512x64 = 110;
61 | const int OBJECT_MATERIAL_SIZE_512x128 = 120;
62 | const int OBJECT_MATERIAL_SIZE_512x256 = 130;
63 | const int OBJECT_MATERIAL_SIZE_512x512 = 140;
64 |
65 | const int OBJECT_MATERIAL_TEXT_ALIGN_LEFT = 0;
66 | const int OBJECT_MATERIAL_TEXT_ALIGN_CENTER = 1;
67 | const int OBJECT_MATERIAL_TEXT_ALIGN_RIGHT = 2;
68 |
69 | [native] bool SetObjectMaterial(int objectid, int materialindex, int modelid, string txdname, string texturename, int materialcolor = 0);
70 | [native] bool SetPlayerObjectMaterial(int playerid, int objectid, int materialindex, int modelid, string txdname, string texturename, int materialcolor = 0);
71 |
72 | [native] bool SetObjectMaterialText(int objectid, string text, int materialindex = 0, int materialsize = OBJECT_MATERIAL_SIZE_256x128, string fontface = "Arial", int fontsize = 24, bool bold = true, int fontcolor = 0xFFFFFFFF, int backcolor = 0, int textalignment = 0);
73 | [native] bool SetPlayerObjectMaterialText(int playerid, int objectid, string text, int materialindex = 0, int materialsize = OBJECT_MATERIAL_SIZE_256x128, string fontface = "Arial", int fontsize = 24, bool bold = true, int fontcolor = 0xFFFFFFFF, int backcolor = 0, int textalignment = 0);
74 |
75 | [native] bool SetObjectsDefaultCameraCol(bool disable);
76 |
--------------------------------------------------------------------------------
/scripts/idl/a_vehicles.idl:
--------------------------------------------------------------------------------
1 | /* Copyright (C) 2011-2015 Zeex
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 |
16 | const int CARMODTYPE_SPOILER = 0;
17 | const int CARMODTYPE_HOOD = 1;
18 | const int CARMODTYPE_ROOF = 2;
19 | const int CARMODTYPE_SIDESKIRT = 3;
20 | const int CARMODTYPE_LAMPS = 4;
21 | const int CARMODTYPE_NITRO = 5;
22 | const int CARMODTYPE_EXHAUST = 6;
23 | const int CARMODTYPE_WHEELS = 7;
24 | const int CARMODTYPE_STEREO = 8;
25 | const int CARMODTYPE_HYDRAULICS = 9;
26 | const int CARMODTYPE_FRONT_BUMPER = 10;
27 | const int CARMODTYPE_REAR_BUMPER = 11;
28 | const int CARMODTYPE_VENT_RIGHT = 12;
29 | const int CARMODTYPE_VENT_LEFT = 13;
30 |
31 | const int VEHICLE_PARAMS_UNSET = -1;
32 | const int VEHICLE_PARAMS_OFF = 0;
33 | const int VEHICLE_PARAMS_ON = 1;
34 |
35 | [native] bool IsValidVehicle(int vehicleid);
36 | [native] float GetVehicleDistanceFromPoint(int vehicleid, float x, float y, float z);
37 | [native] int CreateVehicle(int vehicletype, float x, float y, float z, float rotation, int color1, int color2, int respawn_delay, bool addsiren = false);
38 | [native] bool DestroyVehicle(int vehicleid);
39 | [native] bool IsVehicleStreamedIn(int vehicleid, int forplayerid);
40 | [native] bool GetVehiclePos(int vehicleid, [out] float x, [out] float y, [out] float z);
41 | [native] bool SetVehiclePos(int vehicleid, float x, float y, float z);
42 | [native] bool GetVehicleZAngle(int vehicleid, [out] float z_angle);
43 | [native] bool GetVehicleRotationQuat(int vehicleid, [out] float w, [out] float x, [out] float y, [out] float z);
44 | [native] bool SetVehicleZAngle(int vehicleid, float z_angle);
45 | [native] bool SetVehicleParamsForPlayer(int vehicleid, int playerid, int objective, int doorslocked);
46 | [native] bool ManualVehicleEngineAndLights();
47 | [native] bool SetVehicleParamsEx(int vehicleid, int engine, int lights, int alarm, int doors, int bonnet, int boot, int objective);
48 | [native] bool GetVehicleParamsEx(int vehicleid, [out] int engine, [out] int lights, [out] int alarm, [out] int doors, [out] int bonnet, [out] int boot, [out] int objective);
49 | [native] int GetVehicleParamsSirenState(int vehicleid);
50 | [native] bool SetVehicleParamsCarDoors(int vehicleid, int driver, int passenger, int backleft, int backright);
51 | [native] bool GetVehicleParamsCarDoors(int vehicleid, [out] int driver, [out] int passenger, [out] int backleft, [out] int backright);
52 | [native] bool SetVehicleParamsCarWindows(int vehicleid, int driver, int passenger, int backleft, int backright);
53 | [native] bool GetVehicleParamsCarWindows(int vehicleid, [out] int driver, [out] int passenger, [out] int backleft, [out] int backright);
54 | [native] bool SetVehicleToRespawn(int vehicleid);
55 | [native] bool LinkVehicleToInterior(int vehicleid, int interiorid);
56 | [native] bool AddVehicleComponent(int vehicleid, int componentid);
57 | [native] bool RemoveVehicleComponent(int vehicleid, int componentid);
58 | [native] bool ChangeVehicleColor(int vehicleid, int color1, int color2);
59 | [native] bool ChangeVehiclePaintjob(int vehicleid, int paintjobid);
60 | [native] bool SetVehicleHealth(int vehicleid, float health);
61 | [native] bool GetVehicleHealth(int vehicleid, [out] float health);
62 | [native] bool AttachTrailerToVehicle(int trailerid, int vehicleid);
63 | [native] bool DetachTrailerFromVehicle(int vehicleid);
64 | [native] bool IsTrailerAttachedToVehicle(int vehicleid);
65 | [native] int GetVehicleTrailer(int vehicleid);
66 | [native] bool SetVehicleNumberPlate(int vehicleid, string numberplate);
67 | [native] int GetVehicleModel(int vehicleid);
68 | [native] int GetVehicleComponentInSlot(int vehicleid, int slot);
69 | [native] int GetVehicleComponentType(int component);
70 | [native] bool RepairVehicle(int vehicleid);
71 | [native] bool GetVehicleVelocity(int vehicleid, [out] float X, [out] float Y, [out] float Z);
72 | [native] bool SetVehicleVelocity(int vehicleid, float X, float Y, float Z);
73 | [native] bool SetVehicleAngularVelocity(int vehicleid, float X, float Y, float Z);
74 | [native] bool GetVehicleDamageStatus(int vehicleid, [out] int panels, [out] int doors, [out] int lights, [out] int tires);
75 | [native] bool UpdateVehicleDamageStatus(int vehicleid, int panels, int doors, int lights, int tires);
76 | [native] bool SetVehicleVirtualWorld(int vehicleid, int worldid);
77 | [native] int GetVehicleVirtualWorld(int vehicleid);
78 |
79 | const int VEHICLE_MODEL_INFO_SIZE = 1;
80 | const int VEHICLE_MODEL_INFO_FRONTSEAT = 2;
81 | const int VEHICLE_MODEL_INFO_REARSEAT = 3;
82 | const int VEHICLE_MODEL_INFO_PETROLCAP = 4;
83 | const int VEHICLE_MODEL_INFO_WHEELSFRONT = 5;
84 | const int VEHICLE_MODEL_INFO_WHEELSREAR = 6;
85 | const int VEHICLE_MODEL_INFO_WHEELSMID = 7;
86 | const int VEHICLE_MODEL_INFO_FRONT_BUMPER_Z = 8;
87 | const int VEHICLE_MODEL_INFO_REAR_BUMPER_Z = 9;
88 |
89 | [native] bool GetVehicleModelInfo(int model, int infotype, [out] float X, [out] float Y, [out] float Z);
90 |
--------------------------------------------------------------------------------
/scripts/idl/callbacks.idl:
--------------------------------------------------------------------------------
1 | [callback] bool OnGameModeInit();
2 | [callback] bool OnGameModeExit();
3 | [callback] bool OnPlayerConnect(int playerid);
4 | [callback] bool OnPlayerDisconnect(int playerid, int reason);
5 | [callback] bool OnPlayerSpawn(int playerid);
6 | [callback] bool OnPlayerDeath(int playerid, int killerid, int reason);
7 | [callback] bool OnVehicleSpawn(int vehicleid);
8 | [callback] bool OnVehicleDeath(int vehicleid, int killerid);
9 | [callback] bool OnPlayerText(int playerid, string text);
10 | [callback] bool OnPlayerCommandText(int playerid, string cmdtext);
11 | [callback] bool OnPlayerRequestClass(int playerid, int classid);
12 | [callback] bool OnPlayerEnterVehicle(int playerid, int vehicleid, bool ispassenger);
13 | [callback] bool OnPlayerExitVehicle(int playerid, int vehicleid);
14 | [callback] bool OnPlayerStateChange(int playerid, int newstate, int oldstate);
15 | [callback] bool OnPlayerEnterCheckpoint(int playerid);
16 | [callback] bool OnPlayerLeaveCheckpoint(int playerid);
17 | [callback] bool OnPlayerEnterRaceCheckpoint(int playerid);
18 | [callback] bool OnPlayerLeaveRaceCheckpoint(int playerid);
19 | [callback] bool OnRconCommand(string cmd);
20 | [callback] bool OnPlayerRequestSpawn(int playerid);
21 | [callback] bool OnObjectMoved(int objectid);
22 | [callback] bool OnPlayerObjectMoved(int playerid, int objectid);
23 | [callback] bool OnPlayerPickUpPickup(int playerid, int pickupid);
24 | [callback] bool OnVehicleMod(int playerid, int vehicleid, int componentid);
25 | [callback] bool OnEnterExitModShop(int playerid, int enterexit, int interiorid);
26 | [callback] bool OnVehiclePaintjob(int playerid, int vehicleid, int paintjobid);
27 | [callback, badref(false)] bool OnVehicleRespray(int playerid, int vehicleid, int color1, int color2);
28 | [callback] bool OnVehicleDamageStatusUpdate(int vehicleid, int playerid);
29 | [callback] bool OnUnoccupiedVehicleUpdate(int vehicleid, int playerid, int passenger_seat, float new_x, float new_y, float new_z, float vel_x, float vel_y, float vel_z);
30 | [callback] bool OnPlayerSelectedMenuRow(int playerid, int row);
31 | [callback] bool OnPlayerExitedMenu(int playerid);
32 | [callback] bool OnPlayerInteriorChange(int playerid, int newinteriorid, int oldinteriorid);
33 | [callback] bool OnPlayerKeyStateChange(int playerid, int newkeys, int oldkeys);
34 | [callback] bool OnRconLoginAttempt(string ip, string password, bool success);
35 | [callback] bool OnPlayerUpdate(int playerid);
36 | [callback] bool OnPlayerStreamIn(int playerid, int forplayerid);
37 | [callback] bool OnPlayerStreamOut(int playerid, int forplayerid);
38 | [callback] bool OnVehicleStreamIn(int vehicleid, int forplayerid);
39 | [callback] bool OnVehicleStreamOut(int vehicleid, int forplayerid);
40 | [callback] bool OnActorStreamIn(int actorid, int forplayerid);
41 | [callback] bool OnActorStreamOut(int actorid, int forplayerid);
42 | [callback] bool OnDialogResponse(int playerid, int dialogid, int response, int listitem, string inputtext);
43 | [callback] bool OnPlayerTakeDamage(int playerid, int issuerid, float amount, int weaponid, int bodypart);
44 | [callback] bool OnPlayerGiveDamage(int playerid, int damagedid, float amount, int weaponid, int bodypart);
45 | [callback] bool OnPlayerGiveDamageActor(int playerid, int damaged_actorid, float amount, int weaponid, int bodypart);
46 | [callback] bool OnPlayerClickMap(int playerid, float fX, float fY, float fZ);
47 | [callback] bool OnPlayerClickTextDraw(int playerid, int clickedid);
48 | [callback] bool OnPlayerClickPlayerTextDraw(int playerid, int playertextid);
49 | [callback] bool OnIncomingConnection(int playerid, string ip_address, int port);
50 | [callback] bool OnTrailerUpdate(int playerid, int vehicleid);
51 | [callback] bool OnVehicleSirenStateChange(int playerid, int vehicleid, int newstate);
52 | [callback] bool OnPlayerClickPlayer(int playerid, int clickedplayerid, int source);
53 | [callback] bool OnPlayerEditObject(int playerid, bool playerobject, int objectid, int response, float fX, float fY, float fZ, float fRotX, float fRotY, float fRotZ);
54 | [callback] bool OnPlayerEditAttachedObject(int playerid, int response, int index, int modelid, int boneid, float fOffsetX, float fOffsetY, float fOffsetZ, float fRotX, float fRotY, float fRotZ, float fScaleX, float fScaleY, float fScaleZ);
55 | [callback] bool OnPlayerSelectObject(int playerid, int type, int objectid, int modelid, float fX, float fY, float fZ);
56 | [callback] bool OnPlayerWeaponShot(int playerid, int weaponid, int hittype, int hitid, float fX, float fY, float fZ);
57 |
--------------------------------------------------------------------------------
/scripts/json/Ban.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'bool'
3 | name:'Ban'
4 | parameters:'[{type:'int'
5 | name:'playerid'
6 | isOut:'False'
7 | default:'None'}]'}{native:'True'
8 | returns:'bool'
9 | name:'Ban'
10 | parameters:'[{type:'int'
11 | name:'playerid'
12 | isOut:'False'
13 | default:'None'}]'}{native:'True'
14 | returns:'bool'
15 | name:'Ban'
16 | parameters:'[{type:'int'
17 | name:'playerid'
18 | isOut:'False'
19 | default:'None'}]'}{native:'True'
20 | returns:'bool'
21 | name:'Ban'
22 | parameters:'[{type:'int'
23 | name:'playerid'
24 | isOut:'False'
25 | default:'None'}]'}{native:'True'
26 | returns:'bool'
27 | name:'Ban'
28 | parameters:'[{type:'int'
29 | name:'playerid'
30 | isOut:'False'
31 | default:'None'}]'}{native:'True'
32 | returns:'bool'
33 | name:'Ban'
34 | parameters:'[{type:'int'
35 | name:'playerid'
36 | isOut:'False'
37 | default:'None'}]'}{native:'True'
38 | returns:'bool'
39 | name:'Ban'
40 | parameters:'[{type:'int'
41 | name:'playerid'
42 | isOut:'False'
43 | default:'None'}]'}{native:'True'
44 | returns:'bool'
45 | name:'Ban'
46 | parameters:'[{type:'int'
47 | name:'playerid'
48 | isOut:'False'
49 | default:'None'}]'}{native:'True'
50 | returns:'bool'
51 | name:'Ban'
52 | parameters:'[{type:'int'
53 | name:'arg0'
54 | isOut:'False'
55 | default:'None'}]'}{native:'True'
56 | returns:'bool'
57 | name:'Ban'
58 | parameters:'[{type:'int'
59 | name:'arg0'
60 | isOut:'False'
61 | default:'None'}]'}{native:'True'
62 | returns:'bool'
63 | name:'Ban'
64 | parameters:'[{type:'int'
65 | name:'arg0'
66 | isOut:'False'
67 | default:'None'}]'}{native:'True'
68 | returns:'bool'
69 | name:'Ban'
70 | parameters:'[{type:'int'
71 | name:'arg0'
72 | isOut:'False'
73 | default:'None'}]'}{native:'True'
74 | returns:'bool'
75 | name:'Ban'
76 | parameters:'[{type:'int'
77 | name:'arg0'
78 | isOut:'False'
79 | default:'None'}]'}{native:'True'
80 | returns:'bool'
81 | name:'Ban'
82 | parameters:'[{type:'int'
83 | name:'arg0'
84 | isOut:'False'
85 | default:'None'}]'}{native:'True'
86 | returns:'bool'
87 | name:'Ban'
88 | parameters:'[{type:'int'
89 | name:'arg0'
90 | isOut:'False'
91 | default:'None'}]'}{native:'True'
92 | returns:'bool'
93 | name:'Ban'
94 | parameters:'[{type:'int'
95 | name:'arg0'
96 | isOut:'False'
97 | default:'None'}]'}{native:'True'
98 | returns:'bool'
99 | name:'Ban'
100 | parameters:'[{type:'int'
101 | name:'arg0'
102 | isOut:'False'
103 | default:'None'}]'}{native:'True'
104 | returns:'bool'
105 | name:'Ban'
106 | parameters:'[{type:'int'
107 | name:'arg0'
108 | isOut:'False'
109 | default:'None'}]'}{native:'True'
110 | returns:'bool'
111 | name:'Ban'
112 | parameters:'[{type:'int'
113 | name:'arg0'
114 | isOut:'False'
115 | default:'None'}]'}{native:'True'
116 | returns:'bool'
117 | name:'Ban'
118 | parameters:'[{type:'int'
119 | name:'arg0'
120 | isOut:'False'
121 | default:'None'}]'}{native:'True'
122 | returns:'bool'
123 | name:'Ban'
124 | parameters:'[{type:'int'
125 | name:'arg0'
126 | isOut:'False'
127 | default:'None'}]'}{native:'True'
128 | returns:'bool'
129 | name:'Ban'
130 | parameters:'[{type:'int'
131 | name:'arg0'
132 | isOut:'False'
133 | default:'None'}]'}{native:'True'
134 | returns:'bool'
135 | name:'Ban'
136 | parameters:'[{type:'int'
137 | name:'arg0'
138 | isOut:'False'
139 | default:'None'}]'}{native:'True'
140 | returns:'bool'
141 | name:'Ban'
142 | parameters:'[{type:'int'
143 | name:'arg0'
144 | isOut:'False'
145 | default:'None'}]'}{native:'True'
146 | returns:'bool'
147 | name:'Ban'
148 | parameters:'[{type:'int'
149 | name:'arg0'
150 | isOut:'False'
151 | default:'None'}]'}{native:'True'
152 | returns:'bool'
153 | name:'Ban'
154 | parameters:'[{type:'int'
155 | name:'arg0'
156 | isOut:'False'
157 | default:'None'}]'}{native:'True'
158 | returns:'bool'
159 | name:'Ban'
160 | parameters:'[{type:'int'
161 | name:'arg0'
162 | isOut:'False'
163 | default:'None'}]'}{native:'True'
164 | returns:'bool'
165 | name:'Ban'
166 | parameters:'[{type:'int'
167 | name:'arg0'
168 | isOut:'False'
169 | default:'None'}]'}{native:'True'
170 | returns:'bool'
171 | name:'Ban'
172 | parameters:'[{type:'int'
173 | name:'arg0'
174 | isOut:'False'
175 | default:'None'}]'}{native:'True'
176 | returns:'bool'
177 | name:'Ban'
178 | parameters:'[{type:'int'
179 | name:'arg0'
180 | isOut:'False'
181 | default:'None'}]'}{native:'True'
182 | returns:'bool'
183 | name:'Ban'
184 | parameters:'[{type:'int'
185 | name:'arg0'
186 | isOut:'False'
187 | default:'None'}]'}{native:'True'
188 | returns:'bool'
189 | name:'Ban'
190 | parameters:'[{type:'int'
191 | name:'arg0'
192 | isOut:'False'
193 | default:'None'}]'}{native:'True'
194 | returns:'bool'
195 | name:'Ban'
196 | parameters:'[{type:'int'
197 | name:'arg0'
198 | isOut:'False'
199 | default:'None'}]'}{native:'True'
200 | returns:'bool'
201 | name:'Ban'
202 | parameters:'[{type:'int'
203 | name:'arg0'
204 | isOut:'False'
205 | default:'None'}]'}{native:'True'
206 | returns:'bool'
207 | name:'Ban'
208 | parameters:'[{type:'int'
209 | name:'arg0'
210 | isOut:'False'
211 | default:'None'}]'}{native:'True'
212 | returns:'bool'
213 | name:'Ban'
214 | parameters:'[{type:'int'
215 | name:'arg0'
216 | isOut:'False'
217 | default:'None'}]'}{native:'True'
218 | returns:'bool'
219 | name:'Ban'
220 | parameters:'[{type:'int'
221 | name:'arg0'
222 | isOut:'False'
223 | default:'None'}]'}{native:'True'
224 | returns:'bool'
225 | name:'Ban'
226 | parameters:'[{type:'int'
227 | name:'arg0'
228 | isOut:'False'
229 | default:'None'}]'}{native:'True'
230 | returns:'bool'
231 | name:'Ban'
232 | parameters:'[{type:'int'
233 | name:'arg0'
234 | isOut:'False'
235 | default:'None'}]'}{native:'True'
236 | returns:'bool'
237 | name:'Ban'
238 | parameters:'[{type:'int'
239 | name:'arg0'
240 | isOut:'False'
241 | default:'None'}]'}
--------------------------------------------------------------------------------
/scripts/json/DestroyMenu.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'bool'
3 | name:'DestroyMenu'
4 | parameters:'[{type:'int'
5 | name:'menuid'
6 | isOut:'False'
7 | default:'None'}]'}{native:'True'
8 | returns:'bool'
9 | name:'DestroyMenu'
10 | parameters:'[{type:'int'
11 | name:'menuid'
12 | isOut:'False'
13 | default:'None'}]'}{native:'True'
14 | returns:'bool'
15 | name:'DestroyMenu'
16 | parameters:'[{type:'int'
17 | name:'menuid'
18 | isOut:'False'
19 | default:'None'}]'}{native:'True'
20 | returns:'bool'
21 | name:'DestroyMenu'
22 | parameters:'[{type:'int'
23 | name:'menuid'
24 | isOut:'False'
25 | default:'None'}]'}{native:'True'
26 | returns:'bool'
27 | name:'DestroyMenu'
28 | parameters:'[{type:'int'
29 | name:'menuid'
30 | isOut:'False'
31 | default:'None'}]'}{native:'True'
32 | returns:'bool'
33 | name:'DestroyMenu'
34 | parameters:'[{type:'int'
35 | name:'menuid'
36 | isOut:'False'
37 | default:'None'}]'}{native:'True'
38 | returns:'bool'
39 | name:'DestroyMenu'
40 | parameters:'[{type:'int'
41 | name:'menuid'
42 | isOut:'False'
43 | default:'None'}]'}{native:'True'
44 | returns:'bool'
45 | name:'DestroyMenu'
46 | parameters:'[{type:'int'
47 | name:'menuid'
48 | isOut:'False'
49 | default:'None'}]'}{native:'True'
50 | returns:'bool'
51 | name:'DestroyMenu'
52 | parameters:'[{type:'int'
53 | name:'arg0'
54 | isOut:'False'
55 | default:'None'}]'}{native:'True'
56 | returns:'bool'
57 | name:'DestroyMenu'
58 | parameters:'[{type:'int'
59 | name:'arg0'
60 | isOut:'False'
61 | default:'None'}]'}{native:'True'
62 | returns:'bool'
63 | name:'DestroyMenu'
64 | parameters:'[{type:'int'
65 | name:'arg0'
66 | isOut:'False'
67 | default:'None'}]'}{native:'True'
68 | returns:'bool'
69 | name:'DestroyMenu'
70 | parameters:'[{type:'int'
71 | name:'arg0'
72 | isOut:'False'
73 | default:'None'}]'}{native:'True'
74 | returns:'bool'
75 | name:'DestroyMenu'
76 | parameters:'[{type:'int'
77 | name:'arg0'
78 | isOut:'False'
79 | default:'None'}]'}{native:'True'
80 | returns:'bool'
81 | name:'DestroyMenu'
82 | parameters:'[{type:'int'
83 | name:'arg0'
84 | isOut:'False'
85 | default:'None'}]'}{native:'True'
86 | returns:'bool'
87 | name:'DestroyMenu'
88 | parameters:'[{type:'int'
89 | name:'arg0'
90 | isOut:'False'
91 | default:'None'}]'}{native:'True'
92 | returns:'bool'
93 | name:'DestroyMenu'
94 | parameters:'[{type:'int'
95 | name:'arg0'
96 | isOut:'False'
97 | default:'None'}]'}{native:'True'
98 | returns:'bool'
99 | name:'DestroyMenu'
100 | parameters:'[{type:'int'
101 | name:'arg0'
102 | isOut:'False'
103 | default:'None'}]'}{native:'True'
104 | returns:'bool'
105 | name:'DestroyMenu'
106 | parameters:'[{type:'int'
107 | name:'arg0'
108 | isOut:'False'
109 | default:'None'}]'}{native:'True'
110 | returns:'bool'
111 | name:'DestroyMenu'
112 | parameters:'[{type:'int'
113 | name:'arg0'
114 | isOut:'False'
115 | default:'None'}]'}{native:'True'
116 | returns:'bool'
117 | name:'DestroyMenu'
118 | parameters:'[{type:'int'
119 | name:'arg0'
120 | isOut:'False'
121 | default:'None'}]'}{native:'True'
122 | returns:'bool'
123 | name:'DestroyMenu'
124 | parameters:'[{type:'int'
125 | name:'arg0'
126 | isOut:'False'
127 | default:'None'}]'}{native:'True'
128 | returns:'bool'
129 | name:'DestroyMenu'
130 | parameters:'[{type:'int'
131 | name:'arg0'
132 | isOut:'False'
133 | default:'None'}]'}{native:'True'
134 | returns:'bool'
135 | name:'DestroyMenu'
136 | parameters:'[{type:'int'
137 | name:'arg0'
138 | isOut:'False'
139 | default:'None'}]'}{native:'True'
140 | returns:'bool'
141 | name:'DestroyMenu'
142 | parameters:'[{type:'int'
143 | name:'arg0'
144 | isOut:'False'
145 | default:'None'}]'}{native:'True'
146 | returns:'bool'
147 | name:'DestroyMenu'
148 | parameters:'[{type:'int'
149 | name:'arg0'
150 | isOut:'False'
151 | default:'None'}]'}{native:'True'
152 | returns:'bool'
153 | name:'DestroyMenu'
154 | parameters:'[{type:'int'
155 | name:'arg0'
156 | isOut:'False'
157 | default:'None'}]'}{native:'True'
158 | returns:'bool'
159 | name:'DestroyMenu'
160 | parameters:'[{type:'int'
161 | name:'arg0'
162 | isOut:'False'
163 | default:'None'}]'}{native:'True'
164 | returns:'bool'
165 | name:'DestroyMenu'
166 | parameters:'[{type:'int'
167 | name:'arg0'
168 | isOut:'False'
169 | default:'None'}]'}{native:'True'
170 | returns:'bool'
171 | name:'DestroyMenu'
172 | parameters:'[{type:'int'
173 | name:'arg0'
174 | isOut:'False'
175 | default:'None'}]'}{native:'True'
176 | returns:'bool'
177 | name:'DestroyMenu'
178 | parameters:'[{type:'int'
179 | name:'arg0'
180 | isOut:'False'
181 | default:'None'}]'}{native:'True'
182 | returns:'bool'
183 | name:'DestroyMenu'
184 | parameters:'[{type:'int'
185 | name:'arg0'
186 | isOut:'False'
187 | default:'None'}]'}{native:'True'
188 | returns:'bool'
189 | name:'DestroyMenu'
190 | parameters:'[{type:'int'
191 | name:'arg0'
192 | isOut:'False'
193 | default:'None'}]'}{native:'True'
194 | returns:'bool'
195 | name:'DestroyMenu'
196 | parameters:'[{type:'int'
197 | name:'arg0'
198 | isOut:'False'
199 | default:'None'}]'}{native:'True'
200 | returns:'bool'
201 | name:'DestroyMenu'
202 | parameters:'[{type:'int'
203 | name:'arg0'
204 | isOut:'False'
205 | default:'None'}]'}{native:'True'
206 | returns:'bool'
207 | name:'DestroyMenu'
208 | parameters:'[{type:'int'
209 | name:'arg0'
210 | isOut:'False'
211 | default:'None'}]'}{native:'True'
212 | returns:'bool'
213 | name:'DestroyMenu'
214 | parameters:'[{type:'int'
215 | name:'arg0'
216 | isOut:'False'
217 | default:'None'}]'}{native:'True'
218 | returns:'bool'
219 | name:'DestroyMenu'
220 | parameters:'[{type:'int'
221 | name:'arg0'
222 | isOut:'False'
223 | default:'None'}]'}{native:'True'
224 | returns:'bool'
225 | name:'DestroyMenu'
226 | parameters:'[{type:'int'
227 | name:'arg0'
228 | isOut:'False'
229 | default:'None'}]'}{native:'True'
230 | returns:'bool'
231 | name:'DestroyMenu'
232 | parameters:'[{type:'int'
233 | name:'arg0'
234 | isOut:'False'
235 | default:'None'}]'}{native:'True'
236 | returns:'bool'
237 | name:'DestroyMenu'
238 | parameters:'[{type:'int'
239 | name:'arg0'
240 | isOut:'False'
241 | default:'None'}]'}
--------------------------------------------------------------------------------
/scripts/json/DisableInteriorEnterExits.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'bool'
3 | name:'DisableInteriorEnterExits'
4 | parameters:'[]'}{native:'True'
5 | returns:'bool'
6 | name:'DisableInteriorEnterExits'
7 | parameters:'[]'}{native:'True'
8 | returns:'bool'
9 | name:'DisableInteriorEnterExits'
10 | parameters:'[]'}{native:'True'
11 | returns:'bool'
12 | name:'DisableInteriorEnterExits'
13 | parameters:'[]'}{native:'True'
14 | returns:'bool'
15 | name:'DisableInteriorEnterExits'
16 | parameters:'[]'}{native:'True'
17 | returns:'bool'
18 | name:'DisableInteriorEnterExits'
19 | parameters:'[]'}{native:'True'
20 | returns:'bool'
21 | name:'DisableInteriorEnterExits'
22 | parameters:'[]'}{native:'True'
23 | returns:'bool'
24 | name:'DisableInteriorEnterExits'
25 | parameters:'[]'}{native:'True'
26 | returns:'bool'
27 | name:'DisableInteriorEnterExits'
28 | parameters:'[]'}{native:'True'
29 | returns:'bool'
30 | name:'DisableInteriorEnterExits'
31 | parameters:'[]'}{native:'True'
32 | returns:'bool'
33 | name:'DisableInteriorEnterExits'
34 | parameters:'[]'}{native:'True'
35 | returns:'bool'
36 | name:'DisableInteriorEnterExits'
37 | parameters:'[]'}{native:'True'
38 | returns:'bool'
39 | name:'DisableInteriorEnterExits'
40 | parameters:'[]'}{native:'True'
41 | returns:'bool'
42 | name:'DisableInteriorEnterExits'
43 | parameters:'[]'}{native:'True'
44 | returns:'bool'
45 | name:'DisableInteriorEnterExits'
46 | parameters:'[]'}{native:'True'
47 | returns:'bool'
48 | name:'DisableInteriorEnterExits'
49 | parameters:'[]'}{native:'True'
50 | returns:'bool'
51 | name:'DisableInteriorEnterExits'
52 | parameters:'[]'}{native:'True'
53 | returns:'bool'
54 | name:'DisableInteriorEnterExits'
55 | parameters:'[]'}{native:'True'
56 | returns:'bool'
57 | name:'DisableInteriorEnterExits'
58 | parameters:'[]'}{native:'True'
59 | returns:'bool'
60 | name:'DisableInteriorEnterExits'
61 | parameters:'[]'}{native:'True'
62 | returns:'bool'
63 | name:'DisableInteriorEnterExits'
64 | parameters:'[]'}{native:'True'
65 | returns:'bool'
66 | name:'DisableInteriorEnterExits'
67 | parameters:'[]'}{native:'True'
68 | returns:'bool'
69 | name:'DisableInteriorEnterExits'
70 | parameters:'[]'}{native:'True'
71 | returns:'bool'
72 | name:'DisableInteriorEnterExits'
73 | parameters:'[]'}{native:'True'
74 | returns:'bool'
75 | name:'DisableInteriorEnterExits'
76 | parameters:'[]'}{native:'True'
77 | returns:'bool'
78 | name:'DisableInteriorEnterExits'
79 | parameters:'[]'}{native:'True'
80 | returns:'bool'
81 | name:'DisableInteriorEnterExits'
82 | parameters:'[]'}{native:'True'
83 | returns:'bool'
84 | name:'DisableInteriorEnterExits'
85 | parameters:'[]'}{native:'True'
86 | returns:'bool'
87 | name:'DisableInteriorEnterExits'
88 | parameters:'[]'}{native:'True'
89 | returns:'bool'
90 | name:'DisableInteriorEnterExits'
91 | parameters:'[]'}{native:'True'
92 | returns:'bool'
93 | name:'DisableInteriorEnterExits'
94 | parameters:'[]'}{native:'True'
95 | returns:'bool'
96 | name:'DisableInteriorEnterExits'
97 | parameters:'[]'}{native:'True'
98 | returns:'bool'
99 | name:'DisableInteriorEnterExits'
100 | parameters:'[]'}{native:'True'
101 | returns:'bool'
102 | name:'DisableInteriorEnterExits'
103 | parameters:'[]'}{native:'True'
104 | returns:'bool'
105 | name:'DisableInteriorEnterExits'
106 | parameters:'[]'}{native:'True'
107 | returns:'bool'
108 | name:'DisableInteriorEnterExits'
109 | parameters:'[]'}{native:'True'
110 | returns:'bool'
111 | name:'DisableInteriorEnterExits'
112 | parameters:'[]'}{native:'True'
113 | returns:'bool'
114 | name:'DisableInteriorEnterExits'
115 | parameters:'[]'}{native:'True'
116 | returns:'bool'
117 | name:'DisableInteriorEnterExits'
118 | parameters:'[]'}{native:'True'
119 | returns:'bool'
120 | name:'DisableInteriorEnterExits'
121 | parameters:'[]'}{native:'True'
122 | returns:'bool'
123 | name:'DisableInteriorEnterExits'
124 | parameters:'[]'}{native:'True'
125 | returns:'bool'
126 | name:'DisableInteriorEnterExits'
127 | parameters:'[]'}
--------------------------------------------------------------------------------
/scripts/json/DisableNameTagLOS.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'bool'
3 | name:'DisableNameTagLOS'
4 | parameters:'[]'}{native:'True'
5 | returns:'bool'
6 | name:'DisableNameTagLOS'
7 | parameters:'[]'}{native:'True'
8 | returns:'bool'
9 | name:'DisableNameTagLOS'
10 | parameters:'[]'}{native:'True'
11 | returns:'bool'
12 | name:'DisableNameTagLOS'
13 | parameters:'[]'}{native:'True'
14 | returns:'bool'
15 | name:'DisableNameTagLOS'
16 | parameters:'[]'}{native:'True'
17 | returns:'bool'
18 | name:'DisableNameTagLOS'
19 | parameters:'[]'}{native:'True'
20 | returns:'bool'
21 | name:'DisableNameTagLOS'
22 | parameters:'[]'}{native:'True'
23 | returns:'bool'
24 | name:'DisableNameTagLOS'
25 | parameters:'[]'}{native:'True'
26 | returns:'bool'
27 | name:'DisableNameTagLOS'
28 | parameters:'[]'}{native:'True'
29 | returns:'bool'
30 | name:'DisableNameTagLOS'
31 | parameters:'[]'}{native:'True'
32 | returns:'bool'
33 | name:'DisableNameTagLOS'
34 | parameters:'[]'}{native:'True'
35 | returns:'bool'
36 | name:'DisableNameTagLOS'
37 | parameters:'[]'}{native:'True'
38 | returns:'bool'
39 | name:'DisableNameTagLOS'
40 | parameters:'[]'}{native:'True'
41 | returns:'bool'
42 | name:'DisableNameTagLOS'
43 | parameters:'[]'}{native:'True'
44 | returns:'bool'
45 | name:'DisableNameTagLOS'
46 | parameters:'[]'}{native:'True'
47 | returns:'bool'
48 | name:'DisableNameTagLOS'
49 | parameters:'[]'}{native:'True'
50 | returns:'bool'
51 | name:'DisableNameTagLOS'
52 | parameters:'[]'}{native:'True'
53 | returns:'bool'
54 | name:'DisableNameTagLOS'
55 | parameters:'[]'}{native:'True'
56 | returns:'bool'
57 | name:'DisableNameTagLOS'
58 | parameters:'[]'}{native:'True'
59 | returns:'bool'
60 | name:'DisableNameTagLOS'
61 | parameters:'[]'}{native:'True'
62 | returns:'bool'
63 | name:'DisableNameTagLOS'
64 | parameters:'[]'}{native:'True'
65 | returns:'bool'
66 | name:'DisableNameTagLOS'
67 | parameters:'[]'}{native:'True'
68 | returns:'bool'
69 | name:'DisableNameTagLOS'
70 | parameters:'[]'}{native:'True'
71 | returns:'bool'
72 | name:'DisableNameTagLOS'
73 | parameters:'[]'}{native:'True'
74 | returns:'bool'
75 | name:'DisableNameTagLOS'
76 | parameters:'[]'}{native:'True'
77 | returns:'bool'
78 | name:'DisableNameTagLOS'
79 | parameters:'[]'}{native:'True'
80 | returns:'bool'
81 | name:'DisableNameTagLOS'
82 | parameters:'[]'}{native:'True'
83 | returns:'bool'
84 | name:'DisableNameTagLOS'
85 | parameters:'[]'}{native:'True'
86 | returns:'bool'
87 | name:'DisableNameTagLOS'
88 | parameters:'[]'}{native:'True'
89 | returns:'bool'
90 | name:'DisableNameTagLOS'
91 | parameters:'[]'}{native:'True'
92 | returns:'bool'
93 | name:'DisableNameTagLOS'
94 | parameters:'[]'}{native:'True'
95 | returns:'bool'
96 | name:'DisableNameTagLOS'
97 | parameters:'[]'}{native:'True'
98 | returns:'bool'
99 | name:'DisableNameTagLOS'
100 | parameters:'[]'}{native:'True'
101 | returns:'bool'
102 | name:'DisableNameTagLOS'
103 | parameters:'[]'}{native:'True'
104 | returns:'bool'
105 | name:'DisableNameTagLOS'
106 | parameters:'[]'}{native:'True'
107 | returns:'bool'
108 | name:'DisableNameTagLOS'
109 | parameters:'[]'}{native:'True'
110 | returns:'bool'
111 | name:'DisableNameTagLOS'
112 | parameters:'[]'}{native:'True'
113 | returns:'bool'
114 | name:'DisableNameTagLOS'
115 | parameters:'[]'}{native:'True'
116 | returns:'bool'
117 | name:'DisableNameTagLOS'
118 | parameters:'[]'}{native:'True'
119 | returns:'bool'
120 | name:'DisableNameTagLOS'
121 | parameters:'[]'}{native:'True'
122 | returns:'bool'
123 | name:'DisableNameTagLOS'
124 | parameters:'[]'}{native:'True'
125 | returns:'bool'
126 | name:'DisableNameTagLOS'
127 | parameters:'[]'}
--------------------------------------------------------------------------------
/scripts/json/EnableVehicleFriendlyFire.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'bool'
3 | name:'EnableVehicleFriendlyFire'
4 | parameters:'[]'}{native:'True'
5 | returns:'bool'
6 | name:'EnableVehicleFriendlyFire'
7 | parameters:'[]'}{native:'True'
8 | returns:'bool'
9 | name:'EnableVehicleFriendlyFire'
10 | parameters:'[]'}{native:'True'
11 | returns:'bool'
12 | name:'EnableVehicleFriendlyFire'
13 | parameters:'[]'}{native:'True'
14 | returns:'bool'
15 | name:'EnableVehicleFriendlyFire'
16 | parameters:'[]'}{native:'True'
17 | returns:'bool'
18 | name:'EnableVehicleFriendlyFire'
19 | parameters:'[]'}{native:'True'
20 | returns:'bool'
21 | name:'EnableVehicleFriendlyFire'
22 | parameters:'[]'}{native:'True'
23 | returns:'bool'
24 | name:'EnableVehicleFriendlyFire'
25 | parameters:'[]'}{native:'True'
26 | returns:'bool'
27 | name:'EnableVehicleFriendlyFire'
28 | parameters:'[]'}{native:'True'
29 | returns:'bool'
30 | name:'EnableVehicleFriendlyFire'
31 | parameters:'[]'}{native:'True'
32 | returns:'bool'
33 | name:'EnableVehicleFriendlyFire'
34 | parameters:'[]'}{native:'True'
35 | returns:'bool'
36 | name:'EnableVehicleFriendlyFire'
37 | parameters:'[]'}{native:'True'
38 | returns:'bool'
39 | name:'EnableVehicleFriendlyFire'
40 | parameters:'[]'}{native:'True'
41 | returns:'bool'
42 | name:'EnableVehicleFriendlyFire'
43 | parameters:'[]'}{native:'True'
44 | returns:'bool'
45 | name:'EnableVehicleFriendlyFire'
46 | parameters:'[]'}{native:'True'
47 | returns:'bool'
48 | name:'EnableVehicleFriendlyFire'
49 | parameters:'[]'}{native:'True'
50 | returns:'bool'
51 | name:'EnableVehicleFriendlyFire'
52 | parameters:'[]'}{native:'True'
53 | returns:'bool'
54 | name:'EnableVehicleFriendlyFire'
55 | parameters:'[]'}{native:'True'
56 | returns:'bool'
57 | name:'EnableVehicleFriendlyFire'
58 | parameters:'[]'}{native:'True'
59 | returns:'bool'
60 | name:'EnableVehicleFriendlyFire'
61 | parameters:'[]'}{native:'True'
62 | returns:'bool'
63 | name:'EnableVehicleFriendlyFire'
64 | parameters:'[]'}{native:'True'
65 | returns:'bool'
66 | name:'EnableVehicleFriendlyFire'
67 | parameters:'[]'}{native:'True'
68 | returns:'bool'
69 | name:'EnableVehicleFriendlyFire'
70 | parameters:'[]'}{native:'True'
71 | returns:'bool'
72 | name:'EnableVehicleFriendlyFire'
73 | parameters:'[]'}{native:'True'
74 | returns:'bool'
75 | name:'EnableVehicleFriendlyFire'
76 | parameters:'[]'}{native:'True'
77 | returns:'bool'
78 | name:'EnableVehicleFriendlyFire'
79 | parameters:'[]'}{native:'True'
80 | returns:'bool'
81 | name:'EnableVehicleFriendlyFire'
82 | parameters:'[]'}{native:'True'
83 | returns:'bool'
84 | name:'EnableVehicleFriendlyFire'
85 | parameters:'[]'}{native:'True'
86 | returns:'bool'
87 | name:'EnableVehicleFriendlyFire'
88 | parameters:'[]'}{native:'True'
89 | returns:'bool'
90 | name:'EnableVehicleFriendlyFire'
91 | parameters:'[]'}{native:'True'
92 | returns:'bool'
93 | name:'EnableVehicleFriendlyFire'
94 | parameters:'[]'}{native:'True'
95 | returns:'bool'
96 | name:'EnableVehicleFriendlyFire'
97 | parameters:'[]'}{native:'True'
98 | returns:'bool'
99 | name:'EnableVehicleFriendlyFire'
100 | parameters:'[]'}{native:'True'
101 | returns:'bool'
102 | name:'EnableVehicleFriendlyFire'
103 | parameters:'[]'}{native:'True'
104 | returns:'bool'
105 | name:'EnableVehicleFriendlyFire'
106 | parameters:'[]'}{native:'True'
107 | returns:'bool'
108 | name:'EnableVehicleFriendlyFire'
109 | parameters:'[]'}{native:'True'
110 | returns:'bool'
111 | name:'EnableVehicleFriendlyFire'
112 | parameters:'[]'}{native:'True'
113 | returns:'bool'
114 | name:'EnableVehicleFriendlyFire'
115 | parameters:'[]'}{native:'True'
116 | returns:'bool'
117 | name:'EnableVehicleFriendlyFire'
118 | parameters:'[]'}{native:'True'
119 | returns:'bool'
120 | name:'EnableVehicleFriendlyFire'
121 | parameters:'[]'}{native:'True'
122 | returns:'bool'
123 | name:'EnableVehicleFriendlyFire'
124 | parameters:'[]'}{native:'True'
125 | returns:'bool'
126 | name:'EnableVehicleFriendlyFire'
127 | parameters:'[]'}
--------------------------------------------------------------------------------
/scripts/json/GameModeExit.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'bool'
3 | name:'GameModeExit'
4 | parameters:'[]'}{native:'True'
5 | returns:'bool'
6 | name:'GameModeExit'
7 | parameters:'[]'}{native:'True'
8 | returns:'bool'
9 | name:'GameModeExit'
10 | parameters:'[]'}{native:'True'
11 | returns:'bool'
12 | name:'GameModeExit'
13 | parameters:'[]'}{native:'True'
14 | returns:'bool'
15 | name:'GameModeExit'
16 | parameters:'[]'}{native:'True'
17 | returns:'bool'
18 | name:'GameModeExit'
19 | parameters:'[]'}{native:'True'
20 | returns:'bool'
21 | name:'GameModeExit'
22 | parameters:'[]'}{native:'True'
23 | returns:'bool'
24 | name:'GameModeExit'
25 | parameters:'[]'}{native:'True'
26 | returns:'bool'
27 | name:'GameModeExit'
28 | parameters:'[]'}{native:'True'
29 | returns:'bool'
30 | name:'GameModeExit'
31 | parameters:'[]'}{native:'True'
32 | returns:'bool'
33 | name:'GameModeExit'
34 | parameters:'[]'}{native:'True'
35 | returns:'bool'
36 | name:'GameModeExit'
37 | parameters:'[]'}{native:'True'
38 | returns:'bool'
39 | name:'GameModeExit'
40 | parameters:'[]'}{native:'True'
41 | returns:'bool'
42 | name:'GameModeExit'
43 | parameters:'[]'}{native:'True'
44 | returns:'bool'
45 | name:'GameModeExit'
46 | parameters:'[]'}{native:'True'
47 | returns:'bool'
48 | name:'GameModeExit'
49 | parameters:'[]'}{native:'True'
50 | returns:'bool'
51 | name:'GameModeExit'
52 | parameters:'[]'}{native:'True'
53 | returns:'bool'
54 | name:'GameModeExit'
55 | parameters:'[]'}{native:'True'
56 | returns:'bool'
57 | name:'GameModeExit'
58 | parameters:'[]'}{native:'True'
59 | returns:'bool'
60 | name:'GameModeExit'
61 | parameters:'[]'}{native:'True'
62 | returns:'bool'
63 | name:'GameModeExit'
64 | parameters:'[]'}{native:'True'
65 | returns:'bool'
66 | name:'GameModeExit'
67 | parameters:'[]'}{native:'True'
68 | returns:'bool'
69 | name:'GameModeExit'
70 | parameters:'[]'}{native:'True'
71 | returns:'bool'
72 | name:'GameModeExit'
73 | parameters:'[]'}{native:'True'
74 | returns:'bool'
75 | name:'GameModeExit'
76 | parameters:'[]'}{native:'True'
77 | returns:'bool'
78 | name:'GameModeExit'
79 | parameters:'[]'}{native:'True'
80 | returns:'bool'
81 | name:'GameModeExit'
82 | parameters:'[]'}{native:'True'
83 | returns:'bool'
84 | name:'GameModeExit'
85 | parameters:'[]'}{native:'True'
86 | returns:'bool'
87 | name:'GameModeExit'
88 | parameters:'[]'}{native:'True'
89 | returns:'bool'
90 | name:'GameModeExit'
91 | parameters:'[]'}{native:'True'
92 | returns:'bool'
93 | name:'GameModeExit'
94 | parameters:'[]'}{native:'True'
95 | returns:'bool'
96 | name:'GameModeExit'
97 | parameters:'[]'}{native:'True'
98 | returns:'bool'
99 | name:'GameModeExit'
100 | parameters:'[]'}{native:'True'
101 | returns:'bool'
102 | name:'GameModeExit'
103 | parameters:'[]'}{native:'True'
104 | returns:'bool'
105 | name:'GameModeExit'
106 | parameters:'[]'}{native:'True'
107 | returns:'bool'
108 | name:'GameModeExit'
109 | parameters:'[]'}{native:'True'
110 | returns:'bool'
111 | name:'GameModeExit'
112 | parameters:'[]'}{native:'True'
113 | returns:'bool'
114 | name:'GameModeExit'
115 | parameters:'[]'}{native:'True'
116 | returns:'bool'
117 | name:'GameModeExit'
118 | parameters:'[]'}{native:'True'
119 | returns:'bool'
120 | name:'GameModeExit'
121 | parameters:'[]'}{native:'True'
122 | returns:'bool'
123 | name:'GameModeExit'
124 | parameters:'[]'}{native:'True'
125 | returns:'bool'
126 | name:'GameModeExit'
127 | parameters:'[]'}
--------------------------------------------------------------------------------
/scripts/json/GetActorPoolSize.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'int'
3 | name:'GetActorPoolSize'
4 | parameters:'[]'}{native:'True'
5 | returns:'int'
6 | name:'GetActorPoolSize'
7 | parameters:'[]'}{native:'True'
8 | returns:'int'
9 | name:'GetActorPoolSize'
10 | parameters:'[]'}{native:'True'
11 | returns:'int'
12 | name:'GetActorPoolSize'
13 | parameters:'[]'}{native:'True'
14 | returns:'int'
15 | name:'GetActorPoolSize'
16 | parameters:'[]'}{native:'True'
17 | returns:'int'
18 | name:'GetActorPoolSize'
19 | parameters:'[]'}{native:'True'
20 | returns:'int'
21 | name:'GetActorPoolSize'
22 | parameters:'[]'}{native:'True'
23 | returns:'int'
24 | name:'GetActorPoolSize'
25 | parameters:'[]'}{native:'True'
26 | returns:'int'
27 | name:'GetActorPoolSize'
28 | parameters:'[]'}{native:'True'
29 | returns:'int'
30 | name:'GetActorPoolSize'
31 | parameters:'[]'}{native:'True'
32 | returns:'int'
33 | name:'GetActorPoolSize'
34 | parameters:'[]'}{native:'True'
35 | returns:'int'
36 | name:'GetActorPoolSize'
37 | parameters:'[]'}{native:'True'
38 | returns:'int'
39 | name:'GetActorPoolSize'
40 | parameters:'[]'}{native:'True'
41 | returns:'int'
42 | name:'GetActorPoolSize'
43 | parameters:'[]'}{native:'True'
44 | returns:'int'
45 | name:'GetActorPoolSize'
46 | parameters:'[]'}{native:'True'
47 | returns:'int'
48 | name:'GetActorPoolSize'
49 | parameters:'[]'}{native:'True'
50 | returns:'int'
51 | name:'GetActorPoolSize'
52 | parameters:'[]'}{native:'True'
53 | returns:'int'
54 | name:'GetActorPoolSize'
55 | parameters:'[]'}{native:'True'
56 | returns:'int'
57 | name:'GetActorPoolSize'
58 | parameters:'[]'}{native:'True'
59 | returns:'int'
60 | name:'GetActorPoolSize'
61 | parameters:'[]'}{native:'True'
62 | returns:'int'
63 | name:'GetActorPoolSize'
64 | parameters:'[]'}{native:'True'
65 | returns:'int'
66 | name:'GetActorPoolSize'
67 | parameters:'[]'}{native:'True'
68 | returns:'int'
69 | name:'GetActorPoolSize'
70 | parameters:'[]'}{native:'True'
71 | returns:'int'
72 | name:'GetActorPoolSize'
73 | parameters:'[]'}{native:'True'
74 | returns:'int'
75 | name:'GetActorPoolSize'
76 | parameters:'[]'}{native:'True'
77 | returns:'int'
78 | name:'GetActorPoolSize'
79 | parameters:'[]'}{native:'True'
80 | returns:'int'
81 | name:'GetActorPoolSize'
82 | parameters:'[]'}{native:'True'
83 | returns:'int'
84 | name:'GetActorPoolSize'
85 | parameters:'[]'}{native:'True'
86 | returns:'int'
87 | name:'GetActorPoolSize'
88 | parameters:'[]'}{native:'True'
89 | returns:'int'
90 | name:'GetActorPoolSize'
91 | parameters:'[]'}{native:'True'
92 | returns:'int'
93 | name:'GetActorPoolSize'
94 | parameters:'[]'}{native:'True'
95 | returns:'int'
96 | name:'GetActorPoolSize'
97 | parameters:'[]'}{native:'True'
98 | returns:'int'
99 | name:'GetActorPoolSize'
100 | parameters:'[]'}{native:'True'
101 | returns:'int'
102 | name:'GetActorPoolSize'
103 | parameters:'[]'}{native:'True'
104 | returns:'int'
105 | name:'GetActorPoolSize'
106 | parameters:'[]'}{native:'True'
107 | returns:'int'
108 | name:'GetActorPoolSize'
109 | parameters:'[]'}{native:'True'
110 | returns:'int'
111 | name:'GetActorPoolSize'
112 | parameters:'[]'}{native:'True'
113 | returns:'int'
114 | name:'GetActorPoolSize'
115 | parameters:'[]'}{native:'True'
116 | returns:'int'
117 | name:'GetActorPoolSize'
118 | parameters:'[]'}{native:'True'
119 | returns:'int'
120 | name:'GetActorPoolSize'
121 | parameters:'[]'}{native:'True'
122 | returns:'int'
123 | name:'GetActorPoolSize'
124 | parameters:'[]'}{native:'True'
125 | returns:'int'
126 | name:'GetActorPoolSize'
127 | parameters:'[]'}
--------------------------------------------------------------------------------
/scripts/json/GetGravity.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'float'
3 | name:'GetGravity'
4 | parameters:'[]'}{native:'True'
5 | returns:'float'
6 | name:'GetGravity'
7 | parameters:'[]'}{native:'True'
8 | returns:'float'
9 | name:'GetGravity'
10 | parameters:'[]'}{native:'True'
11 | returns:'float'
12 | name:'GetGravity'
13 | parameters:'[]'}{native:'True'
14 | returns:'float'
15 | name:'GetGravity'
16 | parameters:'[]'}{native:'True'
17 | returns:'float'
18 | name:'GetGravity'
19 | parameters:'[]'}{native:'True'
20 | returns:'float'
21 | name:'GetGravity'
22 | parameters:'[]'}{native:'True'
23 | returns:'float'
24 | name:'GetGravity'
25 | parameters:'[]'}{native:'True'
26 | returns:'float'
27 | name:'GetGravity'
28 | parameters:'[]'}{native:'True'
29 | returns:'float'
30 | name:'GetGravity'
31 | parameters:'[]'}{native:'True'
32 | returns:'float'
33 | name:'GetGravity'
34 | parameters:'[]'}{native:'True'
35 | returns:'float'
36 | name:'GetGravity'
37 | parameters:'[]'}{native:'True'
38 | returns:'float'
39 | name:'GetGravity'
40 | parameters:'[]'}{native:'True'
41 | returns:'float'
42 | name:'GetGravity'
43 | parameters:'[]'}{native:'True'
44 | returns:'float'
45 | name:'GetGravity'
46 | parameters:'[]'}{native:'True'
47 | returns:'float'
48 | name:'GetGravity'
49 | parameters:'[]'}{native:'True'
50 | returns:'float'
51 | name:'GetGravity'
52 | parameters:'[]'}{native:'True'
53 | returns:'float'
54 | name:'GetGravity'
55 | parameters:'[]'}{native:'True'
56 | returns:'float'
57 | name:'GetGravity'
58 | parameters:'[]'}{native:'True'
59 | returns:'float'
60 | name:'GetGravity'
61 | parameters:'[]'}{native:'True'
62 | returns:'float'
63 | name:'GetGravity'
64 | parameters:'[]'}{native:'True'
65 | returns:'float'
66 | name:'GetGravity'
67 | parameters:'[]'}{native:'True'
68 | returns:'float'
69 | name:'GetGravity'
70 | parameters:'[]'}{native:'True'
71 | returns:'float'
72 | name:'GetGravity'
73 | parameters:'[]'}{native:'True'
74 | returns:'float'
75 | name:'GetGravity'
76 | parameters:'[]'}{native:'True'
77 | returns:'float'
78 | name:'GetGravity'
79 | parameters:'[]'}{native:'True'
80 | returns:'float'
81 | name:'GetGravity'
82 | parameters:'[]'}{native:'True'
83 | returns:'float'
84 | name:'GetGravity'
85 | parameters:'[]'}{native:'True'
86 | returns:'float'
87 | name:'GetGravity'
88 | parameters:'[]'}{native:'True'
89 | returns:'float'
90 | name:'GetGravity'
91 | parameters:'[]'}{native:'True'
92 | returns:'float'
93 | name:'GetGravity'
94 | parameters:'[]'}{native:'True'
95 | returns:'float'
96 | name:'GetGravity'
97 | parameters:'[]'}{native:'True'
98 | returns:'float'
99 | name:'GetGravity'
100 | parameters:'[]'}{native:'True'
101 | returns:'float'
102 | name:'GetGravity'
103 | parameters:'[]'}{native:'True'
104 | returns:'float'
105 | name:'GetGravity'
106 | parameters:'[]'}{native:'True'
107 | returns:'float'
108 | name:'GetGravity'
109 | parameters:'[]'}{native:'True'
110 | returns:'float'
111 | name:'GetGravity'
112 | parameters:'[]'}{native:'True'
113 | returns:'float'
114 | name:'GetGravity'
115 | parameters:'[]'}{native:'True'
116 | returns:'float'
117 | name:'GetGravity'
118 | parameters:'[]'}{native:'True'
119 | returns:'float'
120 | name:'GetGravity'
121 | parameters:'[]'}{native:'True'
122 | returns:'float'
123 | name:'GetGravity'
124 | parameters:'[]'}{native:'True'
125 | returns:'float'
126 | name:'GetGravity'
127 | parameters:'[]'}
--------------------------------------------------------------------------------
/scripts/json/GetMaxPlayers.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'int'
3 | name:'GetMaxPlayers'
4 | parameters:'[]'}{native:'True'
5 | returns:'int'
6 | name:'GetMaxPlayers'
7 | parameters:'[]'}{native:'True'
8 | returns:'int'
9 | name:'GetMaxPlayers'
10 | parameters:'[]'}{native:'True'
11 | returns:'int'
12 | name:'GetMaxPlayers'
13 | parameters:'[]'}{native:'True'
14 | returns:'int'
15 | name:'GetMaxPlayers'
16 | parameters:'[]'}{native:'True'
17 | returns:'int'
18 | name:'GetMaxPlayers'
19 | parameters:'[]'}{native:'True'
20 | returns:'int'
21 | name:'GetMaxPlayers'
22 | parameters:'[]'}{native:'True'
23 | returns:'int'
24 | name:'GetMaxPlayers'
25 | parameters:'[]'}{native:'True'
26 | returns:'int'
27 | name:'GetMaxPlayers'
28 | parameters:'[]'}{native:'True'
29 | returns:'int'
30 | name:'GetMaxPlayers'
31 | parameters:'[]'}{native:'True'
32 | returns:'int'
33 | name:'GetMaxPlayers'
34 | parameters:'[]'}{native:'True'
35 | returns:'int'
36 | name:'GetMaxPlayers'
37 | parameters:'[]'}{native:'True'
38 | returns:'int'
39 | name:'GetMaxPlayers'
40 | parameters:'[]'}{native:'True'
41 | returns:'int'
42 | name:'GetMaxPlayers'
43 | parameters:'[]'}{native:'True'
44 | returns:'int'
45 | name:'GetMaxPlayers'
46 | parameters:'[]'}{native:'True'
47 | returns:'int'
48 | name:'GetMaxPlayers'
49 | parameters:'[]'}{native:'True'
50 | returns:'int'
51 | name:'GetMaxPlayers'
52 | parameters:'[]'}{native:'True'
53 | returns:'int'
54 | name:'GetMaxPlayers'
55 | parameters:'[]'}{native:'True'
56 | returns:'int'
57 | name:'GetMaxPlayers'
58 | parameters:'[]'}{native:'True'
59 | returns:'int'
60 | name:'GetMaxPlayers'
61 | parameters:'[]'}{native:'True'
62 | returns:'int'
63 | name:'GetMaxPlayers'
64 | parameters:'[]'}{native:'True'
65 | returns:'int'
66 | name:'GetMaxPlayers'
67 | parameters:'[]'}{native:'True'
68 | returns:'int'
69 | name:'GetMaxPlayers'
70 | parameters:'[]'}{native:'True'
71 | returns:'int'
72 | name:'GetMaxPlayers'
73 | parameters:'[]'}{native:'True'
74 | returns:'int'
75 | name:'GetMaxPlayers'
76 | parameters:'[]'}{native:'True'
77 | returns:'int'
78 | name:'GetMaxPlayers'
79 | parameters:'[]'}{native:'True'
80 | returns:'int'
81 | name:'GetMaxPlayers'
82 | parameters:'[]'}{native:'True'
83 | returns:'int'
84 | name:'GetMaxPlayers'
85 | parameters:'[]'}{native:'True'
86 | returns:'int'
87 | name:'GetMaxPlayers'
88 | parameters:'[]'}{native:'True'
89 | returns:'int'
90 | name:'GetMaxPlayers'
91 | parameters:'[]'}{native:'True'
92 | returns:'int'
93 | name:'GetMaxPlayers'
94 | parameters:'[]'}{native:'True'
95 | returns:'int'
96 | name:'GetMaxPlayers'
97 | parameters:'[]'}{native:'True'
98 | returns:'int'
99 | name:'GetMaxPlayers'
100 | parameters:'[]'}{native:'True'
101 | returns:'int'
102 | name:'GetMaxPlayers'
103 | parameters:'[]'}{native:'True'
104 | returns:'int'
105 | name:'GetMaxPlayers'
106 | parameters:'[]'}{native:'True'
107 | returns:'int'
108 | name:'GetMaxPlayers'
109 | parameters:'[]'}{native:'True'
110 | returns:'int'
111 | name:'GetMaxPlayers'
112 | parameters:'[]'}{native:'True'
113 | returns:'int'
114 | name:'GetMaxPlayers'
115 | parameters:'[]'}{native:'True'
116 | returns:'int'
117 | name:'GetMaxPlayers'
118 | parameters:'[]'}{native:'True'
119 | returns:'int'
120 | name:'GetMaxPlayers'
121 | parameters:'[]'}{native:'True'
122 | returns:'int'
123 | name:'GetMaxPlayers'
124 | parameters:'[]'}{native:'True'
125 | returns:'int'
126 | name:'GetMaxPlayers'
127 | parameters:'[]'}
--------------------------------------------------------------------------------
/scripts/json/GetPlayerPoolSize.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'int'
3 | name:'GetPlayerPoolSize'
4 | parameters:'[]'}{native:'True'
5 | returns:'int'
6 | name:'GetPlayerPoolSize'
7 | parameters:'[]'}{native:'True'
8 | returns:'int'
9 | name:'GetPlayerPoolSize'
10 | parameters:'[]'}{native:'True'
11 | returns:'int'
12 | name:'GetPlayerPoolSize'
13 | parameters:'[]'}{native:'True'
14 | returns:'int'
15 | name:'GetPlayerPoolSize'
16 | parameters:'[]'}{native:'True'
17 | returns:'int'
18 | name:'GetPlayerPoolSize'
19 | parameters:'[]'}{native:'True'
20 | returns:'int'
21 | name:'GetPlayerPoolSize'
22 | parameters:'[]'}{native:'True'
23 | returns:'int'
24 | name:'GetPlayerPoolSize'
25 | parameters:'[]'}{native:'True'
26 | returns:'int'
27 | name:'GetPlayerPoolSize'
28 | parameters:'[]'}{native:'True'
29 | returns:'int'
30 | name:'GetPlayerPoolSize'
31 | parameters:'[]'}{native:'True'
32 | returns:'int'
33 | name:'GetPlayerPoolSize'
34 | parameters:'[]'}{native:'True'
35 | returns:'int'
36 | name:'GetPlayerPoolSize'
37 | parameters:'[]'}{native:'True'
38 | returns:'int'
39 | name:'GetPlayerPoolSize'
40 | parameters:'[]'}{native:'True'
41 | returns:'int'
42 | name:'GetPlayerPoolSize'
43 | parameters:'[]'}{native:'True'
44 | returns:'int'
45 | name:'GetPlayerPoolSize'
46 | parameters:'[]'}{native:'True'
47 | returns:'int'
48 | name:'GetPlayerPoolSize'
49 | parameters:'[]'}{native:'True'
50 | returns:'int'
51 | name:'GetPlayerPoolSize'
52 | parameters:'[]'}{native:'True'
53 | returns:'int'
54 | name:'GetPlayerPoolSize'
55 | parameters:'[]'}{native:'True'
56 | returns:'int'
57 | name:'GetPlayerPoolSize'
58 | parameters:'[]'}{native:'True'
59 | returns:'int'
60 | name:'GetPlayerPoolSize'
61 | parameters:'[]'}{native:'True'
62 | returns:'int'
63 | name:'GetPlayerPoolSize'
64 | parameters:'[]'}{native:'True'
65 | returns:'int'
66 | name:'GetPlayerPoolSize'
67 | parameters:'[]'}{native:'True'
68 | returns:'int'
69 | name:'GetPlayerPoolSize'
70 | parameters:'[]'}{native:'True'
71 | returns:'int'
72 | name:'GetPlayerPoolSize'
73 | parameters:'[]'}{native:'True'
74 | returns:'int'
75 | name:'GetPlayerPoolSize'
76 | parameters:'[]'}{native:'True'
77 | returns:'int'
78 | name:'GetPlayerPoolSize'
79 | parameters:'[]'}{native:'True'
80 | returns:'int'
81 | name:'GetPlayerPoolSize'
82 | parameters:'[]'}{native:'True'
83 | returns:'int'
84 | name:'GetPlayerPoolSize'
85 | parameters:'[]'}{native:'True'
86 | returns:'int'
87 | name:'GetPlayerPoolSize'
88 | parameters:'[]'}{native:'True'
89 | returns:'int'
90 | name:'GetPlayerPoolSize'
91 | parameters:'[]'}{native:'True'
92 | returns:'int'
93 | name:'GetPlayerPoolSize'
94 | parameters:'[]'}{native:'True'
95 | returns:'int'
96 | name:'GetPlayerPoolSize'
97 | parameters:'[]'}{native:'True'
98 | returns:'int'
99 | name:'GetPlayerPoolSize'
100 | parameters:'[]'}{native:'True'
101 | returns:'int'
102 | name:'GetPlayerPoolSize'
103 | parameters:'[]'}{native:'True'
104 | returns:'int'
105 | name:'GetPlayerPoolSize'
106 | parameters:'[]'}{native:'True'
107 | returns:'int'
108 | name:'GetPlayerPoolSize'
109 | parameters:'[]'}{native:'True'
110 | returns:'int'
111 | name:'GetPlayerPoolSize'
112 | parameters:'[]'}{native:'True'
113 | returns:'int'
114 | name:'GetPlayerPoolSize'
115 | parameters:'[]'}{native:'True'
116 | returns:'int'
117 | name:'GetPlayerPoolSize'
118 | parameters:'[]'}{native:'True'
119 | returns:'int'
120 | name:'GetPlayerPoolSize'
121 | parameters:'[]'}{native:'True'
122 | returns:'int'
123 | name:'GetPlayerPoolSize'
124 | parameters:'[]'}{native:'True'
125 | returns:'int'
126 | name:'GetPlayerPoolSize'
127 | parameters:'[]'}
--------------------------------------------------------------------------------
/scripts/json/GetSVarsUpperIndex.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'int'
3 | name:'GetSVarsUpperIndex'
4 | parameters:'[]'}{native:'True'
5 | returns:'int'
6 | name:'GetSVarsUpperIndex'
7 | parameters:'[]'}{native:'True'
8 | returns:'int'
9 | name:'GetSVarsUpperIndex'
10 | parameters:'[]'}{native:'True'
11 | returns:'int'
12 | name:'GetSVarsUpperIndex'
13 | parameters:'[]'}{native:'True'
14 | returns:'int'
15 | name:'GetSVarsUpperIndex'
16 | parameters:'[]'}{native:'True'
17 | returns:'int'
18 | name:'GetSVarsUpperIndex'
19 | parameters:'[]'}{native:'True'
20 | returns:'int'
21 | name:'GetSVarsUpperIndex'
22 | parameters:'[]'}{native:'True'
23 | returns:'int'
24 | name:'GetSVarsUpperIndex'
25 | parameters:'[]'}{native:'True'
26 | returns:'int'
27 | name:'GetSVarsUpperIndex'
28 | parameters:'[]'}{native:'True'
29 | returns:'int'
30 | name:'GetSVarsUpperIndex'
31 | parameters:'[]'}{native:'True'
32 | returns:'int'
33 | name:'GetSVarsUpperIndex'
34 | parameters:'[]'}{native:'True'
35 | returns:'int'
36 | name:'GetSVarsUpperIndex'
37 | parameters:'[]'}{native:'True'
38 | returns:'int'
39 | name:'GetSVarsUpperIndex'
40 | parameters:'[]'}{native:'True'
41 | returns:'int'
42 | name:'GetSVarsUpperIndex'
43 | parameters:'[]'}{native:'True'
44 | returns:'int'
45 | name:'GetSVarsUpperIndex'
46 | parameters:'[]'}{native:'True'
47 | returns:'int'
48 | name:'GetSVarsUpperIndex'
49 | parameters:'[]'}{native:'True'
50 | returns:'int'
51 | name:'GetSVarsUpperIndex'
52 | parameters:'[]'}{native:'True'
53 | returns:'int'
54 | name:'GetSVarsUpperIndex'
55 | parameters:'[]'}{native:'True'
56 | returns:'int'
57 | name:'GetSVarsUpperIndex'
58 | parameters:'[]'}{native:'True'
59 | returns:'int'
60 | name:'GetSVarsUpperIndex'
61 | parameters:'[]'}{native:'True'
62 | returns:'int'
63 | name:'GetSVarsUpperIndex'
64 | parameters:'[]'}{native:'True'
65 | returns:'int'
66 | name:'GetSVarsUpperIndex'
67 | parameters:'[]'}{native:'True'
68 | returns:'int'
69 | name:'GetSVarsUpperIndex'
70 | parameters:'[]'}{native:'True'
71 | returns:'int'
72 | name:'GetSVarsUpperIndex'
73 | parameters:'[]'}{native:'True'
74 | returns:'int'
75 | name:'GetSVarsUpperIndex'
76 | parameters:'[]'}{native:'True'
77 | returns:'int'
78 | name:'GetSVarsUpperIndex'
79 | parameters:'[]'}{native:'True'
80 | returns:'int'
81 | name:'GetSVarsUpperIndex'
82 | parameters:'[]'}{native:'True'
83 | returns:'int'
84 | name:'GetSVarsUpperIndex'
85 | parameters:'[]'}{native:'True'
86 | returns:'int'
87 | name:'GetSVarsUpperIndex'
88 | parameters:'[]'}{native:'True'
89 | returns:'int'
90 | name:'GetSVarsUpperIndex'
91 | parameters:'[]'}{native:'True'
92 | returns:'int'
93 | name:'GetSVarsUpperIndex'
94 | parameters:'[]'}{native:'True'
95 | returns:'int'
96 | name:'GetSVarsUpperIndex'
97 | parameters:'[]'}{native:'True'
98 | returns:'int'
99 | name:'GetSVarsUpperIndex'
100 | parameters:'[]'}{native:'True'
101 | returns:'int'
102 | name:'GetSVarsUpperIndex'
103 | parameters:'[]'}{native:'True'
104 | returns:'int'
105 | name:'GetSVarsUpperIndex'
106 | parameters:'[]'}{native:'True'
107 | returns:'int'
108 | name:'GetSVarsUpperIndex'
109 | parameters:'[]'}{native:'True'
110 | returns:'int'
111 | name:'GetSVarsUpperIndex'
112 | parameters:'[]'}{native:'True'
113 | returns:'int'
114 | name:'GetSVarsUpperIndex'
115 | parameters:'[]'}{native:'True'
116 | returns:'int'
117 | name:'GetSVarsUpperIndex'
118 | parameters:'[]'}{native:'True'
119 | returns:'int'
120 | name:'GetSVarsUpperIndex'
121 | parameters:'[]'}{native:'True'
122 | returns:'int'
123 | name:'GetSVarsUpperIndex'
124 | parameters:'[]'}{native:'True'
125 | returns:'int'
126 | name:'GetSVarsUpperIndex'
127 | parameters:'[]'}
--------------------------------------------------------------------------------
/scripts/json/GetServerTickRate.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'int'
3 | name:'GetServerTickRate'
4 | parameters:'[]'}{native:'True'
5 | returns:'int'
6 | name:'GetServerTickRate'
7 | parameters:'[]'}{native:'True'
8 | returns:'int'
9 | name:'GetServerTickRate'
10 | parameters:'[]'}{native:'True'
11 | returns:'int'
12 | name:'GetServerTickRate'
13 | parameters:'[]'}{native:'True'
14 | returns:'int'
15 | name:'GetServerTickRate'
16 | parameters:'[]'}{native:'True'
17 | returns:'int'
18 | name:'GetServerTickRate'
19 | parameters:'[]'}{native:'True'
20 | returns:'int'
21 | name:'GetServerTickRate'
22 | parameters:'[]'}{native:'True'
23 | returns:'int'
24 | name:'GetServerTickRate'
25 | parameters:'[]'}{native:'True'
26 | returns:'int'
27 | name:'GetServerTickRate'
28 | parameters:'[]'}{native:'True'
29 | returns:'int'
30 | name:'GetServerTickRate'
31 | parameters:'[]'}{native:'True'
32 | returns:'int'
33 | name:'GetServerTickRate'
34 | parameters:'[]'}{native:'True'
35 | returns:'int'
36 | name:'GetServerTickRate'
37 | parameters:'[]'}{native:'True'
38 | returns:'int'
39 | name:'GetServerTickRate'
40 | parameters:'[]'}{native:'True'
41 | returns:'int'
42 | name:'GetServerTickRate'
43 | parameters:'[]'}{native:'True'
44 | returns:'int'
45 | name:'GetServerTickRate'
46 | parameters:'[]'}{native:'True'
47 | returns:'int'
48 | name:'GetServerTickRate'
49 | parameters:'[]'}{native:'True'
50 | returns:'int'
51 | name:'GetServerTickRate'
52 | parameters:'[]'}{native:'True'
53 | returns:'int'
54 | name:'GetServerTickRate'
55 | parameters:'[]'}{native:'True'
56 | returns:'int'
57 | name:'GetServerTickRate'
58 | parameters:'[]'}{native:'True'
59 | returns:'int'
60 | name:'GetServerTickRate'
61 | parameters:'[]'}{native:'True'
62 | returns:'int'
63 | name:'GetServerTickRate'
64 | parameters:'[]'}{native:'True'
65 | returns:'int'
66 | name:'GetServerTickRate'
67 | parameters:'[]'}{native:'True'
68 | returns:'int'
69 | name:'GetServerTickRate'
70 | parameters:'[]'}{native:'True'
71 | returns:'int'
72 | name:'GetServerTickRate'
73 | parameters:'[]'}{native:'True'
74 | returns:'int'
75 | name:'GetServerTickRate'
76 | parameters:'[]'}{native:'True'
77 | returns:'int'
78 | name:'GetServerTickRate'
79 | parameters:'[]'}{native:'True'
80 | returns:'int'
81 | name:'GetServerTickRate'
82 | parameters:'[]'}{native:'True'
83 | returns:'int'
84 | name:'GetServerTickRate'
85 | parameters:'[]'}{native:'True'
86 | returns:'int'
87 | name:'GetServerTickRate'
88 | parameters:'[]'}{native:'True'
89 | returns:'int'
90 | name:'GetServerTickRate'
91 | parameters:'[]'}{native:'True'
92 | returns:'int'
93 | name:'GetServerTickRate'
94 | parameters:'[]'}{native:'True'
95 | returns:'int'
96 | name:'GetServerTickRate'
97 | parameters:'[]'}{native:'True'
98 | returns:'int'
99 | name:'GetServerTickRate'
100 | parameters:'[]'}{native:'True'
101 | returns:'int'
102 | name:'GetServerTickRate'
103 | parameters:'[]'}{native:'True'
104 | returns:'int'
105 | name:'GetServerTickRate'
106 | parameters:'[]'}{native:'True'
107 | returns:'int'
108 | name:'GetServerTickRate'
109 | parameters:'[]'}{native:'True'
110 | returns:'int'
111 | name:'GetServerTickRate'
112 | parameters:'[]'}{native:'True'
113 | returns:'int'
114 | name:'GetServerTickRate'
115 | parameters:'[]'}{native:'True'
116 | returns:'int'
117 | name:'GetServerTickRate'
118 | parameters:'[]'}{native:'True'
119 | returns:'int'
120 | name:'GetServerTickRate'
121 | parameters:'[]'}{native:'True'
122 | returns:'int'
123 | name:'GetServerTickRate'
124 | parameters:'[]'}{native:'True'
125 | returns:'int'
126 | name:'GetServerTickRate'
127 | parameters:'[]'}
--------------------------------------------------------------------------------
/scripts/json/GetTickCount.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'int'
3 | name:'GetTickCount'
4 | parameters:'[]'}{native:'True'
5 | returns:'int'
6 | name:'GetTickCount'
7 | parameters:'[]'}{native:'True'
8 | returns:'int'
9 | name:'GetTickCount'
10 | parameters:'[]'}{native:'True'
11 | returns:'int'
12 | name:'GetTickCount'
13 | parameters:'[]'}{native:'True'
14 | returns:'int'
15 | name:'GetTickCount'
16 | parameters:'[]'}{native:'True'
17 | returns:'int'
18 | name:'GetTickCount'
19 | parameters:'[]'}{native:'True'
20 | returns:'int'
21 | name:'GetTickCount'
22 | parameters:'[]'}{native:'True'
23 | returns:'int'
24 | name:'GetTickCount'
25 | parameters:'[]'}{native:'True'
26 | returns:'int'
27 | name:'GetTickCount'
28 | parameters:'[]'}{native:'True'
29 | returns:'int'
30 | name:'GetTickCount'
31 | parameters:'[]'}{native:'True'
32 | returns:'int'
33 | name:'GetTickCount'
34 | parameters:'[]'}{native:'True'
35 | returns:'int'
36 | name:'GetTickCount'
37 | parameters:'[]'}{native:'True'
38 | returns:'int'
39 | name:'GetTickCount'
40 | parameters:'[]'}{native:'True'
41 | returns:'int'
42 | name:'GetTickCount'
43 | parameters:'[]'}{native:'True'
44 | returns:'int'
45 | name:'GetTickCount'
46 | parameters:'[]'}{native:'True'
47 | returns:'int'
48 | name:'GetTickCount'
49 | parameters:'[]'}{native:'True'
50 | returns:'int'
51 | name:'GetTickCount'
52 | parameters:'[]'}{native:'True'
53 | returns:'int'
54 | name:'GetTickCount'
55 | parameters:'[]'}{native:'True'
56 | returns:'int'
57 | name:'GetTickCount'
58 | parameters:'[]'}{native:'True'
59 | returns:'int'
60 | name:'GetTickCount'
61 | parameters:'[]'}{native:'True'
62 | returns:'int'
63 | name:'GetTickCount'
64 | parameters:'[]'}{native:'True'
65 | returns:'int'
66 | name:'GetTickCount'
67 | parameters:'[]'}{native:'True'
68 | returns:'int'
69 | name:'GetTickCount'
70 | parameters:'[]'}{native:'True'
71 | returns:'int'
72 | name:'GetTickCount'
73 | parameters:'[]'}{native:'True'
74 | returns:'int'
75 | name:'GetTickCount'
76 | parameters:'[]'}{native:'True'
77 | returns:'int'
78 | name:'GetTickCount'
79 | parameters:'[]'}{native:'True'
80 | returns:'int'
81 | name:'GetTickCount'
82 | parameters:'[]'}{native:'True'
83 | returns:'int'
84 | name:'GetTickCount'
85 | parameters:'[]'}{native:'True'
86 | returns:'int'
87 | name:'GetTickCount'
88 | parameters:'[]'}{native:'True'
89 | returns:'int'
90 | name:'GetTickCount'
91 | parameters:'[]'}{native:'True'
92 | returns:'int'
93 | name:'GetTickCount'
94 | parameters:'[]'}{native:'True'
95 | returns:'int'
96 | name:'GetTickCount'
97 | parameters:'[]'}{native:'True'
98 | returns:'int'
99 | name:'GetTickCount'
100 | parameters:'[]'}{native:'True'
101 | returns:'int'
102 | name:'GetTickCount'
103 | parameters:'[]'}{native:'True'
104 | returns:'int'
105 | name:'GetTickCount'
106 | parameters:'[]'}{native:'True'
107 | returns:'int'
108 | name:'GetTickCount'
109 | parameters:'[]'}{native:'True'
110 | returns:'int'
111 | name:'GetTickCount'
112 | parameters:'[]'}{native:'True'
113 | returns:'int'
114 | name:'GetTickCount'
115 | parameters:'[]'}{native:'True'
116 | returns:'int'
117 | name:'GetTickCount'
118 | parameters:'[]'}{native:'True'
119 | returns:'int'
120 | name:'GetTickCount'
121 | parameters:'[]'}{native:'True'
122 | returns:'int'
123 | name:'GetTickCount'
124 | parameters:'[]'}{native:'True'
125 | returns:'int'
126 | name:'GetTickCount'
127 | parameters:'[]'}
--------------------------------------------------------------------------------
/scripts/json/GetVehiclePoolSize.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'int'
3 | name:'GetVehiclePoolSize'
4 | parameters:'[]'}{native:'True'
5 | returns:'int'
6 | name:'GetVehiclePoolSize'
7 | parameters:'[]'}{native:'True'
8 | returns:'int'
9 | name:'GetVehiclePoolSize'
10 | parameters:'[]'}{native:'True'
11 | returns:'int'
12 | name:'GetVehiclePoolSize'
13 | parameters:'[]'}{native:'True'
14 | returns:'int'
15 | name:'GetVehiclePoolSize'
16 | parameters:'[]'}{native:'True'
17 | returns:'int'
18 | name:'GetVehiclePoolSize'
19 | parameters:'[]'}{native:'True'
20 | returns:'int'
21 | name:'GetVehiclePoolSize'
22 | parameters:'[]'}{native:'True'
23 | returns:'int'
24 | name:'GetVehiclePoolSize'
25 | parameters:'[]'}{native:'True'
26 | returns:'int'
27 | name:'GetVehiclePoolSize'
28 | parameters:'[]'}{native:'True'
29 | returns:'int'
30 | name:'GetVehiclePoolSize'
31 | parameters:'[]'}{native:'True'
32 | returns:'int'
33 | name:'GetVehiclePoolSize'
34 | parameters:'[]'}{native:'True'
35 | returns:'int'
36 | name:'GetVehiclePoolSize'
37 | parameters:'[]'}{native:'True'
38 | returns:'int'
39 | name:'GetVehiclePoolSize'
40 | parameters:'[]'}{native:'True'
41 | returns:'int'
42 | name:'GetVehiclePoolSize'
43 | parameters:'[]'}{native:'True'
44 | returns:'int'
45 | name:'GetVehiclePoolSize'
46 | parameters:'[]'}{native:'True'
47 | returns:'int'
48 | name:'GetVehiclePoolSize'
49 | parameters:'[]'}{native:'True'
50 | returns:'int'
51 | name:'GetVehiclePoolSize'
52 | parameters:'[]'}{native:'True'
53 | returns:'int'
54 | name:'GetVehiclePoolSize'
55 | parameters:'[]'}{native:'True'
56 | returns:'int'
57 | name:'GetVehiclePoolSize'
58 | parameters:'[]'}{native:'True'
59 | returns:'int'
60 | name:'GetVehiclePoolSize'
61 | parameters:'[]'}{native:'True'
62 | returns:'int'
63 | name:'GetVehiclePoolSize'
64 | parameters:'[]'}{native:'True'
65 | returns:'int'
66 | name:'GetVehiclePoolSize'
67 | parameters:'[]'}{native:'True'
68 | returns:'int'
69 | name:'GetVehiclePoolSize'
70 | parameters:'[]'}{native:'True'
71 | returns:'int'
72 | name:'GetVehiclePoolSize'
73 | parameters:'[]'}{native:'True'
74 | returns:'int'
75 | name:'GetVehiclePoolSize'
76 | parameters:'[]'}{native:'True'
77 | returns:'int'
78 | name:'GetVehiclePoolSize'
79 | parameters:'[]'}{native:'True'
80 | returns:'int'
81 | name:'GetVehiclePoolSize'
82 | parameters:'[]'}{native:'True'
83 | returns:'int'
84 | name:'GetVehiclePoolSize'
85 | parameters:'[]'}{native:'True'
86 | returns:'int'
87 | name:'GetVehiclePoolSize'
88 | parameters:'[]'}{native:'True'
89 | returns:'int'
90 | name:'GetVehiclePoolSize'
91 | parameters:'[]'}{native:'True'
92 | returns:'int'
93 | name:'GetVehiclePoolSize'
94 | parameters:'[]'}{native:'True'
95 | returns:'int'
96 | name:'GetVehiclePoolSize'
97 | parameters:'[]'}{native:'True'
98 | returns:'int'
99 | name:'GetVehiclePoolSize'
100 | parameters:'[]'}{native:'True'
101 | returns:'int'
102 | name:'GetVehiclePoolSize'
103 | parameters:'[]'}{native:'True'
104 | returns:'int'
105 | name:'GetVehiclePoolSize'
106 | parameters:'[]'}{native:'True'
107 | returns:'int'
108 | name:'GetVehiclePoolSize'
109 | parameters:'[]'}{native:'True'
110 | returns:'int'
111 | name:'GetVehiclePoolSize'
112 | parameters:'[]'}{native:'True'
113 | returns:'int'
114 | name:'GetVehiclePoolSize'
115 | parameters:'[]'}{native:'True'
116 | returns:'int'
117 | name:'GetVehiclePoolSize'
118 | parameters:'[]'}{native:'True'
119 | returns:'int'
120 | name:'GetVehiclePoolSize'
121 | parameters:'[]'}{native:'True'
122 | returns:'int'
123 | name:'GetVehiclePoolSize'
124 | parameters:'[]'}{native:'True'
125 | returns:'int'
126 | name:'GetVehiclePoolSize'
127 | parameters:'[]'}
--------------------------------------------------------------------------------
/scripts/json/Kick.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'bool'
3 | name:'Kick'
4 | parameters:'[{type:'int'
5 | name:'playerid'
6 | isOut:'False'
7 | default:'None'}]'}{native:'True'
8 | returns:'bool'
9 | name:'Kick'
10 | parameters:'[{type:'int'
11 | name:'playerid'
12 | isOut:'False'
13 | default:'None'}]'}{native:'True'
14 | returns:'bool'
15 | name:'Kick'
16 | parameters:'[{type:'int'
17 | name:'playerid'
18 | isOut:'False'
19 | default:'None'}]'}{native:'True'
20 | returns:'bool'
21 | name:'Kick'
22 | parameters:'[{type:'int'
23 | name:'playerid'
24 | isOut:'False'
25 | default:'None'}]'}{native:'True'
26 | returns:'bool'
27 | name:'Kick'
28 | parameters:'[{type:'int'
29 | name:'playerid'
30 | isOut:'False'
31 | default:'None'}]'}{native:'True'
32 | returns:'bool'
33 | name:'Kick'
34 | parameters:'[{type:'int'
35 | name:'playerid'
36 | isOut:'False'
37 | default:'None'}]'}{native:'True'
38 | returns:'bool'
39 | name:'Kick'
40 | parameters:'[{type:'int'
41 | name:'playerid'
42 | isOut:'False'
43 | default:'None'}]'}{native:'True'
44 | returns:'bool'
45 | name:'Kick'
46 | parameters:'[{type:'int'
47 | name:'playerid'
48 | isOut:'False'
49 | default:'None'}]'}{native:'True'
50 | returns:'bool'
51 | name:'Kick'
52 | parameters:'[{type:'int'
53 | name:'arg0'
54 | isOut:'False'
55 | default:'None'}]'}{native:'True'
56 | returns:'bool'
57 | name:'Kick'
58 | parameters:'[{type:'int'
59 | name:'arg0'
60 | isOut:'False'
61 | default:'None'}]'}{native:'True'
62 | returns:'bool'
63 | name:'Kick'
64 | parameters:'[{type:'int'
65 | name:'arg0'
66 | isOut:'False'
67 | default:'None'}]'}{native:'True'
68 | returns:'bool'
69 | name:'Kick'
70 | parameters:'[{type:'int'
71 | name:'arg0'
72 | isOut:'False'
73 | default:'None'}]'}{native:'True'
74 | returns:'bool'
75 | name:'Kick'
76 | parameters:'[{type:'int'
77 | name:'arg0'
78 | isOut:'False'
79 | default:'None'}]'}{native:'True'
80 | returns:'bool'
81 | name:'Kick'
82 | parameters:'[{type:'int'
83 | name:'arg0'
84 | isOut:'False'
85 | default:'None'}]'}{native:'True'
86 | returns:'bool'
87 | name:'Kick'
88 | parameters:'[{type:'int'
89 | name:'arg0'
90 | isOut:'False'
91 | default:'None'}]'}{native:'True'
92 | returns:'bool'
93 | name:'Kick'
94 | parameters:'[{type:'int'
95 | name:'arg0'
96 | isOut:'False'
97 | default:'None'}]'}{native:'True'
98 | returns:'bool'
99 | name:'Kick'
100 | parameters:'[{type:'int'
101 | name:'arg0'
102 | isOut:'False'
103 | default:'None'}]'}{native:'True'
104 | returns:'bool'
105 | name:'Kick'
106 | parameters:'[{type:'int'
107 | name:'arg0'
108 | isOut:'False'
109 | default:'None'}]'}{native:'True'
110 | returns:'bool'
111 | name:'Kick'
112 | parameters:'[{type:'int'
113 | name:'arg0'
114 | isOut:'False'
115 | default:'None'}]'}{native:'True'
116 | returns:'bool'
117 | name:'Kick'
118 | parameters:'[{type:'int'
119 | name:'arg0'
120 | isOut:'False'
121 | default:'None'}]'}{native:'True'
122 | returns:'bool'
123 | name:'Kick'
124 | parameters:'[{type:'int'
125 | name:'arg0'
126 | isOut:'False'
127 | default:'None'}]'}{native:'True'
128 | returns:'bool'
129 | name:'Kick'
130 | parameters:'[{type:'int'
131 | name:'arg0'
132 | isOut:'False'
133 | default:'None'}]'}{native:'True'
134 | returns:'bool'
135 | name:'Kick'
136 | parameters:'[{type:'int'
137 | name:'arg0'
138 | isOut:'False'
139 | default:'None'}]'}{native:'True'
140 | returns:'bool'
141 | name:'Kick'
142 | parameters:'[{type:'int'
143 | name:'arg0'
144 | isOut:'False'
145 | default:'None'}]'}{native:'True'
146 | returns:'bool'
147 | name:'Kick'
148 | parameters:'[{type:'int'
149 | name:'arg0'
150 | isOut:'False'
151 | default:'None'}]'}{native:'True'
152 | returns:'bool'
153 | name:'Kick'
154 | parameters:'[{type:'int'
155 | name:'arg0'
156 | isOut:'False'
157 | default:'None'}]'}{native:'True'
158 | returns:'bool'
159 | name:'Kick'
160 | parameters:'[{type:'int'
161 | name:'arg0'
162 | isOut:'False'
163 | default:'None'}]'}{native:'True'
164 | returns:'bool'
165 | name:'Kick'
166 | parameters:'[{type:'int'
167 | name:'arg0'
168 | isOut:'False'
169 | default:'None'}]'}{native:'True'
170 | returns:'bool'
171 | name:'Kick'
172 | parameters:'[{type:'int'
173 | name:'arg0'
174 | isOut:'False'
175 | default:'None'}]'}{native:'True'
176 | returns:'bool'
177 | name:'Kick'
178 | parameters:'[{type:'int'
179 | name:'arg0'
180 | isOut:'False'
181 | default:'None'}]'}{native:'True'
182 | returns:'bool'
183 | name:'Kick'
184 | parameters:'[{type:'int'
185 | name:'arg0'
186 | isOut:'False'
187 | default:'None'}]'}{native:'True'
188 | returns:'bool'
189 | name:'Kick'
190 | parameters:'[{type:'int'
191 | name:'arg0'
192 | isOut:'False'
193 | default:'None'}]'}{native:'True'
194 | returns:'bool'
195 | name:'Kick'
196 | parameters:'[{type:'int'
197 | name:'arg0'
198 | isOut:'False'
199 | default:'None'}]'}{native:'True'
200 | returns:'bool'
201 | name:'Kick'
202 | parameters:'[{type:'int'
203 | name:'arg0'
204 | isOut:'False'
205 | default:'None'}]'}{native:'True'
206 | returns:'bool'
207 | name:'Kick'
208 | parameters:'[{type:'int'
209 | name:'arg0'
210 | isOut:'False'
211 | default:'None'}]'}{native:'True'
212 | returns:'bool'
213 | name:'Kick'
214 | parameters:'[{type:'int'
215 | name:'arg0'
216 | isOut:'False'
217 | default:'None'}]'}{native:'True'
218 | returns:'bool'
219 | name:'Kick'
220 | parameters:'[{type:'int'
221 | name:'arg0'
222 | isOut:'False'
223 | default:'None'}]'}{native:'True'
224 | returns:'bool'
225 | name:'Kick'
226 | parameters:'[{type:'int'
227 | name:'arg0'
228 | isOut:'False'
229 | default:'None'}]'}{native:'True'
230 | returns:'bool'
231 | name:'Kick'
232 | parameters:'[{type:'int'
233 | name:'arg0'
234 | isOut:'False'
235 | default:'None'}]'}{native:'True'
236 | returns:'bool'
237 | name:'Kick'
238 | parameters:'[{type:'int'
239 | name:'arg0'
240 | isOut:'False'
241 | default:'None'}]'}
--------------------------------------------------------------------------------
/scripts/json/ManualVehicleEngineAndLights.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'bool'
3 | name:'ManualVehicleEngineAndLights'
4 | parameters:'[]'}{native:'True'
5 | returns:'bool'
6 | name:'ManualVehicleEngineAndLights'
7 | parameters:'[]'}{native:'True'
8 | returns:'bool'
9 | name:'ManualVehicleEngineAndLights'
10 | parameters:'[]'}{native:'True'
11 | returns:'bool'
12 | name:'ManualVehicleEngineAndLights'
13 | parameters:'[]'}{native:'True'
14 | returns:'bool'
15 | name:'ManualVehicleEngineAndLights'
16 | parameters:'[]'}{native:'True'
17 | returns:'bool'
18 | name:'ManualVehicleEngineAndLights'
19 | parameters:'[]'}{native:'True'
20 | returns:'bool'
21 | name:'ManualVehicleEngineAndLights'
22 | parameters:'[]'}{native:'True'
23 | returns:'bool'
24 | name:'ManualVehicleEngineAndLights'
25 | parameters:'[]'}{native:'True'
26 | returns:'bool'
27 | name:'ManualVehicleEngineAndLights'
28 | parameters:'[]'}{native:'True'
29 | returns:'bool'
30 | name:'ManualVehicleEngineAndLights'
31 | parameters:'[]'}{native:'True'
32 | returns:'bool'
33 | name:'ManualVehicleEngineAndLights'
34 | parameters:'[]'}{native:'True'
35 | returns:'bool'
36 | name:'ManualVehicleEngineAndLights'
37 | parameters:'[]'}{native:'True'
38 | returns:'bool'
39 | name:'ManualVehicleEngineAndLights'
40 | parameters:'[]'}{native:'True'
41 | returns:'bool'
42 | name:'ManualVehicleEngineAndLights'
43 | parameters:'[]'}{native:'True'
44 | returns:'bool'
45 | name:'ManualVehicleEngineAndLights'
46 | parameters:'[]'}{native:'True'
47 | returns:'bool'
48 | name:'ManualVehicleEngineAndLights'
49 | parameters:'[]'}{native:'True'
50 | returns:'bool'
51 | name:'ManualVehicleEngineAndLights'
52 | parameters:'[]'}{native:'True'
53 | returns:'bool'
54 | name:'ManualVehicleEngineAndLights'
55 | parameters:'[]'}{native:'True'
56 | returns:'bool'
57 | name:'ManualVehicleEngineAndLights'
58 | parameters:'[]'}{native:'True'
59 | returns:'bool'
60 | name:'ManualVehicleEngineAndLights'
61 | parameters:'[]'}{native:'True'
62 | returns:'bool'
63 | name:'ManualVehicleEngineAndLights'
64 | parameters:'[]'}{native:'True'
65 | returns:'bool'
66 | name:'ManualVehicleEngineAndLights'
67 | parameters:'[]'}{native:'True'
68 | returns:'bool'
69 | name:'ManualVehicleEngineAndLights'
70 | parameters:'[]'}{native:'True'
71 | returns:'bool'
72 | name:'ManualVehicleEngineAndLights'
73 | parameters:'[]'}{native:'True'
74 | returns:'bool'
75 | name:'ManualVehicleEngineAndLights'
76 | parameters:'[]'}{native:'True'
77 | returns:'bool'
78 | name:'ManualVehicleEngineAndLights'
79 | parameters:'[]'}{native:'True'
80 | returns:'bool'
81 | name:'ManualVehicleEngineAndLights'
82 | parameters:'[]'}{native:'True'
83 | returns:'bool'
84 | name:'ManualVehicleEngineAndLights'
85 | parameters:'[]'}{native:'True'
86 | returns:'bool'
87 | name:'ManualVehicleEngineAndLights'
88 | parameters:'[]'}{native:'True'
89 | returns:'bool'
90 | name:'ManualVehicleEngineAndLights'
91 | parameters:'[]'}{native:'True'
92 | returns:'bool'
93 | name:'ManualVehicleEngineAndLights'
94 | parameters:'[]'}{native:'True'
95 | returns:'bool'
96 | name:'ManualVehicleEngineAndLights'
97 | parameters:'[]'}{native:'True'
98 | returns:'bool'
99 | name:'ManualVehicleEngineAndLights'
100 | parameters:'[]'}{native:'True'
101 | returns:'bool'
102 | name:'ManualVehicleEngineAndLights'
103 | parameters:'[]'}{native:'True'
104 | returns:'bool'
105 | name:'ManualVehicleEngineAndLights'
106 | parameters:'[]'}{native:'True'
107 | returns:'bool'
108 | name:'ManualVehicleEngineAndLights'
109 | parameters:'[]'}{native:'True'
110 | returns:'bool'
111 | name:'ManualVehicleEngineAndLights'
112 | parameters:'[]'}{native:'True'
113 | returns:'bool'
114 | name:'ManualVehicleEngineAndLights'
115 | parameters:'[]'}{native:'True'
116 | returns:'bool'
117 | name:'ManualVehicleEngineAndLights'
118 | parameters:'[]'}{native:'True'
119 | returns:'bool'
120 | name:'ManualVehicleEngineAndLights'
121 | parameters:'[]'}{native:'True'
122 | returns:'bool'
123 | name:'ManualVehicleEngineAndLights'
124 | parameters:'[]'}{native:'True'
125 | returns:'bool'
126 | name:'ManualVehicleEngineAndLights'
127 | parameters:'[]'}
--------------------------------------------------------------------------------
/scripts/json/SetWeather.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'bool'
3 | name:'SetWeather'
4 | parameters:'[{type:'int'
5 | name:'weatherid'
6 | isOut:'False'
7 | default:'None'}]'}{native:'True'
8 | returns:'bool'
9 | name:'SetWeather'
10 | parameters:'[{type:'int'
11 | name:'weatherid'
12 | isOut:'False'
13 | default:'None'}]'}{native:'True'
14 | returns:'bool'
15 | name:'SetWeather'
16 | parameters:'[{type:'int'
17 | name:'weatherid'
18 | isOut:'False'
19 | default:'None'}]'}{native:'True'
20 | returns:'bool'
21 | name:'SetWeather'
22 | parameters:'[{type:'int'
23 | name:'weatherid'
24 | isOut:'False'
25 | default:'None'}]'}{native:'True'
26 | returns:'bool'
27 | name:'SetWeather'
28 | parameters:'[{type:'int'
29 | name:'weatherid'
30 | isOut:'False'
31 | default:'None'}]'}{native:'True'
32 | returns:'bool'
33 | name:'SetWeather'
34 | parameters:'[{type:'int'
35 | name:'weatherid'
36 | isOut:'False'
37 | default:'None'}]'}{native:'True'
38 | returns:'bool'
39 | name:'SetWeather'
40 | parameters:'[{type:'int'
41 | name:'weatherid'
42 | isOut:'False'
43 | default:'None'}]'}{native:'True'
44 | returns:'bool'
45 | name:'SetWeather'
46 | parameters:'[{type:'int'
47 | name:'weatherid'
48 | isOut:'False'
49 | default:'None'}]'}{native:'True'
50 | returns:'bool'
51 | name:'SetWeather'
52 | parameters:'[{type:'int'
53 | name:'arg0'
54 | isOut:'False'
55 | default:'None'}]'}{native:'True'
56 | returns:'bool'
57 | name:'SetWeather'
58 | parameters:'[{type:'int'
59 | name:'arg0'
60 | isOut:'False'
61 | default:'None'}]'}{native:'True'
62 | returns:'bool'
63 | name:'SetWeather'
64 | parameters:'[{type:'int'
65 | name:'arg0'
66 | isOut:'False'
67 | default:'None'}]'}{native:'True'
68 | returns:'bool'
69 | name:'SetWeather'
70 | parameters:'[{type:'int'
71 | name:'arg0'
72 | isOut:'False'
73 | default:'None'}]'}{native:'True'
74 | returns:'bool'
75 | name:'SetWeather'
76 | parameters:'[{type:'int'
77 | name:'arg0'
78 | isOut:'False'
79 | default:'None'}]'}{native:'True'
80 | returns:'bool'
81 | name:'SetWeather'
82 | parameters:'[{type:'int'
83 | name:'arg0'
84 | isOut:'False'
85 | default:'None'}]'}{native:'True'
86 | returns:'bool'
87 | name:'SetWeather'
88 | parameters:'[{type:'int'
89 | name:'arg0'
90 | isOut:'False'
91 | default:'None'}]'}{native:'True'
92 | returns:'bool'
93 | name:'SetWeather'
94 | parameters:'[{type:'int'
95 | name:'arg0'
96 | isOut:'False'
97 | default:'None'}]'}{native:'True'
98 | returns:'bool'
99 | name:'SetWeather'
100 | parameters:'[{type:'int'
101 | name:'arg0'
102 | isOut:'False'
103 | default:'None'}]'}{native:'True'
104 | returns:'bool'
105 | name:'SetWeather'
106 | parameters:'[{type:'int'
107 | name:'arg0'
108 | isOut:'False'
109 | default:'None'}]'}{native:'True'
110 | returns:'bool'
111 | name:'SetWeather'
112 | parameters:'[{type:'int'
113 | name:'arg0'
114 | isOut:'False'
115 | default:'None'}]'}{native:'True'
116 | returns:'bool'
117 | name:'SetWeather'
118 | parameters:'[{type:'int'
119 | name:'arg0'
120 | isOut:'False'
121 | default:'None'}]'}{native:'True'
122 | returns:'bool'
123 | name:'SetWeather'
124 | parameters:'[{type:'int'
125 | name:'arg0'
126 | isOut:'False'
127 | default:'None'}]'}{native:'True'
128 | returns:'bool'
129 | name:'SetWeather'
130 | parameters:'[{type:'int'
131 | name:'arg0'
132 | isOut:'False'
133 | default:'None'}]'}{native:'True'
134 | returns:'bool'
135 | name:'SetWeather'
136 | parameters:'[{type:'int'
137 | name:'arg0'
138 | isOut:'False'
139 | default:'None'}]'}{native:'True'
140 | returns:'bool'
141 | name:'SetWeather'
142 | parameters:'[{type:'int'
143 | name:'arg0'
144 | isOut:'False'
145 | default:'None'}]'}{native:'True'
146 | returns:'bool'
147 | name:'SetWeather'
148 | parameters:'[{type:'int'
149 | name:'arg0'
150 | isOut:'False'
151 | default:'None'}]'}{native:'True'
152 | returns:'bool'
153 | name:'SetWeather'
154 | parameters:'[{type:'int'
155 | name:'arg0'
156 | isOut:'False'
157 | default:'None'}]'}{native:'True'
158 | returns:'bool'
159 | name:'SetWeather'
160 | parameters:'[{type:'int'
161 | name:'arg0'
162 | isOut:'False'
163 | default:'None'}]'}{native:'True'
164 | returns:'bool'
165 | name:'SetWeather'
166 | parameters:'[{type:'int'
167 | name:'arg0'
168 | isOut:'False'
169 | default:'None'}]'}{native:'True'
170 | returns:'bool'
171 | name:'SetWeather'
172 | parameters:'[{type:'int'
173 | name:'arg0'
174 | isOut:'False'
175 | default:'None'}]'}{native:'True'
176 | returns:'bool'
177 | name:'SetWeather'
178 | parameters:'[{type:'int'
179 | name:'arg0'
180 | isOut:'False'
181 | default:'None'}]'}{native:'True'
182 | returns:'bool'
183 | name:'SetWeather'
184 | parameters:'[{type:'int'
185 | name:'arg0'
186 | isOut:'False'
187 | default:'None'}]'}{native:'True'
188 | returns:'bool'
189 | name:'SetWeather'
190 | parameters:'[{type:'int'
191 | name:'arg0'
192 | isOut:'False'
193 | default:'None'}]'}{native:'True'
194 | returns:'bool'
195 | name:'SetWeather'
196 | parameters:'[{type:'int'
197 | name:'arg0'
198 | isOut:'False'
199 | default:'None'}]'}{native:'True'
200 | returns:'bool'
201 | name:'SetWeather'
202 | parameters:'[{type:'int'
203 | name:'arg0'
204 | isOut:'False'
205 | default:'None'}]'}{native:'True'
206 | returns:'bool'
207 | name:'SetWeather'
208 | parameters:'[{type:'int'
209 | name:'arg0'
210 | isOut:'False'
211 | default:'None'}]'}{native:'True'
212 | returns:'bool'
213 | name:'SetWeather'
214 | parameters:'[{type:'int'
215 | name:'arg0'
216 | isOut:'False'
217 | default:'None'}]'}{native:'True'
218 | returns:'bool'
219 | name:'SetWeather'
220 | parameters:'[{type:'int'
221 | name:'arg0'
222 | isOut:'False'
223 | default:'None'}]'}{native:'True'
224 | returns:'bool'
225 | name:'SetWeather'
226 | parameters:'[{type:'int'
227 | name:'arg0'
228 | isOut:'False'
229 | default:'None'}]'}{native:'True'
230 | returns:'bool'
231 | name:'SetWeather'
232 | parameters:'[{type:'int'
233 | name:'arg0'
234 | isOut:'False'
235 | default:'None'}]'}{native:'True'
236 | returns:'bool'
237 | name:'SetWeather'
238 | parameters:'[{type:'int'
239 | name:'arg0'
240 | isOut:'False'
241 | default:'None'}]'}
--------------------------------------------------------------------------------
/scripts/json/UsePlayerPedAnims.txt:
--------------------------------------------------------------------------------
1 | {native:'True'
2 | returns:'bool'
3 | name:'UsePlayerPedAnims'
4 | parameters:'[]'}{native:'True'
5 | returns:'bool'
6 | name:'UsePlayerPedAnims'
7 | parameters:'[]'}{native:'True'
8 | returns:'bool'
9 | name:'UsePlayerPedAnims'
10 | parameters:'[]'}{native:'True'
11 | returns:'bool'
12 | name:'UsePlayerPedAnims'
13 | parameters:'[]'}{native:'True'
14 | returns:'bool'
15 | name:'UsePlayerPedAnims'
16 | parameters:'[]'}{native:'True'
17 | returns:'bool'
18 | name:'UsePlayerPedAnims'
19 | parameters:'[]'}{native:'True'
20 | returns:'bool'
21 | name:'UsePlayerPedAnims'
22 | parameters:'[]'}{native:'True'
23 | returns:'bool'
24 | name:'UsePlayerPedAnims'
25 | parameters:'[]'}{native:'True'
26 | returns:'bool'
27 | name:'UsePlayerPedAnims'
28 | parameters:'[]'}{native:'True'
29 | returns:'bool'
30 | name:'UsePlayerPedAnims'
31 | parameters:'[]'}{native:'True'
32 | returns:'bool'
33 | name:'UsePlayerPedAnims'
34 | parameters:'[]'}{native:'True'
35 | returns:'bool'
36 | name:'UsePlayerPedAnims'
37 | parameters:'[]'}{native:'True'
38 | returns:'bool'
39 | name:'UsePlayerPedAnims'
40 | parameters:'[]'}{native:'True'
41 | returns:'bool'
42 | name:'UsePlayerPedAnims'
43 | parameters:'[]'}{native:'True'
44 | returns:'bool'
45 | name:'UsePlayerPedAnims'
46 | parameters:'[]'}{native:'True'
47 | returns:'bool'
48 | name:'UsePlayerPedAnims'
49 | parameters:'[]'}{native:'True'
50 | returns:'bool'
51 | name:'UsePlayerPedAnims'
52 | parameters:'[]'}{native:'True'
53 | returns:'bool'
54 | name:'UsePlayerPedAnims'
55 | parameters:'[]'}{native:'True'
56 | returns:'bool'
57 | name:'UsePlayerPedAnims'
58 | parameters:'[]'}{native:'True'
59 | returns:'bool'
60 | name:'UsePlayerPedAnims'
61 | parameters:'[]'}{native:'True'
62 | returns:'bool'
63 | name:'UsePlayerPedAnims'
64 | parameters:'[]'}{native:'True'
65 | returns:'bool'
66 | name:'UsePlayerPedAnims'
67 | parameters:'[]'}{native:'True'
68 | returns:'bool'
69 | name:'UsePlayerPedAnims'
70 | parameters:'[]'}{native:'True'
71 | returns:'bool'
72 | name:'UsePlayerPedAnims'
73 | parameters:'[]'}{native:'True'
74 | returns:'bool'
75 | name:'UsePlayerPedAnims'
76 | parameters:'[]'}{native:'True'
77 | returns:'bool'
78 | name:'UsePlayerPedAnims'
79 | parameters:'[]'}{native:'True'
80 | returns:'bool'
81 | name:'UsePlayerPedAnims'
82 | parameters:'[]'}{native:'True'
83 | returns:'bool'
84 | name:'UsePlayerPedAnims'
85 | parameters:'[]'}{native:'True'
86 | returns:'bool'
87 | name:'UsePlayerPedAnims'
88 | parameters:'[]'}{native:'True'
89 | returns:'bool'
90 | name:'UsePlayerPedAnims'
91 | parameters:'[]'}{native:'True'
92 | returns:'bool'
93 | name:'UsePlayerPedAnims'
94 | parameters:'[]'}{native:'True'
95 | returns:'bool'
96 | name:'UsePlayerPedAnims'
97 | parameters:'[]'}{native:'True'
98 | returns:'bool'
99 | name:'UsePlayerPedAnims'
100 | parameters:'[]'}{native:'True'
101 | returns:'bool'
102 | name:'UsePlayerPedAnims'
103 | parameters:'[]'}{native:'True'
104 | returns:'bool'
105 | name:'UsePlayerPedAnims'
106 | parameters:'[]'}{native:'True'
107 | returns:'bool'
108 | name:'UsePlayerPedAnims'
109 | parameters:'[]'}{native:'True'
110 | returns:'bool'
111 | name:'UsePlayerPedAnims'
112 | parameters:'[]'}{native:'True'
113 | returns:'bool'
114 | name:'UsePlayerPedAnims'
115 | parameters:'[]'}{native:'True'
116 | returns:'bool'
117 | name:'UsePlayerPedAnims'
118 | parameters:'[]'}{native:'True'
119 | returns:'bool'
120 | name:'UsePlayerPedAnims'
121 | parameters:'[]'}{native:'True'
122 | returns:'bool'
123 | name:'UsePlayerPedAnims'
124 | parameters:'[]'}{native:'True'
125 | returns:'bool'
126 | name:'UsePlayerPedAnims'
127 | parameters:'[]'}
--------------------------------------------------------------------------------
/scripts/setup_workspace.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | SET WORKSPACE_DIR=%CD:\=/%
4 |
5 | git clone https://github.com/habecker/PySAMP.git
6 | git clone https://github.com/habecker/sampgdk.git
7 | git clone https://github.com/Zeex/samp-plugin-sdk.git
8 |
9 | pip install ply
10 | IF EXIST sampgdk/build (
11 | rmdir /s/q sampgdk/build
12 | )
13 | cd sampgdk
14 | mkdir build
15 | mkdir local
16 | cd build
17 | cmake .. -DSAMP_SDK_ROOT=%WORKSPACE_DIR%/samp-plugin-sdk -DSAMPGDK_STATIC=ON -DSAMPGDK_BUILD_AMALGAMATION=ON -DCMAKE_INSTALL_PREFIX=%WORKSPACE_DIR%/sampgdk/local
18 | cmake --build %WORKSPACE_DIR%/sampgdk/build --config Release
19 | cmake --build %WORKSPACE_DIR%/sampgdk/build --config Release --target install
20 | cd ../..
21 | cd PySAMP
22 | mkdir build
23 | cd build
24 | cmake -DSAMPSDK_DIR=%WORKSPACE_DIR%/samp-plugin-sdk -DSAMPGDK_DIR=%WORKSPACE_DIR%/sampgdk -DCMAKE_PREFIX_PATH="%WORKSPACE_DIR%\sampgdk\local" ../src
25 | cd ../..
26 |
27 | %WORKSPACE_DIR%/PySAMP/build/PySAMP.vcxproj
--------------------------------------------------------------------------------
/scripts/setup_workspace.sh:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pysamp/PySAMP/b147c162af3dd00ef8cd0b91c0b538d04ba5cfd2/scripts/setup_workspace.sh
--------------------------------------------------------------------------------
/src/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.15)
2 | project(PySAMP)
3 |
4 | list(APPEND CMAKE_MODULE_PATH ${SAMPGDK_DIR}/cmake)
5 | include(AMXConfig)
6 | include(AddSAMPPlugin)
7 | include(FindSAMPSDK)
8 |
9 | set(PYSAMP_MAJOR_VERSION 2)
10 | set(PYSAMP_MINOR_VERSION 1)
11 | set(PYSAMP_REVISION 0)
12 |
13 | set(PYSAMP_VERSION "${PYSAMP_MAJOR_VERSION}.${PYSAMP_MINOR_VERSION}.${PYSAMP_REVISION}")
14 | add_definitions(-DPYSAMP_VERSION=${PYSAMP_VERSION})
15 |
16 | if(MSVC)
17 | set(CMAKE_CXX_STANDARD 20)
18 | else()
19 | set(CMAKE_CXX_STANDARD 11)
20 | set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
21 | endif()
22 |
23 | add_samp_plugin(PySAMP
24 | ${SAMPSDK_DIR}/amxplugin.cpp
25 | ${SAMPGDK_DIR}/dist/sampgdk.c
26 | main.cpp
27 | main.def
28 | pysamp/pysamp.cpp
29 | pysamp/pygamemode.cpp
30 | pysamp/timer.cpp
31 | pysamp/callbacks.cpp
32 | pysamp/param_converter.cpp
33 | bindings/samp.cpp
34 | bindings/logprintf.cpp
35 | )
36 |
37 | if(MSVC AND NOT CMAKE_BUILD_TYPE MATCHES "Debug")
38 | find_package(
39 | Python3
40 | COMPONENTS Development.SABIModule
41 | REQUIRED
42 | )
43 | message(STATUS "Python3_INCLUDE_DIRS = ${Python3_INCLUDE_DIRS}")
44 | message(STATUS "Python3_SABI_LIBRARIES = ${Python3_SABI_LIBRARIES}")
45 | target_link_libraries(PySAMP Python3::SABIModule)
46 | else()
47 | find_package(
48 | Python3
49 | COMPONENTS Development.Embed
50 | REQUIRED
51 | )
52 | cmake_path(GET Python3_LIBRARIES STEM LAST_ONLY LIBPYTHON3_PATH)
53 | string(APPEND LIBPYTHON3_PATH ".so")
54 | message(STATUS "Python3_INCLUDE_DIRS = ${Python3_INCLUDE_DIRS}")
55 | message(STATUS "Python3_LIBRARIES = ${Python3_LIBRARIES}")
56 | message(STATUS "LIBPYTHON3_PATH = ${LIBPYTHON3_PATH}")
57 | target_link_libraries(PySAMP Python3::Python)
58 | endif()
59 |
60 | include_directories(
61 | ${SAMPSDK_INCLUDE_DIR}
62 | ${SAMPSDK_DIR}/amx
63 | ${SAMPGDK_DIR}/dist
64 | ${SAMPGDK_DIR}/include
65 | ${SAMPGDK_DIR}/lib/sampgdk
66 | ${Python3_INCLUDE_DIRS}
67 | ${CMAKE_CURRENT_SOURCE_DIR}
68 | ${CMAKE_CURRENT_SOURCE_DIR}/bindings
69 | ${CMAKE_CURRENT_SOURCE_DIR}/pysamp
70 | ${CMAKE_BINARY_DIR}/generated
71 | )
72 |
73 | add_definitions(-DSAMPGDK_AMALGAMATION)
74 |
75 | configure_file(config.h.in ${CMAKE_BINARY_DIR}/generated/config.h)
76 |
77 | find_package(Doxygen)
78 | if(DOXYGEN_FOUND)
79 | configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
80 | add_custom_target(doc
81 | ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
82 | WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
83 | COMMENT "Generating API documentation with Doxygen" VERBATIM
84 | )
85 | endif(DOXYGEN_FOUND)
86 |
--------------------------------------------------------------------------------
/src/Doxyfile.in:
--------------------------------------------------------------------------------
1 | OUTPUT_DIRECTORY = doc/
2 | OUTPUT_LANGUAGE = English
3 | EXTRACT_ALL = YES
--------------------------------------------------------------------------------
/src/bindings/logprintf.cpp:
--------------------------------------------------------------------------------
1 | #include "logprintf.h"
2 | #include "pysamp/pysamp.h"
3 |
4 |
5 | typedef struct
6 | {
7 | PyObject_HEAD
8 | std::string *line_buffer;
9 | } LogPrintfObject;
10 |
11 | static PyObject* LogPrintf_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
12 | {
13 | LogPrintfObject *self;
14 | self = (LogPrintfObject*)PyType_GenericAlloc(type, 0);
15 |
16 | if(self != NULL)
17 | {
18 | self->line_buffer = new std::string();
19 | }
20 |
21 | return (PyObject*)self;
22 | }
23 |
24 | static void LogPrintf_dealloc(LogPrintfObject *self)
25 | {
26 | delete self->line_buffer;
27 | PyObject_Free(self);
28 | }
29 |
30 | static PyObject* LogPrintf_write(LogPrintfObject *self, PyObject *args)
31 | {
32 | const char *text = NULL;
33 |
34 | if(!PyArg_ParseTuple(args, "es:sys.stdout.write", PySAMP::getEncoding().c_str(), &text))
35 | return NULL;
36 |
37 | std::stringstream text_stream(*(self->line_buffer) + text);
38 | std::string line, text_stream_string = text_stream.str();
39 | unsigned int num_lines = std::count(
40 | text_stream_string.begin(),
41 | text_stream_string.end(),
42 | '\n'
43 | ), printed_len = 0;
44 |
45 | for(
46 | unsigned int current_line = 0;
47 | current_line < num_lines
48 | && std::getline(text_stream, line);
49 | ++current_line
50 | )
51 | {
52 | sampgdk::logprintf(line.c_str());
53 | printed_len += line.length();
54 | }
55 |
56 | std::getline(text_stream, *(self->line_buffer));
57 |
58 | return PyLong_FromUnsignedLong(printed_len);
59 | }
60 |
61 | static PyObject* LogPrintf_flush(LogPrintfObject *self, PyObject *args)
62 | {
63 | if(self->line_buffer->length())
64 | {
65 | sampgdk::logprintf(self->line_buffer->c_str());
66 | self->line_buffer->clear();
67 | }
68 | Py_RETURN_NONE;
69 | }
70 |
71 | static PyMethodDef LogPrintf_methods[] = {
72 | {"write", (PyCFunction)LogPrintf_write, METH_VARARGS, "Writes to server_log.txt - assigned to sys.std{out,err}.write at startup."},
73 | {"flush", (PyCFunction)LogPrintf_flush, METH_VARARGS, "Flushes server_log.txt writes - empties internal line buffer into server_log.txt."},
74 | {NULL},
75 | };
76 |
77 | static PyType_Slot LogPrintfType_Slots[] = {
78 | {Py_tp_doc, (void*)PyDoc_STR("Standard output to logprintf adapter")},
79 | {Py_tp_methods, (void*)LogPrintf_methods},
80 | {Py_tp_new, (void*)LogPrintf_new},
81 | {Py_tp_dealloc, (void*)LogPrintf_dealloc},
82 | {0, NULL},
83 | };
84 |
85 | PyType_Spec LogPrintfType_Spec = {
86 | .name = "samp.LogPrintf",
87 | .basicsize = sizeof(LogPrintfObject),
88 | .itemsize = 0,
89 | .flags = Py_TPFLAGS_DEFAULT,
90 | .slots = LogPrintfType_Slots,
91 | };
92 |
--------------------------------------------------------------------------------
/src/bindings/logprintf.h:
--------------------------------------------------------------------------------
1 | #ifndef LOGPRINTF_H
2 | #define LOGPRINTF_H
3 |
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include "limited_api_python.h"
9 | #include "sampgdk.h"
10 |
11 | extern PyType_Spec LogPrintfType_Spec;
12 |
13 | #endif
14 |
--------------------------------------------------------------------------------
/src/config.h.in:
--------------------------------------------------------------------------------
1 | #ifndef CONFIG_H
2 | #define CONFIG_H
3 |
4 | #define PYSAMP_VERSION_STR "@PYSAMP_VERSION@ (" __DATE__ " " __TIME__ ")"
5 | #define PYTHON_VERSION_STR "@Python3_VERSION@"
6 |
7 | #ifndef WIN32
8 | #define PYTHON_LIBRARY "@LIBPYTHON3_PATH@"
9 | #endif
10 |
11 | #endif
12 |
--------------------------------------------------------------------------------
/src/limited_api_python.h:
--------------------------------------------------------------------------------
1 | #ifndef LIMITED_API_PYTHON_H
2 | #define LIMITED_API_PYTHON_H
3 |
4 | #ifndef _DEBUG
5 | #define Py_LIMITED_API 0x030600F0
6 | #endif
7 | #include // IWYU pragma: export
8 |
9 | #endif
10 |
--------------------------------------------------------------------------------
/src/main.cpp:
--------------------------------------------------------------------------------
1 | #include "main.h"
2 |
3 |
4 | extern void *pAMXFunctions;
5 |
6 | PLUGIN_EXPORT unsigned int PLUGIN_CALL Supports()
7 | {
8 | return sampgdk::Supports() | SUPPORTS_PROCESS_TICK;
9 | }
10 |
11 | PLUGIN_EXPORT bool PLUGIN_CALL Load(void **ppData)
12 | {
13 | pAMXFunctions = ppData[PLUGIN_DATA_AMX_EXPORTS];
14 | bool ret = sampgdk::Load(ppData);
15 |
16 | if(!getenv("PYSAMP_DISABLE_LOADING_SCREEN"))
17 | {
18 | std::stringstream stream{PYSAMP_LOADING_SCREEN};
19 | std::string line;
20 | sampgdk::logprintf("");
21 |
22 | while(std::getline(stream, line, '\n'))
23 | sampgdk::logprintf(line.c_str());
24 | }
25 |
26 | sampgdk::logprintf("\nPySAMP %s for Python %s\n", PYSAMP_VERSION_STR, PYTHON_VERSION_STR);
27 |
28 | #ifndef WIN32
29 | dlopen(PYTHON_LIBRARY, RTLD_GLOBAL | RTLD_NOW);
30 | sampgdk::logprintf("\nLoading Python library: %s\n", PYTHON_LIBRARY);
31 | #endif
32 |
33 | return ret;
34 | }
35 |
36 | PLUGIN_EXPORT void PLUGIN_CALL Unload()
37 | {
38 | PySAMP::unload();
39 | sampgdk::Unload();
40 | }
41 |
42 | PLUGIN_EXPORT void PLUGIN_CALL ProcessTick()
43 | {
44 | if(PySAMP::isLoaded())
45 | PySAMP::processTick(GetTickCount());
46 |
47 | sampgdk::ProcessTick();
48 | }
49 |
50 | PLUGIN_EXPORT bool PLUGIN_CALL OnGameModeInit()
51 | {
52 | if(!PySAMP::isLoaded())
53 | PySAMP::load();
54 | else
55 | PySAMP::reload();
56 |
57 | return PySAMP::callback("OnGameModeInit");
58 | }
59 |
60 | PLUGIN_EXPORT bool PLUGIN_CALL OnGameModeExit()
61 | {
62 | PySAMP::disable();
63 | return PySAMP::callback("OnGameModeExit");
64 | }
65 |
66 | PLUGIN_EXPORT bool PLUGIN_CALL OnPublicCall2(
67 | AMX *amx,
68 | const char *name,
69 | cell *params,
70 | cell *retval,
71 | bool *stop
72 | )
73 | {
74 | if(!PySAMP::isLoaded())
75 | return false;
76 |
77 | if(
78 | strcmp(name, "OnGameModeInit") == 0
79 | || strcmp(name, "OnGameModeExit") == 0
80 | || strcmp(name, "OnPlayerCommandText") == 0
81 | )
82 | return false;
83 |
84 | PyObject* args = PySAMP::amxParamsToTuple(amx, name, params);
85 |
86 | if(args == NULL)
87 | return false;
88 |
89 | return PySAMP::callback(
90 | name,
91 | args,
92 | retval,
93 | stop
94 | );
95 | }
96 |
97 | PLUGIN_EXPORT bool PLUGIN_CALL OnRconCommand(const char * cmd)
98 | {
99 | if(strcmp(cmd, "pyreload") == 0)
100 | {
101 | PySAMP::reload();
102 | return true;
103 | }
104 |
105 | return false;
106 | }
107 |
108 | PLUGIN_EXPORT bool PLUGIN_CALL OnPlayerCommandText(
109 | int playerid,
110 | const char *cmdtext
111 | )
112 | {
113 | return PySAMP::onPlayerCommandText(playerid, cmdtext);
114 | }
115 |
--------------------------------------------------------------------------------
/src/main.def:
--------------------------------------------------------------------------------
1 | EXPORTS
2 | Supports
3 | Load
4 | Unload
5 | ProcessTick
6 | OnPublicCall2
7 | OnGameModeInit
8 | OnGameModeExit
9 | OnPlayerCommandText
10 |
--------------------------------------------------------------------------------
/src/main.h:
--------------------------------------------------------------------------------
1 | #ifndef MAIN_H
2 | #define MAIN_H
3 |
4 | #define PY_TEST (0)
5 | #define SAMPGDK_MIN_LOG_LEVEL 0
6 |
7 | #ifndef WIN32
8 | #include
9 | #endif
10 |
11 | #include
12 | #include
13 | #include "sampgdk.h"
14 | #include "config.h"
15 | #include "pysamp.h"
16 |
17 | #define PYSAMP_LOADING_SCREEN \
18 | "\
19 | PPPPPPPPPPPPPPPPP SSSSSSSSSSSSSSS AAA MMMMMMMM MMMMMMMMPPPPPPPPPPPPPPPPP \n\
20 | P::::::::::::::::P SS:::::::::::::::S A:::A M:::::::M M:::::::MP::::::::::::::::P \n\
21 | P::::::PPPPPP:::::P S:::::SSSSSS::::::S A:::::A M::::::::M M::::::::MP::::::PPPPPP:::::P \n\
22 | PP:::::P P:::::P S:::::S SSSSSSS A:::::::A M:::::::::M M:::::::::MPP:::::P P:::::P\n\
23 | P::::P P:::::Pyyyyyyy yyyyyyyS:::::S A:::::::::A M::::::::::M M::::::::::M P::::P P:::::P\n\
24 | P::::P P:::::P y:::::y y:::::y S:::::S A:::::A:::::A M:::::::::::M M:::::::::::M P::::P P:::::P\n\
25 | P::::PPPPPP:::::P y:::::y y:::::y S::::SSSS A:::::A A:::::A M:::::::M::::M M::::M:::::::M P::::PPPPPP:::::P \n\
26 | P:::::::::::::PP y:::::y y:::::y SS::::::SSSSS A:::::A A:::::A M::::::M M::::M M::::M M::::::M P:::::::::::::PP \n\
27 | P::::PPPPPPPPP y:::::y y:::::y SSS::::::::SS A:::::A A:::::A M::::::M M::::M::::M M::::::M P::::PPPPPPPPP \n\
28 | P::::P y:::::y y:::::y SSSSSS::::S A:::::AAAAAAAAA:::::A M::::::M M:::::::M M::::::M P::::P \n\
29 | P::::P y:::::y:::::y S:::::S A:::::::::::::::::::::A M::::::M M:::::M M::::::M P::::P \n\
30 | P::::P y:::::::::y S:::::S A:::::AAAAAAAAAAAAA:::::A M::::::M MMMMM M::::::M P::::P \n\
31 | PP::::::PP y:::::::y SSSSSSS S:::::S A:::::A A:::::A M::::::M M::::::MPP::::::PP \n\
32 | P::::::::P y:::::y S::::::SSSSSS:::::SA:::::A A:::::A M::::::M M::::::MP::::::::P \n\
33 | P::::::::P y:::::y S:::::::::::::::SSA:::::A A:::::A M::::::M M::::::MP::::::::P \n\
34 | PPPPPPPPPP y:::::y SSSSSSSSSSSSSSS AAAAAAA AAAAAAAMMMMMMMM MMMMMMMMPPPPPPPPPP \n\
35 | y:::::y \n\
36 | y:::::y \n\
37 | y:::::y \n\
38 | y:::::y \n\
39 | yyyyyyy \
40 | "
41 |
42 | #endif
43 |
--------------------------------------------------------------------------------
/src/pysamp/callbacks.cpp:
--------------------------------------------------------------------------------
1 | #include "callbacks.h"
2 |
3 |
4 | const std::string* CallbacksManager::getFormat(const std::string& name) const
5 | {
6 | auto itr = this->formats.find(name);
7 |
8 | if(itr == this->formats.end())
9 | return nullptr;
10 |
11 | return &itr->second;
12 | }
13 |
14 | int CallbacksManager::getBadret(const std::string& name) const
15 | {
16 | static int const notFound = -1;
17 | auto itr = this->badrets.find(name);
18 |
19 | if(itr == this->badrets.end())
20 | return notFound;
21 |
22 | return itr->second;
23 | }
24 |
25 | void CallbacksManager::addFormat(const std::string& name, const std::string& format)
26 | {
27 | this->formats[name] = format;
28 | }
29 |
30 | std::unordered_map CallbacksManager::formats = {
31 | {"OnPlayerConnect", "i"},
32 | {"OnPlayerDisconnect", "ii"},
33 | {"OnPlayerSpawn", "i"},
34 | {"OnPlayerDeath", "iii"},
35 | {"OnVehicleSpawn", "i"},
36 | {"OnVehicleDeath", "ii"},
37 | {"OnPlayerText", "is"},
38 | {"OnPlayerCommandText", "is"},
39 | {"OnPlayerRequestClass", "ii"},
40 | {"OnPlayerEnterVehicle", "iib"},
41 | {"OnPlayerExitVehicle", "ii"},
42 | {"OnPlayerStateChange", "iii"},
43 | {"OnPlayerEnterCheckpoint", "i"},
44 | {"OnPlayerLeaveCheckpoint", "i"},
45 | {"OnPlayerEnterRaceCheckpoint", "i"},
46 | {"OnPlayerLeaveRaceCheckpoint", "i"},
47 | {"OnRconCommand", "s"},
48 | {"OnPlayerRequestSpawn", "i"},
49 | {"OnObjectMoved", "i"},
50 | {"OnPlayerObjectMoved", "ii"},
51 | {"OnPlayerPickUpPickup", "ii"},
52 | {"OnVehicleMod", "iii"},
53 | {"OnEnterExitModShop", "iii"},
54 | {"OnVehiclePaintjob", "iii"},
55 | {"OnVehicleRespray", "iiii"},
56 | {"OnVehicleDamageStatusUpdate", "ii"},
57 | {"OnUnoccupiedVehicleUpdate", "iiiffffff"},
58 | {"OnPlayerSelectedMenuRow", "ii"},
59 | {"OnPlayerExitedMenu", "i"},
60 | {"OnPlayerInteriorChange", "iii"},
61 | {"OnPlayerKeyStateChange", "iii"},
62 | {"OnRconLoginAttempt", "ssb"},
63 | {"OnPlayerUpdate", "i"},
64 | {"OnPlayerStreamIn", "ii"},
65 | {"OnPlayerStreamOut", "ii"},
66 | {"OnVehicleStreamIn", "ii"},
67 | {"OnVehicleStreamOut", "ii"},
68 | {"OnActorStreamIn", "ii"},
69 | {"OnActorStreamOut", "ii"},
70 | {"OnDialogResponse", "iiiis"},
71 | {"OnPlayerTakeDamage", "iifii"},
72 | {"OnPlayerGiveDamage", "iifii"},
73 | {"OnPlayerGiveDamageActor", "iifii"},
74 | {"OnPlayerClickMap", "ifff"},
75 | {"OnPlayerClickTextDraw", "ii"},
76 | {"OnPlayerClickPlayerTextDraw", "ii"},
77 | {"OnIncomingConnection", "isi"},
78 | {"OnTrailerUpdate", "ii"},
79 | {"OnVehicleSirenStateChange", "iii"},
80 | {"OnPlayerClickPlayer", "iii"},
81 | {"OnPlayerEditObject", "ibiiffffff"},
82 | {"OnPlayerEditAttachedObject", "iiiiifffffffff"},
83 | {"OnPlayerSelectObject", "iiiifff"},
84 | {"OnPlayerWeaponShot", "iiiifff"}
85 | };
86 |
87 | const std::unordered_map CallbacksManager::badrets = {
88 | {"OnDialogResponse", true},
89 | {"OnIncomingConnection", true},
90 | {"OnPlayerClickMap", true},
91 | {"OnPlayerClickPlayer", true},
92 | {"OnPlayerClickPlayerTextDraw", true},
93 | {"OnPlayerClickTextDraw", true},
94 | {"OnPlayerCommandText", true},
95 | {"OnPlayerConnect", false},
96 | {"OnPlayerDeath", false},
97 | {"OnPlayerDisconnect", false},
98 | {"OnPlayerEditAttachedObject", true},
99 | {"OnPlayerEditObject", true},
100 | {"OnPlayerGiveDamage", true},
101 | {"OnPlayerGiveDamageActor", true},
102 | {"OnPlayerRequestClass", false},
103 | {"OnPlayerRequestSpawn", false},
104 | {"OnPlayerSelectObject", true},
105 | {"OnPlayerSpawn", false},
106 | {"OnPlayerTakeDamage", true},
107 | {"OnPlayerText", false},
108 | {"OnPlayerUpdate", false},
109 | {"OnPlayerWeaponShot", false},
110 | {"OnRconCommand", true},
111 | {"OnTrailerUpdate", false},
112 | {"OnUnoccupiedVehicleUpdate", false},
113 | {"OnVehicleDamageStatusUpdate", true},
114 | {"OnVehicleMod", false},
115 | {"OnVehiclePaintjob", false},
116 | {"OnVehicleRespray", false},
117 | {"OnVehicleSpawn", false}
118 | };
119 |
--------------------------------------------------------------------------------
/src/pysamp/callbacks.h:
--------------------------------------------------------------------------------
1 | #ifndef CALLBACKSMANAGER_H
2 | #define CALLBACKSMANAGER_H
3 |
4 | #include
5 | #include
6 |
7 |
8 | class CallbacksManager
9 | {
10 | public:
11 | const std::string* getFormat(const std::string& name) const;
12 | int getBadret(const std::string& name) const;
13 | void addFormat(const std::string& name, const std::string& format);
14 |
15 | private:
16 | static std::unordered_map formats;
17 | static const std::unordered_map badrets;
18 | };
19 |
20 | #endif
21 |
--------------------------------------------------------------------------------
/src/pysamp/param_converter.h:
--------------------------------------------------------------------------------
1 | #ifndef PARAMCONVERTER_H
2 | #define PARAMCONVERTER_H
3 |
4 | #include
5 |
6 | #include "sampgdk.h"
7 | #include "amx/amx.h"
8 |
9 | #include "limited_api_python.h" // IWYU pragma: keep
10 |
11 |
12 | namespace ParamConverter
13 | {
14 | std::string get_format(PyObject *tuple);
15 | void amx_pop_params(cell *params, PyObject *tuple);
16 | cell* from_tuple(PyObject *tuple);
17 | PyObject* to_tuple(cell *params, const std::string format, AMX *amx);
18 | };
19 |
20 | #endif
21 |
--------------------------------------------------------------------------------
/src/pysamp/pygamemode.h:
--------------------------------------------------------------------------------
1 | #ifndef PYGAMEMODE_H
2 | #define PYGAMEMODE_H
3 |
4 | #include
5 | #include
6 | #include "limited_api_python.h"
7 |
8 | #ifdef DEBUG
9 | #define PY_DEBUG
10 | #endif
11 |
12 | #ifdef WIN32
13 | #include
14 | #define GETCWD _getcwd
15 | #else
16 | #include
17 | #define GETCWD getcwd
18 | #endif
19 |
20 | #include "config.h"
21 | #include "sampgdk.h"
22 | #include "samp.h"
23 | #include "callbacks.h"
24 |
25 |
26 | class PyGamemode
27 | {
28 | private:
29 | std::string getCWD();
30 | PyObject *module = nullptr;
31 | bool initialized = false;
32 | bool loaded = false;
33 | bool disabled = false;
34 | std::unordered_map config;
35 | CallbacksManager *callbacks;
36 | PyThreadState *_save;
37 |
38 | public:
39 | PyGamemode(CallbacksManager* callbacks);
40 | ~PyGamemode();
41 | void load();
42 | void reload();
43 | void unload();
44 | bool isLoaded();
45 | void disable();
46 | bool isEnabled();
47 | int callback(const std::string name , PyObject* pArgs, cell* retval, bool* stop);
48 | PyObject* pyConfig(PyObject *self, PyObject *args, PyObject *kwargs);
49 | std::unordered_map getConfig() { return this->config; };
50 | static const std::unordered_map constants;
51 | };
52 |
53 | #endif
54 |
--------------------------------------------------------------------------------
/src/pysamp/pysamp.cpp:
--------------------------------------------------------------------------------
1 | #include "pysamp.h"
2 | #include "param_converter.h"
3 | #include "pygamemode.h"
4 |
5 | PyGamemode* PySAMP::gamemode = nullptr;
6 | TimerManager* PySAMP::timer_manager = nullptr;
7 | CallbacksManager* PySAMP::callbacks = nullptr;
8 |
9 |
10 | void PySAMP::load()
11 | {
12 | sampgdk::logprintf("Loading PySAMP...");
13 | PySAMP::callbacks = new CallbacksManager();
14 | PySAMP::timer_manager = new TimerManager();
15 | PySAMP::gamemode = new PyGamemode(PySAMP::callbacks);
16 | gamemode->load();
17 | }
18 |
19 | void PySAMP::reload()
20 | {
21 | if(!PySAMP::isLoaded())
22 | return;
23 |
24 | sampgdk::logprintf("Reloading PySAMP...");
25 | PySAMP::callback("OnGameModeExit");
26 | PySAMP::disable();
27 | PySAMP::gamemode->reload();
28 | PySAMP::timer_manager->enable();
29 | PySAMP::timer_manager->clear_timers();
30 | PySAMP::callback("OnGameModeInit");
31 | }
32 |
33 | void PySAMP::disable()
34 | {
35 | if(!PySAMP::isLoaded())
36 | return;
37 |
38 | PySAMP::gamemode->disable();
39 | PySAMP::timer_manager->disable();
40 | }
41 |
42 | void PySAMP::unload()
43 | {
44 | if(!PySAMP::isLoaded())
45 | return;
46 |
47 | sampgdk::logprintf("Unloading PySAMP...");
48 | PySAMP::disable();
49 | delete PySAMP::callbacks;
50 | PySAMP::callbacks = nullptr;
51 | delete PySAMP::timer_manager;
52 | PySAMP::timer_manager = nullptr;
53 | delete PySAMP::gamemode;
54 | PySAMP::gamemode = nullptr;
55 | }
56 |
57 | bool PySAMP::isInitialized()
58 | {
59 | return !!PySAMP::gamemode;
60 | }
61 |
62 | bool PySAMP::isLoaded()
63 | {
64 | return(
65 | PySAMP::isInitialized()
66 | && PySAMP::gamemode->isLoaded()
67 | );
68 | }
69 |
70 | bool PySAMP::isEnabled()
71 | {
72 | return(
73 | PySAMP::isLoaded()
74 | && PySAMP::gamemode->isEnabled()
75 | );
76 | }
77 |
78 | void PySAMP::addTimer(Timer& timer)
79 | {
80 | PySAMP::timer_manager->add_timer(timer);
81 | }
82 |
83 | void PySAMP::removeTimer(int id)
84 | {
85 | PySAMP::timer_manager->remove_timer(id);
86 | }
87 |
88 | void PySAMP::processTick(unsigned int currentTick)
89 | {
90 | if(!PySAMP::isLoaded())
91 | return;
92 |
93 | PySAMP::callback("OnProcessTick");
94 |
95 | PySAMP::GIL gil;
96 | PySAMP::timer_manager->process_timers(currentTick);
97 | }
98 |
99 | std::string PySAMP::getEncoding()
100 | {
101 | return std::string(PyBytes_AsString(PyUnicode_AsUTF8String(
102 | PySAMP::gamemode->getConfig()["encoding"]
103 | )));
104 | }
105 |
106 | int PySAMP::callback(const std::string& name)
107 | {
108 | return PySAMP::callback(name, NULL);
109 | }
110 |
111 | int PySAMP::callback(const std::string& name, PyObject* pArgs)
112 | {
113 | return PySAMP::callback(name, pArgs, NULL, NULL);
114 | }
115 |
116 | int PySAMP::callback(
117 | const std::string& name,
118 | PyObject* pArgs,
119 | cell* retval,
120 | bool* stop
121 | )
122 | {
123 | if(!PySAMP::isLoaded())
124 | return 0;
125 |
126 | return PySAMP::gamemode->callback(
127 | name,
128 | pArgs,
129 | retval,
130 | stop
131 | );
132 | }
133 |
134 | bool PySAMP::onPlayerCommandText(int playerid, const char* cmdtext)
135 | {
136 | if(!PySAMP::isLoaded())
137 | return false;
138 |
139 | PySAMP::GIL gil;
140 | PyObject* tuple = Py_BuildValue(
141 | "(iN)",
142 | playerid,
143 | PyUnicode_Decode(
144 | cmdtext,
145 | strlen(cmdtext),
146 | PySAMP::getEncoding().c_str(),
147 | "strict"
148 | )
149 | );
150 |
151 | return PySAMP::callback("OnPlayerCommandText", tuple);
152 | }
153 |
154 | void PySAMP::registerCallback(const std::string& name, const std::string& format)
155 | {
156 | if(!PySAMP::isInitialized())
157 | return;
158 |
159 | PySAMP::callbacks->addFormat(name, format);
160 | }
161 |
162 | PyObject* PySAMP::pyConfig(PyObject *self, PyObject *args, PyObject *kwargs)
163 | {
164 | return PySAMP::gamemode->pyConfig(self, args, kwargs);
165 | }
166 |
167 | PyObject* PySAMP::amxParamsToTuple(AMX *amx, const std::string& callback_name, cell *params)
168 | {
169 | if(!PySAMP::isInitialized())
170 | return NULL;
171 |
172 | const std::string* format = PySAMP::callbacks->getFormat(callback_name);
173 |
174 | if(format == nullptr)
175 | return NULL;
176 |
177 | PySAMP::GIL gil;
178 | PyObject* tuple = ParamConverter::to_tuple(
179 | params,
180 | *format,
181 | amx
182 | );
183 |
184 | if(tuple == NULL)
185 | {
186 | PyObject* name = PyUnicode_FromString(callback_name.c_str());
187 | PyErr_WriteUnraisable(name);
188 | Py_DECREF(name);
189 | }
190 |
191 | return tuple;
192 | }
193 |
194 | cell* PySAMP::tupleToAmxParams(PyObject *tuple, bool asReference)
195 | {
196 | if(!PySAMP::isInitialized())
197 | return NULL;
198 |
199 | PySAMP::GIL gil;
200 | cell* params = ParamConverter::from_tuple(tuple);
201 |
202 | return params;
203 | }
204 |
205 | PySAMP::GIL::GIL()
206 | {
207 | gilState = PyGILState_Ensure();
208 | }
209 |
210 | PySAMP::GIL::~GIL()
211 | {
212 | PyGILState_Release(gilState);
213 | }
214 |
--------------------------------------------------------------------------------
/src/pysamp/pysamp.h:
--------------------------------------------------------------------------------
1 | #ifndef PYSAMP_H
2 | #define PYSAMP_H
3 |
4 | #include "limited_api_python.h"
5 | #include "timer.h"
6 | #include "callbacks.h"
7 |
8 |
9 | class PyGamemode;
10 |
11 | class PySAMP
12 | {
13 | private:
14 | static PyGamemode* gamemode;
15 | static TimerManager* timer_manager;
16 | static CallbacksManager* callbacks;
17 | public:
18 | static void load();
19 | static void reload();
20 | static void unload();
21 | static void disable();
22 | static bool isInitialized();
23 | static bool isLoaded();
24 | static bool isEnabled();
25 | static void addTimer(Timer& timer);
26 | static void removeTimer(int id);
27 | static void processTick(unsigned int currentTick);
28 | static int callback(const std::string& name);
29 | static int callback(const std::string& name, PyObject* pArgs);
30 | static int callback(const std::string& name, PyObject* pArgs, cell* retval, bool* stop);
31 | static bool onPlayerCommandText(int playerid, const char* cmdtext);
32 | static std::string getEncoding();
33 | static void registerCallback(const std::string& name, const std::string& format);
34 | static PyObject* pyConfig(PyObject *self, PyObject *args, PyObject *kwargs);
35 | static PyObject* amxParamsToTuple(AMX *amx, const std::string& callback_name, cell *params);
36 | static cell* tupleToAmxParams(PyObject *tuple, bool asReference = false);
37 |
38 | class GIL
39 | {
40 | public:
41 | GIL();
42 | ~GIL();
43 | private:
44 | PyGILState_STATE gilState;
45 | };
46 | };
47 |
48 |
49 |
50 | #endif // PYSAMP_H
51 |
--------------------------------------------------------------------------------
/src/pysamp/timer.cpp:
--------------------------------------------------------------------------------
1 | #include "timer.h"
2 | #include "pysamp.h"
3 |
4 |
5 | int Timer::last_timer_id;
6 |
7 | Timer::Timer(
8 | PyObject* function,
9 | PyObject* arguments,
10 | unsigned int interval,
11 | bool repeating
12 | ) :
13 | function(function),
14 | arguments(arguments),
15 | interval(interval),
16 | repeating(repeating),
17 | pending_deletion(false)
18 | {
19 | id = ++last_timer_id;
20 | last_call_tick = GetTickCount();
21 | Py_INCREF(function);
22 | Py_XINCREF(arguments);
23 | }
24 |
25 | Timer::~Timer()
26 | {
27 | Py_DECREF(function);
28 | Py_XDECREF(arguments);
29 | }
30 |
31 | Timer* Timer::from_args(PyObject *args, PyObject *arguments)
32 | {
33 | PyObject* function;
34 | unsigned int interval;
35 | bool repeating;
36 |
37 | if(!PyArg_ParseTuple(args, "OIb:SetTimer", &function, &interval, &repeating))
38 | return NULL;
39 |
40 | if(!PyCallable_Check(function))
41 | {
42 | PyErr_SetString(PyExc_TypeError, "SetTimer() 'function' argument must be callable (pos 1)");
43 | return NULL;
44 | }
45 |
46 | return new Timer(
47 | function,
48 | arguments,
49 | interval,
50 | repeating
51 | );
52 | }
53 |
54 | bool Timer::process(unsigned int current_tick)
55 | {
56 | if((last_call_tick + interval) > current_tick)
57 | return false;
58 |
59 | last_call_tick = current_tick;
60 | PyObject_CallObject(function, arguments);
61 |
62 | if(PyErr_Occurred() != NULL)
63 | {
64 | PyErr_Print();
65 | return false;
66 | }
67 |
68 | return true;
69 | }
70 |
71 |
72 | TimerManager::TimerManager()
73 | : disabled(false)
74 | {
75 | Timer::last_timer_id = -1;
76 | }
77 |
78 | TimerManager::~TimerManager()
79 | {
80 | disabled = true;
81 | clear_timers();
82 | }
83 |
84 | void TimerManager::add_timer(Timer& timer)
85 | {
86 | timers.push_back(timer);
87 | }
88 |
89 | void TimerManager::remove_timer(int id)
90 | {
91 | for(auto timer = timers.begin(); timer != timers.end(); ++timer)
92 | {
93 | if(timer->get_id() != id)
94 | continue;
95 |
96 | timer->set_pending_deletion();
97 | break;
98 | }
99 | }
100 |
101 | void TimerManager::process_timers(unsigned int current_tick)
102 | {
103 | if(disabled)
104 | return;
105 |
106 | for(auto timer = timers.begin(); timer != timers.end();)
107 | {
108 | if(
109 | timer->is_pending_deletion()
110 | || (
111 | timer->process(current_tick)
112 | && !timer->is_repeating()
113 | )
114 | )
115 | {
116 | timer = timers.erase(timer);
117 | continue;
118 | }
119 |
120 | ++timer;
121 | }
122 | }
123 |
124 | void TimerManager::clear_timers()
125 | {
126 | PySAMP::GIL gil;
127 | timers.clear();
128 | }
129 |
--------------------------------------------------------------------------------
/src/pysamp/timer.h:
--------------------------------------------------------------------------------
1 | #ifndef PYTIMER_H
2 | #define PYTIMER_H
3 |
4 | #include
5 | #include "limited_api_python.h"
6 | #include "sampgdk.h"
7 |
8 |
9 | class Timer
10 | {
11 | public:
12 | Timer(
13 | PyObject* function,
14 | PyObject* arguments,
15 | unsigned int interval,
16 | bool repeating
17 | );
18 | ~Timer();
19 |
20 | static Timer* from_args(PyObject *args, PyObject *arguments);
21 | bool process(unsigned int current_tick);
22 | int get_id() { return id; };
23 | bool is_repeating() { return repeating; };
24 | bool is_pending_deletion() { return pending_deletion; };
25 | void set_pending_deletion() { pending_deletion = true; };
26 |
27 | static int last_timer_id;
28 |
29 | private:
30 | int id;
31 | PyObject* function;
32 | PyObject* arguments;
33 | unsigned int interval;
34 | bool repeating;
35 | unsigned int last_call_tick;
36 | bool pending_deletion;
37 | };
38 |
39 |
40 | class TimerManager
41 | {
42 | public:
43 | TimerManager();
44 | ~TimerManager();
45 | void add_timer(Timer& timer);
46 | void remove_timer(int id);
47 | void process_timers(unsigned int current_tick);
48 | void clear_timers();
49 | void enable() { disabled = false; };
50 | void disable() { disabled = true; };
51 |
52 | private:
53 | std::list timers;
54 | bool disabled;
55 | };
56 |
57 | #endif
58 |
--------------------------------------------------------------------------------