/** * Расчет рейтинга и силы при гоосовании за топик * * @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует * @param ModuleTopic_EntityTopic $oTopic Объект топика * @param int $iValue * @return int */ public function VoteTopic(ModuleUser_EntityUser $oUser, ModuleTopic_EntityTopic $oTopic, $iValue) { $oTopic->setRating($oTopic->getRating() + $iValue); $skill = $oUser->getSkill(); $oUserTopic = $this->User_GetUserById($oTopic->getUserId()); $iSkillNew = $oUserTopic->getSkill() + $iValue; $oUserTopic->setSkill($iSkillNew); $this->User_Update($oUserTopic); return $iValue; }
/** * Расчет рейтинга и силы при гоосовании за топик * * @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует * @param ModuleTopic_EntityTopic $oTopic Объект топика * @param int $iValue * @return int */ public function VoteTopic(ModuleUser_EntityUser $oUser, ModuleTopic_EntityTopic $oTopic, $iValue) { /** * Устанавливаем рейтинг топика */ $oTopic->setRating($oTopic->getRating() + $iValue); /** * Меняем рейтинг автора топика */ $fDeltaUser = ($iValue < 0 ? -1 : 1) * Config::Get('module.rating.topic_multiplier'); $oUserTopic = $this->User_GetUserById($oTopic->getUserId()); $oUserTopic->setRating($oUserTopic->getRating() + $fDeltaUser); $this->User_Update($oUserTopic); return $iValue; }
/** * Расчет рейтинга и силы при гоосовании за топик * * @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует * @param ModuleTopic_EntityTopic $oTopic Объект топика * @param int $iValue * * @return int */ public function VoteTopic($oUser, $oTopic, $iValue) { $iDeltaRating = 0; $skill = $oUser->getSkill(); if (C::Get('plugin.rating.topic.vote') && (C::Get('plugin.rating.topic.dislike') || !C::Get('plugin.rating.topic.dislike') && $iValue > 0)) { /** * Устанавливаем рейтинг топика */ $iDeltaRating = $iValue * C::Get('plugin.rating.rating.topic_k1'); //1 if ($skill >= C::Get('plugin.rating.rating.topic_border_1') and $skill < C::Get('plugin.rating.rating.topic_border_2')) { // 100-250 $iDeltaRating = $iValue * C::Get('plugin.rating.rating.topic_k2'); //2 } elseif ($skill >= C::Get('plugin.rating.rating.topic_border_2') and $skill < C::Get('plugin.rating.rating.topic_border_3')) { //250-400 $iDeltaRating = $iValue * C::Get('plugin.rating.rating.topic_k3'); //3 } elseif ($skill >= C::Get('plugin.rating.rating.topic_border_3')) { //400 $iDeltaRating = $iValue * C::Get('plugin.rating.rating.topic_k4'); //4 } $oTopic->setRating($oTopic->getRating() + $iDeltaRating); } if (C::Get('plugin.rating.rating.vote') && (C::Get('plugin.rating.topic.dislike') || !C::Get('plugin.rating.topic.dislike') && $iValue > 0)) { /** * Начисляем силу и рейтинг автору топика, используя логарифмическое распределение */ $iMinSize = C::Get('plugin.rating.topic.min_change'); //0.1; $iMaxSize = C::Get('plugin.rating.topic.max_change'); //8; $iSizeRange = $iMaxSize - $iMinSize; $iMinCount = log(0 + 1); $iMaxCount = log(C::Get('plugin.rating.topic.max_rating') + 1); $iCountRange = $iMaxCount - $iMinCount; if ($iCountRange == 0) { $iCountRange = 1; } if ($skill > C::Get('plugin.rating.topic.left_border') and $skill < C::Get('plugin.rating.topic.right_border')) { //200 $skill_new = $skill / C::Get('plugin.rating.topic.mid_divider'); //70; } elseif ($skill >= C::Get('plugin.rating.topic.right_border')) { //200 $skill_new = $skill / C::Get('plugin.rating.topic.right_divider'); //10; } else { $skill_new = $skill / C::Get('plugin.rating.topic.left_divider'); //100; } $iDelta = $iMinSize + (log($skill_new + 1) - $iMinCount) * ($iSizeRange / $iCountRange); /** * Сохраняем силу и рейтинг */ $oUserTopic = $this->User_GetUserById($oTopic->getUserId()); $iSkillNew = $oUserTopic->getSkill() + $iValue * $iDelta; $iSkillNew = $iSkillNew < 0 ? 0 : $iSkillNew; $oUserTopic->setSkill($iSkillNew); $oUserTopic->setRating($oUserTopic->getRating() + $iValue * $iDelta / C::Get('plugin.rating.topic.auth_coef')); //2.73 $this->User_Update($oUserTopic); } if ($skill > C::Get('plugin.rating.topic.left_border') and $skill < C::Get('plugin.rating.topic.right_border')) { //200 $skill_new = $skill / C::Get('plugin.rating.topic.mid_divider'); //70; } elseif ($skill >= C::Get('plugin.rating.topic.right_border')) { //200 $skill_new = $skill / C::Get('plugin.rating.topic.right_divider'); //10; } else { $skill_new = $skill / C::Get('plugin.rating.topic.left_divider'); //100; } $iDelta = $iMinSize + (log($skill_new + 1) - $iMinCount) * ($iSizeRange / $iCountRange); /** * Сохраняем силу и рейтинг */ $oUserTopic = $this->User_GetUserById($oTopic->getUserId()); $iSkillNew = $oUserTopic->getSkill() + $iValue * $iDelta; $iSkillNew = $iSkillNew < 0 ? 0 : $iSkillNew; $oUserTopic->setSkill($iSkillNew); $oUserTopic->setRating($oUserTopic->getRating() + $iValue * $iDelta / C::Get('plugin.rating.topic.auth_coef')); //2.73 $this->User_Update($oUserTopic); return $iDeltaRating; }
/** * Расчет рейтинга и силы при гоосовании за топик * * @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует * @param ModuleTopic_EntityTopic $oTopic Объект топика * @param int $iValue * * @return int */ public function VoteTopic($oUser, $oTopic, $iValue) { if (!C::Get('plugin.simplerating.topic.vote')) { return 0; } if (!C::Get('plugin.simplerating.topic.dislike') && $iValue < 0) { return 0; } /** * Устанавливаем рейтинг топика */ if (C::Get('plugin.simplerating.topic.add')) { $oTopic->setRating((double) $oTopic->getRating() + $iValue * (double) C::Get('plugin.simplerating.topic.add')); } /** * Устанавливаем рейтинг автора */ if (C::Get('plugin.simplerating.topic.user_add')) { $oUserTopic = $this->User_GetUserById($oTopic->getUserId()); $oUserTopic->setRating((double) $oUserTopic->getRating() + $iValue * (double) C::Get('plugin.simplerating.topic.user_add')); $this->User_Update($oUserTopic); } /** * Убавляем рейтинг голосующего, если нужно */ if (C::Get('plugin.simplerating.topic.user_remove')) { $oUser->setRating((double) $oUser->getRating() + (double) C::Get('plugin.simplerating.topic.user_remove')); $this->User_Update($oUser); } return (double) C::Get('plugin.simplerating.topic.add'); }
/** * Расчет рейтинга и силы при гоосовании за топик * * @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует * @param ModuleTopic_EntityTopic $oTopic Объект топика * @param int $iValue * @return int */ public function VoteTopic(ModuleUser_EntityUser $oUser, ModuleTopic_EntityTopic $oTopic, $iValue) { $skill = $oUser->getSkill(); /** * Устанавливаем рейтинг топика */ $iDeltaRating = $iValue; if ($skill >= 100 and $skill < 250) { $iDeltaRating = $iValue * 2; } elseif ($skill >= 250 and $skill < 400) { $iDeltaRating = $iValue * 3; } elseif ($skill >= 400) { $iDeltaRating = $iValue * 4; } $oTopic->setRating($oTopic->getRating() + $iDeltaRating); /** * Начисляем силу и рейтинг автору топика, используя логарифмическое распределение */ $iMinSize = 0.1; $iMaxSize = 8; $iSizeRange = $iMaxSize - $iMinSize; $iMinCount = log(0 + 1); $iMaxCount = log(500 + 1); $iCountRange = $iMaxCount - $iMinCount; if ($iCountRange == 0) { $iCountRange = 1; } if ($skill > 50 and $skill < 200) { $skill_new = $skill / 70; } elseif ($skill >= 200) { $skill_new = $skill / 10; } else { $skill_new = $skill / 100; } $iDelta = $iMinSize + (log($skill_new + 1) - $iMinCount) * ($iSizeRange / $iCountRange); /** * Сохраняем силу и рейтинг */ $oUserTopic = $this->User_GetUserById($oTopic->getUserId()); $iSkillNew = $oUserTopic->getSkill() + $iValue * $iDelta; $iSkillNew = $iSkillNew < 0 ? 0 : $iSkillNew; $oUserTopic->setSkill($iSkillNew); $oUserTopic->setRating($oUserTopic->getRating() + $iValue * $iDelta / 2.73); $this->User_Update($oUserTopic); return $iDeltaRating; }