Очередь
#1

Всё никак не могу придумать правильный алгоритм для очереди.

Что я имею введу под очередью. Игрок ввёл команду, получил номер, далее если игроков трое или боя, 3-им выдаётся оружия и так далее. При этом тот кто стоял на 4, становится на 1 и так далее.

Я примерно понимаю как всё это работает, но до меня не доходит пару вещей.
Я пробовал через enum и через обычную переменную. В общем, смотрите что я имею.

pawn Код:
new HowManyInSearch;
new SearchPriority[MAX_PLAYERS];


CMD:go(playerid, params[])
{
   InSearchLobby[playerid] = true;
   HowManyInSearch ++;
   SearchPriority[playerid] += HowManyInSearch + 1;
   return 1;
}
Далее идёт таймер секундный, там мы проверяем если переменная HowManyInSearch >= 1 и выводим сток.

Но я не понимаю как мне вывести сток для троих?
Я знаю, что есть 3 игрока, где SearchPriority = 1,2,3. Но, я не имею их ID.

Еще с enum'ом была идея.
pawn Код:
new HowManyInSearch;
enum q_v {
id,
//bool:InSearchLobby,
};
new queue [100][q_v];


CMD:go(playerid, params[])
{
InSearchLobby[playerid] = true;
HowManyInSearch ++;
queue[HowManyInSearch + 1][id] = playerid;
return 1;
}
Опять таймер.
pawn Код:
GivePlayerWeapon(lobby[1][id], 26, 500);
GivePlayerWeapon(lobby[2][id], 36, 500);
lobby[1][id] = 0;
lobby[2][id] = 0;
HowManyInSearch --;
for(new i; i < HowManyInSearch; i++)
{
lobby[i-2][id] = lobby[i][id];
}
Обратите внимание на lobby[i-2][id] = lobby[i][id];
Это будет правильно?

Прошу помощи в реализации и может какого-то более оптимизированного способа.
Reply
#2

В пабликовской версии штата99 было что-то про очередь на экзамен в автошколе, там глянь.
Reply
#3

эм а так не?
pawn Код:
new numoch[MAX_PLAYERS];

твой таймер
{
for(new i;i<MAX_PLAYERS;i++)
{
if(numoch[i]==1)
{

giveweapon....
for(new b;b<MAX_PLAYERS;b++)
{
if(numoch[b]>1)numoch[b]--;
}
settimer(ваш таймер,1000);
}
}
}
Reply
#4

Реализовал спасибо.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)