Дата: Воскресенье, 28.08.2011, 20:44:21 | Сообщение # 1
Если функция связана с игроком, то почти всегда требуется указать его индекс. Индекс игрока может быть от 1 до MaxClients (MaxClients равен количеству слотов на вашем сервере). Вы часто можете встретить константу MAXPLAYERS, она содержит максимальное количество слотов, которое может быть. MAXPLAYERS используют, т.к. во время компиляции плагина неизвестно сколько слотов на сервере, а MaxClients становится актуальным только после запуска сервера. Если компилируете плагин для себя и заранее точно знаете количество слотов, то можете изменить MAXPLAYERS на любое значение в clients.inc и сэкономить немного памяти.
Код
new i; while (++i <= MaxClients) { if (IsClientInGame(i)) { PrintToChatAll("Найден игрок \"%N\", его индекс = %d.", i, i); } }
В некоторых (не всех, используйте wiki) событиях есть переменная userid:
Код
public OnPluginStart() { HookEvent("player_spawn", player_spawn, EventHookMode_Post); }
public player_spawn(Handle:event, const String:name[], bool:dontBroadcast) { // Получаем индекс родившегося игрока new client = GetClientOfUserId(GetEventInt(event, "userid")); }
IsClientInGame(client) - true/false, в игре ли игрок IsPlayerAlive(client) - true/false, жив или нет GetClientName(client, String:name[], maxlen); - получить имя игрока
// Или можно проще: PrintToChatAll("nick = %N", client);
GetClientIP(client, String:ip[], maxlen, bool:убрать порт=true) - получить IP игрока GetClientAuthString(client, String:auth[], maxlen); - SteamID GetClientUserId(client) - получить userid игрока GetClientHealth(client) - здоровье GetClientModel(client, String:model[], maxlen); - модель GetClientWeapon(client, String:weapon[], maxlen); - имя оружия, которое в руках GetClientAbsOrigin(client, Float:vec[3]); - координаты игрока (под ногами)
Код
decl Float:pos[3]; GetClientAbsOrigin(client, pos); PrintToChatAll("x = %f, y = %f, z = %f", pos[0], pos[1], pos[2]);
GetClientAbsAngles(client, Float:ang[3]); - углы GetClientArmor(client) - бронь GetClientDeaths(client) - количество смертей GetClientFrags(client) - фрагов KickClient(client, "сообщение", any:...); - кикнуть игрока ChangeClientTeam(client, team) - сменить команду (если жив, убьет)
Дата: Понедельник, 09.01.2012, 01:49:31 | Сообщение # 2
CS_RespawnPlayer(client) - оживить игрока CS_SwitchTeam(client, team) - сменить команду, не убивая (1 = spec, 2 = t, 3 = ct) GetClientTeam(client) - узнать команду игрока
Страна игрока (вернет true, если была получена) GeoipCountry(const String:ip[], String:name[], maxlength)
PrintToChat(client, const String:format[], any:...) - отправить игроку сообщение PrintToChatAll(const String:format[], any:...) - отправить всем
Можно использовать цвета:
Код
\x01 - default \x03 - lightgreen/red/blue/grey (grey, если игрок в spec) \x04 - green \x05 - darkgreen
Например:
Код
PrintToChatAll("\x01\x04Да \x05что ж \x03такое")
Если хотите использовать несколько цветов сразу, то в самое начало надо добавить \x01
Вернёт true, если игрок ненастоящий, например, бот: IsFakeClient(client)
PrintCenterText(client, const String:format[], any:...); - сообщение для игрока в центре экрана PrintCenterTextAll(const String:format[], any:...); - для всех PrintHintText(client, const String:format[], any:...); - внизу экрана для 1 игрока PrintHintTextToAll(const String:format[], any:...); - для всех
GetClientCount(bool:inGameOnly=true); - сколько всего игроков на сервере. Если сделаете GetClientCount(false), то будут учитываться и подключающиеся игроки (которые еще не зашли)
ClientCommand(client, const String:fmt[], any:...); - выполнить RCON команды на клиенте GetClientOfUserId(userid); - получить индекс клиента по userid
Заставить игрока выбросить оружие CS_DropWeapon(client, weaponIndex, bool:toss, bool:blockhook = false);
Если bool:toss = true, то оружие будет выброшено вперед со скоростью (иначе под ноги). Если bool:blockhook = true, то событие 'CS_OnCSWeaponDrop' не будет вызвано.
Дата: Вторник, 03.04.2012, 01:03:28 | Сообщение # 4
ForcePlayerSuicide(client); - убить игрока
Бан по IP адресу:
Код
ServerCommand("addip <минут/0=навсегда> <ipaddress>"); // или BanClient(client, <минут/0=навсегда>, BANFLAG_IP, "причина", "кик-сообщение");
По SteamID:
Код
ServerCommand("banid <минут/0=навсегда> <userid или steamid> [kick]"); // или BanClient(client, <минут/0=навсегда>, BANFLAG_AUTHID, "причина", "кик-сообщение");
Если видите какой-то параметр между такими скобками -> [], то это значит что он не обязателен. Например, [kick]. Если добавите kick в конец, то игрока кикнет после бана, если нет - не кикнет.
Код
ServerCommand("removeip <ip>"); - разбан ip адреса ServerCommand("removeid <steamid>"); - стима
SetEntityMoveType(client, <тип движения>);
Код
MOVETYPE_NONE - заморозить MOVETYPE_ISOMETRIC - для игроков MOVETYPE_WALK - движение по земле (для игроков) MOVETYPE_STEP - gravity, special edge handling -- monsters use this MOVETYPE_FLY - полет, джет пак (jet pack) MOVETYPE_FLYGRAVITY - flies through the air + is affected by gravity MOVETYPE_VPHYSICS - uses VPHYSICS for simulation (используется, например, для мяча) MOVETYPE_PUSH - no clip to world, push and crush MOVETYPE_NOCLIP - ноклип, можно летать по карте сквозь все объекты MOVETYPE_LADDER - Used by players only when going onto a ladder MOVETYPE_OBSERVER - Observer movement, depends on player's observer mode MOVETYPE_CUSTOM - Allows the entity to describe its own physics
Чтобы сделать игрока невидимым, нужно просто установить яркость (alpha) в 0 [или больше, если нужно чтобы он был невидим частично]. SetEntityRenderColor(client, r, g, b, a);
Я плоха ещо разбираюсь в скриптинге можете подсказать как добавить модель игроку контролу пример String:model[PLATFORM_MAX_PATH] = "models/player/t_phoenix.mdl"; и в какую командную строку вписать ?
Scarface_slv, Всё работает но скин всегда появляется ! а можно сделать при команде !w чтоб появлялся тока у одного контрола
Добавлено (17.11.2012, 17:57:39) --------------------------------------------- _wS_, Поставь скин зам контрола в jail_control_test_v2_0 офигенный плагин будет