br0
Ученик
Здраствуйте ув., юзеры павно. Не давно нашел фс системы лифта, но никак не могу разобратся с координатами.
Вот код самого фс -
Видно что лифт двигается на 2 этажа, с координатами дверей и шахты более менее разобрался. Не пойму где найти коры кнопок для вызова лифта.
Если кто то сталкивался с такой системой, подпишите пожалуйста какая строчка за что отвечает. Именно система лифта, что бы его можна было переместить в другое место.
Буду благодарен!
Вот код самого фс -
PHP:
#define FILTERSCRIPT
#include <a_samp>
#define E_IDLE (0)
#define E_RESERVED (1)
#define E_MOVING (2)
#define E_DISABLED (3)
#define PRESSED(%0) \
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
#define public:%1(%2) \
forward %1(%2); \
public %1(%2)
new Float:ent_coords[2][2][3] =
{
{
{ -1754.1759,962.6212,23.3906 }, //enter
{ -1754.2061,966.6420,23.7410 } //exit
},
{
{ -1754.1205,968.3986,24.7410 }, //on enter
{ -1754.2034,960.5912,24.8828 } // on exit
}
};
new Float:tl_coords[5][3] =
{
{ -1740.6286, 996.3112, 21.5650 },
{ -1740.6304, 996.3479, 28.7810 },
{ -1740.2249, 992.4561, 21.9781 },
{ -1740.2249, 992.4561, 29.1739 },
{ -1733.8797, 996.5989, 21.9590 }
};
new Float:ez_coords[2][2] =
{
{ 22.426254, 22.396247 },
{ 29.592257, 29.580228 }
};
new the_elevator;
new e_doors[3][2];
new gObject[443];
new elevator_state;
new current_floor = 0;
new Text3D:elevator_labels[6];
new bool:door_open = false;
new Float:e_pos_z;
new e_timer;
new ent_pickup[2];
new bool:created;
/*
halt(mseconds)
{
new count = GetTickCount();
while(GetTickCount() - count != mseconds)
{
}
}*/
forward CreateHL( step );
public CreateHL( step )
{
gObject[0] = CreateObject(1737, -1757.609741, 1015.178894, 26.290615, 0.000000, 0.000000, 90.000000, 50.0);// Был маппинг по больше , удалил что бы не мешало.
}
public OnFilterScriptInit()
{
e_doors[0][0] = CreateObject(18756, -1738.578735, 994.296264, 22.396247, 0.000000, 0.000000, 0.000000); //carparkdoorright
e_doors[0][1] = CreateObject(18757, -1738.578735, 994.293273, 22.396247, 0.000000, 0.000000, 0.000000); //carparkdoorleft
e_doors[1][0] = CreateObject(18756, -1738.578735, 994.296264, 29.580228, 0.000000, 0.000000, 0.000000); //lobbydoorright
e_doors[1][1] = CreateObject(18757, -1738.578735, 994.293273, 29.580228, 0.000000, 0.000000, 0.000000); //lobbydoorleft
e_doors[2][0] = CreateObject(18756, -1738.338500, 994.296264, 22.396247, 0.000000, 0.000000, 0.000000); //eledoorright
e_doors[2][1] = CreateObject(18757, -1738.338500, 994.293273, 22.396247, 0.000000, 0.000000, 0.000000); //eledoorleft
the_elevator = CreateObject(18755, -1738.332641, 994.293273, 22.426254, 0.000000, 0.000000, 0.000000); //elevatorposcarpark
elevator_labels[0] = Create3DTextLabel("{AA00FF}(F) {FFFFFF}Call elevator", -1, tl_coords[0][0], tl_coords[0][1], tl_coords[0][2], 0.8, 0, 0);
elevator_labels[1] = Create3DTextLabel("{AA00FF}(F) {FFFFFF}Call elevator", -1, tl_coords[1][0], tl_coords[1][1], tl_coords[1][2], 0.8, 0, 0);
elevator_labels[2] = Create3DTextLabel("{AA00FF}(F) {FFFFFF}Lobby\n{AA00FF}(Y) {FFFFFF}Open door", -1, tl_coords[2][0], tl_coords[2][1], tl_coords[2][2], 0.8, 0, 0);
elevator_labels[3] = Create3DTextLabel("{AA00FF}(F) {FFFFFF}Carpark\n{AA00FF}(Y) {FFFFFF}Open door", -1, tl_coords[3][0], tl_coords[3][1], tl_coords[3][2], 0.8, 0, 0);
elevator_labels[4] = Create3DTextLabel("{AA00FF}(F) {FFFFFF}Disable elevator", -1, tl_coords[4][0], tl_coords[4][1], tl_coords[4][2], 0.8, 0, 0);
ent_pickup[0] = CreatePickup(376, 23, ent_coords[0][0][0], ent_coords[0][0][1], ent_coords[0][0][2], 0);
ent_pickup[1] = CreatePickup(376, 23, ent_coords[0][1][0], ent_coords[0][1][1], ent_coords[0][1][2], 0);
for(new i; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
SetPlayerMapIcon(i, 0, ent_coords[0][0][0], ent_coords[0][0][1], ent_coords[0][0][2], 0, 0xFFFFFF00, MAPICON_LOCAL_CHECKPOINT);
SetPlayerMapIcon(i, 1, ent_coords[0][1][0], ent_coords[0][1][1], ent_coords[0][1][2], 0, 0xFFFFFF00, MAPICON_LOCAL_CHECKPOINT);
RemoveBuildingForPlayer(i, 10010, 0, 0, 0, 10000);
RemoveBuildingForPlayer(i, 10259, 0, 0, 0, 10000);
}
}
return 1;
}
public OnFilterScriptExit()
{
DestroyObject(the_elevator);
for(new i; i < MAX_OBJECTS; i++)
{
DestroyObject(i);
}/*
for(new i; i < 3; i++)
{
DestroyObject(e_doors[i][0]);
DestroyObject(e_doors[i][1]);
}
for(new i; i < 6; i++)
{
Delete3DTextLabel(elevator_labels[i]);
}
DestroyPickup(ent_pickup[0]);
DestroyPickup(ent_pickup[1]);
elevator_state = E_IDLE;
current_floor = 0;
e_pos_z = 0.0;*/
return 1;
}
public OnPlayerConnect(playerid)
{
SetPlayerMapIcon(playerid, 0, ent_coords[0][0][0], ent_coords[0][0][1], ent_coords[0][0][2], 0, 0xFFFFFF00, MAPICON_LOCAL_CHECKPOINT);
SetPlayerMapIcon(playerid, 1, ent_coords[0][1][0], ent_coords[0][1][1], ent_coords[0][1][2], 0, 0xFFFFFF00, MAPICON_LOCAL_CHECKPOINT);
RemoveBuildingForPlayer(playerid, 10010, 0, 0, 0, 10000);
RemoveBuildingForPlayer(playerid, 10259, 0, 0, 0, 10000);
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == ent_pickup[0])
{
if(!created) SetTimerEx("CreateHL", 1000, 0, "i", 0);
return SetPlayerPos(playerid, ent_coords[1][0][0], ent_coords[1][0][1], ent_coords[1][0][2]);
}
if(pickupid == ent_pickup[1])
return SetPlayerPos(playerid, ent_coords[1][1][0], ent_coords[1][1][1], ent_coords[1][1][2]);
return 1;
}
public OnObjectMoved(objectid)
{
if(objectid == the_elevator)
{
if(elevator_state == E_MOVING)
{
if(current_floor != 0)
e_on_arrive(0);
else if(current_floor != 1)
e_on_arrive(1);
}
}
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(PRESSED(KEY_SECONDARY_ATTACK))
{
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
{
if( GetPlayerDistanceFromPoint(playerid, tl_coords[4][0], tl_coords[4][1], tl_coords[4][2]) < 0.8)
{
if(elevator_state != E_DISABLED)
{
Update3DTextLabelText(elevator_labels[0], 0xFF99AAFF, "Disabled");
Update3DTextLabelText(elevator_labels[1], 0xFF99AAFF, "Disabled");
Update3DTextLabelText(elevator_labels[4], 0xFFFFFFFF, "{AA00FF}(F) {FFFFFF}Enable elevator");
if(e_pos_z != 0.0) Update3DTextLabelText(elevator_labels[5], 0xFFFFFFFF, "{FF99AA}Disabled");
if(elevator_state == E_MOVING)
{
StopObject(the_elevator);
StopObject(e_doors[2][0]);
StopObject(e_doors[2][1]);
new Float:pos;
GetObjectPos(the_elevator, pos, pos, e_pos_z);
elevator_labels[5] = Create3DTextLabel("{FF99AA}Disabled", -1, tl_coords[2][0], tl_coords[2][1], e_pos_z-0.2, 1.0, 0, 0);
current_floor = -3;
}
else
{
Update3DTextLabelText(elevator_labels[2], 0xFF99AAFF, "Disabled");
Update3DTextLabelText(elevator_labels[3], 0xFF99AAFF, "Disabled");
}
PlayerPlaySound(playerid, 1054, 0.0, 0.0, 0.0);
return elevator_state = E_DISABLED;
}
else
{
if(e_pos_z != 0.0) Update3DTextLabelText(elevator_labels[5], 0xFFFFFFFF, "{AA00FF}(F) {FFFFFF}Lobby\n{AA00FF}(Y) {FFFFFF}Carpark");
else
{
Update3DTextLabelText(elevator_labels[2], 0xFFFFFFFF, "{AA00FF}(F) {FFFFFF}Lobby\n{AA00FF}(Y) {FFFFFF}Open door");
Update3DTextLabelText(elevator_labels[3], 0xFFFFFFFF, "{AA00FF}(F) {FFFFFF}Carpark\n{AA00FF}(Y) {FFFFFF}Open door");
}
Update3DTextLabelText(elevator_labels[0], 0xFFFFFFFF, "{AA00FF}(F) {FFFFFF}Call elevator");
Update3DTextLabelText(elevator_labels[1], 0xFFFFFFFF, "{AA00FF}(F) {FFFFFF}Call elevator");
Update3DTextLabelText(elevator_labels[4], 0xFFFFFFFF, "{AA00FF}(F) {FFFFFF}Disable elevator");
PlayerPlaySound(playerid, 1054, 0.0, 0.0, 0.0);
return elevator_state = E_IDLE;
}
}
if(elevator_state == E_IDLE && elevator_state != E_DISABLED)
{
if(GetPlayerDistanceFromPoint(playerid, tl_coords[2][0], tl_coords[2][1], e_pos_z -0.2) < 0.8)
{
Update3DTextLabelText(elevator_labels[5], 0xFFFFFFFF, "Lobby...");
Update3DTextLabelText(elevator_labels[0], 0xFF99AAFF, "Reserved");
Update3DTextLabelText(elevator_labels[1], 0xFF99AAFF, "Reserved");
PlayerPlaySound(playerid, 1054, 0.0, 0.0, 0.0);
current_floor = 0;
e_on_request(1);
return elevator_state = E_RESERVED;
}
if(GetPlayerDistanceFromPoint(playerid, tl_coords[0][0], tl_coords[0][1], tl_coords[0][2]) < 0.8)
{
Update3DTextLabelText(elevator_labels[2], 0xFFFFFFFF, "Lobby...");
Update3DTextLabelText(elevator_labels[3], 0xFFFFFFFF, "Carpark...");
PlayerPlaySound(playerid, 1054, 0.0, 0.0, 0.0);
e_on_request(0);
//ApplyAnimation(playerid, "HEIST9", "UseSwipeCard", 10.0, 0, 0, 0, 0, 5200);
return elevator_state = E_RESERVED;
}
if(GetPlayerDistanceFromPoint(playerid, tl_coords[1][0], tl_coords[1][1], tl_coords[1][2]) < 0.8)
{
Update3DTextLabelText(elevator_labels[2], 0xFFFFFFFF, "Lobby...");
Update3DTextLabelText(elevator_labels[3], 0xFFFFFFFF, "Carpark...");
PlayerPlaySound(playerid, 1054, 0.0, 0.0, 0.0);
e_on_request(1);
//ApplyAnimation(playerid, "HEIST9", "UseSwipeCard", 10.0, 0, 0, 0, 0, 5200);
return elevator_state = E_RESERVED;
}
if(GetPlayerDistanceFromPoint(playerid, tl_coords[current_floor+2][0], tl_coords[current_floor+2][1], tl_coords[current_floor+2][2]) < 0.8)
{
Update3DTextLabelText(elevator_labels[2], 0xFFFFFFFF, "Lobby...");
Update3DTextLabelText(elevator_labels[3], 0xFFFFFFFF, "Carpark...");
PlayerPlaySound(playerid, 1054, 0.0, 0.0, 0.0);
if(current_floor != 0) e_on_request(0);
else e_on_request(1);
//ApplyAnimation(playerid, "HEIST9", "UseSwipeCard", 10.0, 0, 0, 0, 0, 5200);
return elevator_state = E_RESERVED;
}
}
}
}
if(PRESSED(KEY_YES))
{
if(elevator_state != E_DISABLED)
{
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
{
if(GetPlayerDistanceFromPoint(playerid, tl_coords[2][0], tl_coords[2][1], e_pos_z -0.2) < 0.8)
{
Update3DTextLabelText(elevator_labels[5], 0xFFFFFFFF, "Carpark...");
current_floor = 1;
PlayerPlaySound(playerid, 1054, 0.0, 0.0, 0.0);
e_on_request(0);
return elevator_state = E_RESERVED;
}
if(GetPlayerDistanceFromPoint(playerid, tl_coords[current_floor+2][0], tl_coords[current_floor+2][1], tl_coords[current_floor+2][2]) < 0.8)
{
if(elevator_state == E_IDLE)
{
SetPlayerFacingAngle(playerid, 135);
PlayerPlaySound(playerid, 1054, 0.0, 0.0, 0.0);
if(current_floor != 0) e_on_request(0);
else e_on_request(1);
return elevator_state = E_RESERVED;
}
else if(door_open)
{
SetPlayerFacingAngle(playerid, 135);
PlayerPlaySound(playerid, 1054, 0.0, 0.0, 0.0);
SetTimerEx("e_on_doors_close", 300, 0, "i", current_floor);
KillTimer(e_timer);
}
}
}
}
}
return 1;
}
public:e_on_request(floor)
{
Update3DTextLabelText(elevator_labels[0], 0xFF99AAFF, "Reserved");
Update3DTextLabelText(elevator_labels[1], 0xFF99AAFF, "Reserved");
if(current_floor == floor) SetTimerEx("e_on_doors_open", 300, 0, "i", floor);
else SetTimerEx("e_move_to_floor", 2000, 0, "i", floor);
}
public:e_on_doors_open(floor)
{
if(elevator_state == E_DISABLED) return 0;
Update3DTextLabelText(elevator_labels[2], 0xFF99AAFF, "{AA00FF}(Y) {FFFFFF}Close door");
Update3DTextLabelText(elevator_labels[3], 0xFF99AAFF, "{AA00FF}(Y) {FFFFFF}Close door");
MoveObject(e_doors[floor][1], -1738.578735, 995.893273, ez_coords[floor][1], 0.7, 0.0, 0.0, 0.0);
MoveObject(e_doors[floor][0], -1738.578735, 992.663273, ez_coords[floor][1], 0.7, 0.0, 0.0, 0.0);
MoveObject(e_doors[2][1], -1738.338500, 995.896264, ez_coords[floor][1], 0.7, 0.0, 0.0, 0.0);
MoveObject(e_doors[2][0], -1738.338500, 992.666264, ez_coords[floor][1], 0.7, 0.0, 0.0, 0.0);
e_timer = SetTimerEx("e_on_doors_close", 5000, 0, "i", floor);
door_open = true;
return 1;
}
public:e_on_doors_close(floor)
{
MoveObject(e_doors[floor][0], -1738.578735, 994.296264, ez_coords[floor][1], 0.9, 0.0, 0.0, 0.0);
MoveObject(e_doors[floor][1], -1738.578735, 994.293264, ez_coords[floor][1], 0.9, 0.0, 0.0, 0.0);
MoveObject(e_doors[2][0], -1738.338500, 994.296264, ez_coords[floor][1], 0.9, 0.0, 0.0, 0.0);
MoveObject(e_doors[2][1], -1738.338500, 994.293264, ez_coords[floor][1], 0.9, 0.0, 0.0, 0.0);
new e_checker = SetTimerEx("e_on_doors_close_check", 800, 1, "f", ez_coords[floor][1]);
SetTimerEx("e_KillTimer", 2410, 0, "i", e_checker);
if(elevator_state != E_DISABLED)
{
Update3DTextLabelText(elevator_labels[0], 0xFFFFFFFF, "{AA00FF}(F) {FFFFFF}Call elevator");
Update3DTextLabelText(elevator_labels[1], 0xFFFFFFFF, "{AA00FF}(F) {FFFFFF}Call elevator");
Update3DTextLabelText(elevator_labels[2], 0xFFFFFFFF, "{AA00FF}(F) {FFFFFF}Lobby\n{AA00FF}(Y) {FFFFFF}Open door");
Update3DTextLabelText(elevator_labels[3], 0xFFFFFFFF, "{AA00FF}(F) {FFFFFF}Car park\n{AA00FF}(Y) {FFFFFF}Open door");
elevator_state = E_IDLE;
}
door_open = false;
return 1;
}
public:e_on_doors_close_check(Float:ez)
{
if(elevator_state != E_RESERVED)
{
for(new user; user < MAX_PLAYERS; user++)
{
if(IsPlayerInRangeOfPoint(user, 0.28, -1740.2819, 994.293273, ez-0.769) || IsPlayerInRangeOfPoint(user, 0.2, -1740.4016, 994.593273, ez-0.769) || IsPlayerInRangeOfPoint(user, 0.2, -1740.4016, 993.993273, ez-0.769))
{
new Float:x, Float:y, Float:z;
GetPlayerPos(user, x, y, z);
if(x < -1740.2819) SetPlayerPos(user, x -0.5, y, z);
else if(x > -1740.2819) SetPlayerPos(user, x +0.5, y, z);
}
}
for(new vehicle; vehicle < MAX_VEHICLES; vehicle++)
{
if(IsVehicleInRangeOfPoint(vehicle, 2.0, -1739.2819, 994.293273, ez-0.769))
{
SetVehicleToRespawn(vehicle);
}
}
}
}
public:e_on_arrive(floor)
{
SetTimerEx("e_on_doors_open", 1000, 0, "i", floor);
current_floor = floor;
elevator_state = E_RESERVED;
return 1;
}
public:e_move_to_floor(floor)
{
if(elevator_state == E_DISABLED) return 0;
MoveObject(the_elevator, -1738.332641, 994.293273, ez_coords[floor][0], 1.5, 0.000000, 0.000000, 0.000000);
MoveObject(e_doors[2][0], -1738.338500, 994.296264, ez_coords[floor][1], 1.5, 0.000000, 0.000000, 0.000000);
MoveObject(e_doors[2][1], -1738.338500, 994.293273, ez_coords[floor][1], 1.5, 0.000000, 0.000000, 0.000000);
Update3DTextLabelText(elevator_labels[2], 0xFFFFFFFF, " ");
Update3DTextLabelText(elevator_labels[3], 0xFFFFFFFF, " ");
elevator_state = E_MOVING;
if(e_pos_z != 0.0)
{
Delete3DTextLabel(elevator_labels[5]);
e_pos_z = 0.0;
}
return 1;
}
public:e_KillTimer(timer) KillTimer(timer);
stock IsVehicleInRangeOfPoint(vehicleid, Float:radi, Float:x, Float:y, Float:z)
{
new Float:e_posx, Float:e_posy, Float:e_posz;
GetVehiclePos(vehicleid, e_posx, e_posy, e_posz);
e_posx = (e_posx -x);
e_posy = (e_posy -y);
e_posz = (e_posz -z);
if (((e_posx < radi) && (e_posx > -radi)) && ((e_posy < radi) && (e_posy > -radi)) && ((e_posz < radi) && (e_posz > -radi)))
{
return 1;
}
return 0;
}
Видно что лифт двигается на 2 этажа, с координатами дверей и шахты более менее разобрался. Не пойму где найти коры кнопок для вызова лифта.
Если кто то сталкивался с такой системой, подпишите пожалуйста какая строчка за что отвечает. Именно система лифта, что бы его можна было переместить в другое место.
Буду благодарен!
