#include <sourcemod>
#include <sdktools>
new Handle:g_hPath = INVALID_HANDLE;
new Handle:Array = INVALID_HANDLE;
new bool:CheckUseName[MAXPLAYERS+1] = {false, ...};
new ArraySize = 0;
public OnPluginStart()
{
g_hPath = CreateConVar("bot_name_path", "addons/sourcemod/configs/bot_name.cfg", "Укажите путь к файлу");
Array = CreateArray(255, 0);
}
public OnMapStart()
{
ArraySize = 0;
ClearArray(Array);
decl String:path[255];
GetConVarString(g_hPath, path, sizeof(path));
new Handle:file = OpenFile(path, "r");
if (file == INVALID_HANDLE)
{
LogError("Не удалось открыть файл '%s'", path);
}
else
{
decl String:line[150];
while (!IsEndOfFile(file) && ReadFileLine(file, line, sizeof(line)))
{
TrimString(line);
PushArrayString(Array, line);
}
ArraySize = GetArraySize(Array);
CloseHandle(file);
}
}
public OnClientPutInServer(client)
{
CheckUseName[client] = false;
if (IsClientBot(client) && ArraySize > 0)
{
decl String:ArrayName[50];
new random = GetRandomInt(0, ArraySize - 1);
GetArrayString(Array, random, ArrayName, sizeof(ArrayName));
CS_SetClientName(client, ArrayName);
RemoveFromArray(Array, random);
CheckUseName[client] = true;
ArraySize--;
}
}
public OnClientDisconnect(client)
{
if (IsClientBot(client) && CheckUseName[client])
{
decl String:Name[50];
GetClientName(client, Name, sizeof(Name));
PushArrayString(Array, Name);
ArraySize++;
}
}
bool:IsClientBot(client)
{
if (IsFakeClient(client) && !IsClientSourceTV(client))
{
return true;
}
return false;
}
stock CS_SetClientName(client, const String:name[])
{
decl String:oldname[MAX_NAME_LENGTH];
GetClientName(client, oldname, sizeof(oldname));
SetClientInfo(client, "name", name);
SetEntPropString(client, Prop_Data, "m_szNetname", name);
new Handle:event = CreateEvent("player_changename");
if (event != INVALID_HANDLE)
{
SetEventInt(event, "userid", GetClientUserId(client));
SetEventString(event, "oldname", oldname);
SetEventString(event, "newname", name);
FireEvent(event);
}
}
Не актуально для:Если это ещё актуально помогите
Нет тамCounter-Strike Source v.34
Попробуй без строчки:m_szNetname
SetEntPropString(client, Prop_Data, "m_szNetname", name);
Если это ещё актуально помогите !Установил плагин всё сделал по инструкции.Пропсал ботов в bot_name.cfg.Запускаю сервер сыпятся errors Вот кусок лога
L 06/24/2016 - 21:41:12: [SM] Native "SetEntPropString" reported: Property "m_szNetname" not found for entity 1
L 06/24/2016 - 21:41:12: [SM] Displaying call stack trace for plugin "bot_name.smx":
L 06/24/2016 - 21:41:12: [SM] [0] Line 97, bot_name.sp::CS_SetClientName()
L 06/24/2016 - 21:41:12: [SM] [1] Line 61, bot_name.sp::OnClientPutInServer()
L 06/24/2016 - 21:41:12: [SM] Native "SetEntPropString" reported: Property "m_szNetname" not found for entity 1
Сервер Counter-Strike Source v.34
Заранее спасибо!
Чёто у меня ничего не получилось с этим плагином.В консоле сервера оч и оч бысто меняются ники ботов Эроров нет. Ну и в консоле игры показывает невероятную скорость смены ботов
А вот это надо удалять с Server cfg ?
bot_difficulty 1
bot_chatter off
bot_quota 9
bot_add
bot_join_after_player 0
bot_quota_mode fill
bot_auto_vacate 1
Спасибо друг. Плагин отличный, ошибок не вызывает по крайней мере на CSS v89, спасибо, а то я голову сломал как поменять на русские имена.Или же можно плагин использовать, минусы BotProfile.db нельзя писать ники со специальными знаками и на кириллице.
addons/sourcemod/configs/bot_name.cfg тут создаёшь такой файл и там пишешь ники для ботов каждый с новой строки.PHP:#include <sourcemod> #include <sdktools> new Handle:g_hPath = INVALID_HANDLE; new Handle:Array = INVALID_HANDLE; new bool:CheckUseName[MAXPLAYERS+1] = {false, ...}; new ArraySize = 0; public OnPluginStart() { g_hPath = CreateConVar("bot_name_path", "addons/sourcemod/configs/bot_name.cfg", "Укажите путь к файлу"); Array = CreateArray(255, 0); } public OnMapStart() { ArraySize = 0; ClearArray(Array); decl String:path[255]; GetConVarString(g_hPath, path, sizeof(path)); new Handle:file = OpenFile(path, "r"); if (file == INVALID_HANDLE) { LogError("Не удалось открыть файл '%s'", path); } else { decl String:line[150]; while (!IsEndOfFile(file) && ReadFileLine(file, line, sizeof(line))) { TrimString(line); PushArrayString(Array, line); } ArraySize = GetArraySize(Array); CloseHandle(file); } } public OnClientPutInServer(client) { CheckUseName[client] = false; if (IsClientBot(client) && ArraySize > 0) { decl String:ArrayName[50]; new random = GetRandomInt(0, ArraySize - 1); GetArrayString(Array, random, ArrayName, sizeof(ArrayName)); CS_SetClientName(client, ArrayName); RemoveFromArray(Array, random); CheckUseName[client] = true; ArraySize--; } } public OnClientDisconnect(client) { if (IsClientBot(client) && CheckUseName[client]) { decl String:Name[50]; GetClientName(client, Name, sizeof(Name)); PushArrayString(Array, Name); ArraySize++; } } bool:IsClientBot(client) { if (IsFakeClient(client) && !IsClientSourceTV(client)) { return true; } return false; } stock CS_SetClientName(client, const String:name[]) { decl String:oldname[MAX_NAME_LENGTH]; GetClientName(client, oldname, sizeof(oldname)); SetClientInfo(client, "name", name); SetEntPropString(client, Prop_Data, "m_szNetname", name); new Handle:event = CreateEvent("player_changename"); if (event != INVALID_HANDLE) { SetEventInt(event, "userid", GetClientUserId(client)); SetEventString(event, "oldname", oldname); SetEventString(event, "newname", name); FireEvent(event); } }
P.S. выкладывали тут этот плагин давно.
Оффтопюбилейное сообщение :victory: 2000
На 34 полагаю нет такого офсетаИли же можно плагин использовать, минусы BotProfile.db нельзя писать ники со специальными знаками и на кириллице.
addons/sourcemod/configs/bot_name.cfg тут создаёшь такой файл и там пишешь ники для ботов каждый с новой строки.PHP:#include <sourcemod> #include <sdktools> new Handle:g_hPath = INVALID_HANDLE; new Handle:Array = INVALID_HANDLE; new bool:CheckUseName[MAXPLAYERS+1] = {false, ...}; new ArraySize = 0; public OnPluginStart() { g_hPath = CreateConVar("bot_name_path", "addons/sourcemod/configs/bot_name.cfg", "Укажите путь к файлу"); Array = CreateArray(255, 0); } public OnMapStart() { ArraySize = 0; ClearArray(Array); decl String:path[255]; GetConVarString(g_hPath, path, sizeof(path)); new Handle:file = OpenFile(path, "r"); if (file == INVALID_HANDLE) { LogError("Не удалось открыть файл '%s'", path); } else { decl String:line[150]; while (!IsEndOfFile(file) && ReadFileLine(file, line, sizeof(line))) { TrimString(line); PushArrayString(Array, line); } ArraySize = GetArraySize(Array); CloseHandle(file); } } public OnClientPutInServer(client) { CheckUseName[client] = false; if (IsClientBot(client) && ArraySize > 0) { decl String:ArrayName[50]; new random = GetRandomInt(0, ArraySize - 1); GetArrayString(Array, random, ArrayName, sizeof(ArrayName)); CS_SetClientName(client, ArrayName); RemoveFromArray(Array, random); CheckUseName[client] = true; ArraySize--; } } public OnClientDisconnect(client) { if (IsClientBot(client) && CheckUseName[client]) { decl String:Name[50]; GetClientName(client, Name, sizeof(Name)); PushArrayString(Array, Name); ArraySize++; } } bool:IsClientBot(client) { if (IsFakeClient(client) && !IsClientSourceTV(client)) { return true; } return false; } stock CS_SetClientName(client, const String:name[]) { decl String:oldname[MAX_NAME_LENGTH]; GetClientName(client, oldname, sizeof(oldname)); SetClientInfo(client, "name", name); SetEntPropString(client, Prop_Data, "m_szNetname", name); new Handle:event = CreateEvent("player_changename"); if (event != INVALID_HANDLE) { SetEventInt(event, "userid", GetClientUserId(client)); SetEventString(event, "oldname", oldname); SetEventString(event, "newname", name); FireEvent(event); } }
P.S. выкладывали тут этот плагин давно.
Оффтопюбилейное сообщение :victory: 2000
#include <sdktools_functions>
Handle
g_hPath,
Array;
bool
CheckUseName[MAXPLAYERS+1] = {false, ...};
int
ArraySize;
public void OnPluginStart()
{
g_hPath = CreateConVar("bot_name_path", "addons/sourcemod/configs/bot_name.cfg", "Укажите путь к файлу");
Array = CreateArray(255, 0);
}
public void OnMapStart()
{
ArraySize = 0;
ClearArray(Array);
char path[255];
GetConVarString(g_hPath, path, sizeof(path));
Handle file = OpenFile(path, "r");
if (file == INVALID_HANDLE)
{
LogError("Не удалось открыть файл '%s'", path);
}
else
{
char line[150];
while (!IsEndOfFile(file) && ReadFileLine(file, line, sizeof(line)))
{
TrimString(line);
PushArrayString(Array, line);
}
ArraySize = GetArraySize(Array);
CloseHandle(file);
}
}
public void OnClientPutInServer(int client)
{
CheckUseName[client] = false;
if (IsClientBot(client) && ArraySize > 0)
{
char ArrayName[50];
int random = GetRandomInt(0, ArraySize - 1);
GetArrayString(Array, random, ArrayName, sizeof(ArrayName));
CS_SetClientName(client, ArrayName);
RemoveFromArray(Array, random);
CheckUseName[client] = true;
ArraySize--;
}
}
public void OnClientDisconnect(int client)
{
if (IsClientBot(client) && CheckUseName[client])
{
char Name[50];
GetClientName(client, Name, sizeof(Name));
PushArrayString(Array, Name);
ArraySize++;
}
}
bool IsClientBot(int client)
{
if (IsFakeClient(client) && !IsClientSourceTV(client))
{
return true;
}
return false;
}
stock void CS_SetClientName(int client, const char[] name)
{
char oldname[MAX_NAME_LENGTH];
GetClientName(client, oldname, sizeof(oldname));
SetClientInfo(client, "name", name);
SetEntPropString(client, Prop_Data, "m_szNetname", name);
Handle event = CreateEvent("player_changename");
if (event != INVALID_HANDLE)
{
SetEventInt(event, "userid", GetClientUserId(client));
SetEventString(event, "oldname", oldname);
SetEventString(event, "newname", name);
FireEvent(event);
}
}
L 12/12/2020 - 11:45:21: [SM] Exception reported: Property "m_szNetname" not found for entity 2
L 12/12/2020 - 11:45:21: [SM] Blaming: bot/bot_name.smx
L 12/12/2020 - 11:45:21: [SM] Call stack trace:
L 12/12/2020 - 11:45:21: [SM] [0] SetEntPropString
L 12/12/2020 - 11:45:21: [SM] [1] Line 99, bot_name.sp::CS_SetClientName
L 12/12/2020 - 11:45:21: [SM] [2] Line 63, bot_name.sp::OnClientPutInServer