Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Connect player and country
Beelzebub Дата: Понедельник, 08.10.2012, 02:08:44 | Сообщение # 1
Сообщений: 202
Репутация: 13 [ +/- ]
Описание:
Показывает какой игрок подключается к серверу его страну и стим айди. Плагин без кваров.
Можно использовать в качестве урока.

Гости не могут скачивать файлы


Сообщение отредактировал Beelzebub - Понедельник, 08.10.2012, 16:02:17
 
_wS_ Дата: Понедельник, 08.10.2012, 02:55:22 | Сообщение # 2
Quote (Beelzebub)
Можно использовать в качестве урока.

-> nea (слишком много ошибок, хоть и кода мало)

Вот твой код:

Code
public bool:OnClientConnect(id)
{
     decl String:country[45];
     decl String:name[MAX_NAME_LENGTH];
     decl String:ip[64];
         
     GetClientName(id, name, sizeof(name));
   
     GetClientIP(id, ip, sizeof(ip));
     GeoipCountry(ip, country, sizeof(country));
         
     if (GetUserAdmin(id) == INVALID_ADMIN_ID)
     {
         PrintToChatAll("Игрок подключается %s из %s", name, country);
     }
     return true;
}

Функция "GetUserAdmin" бесполезна в событии "OnClientConnect", всегда будет INVALID_ADMIN_ID.
Использовать нужно в "OnClientPostAdminCheck".

Если GetUserAdmin(id) != INVALID_ADMIN_ID, то код выше становится бесполезным.
Его нужно использовать внутри условия.

Ты готовишь переменные с помощью decl, но не обезопасил их. Все эти три функции (GetClientName, GetClientIP, GeoipCountry), или какая-то из них - могут не сработать, и получится ты попробуешь вывести значение переменной, хотя в ней нет никакого значения - так и сервер упасть может.

grust
 
Beelzebub Дата: Понедельник, 08.10.2012, 11:35:35 | Сообщение # 3
Сообщений: 202
Репутация: 13 [ +/- ]
Понятно :) Спасибо за урок.

так будет правильно?

Code
public bool:OnClientConnect(client)
{
         decl String:country[45];
         decl String:name[MAX_NAME_LENGTH];
         decl String:ip[64];
         
         GetClientName(client, name, sizeof(name));
         
         GetClientIP(client, ip, sizeof(ip));
         GeoipCountry(ip, country, sizeof(country));
         
         PrintToChatAll("Игрок подключается %s из %s", name, country);
   
         return true;
}
 
duxa Дата: Понедельник, 08.10.2012, 15:07:57 | Сообщение # 4
Сообщений: 1
Репутация: 0 [ +/- ]
Могу предложить такой вариант:
Code

public bool:OnClientConnect(client)  
{  
  decl    String:szCountry[45],
    String:szIP[16];

  if(GetClientIP(client, szIP, sizeof(szIP)) && GeoipCountry(szIP, szCountry, sizeof(szCountry)))
  {
   PrintToChatAll("Игрок %N подключается из %s", client, szCountry);  
  }
  return true;
}
 
Beelzebub Дата: Понедельник, 08.10.2012, 16:00:01 | Сообщение # 5
Сообщений: 202
Репутация: 13 [ +/- ]
Я уже свой вариант сделал :) Новый.
 
Vadimreal Дата: Суббота, 21.03.2015, 17:25:02 | Сообщение # 6
Сообщений: 13
Репутация: 0 [ +/- ]
А как сюда добавить еще Ip адресс?
 
BarD Дата: Воскресенье, 22.03.2015, 16:24:28 | Сообщение # 7
Сообщений: 943
Репутация: 137 [ +/- ]
Код
public bool:OnClientConnect(client)   
{   
   decl    String:szCountry[45],  
     String:szIP[16];  

   if(GetClientIP(client, szIP, sizeof(szIP)) && GeoipCountry(szIP, szCountry, sizeof(szCountry)))  
   {  
    PrintToChatAll("Игрок %N подключается из %s (IP: %s)", client, szCountry, szIP);   
   }  
   return true;  
}
 
Vadim0890 Дата: Понедельник, 23.09.2024, 11:39:37 | Сообщение # 8
Сообщений: 29
Репутация: 0 [ +/- ]
Приветствую, пожет кто чуть поправить код или подсказать как сделать, хотелось бы, чтобы присало в чате при подключении и отключении игроков [{white}Страна:Россия] вместо [Страна:Russian Federation].

Код
#pragma semicolon 1

#include <sourcemod>
#include <morecolors>
#include <geoip>

