PDA

Просмотр полной версии : [FS] Visit Players | Подсчет посещений игроков



Timon
22.03.2016, 16:32
Довольно легкий FS, возможно пригодится кому.


http://i.imgur.com/0aGow1h.png

- Скрипт подсчитывает сколько игроков посетило сервер с момента его запуска. (Не наибольший онлайн!)
- Так же игроки уже посетившие сервер, при следующем коннекте (с условием что перезагрузки сервера не было) не берутся в подсчет.

- Изменение цвета цифр когда кол-во игроков доходит до определенного числа. (смотреть ниже)
- Оповещение отправляется через 2 секунды после коннекта.

http://i.imgur.com/gM2GtS8.png


Если же вы захотели изменить цвета под себя, зайдите в FS, и найдите там вот такие строки:



#define Players_0_9 "{EE204D}" // Цвет от 0 до 9 игроков
#define Players_10_49 "{00E649}" // Цвет от 10 до 49 игроков
#define Players_50_99 "{0FFF17}" // Цвет от 50 до 99 игроков
#define Players_100_499 "{FEFE22}" // Цвет от 100 до 499 игроков

#define Players_500_Other9000 "{FF2400}"
// Цвет от 500 до Over9000 игроков

Автор данного FS Я - Timon.

Если будут вопросы по установке или понадобятся мои услуги вот контакты:

[В]контакте: Клац » (vk.com/appl15)
Skype: dima_prihodko (Ава аналогичная вконтакте)

http://i.imgur.com/Yu0y3tw.png

Yandex Disk Download: Клац » (https://yadi.sk/d/cWIuO2NhqPEsS)

Salik_Davince
22.03.2016, 18:26
зачем такой большой размер [stringo]?

new stringo[144];
format(stringo, sizeof(stringo), "~ С момента запуска, сервер посетило %s%d{FF7F00} игроков ~", colormes, TOTALPlayers);
SendClientMessage(playerid, 0xFF7F00FF, stringo);

когда можно по проще, и редактировать в любой нужный момент не займет труда

static const
visit_msg[] = "~ С момента запуска, сервер посетило %s%d{FF7F00} игроков ~";
new
visit_string[ sizeof(visit_msg) - (2*2) + 9 + 5 ];

format(visit_string, sizeof(visit_string), visit_msg, colormes, TOTALPlayers);
SendClientMessage(playerid, 0xFF7F00FF, visit_string);

Тут как я понял идет подсчет посетивших игроков, переподключение не будет идти + в переменную 'TOTALPlayers', так в чем разница от нажатия игроком TAB'a и просмотра сколько игроков играет на данный момент.

if(ImHere[playerid] == 0)
{
ImHere[playerid] = 1;
TOTALPlayers++;
}
Вам стоило бы почитать тему Перехват Функций (http://pro-pawn.ru/showthread.php?10447-Перехват-функций-часть-1-основы)
и Подсчёт размера форматируемой строки (http://pro-pawn.ru/showthread.php?13388-Подсчёт-размера-форматируемой-строки)

Timon
22.03.2016, 19:10
Он будет подсчитывать сколько игроков зашло с момента запуска сервера, а не сколько человек на данный момент онлайн.

Desulaid
22.03.2016, 19:12
Не знаю как себя этот код поведет, но РАБОТАТЬ ДОЛЖЕН!!1!


new server_players;

public OnPlayerConnect(playerid)
{
++server_players;
static const fmt_str[] = !"С момента запуска сервера, вы %i-й зашедший игрок!";
new str[sizeof(fmt_str)-2+6]; // а вдруг у вас там зайдет 999999 игроков?
new cout[6+1];
str = !"С момента запуска сервера, вы ";
valstr(cout, server_players, true);
strcat(str, cout);
strcat(str, !"-й зашедший игрок!");
SendClientMessage(playerid, 0xFF7F00FF, str);
return 1;
}

А как способ "защиты" от перезахода одного и того же игрока: сохраняем имя в какой-нибудь таблице в бд. Во время запуска мода эту таблицу чистить. А дальше при заходе игрока искать это имя в бд, если есть, то ничего не делаем, а если имени нет, то увеличиваем в переменной количество вошедших.

m1n1vv
22.03.2016, 20:37
Еще про дисконект забыл

- - - Добавлено - - -


new str[sizeof(fmt_str)-2*2+6];

А зачем 2*2? Там же только 1 раз %i.

Desulaid
22.03.2016, 22:33
Еще про дисконект забыл

- - - Добавлено - - -



А зачем 2*2? Там же только 1 раз %i.

Угу, у меня это осталось от первого варианта. Чет внимательностью я никогда не был наделен :(

Seregamil
24.03.2016, 21:25
Вопрос на миллион: зачем выкладывать то, чего тьма тьмущая в сети?


А как способ "защиты" от перезахода одного и того же игрока: сохраняем имя в какой-нибудь таблице в бд. Во время запуска мода эту таблицу чистить. А дальше при заходе игрока искать это имя в бд, если есть, то ничего не делаем, а если имени нет, то увеличиваем в переменной количество вошедших.

Да пожалуйста.

// by Seregamil

#include <a_samp>

#define VISITORS_DB "visitors.db"

new DB: visitorsDB ;
new DBResult: visitorsResult ;

new countVisitors = 0 ;

main(){}

public OnGameModeInit() {
if( fexist( VISITORS_DB ) ) fremove( VISITORS_DB ); // remove database file

visitorsDB = db_open( VISITORS_DB ); // create database file
db_query( visitorsDB, "CREATE TABLE IF NOT EXISTS VISITORS(USERNAME varchar)"); // create table

return true;
}

public OnPlayerConnect(playerid) {
new name[ MAX_PLAYER_NAME + 1 ] ;
GetPlayerName( playerid, name, MAX_PLAYER_NAME + 1 ); // get user name

new str[ 43 + MAX_PLAYER_NAME ] ;
format( str, sizeof str, "SELECT * FROM VISITORS WHERE USERNAME = '%s'", name ); // create query for base

visitorsResult = db_query( visitorsDB, str );
if( !db_num_rows( visitorsResult ) ) { // false
countVisitors ++ ;

format( str, sizeof str, "INSERT INTO VISITORS(USERNAME)VALUES('%s')" , name );
db_query( visitorsDB, str );

format( str, sizeof str, "Вы %i мудак, зашедший на сервак.", countVisitors );
SendClientMessage( playerid, -1, str );
}
db_free_result( visitorsResult );
return true;
}

Prolific
24.03.2016, 22:38
format( str, sizeof str, "Вы %i мудак, зашедший на сервак.", countVisitors );

Как же правдиво) :grin: