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) Можно использовать в качестве урока. -> (слишком много ошибок, хоть и кода мало)
Вот твой код:
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), или какая-то из них - могут не сработать, и получится ты попробуешь вывести значение переменной, хотя в ней нет никакого значения - так и сервер упасть может.
|
|
| |
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_, не подскажешь как исправить это ? игрок по сути уже на сервере, а пишет вступает в игру
|
|
| |
|