Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

City Connect Announcer 1.0

small
сообщение 23.9.2016, 11:58
Сообщение #1
Стаж: 7 лет 6 месяцев

Сообщений: 10
Благодарностей: 2
Полезность: 0

City Connect Announcer 1.0
Автор: xPaw

Описания плагина:
Плагин выводит данные игрока во время подключения к серверу.
Cкриншот


Код:
#include <amxmodx>
#include <amxmisc>
#include <geoipse>
#include <geoip>
#include <colorchat>

// http://geolite.maxmind.com/download/geoip/...LiteCity.dat.gz

new Float:gflLongitude[33];
new Float:gflLatitude[33];
new bool:gIsUserConnected[33];
new gMaxplayers;

public plugin_init() {
register_plugin( "City Connect Announcer", "1.0", "xPaw" );

gMaxplayers = get_maxplayers( );
}

public client_putinserver( id ) {
gIsUserConnected[id] = true;

if( is_user_bot( id ) ) {
gIsUserConnected[id] = false; // lets make less loops in distance counting xD

return PLUGIN_CONTINUE;
}

new szIP[32], szCountry[46], szCity[46], szName[32];
get_user_name(id, szName, 31);
get_user_ip( id, szIP, 31, 1 );

geoip_country( szIP, szCountry );
geoip_city( szIP, szCity );

gflLatitude[id] = geoip_latitude( szIP );
gflLongitude[id] = geoip_longitude( szIP );

if( equal(szCountry, "error") ) {
if( !contain(szIP, "192.168.") || !contain(szIP, "10. ") || !contain(szIP, "172.") || equal(szIP, "127.0.0.1") )
szCountry = "LAN";

else if( equal(szIP, "loopback") )
szCountry = "LAN Owner";

else
szCountry = "Unknown Country";
}

// modifications:
if( get_user_flags(id) & ADMIN_KICK ) {
if( !equal( szCity, "error" ) )
ColorChat( 0, BLUE, "^x01* Admin^x04 %s^x01 (%s) has connected from^x03 %s^x01,^x03 %s^x01.", szName, szIP, szCity, szCountry );
else
ColorChat( 0, BLUE, "^x01* Admin^x04 %s^x01 (%s) has connected from^x03 %s^x01.", szName, szIP, szCountry );
} else {
if( !equal( szCity, "error" ) )
ColorChat( 0, BLUE, "^x01*^x04 %s^x01 (%s) has connected from^x03 %s^x01,^x03 %s^x01.", szName, szIP, szCity, szCountry );
else
ColorChat( 0, BLUE, "^x01*^x04 %s^x01 (%s) has connected from^x03 %s^x01.", szName, szIP, szCountry );
}
// end of modifications

if( gflLongitude[id] != 0.0 && gflLatitude[id] != 0.0 )
set_task( 0.2, "PrintDistance", id ); // gay fix.

return PLUGIN_CONTINUE;
}

public PrintDistance( id ) {
static i, szName[ 32 ];
get_user_name( id, szName, 31 );

for( i = 1; i <= gMaxplayers; i++ )
if( gIsUserConnected[i] && id != i )
if( gflLongitude[i] != 0.0 && gflLatitude[i] != 0.0 )
ColorChat( i, RED, "^x01*^x04 %s^x01 is about^x03 %d^x01 kilometers far away from you.", szName, floatround( geoip_distance( gflLatitude[id], gflLatitude[i], gflLongitude[id], gflLongitude[i] ) ) );
}

public client_disconnect( id ) {
gIsUserConnected[id] = false;

if( is_user_bot( id ) )
return PLUGIN_CONTINUE;

new szIP[32], szCountry[46], szCity[46], szName[32];
get_user_name(id, szName, 31);
get_user_ip( id, szIP, 31, 1 );
geoip_country( szIP, szCountry );
geoip_city( szIP, szCity );

if( equal(szCountry, "error") ) {
if( !contain(szIP, "192.168.") || !contain(szIP, "10. ") || !contain(szIP, "172.") || equal(szIP, "127.0.0.1") )
szCountry = "LAN";

else if( equal(szIP, "loopback") )
szCountry = "LAN Owner";

else
szCountry = "Unknown Country";
}

if( get_user_flags(id) & ADMIN_KICK ) {
if( !equal( szCity, "error" ) )
ColorChat( 0, BLUE, "^x01* Admin^x04 %s^x01 has disconnected from^x03 %s^x01,^x03 %s^x01.", szName, szCity, szCountry );
else
ColorChat( 0, BLUE, "^x01* Admin^x04 %s^x01 has disconnected from^x03 %s^x01.", szName, szCountry );
} else {
if( !equal( szCity, "error" ) )
ColorChat( 0, BLUE, "^x01*^x04 %s^x01 has disconnected from^x03 %s^x01,^x03 %s^x01.", szName, szCity, szCountry );
else
ColorChat( 0, BLUE, "^x01*^x04 %s^x01 has disconnected from^x03 %s^x01.", szName, szCountry );
}

return PLUGIN_CONTINUE;
}

stock Float:geoip_distance( Float:flLat1, Float:flLat2, Float:flLon1, Float:flLon2 )
return ( 6371.0 * floatacos( floatsin( flLat1 / 57.3 ) * floatsin( flLat2 / 57.3 ) + floatcos( flLat1 / 57.3 ) * floatcos( flLat2 / 57.3 ) * floatcos( flLon2 / 57.3 - flLon1 / 57.3 ), 0 ) )
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя MrTsar
сообщение 25.9.2016, 13:41
Сообщение #2


Стаж: 11 лет

Сообщений: 206
Благодарностей: 7
Полезность: < 0

small, Еще бы город определяло.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 25.9.2016, 13:57
Сообщение #3


Стаж: 9 лет

Сообщений: 2234
Благодарностей: 1341
Полезность: 836

Несколько вопросов:
1. Каждый раз при коннекте игрока дергает файл GeoIP.dat/GeoIPCity.dat или один раз и держит в памяти?
2. Если запилить определения по GeoIPCity.dat - там только город или страну и город определяет ?


[CS 1.6 Public] 78.152.169.100:27014
[CS 1.6 DM FFA] 78.152.169.100:27015
[CS 1.6 DM AIM] 78.152.169.100:27017
[Half-Life DM FFA] 78.152.169.100:27016
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Metal Messiah
сообщение 25.9.2016, 14:13
Сообщение #4


Иконка группы

Стаж: 11 лет

Сообщений: 2399
Благодарностей: 1462
Полезность: 755

HostGame.cf
Город лучше не определять - очень много неточностей в базе. Очень. Проверено.


Полезные публикации - ссылки у меня в профиле. Ссылка на плагин против спама на сервере StopServerSpam там же.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: