Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

[PAWN] Перевести время в Unix

Статус пользователя vovan4ik1997
сообщение 15.7.2014, 19:07
Сообщение #1


Стаж: 13 лет

Сообщений: 1087
Благодарностей: 433
Полезность: 718

Помогите решить задачу:
Создать переменные, которые будут выдавать дату+время, после чего перевести это все в UNIX время.(что-то вроде этого 1405453794)
И еще 1 переменную, которая добавляла к текущей дате +1 день и тоже переводила в UNIX. Нужно для амхбанс.

Чуть более красивее объясню. Мне нужно дату начала события (Пускай переменная A) и вторую дату, к которой добавили 1 день от первой даты. И перевести эти 2 числа в UNIX время.
Как-то так :)
Буду благодарен thank_you2.gif


Представь, что ты заплатил однажды, а получаешь прибыль постоянно.
Закажи правильный контент тут
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Safety1st
сообщение 15.7.2014, 19:25
Сообщение #2
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Откуда и в каком формате берётся 'дата начала события'?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя vovan4ik1997
сообщение 15.7.2014, 19:34
Сообщение #3


Стаж: 13 лет

Сообщений: 1087
Благодарностей: 433
Полезность: 718

Safety1st, пока неоткуда. Для амхбанса надо дата 15.07.2014 и время 20:32 и все это в UNIX формате.
Игрок пишет /rs собирается дата и время, пишется в нужном формате в отдельный масив. После чего к дате добавляется 1 день и пишется уже в другой масив. Воооот вобщем:)


Представь, что ты заплатил однажды, а получаешь прибыль постоянно.
Закажи правильный контент тут
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя iLLuSioN
сообщение 15.7.2014, 19:40
Сообщение #4
Иконка группы

Стаж: 19 лет

Сообщений: 6911
Благодарностей: 7990
Полезность: 1639

То чувство, когда выполнить задание легче, чем понять :)

vovan4ik1997,
Напишите сразу, что нужно сделать(прикрепите исходнике, опишите что в итоге должно получится), так проще будет понять.

/rs и амхбанс как то связаны должны быть?


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 15.7.2014, 19:40
Сообщение #5
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Код
const iNextDelay = 86400
new iNextTime = get_systime() + iNextDelay
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя vovan4ik1997
сообщение 15.7.2014, 19:50
Сообщение #6


Стаж: 13 лет

Сообщений: 1087
Благодарностей: 433
Полезность: 718

Safety1st, почти. Это просто добавил день к дате. А как теперь это время, которое вышло, NextTime, вывести в UNIX.

iLLuSioN, ну блин :с

Рассказываю очень подробно:
1. В БД амхбанса используется время в UNIX. Время там состоит из даты(01.01.2011) и времени(13:22:00), при выходе получим 1293888120.
2. В плагине нужно использовать 2 времени:
2.1. Первое - старт события, в моем случае написание /rs. То есть, когда игрок написал рс, то записать нужно в формате UNIX дату и время.
2.2 Второе - добавить к дате, которая вышла выше 1 день(= 86400 в UNIX)
Теперь вопрос, как получить первое время (2.1) состоящее из даты(01.01.2011) и времени(13:22:00) в формате UNIX.
Подробнее уже не знаю как ;)


Представь, что ты заплатил однажды, а получаешь прибыль постоянно.
Закажи правильный контент тут
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя iLLuSioN
сообщение 15.7.2014, 20:00
Сообщение #7
Иконка группы

Стаж: 19 лет

Сообщений: 6911
Благодарностей: 7990
Полезность: 1639

Цитата
Safety1st, почти. Это просто добавил день к дате. А как теперь это время, которое вышло, NextTime, вывести в UNIX.

это уже и есть юникс время

new g_SaveTimeRS // Глобальная переменная нужна для того, чтобы вы могли полученное время написания RS использовать в других функциях (если это нужно)

1. В старт события /rs пишем

