Скриптинг курилка

Quote:
Originally Posted by gensek4
Посмотреть сообщение
Хорошо, это выдает общее время онлайна за эти дни. А возможно как-то вывести отдельно время за каждый из этих дней (получить в результате запроса 7 строк, с 3 полями: user, online_time, и, например, date_game - который указывает на конкретную дату в формате, например %d.%m.%Y)?

Или, если отфильтровать запрос по средствам MySQL нельзя, то как его форматировать в Pawn?
Код:
SELECT
    user,
    SUM(left - enter) as online_time,
    FROM_UNIXTIME(left, '%d.%m.%Y') as date_game
FROM tablename
WHERE left > (UNIX_TIMESTAMP() - 7 * 86400)
GROUP BY date_game, user
Не уверен только на счёт группировки. Не помню как она группирует. По обоим полям сразу или сперва по date_game, а затем по user. Если второй вариант то придётся маленько допилить код, а точнее, "склеить" пользователя и дату и сгруппировать по новому "склеиному" полю.
Reply

Если не нужна подробная статистика каждой сессии, а нужна статистика лишь по дням, то не проще ли по дням эту статистику и вести?

Как я отвечал на другом форуме, можно создать таблицу, по типу:
PHP код:
id account_id date online_uptime 
Далее при авторизации записывать текущее значение gettime() в переменную игрока, а после, например, раз в 10 минут + при выходе делать запрос в базу на поиск записи статистики игрока с текущей датой
PHP код:
SELECT id FROM table WHERE account_id = %AND date CURDATE() LIMIT 1 
Если строка найдена - обновляем данные:
PHP код:
UPDATE table SET online_uptime online_uptime+/*gettime()-время_из_переменной*/ WHERE id /*возвращённый_ID*/
//И обнуляем время переменной/перезаписываем текущим gettime(), дабы начать новый "отсчёт" 
Ну а если не найдена, то просто создаём новую запись (и если это случилось в момент обновления по таймеру, а не при выходе, то можно записать ID создавшейся строки, дабы в следующий раз не делать SELECT-запрос, а напрямую обновить строку):
PHP код:
INSERT INTO table SET account_id = %donline_uptime=/*gettime()-время_из_переменной*/date CURDATE() 
Теперь чтоб посмотреть записи за последнюю неделю, достаточно сделать такое условие выборки:
PHP код:
SELECT FROM table WHERE date >= DATE_SUB(CURDATE(), INTERVAL 7 day
Reply

Quote:
Originally Posted by Romz
Посмотреть сообщение
Y_Less вернулся на пост бета тестера.
Вернулся? Он им разве был?

Quote:
Originally Posted by Resers
Посмотреть сообщение
потому что в 30+ лет ковырять игру десятилетней давности не очень-то может быть и весело
Очень даже весело.
Reply

Quote:
Originally Posted by OKStyle
Посмотреть сообщение
Очень даже весело.
+ Я вот Вангеры ковыряю
Reply

Здравствуйте
У меня появилась идея создать функцию, но непростую, исходя из функции GieveMoney(playerid, -1/1)
Можно ли сделать такую вот функцию, с помощью pawn?
К примеру, я хочу чтобы у меня выдавался уровень, ставился уровень, уменьшался уровень с одной и той же функцией
Например:
LevelPlayer(playerid, +1)
LevelPlayer(playerid, -1)
LevelPlayer(playerid, 1) или LevelPlayer(playerid, =1)

И как эта процедура вся называется в программировании?
Reply

Такие функции называются переменными
PlayerLevel[playerid] += 1;
PlayerLevel[playerid] -= 1;
PlayerLevel[playerid] = 1;
Вообще, обычно в программировании применяется практика делать 3 разных функций, а не объединять всё в одну
Reply

Вопрос в том, чтобы используя оператор + - или =
Делать с определенными функциями что-то в самой функции
Ладно, распишу
LevelPlayer(playerid, operator var)
{
if(operator == +)
{
INFO[playerid][Level] += var;
}
if(operator == -)
{
INFO[playerid][Level] -= var;
}
if(!operator || operator == =)
}
INFO[playerid][Level] = var;
}
}
Такой код выдаст ошибку
Обязательно ли перегружать операторы?
Может есть какой-то другой способ?
Reply

Как выше сказали, в программировании принято создавать по функции на каждое действие, а не объединять всё в одну. Как минимум, потому что код становится более понятным.

