Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Karma Hack или Advanced Karma Hack?

Ответы на вопросы, связанные с модами для phpBB 2.0.x, кроме относящихся к форуму Для авторов (phpBB 2.0.x).
OldMike
phpBB 1.2.1
Сообщения: 21
Стаж: 17 лет 2 месяца

Сообщение OldMike »

Nome, чтобы у людей была свобода выбора :D ИМХО если сделать АКМ сразу со встроенной инфой, то возможно получится оптимизировать некоторые SQL запросы, а может число запросов... А уж установка-то несомненно станет проще...

P.S. Хочу предложить Nome одну идейку для АКМ, как мне кажется интересную и полезную :D Сейчас мембер получает карму, но кроме удовлетворенного (или неудовлетворенного) самолюбия ничего с этого больше не имеет, т.е. никакого бонуса за большую карму...

Предлагаю сделать что-то типа того, что мемберы с большей кармой могут давать ее другим чаще. Нужно ввести простейшую формулу для расчета, например:
задержка / (карма_мембера / 2 + 1)
соответственно, если задержка равна 24 часа и у мембера 1 кармы, то он может давать карму один раз в 16 часов, а вот если у него будет 10 кармы, то каждые 4 часа может давать... Как-то так :D Если отрицательная карма, то вообще запретить давать...
Можно и нелинейную зависимость сделать, логарифмиескую или еще как, можно подумать...

ИМХО так будет интереснее чем просто плюсы и минусы суммировать, да и готовые скрипты не нужно сильно менять - функция простая :lol:
Nome
phpBB 1.4.2
Сообщения: 65
Стаж: 19 лет 2 месяца

Сообщение Nome »

phpbbhacks помоему сейчас только за смертью посылать :) все никак не добавят :) поэтому качаем отсюда:
http://altermusic.ru/nome/AKM.zip
OldMike
phpBB 1.2.1
Сообщения: 21
Стаж: 17 лет 2 месяца

Сообщение OldMike »

Nome, а как насчет моей идейки в предыдущем посте? не понравилась?
DanZer
phpBB 1.2.1
Сообщения: 21
Стаж: 17 лет 4 месяца

Сообщение DanZer »

Сорри за отсутствие. Итак, начнем разборки. :)
$topic_id вообще ниразу не обязательно передается в скрипт
Да как же не передается? :shock: Вот такого куска кода разве нет?

Код: Выделить всё

				$user = intval($HTTP_GET_VARS[POST_USERS_URL]);
				if ( $HTTP_GET_VARS['k'] == 'p' )
				{
				 $sql = "UPDATE " . USERS_TABLE . " SET karma_plus = karma_plus + 1 WHERE user_id = '" . $user . "'";
				 $karma_data = "insert into " . KARMA_TABLE . " set user_id_who = '$userdata[user_id]', user_id_whom = '$user', post_id = '$post_id', topic_id = '$topic_id', karma_x = '1', comment = '$comment', time = '".time()."', karma_view = '0'";
				}
				 else
				{
				 $sql = "UPDATE " . USERS_TABLE . " SET karma_minus = karma_minus + 1 WHERE user_id = '" . $user . "'" ;
				 $karma_data = "insert into " . KARMA_TABLE . " set user_id_who = '$userdata[user_id]', user_id_whom = '$user', post_id = '$post_id', topic_id = '$topic_id', karma_x = '0', comment = '$comment', time = '".time()."', karma_view = '0'";
				}
Вручную ставили или ИзиМодом?
Почему у меня ссылка именно на топик, а не на пост - я себе еще и html-мод сделал для оптимизации под поисковики. Т.е. вместо viewtopic.php?t=1234&start=15 у меня идет topic1234-15.html, ну и код , соответственно, под это заточен. Проверял на чистой инсталляции - все работает, так что даже не знаю, откуда оно вылезло...

Блин, вот я тормоз :lol: - только дошло! Мой мод комментов надо ставить на подправленный мод кармы из того же поста, а не на оригинальный! Я же именно с ним тестировал! Тогда и варнингов не будет и ничего править не надо!
Nome писал(а):а нафига вообще я стал делать комменты?
Ну не знаю :) Может по стопам Билли Гейтса решил пойти - все сразу в одном флаконе? ;)

