shape1
shape2
shape3
shape4
shape7
shape8

Открытие ворот на кнопку.


Unknown

Освоившийся
Пользователь
08.10.2014
150
26
0
26
Всем привет. Выкладываю урок по созданию ворот, которые будут открываться по кнопке. Для этого используется функция CreateObject

Я для примера возьму ворота в Доках: 

CreateObject(969, 2720.3772,-2409.7523,12.6,0, 0.0000, 90);//Закрытые ворота
CreateObject(969, 2720.3772,-2508.3069,12.6,0, 0.0000, 90);//Открытые ворота   


После этого вам нужно создать переменную., которая будет хранить в себе порядковый ID ворот.

Ко всем new

new gate1;   


Теперь создадим объект ворот на сервере 

В public OnGameModeInit засуньте строчку с функцией CreateObject

gate1 = CreateObject(ид_объекта, x,y,z, поворот_x, поворот_y, поворот_z);// Укажите ваши данные о ЗАКРЫТЫХ воротаx   


Для простого примера я создам ворота в доках (координаты открытых и закрытых ворот смотрите выше) 

public OnGameModeInit()
{
gate1 = CreateObject(969, 2720.3772,-2409.7523,12.6,0, 0.0000, 90);//Если у вас есть этот public то просто вставте эту строчку с созданием объекта
return 1;
}   


Ворота созданы, но теперь их надо заставить двигаться 

в public OnPlayerCommandText 

if(!strcmp(cmdtext, "/opengate", true))
{
if(IsPlayerInRangeOfPoint(playerid, 10, 2720.3772,-2409.7523,12.6))// Укажите координаты закрытых ворот, 10 - это радиус, где будет действовать открытие ворот
{
MoveDynamicObject(gate1,2720.3772, -2401.2523, 12.6, 2.0);//Двигаем ворота на позицию открытых ворот
SetTimer("CloseGate1", 7000, false);//Создадим таймер что ворота закрылись автоматически
}
}   


Теперь создадим public чтоб ворота закрылись самостоятельно 

Ко всем foward

forward CloseGate1();   


В конец мода

public CloseGate1()
{
MoveDynamicObject(gate1, 2720.3772,-2409.7523,12.6, 2.0);//Двигаем ворота на позицию закрытых ворот
return 1;
}   


Ворота созданы и вы теперь можете их открыть командой /opengate 

Теперь делаем открытие ворот кнопкой.

В public OnPlayerKeyStateChange

if(newkeys & KEY_WALK) // На кнопку АЛЬТ (alt)
{
if(IsPlayerInRangeOfPoint(playerid, 10, 2720.3772,-2409.7523,12.6))// Укажите координаты закрытых ворот, 10 - это радиус, где будет действовать открытие ворот
{
MoveDynamicObject(gate1,2720.3772, -2401.2523, 12.6, 2.0);//Двигаем ворота на позицию открытых ворот
SetTimer("CloseGate1", 7000, false);//Создадим таймер что ворота закрылись автоматически
}
}   



Готово!

Автор

 PROMO_4ka!™https://pawno-crmp.ru/forum/user/5731-promo-4ka/

Помогал мне (автор): valuch
 

andrei58russ

Освоившийся
Пользователь
19.04.2016
594
31
0
29
А если на CMD то так надо на альт?

на команде

CMD:vorotaopen(playerid,params[])
{
MoveObject(gatevol,2615.5571, 1792.4941, 3.0000, 3.0);
if(PlayerInfo[playerid][pMember] == 8 || PlayerInfo[playerid][pLeader] == 1)
/*gatevorota - ïåðåìåííàÿ êîòîðóþ ìû ñîçäàëè âûøå è ïðèâÿçàëè ê íåé îáúåêò 1597.40002441,-1638.00000000,15.19999981 - ÊÎÎÐÄÈÍÀÒÛ ÎÒÊÐÛÒÛÕ ÂÎÐÎÒ !!!, 3.0 - ñêîðîñòü ïåðåäâèæåíèÿ îáúåêòà*/
SetTimer("vorotagate", 10000, 0);//Ýòî òàéìåð, ÷åðåç êîòîðîå âðåìÿ çàêðîþòñÿ âîðîòà
SendClientMessage(playerid,0xFFFF00AA,"Âîðîòà çàêðîþòñÿ ÷åðåç 10 ñåêóíä!");//Òåêñò ïðè îòêðûâàíèè âîðîò
return 1;//Óñïåøíî
}

на альт

Код:
CMD:KEY_WALK(playerid,params[])
{
    MoveObject(gatevol,2615.5571, 1792.4941, 3.0000, 3.0);
    if(PlayerInfo[playerid][pMember] == 8 || PlayerInfo[playerid][pLeader] == 1)
    /*gatevorota - ïåðåìåííàÿ êîòîðóþ ìû ñîçäàëè âûøå è ïðèâÿçàëè ê íåé îáúåêò 1597.40002441,-1638.00000000,15.19999981 - ÊÎÎÐÄÈÍÀÒÛ ÎÒÊÐÛÒÛÕ ÂÎÐÎÒ !!!, 3.0 - ñêîðîñòü ïåðåäâèæåíèÿ îáúåêòà*/
    SetTimer("vorotagate", 10000, 0);//Ýòî òàéìåð, ÷åðåç êîòîðîå âðåìÿ çàêðîþòñÿ âîðîòà
    SendClientMessage(playerid,0xFFFF00AA,"Âîðîòà çàêðîþòñÿ ÷åðåç 10 ñåêóíä!");//Òåêñò ïðè îòêðûâàíèè âîðîò
    return 1;//Óñïåøíî
}
 

andrei58russ

Освоившийся
Пользователь
19.04.2016
594
31
0
29
@Dmitriy_Orell,ерроры

C:\Users\Андрей\Desktop\мой мод\сам мод\gamemodes\new.pwn(14686) : error 010: invalid function or declaration
C:\Users\Андрей\Desktop\мой мод\сам мод\gamemodes\new.pwn(14689) : error 054: unmatched closing brace ("}")
C:\Users\Андрей\Desktop\мой мод\сам мод\gamemodes\new.pwn(14691) : error 055: start of function body without function header
C:\Users\Андрей\Desktop\мой мод\сам мод\gamemodes\new.pwn(14693) : error 010: invalid function or declaration
C:\Users\Андрей\Desktop\мой мод\сам мод\gamemodes\new.pwn(14695) : error 021: symbol already defined: "SetTimer"
C:\Users\Андрей\Desktop\мой мод\сам мод\gamemodes\new.pwn(14697) : error 010: invalid function or declaration
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


6 Errors. 
вот код

if(newkeys & KEY_WALK)
{
cmd_vorotaopen(playerid);
}

{
MoveObject(gatevol,2615.5571, 1792.4941, 3.0000, 3.0);
if(PlayerInfo[playerid][pMember] == 8 || PlayerInfo[playerid][pLeader] == 1)
/*gatevorota - переменная которую мы создали выше и привязали к ней объект 1597.40002441,-1638.00000000,15.19999981 - КООРДИНАТЫ ОТКРЫТЫХ ВОРОТ !!!, 3.0 - скорость передвижения объекта*/
SetTimer("vorotagate", 10000, 0);//Это таймер, через которое время закроются ворота
SendClientMessage(playerid,0xFFFF00AA,"Ворота закроются через 10 секунд!");//Текст при открывании ворот
return 1;//Успешно

а у меня все вот такие

Код:
CMD:slak(playerid,params[])
{
        if(!IsPlayerConnected(playerid)) return 1;
        if(!IsPlayerInRangeOfPoint(playerid, 9.0, 1899.1729,2154.5503,15.7077)) return 1;//7.0 - это радиус где игрок должен находится чтобы сработала команда
        if(PlayerInfo[playerid][pMember] == 3 || PlayerInfo[playerid][pLeader] == 1)
		if(status_slak == 0)//Если шлагбаум ЗАКРЫТ, открываем его
        {
        MoveObject(obj_slak, 1900.7798, 2151.0354, 15.3258+0.004, 0.004, 0.0000, -24.0000, -91.0000);//Здесь ставим координаты открытого шлагбаума.
        status_slak = 1;//Ставим "статус" шлагбаума ОТКРЫТ
        }
        else if(status_slak == 1)//Если шлагбаум ОТКРЫТ, закрываем его
        {
        MoveObject(obj_slak, 1900.7798, 2151.0354, 15.3258-0.004, 0.004, 0.0000, -90.0000, -91.0000);//Здесь ставим координаты закрытого шлагбаума.
        status_slak = 0;//Ставим "статус" шлагбаума ЗАКРЫТ
        }
        return 1;
    }