Ice_Sochi
Участник
- Сообщения
- 738
- Реакции
- 433
Думал о таком, но кол-во настраивается в конфиге.Вместо handle, вы можете попробовать создать переменные int/float и сохранять время каждого игрока
Пример кода:int iItem_1[MAXPLAYERS+1]; int iItem_2[MAXPLAYERS+1]; public void OnPluginStart(){ RegConsoleCmd("sm_item1", cmd_item1); RegConsoleCmd("sm_item2", cmd_item2); } public void OnMapStart(){ CreateTimer(0.1, GlobalTimer, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); } public Action cmd_item1(int client, int args){ if(iItem_1[client] == 0){ // если время действия предмета вышло iItem_1[client] = GetTime() + 10; // игрок покупает 1 предмет на 10 секунд } } public Action cmd_item2(int client, int args){ if(iItem_2[client] == 0){ iItem_2[client] = GetTime() + 5; } } public Action GlobalTimer(Handle timer){ for(int client = 1; client <= MaxClients; client++){ if(iItem_1[client] != 0 && (GetTime() - iItem_1[client]) <= 0){ // Если 1 предмет активен, и если время действия предмета уже равно 0 iItem_1[client] = 0; // "выключаем" предмет } if(iItem_2[client] != 0 && (GetTime() - iItem_2[client]) <= 0){ iItem_2[client] = 0; } } }
Придется, возможно, делать похожим образом, создав одну переменную g_iItem[65][32], но это наложит лимит, которого я не хочу)
Вопрос по лимиту хэндлов таки акутален