А вообще, можно просто сделать так:
PHP код:
LevelPlayer(playeridvaluebool:write false)
{
    if(
write == true)
        
INFO[playerid][Level] = var;
    else
        
INFO[playerid][Level] += var;
    return 
1;

Хотя я всё равно сделал бы 2 разные функции, вместо одной, чтоб не приходилось выискивать наличие "true" для того, чтоб понять, что именно происходит в конкретном участке кода.

А то, что хочешь сделать ты, вряд ли получится нормально реализовать. По крайней мере, сомневаюсь, что затраченные усилия будут стоить того.
Reply

А я хочу постараться реализовать, хочу сделать что-то с переменной зразу с функции
Может есть такая какая-то мыслишка?
Reply

Всё выше сказанное касательно отдельных функций это гораздо более эффективный и логичный вариант, но если есть чисто спортивный интерес это реализовать хоть каким-то путём, то...

Вариант с передачей строки:
PHP Code:
#define VALUE_GIVEN    1 //Вернёт 1, если прибавит значение
#define VALUE_SET      0 //Вернёт 0, если установит значение
#define VALUE_TAKEN   -1 //Вернёт -1, если отнимет значение
MakePlayerLevel(playerid, const level[])
{
    new 
lvl strval(level);
    if(
level[0] == '+')
    {
        
INFO[playerid][Level] += lvl;
        return 
VALUE_GIVEN;
    }
    else if(
level[0] == '-')
    {
        
INFO[playerid][Level] += lvl//Именно +, т.к. lvl уже будет иметь в себе отрицательное значение, возвращенное strval'ом
        
return VALUE_TAKEN;
    }
    
//else
    
INFO[playerid][Level] = lvl;
    return 
VALUE_SET;

Использование:
PHP Code:
MakePlayerLevel(playerid"+2"); //Добавит к level'у 2
MakePlayerLevel(playerid"-1"); //Отнимет от level'а 1
MakePlayerLevel(playerid"5"); //Установит level на 5 
Reply

Ну, это понятно как-бы, но я хочу что-то более некостыльное, такое возможно?
без строк
Reply

pawn Code:
LevelPlayer(playerid, var = 0)
{
    if(!var) INFO[playerid][Level] = var;
    else INFO[playerid][Level] += var;
}
А чем тебя не устраивает этот вариант? Если параметра нет, то сбрасывается на дефолтное (в данном случае 0), если есть, то юзать можно в + и в -: LevelPlayer(playerid, 1) или LevelPlayer(playerid, -1)
Reply

Я так хочу, это реально сделать? Если нет, то можете ответить конструктивно, почему нет? Хочу узнать от Вас больше)
SetValue(playerid, +1)
{
Player[playerid][Int] += 1;
}
SetValue(playerid, -1)
{
Player[playerid][Int] -= 1;
}
SetValue(playerid, 1)
{
Player[playerid][Int] = 1;
}
Reply

PHP Code:
Player[playerid][Int] += 1;//Прибавить значение переменной
Player[playerid][Int] -= 1;//Убавить значение переменной
SetValue(playeridPlayer[playerid][Int]);//Установить значение из переменной 
Это ты хочешь?
Reply

Quote:
Originally Posted by jakebat
View Post
Я так хочу, это реально сделать? Если нет, то можете ответить конструктивно, почему нет? Хочу узнать от Вас больше)
SetValue(playerid, +1)
{
Player[playerid][Int] += 1;
}
SetValue(playerid, -1)
{
Player[playerid][Int] -= 1;
}
SetValue(playerid, 1)
{
Player[playerid][Int] = 1;
}
Потому что ни один из существующих языков программирования так не позволяет) Функции могут принимать только переменные или значения.
Reply

Что за жаришка в основном разделе?)
Reply

Quote:
Originally Posted by SCALOlaz
View Post
Что за жаришка в основном разделе?)
калкор появился и начал постить
Reply

Ух, там что твориться, прочел быстренько че да как, как триллер D
Reply

Люди добрые. Помогите кто чем может. Может кто сталкивался:

Рандомно (может не происходить в течении нескольких часов, а может и через минуту после входа)
перестает работать соединение игрок-сервер, т.е. перестают работать ВСЕ стандартные калбеки. Такие как OnPlayerUpdate, OnPlayerKeyStateChange и т.п.
Но , кое-что да работает. OnPlayerText. И всё.
И если я не ошибаюсь, то я не один такой на своём сервере.

Есть только одна гепотеза. Есть несколько TextDraw-баров, состоящих по 50 маленьких. Т.Е. единовременно на экране около 200 текстравов, и до 50 раз в секунду происходит их показ/скрытие.

В какую сторону копать?
Reply

В сторону ошибок в работе с массивами и прекращения выполнения функций по вылету за пределы массивов.
Reply


Forum Jump:


Users browsing this thread: 25 Guest(s)