| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404 |
- // -----------------------------------------------------------------------------
- // Example Filterscript for the LS Prison Walls and Gate Objects
- // -------------------------------------------------------------
- // By Matite in February 2015
- //
- //
- // This script creates the new LS Prison Walls object, removes the existing
- // GTASA object and creates 2 sets of opening gates.
- //
- // Warning...
- // This script uses a total of:
- // * 5 objects = 1 for the replacement walls and 4 for the replacement gates
- // * 2 3D Text Labels = 1 on each set of gates
- // * Enables the /lsp command to teleport the player to the eastern prison gates
- // -----------------------------------------------------------------------------
- // -----------------------------------------------------------------------------
- // -----------------------------------------------------------------------------
- // Includes
- // --------
- // SA-MP include
- #include <a_samp>
- // For PlaySoundForPlayersInRange()
- #include "../include/gl_common.inc"
- // -----------------------------------------------------------------------------
- // Defines
- // -------
- // Used for the eastern and southern prison gates status flags
- #define GATES_CLOSED 0
- #define GATES_CLOSING 1
- #define GATES_OPEN 2
- #define GATES_OPENING 3
- // Used for messages sent to the player
- #define COLOR_MESSAGE_YELLOW 0xFFDD00AA
- // -----------------------------------------------------------------------------
- // Constants
- // ---------
- // Gate names for the 3D text labels
- static GateNames[2][] =
- {
- "Eastern Gates",
- "Southern Gates"
- };
- // -----------------------------------------------------------------------------
- // Variables
- // ---------
- // Stores the created object number of the replacement prison walls so it can
- // be destroyed when the filterscript is unloaded
- new LSPrisonWallsObject;
- // Stores the created object numbers of the prison walls gates so they can be
- // opened or closed and destroyed when the filterscript is unloaded
- new LSPrisonGatesObject[4];
- // Stores a reference to the 3D text labels used on each set of gates so they
- // can be destroyed when the filterscript is unloaded
- new Text3D:LabelGates[2];
- // Stores the current status of the eastern prison gates
- new EasternGatesStatus = GATES_CLOSED;
- // Stores the current status of the southern prison gates
- new SouthernGatesStatus = GATES_CLOSED;
- // -----------------------------------------------------------------------------
- // Callbacks
- // ---------
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- // Check command text
- if (strcmp("/lsp", cmdtext, true, 4) == 0)
- {
- // Set the interior
- SetPlayerInterior(playerid, 0);
- // Set player position and facing angle
- SetPlayerPos(playerid, 1830.66 + random(2), -1538.46, 14.5);
- SetPlayerFacingAngle(playerid, 85);
- // Fix camera position after teleporting
- SetCameraBehindPlayer(playerid);
- // Send a gametext message to the player
- GameTextForPlayer(playerid, "~b~~h~LS Prison!", 3000, 3);
- // Exit here
- return 1;
- }
- // Exit here (return 0 as the command was not handled in this filterscript)
- return 0;
- }
- public OnFilterScriptInit()
- {
- // Display information in the Server Console
- print("\n");
- print(" |---------------------------------------------------");
- print(" |--- LS Prison Walls Filterscript");
- print(" |-- Script v1.01");
- print(" |-- 13th February 2015");
- print(" |---------------------------------------------------");
- // Create the LS Prison Walls object
- LSPrisonWallsObject = CreateObject(19794, 1787.13, -1565.68, 11.9688, 0, 0, 0);
- // Display information in the Server Console
- print(" |-- LS Prison Walls object created");
-
- // Create the LS Prison Walls Eastern Gates objects
- LSPrisonGatesObject[0] = CreateObject(19795, 1824.318481, -1534.731201, 14.296878 - 0.01, 0, 0, 343.0);
- LSPrisonGatesObject[1] = CreateObject(19795, 1822.407592, -1540.949951, 14.296878 - 0.01, 0, 0, 163.0);
-
- // Create the LS Prison Walls Southern Gates objects
- LSPrisonGatesObject[2] = CreateObject(19796, 1752.004150, -1591.186523, 14.267195 - 0.01, 0, 0, 77.0);
- LSPrisonGatesObject[3] = CreateObject(19796, 1756.914062, -1592.316284, 14.267195 - 0.01, 0, 0, 257.0);
-
- // Display information in the Server Console
- print(" |-- LS Prison Walls Gates objects created");
- // Create variable
- new string[192];
- // Create 3D Text Label at the prisons eastern gates
- format(string, sizeof(string), "{CCCCCC}[%s]\n{CCCCCC}Press '{FFFFFF}~k~~CONVERSATION_YES~{CCCCCC}' to open or close the gates", GateNames[0]);
- LabelGates[0] = Create3DTextLabel(string, 0xCCCCCCAA, 1823.78, -1537.98, 13.54, 10.5, 0, 1);
-
- // Create 3D Text Label at the prisons eastern gates
- format(string, sizeof(string), "{CCCCCC}[%s]\n{CCCCCC}Press '{FFFFFF}~k~~CONVERSATION_YES~{CCCCCC}' to open or close the gates", GateNames[1]);
- LabelGates[1] = Create3DTextLabel(string, 0xCCCCCCAA, 1754.27, -1592.18, 13.54, 10.5, 0, 1);
-
- // Display information in the Server Console
- print(" |-- LS Prison Wall Gates 3D Text Labels created");
- print(" |---------------------------------------------------");
-
-
- // Loop
- for (new i = 0; i < MAX_PLAYERS; i++)
- {
- // Check if the player is connected and not a NPC
- if (IsPlayerConnected(i) && !IsPlayerNPC(i))
- {
- // Remove default GTASA LS Prison Walls and LOD map objects for the player
- // (so any player currently ingame does not have to rejoin for them
- // to be removed when this filterscript is loaded)
- RemoveBuildingForPlayer(i, 4000, 1787.13, -1565.68, 11.9688, 250.0); // Walls
- RemoveBuildingForPlayer(i, 4080, 1787.13, -1565.68, 11.9688, 250.0); // LOD
- }
- }
- // Exit here
- return 1;
- }
- public OnFilterScriptExit()
- {
- // Check for valid object
- if (IsValidObject(LSPrisonWallsObject))
- {
- // Destroy the LS Prison Walls object
- DestroyObject(LSPrisonWallsObject);
- // Display information in the Server Console
- print(" |---------------------------------------------------");
- print(" |-- LS Prison Walls object destroyed");
- }
-
- // Check for valid object
- if (IsValidObject(LSPrisonGatesObject[0]))
- {
- // Destroy the LS Prison Walls Eastern Gates object 1
- DestroyObject(LSPrisonGatesObject[0]);
- // Display information in the Server Console
- print(" |-- LS Prison Walls Eastern Gates object 1 destroyed");
- }
-
- // Check for valid object
- if (IsValidObject(LSPrisonGatesObject[1]))
- {
- // Destroy the LS Prison Walls Eastern Gates object 2
- DestroyObject(LSPrisonGatesObject[1]);
- // Display information in the Server Console
- print(" |-- LS Prison Walls Eastern Gates object 2 destroyed");
- }
-
- // Check for valid object
- if (IsValidObject(LSPrisonGatesObject[2]))
- {
- // Destroy the LS Prison Walls Southern Gates object 1
- DestroyObject(LSPrisonGatesObject[2]);
- // Display information in the Server Console
- print(" |-- LS Prison Walls Southern Gates object 1 destroyed");
- }
-
- // Check for valid object
- if (IsValidObject(LSPrisonGatesObject[3]))
- {
- // Destroy the LS Prison Walls Southern Gates object 2
- DestroyObject(LSPrisonGatesObject[3]);
- // Display information in the Server Console
- print(" |-- LS Prison Walls Southern Gates object 2 destroyed");
- }
- // Destroy 3D Text Labels on the eastern and southern gates
- Delete3DTextLabel(LabelGates[0]);
- Delete3DTextLabel(LabelGates[1]);
-
- // Display information in the Server Console
- print(" |-- Deleted the 3D Text Labels on the Prison Gates");
- // Display information in the Server Console
- print(" |---------------------------------------------------");
- print(" |-- LS Prison Walls Filterscript Unloaded");
- print(" |---------------------------------------------------");
- // Exit here
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- // Remove default GTASA LS Prison Walls and LOD map objects for the player
- RemoveBuildingForPlayer(playerid, 4000, 1787.13, -1565.68, 11.9688, 250.0); // Walls
- RemoveBuildingForPlayer(playerid, 4080, 1787.13, -1565.68, 11.9688, 250.0); // LOD
- // Exit here (return 1 so this callback is handled in other scripts too)
- return 1;
- }
- public OnObjectMoved(objectid)
- {
- // Check if the object that moved was one of the eastern gates
- if (objectid == LSPrisonGatesObject[0])
- {
- // Check if the eastern gates were closing
- if (EasternGatesStatus == GATES_CLOSING)
- {
- // Set status flag for eastern gates
- EasternGatesStatus = GATES_CLOSED;
- }
- else
- {
- // Set status flag for eastern gates
- EasternGatesStatus = GATES_OPEN;
- }
- }
- // Check if the object that moved was one of the southern gates
- else if (objectid == LSPrisonGatesObject[2])
- {
- // Check if the southern gates were closing
- if (SouthernGatesStatus == GATES_CLOSING)
- {
- // Set status flag for southern gates
- SouthernGatesStatus = GATES_CLOSED;
- }
- else
- {
- // Set status flag for southern gates
- SouthernGatesStatus = GATES_OPEN;
- }
- }
-
- // Exit here
- return 1;
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- // Check if the player pressed the conversation yes key (normally the Y key)
- if (newkeys & KEY_YES)
- {
- // Check if the player is outside the eastern prison gates
- if (IsPlayerInRangeOfPoint(playerid, 10.0, 1823.78, -1537.98, 13.54))
- {
- // Debug
- //printf("-->Player ID %d within 10m of the Eastern Prison Gates", playerid);
-
- // Check if the eastern gates are not currently opening (ie moving)
- if (EasternGatesStatus == GATES_OPENING)
- {
- // Send chat text message and exit here
- SendClientMessage(playerid, COLOR_MESSAGE_YELLOW, "* Sorry, you must wait for the eastern gates to fully open first.");
- return 1;
- }
- // Check if the eastern gates are not currently closing (ie moving)
- else if (EasternGatesStatus == GATES_CLOSING)
- {
- // Send chat text message and exit here
- SendClientMessage(playerid, COLOR_MESSAGE_YELLOW, "* Sorry, you must wait for the eastern gates to fully close first.");
- return 1;
- }
- // Play gate opening sound
- PlaySoundForPlayersInRange(1035, 50.0, 1823.78, -1537.98, 13.54);
- // Check if the eastern gates are currently open or closed
- if (EasternGatesStatus == GATES_CLOSED)
- {
- // Send a gametext message to the player
- GameTextForPlayer(playerid, "~b~~h~Eastern Prison~n~~b~~h~Gates Opening!", 3000, 3);
-
- // Animate the eastern gates opening (the small Z offset is required)
- MoveObject(LSPrisonGatesObject[0], 1824.318481, -1534.731201, 14.296878 + 0.01, 0.002, 0, 0, 258);
- // Animate the eastern gates opening (the small Z offset is required)
- MoveObject(LSPrisonGatesObject[1], 1822.407592, -1540.949951, 14.296878 + 0.01, 0.002, 0, 0, 253);
- // Set status flag for eastern gates
- EasternGatesStatus = GATES_OPENING;
- }
- else
- {
- // Send a gametext message to the player
- GameTextForPlayer(playerid, "~b~~h~Eastern Prison~n~~b~~h~Gates Closing!", 3000, 3);
-
- // Animate the eastern gates closing (the small Z offset is required)
- MoveObject(LSPrisonGatesObject[0], 1824.318481, -1534.731201, 14.296878 - 0.01, 0.002, 0, 0, 343);
- // Animate the eastern gates closing (the small Z offset is required)
- MoveObject(LSPrisonGatesObject[1], 1822.407592, -1540.949951, 14.296878 - 0.01, 0.002, 0, 0, 163);
- // Set status flag for eastern gates
- EasternGatesStatus = GATES_CLOSING;
- }
- }
- // Check if the player is outside the southern prison gates
- else if (IsPlayerInRangeOfPoint(playerid, 10.0, 1754.27, -1592.18, 13.54))
- {
- // Debug
- //printf("-->Player ID %d within 10m of the Southern Prison Gates", playerid);
-
- // Check if the southern gates are not currently opening (ie moving)
- if (SouthernGatesStatus == GATES_OPENING)
- {
- // Send chat text message and exit here
- SendClientMessage(playerid, COLOR_MESSAGE_YELLOW, "* Sorry, you must wait for the southern gates to fully open first.");
- return 1;
- }
- // Check if the southern gates are not currently closing (ie moving)
- else if (SouthernGatesStatus == GATES_CLOSING)
- {
- // Send chat text message and exit here
- SendClientMessage(playerid, COLOR_MESSAGE_YELLOW, "* Sorry, you must wait for the southern gates to fully close first.");
- return 1;
- }
-
- // Play gate opening sound
- PlaySoundForPlayersInRange(1035, 50.0, 1754.27, -1592.18, 13.54);
-
- // Check if the southern gates are currently open or closed
- if (SouthernGatesStatus == GATES_CLOSED)
- {
- // Send a gametext message to the player
- GameTextForPlayer(playerid, "~b~~h~Southern Prison~n~~b~~h~Gates Opening!", 3000, 3);
- // Animate the southern gates opening (the small Z offset is required)
- MoveObject(LSPrisonGatesObject[2], 1752.004150, -1591.186523, 14.267195 + 0.01, 0.002, 0, 0, 172);
- // Animate the southern gates opening (the small Z offset is required)
- MoveObject(LSPrisonGatesObject[3], 1756.914062, -1592.316284, 14.267195 + 0.01, 0.002, 0, 0, 187);
- // Set status flag for southern gates
- SouthernGatesStatus = GATES_OPENING;
- }
- else
- {
- // Send a gametext message to the player
- GameTextForPlayer(playerid, "~b~~h~Southern Prison~n~~b~~h~Gates Closing!", 3000, 3);
- // Animate the southern gates closing (the small Z offset is required)
- MoveObject(LSPrisonGatesObject[2], 1752.004150, -1591.186523, 14.267195 - 0.01, 0.002, 0, 0, 77);
- // Animate the southern gates closing (the small Z offset is required)
- MoveObject(LSPrisonGatesObject[3], 1756.914062, -1592.316284, 14.267195 - 0.01, 0.002, 0, 0, 257);
- // Set status flag for southern gates
- SouthernGatesStatus = GATES_CLOSING;
- }
- }
- }
- // Exit here (return 1 so this callback is handled in other scripts too)
- return 1;
- }
|