├── .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 | --------------------------------------------------------------------------------