SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Русский/Russian

Reply
 
Thread Tools Display Modes
Old 04/11/2018, 04:14 PM   #15811
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,763
Reputation: 142
Default Re: Скриптинг курилка

Quote:
Originally Posted by gensek4 View Post
По поводу статистики онлайна. В теме уже отвечали, что лучше создать таблицу с полями
id
user
enter
left

Но непонятно как с ней взаимодействовать. Например, мне нужно вывести онлайн за 7 дней. Мне необходимо как то склеить все игровые сессии за каждый из этих дней, а после каждый день вывести в диалоге, но как это сделать?
Code:
SELECT user, SUM(left - enter) as online_time FROM tablename WHERE left > (UNIX_TIMESTAMP() - 7 * 86400) GROUP BY user
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 04/11/2018, 10:32 PM   #15812
gensek4
Big Clucker
 
Join Date: Jan 2015
Posts: 147
Reputation: 0
Default Re: Скриптинг курилка

Quote:
Originally Posted by Stepashka View Post
Code:
SELECT user, SUM(left - enter) as online_time FROM tablename WHERE left > (UNIX_TIMESTAMP() - 7 * 86400) GROUP BY user
Хорошо, это выдает общее время онлайна за эти дни. А возможно как-то вывести отдельно время за каждый из этих дней (получить в результате запроса 7 строк, с 3 полями: user, online_time, и, например, date_game - который указывает на конкретную дату в формате, например %d.%m.%Y)?

Или, если отфильтровать запрос по средствам MySQL нельзя, то как его форматировать в Pawn?

Last edited by gensek4; 04/11/2018 at 11:33 PM.
gensek4 is offline   Reply With Quote
Old 05/11/2018, 06:27 AM   #15813
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,763
Reputation: 142
Default Re: Скриптинг курилка

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

Или, если отфильтровать запрос по средствам MySQL нельзя, то как его форматировать в Pawn?
Code:
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. Если второй вариант то придётся маленько допилить код, а точнее, "склеить" пользователя и дату и сгруппировать по новому "склеиному" полю.
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 06/11/2018, 02:19 AM   #15814
Eims
Huge Clucker
 
Eims's Avatar
 
Join Date: May 2013
Location: Восточный Мордор
Posts: 475
Reputation: 19
Default Re: Скриптинг курилка

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

Как я отвечал на другом форуме, можно создать таблицу, по типу:
PHP Code:
id account_id date online_uptime 
Далее при авторизации записывать текущее значение gettime() в переменную игрока, а после, например, раз в 10 минут + при выходе делать запрос в базу на поиск записи статистики игрока с текущей датой
PHP Code:
SELECT id FROM table WHERE account_id = %AND date CURDATE() LIMIT 1 
Если строка найдена - обновляем данные:
PHP Code:
UPDATE table SET online_uptime online_uptime+/*gettime()-время_из_переменной*/ WHERE id /*возвращённый_ID*/

//И обнуляем время переменной/перезаписываем текущим gettime(), дабы начать новый "отсчёт" 
Ну а если не найдена, то просто создаём новую запись (и если это случилось в момент обновления по таймеру, а не при выходе, то можно записать ID создавшейся строки, дабы в следующий раз не делать SELECT-запрос, а напрямую обновить строку):
PHP Code:
INSERT INTO table SET account_id = %donline_uptime=/*gettime()-время_из_переменной*/date CURDATE() 

Теперь чтоб посмотреть записи за последнюю неделю, достаточно сделать такое условие выборки:
PHP Code:
SELECT FROM table WHERE date >= DATE_SUB(CURDATE(), INTERVAL 7 day
__________________
- How many IT Engineers does it take to fix a broken light bulb?
- None, the light bulb works fine in my office, I cannot replicate the issue.
Eims is offline   Reply With Quote
Old 07/11/2018, 02:13 AM   #15815
OKStyle
High-roller
 
OKStyle's Avatar
 
Join Date: May 2008
Location: Russia, Orenburg Money: GTA$ 999,999,999
Posts: 3,125
Reputation: 142
Default Re: Скриптинг курилка

Quote:
Originally Posted by Romz View Post
****** вернулся на пост бета тестера.
Вернулся? Он им разве был?

Quote:
Originally Posted by Resers View Post
потому что в 30+ лет ковырять игру десятилетней давности не очень-то может быть и весело
Очень даже весело.
__________________
O.K.Style™ Laboratory
Kalcor: "... it's makes the game look like it's not GTA. This mod is called San Andreas Multiplayer. It's not a custom game engine which you can script..."
OKStyle is offline   Reply With Quote
Old 07/11/2018, 06:36 AM   #15816
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,763
Reputation: 142
Default Re: Скриптинг курилка

Quote:
Originally Posted by OKStyle View Post
Очень даже весело.
+ Я вот Вангеры ковыряю
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 18/11/2018, 05:13 AM   #15817
jakebat
Big Clucker
 
Join Date: Aug 2013
Posts: 96
Reputation: 2
Default Вопрос для людей с хорошим опытом (Создание функции)

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

И как эта процедура вся называется в программировании?
jakebat is offline   Reply With Quote
Old 18/11/2018, 08:48 AM   #15818
DartfoL
Gangsta
 
DartfoL's Avatar
 
Join Date: Apr 2012
Posts: 770
Reputation: 75
Default Re: Вопрос для людей с хорошим опытом (Создание функции)

Такие функции называются переменными
PlayerLevel[playerid] += 1;
PlayerLevel[playerid] -= 1;
PlayerLevel[playerid] = 1;
Вообще, обычно в программировании применяется практика делать 3 разных функций, а не объединять всё в одну
__________________
DartfoL is offline   Reply With Quote
Old 18/11/2018, 08:55 AM   #15819
jakebat
Big Clucker
 
Join Date: Aug 2013
Posts: 96
Reputation: 2
Default Re: Вопрос для людей с хорошим опытом (Создание функции)

Вопрос в том, чтобы используя оператор + - или =
Делать с определенными функциями что-то в самой функции
Ладно, распишу
LevelPlayer(playerid, operator var)
{
if(operator == +)
{
INFO[playerid][Level] += var;
}
if(operator == -)
{
INFO[playerid][Level] -= var;
}
if(!operator || operator == =)
}
INFO[playerid][Level] = var;
}
}
Такой код выдаст ошибку
Обязательно ли перегружать операторы?
Может есть какой-то другой способ?
jakebat is offline   Reply With Quote
Old 18/11/2018, 10:47 AM   #15820
Eims
Huge Clucker
 
Eims's Avatar
 
Join Date: May 2013
Location: Восточный Мордор
Posts: 475
Reputation: 19
Default Re: Скриптинг курилка

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

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

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

А то, что хочешь сделать ты, вряд ли получится нормально реализовать. По крайней мере, сомневаюсь, что затраченные усилия будут стоить того.
__________________
- How many IT Engineers does it take to fix a broken light bulb?
- None, the light bulb works fine in my office, I cannot replicate the issue.
Eims is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
IRC-канал по скриптингу: #sa-mp.scripting.RU Zeex Русский/Russian 9 22/05/2015 03:24 AM
как понять кто убил и того кого убили? fooxid Русский/Russian 5 11/07/2010 06:21 PM
как разбить длинную строку? KPECTak Русский/Russian 14 08/06/2010 04:23 AM
Рускоязычные порталы по PAWN скриптингу isan Русский/Russian 15 21/03/2010 08:10 PM


All times are GMT. The time now is 03:01 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.