работа с циклами

Flekon

aka IceMeN
Сообщения
41
Реакции
35
Как можно получить команду игрока, если его нет в игре?

PHP:
if (IsClientInGame(j) && GetClientTeam(j) > 1)
А иногда перед IsClientInGame(j) надо и такую проверку делать: IsValidEntity(j)
Просто ошибка может быть, если код выполняется сразу после вкл плагина или когда карта меняется.


Хоть пицот раз в событии - нет ограничений, это не ошибка.
Оффтоп

Честно говоря, никогда не задумывался о последовательности проверок.
А сейчас понял, что это большой прокол.

На счет PrintToChat() не знаю.
Просто я пробывал не один раз в одном событии использовать несколько PrintToChat().
В итоге не писало не одного...

И я вроде не писал, что это ошибка... Он спросил почему нету сообщения в чате, я ответил...
 

_wS_

Участник
Сообщения
383
Реакции
760
И я вроде не писал, что это ошибка... Он спросил почему нету сообщения в чате, я ответил...
Ну и я ответил на это, что это не может быть причиной непоявления какого-то сообщения.

PHP:
native Handle:StartMessage(String:msgname[], clients[], numClients, flags=0);


// Вот в этом случае да, будет ошибка
// Нельзя вот так посередине использовать PrintTo..
PrintTo..


EndMessage();
 

awp-sirius

Участник
Сообщения
26
Реакции
0
м, спасибо, так а в чём тут может быть ошибка? и если включаю, то работает каждый раунд и не отключается, ну может быть тогда сделать как я предлагал, если это канеш возможно

Попробуй, не уверен что правильно
PHP:
#include <sourcemod>
#include <adminmenu>
#include <cstrike>

new UseMenu[MAXPLAYERS+1];
new ct, t;

new Handle:g_hTopMenu = INVALID_HANDLE;

public OnPluginStart()
{
	new Handle:_hTemp = INVALID_HANDLE;
	
	if(LibraryExists("adminmenu") && ((_hTemp = GetAdminTopMenu()) != INVALID_HANDLE))
	{
		OnAdminMenuReady(_hTemp);
	}

	HookEvent("round_end", Event_OnRoundEnd); 
} 

public OnLibraryRemoved(const String:name[])
{
	if(StrEqual(name, "adminmenu"))
	{
		g_hTopMenu = INVALID_HANDLE;
	}
}

public OnAdminMenuReady(Handle:topmenu)
{
	if(topmenu == g_hTopMenu)
	{
		return;
	}

	g_hTopMenu = topmenu;
	
	new TopMenuObject:server_commands = FindTopMenuCategory(g_hTopMenu, ADMINMENU_SERVERCOMMANDS);
	if(server_commands != INVALID_TOPMENUOBJECT)
	{
		AddToTopMenu(g_hTopMenu, 
			"switch",
			TopMenuObject_Item,
			swithmenu,
			server_commands,
			"switch",
			ADMFLAG_CHAT);
	}
}

public swithmenu(Handle:topmenu,
                         TopMenuAction:action,
                         TopMenuObject:object_id,
                         param,
                         String:buffer[],
                         maxlength)
{
	if ((action == TopMenuAction_DisplayOption) || (action == TopMenuAction_DisplayTitle))
	{
		Format(buffer, maxlength, "Перемешать игроков", param);
	}
	else if (action == TopMenuAction_SelectOption)
	{
		UseMenu[param] = 1;
		PrintToChatAll("\x01\x05[SM] \x03Смешивание игроков произойдет в конце раунда");
		votdlyamenu();
	}
}

votdlyamenu()
{
	ct = 0, t = 0;
	for (new i = 1; i <= MaxClients; i++) 
	{
		if(IsClientInGame(i))
		{ 
			new team = GetClientTeam(i);
			if(team == 2) t++;
			if(team == 3) ct++; 
		}
	}
}

public Event_OnRoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
    new k, tp = 0, ctp = 0;
	ct = 0, t = 0;
	for(new j = 1; j <= MaxClients; j++) 
	{
		if (GetClientTeam(j) != 1 && IsClientInGame(j) && UseMenu[j] == 1)
		{
			k = GetRandomInt(2, 3);
			if(k == 2)
			{
				if(tp < t)
				{
					CS_SwitchTeam(j, 2);    
					tp++;
				}
				else
				{
					CS_SwitchTeam(j, 3);
					ctp++;
				}
			}
			else
			{
				if (ctp < ct)
				{
					CS_SwitchTeam(j, 3);
					ctp++;
				}
				else
				{
					CS_SwitchTeam(j, 2);
					tp++;
				}
			}
			UseMenu[j] = 0;
		}
	}
	PrintToChatAll("[SM] Игроки перемешаны"); 
}

только на меня дейстует:sad:
 
Сверху Снизу