No Lobby Reservation 0.0.2  [На сервере]

Плагины и дополнения / Plugins and add-ons

Модераторы: Dame-danners, Longipongeoos

Аватар пользователя
Longipongeoos
Сообщений: 191
Зарегистрирован: 12 апр 2017, 16:50

No Lobby Reservation 0.0.2  [На сервере]

Сообщение Longipongeoos » 26 июл 2022, 11:17

Описание
Плагин позволяет игрокам подключаться на сервер, не запрашивая lobby id от Steam, при этом избавляя их от киков, связанных с лобби. Имеется при этом возможность подключаться на сервер без установки токена, а так же убрана необходимость в использовании параметра EnableNSNetSvc на RevEmu.

Внимание!

Код: Выбрать все

С данным плагином sv_prime_accounts_only 1 не будет оказывать эффекта, поэтому для пропуска только игроков с прайм статусом используйте соответсвующие плагины
.
Может не корректно работать с sourcemod`om версии 1.11 на версии 1.10 работает стабильно

Исходный код

Код: Выбрать все

#pragma semicolon 1

#include <sourcemod>

#pragma newdecls required

public Plugin myinfo =
{
   name = "No Lobby Reservation",
   author = "vanz",
   version = "0.0.2"
};

enum struct mem_patch
{
   Address addr;
   int len;
   char patch[256];
   char orig[256];

   bool Init(GameData conf, const char[] key, Address addr)
   {
      int offset, pos, curPos;
      char byte[16], bytes[512];
      
      if (this.len)
         return false;
      
      if (!conf.GetKeyValue(key, bytes, sizeof(bytes)))
         return false;
      
      offset = conf.GetOffset(key);
      
      if (offset == -1)
         offset = 0;
      
      this.addr = addr + view_as<Address>(offset);
      
      StrCat(bytes, sizeof(bytes), " ");
      
      while ((pos = SplitString(bytes[curPos], " ", byte, sizeof(byte))) != -1)
      {
         curPos += pos;
         
         TrimString(byte);
         
         if (byte[0])
         {
            this.patch[this.len] = StringToInt(byte, 16);
            this.orig[this.len] = LoadFromAddress(this.addr + view_as<Address>(this.len), NumberType_Int8);
            this.len++;
         }
      }
      
      return true;
   }
   
   void Apply()
   {
      for (int i = 0; i < this.len; i++)
         StoreToAddress(this.addr + view_as<Address>(i), this.patch[i], NumberType_Int8);
   }
   
   void Restore()
   {
      for (int i = 0; i < this.len; i++)
         StoreToAddress(this.addr + view_as<Address>(i), this.orig[i], NumberType_Int8);
   }
}

mem_patch g_isExclusiveToLobbyConnectionsPatch;
mem_patch g_replyChallengePatch1;
mem_patch g_replyChallengePatch2;
mem_patch g_replyChallengePatch3;
mem_patch g_replyChallengePatch4;

public void OnPluginStart()
{
   GameData conf = new GameData("nolobbyreservation.games");
   
   if (conf == null)
      SetFailState("Failed to load nolobbyreservation gamedata");

   Address isExclusiveToLobbyConnectionsAddr = conf.GetAddress("CBaseServer::IsExclusiveToLobbyConnections");

   if (!isExclusiveToLobbyConnectionsAddr)
      SetFailState("Failed to load CBaseServer::IsExclusiveToLobbyConnections signature from gamedata");

   Address replyChallengeAddr = conf.GetAddress("CBaseServer::ReplyChallenge");

   if (!replyChallengeAddr)
      SetFailState("Failed to load CBaseServer::ReplyChallenge signature from gamedata");

   g_isExclusiveToLobbyConnectionsPatch.Init(conf, "CBaseServer::IsExclusiveToLobbyConnections_Patch", isExclusiveToLobbyConnectionsAddr);
   g_replyChallengePatch1.Init(conf, "CBaseServer::ReplyChallenge_Patch1", replyChallengeAddr);
   g_replyChallengePatch2.Init(conf, "CBaseServer::ReplyChallenge_Patch2", replyChallengeAddr);
   g_replyChallengePatch3.Init(conf, "CBaseServer::ReplyChallenge_Patch3", replyChallengeAddr);
   g_replyChallengePatch4.Init(conf, "CBaseServer::ReplyChallenge_Patch4", replyChallengeAddr);

   g_isExclusiveToLobbyConnectionsPatch.Apply();
   g_replyChallengePatch1.Apply();
   g_replyChallengePatch2.Apply();
   g_replyChallengePatch3.Apply();
   g_replyChallengePatch4.Apply();

   delete conf;
}

public void OnPluginEnd()
{
   g_isExclusiveToLobbyConnectionsPatch.Restore();
   g_replyChallengePatch1.Restore();
   g_replyChallengePatch2.Restore();
   g_replyChallengePatch3.Restore();
   g_replyChallengePatch4.Restore();
}

Требования
Удалить LobbySessionFixer, если он у вас установлен
Установка
Скопилировать файл "sp" локально
Разместить файлы по каталогам
Файл расширения txt разместить в каталоге sourcemod\gamedata

Источник:
https://github.com/vanz666/NoLobbyReservation
Вложения
NoLobbyReservation-master.7z
new
(1.53 KiB) Еще не загружено
NoLobbyReservation-master.zip
old
(2.12 KiB) Загружено 76 раз

Аватар пользователя
Longipongeoos
Сообщений: 191
Зарегистрирован: 12 апр 2017, 16:50

Re: No Lobby Reservation 0.0.2

Сообщение Longipongeoos » 16 апр 2024, 13:27

Обновленный файл

Код: Выбрать все

nolobbyreservation.games

Кодировка UTF-8

Код: Выбрать все

"Games"
{
   "csgo"
   {
      "Keys"
      {
         "CBaseServer::IsExclusiveToLobbyConnections_Patch"
         {
            "windows" "30 C0"
            "linux" "30 C0"
         }
      
         "CBaseServer::ReplyChallenge_Patch1"
         {
            "windows" "30 C0"
         }
      
         "CBaseServer::ReplyChallenge_Patch2"
         {
            "windows" "30 C0"
         }
         
         "CBaseServer::ReplyChallenge_Patch3"
         {
            "windows" "00"
            "linux" "00 00 00 00"
         }
         
         "CBaseServer::ReplyChallenge_Patch4"
         {
            "windows" "00"
            "linux" "00 00 00 00"
         }

      }

      "Offsets"
      {
         "CBaseServer::IsExclusiveToLobbyConnections_Patch"
         {
            "windows" "7"
            "linux" "19"
         }
      
         "CBaseServer::ReplyChallenge_Patch1"
         {
            "windows" "994"
         }
      
         "CBaseServer::ReplyChallenge_Patch2"
         {
            "windows" "1507"
         }
      
         "CBaseServer::ReplyChallenge_Patch3"
         {
            "windows" "1613"
            "linux" "1001"
         }
         
         "CBaseServer::ReplyChallenge_Patch4"
         {
            "windows" "1627"
            "linux" "1009"
         }
      }

      "Addresses"
      {
         "CBaseServer::IsExclusiveToLobbyConnections"
         {
            "windows"
            {
               "signature" "CBaseServer::IsExclusiveToLobbyConnections"
            }
            "linux"
            {
               "signature" "CBaseServer::IsExclusiveToLobbyConnections"
            }
         }
      
         "CBaseServer::ReplyChallenge"
         {
            "windows"
            {
               "signature" "CBaseServer::ReplyChallenge"
            }
            "linux"
            {
               "signature" "CBaseServer::ReplyChallenge"
            }
         }
      }

      "Signatures"
      {
         "CBaseServer::IsExclusiveToLobbyConnections"
         {
            "library" "engine"
            "windows" "\x8B\x01\x8B\x40\x5C\xFF\xD0\x84\xC0\x75\x2A\xC3"
            "linux" "\x55\x89\xE5\x83\xEC\x18\x8B\x45\x08\x8B\x10\x89\x04\x24\xFF\x52\x60\x31\xD2"
         }

         "CBaseServer::ReplyChallenge"
         {
            "library" "engine"
            "windows" "\x55\x8B\xEC\x83\xE4\xF8\x81\xEC\x8C\x04\x00\x00"
            "linux" "\x55\x89\xE5\x57\x56\x53\x81\xEC\x8C\x06\x00\x00\x8B\x5D\x08"
         }
      }
   }
}

Файл расширения txt разместить в каталоге sourcemod\gamedata
Вложения
NoLobbyReservation-master.7z
(1.53 KiB) Еще не загружено

Аватар пользователя
Longipongeoos
Сообщений: 191
Зарегистрирован: 12 апр 2017, 16:50

Re: No Lobby Reservation 0.0.2

Сообщение Longipongeoos » Вчера, 09:19

Обновленный файл

Код: Выбрать все

nolobbyreservation.games

Кодировка UTF-8

Код: Выбрать все

"Games"
{
   "csgo"
   {
      "Keys"
      {
         "CBaseServer::IsExclusiveToLobbyConnections_Patch"
         {
            /*
               原始汇编代码 84 C0 test al, al
               更改后为 30 C0 xor al, al
            */
            "windows" "30 C0"
            "linux" "30 C0"
         }
      
         "CBaseServer::ReplyChallenge_Patch1"
         {
            "windows" "30 C0"
         }
      
         "CBaseServer::ReplyChallenge_Patch2"
         {
            "windows" "30 C0"
         }
         
         "CBaseServer::ReplyChallenge_Patch3"
         {
            "windows" "00"
            "linux" "6A 00"
         }
         
         "CBaseServer::ReplyChallenge_Patch4"
         {
            "windows" "00"
            "linux" "6A 00"
         }

         
         "CBaseServer::IsExclusiveToLobbyConnections_Patch_Check"
         {
            "windows" "84 C0"
            "linux" "84 C0"
         }
      
         "CBaseServer::ReplyChallenge_Patch1_Check"
         {
            "windows" "84 C0"
         }
      
         "CBaseServer::ReplyChallenge_Patch2_Check"
         {
            "windows" "84 C0"
         }
         
         "CBaseServer::ReplyChallenge_Patch3_Check"
         {
            "windows" "FF"
            "linux" "6A FF"
         }
         
         "CBaseServer::ReplyChallenge_Patch4_Check"
         {
            "windows" "FF"
            "linux" "6A FF"
         }
      }

      "Offsets"
      {
         "CBaseServer::IsExclusiveToLobbyConnections_Patch"
         {
            /*   linux
               test    al, al
            */
            "windows" "7"
            "linux" "29"
         }
      
         "CBaseServer::ReplyChallenge_Patch1"
         {
            /*
               存在字符串 connect-retry
               汇编代码 test al, al
            */
            "windows" "994"
         }
      
         "CBaseServer::ReplyChallenge_Patch2"
         {
            /*
               存在字符串 public
               汇编代码 test al, al
            */
            "windows" "1507"
         }
      
         "CBaseServer::ReplyChallenge_Patch3"
         {
            /*
               linux LobbyID mov dword ptr [esp+4], 0FFFFFFFFh
               windows LobbyID push 0FFFFFFFFh
            */
            "windows" "1613"
            "linux" "890"
         }
         
         "CBaseServer::ReplyChallenge_Patch4"
         {
            /*
               linux LobbyID mov dword ptr [esp+8], 0FFFFFFFFh
               windows LobbyID push 0FFFFFFFFh
            */
            "windows" "1627"
            "linux" "892"
         }
      }

      "Addresses"
      {
         "CBaseServer::IsExclusiveToLobbyConnections"
         {
            "windows"
            {
               "signature" "CBaseServer::IsExclusiveToLobbyConnections"
            }
            "linux"
            {
               "signature" "CBaseServer::IsExclusiveToLobbyConnections"
            }
         }
      
         "CBaseServer::ReplyChallenge"
         {
            "windows"
            {
               "signature" "CBaseServer::ReplyChallenge"
            }
            "linux"
            {
               "signature" "CBaseServer::ReplyChallenge"
            }
         }
      }

      "Signatures"
      {
         /*   目标函数在此字符串上方
               "Server only accepting connections from game lobby %s %d.\n"
         */
         "CBaseServer::IsExclusiveToLobbyConnections"
         {
            "library" "engine"
            "windows" "\x8B\x01\x8B\x40\x5C\xFF\xD0\x84\xC0\x75\x2A\xC3"
            "linux" "\x55\x89\xE5\x83\xEC\x08\x8B\x45\x08\x8B\x10\x8B\x52\x60\x81\xFA\x2A\x2A\x2A\x2A\x75\x2A\x0F\xB6\x80\x88\x02\x00\x00"
         }
         /*   目标函数存在字符串
            "Server running with server_is_unavailable, ignoring challenge from %s\n"
          */
         "CBaseServer::ReplyChallenge"
         {
            "library" "engine"
            "windows" "\x55\x8B\xEC\x83\xE4\xF8\x81\xEC\x8C\x04\x00\x00"
            "linux" "\x55\x89\xE5\x57\x56\x53\x81\xEC\x74\x04\x00\x00"
         }
      }
   }
}

Файл расширения txt разместить в каталоге sourcemod\gamedata
Вложения
nolobbyreservation.games.zip
(983 байт) Еще не загружено


Вернуться в «SourceMod»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 1 гость