Неверный алгоритм работы кода
Уже вторые сутки не могу разобраться с ситуацией. При первичном входе на сервер, когда я сажусь в автомобиль и нажимаю "2", то выполняются функции garage и vehicle одновременно, хотя по идее должна выполниться только одна из них и вероятнее всего это garage (т.к. выполнение ее стоит впереди выполнения vehicle).
Я грешил сначала на неверный возврат одной из функций (думал что возвращает где-то false), но при повторном вызове OnPlayerKeyStateChange - все работает как нужно, а именно, выполняется функция garage, а vehicle уже не выполняется.
Это код вызова функций:
Открыть/закрыть
Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if (garage_OnPlayerKeyStateChange(playerid, newkeys)) {
return 1;
}
if (vehicle_OnPlayerKeyStateChange(playerid, newkeys)) {
return 1;
}
//etc
return 1;
}
Это код функции vehicle_OnPlayerKeyStateChange:
Открыть/закрыть
Код:
vehicle_OnPlayerKeyStateChange(playerid, newkeys)
{
if(newkeys == KEY_SUBMISSION && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
return callcmd::engine(playerid);
}
return 0;
}
Это код выполнения функции garage_OnPlayerKeyStateChange:
Открыть/закрыть
Код:
garage_OnPlayerKeyStateChange(playerid, newkeys)
{
if(newkeys == KEY_SUBMISSION && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
if(true)
{
for(new i; i < MAX_VEHICLE_PLAYER; i++)
{
if(true)
{
if(true)
{
printf("выполнено");
return 1;
}
else
{
printf("не выполнено");
return 1;
}
}
}
}
}
return 0;
}
Попробовал сделать без создания отдельных функций, а впихнул код в колбэк - все работает как нужно (в том числе и с первичного входа).
Код:
Открыть/закрыть
Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys == KEY_SUBMISSION && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
if(true)
{
for(new i; i < MAX_VEHICLE_PLAYER; i++)
{
if(true)
{
if(true)
{
printf("выполнено");
return 1;
}
else
{
printf("не выполнено");
return 1;
}
}
}
}
}
if(newkeys == KEY_SUBMISSION && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
return callcmd::engine(playerid);
}
//etc
return 1;
}