ruma wrote:
что нужно, чтобы изменить карму на величину отличную от 1.
Если я все правильно разобрал, то получается как-то так:
максимальная сила кармы = округление(количество выставленной кармы / log(количество дней регистрации))
Это формула верна для обычных зарегистрированных пользователей (не для администраторов и "особых пользователей"), где
количество выставленной кармы - суммарное количество выставленной кармы(если понижаешь карму, то это значение уменьшается);
log - десятичный логарифм;
/ - операция деления;
округление - функция округления результата.
Ниже прилагаю куски кода.
Подсчет максимальной силы кармы
max_karma_power (файл karma.php):
Code:
...
// Find current user's (karma giver's) "karma power"
// this is an arbitrary kind of calculation. Long time members, or members of
// staff award or subtract up to five points
if ($auth->acl_getf_global('m_') || $karmamod->user_level == 'admin')
{
$max_karma_power = $karmamod->config['power_max'];
}
else
{
$days_registered = (int) max(2, round(($karmamod->current_time - $user->data['user_regdate']) / 86400));
$max_karma_power = round($user->data['user_karma_powered'] / log($days_registered));
if ($max_karma_power > $karmamod->config['power_max'])
{
$max_karma_power = $karmamod->config['power_max'];
}
else if ($max_karma_power < 1)
{
$max_karma_power = 1;
}
}
...
$karmamod->submit_karma($data);
...
Функция увеличения
user_karma_powered (файл functions_karma.php):
Code:
function submit_karma($data)
{
...
// Update poster's karma
$sql = 'UPDATE ' . USERS_TABLE . '
SET user_karma = user_karma ' . (($data['action'] == 'decrease') ? '-' : '+') . ' 1,
user_karma_powered = user_karma_powered ' . (($data['action'] == 'decrease') ? '- ' : '+ ') . $data['karma_power'] . '
WHERE user_id = ' . $data['user_id'];
...
}