Добавлено спустя 7 минут 50 секунд:

OldMike Сорри, конечно, но твоя идея, имхо, дедовщиной попахивает. "Старожилы" окажутся в заведомо более выгодном положении. Если только отдельным аддоном - хошь ставь, не хошь - твое право.
OldMike
phpBB 1.2.1
Сообщения: 21
Стаж: 17 лет 2 месяца

Сообщение OldMike »

DanZer писал(а): OldMike Сорри, конечно, но твоя идея, имхо, дедовщиной попахивает. "Старожилы" окажутся в заведомо более выгодном положении. Если только отдельным аддоном - хошь ставь, не хошь - твое право.
Вообще-то, дедовщина это совсем не плохо, это только современная армия идею извратила и испоганила. А смысл-то в том, что более опытные и авторитетные старички помогают молодежи - ничего тут плохого нет. К тому же, совершенно не факт, что у старичка будет большая карма, кстати, точно так же как и в армии, если уж дана такая аналогия...

Насчет сделать аддоном, это разумно, согласен :) Или отключаемо...
Nome
phpBB 1.4.2
Сообщения: 65
Стаж: 19 лет 2 месяца

Сообщение Nome »

вообщем я уже все интегрировал и больше у меня лапки в эту сторону не поднимаются :) хотите отключайте хотите не отключайте :) только ради бога оттестируйте...насчет идеи OldMike, я думаю я соглашусь с
DanZer, но это опять же можно сделать как функцию...но это уже не я :)

Добавлено спустя 1 минуту 40 секунд:

2 DanZer, помоему если запрос идет на viewtopic с указанием только POST_POST_URL, то $topic_id вообще не возникает...хотя я могу ошибаться ибо не помню...
OldMike
phpBB 1.2.1
Сообщения: 21
Стаж: 17 лет 2 месяца

Сообщение OldMike »

Ну ладно, не хотите делать, может хоть ошибку поможете найти? :D

первый блок кода:

Код: Выделить всё

//
// Advanced Karma Mod
//
// Karma Info
	$comment = str_replace("'","'",substr($_GET['comment'],0,80));
