SA-MP Forums Archive
[Include] Adicione Elevadores - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+----- Forum: Lançamentos/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=56)
+----- Thread: [Include] Adicione Elevadores (/showthread.php?tid=675698)



Adicione Elevadores - Locky_ - 18.05.2020

Adicione Elevadores
Hб muito tempo nгo posto um lanзamento, mas, nos tempos livres... hб algumas coisas que vem em mente.

Basicamente, esta include adicione elevadores ao jogo.
- Mas Locky, nгo hб o FS do ls_beachside, ls_apartments1, ls_elevator original do SA-MP?
Sim, hб eles, em inglкs, mas vocк caso queira realizar ediзхes... bem, й bem trabalhoso, e se vocк criar um prйdio que pode colocar elevador e tenha que configurar tudo, alйm disso, vocк terб que utilizar scripts (filterscripts) diferentes para manipular cada elevador.

Minha maior dificuldade (por incrнvel que pareзa) foi acertar os cбlculos matemбticos para mover as portas. Quando vocк cria um script para uma ъnica tarefa (ls_beachside por exemplo) vocк pega a coordenada da porta aberta, e dela fechada (tanto X ou Y). A facilidade deste, й que й sу vocк criar o elevador em determinada posiзгo. O prуprio script irб calcular as coordenadas para abrir.

Requisitos Agradecimentos especiais a Zamaroht (a base criada para os elevadores originalmente), Kye (barulhinho do som), e Matite (objetos novos do SA-MP 0.3.7)

Funзхes
pawn Code:
native AddElevator(Float:posx, Float:posy, Float:posz, Float:ang, ElevatorName[] = "", Interior = -1, VirtualWorld = -1);
native IsValidElevator(elevatorid);
native DestroyElevator(elevatorid);
native GetElevatorName(elevatorid, &ElevatorName[], &size);
native GetElevatorPos(elevatorid, Float:x, Float:y, Float:z);
native GetElevatorOnFloor(elevatorid);
native AddFloorToElevator(elevatorid, Float:fz, floorname[], bool:IsOpen = false);
native CallElevatorToFloor(elevatorid, floorid);
native OpenPortsElevator(elevatorid);
native ClosePortsElevator(elevatorid);
native SelectFloorOnElevator(elevatorid, floorid);
native GetMaxFloorElevator(elevatorid);
native GetFloorNameForElevator(floorid, elevatorid, &floorname[], &size);
native IsPlayerInElevator(playerid, elevatorid);
native GetPlayerFrontElevator(playerid, elevatorid);
native GetElevatorPoolSize();
Explicando as funзхes Callbacks
pawn Code:
forward OnElevatorCalled(elevatorid, floorid);
forward OnElevatorStoped(elevatorid);
forward OnPlayerEnterElevator(playerid, elevatorid);
forward OnPlayerIsFrontElevator(playerid, elevatorid, floor);
forward OnPlayerLeaveElevator(playerid, elevatorid);
forward OnPlayerLeaveFrontElevator(playerid, elevatorid, floor);
Explicando as callbacks No meu exemplo, consegui adicionar 4 elevadores, no mesmo script, utilizando uma ъnica dialog, e as ediзхes ficaram um pouquinho simples. Adicionei me baseando nos elevadores de tais scripts.

Cуdigo para exemplo do uso do cуdigo (e realizado em meus testes)
pawn Code:
/*
    Example Elevator
*/

#pragma warning disable 239 //pawn 3.10.10
#include a_samp
#include streamer
#include elevator

#define FILTERSCRIPT

#define DIALOG_ELEVADOR 2000

stock PlaySoundForPlayersInRange(soundid, Float:range, Float:x, Float:y, Float:z)
{
    for(new i=0; i<=GetPlayerPoolSize(); i++)
    {
        if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i,range,x,y,z))
        {
            PlayerPlaySound(i, soundid, x, y, z);
        }
    }
}


new Elevator1; // Downtown Los Santos
new Elevator2; // Beachside Los Santos
new Elevator3; // Market Los Santos
new Elevator4; // ZomboTech San Fierro

public OnFilterScriptInit()
{  
    // Downtown Los Santos
    Elevator1 = AddElevator(1786.6781, -1303.45948, 14.5710, 270.0, "Downtown Los Santos", 0, 0);
    AddFloorToElevator(Elevator1, 14.5709, "Tйrreo", true);
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479), "1є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 1.0)), "2є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 2.0)), "3є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 3.0)), "4є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 4.0)), "5є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 5.0)), "6є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 6.0)), "7є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 7.0)), "8є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 8.0)), "9є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 9.0)), "10є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 10.0)), "11є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 11.0)), "12є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 12.0)), "13є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 13.0)), "14є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 14.0)), "15є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 15.0)), "16є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 16.0)), "17є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 17.0)), "18є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 18.0)), "19є Andar");
    AddFloorToElevator(Elevator1, (14.5709 + 8.5479 + (5.45155 * 19.0)), "20є Andar");

    // Beachside
    Elevator2 = AddElevator(287.942413, -1609.341064, 18.755348, 80.0, "Beachside Los Santos", 0, 0);
    AddFloorToElevator(Elevator2, 18.75, "Estacionamento");
    AddFloorToElevator(Elevator2, 33.826, "Tйrreo", true);
    AddFloorToElevator(Elevator2, 47.886, "1є Andar");
    AddFloorToElevator(Elevator2, (47.886 + (29.130733 + (4.5 * 1))), "2є Andar");
    AddFloorToElevator(Elevator2, (47.886 + (29.130733 + (4.5 * 2))), "3є Andar");
    AddFloorToElevator(Elevator2, (47.886 + (29.130733 + (4.5 * 3))), "4є Andar");
    AddFloorToElevator(Elevator2, (47.886 + (29.130733 + (4.5 * 4))), "5є Andar");
    AddFloorToElevator(Elevator2, (47.886 + (29.130733 + (4.5 * 5))), "6є Andar");
    AddFloorToElevator(Elevator2, (47.886 + (29.130733 + (4.5 * 6))), "7є Andar");
    AddFloorToElevator(Elevator2, (47.886 + (29.130733 + (4.5 * 7))), "8є Andar");
    AddFloorToElevator(Elevator2, (47.886 + (29.130733 + (4.5 * 8))), "9є Andar");
    AddFloorToElevator(Elevator2, (47.886 + (29.130733 + (4.5 * 9))), "10є Andar");
    AddFloorToElevator(Elevator2, (47.886 + (29.130733 + (4.5 * 10))), "11є Andar");
    AddFloorToElevator(Elevator2, (47.886 + (29.130733 + (4.5 * 11))), "12є Andar");

    // Portas nos apartamentos
    CreateDynamicObject(1536, 275.71625, -1621.05615, 46.00830,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 275.73999, -1621.06470, 95.51733,   0.00000, 0.00000, 79.88779);
    CreateDynamicObject(1536, 295.07391, -1624.46301, 95.51733,   0.00000, 0.00000, 79.88779);
    CreateDynamicObject(1536, 295.07391, -1624.46301, 91.02124,   0.00000, 0.00000, 79.88779);
    CreateDynamicObject(1536, 275.76733, -1621.02380, 91.02124,   0.00000, 0.00000, 79.88779);
    CreateDynamicObject(1536, 275.74573, -1621.04224, 86.52446,   0.00000, 0.00000, 79.88779);
    CreateDynamicObject(1536, 295.07285, -1624.44983, 86.52446,   0.00000, 0.00000, 79.88779);
    CreateDynamicObject(1536, 295.07281, -1624.44983, 82.00750,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 275.79099, -1621.04138, 82.00750,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 275.82355, -1621.07202, 77.52800,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 295.09464, -1624.48511, 77.52800,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 295.10526, -1624.42615, 73.00648,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 275.70840, -1621.05469, 73.00648,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 275.70840, -1621.05469, 68.50540,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 295.12576, -1624.46777, 68.50540,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 295.20419, -1624.48340, 64.00517,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 275.71280, -1621.05200, 63.98520,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 275.67557, -1621.02722, 59.48780,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 295.13309, -1624.44238, 59.50780,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 295.13062, -1624.46228, 54.99290,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 275.71942, -1621.03137, 54.99290,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 275.71796, -1621.07141, 50.51244,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 295.12808, -1624.46216, 50.51244,   0.00000, 0.00000, 79.88780);
    CreateDynamicObject(1536, 295.12811, -1624.46216, 46.00830,   0.00000, 0.00000, 79.88780);

    //Market Los Santos
    CreateDynamicObject(19595, 1160.96, -1180.58, 70.4141, 0.0, 0.0, 0.0);
    CreateDynamicObject(19798, 1160.96, -1180.58, 20.4141, 0.0, 0.0, 0.0);

    Elevator3 = AddElevator(1181.622924, -1180.554687, 20.879316, 0.0, "Market Los Santos", 0, 0);
    AddFloorToElevator(Elevator3, 20.879, "Estacionamento");
    AddFloorToElevator(Elevator3, 34.485, "Recepзгo", true);
    AddFloorToElevator(Elevator3, 39.688, "1є Andar");
    AddFloorToElevator(Elevator3, 44.892, "2є Andar");
    AddFloorToElevator(Elevator3, 50.10, "3є Andar");
    AddFloorToElevator(Elevator3, 55.30, "4є Andar");
    AddFloorToElevator(Elevator3, 60.504, "5є Andar");
    AddFloorToElevator(Elevator3, 65.707, "6є Andar");
    AddFloorToElevator(Elevator3, 70.911, "7є Andar");
    AddFloorToElevator(Elevator3, 76.115, "8є Andar");
    AddFloorToElevator(Elevator3, 81.319, "9є Andar");

    // ZomboTech San Fierro
    CreateDynamicObject(19593, -1951.687500, 660.023986, 89.507797, 0, 0, 0);
    CreateDynamicObject(19594, -1951.687500, 660.023986, 29.507797, 0, 0, 0);

    Elevator4 = AddElevator(-1951.603027, 636.418334, 47.45149, 270.0, "Laboratуrio ZomboTech", 0, 0);
    AddFloorToElevator(Elevator4, 47.45149, "Recepзгo", true);
    AddFloorToElevator(Elevator4, 25.82348, "Laboratуrio");

    // Remoзгo de objetos em jogadores online
    for(new playerid; playerid <= GetPlayerPoolSize(); playerid++)
    {
        if(IsPlayerConnected(playerid))
        {
            RemovesForPlayer(playerid);
        }
    }
    return 1;
}

