Quantcast
Channel: SA-MP Forums
Viewing all articles
Browse latest Browse all 18226

[Tutorial] How to Combine Two Filterscripts

$
0
0
Hey There,
First of all This is my own Idea That how to combine/merge two fiterscripts into one.
And this is not a fully combiner tutorial you have to struggle yourself but this will make your struggle easy
So Lets Begin:
What to Do?
I am Taking an INCLUDE File Which is FILEMANAGER(JaTochNietDan)
It does'nt work for me so Its like a Spare include file.
Delete Everything from inside you include.
And just put your Script in it.
Now open pawno and open your FS which you want to combine.
I putted a DUMB script(cuz its by me):
Code:

// This is a comment
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT

#include <a_samp>
#include <zcmd>

#if defined FILTERSCRIPT

public OnFilterScriptInit()
{
        print("\n--------------------------------------");
        print(" Talal's First EVer FS loaded.");
        print("--------------------------------------\n");
        return 1;
}

public OnFilterScriptExit()
{
        return 1;
}

#else

main()
{
        print("\n----------------------------------");
        print(" Unloaded.");
        print("----------------------------------\n");
}

#endif
CMD:weapons(playerid,params[])
{
ShowPlayerDialog(playerid, 5000, DIALOG_STYLE_TABLIST_HEADERS, "Buy Weapon",
"Weapon\tPrice\tAmmo\n\
Buy\tFloowing\tWeapons\n\
Sawnoff\t$8000\t100\n\
SilencedPistol\t$500\t50\n\
9mmPistol\t$500\t50\n\
Sniper\t$10000\t50\n\
M4\t$8000\t50\n\
AK47\t$8000\t50\n\
DEAGLE\t$8000\t50", // Etc.
"Select", "Cancel");
return 1;
return 0;
}
stock SellWeapon(playerid,money,weapon,ammo)
{
    new playermoney = GetPlayerMoney(playerid);
    if(playermoney>money)
    {
        new string[80],weaponname[32];
        GivePlayerMoney(playerid,-money);
        GivePlayerWeapon(playerid,weapon,ammo);
        GetWeaponName(weapon,weaponname,sizeof(weaponname));
        format(string,sizeof(string),"You bought %i ammo of weapon %s for $%i",ammo,weaponname,money);
        return SendClientMessage(playerid,-1,string);
    }
    else return SendClientMessage(playerid,-1,"You are Cheap idiot Oops!You don't have enough money");
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 5000)
    {
        if(response) // If they clicked 'Select' or double-clicked a weapon
        {
            // Give them the weapon
            switch(listitem)
            {
                case 0: GivePlayerWeapon(playerid, 21, 50); // It does'nt work so ignore
                case 1: SellWeapon(playerid, 8000, 26, 50); // Give them an GSawnOFF
                case 2: SellWeapon(playerid, 500, 23, 50); // Give them an Silenced Pistol
                case 3: SellWeapon(playerid, 500, 22, 50);
                case 4: SellWeapon(playerid, 10000, 34, 50);
                case 5: SellWeapon(playerid, 8000, 31, 50);
                case 6: SellWeapon(playerid, 8000, 30, 50);
                case 7: SellWeapon(playerid, 8000, 24, 50);
            }
        }
        return 1; // We handled a dialog, so return 1. Just like OnPlayerCommandText.
    }

    return 0; // You MUST return 0 here! Just like OnPlayerCommandText.
}

Don't talk about my script down.
So I am gonna use sf_zombotech script by kye and matite:
Code:

// -----------------------------------------------------------------------------
// 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]);

Add
Code:

#include <your include file's name>
under the
Code:

#include <a_samp>
Now That my first script(which is in the include)
Have a OnDialogResponse callback
And the second script have the callback too so just a little effort to combine that callback

Like I said This will just make combining alot easier
+rep if helped cuz it really helped me
:cool:
















Fool HAHAHA

Viewing all articles
Browse latest Browse all 18226

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>