Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Система лифта

Статус
В этой теме нельзя размещать новые ответы.

br0

Ученик
Здраствуйте ув., юзеры павно. Не давно нашел фс системы лифта, но никак не могу разобратся с координатами.
Вот код самого фс -
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 этажа, с координатами дверей и шахты более менее разобрался. Не пойму где найти коры кнопок для вызова лифта.
Если кто то сталкивался с такой системой, подпишите пожалуйста какая строчка за что отвечает. Именно система лифта, что бы его можна было переместить в другое место.
Буду благодарен!
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу