Как лучше GetRandomInt

alexmy

Участник
Сообщения
284
Реакции
13
Всем привет интересует такой вопрос, если два плагина конфликтуют между собой, возможно один из двух выгружать? И если да, как лучше это сделать, вот я набросал два варианта какой из них лучше? Компилятор быстрей компилирует по второму варианту.
Оффтоп
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
for (int i = 1; i <= MaxClients; ++i){
if (IsClientInGame(i)){
Нужность цикла равна нулю. Второй вариант лучше, но можно в одну основную строку вывести:
PHP:
ServerCommand("sm_rcon sm plugins unload %s.smx", GetRandomInt(0, 1) ? "SuperTanks" : "l4d_lastboss");
 

alexmy

Участник
Сообщения
284
Реакции
13
Нужность цикла равна нулю. Второй вариант лучше, но можно в одну основную строку вывести:
PHP:
ServerCommand("sm_rcon sm plugins unload %s.smx", GetRandomInt(0, 1) ? "SuperTanks" : "l4d_lastboss");
Оказывается вообще не работает не один из вариантов, пробовал сам выгружать, работает...
PHP:
#pragma semicolon 1
#include <sourcemod>

public void OnPluginStart(){
    HookEvent("round_start", Event_Round_Start);
}
public Action Event_Round_Start(Event event, const char[] name, bool dontBroadcast){
    for (int i = 1; i <= MaxClients; ++i){
        if (IsClientInGame(i)){
            ServerCommand("sm_rcon sm plugins unload %s.smx", GetRandomInt(0, 1) ? "l4d_lastboss_extend" : "l4d_lastboss");
        }
    }
}
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
А цикл по игрокам ты зачем делаешь, если не используешь его?
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
цикл убери, иначе можешь выгрузить сразу 2 плагина, когда более 1го игрока
 

TolikCorp

Участник
Сообщения
874
Реакции
334
Циклом по игрокам он по сути оба плагина вырубает... Ему говорят не надо тебе цикл, а он ставит и ставит.
 

alexmy

Участник
Сообщения
284
Реакции
13
А цикл по игрокам ты зачем делаешь, если не используешь его?
Ну я как бы не знал что цикл только по игрокам, я как бы его использовал и не только по игрокам...
--- Добавлено позже ---
Тогда такой вопрос, почему сервер запоминает текущий выгруженный плагин и на других картах.
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
PHP:
public Action Event_Round_Start(Event event, const char[] name, bool dontBroadcast){
 ServerCommand("sm_rcon sm plugins unload %s.smx", GetRandomInt(0, 1) ? "l4d_lastboss_extend" : "l4d_lastboss");
}
--- Добавлено позже ---
почему сервер запоминает текущий выгруженный плагин и на других картах?
- хз
 

alexmy

Участник
Сообщения
284
Реакции
13
PHP:
public Action Event_Round_Start(Event event, const char[] name, bool dontBroadcast){
ServerCommand("sm_rcon sm plugins unload %s.smx", GetRandomInt(0, 1) ? "l4d_lastboss_extend" : "l4d_lastboss");
}
--- Добавлено позже ---
почему сервер запоминает текущий выгруженный плагин и на других картах?
- хз
Алло гараж я в курсе, давно убрал.
 

DarklSide

Участник
Сообщения
931
Реакции
468
Нужно смотреть на их контекст...

При ручном "sm plugins unload" выгружаешь не на hook начала нового раунда, поэтому возможно понадобится таймер.

если два плагина конфликтуют между собой, возможно один из двух выгружать?
Можно найти место конфликта - исправить, и/или их соединить.

Если текущий код выгружает "sm plugins unload" только, и нет пары загрузки "sm plugins load":
PHP:
//Called after all plugins have been loaded.
public void OnAllPluginsLoaded()
{
    ServerCommand("sm plugins unload %s.smx", GetRandomInt(0, 1) ? "l4d_lastboss_extend" : "l4d_lastboss");
}

Так же - загружать нужный "sm plugins load" из /disabled и добавить поддержку его перезапуска (OnMapStart(), OnClientPostAdminCheck(), ...), если отсутствует.

Если sm позволяет в "OnMap" и не будет новых конфликтов, попробовать чередование:

PHP:
bool bOneLoad; //path /disabled/

public void OnMapStart()
{
    bOneLoadPlugin = view_as<bool>(GetRandomInt(0, 1));
    ServerCommand("sm plugins load disabled/%s", bOneLoad ? "l4d_lastboss_extend" : "l4d_lastboss");
}

public void OnMapEnd()
{
    ServerCommand("sm plugins unload disabled/%s", bOneLoad ? "l4d_lastboss_extend" : "l4d_lastboss");
}
 
Последнее редактирование:

alexmy

Участник
Сообщения
284
Реакции
13
Нужно смотреть на их контекст...

При ручном "sm plugins unload" выгружаешь не на hook начала нового раунда, поэтому возможно понадобится таймер.


Можно найти место конфликта - исправить, и/или их соединить.

Если текущий код выгружает "sm plugins unload" только, и нет пары загрузки "sm plugins load":
PHP:
//Called after all plugins have been loaded.
public void OnAllPluginsLoaded()
{
    ServerCommand("sm plugins unload %s.smx", GetRandomInt(0, 1) ? "l4d_lastboss_extend" : "l4d_lastboss");
}

Так же - загружать нужный "sm plugins load" из /disabled и добавить поддержку его перезапуска (OnMapStart(), OnClientPostAdminCheck(), ...), если отсутствует.

Если sm позволяет в "OnMap" и не будет новых конфликтов, попробовать чередование:

PHP:
bool bOneLoad; //path /disabled/

public void OnMapStart()
{
    bOneLoadPlugin = view_as<bool>(GetRandomInt(0, 1));
    ServerCommand("sm plugins load disabled/%s", bOneLoad ? "l4d_lastboss_extend" : "l4d_lastboss");
}

public void OnMapEnd()
{
    ServerCommand("sm plugins unload disabled/%s", bOneLoad ? "l4d_lastboss_extend" : "l4d_lastboss");
}
То что я хотел спасибо большое, я не знал что плагины можно загружать из папки disabled.
 
Сверху Снизу