public OnFilterScriptExit()
{
    DestroyElevator(Elevator1); // Downtown Los Santos
    DestroyElevator(Elevator2); // Beachside Los Santos
    DestroyElevator(Elevator3); // Market Los Santos
    DestroyElevator(Elevator4); // ZomboTech SF
    return 1;
}

public OnPlayerConnect(playerid)
{
    RemovesForPlayer(playerid);
    return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(newkeys & KEY_YES)
    {
        if(IsPlayerInElevator(playerid, GetPVarInt(playerid, "elevator_id"))) return ShowDialogElevator(playerid);
        if(CallElevatorToFloor(GetPVarInt(playerid, "front_elevator_id"), GetPlayerFrontElevator(playerid, GetPVarInt(playerid, "front_elevator_id"))))
        {
            return SendClientMessage(playerid, 0xFFFF00FF, "* Elevador chamado!");
        }
    }
    return 1;
}

public OnElevatorStoped(elevatorid)
{
    new Float:x, Float:y, Float:z;
    GetElevatorPos(elevatorid, x, y, z);
    PlaySoundForPlayersInRange(6401, 50.0, x, y, z);
    return 1;
}
public OnPlayerEnterElevator(playerid, elevatorid)
{
    new Msg[144], ElevatorName[32];
    GetElevatorName(elevatorid, ElevatorName, sizeof ElevatorName);
    format(Msg, sizeof Msg, "* Vocк entrou no elevador %s!", ElevatorName);
    SendClientMessage(playerid, 0xFFFF00FF, Msg);
    SetPVarInt(playerid, "elevator_id", elevatorid);
    return 1;
}
public OnPlayerIsFrontElevator(playerid, elevatorid, floor)
{
    new Msg[144], floorname[32], ElevatorName[32];
    GetFloorNameForElevator(floor, elevatorid, floorname, 32);
    GetElevatorName(elevatorid, ElevatorName, sizeof ElevatorName);
    format(Msg, sizeof Msg, "* Vocк estб no %s do elevador %s.", floorname, ElevatorName);
    SendClientMessage(playerid, 0xFFFF00FF, Msg);
    SetPVarInt(playerid, "front_elevator_id", elevatorid);
    return 1;
}
public OnPlayerLeaveFrontElevator(playerid, elevatorid, floor)
{
    DeletePVar(playerid, "front_elevator_id");
    return 1;
}
public OnPlayerLeaveElevator(playerid, elevatorid)
{
    DeletePVar(playerid, "elevator_id");
    return 1;
}

ShowDialogElevator(playerid)
{
    new eID = GetPVarInt(playerid, "elevator_id");
    //if(!IsPlayerInElevator(playerid, eID)) return SendClientMessage(playerid, 0xFF0000FF, "* Vocк nгo estб em um elevador.");
    new Msg[400], Header[128], elevatorname[32];
    GetElevatorName(eID, elevatorname, sizeof elevatorname);
    format(Header, sizeof Header, "Elevador %s", elevatorname);
    for(new i; i < GetMaxFloorElevator(eID); i++)
    {
        new floorname[32];
        GetFloorNameForElevator(i, eID, floorname, sizeof floorname);
        format(Msg, sizeof Msg, "%s%s%s\n", Msg, (i == GetElevatorOnFloor(eID) ? ("{FFFF00}") : ("{FFFFFF}")), floorname);
    }
    ShowPlayerDialog(playerid, DIALOG_ELEVADOR, DIALOG_STYLE_LIST, Header, Msg, "Selecionar", "Cancelar");
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_ELEVADOR)
    {
        if(!response) return 1;
        SelectFloorOnElevator(GetPVarInt(playerid, "elevator_id"), listitem);
    }
    return 1;
}

RemovesForPlayer(playerid)
{
    // Beachside
    RemoveBuildingForPlayer(playerid, 1226, 265.481, -1581.1, 32.9311, 5.0);
    RemoveBuildingForPlayer(playerid, 6518, 280.297, -1606.2, 72.3984, 250.0);

    // Market
    RemoveBuildingForPlayer(playerid, 5766, 1160.96, -1180.58, 70.4141, 250.0); // Awning shadows
    RemoveBuildingForPlayer(playerid, 5767, 1160.96, -1180.58, 70.4141, 250.0); // Building
    RemoveBuildingForPlayer(playerid, 5964, 1160.96, -1180.58, 70.4141, 250.0); // LOD

    // ZomboTech
    RemoveBuildingForPlayer(playerid, 10027, -1951.687500, 660.023986, 89.507797, 250.0); // Building
    RemoveBuildingForPlayer(playerid, 9939, -1951.687500, 660.023986, 89.507797, 250.0); // LOD

}
Obtenha
Vocк pode baixar atravйs do GitHub
https://github.com/NicKv7/Elevator-Include


Changelog
Code:
18/05/2020 - v1.0 - Versгo inicial
Crнticas, Sugestхes ou Bugs? Por favor, comunique.


Re: Adicione Elevadores - HelderPT - 19.05.2020

Bem na hora que eu iria precisava de algo para fazer um Elevador, уtimo trabalho Locky.

+REP


Re: Adicione Elevadores - iPhonee - 19.05.2020

A maior habilidade de um lнder й desenvolver habilidades extraordinбrias, em pessoas comuns.
Parabйns muito bom, assim podemos corrigir o prйdio da praia de santa mфnica.