PDA

Просмотр полной версии : [Вопрос] Открытие/закрытие ворот



Ne_nub
14.07.2017, 17:07
Доброго времени суток. Возник вопрос по воротам. Вот я сделал координаты, вписал ворота как объекты в мод и вроде как всё настроил, но ворота не открываются на кнопку, вообще ничего не происходит. В чем проблема ?


new bool:opengate[MAX_PLAYERS][1];
new Gate[2];


@CloseGate(gateid, playerid);
@CloseGate(gateid, playerid)
{
switch(gateid)
{
case 0:
{
opengate[playerid][0] = false;
MoveDynamicObject(Gate[0],-2275.17725,2349.96143,4.94434,3.0,0.00000,0.00000,55.55999);
MoveDynamicObject(Gate[1],-2272.07886,2354.50293,4.94430,3.0,0.00000,0.00000,55.62000);
}
}
}

И открытие на кнопку:


if(IsPlayerInRangeOfPoint(playerid,12.0,-2272.0789,2354.5029,4.9443))
{
if(IsACop(playerid) || IsAArmy(playerid))
{
if(opengate[playerid][0]) return 1;
opengate[playerid][0] = true;
MoveDynamicObject(Gate[0],-2278.2141,2345.7297,4.9443,3.0,0.00000,0.00000,55.55999);
MoveDynamicObject(Gate[1],-2269.1516,2358.8003,4.9443,3.0,0.00000,0.00000,55.62000);
SetTimerEx("@CloseGate", 10000, false, "dd", 0, playerid);
SendClientMessage(playerid,COLOR_BLUE,"Ворота закроются через 10 секунд!");
SetPlayerChatBubble(playerid, "открывает ворота", COLOR_PURPLE, 13.0, 10000);
}
else SendClientMessage(playerid,COLOR_GREY,"У вас нет ключей от ворот!");
}

$continue$
14.07.2017, 17:17
Ну во-первых, что за параметр gateid?
А, во-вторых дебажить пробовали?

Ne_nub
14.07.2017, 19:53
gateid - ид ворот, у меня это используется для остальных ворот/дверей.
Дебажить не пробовал, как сделать ?

DeimoS
14.07.2017, 21:19
print/printf?

Ne_nub
15.07.2017, 00:00
@CloseGate(gateid, playerid);
@CloseGate(gateid, playerid)
{
switch(gateid)
{
case 0:
{
opengate[playerid][0] = false;
MoveDynamicObject(Gate[0],-2275.17725,2349.96143,4.94434,3.0,0.00000,0.00000,55.55999);
MoveDynamicObject(Gate[1],-2272.07886,2354.50293,4.94430,3.0,0.00000,0.00000,55.62000);
printf("Закрытие ворот");
}
}
}


if(IsPlayerInRangeOfPoint(playerid,12.0,-2272.0789,2354.5029,4.9443))
{
if(IsACop(playerid) || IsAArmy(playerid))
{
if(opengate[playerid][0]) return 1;
opengate[playerid][0] = true;
MoveDynamicObject(Gate[0],-2278.2141,2345.7297,4.9443,3.0,0.00000,0.00000,55.55999);
MoveDynamicObject(Gate[1],-2269.1516,2358.8003,4.9443,3.0,0.00000,0.00000,55.62000);
SetTimerEx("@CloseGate", 10000, false, "dd", 0, playerid);
SendClientMessage(playerid,COLOR_BLUE,"Ворота закроются через 10 секунд!");
SetPlayerChatBubble(playerid, "открывает ворота", COLOR_PURPLE, 13.0, 10000);
printf("Открытие ворот");
}
else SendClientMessage(playerid,COLOR_GREY,"У вас нет ключей от ворот!");
}

Логируется нормально, проблем вроде как нет.

DeimoS
15.07.2017, 00:06
А как, по твоей логике, должен вот этот код работать?


MoveDynamicObject(Gate[0],-2278.2141,2345.7297,4.9443,3.0,0.00000,0.00000,55.55999);
MoveDynamicObject(Gate[1],-2269.1516,2358.8003,4.9443,3.0,0.00000,0.00000,55.62000);

Ne_nub
15.07.2017, 00:24
По идеи, по нажатии кнопки, объекты должны двигаться, в данном случае - ворота. После 10 секунд они возвращаются в исходное положение.

DeimoS
15.07.2017, 00:31
А, это два разных объекта. Не углядел, прошу прощения.
Покажи как создаёшь объекты

Fallen A.
15.07.2017, 00:33
В интернете есть рабочая система ворот. Можешь поискать и посмотреть, что да как.

Ne_nub
15.07.2017, 01:11
2 объекта, потому-что у меня двойные ворота, которые открываются в разные стороны.


CreateDynamicObject(988, -2275.17725, 2349.96143, 4.94434, 0.00000, 0.00000, 55.55999);
CreateDynamicObject(988, -2272.07886, 2354.50293, 4.94430, 0.00000, 0.00000, 55.62000);

DeimoS
15.07.2017, 01:21
Это ты просто пример показал или у тебя так и записан код в моде?
Если так и записан, то ты забыл ID объектов записать в массив, не?

- - - Добавлено - - -

UPD: Проверил - код рабочий, если записывать ID объектов

Ne_nub
15.07.2017, 12:29
Куда записывать ID объектов ? Просто у меня есть еще ворота, там не указаны объекты ворот.

DeimoS
15.07.2017, 20:22
Gate[0] = CreateDynamicObject(988, -2275.17725, 2349.96143, 4.94434, 0.00000, 0.00000, 55.55999);
Gate[1] = CreateDynamicObject(988, -2272.07886, 2354.50293, 4.94430, 0.00000, 0.00000, 55.62000);

Ne_nub
15.07.2017, 20:34
Это в открытие ворот или закрытие ?

DeimoS
15.07.2017, 20:42
Найди ещё раз в гугле статью на тему создания ворот и прочти её.

Ne_nub
15.07.2017, 22:24
Сделал, работает. Но теперь хочу создать новые ворота, а они не открываются, настроил всё как надо, объекты не двигаются.


@CloseGate(gateid, playerid);
@CloseGate(gateid, playerid)
{
switch(gateid)
{
case 11:
{
opengate[playerid][11] = false;
MoveDynamicObject(Gate[14],-2301.80908,2426.89404,5.00000,0.00000,0.00000,226.99951);
}
}
}


if(IsPlayerInRangeOfPoint(playerid,10.0,-2301.80908,2426.89404,5.00000))
{
if(IsACop(playerid) || IsAArmy(playerid))
{
if(opengate[playerid][11]) return 1;
opengate[playerid][11] = true;
MoveDynamicObject(Gate[14],-2305.5803,2422.9524,5.00000,0.00000,0.00000,226.99951);
SetTimerEx("@CloseGate", 10000, false, "dd", 11, playerid);
SendClientMessage(playerid, COLOR_BLUE, "Ворота закроются через 10 секунд!");
SetPlayerChatBubble(playerid, "открывает ворота", COLOR_PURPLE, 13.0, 10000);
}
else SendClientMessage(playerid,COLOR_GREY,"У вас нет ключей от ворот!");
}


Gate[14] = CreateDynamicObject(988, -2301.80908, 2426.89404, 5.00000, 0.00000, 0.00000, 226.99951);

DeimoS
16.07.2017, 13:38
MoveDynamicObject(STREAMER_TAG_OBJECT objectid, Float:x, Float:y, Float:z, Float:speed, Float:rx = -1000.0, Float:ry = -1000.0, Float:rz = -1000.0);

Посмотри на порядок параметров и посмотри какие данные ты в каждый параметр передаёшь.

И да, тебе самому-то с таким массивом удобно работать? Ты вспомнишь через неделю о том, к каким вратам относится "Gate[14]", не говоря уже о том, что будет через месяц/год? Для чего придумали перечисления?


enum e_GATE_INFO
{
gate_LSPD,
gate_FBI,
gate_TAXI
};
new GateObject[e_GATE_INFO];
Это мало того, что в разы читаемее, так ещё и в случае, если ты вдруг решишь удалить, например, врата FBI, у тебя не получится, что ячейка FBI осталась пустующей или что тебе нужно вручную все значения подгонять. Просто удалишь нужный член перечисления и компилятор всё изменит за тебя.

И не совсем понятно зачем в массиве

new bool:opengate[MAX_PLAYERS][12];
первая мера размером MAX_PLAYERS. У тебя что, открытие врат не синхронизируется между игроками и каждый открывает свои врата? Или когда один игрок уже открыл ворота, второй может открыть их ещё сильнее? Прежде чем писать код, вникай в его смысл