| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664 |
- // -----------------------------------------------------------------------------
- // Example Filterscript for the new SF ZomboTech Building and Lab with Elevator
- // ----------------------------------------------------------------------------
- // Original elevator code by Zamaroht in 2010
- //
- // Updated by Kye in 2011
- // * Added a sound effect for the elevator starting/stopping
- //
- // Edited by Matite in January 2015
- // * Added code to remove the existing building, add the new buildings and
- // adapted the elevator code so it works in this new building
- //
- //
- // This script creates the new SF ZomboTech building and the lab objects, removes
- // the existing GTASA building object and creates an elevator that can be used to
- // travel between the building foyer and the lab.
- //
- // You can un-comment the OnPlayerCommandText callback below to enable a simple
- // teleport command (/zl) that teleports you to the ZomboTech Lab elevator.
- //
- // Warning...
- // This script uses a total of:
- // * 9 objects = 1 for the elevator, 2 for the elevator doors, 4 for the elevator
- // floor doors and 2 for the buildings (replacement ZomboTech building and lab)
- // * 3 3D Text Labels = 2 on the floors and 1 in the elevator
- // * 1 dialog (for the elevator)
- // -----------------------------------------------------------------------------
- // -----------------------------------------------------------------------------
- // -----------------------------------------------------------------------------
- // Includes
- // --------
- // SA-MP include
- #include <a_samp>
- // For PlaySoundForPlayersInRange()
- #include "../include/gl_common.inc"
- // -----------------------------------------------------------------------------
- // Defines
- // -------
- // Movement speed of the elevator
- #define ELEVATOR_SPEED (5.0)
- // Movement speed of the doors
- #define DOORS_SPEED (5.0)
- // Time in ms that the elevator will wait in each floor before continuing with the queue...
- // be sure to give enough time for doors to open
- #define ELEVATOR_WAIT_TIME (5000)
- // Dialog ID for the ZomboTech building elevator dialog
- #define DIALOG_ID (875)
- // Position defines
- #define X_DOOR_CLOSED (-1951.603027)
- #define X_DOOR_L_OPENED X_DOOR_CLOSED + 1.6
- #define X_DOOR_R_OPENED X_DOOR_CLOSED - 1.6
- #define GROUND_Z_COORD (47.451492)
- #define X_ELEVATOR_POS (-1951.603027)
- #define Y_ELEVATOR_POS (636.418334)
- // Elevator state defines
- #define ELEVATOR_STATE_IDLE (0)
- #define ELEVATOR_STATE_WAITING (1)
- #define ELEVATOR_STATE_MOVING (2)
- // Invalid floor define
- #define INVALID_FLOOR (-1)
- // -----------------------------------------------------------------------------
- // Constants
- // ---------
- // Elevator floor names for the 3D text labels
- static FloorNames[2][] =
- {
- "Ground Floor",
- "ZomboTech Lab"
- };
- // Elevator floor Z heights
- static Float:FloorZOffsets[2] =
- {
- 0.0, // Ground Floor
- -21.628007 // ZomboTech Lab -21.598007
- };
- // -----------------------------------------------------------------------------
- // Variables
- // ---------
- // Stores the created object numbers of the replacement building and the lab so
- // they can be destroyed when the filterscript is unloaded
- new SFZomboTechBuildingObject;
- new SFZomboTechLabObject;
- // Stores the created object numbers of the elevator, the elevator doors and
- // the elevator floor doors so they can be destroyed when the filterscript
- // is unloaded
- new Obj_Elevator, Obj_ElevatorDoors[2], Obj_FloorDoors[2][2];
- // Stores a reference to the 3D text labels used on each floor and inside the
- // elevator itself so they can be detroyed when the filterscript is unloaded
- new Text3D:Label_Elevator, Text3D:Label_Floors[2];
- // Stores the current state of the elevator (ie ELEVATOR_STATE_IDLE,
- // ELEVATOR_STATE_WAITING or ELEVATOR_STATE_MOVING)
- new ElevatorState;
- // Stores the current floor the elevator is on or heading to... if the value is
- // ELEVATOR_STATE_IDLE or ELEVATOR_STATE_WAITING this is the current floor. If
- // the value is ELEVATOR_STATE_MOVING then it is the floor it's moving to
- new ElevatorFloor;
- // Stores the elevator queue for each floor
- new ElevatorQueue[2];
- // Stores who requested the floor for the elevator queue...
- // FloorRequestedBy[floor_id] = playerid; (stores who requested which floor)
- new FloorRequestedBy[2];
- // Used for a timer that makes the elevator move faster after players start
- // surfing the object
- new ElevatorBoostTimer;
- // -----------------------------------------------------------------------------
- // Function Forwards
- // -----------------
- // Public:
- forward CallElevator(playerid, floorid); // You can use INVALID_PLAYER_ID too.
- forward ShowElevatorDialog(playerid);
- // Private:
- forward Elevator_Initialize();
- forward Elevator_Destroy();
- forward Elevator_OpenDoors();
- forward Elevator_CloseDoors();
- forward Floor_OpenDoors(floorid);
- forward Floor_CloseDoors(floorid);
- forward Elevator_MoveToFloor(floorid);
- forward Elevator_Boost(floorid); // Increases the elevator speed until it reaches 'floorid'.
- forward Elevator_TurnToIdle();
- forward ReadNextFloorInQueue();
- forward RemoveFirstQueueFloor();
- forward AddFloorToQueue(floorid);
- forward IsFloorInQueue(floorid);
- forward ResetElevatorQueue();
- forward DidPlayerRequestElevator(playerid);
- forward Float:GetElevatorZCoordForFloor(floorid);
- forward Float:GetDoorsZCoordForFloor(floorid);
- // -----------------------------------------------------------------------------
- // Callbacks
- // ---------
- // Un-comment the OnPlayerCommandText callback below (remove the "/*" and the "*/")
- // to enable a simple teleport command (/zl) which teleports the player to
- // the Zombotech Lab elevator.
- /*
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- // Check command text
- if (strcmp("/zl", cmdtext, true, 3) == 0)
- {
- // Set the interior
- SetPlayerInterior(playerid, 0);
- // Set player position and facing angle
- SetPlayerPos(playerid, -1957.11 + random(2), 644.36 + random(2), 47.6);
- SetPlayerFacingAngle(playerid, 215);
- // Fix camera position after teleporting
- SetCameraBehindPlayer(playerid);
- // Send a gametext message to the player
- GameTextForPlayer(playerid, "~b~~h~ZomboTech Lab!", 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(" |--- SF ZomboTech Filterscript");
- print(" |-- Script v1.01");
- print(" |-- 12th January 2015");
- print(" |---------------------------------------------------");
- // Create the SF ZomboTech Building object
- SFZomboTechBuildingObject = CreateObject(19593, -1951.687500, 660.023986, 89.507797, 0, 0, 0);
- // Create the SF ZomboTech Lab object
- SFZomboTechLabObject = CreateObject(19594, -1951.687500, 660.023986, 29.507797, 0, 0, 0);
- // Display information in the Server Console
- print(" |-- SF ZomboTech Building and Lab objects created");
- // Reset the elevator queue
- ResetElevatorQueue();
-
- // Create the elevator object, the elevator doors and the floor doors
- Elevator_Initialize();
-
- // Display information in the Server Console
- print(" |-- SF ZomboTech Building Elevator 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 SF ZomboTech map object and LOD 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, 10027, -1951.687500, 660.023986, 89.507797, 250.0); // Building
- RemoveBuildingForPlayer(i, 9939, -1951.687500, 660.023986, 89.507797, 250.0); // LOD
- }
- }
- // Exit here
- return 1;
- }
- public OnFilterScriptExit()
- {
- // Check for valid object
- if (IsValidObject(SFZomboTechBuildingObject))
- {
- // Destroy the SF ZombotTech Building object
- DestroyObject(SFZomboTechBuildingObject);
- // Display information in the Server Console
- print(" |---------------------------------------------------");
- print(" |-- SF ZomboTech Building object destroyed");
- }
- // Check for valid object
- if (IsValidObject(SFZomboTechLabObject))
- {
- // Destroy the SF ZomboTech Lab object
- DestroyObject(SFZomboTechLabObject);
- // Display information in the Server Console
- print(" |-- SF ZomboTech Lab object destroyed");
- }
-
- // Destroy the elevator, the elevator doors and the elevator floor doors
- Elevator_Destroy();
-
- // Display information in the Server Console
- print(" |-- SF ZomboTech Building Elevator destroyed");
- print(" |---------------------------------------------------");
-
- // Exit here
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- // Remove default GTASA SF ZomboTech map object and LOD for the player
- RemoveBuildingForPlayer(playerid, 10027, -1951.687500, 660.023986, 89.507797, 250.0); // Building
- RemoveBuildingForPlayer(playerid, 9939, -1951.687500, 660.023986, 89.507797, 250.0); // LOD
- // Exit here
- return 1;
- }
- public OnObjectMoved(objectid)
- {
- new Float:x, Float:y, Float:z;
- for(new i; i < sizeof(Obj_FloorDoors); i ++)
- {
- if(objectid == Obj_FloorDoors[i][0])
- {
- GetObjectPos(Obj_FloorDoors[i][0], x, y, z);
- // A floor door has shut so move the elevator to the next floor in the queue
- if (x == X_DOOR_CLOSED)
- {
- Elevator_MoveToFloor(ElevatorQueue[0]);
- RemoveFirstQueueFloor();
- }
- }
- }
-
- if(objectid == Obj_Elevator) // The elevator reached the specified floor.
- {
- KillTimer(ElevatorBoostTimer); // Kills the timer, in case the elevator reached the floor before boost.
- FloorRequestedBy[ElevatorFloor] = INVALID_PLAYER_ID;
- Elevator_OpenDoors();
- Floor_OpenDoors(ElevatorFloor);
- GetObjectPos(Obj_Elevator, x, y, z);
- Label_Elevator = Create3DTextLabel("{CCCCCC}Press '{FFFFFF}~k~~CONVERSATION_YES~{CCCCCC}' to use elevator", 0xCCCCCCAA, X_ELEVATOR_POS - 1.8, Y_ELEVATOR_POS + 1.6, z - 0.6, 4.0, 0, 1);
- ElevatorState = ELEVATOR_STATE_WAITING;
- SetTimer("Elevator_TurnToIdle", ELEVATOR_WAIT_TIME, 0);
- }
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- if(dialogid == DIALOG_ID)
- {
- if(!response)
- return 0;
- if(FloorRequestedBy[listitem] != INVALID_PLAYER_ID || IsFloorInQueue(listitem))
- GameTextForPlayer(playerid, "~r~The floor is already in the queue", 3500, 4);
- else if(DidPlayerRequestElevator(playerid))
- GameTextForPlayer(playerid, "~r~You already requested the elevator", 3500, 4);
- else
- CallElevator(playerid, listitem);
- return 1;
- }
- return 0;
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- if(!IsPlayerInAnyVehicle(playerid) && (newkeys & KEY_YES))
- {
- new Float:pos[3];
- GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
- //printf("X = %0.2f | Y = %0.2f | Z = %0.2f", pos[0], pos[1], pos[2]);
-
- if(pos[1] < (Y_ELEVATOR_POS + 1.8) && pos[1] > (Y_ELEVATOR_POS - 1.8) && pos[0] < (X_ELEVATOR_POS + 1.8) && pos[0] > (X_ELEVATOR_POS - 1.8)) // He is using the elevator button
- ShowElevatorDialog(playerid);
- else // Is the player using a floor button?
- {
- if(pos[1] > (Y_ELEVATOR_POS + 1.81) && pos[1] < (Y_ELEVATOR_POS + 3.8) && pos[0] < (X_ELEVATOR_POS - 1.81) && pos[0] > (X_ELEVATOR_POS - 3.8))
- {
- // Create variable
- new i = 0;
-
- // Check for ground floor
- if (pos[2] > (GROUND_Z_COORD - 2) && pos[2] < (GROUND_Z_COORD + 2))
- {
- i = 0;
- }
- else i = 1;
-
- //printf("Floor = %d | State = %d | i = %d", ElevatorFloor, ElevatorState, i);
-
- // Check if the elevator is not moving and already on the requested floor
- if (ElevatorState != ELEVATOR_STATE_MOVING && ElevatorFloor == i)
- {
- // Display a gametext message and exit here
- GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~r~ZomboTech Elevator~n~~r~Is Already On~n~~r~This Floor!", 3000, 5);
- return 1;
- }
-
- //printf("Call Elevator to Floor %i", i);
-
- CallElevator(playerid, i);
- GameTextForPlayer(playerid, "~r~Elevator called", 3500, 4);
- }
- }
- }
- return 1;
- }
- // ------------------------ Functions ------------------------
- stock Elevator_Initialize()
- {
- // Initializes the elevator.
- Obj_Elevator = CreateObject(18755, X_ELEVATOR_POS, Y_ELEVATOR_POS, GROUND_Z_COORD, 0.000000, 0.000000, 270.000000);
- Obj_ElevatorDoors[0] = CreateObject(18757, X_ELEVATOR_POS, Y_ELEVATOR_POS, GROUND_Z_COORD, 0.000000, 0.000000, 270.000000);
- Obj_ElevatorDoors[1] = CreateObject(18756, X_ELEVATOR_POS, Y_ELEVATOR_POS, GROUND_Z_COORD, 0.000000, 0.000000, 270.000000);
- Label_Elevator = Create3DTextLabel("{CCCCCC}Press '{FFFFFF}~k~~CONVERSATION_YES~{CCCCCC}' to use elevator", 0xCCCCCCAA, X_ELEVATOR_POS - 1.8, Y_ELEVATOR_POS + 1.6, GROUND_Z_COORD - 0.6, 4.0, 0, 1);
- new string[128],
- Float:z;
- for(new i; i < sizeof(Obj_FloorDoors); i ++)
- {
- Obj_FloorDoors[i][0] = CreateObject(18757, X_ELEVATOR_POS, Y_ELEVATOR_POS + 0.245, GetDoorsZCoordForFloor(i), 0.000000, 0.000000, 270.000000);
- Obj_FloorDoors[i][1] = CreateObject(18756, X_ELEVATOR_POS, Y_ELEVATOR_POS + 0.245, GetDoorsZCoordForFloor(i), 0.000000, 0.000000, 270.000000);
- format(string, sizeof(string), "{CCCCCC}[%s]\n{CCCCCC}Press '{FFFFFF}~k~~CONVERSATION_YES~{CCCCCC}' to call", FloorNames[i]);
- if(i == 0)
- z = 47.460277;
- else
- z = 25.820274;
- Label_Floors[i] = Create3DTextLabel(string, 0xCCCCCCAA, X_ELEVATOR_POS - 2.5, Y_ELEVATOR_POS + 2.5, z - 0.2, 10.5, 0, 1);
- }
- // Open ground floor doors:
- Floor_OpenDoors(0);
- Elevator_OpenDoors();
- return 1;
- }
- stock Elevator_Destroy()
- {
- // Destroys the elevator and the elevator doors
- DestroyObject(Obj_Elevator);
- DestroyObject(Obj_ElevatorDoors[0]);
- DestroyObject(Obj_ElevatorDoors[1]);
-
- // Destroy the 3D text label inside the elevator
- Delete3DTextLabel(Label_Elevator);
- // Loop
- for(new i; i < sizeof(Obj_FloorDoors); i ++)
- {
- // Destroy the elevator floor doors and the floor 3D text labels
- DestroyObject(Obj_FloorDoors[i][0]);
- DestroyObject(Obj_FloorDoors[i][1]);
- Delete3DTextLabel(Label_Floors[i]);
- }
- return 1;
- }
- stock Elevator_OpenDoors()
- {
- // Opens the elevator's doors.
- new Float:x, Float:y, Float:z;
- GetObjectPos(Obj_ElevatorDoors[0], x, y, z);
- MoveObject(Obj_ElevatorDoors[0], X_DOOR_L_OPENED, y, z, DOORS_SPEED);
- MoveObject(Obj_ElevatorDoors[1], X_DOOR_R_OPENED, y, z, DOORS_SPEED);
- return 1;
- }
- stock Elevator_CloseDoors()
- {
- // Closes the elevator's doors.
- if(ElevatorState == ELEVATOR_STATE_MOVING)
- return 0;
- new Float:x, Float:y, Float:z;
- GetObjectPos(Obj_ElevatorDoors[0], x, y, z);
- MoveObject(Obj_ElevatorDoors[0], X_DOOR_CLOSED, y, z, DOORS_SPEED);
- MoveObject(Obj_ElevatorDoors[1], X_DOOR_CLOSED, y, z, DOORS_SPEED);
- return 1;
- }
- stock Floor_OpenDoors(floorid)
- {
- // Opens the doors at the specified floor.
- MoveObject(Obj_FloorDoors[floorid][0], X_DOOR_L_OPENED, Y_ELEVATOR_POS + 0.245, GetDoorsZCoordForFloor(floorid), DOORS_SPEED);
- MoveObject(Obj_FloorDoors[floorid][1], X_DOOR_R_OPENED, Y_ELEVATOR_POS + 0.245, GetDoorsZCoordForFloor(floorid), DOORS_SPEED);
-
- PlaySoundForPlayersInRange(6401, 50.0, X_ELEVATOR_POS, Y_ELEVATOR_POS, GetDoorsZCoordForFloor(floorid) + 5.0);
- return 1;
- }
- stock Floor_CloseDoors(floorid)
- {
- // Closes the doors at the specified floor.
- MoveObject(Obj_FloorDoors[floorid][0], X_ELEVATOR_POS, Y_ELEVATOR_POS + 0.245, GetDoorsZCoordForFloor(floorid), DOORS_SPEED);
- MoveObject(Obj_FloorDoors[floorid][1], X_ELEVATOR_POS, Y_ELEVATOR_POS + 0.245, GetDoorsZCoordForFloor(floorid), DOORS_SPEED);
-
- PlaySoundForPlayersInRange(6401, 50.0, X_ELEVATOR_POS, Y_ELEVATOR_POS, GetDoorsZCoordForFloor(floorid) + 5.0);
- return 1;
- }
- stock Elevator_MoveToFloor(floorid)
- {
- // Moves the elevator to specified floor (doors are meant to be already closed).
- ElevatorState = ELEVATOR_STATE_MOVING;
- ElevatorFloor = floorid;
- // Move the elevator slowly, to give time to clients to sync the object surfing. Then, boost it up:
- MoveObject(Obj_Elevator, X_ELEVATOR_POS, Y_ELEVATOR_POS, GetElevatorZCoordForFloor(floorid), 0.25);
- MoveObject(Obj_ElevatorDoors[0], X_ELEVATOR_POS, Y_ELEVATOR_POS, GetDoorsZCoordForFloor(floorid), 0.25);
- MoveObject(Obj_ElevatorDoors[1], X_ELEVATOR_POS, Y_ELEVATOR_POS, GetDoorsZCoordForFloor(floorid), 0.25);
- Delete3DTextLabel(Label_Elevator);
- ElevatorBoostTimer = SetTimerEx("Elevator_Boost", 2000, 0, "i", floorid);
- return 1;
- }
- public Elevator_Boost(floorid)
- {
- // Increases the elevator's speed until it reaches 'floorid'
- StopObject(Obj_Elevator);
- StopObject(Obj_ElevatorDoors[0]);
- StopObject(Obj_ElevatorDoors[1]);
-
- MoveObject(Obj_Elevator, X_ELEVATOR_POS, Y_ELEVATOR_POS, GetElevatorZCoordForFloor(floorid), ELEVATOR_SPEED);
- MoveObject(Obj_ElevatorDoors[0], X_ELEVATOR_POS, Y_ELEVATOR_POS, GetDoorsZCoordForFloor(floorid), ELEVATOR_SPEED);
- MoveObject(Obj_ElevatorDoors[1], X_ELEVATOR_POS, Y_ELEVATOR_POS, GetDoorsZCoordForFloor(floorid), ELEVATOR_SPEED);
- return 1;
- }
- public Elevator_TurnToIdle()
- {
- ElevatorState = ELEVATOR_STATE_IDLE;
- ReadNextFloorInQueue();
- return 1;
- }
- stock RemoveFirstQueueFloor()
- {
- // Removes the data in ElevatorQueue[0], and reorders the queue accordingly.
- for(new i; i < sizeof(ElevatorQueue) - 1; i ++)
- ElevatorQueue[i] = ElevatorQueue[i + 1];
- ElevatorQueue[sizeof(ElevatorQueue) - 1] = INVALID_FLOOR;
- return 1;
- }
- stock AddFloorToQueue(floorid)
- {
- // Adds 'floorid' at the end of the queue.
- // Scan for the first empty space:
- new slot = -1;
- for(new i; i < sizeof(ElevatorQueue); i ++)
- {
- if(ElevatorQueue[i] == INVALID_FLOOR)
- {
- slot = i;
- break;
- }
- }
- if(slot != -1)
- {
- ElevatorQueue[slot] = floorid;
- // If needed, move the elevator.
- if(ElevatorState == ELEVATOR_STATE_IDLE)
- ReadNextFloorInQueue();
- return 1;
- }
- return 0;
- }
- stock ResetElevatorQueue()
- {
- // Resets the queue.
- for(new i; i < sizeof(ElevatorQueue); i ++)
- {
- ElevatorQueue[i] = INVALID_FLOOR;
- FloorRequestedBy[i] = INVALID_PLAYER_ID;
- }
- return 1;
- }
- stock IsFloorInQueue(floorid)
- {
- // Checks if the specified floor is currently part of the queue.
- for(new i; i < sizeof(ElevatorQueue); i ++)
- if(ElevatorQueue[i] == floorid)
- return 1;
- return 0;
- }
- stock ReadNextFloorInQueue()
- {
- // Reads the next floor in the queue, closes doors, and goes to it.
- if(ElevatorState != ELEVATOR_STATE_IDLE || ElevatorQueue[0] == INVALID_FLOOR)
- return 0;
- Elevator_CloseDoors();
- Floor_CloseDoors(ElevatorFloor);
- return 1;
- }
- stock DidPlayerRequestElevator(playerid)
- {
- for(new i; i < sizeof(FloorRequestedBy); i ++)
- if(FloorRequestedBy[i] == playerid)
- return 1;
- return 0;
- }
- stock ShowElevatorDialog(playerid)
- {
- new string[512];
- for(new i; i < sizeof(ElevatorQueue); i ++)
- {
- if(FloorRequestedBy[i] != INVALID_PLAYER_ID)
- strcat(string, "{FF0000}");
- strcat(string, FloorNames[i]);
- strcat(string, "\n");
- }
- ShowPlayerDialog(playerid, DIALOG_ID, DIALOG_STYLE_LIST, "ZomboTech Elevator...", string, "Accept", "Cancel");
- return 1;
- }
- stock CallElevator(playerid, floorid)
- {
- // Calls the elevator (also used with the elevator dialog).
- if(FloorRequestedBy[floorid] != INVALID_PLAYER_ID || IsFloorInQueue(floorid))
- return 0;
- FloorRequestedBy[floorid] = playerid;
- AddFloorToQueue(floorid);
- return 1;
- }
- stock Float:GetElevatorZCoordForFloor(floorid)
- return (GROUND_Z_COORD + FloorZOffsets[floorid]);
- stock Float:GetDoorsZCoordForFloor(floorid)
- return (GROUND_Z_COORD + FloorZOffsets[floorid]);
|