[CS: Source] GeoLocation

Scarface_slv

Участник
Сообщения
222
Реакции
47
Geo Location

Описание:

Плагин получает данные о местоположение игроков и отображает при подключение или в меню.
---------------------------------------------------------------------------------------
Полученная из сайта информация сохраняется в локальную базу по айпи игрока в виде. 255.255.255.x. Преобразую айпи в числовую форму.
Так как есть ограничения по получению местоположений на сайте...
Как только закончится лимит плагин сутки не сможет получить данные игроков из сайта и будет получать только те которые есть в базе


Настройки:

sm_geoconnect (0/1, по умолчанию: 0)
Отображать местоположение игрока при входе на сервер. Не рекомендуется из за лимита


Команды:

Вызов меню - !geo или sm_geo

Требования:

Socket Extension v3.0 или выше.
 

Вложения

  • hl2 2015-07-01 04-07-36-52.jpg
    hl2 2015-07-01 04-07-36-52.jpg
    30.6 КБ · Просмотры: 248
  • GeoLocation.zip
    12.2 КБ · Просмотры: 87
Последнее редактирование:

R1KO

fuck society
Сообщения
9,460
Реакции
7,799
  • Команда форума
  • #2
Зачем столбцам тип TEXT ? Это очень много для таких данных.

PHP:
new client = GetClientOfUserId(userid);
	if(client < 0) return;
	new target = GetClientOfUserId(g_iTarget[client]);
	if(target < 0) return;
Уже не верно. Если Игрок выйдет он станет 0, а проверка < 0. Достаточно везде проверять != 0 и быстрее и вернее.

PHP:
if (result == INVALID_HANDLE) return;
Лучше делай LogError в таких случаях, будет сразу видно где проблема если что.

PHP:
INSERT INTO
А если ip уже в бд есть, на нем стоит PRIMARY KEY, ошибки не будет случайно? (я знаю что записывается 3 цыфры но все же..)

PHP:
public Menu_SelectInfo(Handle:menu, MenuAction:action, client, option)
{
	if (action == MenuAction_End)
	{
		CloseHandle(menu);
		return;
	}
	if (action == MenuAction_Cancel) // else if и убрать return выше, еще лучше switch
	{
		if (option == MenuCancel_ExitBack) command(client, 0);
	}
	if (action != MenuAction_Select) return; // это тут еще зачем? дальше кода то нет.
}

Есть еще пару моментов но да ладно.
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Зачем столбцам тип TEXT ? Это очень много для таких данных.

PHP:
new client = GetClientOfUserId(userid);
	if(client < 0) return;
	new target = GetClientOfUserId(g_iTarget[client]);
	if(target < 0) return;
Уже не верно. Если Игрок выйдет он станет 0, а проверка < 0. Достаточно везде проверять != 0 и быстрее и вернее.

PHP:
if (result == INVALID_HANDLE) return;
Лучше делай LogError в таких случаях, будет сразу видно где проблема если что.

PHP:
INSERT INTO
А если ip уже в бд есть, на нем стоит PRIMARY KEY, ошибки не будет случайно? (я знаю что записывается 3 цыфры но все же..)

PHP:
public Menu_SelectInfo(Handle:menu, MenuAction:action, client, option)
{
	if (action == MenuAction_End)
	{
		CloseHandle(menu);
		return;
	}
	if (action == MenuAction_Cancel) 
	{
		if (option == MenuCancel_ExitBack) command(client, 0);
	}
	if (action != MenuAction_Select) return; // это тут еще зачем? дальше кода то нет.
}

Есть еще пару моментов но да ладно.

Для чего вообще этот пост? Просто такую писанину видно не так уж и редко. А автору на неё правда похер, так как ему склепать надо так, чтобы лишь бы работало. Тут должны работать модераторы, которые просто обязаны поставить данному плагину какой-нибудь статус вроде "Крайне не рекомендуемый".
 

R1KO

fuck society
Сообщения
9,460
Реакции
7,799
  • Команда форума
  • #4
gibs, может кто-то другой научится на чужих ошибках.
Критических ошибок нет но есть такие что могут вызвать ошибки в логах. Поэтому если они не будут исправлены плагин просто отправится в отклонённые.
 

Scarface_slv

Участник
Сообщения
222
Реакции
47
Тут if(client < 0) я реально тупанул. Задумался наверно. Спасибо
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
gibs, может кто-то другой научится на чужих ошибках.
Критических ошибок нет но есть такие что могут вызвать ошибки в логах. Поэтому если они не будут исправлены плагин просто отправится в отклонённые.

Есть такое понятие как "оптимизация".
Например, если в базу наберётся от 3к записей, то sqlite база при таком проектировании, как продемонстрировал ТС, уже будет подвисать. Да и вообще, народ, ну так же просто загуглить как хранить айпи. В любом первом попавшемся мануале выплывет старинная знаменитая функция INET_AТON(), которая хоть и не входит в стандартный набор sqlite, но написать её на павн дело нескольких минут.
Но в плане геолокации всегда локальное решение лучше, чем запросы на удалённый ресурс. Для особо непонятливых "откуда берутся геобазы" простой ответ - сервера whois можно опросить примерно за неделю по всем диапазонам.
Но обычно принято продавать не только базы, а и решения с высокой скоростью обработки.
Но проблема данного сообщества в том, что в основном его населяют неумелые студенты и школьники.

А вот скопировать идею с АМ с метками approved, unapproved и тд стоит. Если модераторы есть - значит модерируйте.
 

R1KO

fuck society
Сообщения
9,460
Реакции
7,799
  • Команда форума
  • #7
А вот скопировать идею с АМ с метками approved, unapproved и тд стоит. Если модераторы есть - значит модерируйте.
Как бы это уже сделано.

Хотя кажется ты не видел того что там подтверждено. Критических ошибок нет но оптимизацией и не пахнет.
 
Сверху Снизу