g_SaveTimeRS= get_systime() // Сохранится в юникс формате время написания /rs

2. " добавить к дате, которая вышла выше 1 день"

new iTime = g_SaveTimeRS + 86400 // Это можно использовать уже в любой функции, не только там, где вы получали get_systime()


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Safety1st
сообщение 15.7.2014, 20:01
Сообщение #8
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

vovan4ik1997, unix time отсчитывается от определённой даты, 1970 г. А тебе нужно посчитать число секунд от твоей даты в AMXBans? Разница постоянна, просто учтёшь её тогда в расчётах.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя vovan4ik1997
сообщение 15.7.2014, 20:03
Сообщение #9


Стаж: 13 лет

Сообщений: 1087
Благодарностей: 433
Полезность: 718

iLLuSioN,
Код:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "admin"
#define VERSION "1.0"
#define AUTHOR "Admin"

public plugin_init() {

register_plugin(PLUGIN, VERSION, AUTHOR)

/
register_clcmd("say /rs","block")
}
//Глобальная переменная
const gDay = 86400

public block(){


new gTime = get_systime()
new gNextTime = gTime + gDay
server_print("Текущее время в UNIX: %d, тоже самое, но через день: %d", gTime, gNextTime )

}


Все верно?


Представь, что ты заплатил однажды, а получаешь прибыль постоянно.
Закажи правильный контент тут
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя iLLuSioN
сообщение 15.7.2014, 20:04
Сообщение #10
Иконка группы

Стаж: 19 лет

Сообщений: 6911
Благодарностей: 7990
Полезность: 1639

vovan4ik1997,
Верно


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя vovan4ik1997
сообщение 15.7.2014, 20:10
Сообщение #11


Стаж: 13 лет

Сообщений: 1087
Благодарностей: 433
Полезность: 718

Спасибо. И теперь вопрос труднее, если надо я создам новую тему.
Как удалить первую строчку в файле .ini

Сразу раскрою карты:
Я хукаю чат и проверяю на слово smoke. Игрок написал в чате smoke и в файле удалилась первая строчка smoke. Следующий написал smoke уже ничего не происходит, если нету этого слово и так далее.
Структура ini: написано 1 слово в 1 строчку.




Представь, что ты заплатил однажды, а получаешь прибыль постоянно.
Закажи правильный контент тут
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 15.7.2014, 20:19
Сообщение #12
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

vovan4ik1997, так не совсем грамотно делать. Обращения к файлам должны быть минимальны: обычно это максимум 2 раза: при входе и выходе игрока. Хороший код по этой теме есть от Асмодая - плагин [API] Data Player: там самая что ни на есть работа с файлами, удаляет строчку натива dp_remove_key(). Но разобраться будет непросто. Если простенький, но зато более понятный вариант: плагин Delete string от creator_52.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя vovan4ik1997
сообщение 15.7.2014, 20:58
Сообщение #13


Стаж: 13 лет

Сообщений: 1087
Благодарностей: 433
Полезность: 718

Код:
public remove()
{
new gFile = fopen("addons/amxmodx/configs/msg.ini","wt")

if(gFile){

delete_string(gFile, 1)
}
fclose(gFile);
}

Ругается на delete_string(gFile, 1)
Инклюд подключил. Что добавить, дабы удалило первую строчку в файле.
На счет того, что не рационально так делать - пока не важно. Использоваться будет данный плагин раза 3 в неделю)


Представь, что ты заплатил однажды, а получаешь прибыль постоянно.
Закажи правильный контент тут
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 15.7.2014, 22:04
Сообщение #14
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

vovan4ik1997, инклуд же делает всю работу за вас, поэтому только:
Код
Remove() {
    static szFile[128]

    if( !szFile[0] ) {
        get_localinfo( "amxx_configsdir", szFile, charsmax(szFile) )
        add( szFile, charsmax(szFile), "/msg.ini" )
    }

    delete_string( szFile, 1 )    // remove 1st line
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: