root | Дата: Четверг, 31.01.2013, 00:42 | Сообщение # 1 |
Генералиссимус
Группа: Администраторы
Сообщений: 561
Статус: Offline
| В SourceMod'e в основном все команды, связанные с игроком, требуют его индекс, в отличие от Eventscripts (так как в ES все делается по userid). Есть несколько вариантов, как можно получить индекс игрока:
В самих событиях есть переменная userid, например:
Код public OnPluginStart() { HookEvent("player_spawn", player_spawn); }
public player_spawn(Handle:event, const String:name[], bool:dontBroadcast) { // Получаем индекс родившегося игрока new client = GetClientOfUserId(GetEventInt(event, "userid")); }
Или с помощью цикла:
Код for (new i = 1; i <= MaxClients; i++) { if (IsClientInGame(i)) PrintToChatAll("%N <index = %d>", i, i); }
MaxClients или GetMaxClients() - это максимум слотов на вашем сервере. Если слотов 7, то индекс игрока может быть от 1 до 7.
IsClientInGame(client) - true/false, в игре ли игрок IsPlayerAlive(client) - true/false, жив или нет GetClientName(client, String:name[], maxlen); - получить имя игрока
Код decl String:name[MAX_NAME_LENGTH]; GetClientName(client, name, MAX_NAME_LENGTH); PrintToChatAll("nick = %s", name);
// Или можно проще: 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) - сменить команду (если жив, убьет)
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), то будут учитываться и подключающиеся игроки (которые еще не зашли)
GetClientMins(client, Float:vec[3]); GetClientMaxs(client, Float:vec[3]);
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' не будет вызвано.
|
|
| |
root | Дата: Четверг, 31.01.2013, 00:46 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 561
Статус: Offline
| 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
// Например: SetEntityMoveType(client, MOVETYPE_NOCLIP);
Например, если хотите узнать заморожен игрок или нет:
Код if (GetEntityMoveType(client) == MOVETYPE_NONE) { // заморожен }
// 0 - бессмертие, 2 - стандарт SetEntProp(client, Prop_Data, "m_takedamage", 0);
Чтобы сделать игрока невидимым, нужно просто установить яркость (alpha) в 0 [или больше, если нужно чтобы он был невидим частично]. SetEntityRenderColor(client, r, g, b, a);
Код SetEntityRenderMode(client, RENDER_TRANSCOLOR); SetEntityRenderColor(client, 255, 255, 255, 50);
Дать оружие. Вернет true, если дали, false, если нет GivePlayerItem(client, "weapon_awp");
Удалить оружие. Возвращает true/false RemovePlayerItem(client, );
Узнать индекс оружия игрока по номеру слота. Вернет -1, если оружия нет. GetPlayerWeaponSlot(client, <номер>);
Код 0 - автомат 1 - пистолет 2 - нож 3 - граната 4 - бомба c4
Установить скорость (1.0 = стандарт): SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", 3.7);
SetClientListeningFlags(client, VOICE_MUTED) - Мут
SetEntProp - m_flFlashDuration (время) и m_flFlashMaxAlpha (сила ослепления)
|
|
| |
root | Дата: Четверг, 31.01.2013, 00:47 | Сообщение # 3 |
Генералиссимус
Группа: Администраторы
Сообщений: 561
Статус: Offline
| Всем КТ. Т-скин Код #include <sdktools>
new String:modelT[128];
public OnPluginStart() { HookEvent("player_spawn", player_spawn); }
public OnMapStart() { PrecacheModel("models/player/t_phoenix.mdl",true); modelT = "models/player/t_phoenix.mdl"; }
public player_spawn(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); if(GetClientTeam(client) == 3) SetEntityModel(client, modelT); }
По команде !w появляется скин Код #include <sdktools>
new bool:skin;
public OnPluginStart() { RegConsoleCmd("w", Command); HookEvent("round_start", EventRoundStart); }
public OnMapStart() PrecacheModel("models/player/t_phoenix.mdl",true);
public EventRoundStart(Handle:event, const String:name[], bool:dontBroadcast) skin = true;
public Action:Command(client, args) { if(GetClientTeam(client) == 3 && skin) { SetEntityModel(client, "models/player/t_phoenix.mdl"); skin = false; } }
|
|
| |