[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Форум » Уроки SourceMod (SourcePawn) Скриптинга » Команды/Функции, связанные с игроком (Список, примеры взято с world-source.ru)
Команды/Функции, связанные с игроком
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;  
               }  
}
 
Форум » Форум » Уроки SourceMod (SourcePawn) Скриптинга » Команды/Функции, связанные с игроком (Список, примеры взято с world-source.ru)
  • Страница 1 из 1
  • 1
Поиск: