SA-MP Forums Archive
Скриптинг курилка - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Скриптинг курилка (/showthread.php?tid=111279)



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 = %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



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(playeridvaluebool: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(playeridPlayer[playerid][Int]);//Установить значение из переменной 
Это ты хочешь?


Re: Скриптинг курилка - TheMallard - 18.11.2018

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;
}
Потому что ни один из существующих языков программирования так не позволяет) Функции могут принимать только переменные или значения.


Re: Скриптинг курилка - SCALOlaz - 18.11.2018

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


Re: Скриптинг курилка - DartfoL - 18.11.2018

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


Re: Скриптинг курилка - jakebat - 18.11.2018

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


Re: Скриптинг курилка - Gettopro - 21.11.2018

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

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

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

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


Re: Скриптинг курилка - Mutha_X - 21.11.2018

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