Просмотр полной версии : [FS] Visit Players | Подсчет посещений игроков
Довольно легкий 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-Подсчёт-размера-форматируемой-строки)
Он будет подсчитывать сколько игроков зашло с момента запуска сервера, а не сколько человек на данный момент онлайн.
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;
}
А как способ "защиты" от перезахода одного и того же игрока: сохраняем имя в какой-нибудь таблице в бд. Во время запуска мода эту таблицу чистить. А дальше при заходе игрока искать это имя в бд, если есть, то ничего не делаем, а если имени нет, то увеличиваем в переменной количество вошедших.
Еще про дисконект забыл
- - - Добавлено - - -
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:
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot