[Left 4 Dead 1, 2] Кооп на 16-20 игроков

Обсуждаем все, что относится к выделенным серверам *NIX (Unix, Linux) и Windows
Сообщение
Автор
proter
Нович0к
Нович0к
Сообщения: 28
Зарегистрирован: 25.03.2011
Благодарил (а): 1 раз

#256 Сообщение 07.01.2012, 14:07

andreiii писал(а):proter, зайди глянь как амуниция слетает.

любому админу напиши тебе покажут и расскажут.
Мне на других сюровно :$ главное что у меня пашет
Если что у меня у самого hardmod 0.2.3
AMD Phenom II X6 1100T 3.32Ghz,12 ГБ DDR3 (1600Mhz),HDD 320гб,Gigabyte GTX560Ti

Изображение

andreiii
Лейтенант
Лейтенант
Сообщения: 228
Зарегистрирован: 24.11.2011
Благодарил (а): 1 раз
Поблагодарили: 8 раз

#257 Сообщение 07.01.2012, 14:52

proter писал(а):
andreiii писал(а):proter, зайди глянь как амуниция слетает.

любому админу напиши тебе покажут и расскажут.
Мне на других сюровно :$ главное что у меня пашет
Если что у меня у самого hardmod 0.2.3
Тем не менее советы даешь и тему JONNY на другом сайте перекатал.. смысл? если срать на других.

proter
Нович0к
Нович0к
Сообщения: 28
Зарегистрирован: 25.03.2011
Благодарил (а): 1 раз

#258 Сообщение 07.01.2012, 14:59

andreiii писал(а):
proter писал(а):
andreiii писал(а):proter, зайди глянь как амуниция слетает.

любому админу напиши тебе покажут и расскажут.
Мне на других сюровно :$ главное что у меня пашет
Если что у меня у самого hardmod 0.2.3
Тем не менее советы даешь и тему JONNY на другом сайте перекатал.. смысл? если срать на других.
Помогать люблю.А тему я больше не поддерживаю (лень как то).Вот на счет срать я не говорил.Да и вобще разве кто-то хочет тебе помогать?когда у тебя сборка по напихана говном.Если используешь сборку туды,то не удивляйся на работу серва (без tymod).
AMD Phenom II X6 1100T 3.32Ghz,12 ГБ DDR3 (1600Mhz),HDD 320гб,Gigabyte GTX560Ti

Изображение

Аватара пользователя
leks19
Капитан
Капитан
Сообщения: 376
Зарегистрирован: 10.02.2011
Откуда: Беларусь
Благодарил (а): 12 раз
Поблагодарили: 15 раз
Контактная информация:

#259 Сообщение 07.01.2012, 17:03

Последний раз редактировалось leks19 25.06.2013, 22:39, всего редактировалось 1 раз.
Изображение

andreiii
Лейтенант
Лейтенант
Сообщения: 228
Зарегистрирован: 24.11.2011
Благодарил (а): 1 раз
Поблагодарили: 8 раз

#260 Сообщение 07.01.2012, 19:47

leks19, у меня проблема с хардмодом. поэтому и пишу автору.

Я на чистый сервер поставил сборку JONNY от 12.12.2011. проблема осталась. значит трабл в хардмоде.

Если есть сомнения то глянь своими глазами.

Аватара пользователя
Jonny
Полковник
Полковник
Сообщения: 1371
Зарегистрирован: 30.05.2008
Благодарил (а): 23 раза
Поблагодарили: 54 раза

#261 Сообщение 07.01.2012, 20:26

Я сборку взял с Олимпуса. Сначала залил туда, она там пару дней поработала, я оттуда запаковал и выложил. На Олимпусе оружие сохраняется.
Нахрена ты вообще используешь столь древнюю версию (0.2.3) мне неясно и неинтересно. Но раз тебе нравится, пользуйся. И вопросы по ней задавай там где скачал.
Никакого отношения к нацистским группам и направлениям не имею.

proter
Нович0к
Нович0к
Сообщения: 28
Зарегистрирован: 25.03.2011
Благодарил (а): 1 раз

#262 Сообщение 07.01.2012, 20:52

leks19 писал(а): Чел если ты используешь сборку говно-semantic то и пользуйся ей и обращайся к ним за помощью. Тут сборка hardmod
hardmod как раз говно. Там полно лишнего мусора,который только нагрузку увеличивает и даже не исключено падения сервера.
AMD Phenom II X6 1100T 3.32Ghz,12 ГБ DDR3 (1600Mhz),HDD 320гб,Gigabyte GTX560Ti

Изображение

Аватара пользователя
Jonny
Полковник
Полковник
Сообщения: 1371
Зарегистрирован: 30.05.2008
Благодарил (а): 23 раза
Поблагодарили: 54 раза

#263 Сообщение 07.01.2012, 21:26

а 0.2.3 это стало быть не хардмод? наверное фантик-мод, да? :D
нука перечисли что там в последней версии дает нагрузку на сервер и что за мусор?
Никакого отношения к нацистским группам и направлениям не имею.

proter
Нович0к
Нович0к
Сообщения: 28
Зарегистрирован: 25.03.2011
Благодарил (а): 1 раз

#264 Сообщение 09.01.2012, 17:44

Воспользовавшись сервисом http://godtony.mooo.com/lysis/ я посмотрев на структуру хардмода версии 0.2.7

Для начала небольшое количество логов который ведет плагин. логи нужны для тестов и отладки плагина но для релиза их нужно отключать. Явно видна попытка использовать использующих данную сборку как бесплатных бета тестеров.
Log("crashwatcher.sp / CWOnMapStart() / crash found", 1);
Log("crashwatcher.sp / Command_LastMap() / 1", 4);
Log("crashwatcher.sp / ClearFile() / 1", 4);
Log("crashwatcher.sp / ClearFile() / file == INVALID_HANDLE", 4);
Log("crashwatcher.sp / LoadFile() / 1", 4);
Log("crashwatcher.sp / LoadFile() / file == INVALID_HANDLE", 1);
Log("coop_stats.inc / CStatsOnMapStart() / 1", 2);
Log("coop_stats.inc / CStatsOnMapStart() / StartFirstRoundTimer()", 2);
Log("coop_stats.inc / Command_AddPoints() / 1", 4);
Log("coop_stats.inc / Command_AddPoints() / Top15Used", 3);
Log("coop_stats.inc / Command_RemoveDeadStats() / Top15Used", 2);
Log("coop_stats.inc / Command_RemoveDeadStats() / players_data_used", 2);
Log("coop_stats.inc / Command_RemoveDeadStats() / No data found (points_data)", 2);
Log("coop_stats.inc / Command_RemoveDeadStats() / !FileToKeyValues(PData, PlayersFilePath)", 2);
Log("coop_stats.inc / Command_StatsCheckLimit() / 1", 3);
Log("coop_stats.inc / Command_StatsCheckLimit() / Top15Used", 2);
Log("coop_stats.inc / ClearAllPoints() / Top15Used", 2);
Log("coop_stats.inc / ClearAllPoints() / 1", 1);
Log("coop_stats.inc / ClearAllPoints() / No data found.", 1);
Log("coop_stats.inc / CSRoundStartEvent() / 1", 2);
Log("coop_stats.inc / CSRoundStartEvent() / 2 - if (real_clients_count > 0)", 2);
Log("coop_stats.inc / StartFirstRoundTimer() / 1", 2);
Log("coop_stats.inc / StartFirstRoundTimer() / 2 - NOT FirstRoundTimerEnabled", 2);
Log("coop_stats.inc / CSGameInstructorNodraw() / 1", 2);
Log("coop_stats.inc / CSGameInstructorNodraw() / 2 - rounds == 1 && IsFirstMapFlag", 2);
Log("hardmod.sp / OnPluginStart() / 6 - end", 4);
Log("hardmod.sp / OnMapStart() / 1", 2);
Log("hardmod.sp / OnMapStart() / 2 - end", 4);
Log("hardmod.sp / Action:TimedCheckRounds() / 1", 4);
Log("hardmod.sp / Action:TimedCheckRounds() / 2 - IsServerProcessing()", 4);
Log("hardmod.sp / Action:TimedCheckRounds() / 3 - end", 4);
Log("hardmod.sp / Action:TimedCheckTag()", 4);
Log("hardmod.sp / Action:TimedConfigRun()", 4)
Log("hardmod.sp / Action:TimedMOTD()", 4);
Log("hardmod.sp / Action:Event_ServerAddBan()", 4);
Log("hardmod.sp / OnClientDisconnect()", 5);
Log("hardmod.sp / OnClientDisconnect_Post()", 5);
Log("hardmod.sp / OnClientConnected()", 5);
Log("hardmod.sp / OnClientAuthorized()", 5);
Log("hardmod.sp / OnClientPutInServer()", 5);
Log("hardmod.sp / Cvar_Gamemode_Changed()", 5);
Log("hardmod.sp / Command_Suicide()", 4);
Log("hardmod.sp / Command_Version()", 4);
Log("hardmod.sp / Command_BlackWhite()", 4);
Log("hardmod.sp / Command_Vocalize()", 5);
Log("hardmod.sp / Command_ChangeLevel()", 3);
Log("hardmod.sp / Command_Exit()", 3);
Log("hardmod.sp / Command_AFK()", 4);
Log("hardmod.sp / Command_SAY()", 4);
Log("hardmod.sp / Command_KickFakeClients()", 3);
Log("hardmod.sp / Command_KickExtraBots()", 3);
Log("hardmod.sp / Command_KickTeam()", 3);
Log("hardmod.sp / Command_Test()", 3);
Log("hardmod.sp / Command_KillTarget()", 3);
Log("hardmod.sp / Command_ToggleFirstMap()", 3);
Log("hardmod.sp / Command_GameMode()", 3);
Log("hardmod.sp / Event_FinalWin()", 4);
Log("hardmod.sp / Event_MapTransition()", 2);
Log("hardmod.sp / Event_PlayerTransitioned()", 4);
Log("hardmod.sp / Event_RoundFreezeEnd()", 4);
Log("hardmod.sp / Event_RoundStart()", 2);
Log("hardmod.sp / AddServerTagFunc()", 5);
Log("hardmod.sp / sv_tags_changed()", 5);
Log("hardmod.sp / IsMapFinishedChanged()", 5);
Log("hardmod.sp / CheckPointReached()", 4);
Log("hardmod.sp / Event_CheckPoint()", 6);
Log("hardmod.sp / Event_PlayerNowIt()", 5);
Log("hardmod.sp / Event_PlayerDeath()", 5);
Log("hardmod.sp / Event_HealSuccess()", 4);
Log("hardmod.sp / Event_DefibrillatorUsed()", 4);
Log("hardmod.sp / Event_ReviveSuccess()", 4);
Log("hardmod.sp / Event_PlayerFirstSpawn()", 5);
Log("hardmod.sp / Event_PlayerSpawn()", 5);
Log("hardmod.sp / Event_PlayerLedgeGrab()", 5);
Log("hardmod.sp / Event_GameInstructorNodraw()", 4);
Log("hardmod.sp / Event_ServerCvar()", 5);
Подозрительная проверка на данный стим ид
if (StrEqual(auth, "STEAM_1:1:26184783", false)) {
SetClientInfo(client, "name", "?????????");
}
Также какаято интересная проверка на режим игры ( хотя хардмод предназначен для кооператива в вверсусе всеравно его не получится использовать. )
GetGameMode()
{
decl String:GameMode[16];
new Handle:gamecvar_mp_gamemode = FindConVar("mp_gamemode");
GetConVarString(gamecvar_mp_gamemode, GameMode, 13);
if (StrEqual(GameMode, "coop", false) == 1) {
return 1;
}
if (StrEqual(GameMode, "realism", false) == 1) {
return 2;
}
if (StrEqual(GameMode, "survival", false) == 1) {
return 3;
}
if (StrEqual(GameMode, "versus", false) == 1) {
return 4;
}
if (StrEqual(GameMode, "teamversus", false) == 1) {
return 5;
}
if (StrEqual(GameMode, "scavenge", false) == 1) {
return 6;
}
if (StrEqual(GameMode, "teamscavenge", false) == 1) {
return 7;
}
if (StrEqual(GameMode, "mutation3", false) == 1) {
return 8;
}
if (StrEqual(GameMode, "mutation12", false) == 1) {
return 9;
}
return 0;
}

Также какието лишнии команды в разной разновидности.
RegAdminCmd("sm_cmd", Command_CheatCmd, 16384, "sm_cmd command parameters", "", 0);
RegAdminCmd("sm_cmdall", Command_CheatCmdAll, 16384, "sm_cmdall command parameters", "", 0);
RegAdminCmd("sm_cmdtarget", Command_CheatCmdTarget, 16384, "sm_cmdtarget <target: name or target in-game> command parameters", "", 0);
RegAdminCmd("sm_spawnnewitem", Command_SpawnNewItem, 4096, "sm_spawnnewitem <itemname>", "", 0);
RegAdminCmd("sm_spawnitem", Command_SpawnItem, 64, "sm_spawnitem <parameters>", "", 0);
RegAdminCmd("sm_convertbantime", Command_ConvertBanTime, 16384, "sm_convertbantime", "", 0);
RegAdminCmd("sm_grenadelauncher", Command_GrenadeLauncher, 8192, "sm_grenadelauncher", "", 0);
RegAdminCmd("sm_awp", Command_AWP, 8192, "sm_swp", "", 0);
RegAdminCmd("sm_scout", Command_Scout, 8192, "sm_scout", "", 0);
RegAdminCmd("sm_m60", Command_M60, 8192, "sm_m60", "", 0);
RegAdminCmd("sm_spas", Command_SPAS, 8192, "sm_spas", "", 0);
RegAdminCmd("sm_mp5", Command_MP5, 8192, "sm_mp5", "", 0);
RegAdminCmd("sm_uzi", Command_Uzi, 8192, "sm_uzi", "", 0);
RegAdminCmd("sm_uzi2", Command_Uzi2, 8192, "sm_uzi2", "", 0);
RegAdminCmd("sm_shotgun", Command_Shotgun, 8192, "sm_shotgun", "", 0);
RegAdminCmd("sm_pistol", Command_Pistol, 8192, "sm_pistol", "", 0);
RegAdminCmd("sm_magnum", Command_Magnum, 8192, "sm_magnum", "", 0);
RegAdminCmd("sm_chainsaw", Command_Chainsaw, 8192, "sm_chainsaw", "", 0);
RegAdminCmd("sm_crowbar", Command_Crowbar, 8192, "sm_crowbar", "", 0);
RegAdminCmd("sm_freeman", Command_Crowbar, 8192, "sm_crowbar", "", 0);
RegAdminCmd("sm_null", Command_Null, 8192, "sm_null", "", 0);
RegAdminCmd("sm_left4dead", Command_Left4Dead, 8192, "sm_left4dead", "", 0);
RegAdminCmd("sm_left4dead2", Command_Left4Dead2, 8192, "sm_left4dead2", "", 0);
RegConsoleCmd("sm_bw", Command_BlackWhite, "", 0);
RegConsoleCmd("sm_id", Command_ID, "", 0);
RegAdminCmd("sm_kickfakeclients", Command_KickFakeClients, 4, "sm_kickfakeclients (1 - spectators, 2 - survivors, 3 - infected)", "", 0);
RegAdminCmd("sm_kickextrabots", Command_KickExtraBots, 4, "sm_kickextrabots", "", 0);
RegAdminCmd("sm_kickteam", Command_KickTeam, 4, "sm_kickteam (1 - spectators, 2 - survivors, 3 - infected)", "", 0);
RegAdminCmd("sm_test", Command_Test, 8192, "sm_test", "", 0);


Типо доп информация о плагине
PrintToServer("# COMPILED ON SOURCEMOD : %s", "1.4.2-dev");
PrintToServer("# MAX SUPPORTED PLAYERS : %d", 32);
PrintToChatAll("HardMod (%d) activated", 1404);
PrintToServer("HardMod (%d) activated", Version);
PrintToChatAll("HardMod/COOP Stats (%d) activated", 57);
PrintToServer("HardMod/COOP Stats (%d) activated", 57);
PrintToChatAll("HardMod/Autodifficulty activated");
PrintToServer("HardMod/Autodifficulty activated");
PrintToChatAll("HardMod/Votes activated");
PrintToServer("HardMod/Votes activated");


PrintHintText(client, "HARDMOD VERSION %s (%d)nSTATS VERSION: %dnLatest Hardmod version: %s", "0.2.7", Version, 57, "http://webj.narod.ru/projects/hardmod/");
PrintToChat(client, "HARDMOD VERSION %s (%d)nSTATS VERSION: %dnLatest Hardmod version: %s", "0.2.7", Version, 57, "http://webj.narod.ru/projects/hardmod/");
Даже поверхностный просмотр текущего хардмода показал что он немало ресурсов сервера использует не по прямому назначению. А ведь я еще ничего не сказал о самой структуре скриптов где не видны никакие попытки оптимизировать потребление ресурсов сервера.

Добавлено спустя 10 минут 48 секунд:
Хардмод версии 0.2.3 лишен большинства перечисленных здесь недостатков и проверен в действии в течении почти года. Те недостатки которые в нем замечены вполне исправляются в обход его и сервер вполне корректно работает.

Добавлено спустя 5 минут 2 секунды:
Также используемый в твоей сборки плагин l4d2_events по какойто интересной причине дублирует несколько функций хардмода. внимательно присмотритесь к public CheatOnPluginStart()
RegAdminCmd("sm_cheatcmd", Command_CheatCmd, 8192, "sm_cheatcmd command parameters", "", 0);
RegAdminCmd("sm_spawnnewitem", Command_SpawnNewItem, 4096, "sm_spawnnewitem <itemname>", "", 0);
RegAdminCmd("sm_spawnitem", Command_SpawnItem, 64, "sm_spawnitem <parameters>", "", 0);
{
name = "L4D2 Events",
description = "L4D2 Events",
author = "Jonny",
version = "1.0",
url = ""
};
new bool:developerinfoflag;
new Handle:sm_developer;
new Handle:Plugin_Mode;
new Handle:Configs_Dir;
public __ext_core_SetNTVOptional()
{
MarkNativeAsOptional("GetFeatureStatus");
MarkNativeAsOptional("RequireFeature");
MarkNativeAsOptional("AddCommandListener");
MarkNativeAsOptional("RemoveCommandListener");
VerifyCoreVersion();
return 0;
}

Float:operator*(Float:,_:)(Float:oper1, oper2)
{
return FloatMul(oper1, float(oper2));
}

bool:StrEqual(String:str1[], String:str2[], bool:caseSensitive)
{
return strcmp(str1, str2, caseSensitive) == 0;
}

StrCat(String:buffer[], maxlength, String:source[])
{
new len = strlen(buffer);
if (len >= maxlength) {
return 0;
}
return Format(buffer[len], maxlength - len, "%s", source);
}

public SMDeveloperChanged(Handle:hVariable, String:strOldValue[], String:strNewValue[])
{
if (GetConVarInt(sm_developer) >= 1) {
developerinfoflag = 1;
} else {
developerinfoflag = 0;
}
return 0;
}

PrintToAdmins(String:format[])
{
if (developerinfoflag) {
decl String:buffer[192];
new i = 1;
while (i <= MaxClients) {
new flags = GetAdminFlags(GetUserAdmin(i), AdmAccessMode:1);
new var1;
if (IsClientConnected(i)) {
new var2;
if (IsClientInGame(i)) {
VFormat(buffer, 192, format, 2);
PrintToChat(i, "? %s", buffer);
i++;
}
i++;
}
i++;
}
return 0;
}
return 0;
}

public Action:TimedExecCfg(Handle:timer, client)
{
ServerCommand("exec postload.cfg");
return Action:0;
}

public Action:TimedKick(Handle:timer, client)
{
KickClient(client, "");
return Action:0;
}

public RemoveEntity(entity)
{
new var1;
if (IsValidEntity(entity)) {
RemoveEdict(entity);
}
return 0;
}

public Action:TimedRemoveEdict(Handle:timer, entity)
{
new var1;
if (IsValidEntity(entity)) {
RemoveEdict(entity);
}
return Action:0;
}

public Action:TimedRemoveEdictIfDead(Handle:timer, client, entity)
{
new var1;
if (IsValidEntity(entity)) {
RemoveEdict(entity);
}
return Action:0;
}

public GetAdminLvl(client)
{
new user_level = GetAdminImmunityLevel(GetUserAdmin(client));
return user_level;
}

public GetClientZC(client)
{
new var1;
if (!IsValidEntity(client)) {
return 0;
}
return GetEntProp(client, PropType:0, "m_zombieClass", 4, 0);
}

public bool:IsIncapacitated(client)
{
new isIncap = GetEntProp(client, PropType:0, "m_isIncapacitated", 4, 0);
if (isIncap) {
return true;
}
return false;
}

public bool:IsGoingToDie(client)
{
new var1;
if (!IsValidEntity(client)) {
return false;
}
new m_isGoingToDie = GetEntProp(client, PropType:0, "m_isGoingToDie", 4, 0);
if (m_isGoingToDie > 1) {
return true;
}
return false;
}

public bool:CheckGameMode(String:GameModeName[])
{
decl String:GameMode[24];
new Handle:gamecvar_mp_gamemode = FindConVar("mp_gamemode");
GetConVarString(gamecvar_mp_gamemode, GameMode, 24);
if (StrEqual(GameMode, GameModeName, false) == 1) {
return true;
}
return false;
}

GetAnyClient()
{
new i = 1;
while (i < MaxClients) {
new var1;
if (IsClientConnected(i)) {
return i;
}
i++;
}
return 0;
}

GetAnyRealClient()
{
new i = 1;
while (i < MaxClients) {
new var1;
if (IsClientConnected(i)) {
new var2;
if (GetClientTeam(i) == 2) {
return i;
}
i++;
}
i++;
}
return 0;
}

FakeClientCount()
{
new fake_client_count = 0;
new i = 1;
while (i < MaxClients) {
if (IsClientConnected(i)) {
if (IsFakeClient(i)) {
fake_client_count++;
i++;
}
i++;
}
i++;
}
return fake_client_count;
}

public ServerKickClient(client)
{
ServerCommand("kickid %d", GetClientUserId(client));
return 0;
}

public KickFakeClients(kick_mode)
{
new i = 1;
while (i < MaxClients) {
if (IsClientConnected(i)) {
if (IsFakeClient(i)) {
if (0 > kick_mode) {
ServerKickClient(i);
i++;
}
if (GetClientTeam(i) == kick_mode) {
ServerKickClient(i);
i++;
}
i++;
}
i++;
}
i++;
}
return 0;
}

public KickTeam(team)
{
new i = 1;
while (i < MaxClients) {
new var1;
if (IsClientConnected(i)) {
if (team == GetClientTeam(i)) {
ServerKickClient(i);
i++;
}
i++;
}
i++;
}
return 0;
}

public Action:timerRemovePrecacheParticle(Handle:timer, Particle)
{
new var1;
if (IsValidEntity(Particle)) {
AcceptEntityInput(Particle, "Kill", -1, -1, 0);
}
return Action:0;
}

public CheatOnPluginStart()
{
RegAdminCmd("sm_cheatcmd", Command_CheatCmd, 8192, "sm_cheatcmd command parameters", "", 0);
RegAdminCmd("sm_spawnnewitem", Command_SpawnNewItem, 4096, "sm_spawnnewitem <itemname>", "", 0);
RegAdminCmd("sm_spawnitem", Command_SpawnItem, 64, "sm_spawnitem <parameters>", "", 0);
return 0;
}

public Action:Command_CheatCmd(client, args)
{
if (args < 1) {
return Action:3;
}
decl String:command_text[192];
GetCmdArg(1, command_text, 192);
if (args > 1) {
decl String:parameters_text[192];
decl String:temp_text[40];
new i = 2;
while (i <= args) {
GetCmdArg(i, temp_text, 40);
StrCat(parameters_text, 192, temp_text);
i++;
}
CheatCMD(client, command_text, parameters_text);
return Action:0;
}
CheatCMD(client, command_text, "");
return Action:0;
}

public bool:IsCheat(String:Command[])
{
if (GetCommandFlags(Command) & 16384) {
return true;
}
return false;
}


/* ERROR! unknown operator */
function "Command_SpawnNewItem" (number 26)
public Action:Command_SpawnItem(client, args)
{
if (args < 8) {
ReplyToCommand(client, "[SM] Usage: sm_spawnitem <parameters>");
return Action:3;
}
decl Float:VecDirection[3];
decl Float:VecOrigin[3];
decl Float:VecAngles[3];
decl String:modelname[64];
GetCmdArg(1, modelname, 64);
decl String:TempString[20];
GetCmdArg(2, TempString, 20);
VecDirection = StringToFloat(TempString);
GetCmdArg(3, TempString, 20);
VecDirection[4] = StringToFloat(TempString);
GetCmdArg(4, TempString, 20);
VecDirection[8] = StringToFloat(TempString);
GetCmdArg(5, TempString, 20);
VecOrigin = StringToFloat(TempString);
GetCmdArg(6, TempString, 20);
VecOrigin[4] = StringToFloat(TempString);
GetCmdArg(7, TempString, 20);
VecOrigin[8] = StringToFloat(TempString);
GetCmdArg(8, TempString, 20);
VecAngles = 0;
VecAngles[4] = StringToFloat(TempString);
VecAngles[8] = 0;
new spawned_item = CreateEntityByName(modelname, -1);
DispatchKeyValue(spawned_item, "model", "Custom_Spawn");
DispatchKeyValueFloat(spawned_item, "MaxPitch", 360);
DispatchKeyValueFloat(spawned_item, "MinPitch", -360);
DispatchKeyValueFloat(spawned_item, "MaxYaw", 90);
DispatchSpawn(spawned_item);
DispatchKeyValueVector(spawned_item, "Angles", VecAngles);
DispatchSpawn(spawned_item);
TeleportEntity(spawned_item, VecOrigin, NULL_VECTOR, NULL_VECTOR);
return Action:0;
}

public CheatCMDRealClient(client, String:Command[], String:Parameters[])
{
new realclient = GetAnyRealClient();
if (realclient) {
CheatCMD(realclient, Command, Parameters);
return 0;
}
return 0;
}

public CheatCMD(client, String:Command[], String:Parameters[])
{
new CheatCMD_flags = GetCommandFlags(Command);
SetCommandFlags(Command, CheatCMD_flags & -16385);
if (!client) {
client = GetAnyClient();
}
if (!client) {
new fakeclient = CreateFakeClient("cheatcmd_fake_client");
if (fakeclient) {
FakeClientCommand(fakeclient, "%s %s", Command, Parameters);
if (FakeClientCount() > 1) {
ServerKickClient(fakeclient);
}
SetCommandFlags(Command, CheatCMD_flags);
return 0;
}
}
if (client) {
FakeClientCommand(client, "%s %s", Command, Parameters);
} else {
ServerCommand("%s %s", Command, Parameters);
}
SetCommandFlags(Command, CheatCMD_flags);
return 0;
}


/* ERROR! unknown operator */
function "SpawnItem" (number 30)
public OnPluginStart()
{
decl String:cvar_sm_logfile_events[256];
if (StrEqual(cvar_sm_logfile_events, "", false) != 1)
{
decl String:file[256];
BuildPath(PathType:0, file, 256, cvar_sm_logfile_events);
LogToFileEx(file, "OnPluginStart()");
}
decl String:moddir[24];
GetGameFolderName(moddir, 24);
if (!StrEqual(moddir, "left4dead2", false)) {
SetFailState("Use this plugin for Left 4 Dead 2 only.");
}
CreateConVar("l4d2_advanced", "1.0", "[L4D2] Events Version", 403776, false, 0, false, 0);
Plugin_Mode = CreateConVar("l4d2_advanced_mode", "1", "", 262464, false, 0, false, 0);
Configs_Dir = CreateConVar("l4d2_config_dir", "events", "", 262464, false, 0, false, 0);
HookL4D2Events();
return 0;
}

public HookSourceServerEvents()
{
HookEvent("server_spawn", EventHook:15, EventHookMode:1);
HookEvent("server_shutdown", EventHook:15, EventHookMode:1);
HookEvent("server_cvar", EventHook:15, EventHookMode:1);
HookEvent("server_addban", EventHook:15, EventHookMode:1);
HookEvent("server_removeban", EventHook:15, EventHookMode:1);
HookEvent("player_connect", EventHook:15, EventHookMode:1);
HookEvent("player_info", EventHook:15, EventHookMode:1);
HookEvent("player_disconnect", EventHook:15, EventHookMode:1);
HookEvent("player_activate", EventHook:15, EventHookMode:1);
HookEvent("player_say", EventHook:15, EventHookMode:1);
return 0;
}

public HookL4D2Events()
{
HookEvent("round_freeze_end", EventHook:15, EventHookMode:1);
HookEvent("round_start_pre_entity", EventHook:15, EventHookMode:1);
HookEvent("round_start_post_nav", EventHook:15, EventHookMode:1);
HookEvent("nav_generate", EventHook:15, EventHookMode:1);
HookEvent("round_end_message", EventHook:15, EventHookMode:1);
HookEvent("round_end", EventHook:15, EventHookMode:1);
HookEvent("difficulty_changed", EventHook:15, EventHookMode:1);
HookEvent("finale_start", EventHook:15, EventHookMode:1);
HookEvent("finale_rush", EventHook:15, EventHookMode:1);
HookEvent("finale_escape_start", EventHook:15, EventHookMode:1);
HookEvent("finale_vehicle_incoming", EventHook:15, EventHookMode:1);
HookEvent("finale_vehicle_ready", EventHook:15, EventHookMode:1);
HookEvent("finale_vehicle_leaving", EventHook:15, EventHookMode:1);
HookEvent("finale_win", EventHook:15, EventHookMode:1);
HookEvent("mission_lost", EventHook:15, EventHookMode:1);
HookEvent("finale_radio_start", EventHook:15, EventHookMode:1);
HookEvent("finale_radio_damaged", EventHook:15, EventHookMode:1);
HookEvent("final_reportscreen", EventHook:15, EventHookMode:1);
HookEvent("map_transition", EventHook:15, EventHookMode:1);
HookEvent("player_transitioned", EventHook:15, EventHookMode:1);
HookEvent("player_left_start_area", EventHook:15, EventHookMode:1);
HookEvent("witch_spawn", EventHook:15, EventHookMode:1);
HookEvent("witch_killed", EventHook:15, EventHookMode:1);
HookEvent("tank_spawn", EventHook:15, EventHookMode:1);
HookEvent("create_panic_event", EventHook:15, EventHookMode:1);
HookEvent("weapon_spawn_visible", EventHook:15, EventHookMode:1);
HookEvent("gameinstructor_draw", EventHook:15, EventHookMode:1);
HookEvent("gameinstructor_nodraw", EventHook:15, EventHookMode:1);
HookEvent("request_weapon_stats", EventHook:15, EventHookMode:1);
HookEvent("player_talking_state", EventHook:15, EventHookMode:1);
HookEvent("weapon_pickup", EventHook:15, EventHookMode:1);
HookEvent("hunter_punched", EventHook:15, EventHookMode:1);
HookEvent("tank_killed", EventHook:15, EventHookMode:1);
HookEvent("gauntlet_finale_start", EventHook:15, EventHookMode:1);
HookEvent("mounted_gun_start", EventHook:15, EventHookMode:1);
HookEvent("mounted_gun_overheated", EventHook:15, EventHookMode:1);
HookEvent("punched_clown", EventHook:15, EventHookMode:1);
HookEvent("charger_killed", EventHook:15, EventHookMode:1);
HookEvent("spitter_killed", EventHook:15, EventHookMode:1);
HookEvent("jockey_killed", EventHook:15, EventHookMode:1);
HookEvent("triggered_car_alarm", EventHook:15, EventHookMode:1);
HookEvent("panic_event_finished", EventHook:15, EventHookMode:1);
HookEvent("song_played", EventHook:15, EventHookMode:1);
return 0;
}

public ExecuteCFG(String:FileName[])
{
if (GetConVarInt(Plugin_Mode) < 1) {
return 0;
}
decl String:cvar_l4d2_config_dir[256];
GetConVarString(Configs_Dir, cvar_l4d2_config_dir, 256);
decl String:CfgFileName[256];
decl String:CfgFullFileName[256];
Format(CfgFileName, 256, "%s/%s.cfg", cvar_l4d2_config_dir, FileName);
Format(CfgFullFileName, 256, "cfg/%s/%s.cfg", cvar_l4d2_config_dir, FileName);
PrintToServer("exec %s", CfgFileName);
if (FileExists(CfgFullFileName, false)) {
ServerCommand("exec %s", CfgFileName);
}
return 0;
}

public Action:Event_ExecConfig(Handle:event, String:name[], bool:dontBroadcast)
{
PrintToAdmins("l4d2_events ( %s )", name);
ExecuteCFG(name);
return Action:0;
}
AMD Phenom II X6 1100T 3.32Ghz,12 ГБ DDR3 (1600Mhz),HDD 320гб,Gigabyte GTX560Ti

Изображение

Аватара пользователя
Jonny
Полковник
Полковник
Сообщения: 1371
Зарегистрирован: 30.05.2008
Благодарил (а): 23 раза
Поблагодарили: 54 раза

#265 Сообщение 09.01.2012, 18:39

И так разбираем высеры.

Высер номер 1
Для начала небольшое количество логов который ведет плагин. логи нужны для тестов и отладки плагина но для релиза их нужно отключать. Явно видна попытка использовать использующих данную сборку как бесплатных бета тестеров.
:D

Код: Выделить всё

Cvar_Log_Level = CreateConVar("hardmod_log_level", "0", "", FCVAR_PLUGIN);
по умолчанию переменная ведения логов выключена и ни мне ни кому-то еще никакие логи не высылаются, так что твой высер мимо чашки.
логи помогают лично мне в поиске причин падения сервера, если такие появляются. соответственно эта функция косвенно полезна всем, кто использует или будет использовать хардмод когда либо.

Высер номер 2
Подозрительная проверка на данный стим ид
Тебе, дебилу, меняется ник на "Плагиатор", потому что заслужил.

Высер номер 3
Также какаято интересная проверка на режим игры ( хотя хардмод предназначен для кооператива в вверсусе всеравно его не получится использовать. )
Функция используется в автосложности - идет проверка на 8-й режим игры. Остальные пункты видимо для чего то были нужны, сейчас уже не вспомню. И они не дают хоть как то ощущаемой нагрузки на сервер. И не давали бы даже если бы этот скрипт выполнялся на каждом фрейме.

Высер номер 4
Типо доп информация о плагине
И чо? Школота негодует? Что делать в таких случаях я уже писал выше ;)

Высер номер 5
Даже поверхностный просмотр текущего хардмода показал что он немало ресурсов сервера использует не по прямому назначению.
Какой такой поверхностный осмотр, мы еще даже не начинали, ну ка покажи по существу хоть одну функцию дающую загрузку.

Высер номер 6
Также какието лишнии команды в разной разновидности.
Команды имеются в описании мода на первой страничке. А так же они запускаются только когда их запускают, в циклических скриптах не присутствуют и нагрузки на сервер не дают вообще никакой.

По существу
Также используемый в твоей сборки плагин l4d2_events по какойто интересной причине дублирует несколько функций хардмода. внимательно присмотритесь к public CheatOnPluginStart()
И хотя:

Код: Выделить всё

21:27:41 sm cmds l4d2_events
21:27:41 [SM] No commands found for: L4D2 Events
Все равно иклуд подгружался. (Сама функция регистрирующая команды НЕ подгружалась и соответственно ничего не дублировала). Зачем он там был я сам не знаю :-)
Но это относится к евентс плагину, а не к хардмоду, так что мимо, товарисч, опять мимо.
Никакого отношения к нацистским группам и направлениям не имею.

proter
Нович0к
Нович0к
Сообщения: 28
Зарегистрирован: 25.03.2011
Благодарил (а): 1 раз

#266 Сообщение 09.01.2012, 19:52

Присутствие логов хоть и выключенных, забытые проверки на режим игры, присутствие таких команд как раздача оружия игрокам, как минимум повышает потребление оперативной памети сервера.
Хоть данное место и не распаковалось данным сервисом но уверен что в функции OnClientPostAdminCheck некое Autodifficulty(); выполняется после каждого спавна существ ( особых зараженных, ботов, игроков ) а не тогда только когда живой игрок подключился. Такая мелочь но немного влияет на оптимизацию потребления ресурсов. А там где нашелся один недочет с оптимизацией, найдется еще не мало других.

Карта еще даже не подгрузилась а ты уже чистиш у игроков сохраненное оружие. хоть немного но увеличивает время загрузки карты.
public KIFOnMapStart()
{
if (!IsFirstMapFlag) {
new j = 1;
while (j <= 32) {
ClearPlayerWeapons(j);
j++;
}
}
return 0;
}
в роунд старте обнаружил
if (0 < GetConVarInt(Cvar_Restore_COOP)) {
SetConVarString(LockCvar_Gamemode, "coop", false, false);
SetConVarString(Cvar_Gamemode, "coop", false, false);
}
в player_spawn обнаружил. при этом там не наблюдается никакой проверки на то что это выживший
KIFPlayerSpawn(event);
CSPlayerSpawn(event);
ADPlayerSpawn(event);
Все эти мелочи в сумме дают хоть и не большую но нагрузку на сервер.
AMD Phenom II X6 1100T 3.32Ghz,12 ГБ DDR3 (1600Mhz),HDD 320гб,Gigabyte GTX560Ti

Изображение

Аватара пользователя
Jonny
Полковник
Полковник
Сообщения: 1371
Зарегистрирован: 30.05.2008
Благодарил (а): 23 раза
Поблагодарили: 54 раза

#267 Сообщение 09.01.2012, 20:55

proter писал(а):Присутствие логов хоть и выключенных, забытые проверки на режим игры, присутствие таких команд как раздача оружия игрокам, как минимум повышает потребление оперативной памети сервера.
Настолько незначительно, что об этом даже тебе говорить западло. Но да пох
Хоть данное место и не распаковалось данным сервисом но уверен что в функции OnClientPostAdminCheck некое Autodifficulty(); выполняется после каждого спавна существ ( особых зараженных, ботов, игроков ) а не тогда только когда живой игрок подключился. Такая мелочь но немного влияет на оптимизацию потребления ресурсов
Аналогично вышесказанному.
Карта еще даже не подгрузилась а ты уже чистиш у игроков сохраненное оружие. хоть немного но увеличивает время загрузки карты.
))) Да, чувак, это ахренеть как ресурсы жрет. Даже мой калькулятор (реально калькулятор обычный casio) выполнил бы такую задачу быстрее, чем я смог бы заметить. Более того, чистка статистики при 1500 игроках в ней дает 1 секунду задержки на загрузке сервера. Представляешь, фантег, целую секунду дает. На самом деле. Каждый раз при загрузке карты если установлена автоочистка сервер тратит целую секунду времени на очистку!!! Вот где расточительство то!
в роунд старте обнаружил ...
в player_spawn обнаружил. при этом там не наблюдается никакой проверки на то что это выживший...
Все эти мелочи в сумме дают хоть и не большую но нагрузку на сервер.
Все эти мелочи в сумме дают один большой высер в лужу. Вот так вот всё просто. Тебе просто надо херню придумать почему версия хардмода меняющая твой ник на твой социальный статус плохая и ты всякую чушь несешь.

Здесь не идет разговора о кодировании видео в реальном времени и например нет никакой необходимости переходить к паранойе типа вот две функции в моде есть они память кушают (килобайт 10, если весь мод ест 100).

Единственная функция дающая загрузку это очистка статистики. Поэтому она работает при запуске сервера. Хотя какая разница, целая секунда, это за 1 кампанию получается целых 5 секунд! Есть еще "ресурсоемкая" функция сортировки массива при выводе топ15 (работает каждый раз!). Правда в мускле на твоей старой ниочемной статистике она тоже выполняется, так что тут еще вопрос, где ресурсов больше потребляется. Но даже это не дает сколько нибудь ощутимой нагрузки на сервер.

Я как бы не первый день программирую. И хоть не сказать что мега программер, но про оптимизации и сам в курсе. И оптимизация есть там где она требуется (например сохранения временных очков в файл статистики не происходит при каждом измении, оно буферизуется).
Никакого отношения к нацистским группам и направлениям не имею.

proter
Нович0к
Нович0к
Сообщения: 28
Зарегистрирован: 25.03.2011
Благодарил (а): 1 раз

#268 Сообщение 10.01.2012, 03:58

Ты кодирует не напрямую а используеш возможности соурсмода и метамода где каждая операция имеет посредника. Использование сохранения статистики в файл тоже не удачная идея с самого начала. Ты сам прекрасно это знаеш но всеравно потратил колоссальное время на различные костыли в виде
(например сохранения временных очков в файл статистики не происходит при каждом измении, оно буферизуется).
Для сохранения статистики игрока ничего лучше мускула еще не придумано. Также сохраняя в файл статистику ты ране постоянно жаловался на то то временами файл становится битым и на лаги у некоторых из за статистики игроков. Такую мелочь тебе можно было легко избежать использовав мускул.
AMD Phenom II X6 1100T 3.32Ghz,12 ГБ DDR3 (1600Mhz),HDD 320гб,Gigabyte GTX560Ti

Изображение

Аватара пользователя
Jonny
Полковник
Полковник
Сообщения: 1371
Зарегистрирован: 30.05.2008
Благодарил (а): 23 раза
Поблагодарили: 54 раза

#269 Сообщение 10.01.2012, 10:08

Ты кодирует не напрямую а используеш возможности соурсмода и метамода где каждая операция имеет посредника.
Че к чему вообще? Здесь нет функций критичных к ресурсам, которые необходимо писать на ассемблере. Здесь есть только обиженный школьник-плагиатор.
Использование сохранения статистики в файл тоже не удачная идея с самого начала.
А мускл куда сохраняет, неужели не в файл?
Для сохранения статистики игрока ничего лучше мускула еще не придумано.
Для сохранения баз данных на пару десятков миллионов строк пожалуй мускл был бы удобнее. Потому что мне действительно пришлось бы прибегать к различным оптимизациям и дефрагментациям. А для статистики на несколько тысяч записей это вообще похеру. Там файл получается на 100 килобайт, это пшик.
Также сохраняя в файл статистику ты ране постоянно жаловался на то то временами файл становится битым и на лаги у некоторых из за статистики игроков.
Да, файл статистики бился, уже несколько месяцев такого не наблюдаю, думаю что это исправлено :-)

Я по своей натуре очень ленивое существо. Просто невообразимо ленивое. И раз уж я тем не менее решил писать статистику самостоятельно, то значит посчитал существующую на тот момент (ту, что работает у тебя сейчас) эпически убогой. И мне похеру на мускле она или нет - она убогая.
Такую мелочь тебе можно было легко избежать использовав мускул.
Сейчас статистика и на 2500 игроках работает без нареканий, думаю и на пяти тысячах ничего не изменится. А при очистке мертвых душ (не посещающих сервер в течении трех недель) она даже за 3000 не перевалит. Конечно сидеть жопой на печке и ниче не делать было бы проще, "использовать мускл" как ты выразился. А ты попробуй не использовать мускл, у тебя то ума не хватит написать что-то свое. Разве что функцию выдрать из хардмода, но даже на это ты до конца не способен, иначе давно уже пересобрал бы его под своим якобы авторством.
Никакого отношения к нацистским группам и направлениям не имею.

Tyda
Нович0к
Нович0к
Сообщения: 1
Зарегистрирован: 10.01.2012

#270 Сообщение 10.01.2012, 15:49

Фантику и нету необходимости писать свою статистику когда уже давно готова и выложена мною неплохая статистика в свободный доступ https://forums.alliedmods.net/showthread.php?t=174289( Хоть криво и косо написана но нормально выполняет свою задачу и исходник я не пожмотив выложил). Ранее играл на твоем сервере но чуть меньше года назад открыл свой сервер и фантик предложил помощь в развитии ( он единственный кто поддержал и помог с трудностями в развитии сервера. Так и образовался проект Семантик ). Уже чуть больше полугода как проект использует свою оригинальную сборку и вполне успешно развивается автономно от других. Все это я говорю для того что хардмод данному проекту не интересен, также как и другие плагины идущие с твоей сборкой. Те несколько свежих тем были созданы для того чтоб показать пользователям как ты относишся к любой критике в адрес своего плагина. К сведению мною для проекта уже в сентябре был практически полностью сделан аналог хардмода но из за трудности с пониманием логики сохранения оружия у игроков и нехватки времени было отложено до новогодних праздников и в данный момент активно тестируется на реальном сервере. Заходи потестиш и покритикуеш. Исходники также планирую после теста выложить в свободный доступ. По моему мнению хардмод устарел и мало кому нужен сейчас. Ты просто начал двигаться по пути усложнения того чего игрокам не нужно.
Изображение
Последний раз редактировалось DarkHaze 10.01.2012, 15:49, всего редактировалось 2 раза.
Причина: дабллаккаунт

Ответить Вложения 3