// Karma Info
$simple_karma = 0;
$time_delay_function = $board_config['time_between_karma'] * 3600;
if ( $userdata['session_logged_in'] && isset($HTTP_GET_VARS['k']) && isset($HTTP_GET_VARS[POST_USERS_URL]) )
{
   if ( $HTTP_GET_VARS['k'] == 'p' || $HTTP_GET_VARS['k'] == 'm' )
   {
      if ( $userdata['user_posts'] >= $board_config['min_post_karma'] || ( $board_config['admin_karma'] == 1 && $userdata['user_level'] == ADMIN ) )
      {
         $karma_time = $userdata['karma_time'];

         if ( $board_config['lag_karmer'] == 0 )
         {
            $sql = "SELECT 'karma_time', 'karma_plus', 'karma_minus' FROM " . USERS_TABLE . " WHERE user_id = '" . intval($HTTP_GET_VARS[POST_USERS_URL]) . "'";
            if ($result = $db->sql_query($sql))
            {
               while ($row = $db->sql_fetchrow($result))
               {
                  $db->sql_freeresult($result);
                  $karma_time = $row['karma_time'];
                  $simple_karma = $row['karma_plus'] - $row['karma_minus'];
               }
            }
            $db->sql_freeresult($result);
          }
       $time_delay_function = $time_delay_function / ($simple_karma / 2 + 1);
         if ( ( time() - $karma_time > $time_delay_function ) || ( ( $board_config['admin_karma'] == 1 ) && ( $userdata['user_level'] == ADMIN ) ) )
второй блок кода:

Код: Выделить всё

	//
	// Advanced Karma Mod
	//
	$karma = '';
	if ( $userdata['session_logged_in'] && $poster_id != ANONYMOUS )
	{
		$karma = '<br />' . $lang['Karma'] . ':&nbsp;' . ( ( $board_config['simple_karma'] == 1 ) ? $simple_karma : '+' . $postrow[$i]['karma_plus'] . '/-' . $postrow[$i]['karma_minus'] );

		if ( $userdata['user_id'] != $poster_id && ( $userdata['user_posts'] >= $board_config['min_post_karma'] || ( $board_config['admin_karma'] == 1 && $userdata['user_level'] == ADMIN ) ) )
		{
			$karma_time = ( $board_config['lag_karmer'] == 1 ) ? $userdata['karma_time'] : $postrow[$i]['karma_time'];
			if ( ( time() - $karma_time > $time_delay_function ) || ( ( $board_config['admin_karma'] == 1 ) && ( $userdata['user_level'] == ADMIN ) ) )
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16359
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1742 раза

Сообщение rxu »

OldMike писал(а):$HTTP_GET_VARS[POST_USERS_URL]
а случаем не $HTTP_GET_VARS['POST_USERS_URL'] ?
Изображение
OldMike
phpBB 1.2.1
Сообщения: 21
Стаж: 17 лет 2 месяца

Сообщение OldMike »

Да вроде это код самого Nome, это не менялось...
Я добавил пару переменных
$simple_karma
$time_delay_function

соответственно их расчитываю и с ними сравниваю, в остальном ничего не менял... Да и не разбирался я в его коде, хотел простейшую функция вставить, а не фунциклирует :cry:
DanZer
phpBB 1.2.1
Сообщения: 21
Стаж: 17 лет 4 месяца

Сообщение DanZer »

помоему если запрос идет на viewtopic с указанием только POST_POST_URL, то $topic_id вообще не возникает...хотя я могу ошибаться ибо не помню...
Сие сугубо фиолетово, т.к. и topic_id, и post_id передаются при вызове скрипта в параметрах :)

Код: Выделить всё

javascript:ads_karma('viewtopic.php?t=14726&u=1977&start=0&k=p&p=119080', 'plus')
Теперь по моду. Что-то мне вот эти строчки подозрительны

Код: Выделить всё

$karma_time = $row['karma_time'];
$simple_karma = $row['karma_plus'] - $row['karma_minus'];
Попробуй после них echo '!' . $simple_karma . '!'; вставить, чтоб посмотреть что в $simple_karma лежит. Или еще лучше - поставь Zend и пробегись по коду в пошаговом режиме.
OldMike
phpBB 1.2.1
Сообщения: 21
Стаж: 17 лет 2 месяца

Сообщение OldMike »

DanZer, echo пробовал ставить :D похоже там ноль лежит всегда, а вот почему непонятно... запрос к базе вроде правильный... я уж думал может с переменными конфликт какой... С Zend`ом каждый сможет :lol: примитивная функция не работает - 2 переменные, еще с ней с отладчиком возиться... обидно!!! :cry:
DanZer
phpBB 1.2.1
Сообщения: 21
Стаж: 17 лет 4 месяца

Сообщение DanZer »

похоже там ноль лежит всегда, а вот почему непонятно...
Чем-то задним чуйствую, что $db->sql_freeresult($result); перед ними - лишний. Хотя могу и ошибаться.

Добавлено спустя 1 минуту 9 секунд:

попробуй еще значения $row['karma_plus'] и $row['karma_minus'] посмотреть.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16359
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1742 раза

Сообщение rxu »

DanZer
Прав, однако первое значение в цикле должно быть ненулевое (если оно там есть).
OldMike
Закомментируйте строку $db->sql_freeresult($result); в цикле while и посмотрите на результат.
Изображение
OldMike
phpBB 1.2.1
Сообщения: 21
Стаж: 17 лет 2 месяца

Сообщение OldMike »

DanZer, спасибо! Попробую и отчитаюсь о результатах :D
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16359
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1742 раза

Сообщение rxu »

Да и вообще не понял, зачем там этот while, ведь в таблице пользователей строка с заданным user_id только одна.
Изображение

Вернуться в «Поддержка модов для phpBB 2.0.x»