1. Соблюдайте Правила форума и проявляйте уважение к другим участникам беседы.

Time in OpenStats 1.3.2

Тема в разделе 'Кодинг/Собственные решения', создана пользователем sphere-g, 23 янв 2011.

  1. sphere-g Ньюфаг

    Сообщения:
    33
    Спасибы:
    0
    Всем привет, у меня проблема отображения времени банов, на сайте статистики, дату определяет верно, но время вечно стоит 00:00, кто сталкивался с такой проблемой? подскажите как решить ее

    [IMG]
  2. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Это фича бота, а не статы.
  3. sphere-g Ньюфаг

    Сообщения:
    33
    Спасибы:
    0
    мм окей, а как пофиксить это не знаешь?
  4. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    ну найди где там раздача даты и пофиксь.
  5. sphere-g Ньюфаг

    Сообщения:
    33
    Спасибы:
    0
    еслиб знал.. сделал бы.. помощь нужна
  6. sphere-g Ньюфаг

    Сообщения:
    33
    Спасибы:
    0
    ап теме
  7. Military Парнишка с небывалым умом

    Сообщения:
    133
    Спасибы:
    2
    Сборка бота GHost:
    ghost++
    Дата начала использования бота:
    12.12.2012
    Skype:
    Мой статус
    как исправить то? чтобы бот заносил в бан время?
  8. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Ну ладно, открою превеликую тайну моего начала... В общем когда я еще не знал код бота, но мне нужно было что-то (причем с теорией тоже было не совсем хорошо, благо сейчас научили), я следовал своему алгоритму нахождения мне нужной плюшки (сначала покажу формальное выполнение):
    1. Детальнее понять что из себя представляет нужный объект.
    2. Найти в коде его конечный результат, который виден вам (то ли это команда, то ли это занос статы в базу, то ли еще что нибудь).
    3. Начать изучать кусок кода, где находится конечный или промежуточный результат, в зависимости от того, что ищем, искать "ступеньки" ведущие к определению какой либо функции или ее объявлению.
    4. Дойдя до нужного истока функции, редактировать по своему желанию.

    Например с этим Time Bans:
    1. У нас есть зацепка - это занос времени к забаненному игроку, это 100% использование локального времени (можно поискать по "time") и это что-то связанное с базой, точнее с ее вносом.
    2. Ищем в коде промежуточный результат: CTRL+F >> "ban" (ищем описание команды !ban).
    3. Изучаем весь кусок команды !bans: нашли строку, где инфо о забаненном добавляется в вектор
      m_PairedBanAdds.push_back( PairedBanAdd( Usr, m_GHost->m_DB->ThreadedBanAdd( m_Server, Victim, string( ), string( ), User, Reason, BanTime, 0 ) ) );

      Из этого нужно понять, что если где-то добавляется в вектор, значит где-то в другом месте этот вектор очищается, но прежде прочитав все значения из него. Значит ищем где этот вектор очищается (чаще всего выше очистки и есть "парсинг" вектора) - CTRL+F >> "m_PairedBanAdds.erase" (нужно знать что делает каждая функция - гугл т.с. в помощь).
      Нашли строку
      i = m_PairedBanAdds.erase( i );

      Смотрим на начало куска - что мы видим:
      for( vector<PairedBanAdd> :: iterator i = m_PairedBanAdds.begin( ); i != m_PairedBanAdds.end( ); )

      Так и есть - тут у нас и происходит "парсинг" всего вектора. Мы дошли до 4 пункта.
    4. Быстренько пробежавшись по маленькому кусочку кода, в глаза бросается "Date" и "time", смотрим где эти слова "превращаются" в нужные нам цифры:
      struct tm * timeinfo;
      				char buffer [80];
      				time_t Now = time( NULL );
      				timeinfo = localtime( &Now );
      				strftime (buffer,80,"%d-%m-%Y",timeinfo);  
      				sTDate = buffer;
      				if (i->second->GetExpireDayTime()>0)
      				{
      					Now += 3600*24*i->second->GetExpireDayTime();
      					timeinfo = localtime( &Now );
      					strftime (buffer,80,"%d-%m-%Y",timeinfo);  
      					sDate = buffer;
      				}

      Опа, попадается что-то напоминающее Days, Mounth, Year:
      strftime (buffer,80,"%d-%m-%Y",timeinfo);

      Отлично, осталось дописать секунды и минуты - идем в гугл, ищем подробное использование "strftime": "strftime c++". Наверно по первой же ссылке вам расскажут какие переменные стоит использовать, чтобы добавить секунды и минуты.
      Я попробую на хардкор и на честность и сделаю так:
      strftime (buffer,80,"%d-%m-%Y %M:%S",timeinfo);

      Готово. Теперь секунды и минуты будут отображаться.

    PS: Делал всё по алгоритму, честно сказать не ожидал что всё сразу получится, но увы, я ошибся и получиться должно на 99%.