funchat/forumplugins/plugins/tasks/achivements.php

305 lines
8.9 KiB
PHP
Raw Permalink Normal View History

2025-06-02 10:01:12 +02:00
<?php
/**
* MyBB 1.6
* Copyright 2012 Edson Ordaz, All Rights Reserved
*
* Email: edsordaz@gmail.com
* WebSite: http://www.mybb-es.com
*
* $Id: achivements.php 2012-05-27Z Edson Ordaz $
*
* UPDATED: Version 2.5
*
* + Pone todos los logros (de postbit y de perfil) como
* visibles para todo el foro (tomando en cuenta que los del
* postbit solo mostrara los que el administrador tiene permitido.
* + Se agrega nueva configuracion para dar logros a usuarios inactivos.
* + Se dan logros por logros
*/
function task_achivements($task)
{
global $db, $mybb;
if($mybb->settings['achivements_enable'] == 1)
{
require_once MYBB_ROOT."inc/plugins/achivements/include/mp.php";
$achivements = array();
$query = $db->simple_select('achivements');
while ($achivement = $db->fetch_array($query))
{
$achivements[] = $achivement;
}
$db->free_result($query);
$userachivements = array();
$uquery = $db->simple_select("user_achivements", "*");
while($usera = $db->fetch_array($uquery))
{
$userachivements[$usera['uid']][$usera['aid']] = true;
}
$users = array();
$taskusersoffline = '';
if($mybb->settings['achivements_taskuseroffline'] == 0)
{
$taskusersoffline = "`lastactive` >= '{$task['lastrun']}'";
}
$query = $db->simple_select("users", "*", $taskusersoffline);
while($user = $db->fetch_array($query))
{
$users[$user['uid']] = $user;
}
$insert_achivements = array();
$countachivements = 0;
$countusers = 0;
$max_postcount=0;
$max_threadcount=0;
$max_repcount=0;
$max_timecount=0;
$max_regdatecount=0;
foreach ($users as $uid => $user)
{
$sendmp = unserialize($mybb->settings['achivements_sendmp']);
foreach($achivements as $achivement)
{
switch($achivement['type'])
{
case "post":
if (!isset($userachivements[$uid][$achivement['id']]) || empty($userachivements[$uid][$achivement['id']]))
{
if($achivement['requirement'] <= intval($user['postnum']))
{
if($mybb->settings['achivements_showonlycurrent'] == 1)
{
if($max_postcount < $achivement['requirement'])
{
$max_postcount = $achivement['requirement'];
++$countachivements;
unset($insert_achivements[$uid]['posts']);
$insert_achivements[$uid]['posts'][] = $achivement['id'];
if($sendmp['posts'] == 1)
{
send_mp_achivement_new($uid, 'posts', $achivement['id']);
}
}
}
else
{
++$countachivements;
$insert_achivements[$uid]['posts'][] = $achivement['id'];
if($sendmp['posts'] == 1)
{
send_mp_achivement_new($uid, 'posts', $achivement['id']);
}
}
}
}
break;
case "threads":
if (!isset($userachivements[$uid][$achivement['id']]) || empty($userachivements[$uid][$achivement['id']]))
{
if($achivement['requirement'] <= intval($user['threads']))
{
if($mybb->settings['achivements_showonlycurrent'] == 1)
{
if($max_threadcount < $achivement['requirement'])
{
$max_threadcount = $achivement['requirement'];
++$countachivements;
unset($insert_achivements[$uid]['threads']);
$insert_achivements[$uid]['threads'][] = $achivement['id'];
if($sendmp['threads'] == 1)
{
send_mp_achivement_new($uid, 'threads', $achivement['id']);
}
}
}
else
{
++$countachivements;
$insert_achivements[$uid]['threads'][] = $achivement['id'];
if($sendmp['threads'] == 1)
{
send_mp_achivement_new($uid, 'threads', $achivement['id']);
}
}
}
}
break;
case "rep":
if (!isset($userachivements[$uid][$achivement['id']]) || empty($userachivements[$uid][$achivement['id']]))
{
if($achivement['requirement'] <= intval($user['reputation']))
{
if($mybb->settings['achivements_showonlycurrent'] == 1)
{
if($max_repcount < $achivement['requirement'])
{
$max_repcount = $achivement['requirement'];
++$countachivements;
unset($insert_achivements[$uid]['rep']);
$insert_achivements[$uid]['rep'][] = $achivement['id'];
if($sendmp['reputation'] == 1)
{
send_mp_achivement_new($uid, 'reputation', $achivement['id']);
}
}
}
else
{
++$countachivements;
$insert_achivements[$uid]['rep'][] = $achivement['id'];
if($sendmp['reputation'] == 1)
{
send_mp_achivement_new($uid, 'reputation', $achivement['id']);
}
}
}
}
break;
case "time":
if (!isset($userachivements[$uid][$achivement['id']]) || empty($userachivements[$uid][$achivement['id']]))
{
switch($achivement['requirement_unit'])
{
case "hours":
$timeonline = $achivement['requirement']*60*60;
break;
case "days":
$timeonline = $achivement['requirement']*60*60*24;
break;
case "weeks":
$timeonline = $achivement['requirement']*60*60*24*7;
case "months":
$timeonline = $achivement['requirement']*60*60*24*30;
break;
case "years":
$timeonline = $achivement['requirement']*60*60*24*365;
break;
}
if($timeonline <= intval($user['reputation']))
{
if($mybb->settings['achivements_showonlycurrent'] == 1)
{
if($max_timecount < $timeonline)
{
$max_timecount = $timeonline;
++$countachivements;
unset($insert_achivements[$uid]['time']);
$insert_achivements[$uid]['time'][] = $achivement['id'];
if($sendmp['timeonline'] == 1)
{
send_mp_achivement_new($uid, 'timeonline', $achivement['id']);
}
}
}
else
{
++$countachivements;
$insert_achivements[$uid]['time'][] = $achivement['id'];
if($sendmp['timeonline'] == 1)
{
send_mp_achivement_new($uid, 'timeonline', $achivement['id']);
}
}
}
}
break;
case "regdate":
if (!isset($userachivements[$uid][$achivement['id']]) || empty($userachivements[$uid][$achivement['id']]))
{
switch($achivement['requirement_unit'])
{
case "hours":
$regdate = $achivement['requirement']*60*60;
break;
case "days":
$regdate = $achivement['requirement']*60*60*24;
break;
case "weeks":
$regdate = $achivement['requirement']*60*60*24*7;
case "months":
$regdate = $achivement['requirement']*60*60*24*30;
break;
case "years":
$regdate = $achivement['requirement']*60*60*24*365;
break;
}
$rdate = TIME_NOW - $regdate;
if(intval($user['regdate']) <= $rdate)
{
if($mybb->settings['achivements_showonlycurrent'] == 1)
{
if($max_regdatecount < intval($user['regdate']))
{
$max_regdatecount = intval($user['regdate']);
++$countachivements;
unset($insert_achivements[$uid]['regdate']);
$insert_achivements[$uid]['regdate'][] = $achivement['id'];
if($sendmp['regdate'] == 1)
{
send_mp_achivement_new($uid, 'regdate', $achivement['id']);
}
}
}
else
{
++$countachivements;
$insert_achivements[$uid]['regdate'][] = $achivement['id'];
if($sendmp['regdate'] == 1)
{
send_mp_achivement_new($uid, 'regdate', $achivement['id']);
}
}
}
}
break;
case "archivements":
$achs = explode('|',$achivement['required_achivements']);;
$error = 0;
if(!empty($achs))
{
foreach($achs as $ar)
{
if(empty($userachivements[$uid][$ar]))
{
++$error;
}
}
if($error == 0)
{
if (!isset($userachivements[$uid][$achivement['id']]) || empty($userachivements[$uid][$achivement['id']]))
{
++$countachivements;
$insert_achivements[$uid]['archivements'][] = $achivement['id'];
if($sendmp['achivements'] == 1)
{
send_mp_achivement_new($uid, 'achivement', $achivement['id']);
}
}
}
}
break;
}
}
++$countusers;
}
foreach($insert_achivements as $uid => $ach){
foreach($ach as $key => $v){
foreach($v as $a){
$update = array(
"uid" => $uid,
"aid" => $a,
"showprofile"=>1,
"showpostbit"=>1
);
$db->insert_query("user_achivements", $update);
}
}
}
$tasklog = "Checked {$countusers} Users and gave out {$countachivements} Achivements in total.";
}else{
$tasklog = "Achivements deactivated.";
}
add_task_log($task, $tasklog);
}
?>