Вроде можно вот так, если ничего не путаюКак привязать хитбоксы привязанной к игроку модели (динамический пропс) чтобы они принимали урон
я наложил модель с анимациями поверх своей и свою сделал невидимойВроде можно вот так, если ничего не путаю
SetEntPropEnt(ent, Prop_Data, "m_hOwnerEntity", client);
А для чего тебе это ?
#pragma semicolon 1
#include <sdktools>
#define PL_VERSION "1.1.1"
static const String:FakeNames[][] = {"РандомЭэээ", "САНТЕХ НИК", "Катька", "ARI$TOKRAT", "Петруха", "Su4ka", "ext77", "Паша Техник", "quality", "Шторм", "ph34r", "1337sp34k", "HardPlayer", "StinG", "Immortal", "achmed", "benthas", "hmmmm", "LOLLOL", "HITM@N", "RUFA", "Metahander", "Meg", "Py6uH", "alyx", "Бутылка_Пива", "Эto_фuaско_брatan", "солдат", "Маршал", "CAT", "ПиздюК", "DoomThird"};
new IsNameUsed[MAXPLAYERS+1] = {-1, ...},
iMaxBots,
Float:fDelay;
public Plugin:myinfo =
{
name = "FakeClients",
author = "LouLoubizou(fixed by Grey83)",
description = "Put fake clients in server",
version = PL_VERSION,
url = "http://sourcemod.net/"
};
public OnPluginStart()
{
CreateConVar("sm_fakeclients_version", PL_VERSION, "Version of FakeClients plugin", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
new Handle:cvar;
cvar = CreateConVar("sm_fakeclients_players","1","Number of players to simulate", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY, true, _, true, 32.0);
iMaxBots = GetConVarInt(cvar);
HookConVarChange(cvar, OnChange_MaxBots);
cvar = CreateConVar("sm_fakeclients_delay","0.1","Delay after map change before fake clients join(seconds)", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY, true, 0.1, true, 10.0);
fDelay = GetConVarFloat(cvar);
HookConVarChange(cvar, OnChange_Delay);
}
public OnChange_MaxBots(Handle:cvar, const String:oldValue[], const String:newValue[])
{
iMaxBots = StringToInt(newValue);
}
public OnChange_Delay(Handle:cvar, const String:oldValue[], const String:newValue[])
{
fDelay = StringToFloat(newValue);
}
public OnMapStart()
{
new numPlayers = GetClientCount(true); // Получаем количество игроков, включая ботов
if (numPlayers == 0) {
// Если на сервере нет игроков (только боты), добавляем одного бота
CreateTimer(fDelay, OnTimedCreateFakeClient, 0);
}
}
public OnClientPutInServer(client)
{
if(IsFakeClient(client))
return;
// Определяем текущее количество игроков на сервере
new numPlayers = 0;
for (new i = 1; i <= MaxClients; i++) {
if (IsClientInGame(i) && !IsClientSourceTV(i)) {
numPlayers++;
}
}
if (numPlayers == 1) {
// Если на сервере только вы, добавляем одного бота
CreateTimer(fDelay, OnTimedCreateFakeClient, 0);
}
}
public OnClientDisconnect(client)
{
CreateTimer(0.1, OnTimedCreateFakeClient, client);
}
public Action:OnTimedCreateFakeClient(Handle:timer, any:client){
new clientcount = GetClientCount(true);
if(clientcount == MaxClients || clientcount >= iMaxBots)
return Plugin_Handled;
new NumberOfFakeClients;
for(new i = 1; i <= MaxClients; i++) if(IsClientConnected(i) && IsFakeClient(i) && !IsClientSourceTV(i)) NumberOfFakeClients++;
if(NumberOfFakeClients >= iMaxBots)
return Plugin_Handled;
new RandomName;
while(CheckName(RandomName)) RandomName = GetRandomInt(0, 31);
IsNameUsed[CreateFakeClient(FakeNames[RandomName])] = RandomName;
return Plugin_Handled;
}
bool:CheckName(num)
{
for(new i = 1; i <= MaxClients; i++) if(IsNameUsed[i] == num) return true;
return false;
}
Хотите дальше) С такими запросами, придётся долго ждать. Ни "привет всем", ни "помогите пожалуйста переписать код". Ищите скриптера за деньги.Я также хочу
Вряд-ли кто-то поможет бесплатно, судя по запросу работы не малоХотите дальше) С такими запросами, придётся долго ждать. Ни "привет всем", ни "помогите пожалуйста переписать код". Ищите скриптера за деньги.
Попробуй обратится в раздел "Требуется", там за деньги помогут сделатьМне нужно переписать плагин так, чтобы при входе игроков автоматически добавлялись боты. Я также хочу, чтобы боты не отображались в списке наблюдателей, но были видны только при просмотре сервера. Кроме того сколько ботов добавлять в зависимости от количества игроков, например, одного бота при наличии 4 игроков, двух ботов при 7 игроках и т.д. Имена ботов также должны выбираться случайным образом
PHP:#pragma semicolon 1 #include <sdktools> #define PL_VERSION "1.1.1" static const String:FakeNames[][] = {"РандомЭэээ", "САНТЕХ НИК", "Катька", "ARI$TOKRAT", "Петруха", "Su4ka", "ext77", "Паша Техник", "quality", "Шторм", "ph34r", "1337sp34k", "HardPlayer", "StinG", "Immortal", "achmed", "benthas", "hmmmm", "LOLLOL", "HITM@N", "RUFA", "Metahander", "Meg", "Py6uH", "alyx", "Бутылка_Пива", "Эto_фuaско_брatan", "солдат", "Маршал", "CAT", "ПиздюК", "DoomThird"}; new IsNameUsed[MAXPLAYERS+1] = {-1, ...}, iMaxBots, Float:fDelay; public Plugin:myinfo = { name = "FakeClients", author = "LouLoubizou(fixed by Grey83)", description = "Put fake clients in server", version = PL_VERSION, url = "http://sourcemod.net/" }; public OnPluginStart() { CreateConVar("sm_fakeclients_version", PL_VERSION, "Version of FakeClients plugin", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD); new Handle:cvar; cvar = CreateConVar("sm_fakeclients_players","1","Number of players to simulate", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY, true, _, true, 32.0); iMaxBots = GetConVarInt(cvar); HookConVarChange(cvar, OnChange_MaxBots); cvar = CreateConVar("sm_fakeclients_delay","0.1","Delay after map change before fake clients join(seconds)", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY, true, 0.1, true, 10.0); fDelay = GetConVarFloat(cvar); HookConVarChange(cvar, OnChange_Delay); } public OnChange_MaxBots(Handle:cvar, const String:oldValue[], const String:newValue[]) { iMaxBots = StringToInt(newValue); } public OnChange_Delay(Handle:cvar, const String:oldValue[], const String:newValue[]) { fDelay = StringToFloat(newValue); } public OnMapStart() { new numPlayers = GetClientCount(true); // Получаем количество игроков, включая ботов if (numPlayers == 0) { // Если на сервере нет игроков (только боты), добавляем одного бота CreateTimer(fDelay, OnTimedCreateFakeClient, 0); } } public OnClientPutInServer(client) { if(IsFakeClient(client)) return; // Определяем текущее количество игроков на сервере new numPlayers = 0; for (new i = 1; i <= MaxClients; i++) { if (IsClientInGame(i) && !IsClientSourceTV(i)) { numPlayers++; } } if (numPlayers == 1) { // Если на сервере только вы, добавляем одного бота CreateTimer(fDelay, OnTimedCreateFakeClient, 0); } } public OnClientDisconnect(client) { CreateTimer(0.1, OnTimedCreateFakeClient, client); } public Action:OnTimedCreateFakeClient(Handle:timer, any:client){ new clientcount = GetClientCount(true); if(clientcount == MaxClients || clientcount >= iMaxBots) return Plugin_Handled; new NumberOfFakeClients; for(new i = 1; i <= MaxClients; i++) if(IsClientConnected(i) && IsFakeClient(i) && !IsClientSourceTV(i)) NumberOfFakeClients++; if(NumberOfFakeClients >= iMaxBots) return Plugin_Handled; new RandomName; while(CheckName(RandomName)) RandomName = GetRandomInt(0, 31); IsNameUsed[CreateFakeClient(FakeNames[RandomName])] = RandomName; return Plugin_Handled; } bool:CheckName(num) { for(new i = 1; i <= MaxClients; i++) if(IsNameUsed[i] == num) return true; return false; }
Я понимаю, что в вашей жизни могли возникнуть трудности или неудачи, и каждый имеет право на свой выбор. Не нужно учить меня, как правильно поступать. Я написал свой запрос, и решение о том, будет ли на него ответ или нет, остается за другими людьми.Хотите дальше) С такими запросами, придётся долго ждать. Ни "привет всем", ни "помогите пожалуйста переписать код". Ищите скриптера за деньги.
Все-го хо-ро-ше-го)Я понимаю, что в вашей жизни могли возникнуть трудности или неудачи, и каждый имеет право на свой выбор. Не нужно учить меня, как правильно поступать. Я написал свой запрос, и решение о том, будет ли на него ответ или нет, остается за другими людьми.
Всем доброе утро, подскажите пожалуйста, можно ли как-то упросить:?Код:CPrintToChatAll("%t %t", iWinner == 2 ? "Prefix" : "Prefix_CT", iWinner == 2 ? "Cake_Lie_TT" : "Cake_Lie_CT");
#define PREFIX "Prefix"
#define CAKE_LIE "Cake_Lie_"
bool bIsWinT = iWinner == CS_TEAM_T;
PrintToChatAll( "%t %t",
bIsWinT ? PREFIX : PREFIX ... "_CT",
bIsWinT ? CAKE_LIE ... "TT" : CAKE_LIE ... "CT");
У меня много другого вывода текста с другими блоками, например "Top_Accuracy_CT" и "Top_Accuracy_TT" и все разные. Не меняется только префикс, он везде одинаковый, так что этот вариант мне не подходитC-подобный:#define PREFIX "Prefix" #define CAKE_LIE "Cake_Lie_" bool bIsWinT = iWinner == CS_TEAM_T; PrintToChatAll( "%t %t", bIsWinT ? PREFIX : PREFIX ... "_CT", bIsWinT ? CAKE_LIE ... "TT" : CAKE_LIE ... "CT");
Всем доброе утро, подскажите пожалуйста, можно ли как-то упросить:?Код:CPrintToChatAll("%t %t", iWinner == 2 ? "Prefix" : "Prefix_CT", iWinner == 2 ? "Cake_Lie_TT" : "Cake_Lie_CT");
if(iWinner == 2) CPrintToChatAll("%t %t", "Prefix", "Cake_Lie_TT");
else CPrintToChatAll("%t %t", "Prefix_CT", "Cake_Lie_CT");
У меня так и стояло, решил код упростить, оставив функционал тем жеC-подобный:if(iWinner == 2) CPrintToChatAll("%t %t", "Prefix", "Cake_Lie_TT"); else CPrintToChatAll("%t %t", "Prefix_CT", "Cake_Lie_CT");
ну как упростил... сделал вместо 1 проверки 2У меня так и стояло, решил код упростить, оставив функционал тем же
Тоже подумал что как-то замудрено, вот и решил спросить помощи у более опытных скриптеров)ну как упростил... сделал вместо 1 проверки 2
Это ведь тоже самое, только сложнее) Да и кода больше стало в несколько разC-подобный:new prefix[20], cakeLie[20]; format(prefix, sizeof(prefix), "%s", (iWinner == 2) ? "Prefix" : "Prefix_CT"); format(cakeLie, sizeof(cakeLie), "%s", (iWinner == 2) ? "Cake_Lie_TT" : "Cake_Lie_CT"); CPrintToChatAll("%t %t", prefix, cakeLie);
Этот вариант более лаконичен и выполняет то же самое действие, что и ваш исходный код.Это ведь тоже самое, только сложнее) Да и кода больше стало в несколько раз
Так то оно да, но слишком много лишних действий. У меня не только проверка на победителя, но еще и на то с какой команды игрок, + много другого текста и если для каждого блока по отдельности все это делать то вместо 20 строк кода, все увеличится до 60-80, а это уже не лаконично)Этот вариант более лаконичен и выполняет то же самое действие, что и ваш исходный код.
public void PrintPhrase(char[] sPhrase, int iWinner)
{
if(iWinner == 2) CPrintToChatAll("%t %t", "Prefix", sPhrase);
else
{
Format(sPhrase, 20, "%s%s", sPhrase, "_CT");
CPrintToChatAll("%t %t", "Prefix_CT", sPhrase);
}
}
Опять таки сложно, у меня все в 2 проверки обошлось и в 1 строчку кода, а тут 9 строчек кода и 2 вывода текста вместо 1может ещё что-то типа такогоC-подобный:public void PrintPhrase(char[] sPhrase, int iWinner) { if(iWinner == 2) CPrintToChatAll("%t %t", "Prefix", sPhrase); else { Format(sPhrase, 20, "%s%s", sPhrase, "_CT"); CPrintToChatAll("%t %t", "Prefix_CT", sPhrase); } }