#define VERSION "1.0"

public Plugin:myinfo =
{
    name = "Connect Player",
    author = "Beelzebub",
    description = "Connect player to server",
    version = VERSION,
};

public OnPluginStart()
{
    CreateConVar("sm_connect", VERSION, "Connect Version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY);
    HookEvent("player_disconnect", event_PlayerDisconnect, EventHookMode_Pre);    
}

public OnClientPostAdminCheck(client)
{     
    if (!IsFakeClient(client))
    {
        decl String:steamid[32],String:clientname[24];
        decl String:country[45];
        decl String:ip[64];
  
        GetClientName(client, clientname, sizeof(clientname));
        GetClientIP(client, ip, sizeof(ip));
        GeoipCountry(ip, country, sizeof(country));
        GetClientAuthString(client,steamid,sizeof(steamid));

        CPrintToChatAll("{white}Игрок {yellow}%s {lime}- {aqua}Вступает в игру {lime}[{white}Страна:{fullred}%s{lime}]", clientname, country);
    }
}

public Action:event_PlayerDisconnect(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if(!IsFakeClient(client))
    {
        new String:clientname[24];
        GetClientName(client, clientname, sizeof(clientname));
        decl String:ip[64];
        GetClientIP(client, ip, sizeof(ip));
        decl String:country[45];
        GeoipCountry(ip, country, sizeof(country));
        new String:steamid[35];
        GetClientAuthString(client,steamid,sizeof(steamid));
  
        CPrintToChatAll("{white}Игрок {yellow}%s {lime}- {dimgray}Отключился {lime}[{white}Страна:{fullred}%s{lime}]", clientname, country);
    }
    return Plugin_Continue;
}
 
_wS_ Дата: Понедельник, 23.09.2024, 16:52:58 | Сообщение # 9
Код
// Перед CPrintToChatAll:
if (strcmp(country, "Russian Federation") == 0) {
    strcopy(country, sizeof(country), "Россия");
}
 
Vadim0890 Дата: Понедельник, 23.09.2024, 18:11:33 | Сообщение # 10
Сообщений: 29
Репутация: 0 [ +/- ]
да пока играл заметил ошибку в логах, и ещё текст Игрок Вступает в игру появляется в чате когда игрок уже на сервере, а не когда начал заходить

и ошибка
L 09/23/2024 - 22:32:21: [SM] Blaming: Connect_Player.smx
L 09/23/2024 - 22:32:21: [SM] Call stack trace:
L 09/23/2024 - 22:32:21: [SM] [0] IsFakeClient
L 09/23/2024 - 22:32:21: [SM] [1] Line 43, C:\Users\Vadim\Desktop\Compile\scripting\Connect_Player.sp::event_PlayerDisconnect
 
Vadim0890 Дата: Понедельник, 23.09.2024, 18:42:46 | Сообщение # 11
Сообщений: 29
Репутация: 0 [ +/- ]
вот полная ошибка

L 09/23/2024 - 23:34:49: SourceMod error session started
L 09/23/2024 - 23:34:49: Info (map "$2000$") (file "/home/container/cstrike/addons/sourcemod/logs/errors_20240923.log")
L 09/23/2024 - 23:34:49: [SM] Exception reported: Client index 0 is invalid
L 09/23/2024 - 23:34:49: [SM] Blaming: Connect_Player.smx
L 09/23/2024 - 23:34:49: [SM] Call stack trace:
L 09/23/2024 - 23:34:49: [SM] [0] IsFakeClient
L 09/23/2024 - 23:34:49: [SM] [1] Line 43, C:\Users\Vadim\Desktop\Compile\scripting\Connect_Player.sp::event_PlayerDisconnect
 
_wS_ Дата: Понедельник, 23.09.2024, 20:30:33 | Сообщение # 12
В event_PlayerDisconnect заменить if(!IsFakeClient(client)) на if (client && !IsFakeClient(client)).
 
Vadim0890 Дата: Вторник, 24.09.2024, 07:42:04 | Сообщение # 13
Сообщений: 29
Репутация: 0 [ +/- ]
Ошибка пропала, но инфа выводится в чат когда игрок вступает в игру - он уже на сервере...

Гости не могут скачивать файлы
 
Vadim0890 Дата: Вторник, 24.09.2024, 13:25:40 | Сообщение # 14
Сообщений: 29
Репутация: 0 [ +/- ]
_wS_, не подскажешь как исправить это ? игрок по сути уже на сервере, а пишет вступает в игру
 
  • Страница 1 из 1
  • 1
Поиск: