Re: Скриптинг курилка -
Stepashka - 05.11.2018
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. Если второй вариант то придётся маленько допилить код, а точнее, "склеить" пользователя и дату и сгруппировать по новому "склеиному" полю.
Re: Скриптинг курилка -
Eims - 06.11.2018
Если не нужна подробная статистика каждой сессии, а нужна статистика лишь по дням, то не проще ли по дням эту статистику и вести?
Как я отвечал на другом форуме, можно создать таблицу, по типу:
PHP код:
id | account_id | date | online_uptime
Далее при авторизации записывать текущее значение gettime() в переменную игрока, а после, например, раз в 10 минут + при выходе делать запрос в базу на поиск записи статистики игрока с текущей датой
PHP код:
SELECT id FROM table WHERE account_id = %d 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 = %d, online_uptime=/*gettime()-время_из_переменной*/, date = CURDATE()
Теперь чтоб посмотреть записи за последнюю неделю, достаточно сделать такое условие выборки:
PHP код:
SELECT * FROM table WHERE date >= DATE_SUB(CURDATE(), INTERVAL 7 day)
Re: Скриптинг курилка -
OKStyle - 07.11.2018
Quote:
Originally Posted by Romz
Y_Less вернулся на пост бета тестера.
|
Вернулся? Он им разве был?
Quote:
Originally Posted by Resers
потому что в 30+ лет ковырять игру десятилетней давности не очень-то может быть и весело
|
Очень даже весело.
Re: Скриптинг курилка -
Stepashka - 07.11.2018
Quote:
Originally Posted by OKStyle
Очень даже весело.
|
+ Я вот Вангеры ковыряю
Вопрос для людей с хорошим опытом (Создание функции) -
jakebat - 18.11.2018
Здравствуйте
У меня появилась идея создать функцию, но непростую, исходя из функции GieveMoney(playerid, -1/1)
Можно ли сделать такую вот функцию, с помощью pawn?
К примеру, я хочу чтобы у меня выдавался уровень, ставился уровень, уменьшался уровень с одной и той же функцией
Например:
LevelPlayer(playerid, +1)
LevelPlayer(playerid, -1)
LevelPlayer(playerid, 1) или LevelPlayer(playerid, =1)
И как эта процедура вся называется в программировании?
Re: Вопрос для людей с хорошим опытом (Создание функции) -
DartfoL - 18.11.2018
Такие функции называются переменными
PlayerLevel[playerid] += 1;
PlayerLevel[playerid] -= 1;
PlayerLevel[playerid] = 1;
Вообще, обычно в программировании применяется практика делать 3 разных функций, а не объединять всё в одну
Re: Вопрос для людей с хорошим опытом (Создание функции) -
jakebat - 18.11.2018
Вопрос в том, чтобы используя оператор + - или =
Делать с определенными функциями что-то в самой функции
Ладно, распишу
LevelPlayer(playerid, operator var)
{
if(operator == +)
{
INFO[playerid][Level] += var;
}
if(operator == -)
{
INFO[playerid][Level] -= var;
}
if(!operator || operator == =)
}
INFO[playerid][Level] = var;
}
}
Такой код выдаст ошибку
Обязательно ли перегружать операторы?
Может есть какой-то другой способ?
Re: Скриптинг курилка -
Eims - 18.11.2018
Как выше сказали, в программировании принято создавать по функции на каждое действие, а не объединять всё в одну. Как минимум, потому что код становится более понятным.
А вообще, можно просто сделать так:
PHP код:
LevelPlayer(playerid, value, bool:write = false)
{
if(write == true)
INFO[playerid][Level] = var;
else
INFO[playerid][Level] += var;
return 1;
}
Хотя я всё равно сделал бы 2 разные функции, вместо одной, чтоб не приходилось выискивать наличие "true" для того, чтоб понять, что именно происходит в конкретном участке кода.
А то, что хочешь сделать ты, вряд ли получится нормально реализовать. По крайней мере, сомневаюсь, что затраченные усилия будут стоить того.
Re: Скриптинг курилка -
jakebat - 18.11.2018
А я хочу постараться реализовать, хочу сделать что-то с переменной зразу с функции
Может есть такая какая-то мыслишка?
Re: Скриптинг курилка -
OstGot - 18.11.2018
Всё выше сказанное касательно отдельных функций это гораздо более эффективный и логичный вариант, но если есть чисто спортивный интерес это реализовать хоть каким-то путём, то...
Вариант с передачей строки:
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
Re: Скриптинг курилка -
jakebat - 18.11.2018
Ну, это понятно как-бы, но я хочу что-то более некостыльное, такое возможно?
без строк
Re: Скриптинг курилка -
OKStyle - 18.11.2018
pawn Code:
LevelPlayer(playerid, var = 0)
{
if(!var) INFO[playerid][Level] = var;
else INFO[playerid][Level] += var;
}
А чем тебя не устраивает этот вариант? Если параметра нет, то сбрасывается на дефолтное (в данном случае 0), если есть, то юзать можно в + и в -: LevelPlayer(playerid, 1) или LevelPlayer(playerid, -1)
Re: Скриптинг курилка -
jakebat - 18.11.2018
Я так хочу, это реально сделать? Если нет, то можете ответить конструктивно, почему нет? Хочу узнать от Вас больше)
SetValue(playerid, +1)
{
Player[playerid][Int] += 1;
}
SetValue(playerid, -1)
{
Player[playerid][Int] -= 1;
}
SetValue(playerid, 1)
{
Player[playerid][Int] = 1;
}
Re: Скриптинг курилка -
WestSide56 - 18.11.2018
PHP Code:
Player[playerid][Int] += 1;//Прибавить значение переменной
Player[playerid][Int] -= 1;//Убавить значение переменной
SetValue(playerid, Player[playerid][Int]);//Установить значение из переменной
Это ты хочешь?
Re: Скриптинг курилка -
TheMallard - 18.11.2018
Quote:
Originally Posted by jakebat
Я так хочу, это реально сделать? Если нет, то можете ответить конструктивно, почему нет? Хочу узнать от Вас больше)
SetValue(playerid, +1)
{
Player[playerid][Int] += 1;
}
SetValue(playerid, -1)
{
Player[playerid][Int] -= 1;
}
SetValue(playerid, 1)
{
Player[playerid][Int] = 1;
}
|
Потому что ни один из существующих языков программирования так не позволяет) Функции могут принимать только переменные или значения.
Re: Скриптинг курилка -
SCALOlaz - 18.11.2018
Что за жаришка в основном разделе?)
Re: Скриптинг курилка -
DartfoL - 18.11.2018
Quote:
Originally Posted by SCALOlaz
Что за жаришка в основном разделе?)
|
калкор появился и начал постить
Re: Скриптинг курилка -
jakebat - 18.11.2018
Ух, там что твориться, прочел быстренько че да как, как триллер

D
Re: Скриптинг курилка -
Gettopro - 21.11.2018
Люди добрые. Помогите кто чем может. Может кто сталкивался:
Рандомно (может не происходить в течении нескольких часов, а может и через минуту после входа)
перестает работать соединение игрок-сервер, т.е. перестают работать ВСЕ стандартные калбеки. Такие как OnPlayerUpdate, OnPlayerKeyStateChange и т.п.
Но , кое-что да работает. OnPlayerText. И всё.
И если я не ошибаюсь, то я не один такой на своём сервере.
Есть только одна гепотеза. Есть несколько TextDraw-баров, состоящих по 50 маленьких. Т.Е. единовременно на экране около 200 текстравов, и до 50 раз в секунду происходит их показ/скрытие.
В какую сторону копать?
Re: Скриптинг курилка -
Mutha_X - 21.11.2018
В сторону ошибок в работе с массивами и прекращения выполнения функций по вылету за пределы массивов.