<? class Quests { public $free_x = 28, $data = array(), $error = ''; public function testGood($pl, $uid) { if(!is_array($pl)) { $pl = mysql_fetch_array(mysql_query('SELECT * FROM `quests` WHERE `id` = "'.$pl.'" LIMIT 1')); } $r = 1; $qlst = mysql_fetch_array(mysql_query('SELECT `id`, `vals` FROM `actions` WHERE `uid` = "'.$uid.'" AND `vars` = "start_quest'.$pl['id'].'" LIMIT 1')); if(isset($qlst['id']) && $qlst['vals'] != 'win' && $qlst['vals'] != 'end' && $qlst['vals'] != 'bad') { $r = 2; } unset($qlst, $qlst2); $d = $this->expl($pl['tr_date']); if(isset($d['tr_endq'])) { $i = 0; $e = explode(',', $d['tr_endq']); while($i < count($e)) { $qlst = mysql_fetch_array(mysql_query('SELECT `id`, `vals` FROM `actions` WHERE `uid` = "'.$uid.'" AND `vars` = "start_quest'.$e[$i].'" AND `vals` = "win" LIMIT 1')); if(!isset($qlst['id'])) { $r = 3; } $i++; } unset($qn, $qlst, $qlst2); } if(isset($d['tr_zdr'])) { $qlst = mysql_fetch_array(mysql_query('SELECT * FROM `actions` WHERE `uid` = "'.$uid.'" AND `vars` = "start_quest'.$pl['id'].'" AND `vals` != "go" ORDER BY `time` DESC LIMIT 1')); if($qlst['time']+($d['tr_zdr']*60*60)-time() > 0) { $r = 4; } unset($qlst); } if(isset($d['tr_tm1'])) { $d['tr_tm1'] = str_replace('d', date('d'), $d['tr_tm1']); $d['tr_tm1'] = str_replace('m', date('m'), $d['tr_tm1']); $d['tr_tm1'] = str_replace('y', date('y'), $d['tr_tm1']); $d['tr_tm2'] = str_replace('d', date('d'), $d['tr_tm2']); $d['tr_tm2'] = str_replace('m', date('m'), $d['tr_tm2']); $d['tr_tm2'] = str_replace('y', date('y'), $d['tr_tm2']); } if(isset($d['tr_raz'])) { $qlst = $this->testAction('SELECT `id` FROM `actions` WHERE `uid` = "'.$uid.'" AND `vars` = "start_quest'.$pl['id'].'" LIMIT '.$d['tr_raz'], 2); if($d['tr_raz'] > 0 && $d['tr_raz']-$qlst[0] <= 0) { $r = 5; } unset($qlst); } if(isset($d['tr_raz2'])) { $qlst = $this->testAction('SELECT `id` FROM `actions` WHERE `uid` = "'.$uid.'" AND `vars` = "start_quest'.$pl['id'].'" AND `vals` != "go" AND `vals` != "win" LIMIT '.$d['tr_raz2'], 2); if($d['tr_raz2']-$qlst[0] <= 0) { $r = 6; } unset($qlst); } return $r; } public function __clone() { trigger_error('Дублирование не допускается.', E_USER_ERROR); } public function startq($id, $val = NULL, $uid) { $pl = mysql_fetch_array(mysql_query('SELECT * FROM `quests` WHERE `delete` = "0" AND `id` = "'.mysql_real_escape_string($id).'" LIMIT 1')); if(isset($pl['id'])) { $tms = (time()+60*60*$pl['time']); $this->addAction(time(), 'start_quest'.$pl['id'], 'go', $uid, $tms); $this->error = 'Вы успешно получили задание "'.$pl['name'].'"'; } else { $this->error = 'Не удалось получить данное задание ...'; } } public function list_quest($pl, $u) { $r = ''; $t = ''; $nagr = ''; $tr = ''; $qlst = mysql_fetch_array(mysql_query('SELECT * FROM `actions` WHERE `uid` = "'.$u.'" AND `vars` = "start_quest'.$pl['id'].'" ORDER BY `time` DESC LIMIT 1')); $ds = $this->expl($pl['win_date']); if(isset($ds['add_cr'])) { $nagr .= 'Деньги : '.$ds['add_cr'].' кр. '; } if(isset($ds['add_point'])) { $nagr .= ' Репутация : '.$ds['add_point'].' ед. '; } if(isset($ds['add_exp'])) { $nagr .= ' Опыт : '.$ds['add_exp'].' ед. '; } $d = $this->expl($pl['act_date']); if(isset($d['heal'])) { $tr .= '<small>Вылечить <b>'.$d['heal'].'</b> игроков от травм.</small><br />'; } if(isset($d['tr_win_haot'])) { $tr .= '<small>Выйграть <b>'.$d['tr_win_haot'].'</b> хаотических поединков.</small><br />'; } if(isset($d['kill_clone'])) { $tr .= '<small>Выйграть <b>'.$d['kill_clone'].'</b> поединков против своего клона.</small><br />'; } // if(isset($d['tr_win'])) { // $tr .= '<small>Выйграть <b>'.$d['tr_win'].'</b> физических поединков против игроков.</small><br />'; // } if(isset($d['kill_bot'])) { $x = ''; $ex = explode(',', $d['kill_bot']); $i = 0; while($i < count($ex)) { $ex2 = explode('=', $ex[$i]); $bot2 = mysql_fetch_array(mysql_query('SELECT `id`, `login` FROM `users` WHERE `id` = "'.$ex2[0].'" LIMIT 1')); if(isset($bot2['id'])) { $x .= ' • <b>'.$bot2['login'].'</b> '.$ex2[1].'<br />'; } $i++; } if($x != '') { $x = trim($x, ', '); $tr .= '<small>Убить ботов: <br />'.$x.'</small>'; } } if($tr != '') { $ts = 'Требования :<br />'.$tr; } $za = ''; if($qlst['time']+($pl['heal']*60*60)-time() > 0) { $tms = $this->timeOut($qlst['time']+($pl['heal']*60*60)-time()); $za = '<b style=\'color: Red;\'>Задержка еще : '.$tms.'</b><br />'; } $d = $this->expl($pl['tr_date']); $r .= '<div class="ctContainerA quest_target_item">'; $r .= '<div class="ctTitle"><a class="action-start" href="?quid='.$pl['id'].'">я берусь</a>Задание "'.$pl['name'].'"</div>'; $r .= '<div><div>'.$pl['info'].'<hr style=\'width: 75%;\' /></div> <div> <div><span style=\'font-weight: bold;\'>Награда :</span> '.$nagr.'</div> </div> <div> <span style=\'font-weight: bold;\'>Время на выполнение:</span> '.$pl['time'].' ч.</span><br /> '.$ts.$za.' <div> Задание для ['.$pl['min_lvl'].'-'.$pl['max_lvl'].'] уровней, с задержкой '.$pl['heal'].' ч. </div> </div> </div> '; $r .= '</div>'; return $r; } public function info($pl, $uid) { $r = ''; $t = ''; $qst = mysql_fetch_array(mysql_query('SELECT * FROM `actions` WHERE `uid` = "'.$uid.'" AND `vars` = "start_quest'.$pl['id'].'" AND `vals` = "go" LIMIT 1')); $d = $this->expl($pl['tr_date']); if(isset($d['tr_endq'])) { $t .= 'Завершить квесты : '; $i = 0; $e = explode(',', $d['tr_endq']); while($i <= count($e)) { if($e[$i] > 0) { $qn = mysql_fetch_array(mysql_query('SELECT `name` FROM `quests` WHERE `id` = "'.$e[$i].'" LIMIT 1')); if(isset($qn['name'])) { $t .= '"'.$qn['name'].'", '; } } $i++; } $t = trim($t, ', '); $t .= '<br />'; unset($qn); } if(isset($d['tr_botitm'])) { $t .= 'Из ботов выпадают предметы :<ul>'; $e = explode('|', $d['tr_botitm']); $i = 0; while($i < count($e)) { $j = 0; $e2 = explode('-', $e[$i]); if($e2[0] > 0) { $qn = mysql_fetch_array(mysql_query('SELECT `login` FROM `users` WHERE `id` = "'.$e2[0].'" LIMIT 1')); $t .= ' • Из "'.$qn['login'].'" выпадает: '; } else { $t .= ' • Из любых ботов выпадает: '; } $j = 0; $e3 = explode(',',$e2[1]); while($j < count($e3)) { $e4 = explode('=', $e3[$j]); $qi = mysql_fetch_array(mysql_query('SELECT `id`, `name`, `img` FROM `shop` WHERE `id` = "'.$e4[0].'" LIMIT 1')); $t .= '<img src="/i/sh/'.$qi['img'].'" style="max-height: 12px;"> '.$qi['name'].', '; $j++; } $t = trim($t, ', '); $i++; } $t .= '<br />'; unset($qn, $qi, $e2, $e3, $e4); } if(isset($d['tr_winitm'])) { $t .= 'После победы выпадают предметы :<br />'; $e = explode('|', $d['tr_winitm']); $i = 0; while($i < count($e)) { $j = 0; $e2 = explode('-', $e[$i]); $t .= ' • '; if($e2[0] > 0) { $t .= 'Из людей выпадает : '; } else { $t .= 'Из ботов выпадает : '; } $j = 0; $e3 = explode(',', $e2[1]); while($j < count($e3)) { $e4 = explode('=', $e3[$j]); $qi = mysql_fetch_array(mysql_query('SELECT `id`, `name`, `img` FROM `shop` WHERE `id` = "'.$e4[0].'" LIMIT 1')); $t .= '<img src="/i/sh/'.$qi['img'].'" style="max-height: 12px;"> '.$qi['name'].', '; $j++; } $t = trim($t, ', '); $t .= '<br />'; $i++; } unset($qn, $qi, $e2, $e3, $e4); } if(isset($d['tr_zdr'])) { $qlst = mysql_fetch_array(mysql_query('SELECT * FROM `actions` WHERE `uid` = "'.$uid.'" AND `vars` = "start_quest'.$pl['id'].'" AND `vals` != "go" LIMIT 1')); $t .= 'Задержка между выполнением задания : '.$this->timeOut($d['tr_zdr']*60*60); if($qlst['time']+($d['tr_zdr']*60*60)-time() > 0) { $t .= '<small>(Осталось : '.$this->timeOut($qlst['time']+($d['tr_zdr']*60*60)-time()).' ч.)</small>'; } $t .= '<br />'; unset($qlst); } if(isset($d['tr_tm1'])) { $d['tr_tm1'] = str_replace('d', date('d'), $d['tr_tm1']); $d['tr_tm1'] = str_replace('m', date('m'), $d['tr_tm1']); $d['tr_tm1'] = str_replace('y', date('y'), $d['tr_tm1']); $d['tr_tm2'] = str_replace('d', date('d'), $d['tr_tm2']); $d['tr_tm2'] = str_replace('m', date('m'), $d['tr_tm2']); $d['tr_tm2'] = str_replace('y', date('y'), $d['tr_tm2']); $t .= 'Период квеста : '.$d['tr_tm1'].' - '.$d['tr_tm2'].'<br />'; } if(isset($d['tr_raz'])) { if($d['tr_raz'] == -1) { $t .= 'Сколько еще раз можно выполнить задание: <b><small>бесконечно</small></b><br>'; } else { $qlst = $this->testAction('SELECT `id` FROM `actions` WHERE `uid` = "'.$uid.'" AND `vars` = "start_quest'.$pl['id'].'" LIMIT '.$d['tr_raz'], 2); $t .= 'Сколько раз можно выполнить задание: '.($d['tr_raz']-$qlst[0]).'<br />'; } unset($qlst); } if(isset($d['tr_raz2'])) { $qlst = $this->testAction('SELECT `id` FROM `actions` WHERE `uid` = "'.$uid.'" AND `vars` = "start_quest'.$pl['id'].'" AND `vals` != "go" AND `vals` != "win" LIMIT '.$d['tr_raz2'], 2); $t .= 'Осталось попыток выполнить задание : '.($d['tr_raz2']-$qlst[0]).'<br />'; unset($qlst); } $d = $this->expl($pl['act_date']); if(isset($d['kill_bot'])) { $x = ''; $ex = explode(',', $d['kill_bot']); $i = 0; if(isset($d['all_kill']) && $d['all_kill'] > 0 ) { while($i < count($ex)) { $x2 = 0; $ex2 = explode('=', $ex[$i]); if(isset($qst['id'])) { $x2 = $this->testAction('`uid` = "'.$uid.'" AND `time` > '.$qst['time'].' AND `vars` = "win_bot_'.$ex2[0].'" LIMIT '.$ex2[1], 2); $x2 = (0+$x2[0]); } $i++; } $bot2 = mysql_fetch_array(mysql_query('SELECT * FROM `users` WHERE `id` = "'.$ex2[0].'" LIMIT 1')); $bot2['id'] = $bot2['id']; if(isset($bot2['id'])){ $x .= ' • <b>'.$bot2['login'].'</b> ['.$x2.'/'.$d['all_kill'].']<br />'; } else { $x .= ' • <b>'.$pl['name'].'</b> ['.$x2.'/'.$d['all_kill'].']<br />'; } } else { while($i < count($ex)) { $x2 = 0; $ex2 = explode('=', $ex[$i]); $bot2 = mysql_fetch_array(mysql_query('SELECT * FROM `users` WHERE `id` = "'.$ex2[0].'" LIMIT 1')); if(isset($bot2['id'])) { if(isset($qst['id'])) { $x2 = $this->testAction('`uid` = "'.$uid.'" AND `time` > '.$qst['time'].' AND `vars` = "win_bot_'.$ex2[0].'" LIMIT '.$ex2[1], 2); $x2 = (0+$x2[0]); } $x .= ' • <b>'.$bot2['login'].'</b> ['.$x2.'/'.$ex2[1].']<br />'; } $i++; } } if($x != '') { $x = trim($x, ', '); $t .= 'Убить ботов: <br />'.$x.''; } unset($x, $ex, $x2, $bot2, $ex2); } if(isset($d['tr_win_haot'])) { $x = $this->testAction('`uid` = "'.$uid.'" AND `time` > "'.$qst['time'].'" AND `vars` = "win_haot" LIMIT 1', 2); $x = (0+$x[0]); $t .= 'Победить в хаотических поединках : ['.$x.'/'.$d['tr_win_haot'].']<br />'; unset($x); } if(isset($d['kill_clone'])) { $x = $this->testAction('`uid` = "'.$uid.'" AND `time` > "'.$qst['time'].'" AND `vars` = "kill_clone" LIMIT 1', 2); $x = (0+$x[0]); $t .= 'Победите в : ['.$x.'/'.$d['kill_clone'].'] физических боях с клоном.<br />'; unset($x); } if(isset($d['tr_win'])) { $x = $this->testAction('`uid` = "'.$uid.'" AND `time` > "'.$qst['time'].'" AND `vars` = "win_fiz" LIMIT 1', 2); $x = (0+$x[0]); $t .= 'Победите в : ['.$x.'/'.$d['tr_win'].'] физических против игроков.<br />'; unset($x); } if(isset($d['heal'])) { $x = $this->testAction('`uid` = "'.$uid.'" AND `time` > "'.$qst['time'].'" AND `vars` LIKE "heal%" AND `vars` != "heal_'.$uid.'" LIMIT 1', 2); $x = (0+$x[0]); $t .= 'Вылечите : ['.$x.'/'.$d['heal'].'] игроков от травм.<br />'; unset($x); } if(isset($d['tk_itm'])) { $ex = explode(',', $d['tk_itm']); $i = 0; $x = ''; while($i < count($ex)) { $ex2 = explode('=',$ex[$i]); $x2 = mysql_fetch_array(mysql_query('SELECT `koll` FROM `inventory` WHERE `prototype` = "'.mysql_real_escape_string($ex2[0]).'" AND `owner` = "'.$uid.'" LIMIT 1')); $bot2 = mysql_fetch_array(mysql_query('SELECT `id`, `name`, `img` FROM `shop` WHERE `id` = "'.mysql_real_escape_string($ex2[0]).'" LIMIT 1')); $x .= ' • <b>'.$bot2['name'].'</b> ['.$x2[0].'/'.$ex2[1].']<br />'; $i++; } if($x != '') { $x = trim($x, ', '); $t .= 'Собрать ресурсы : <br />'.$x.''; } } if($t != '') { $r .= '<b>Условия задания :</b><br />'.$t.'<br />'; $t = ''; } $ds = $this->expl($pl['win_date']); if(isset($ds['add_cr'])) { $t .= 'Деньги : '.$ds['add_cr'].' кр.<br />'; } if(isset($ds['add_point'])) { $t .= 'Репутация : '.$ds['add_point'].' ед.<br />'; } if(isset($ds['add_exp'])) { $t .= 'Опыт : '.$ds['add_exp'].' ед.<br />'; } if($t != '') { $r = '<b>Награда:</b><br />'.$t.'<br />'.$r; $t = ''; } if($t != '') { $r = '<br /><b>Действия задания :</b><br />'.$t.'<br />'.$r; $t = ''; } if($r == '') { $r = 'Дополнительная информация по заданию отсутствует'; } return $r; } public function endq($id, $tp, $user) { $pl = mysql_fetch_array(mysql_query('SELECT * FROM `quests` WHERE `delete` = "0" AND `min_lvl` <= "'.$user['level'].'" AND `max_lvl` >= "'.$user['level'].'" AND `id` = "'.mysql_real_escape_string($id).'" LIMIT 1')); $qlst = mysql_fetch_array(mysql_query('SELECT `id` FROM `actions` WHERE `uid` = "'.$user['id'].'" AND `vars` = "start_quest'.$pl['id'].'" AND `vals` = "go" LIMIT 1')); if(isset($qlst['id'])) { if($tp == 'end') { mysql_query('UPDATE `actions` SET `vals` = "end" WHERE `id` = "'.$qlst['id'].'" LIMIT 1'); $this->error = 'Вы успешно отказались от задания "'.$pl['name'].'"'; } elseif($tp == 'win') { mysql_query('UPDATE `actions` SET `vals` = "win" WHERE `id` = "'.$qlst['id'].'" LIMIT 1'); } } else { $this->error = 'Не удалось отказаться от задания ...'; } } public function testAction($filter, $tp) { if($tp == 1) { $ins = mysql_fetch_array(mysql_query('SELECT `id`, `uid`, `time`, `city`, `room`, `vars`, `ip`, `vals`, `val` FROM `actions` WHERE '.$filter.'')); } elseif($tp == 2) { $ins = mysql_fetch_array(mysql_query('SELECT COUNT(`id`) FROM `actions` WHERE '.$filter.'')); } return $ins; } public function timeOut($ttm) { $out = ''; $time_still = $ttm; $tmp = floor($time_still/2592000); $id = 0; if($tmp > 0) { $id++; if($id < 3) { $out .= $tmp." мес. "; } $time_still = $time_still-$tmp*2592000; } $tmp = floor($time_still/86400); if($tmp > 0) { $id++; if($id < 3) { $out .= $tmp." дн. "; } $time_still = $time_still-$tmp*86400; } $tmp = floor($time_still/3600); if($tmp > 0) { $id++; if($id < 3) { $out .= $tmp." ч. "; } $time_still = $time_still-$tmp*3600; } $tmp = floor($time_still/60); if($tmp > 0) { $id++; if($id < 3) { $out .= $tmp." мин. "; } } if($out == '') { if($time_still < 0) { $time_still = 0; } $out = $time_still.' сек.'; } return $out; } public function addAction($time, $vars, $vls, $uid, $val) { $ins = mysql_query('INSERT INTO `actions` (`uid`, `time`, `city`, `room`, `vars`, `ip`, `vals`, `val`) VALUES ("'.$uid.'", "'.$time.'", "capitalcity", "0", "'.mysql_real_escape_string($vars).'", "'.mysql_real_escape_string($_SERVER['HTTP_X_REAL_IP']).'", "'.mysql_real_escape_string($vls).'", "'.$val.'")'); if($ins) { return true; } else { return false; } } public function expl($d) { $i = 0; $e = explode(':|:', $d); while($i < count($e)) { $t = explode(':=:', $e[$i]); if(isset($t[0])) { $dr[$t[0]] = $t[1]; } $i++; } unset($i, $e, $t); return $dr; } public function winqst($id, $user) { $bad = 0; $qlst = mysql_fetch_array(mysql_query('SELECT * FROM `actions` WHERE `uid` = "'.$user['id'].'" AND `vars` = "start_quest'.$id.'" AND `vals` = "go" LIMIT 1')); $qu = mysql_fetch_array(mysql_query('SELECT * FROM `quests` WHERE `id` = "'.$id.'" LIMIT 1')); if(isset($qlst['id'])) { $d = $this->expl($qu['act_date']); if(isset($d['heal'])) { $x = $this->testAction('`uid` = "'.$user['id'].'" AND `time` > "'.$qlst['time'].'" AND `vars` LIKE "heal%" AND `vars` != "heal_'.$user['id'].'" LIMIT 1', 2); $x = ($x[0]+0); if($x < $d['heal']) { $bad = 1; } unset($x); } if(isset($d['tr_win'])) { $x = $this->testAction('`uid` = "'.$user['id'].'" AND `time` > "'.$qlst['time'].'" AND `vars` = "win_fiz" LIMIT 1', 2); $x = (0+$x[0]); if($x < $d['tr_win']) { $bad = 1; } unset($x); } if(isset($d['kill_clone'])) { $x = $this->testAction('`uid` = "'.$user['id'].'" AND `time` > "'.$qlst['time'].'" AND `vars` = "kill_clone" LIMIT 1', 2); $x = (0+$x[0]); if($x < $d['kill_clone']) { $bad = 1; } unset($x); } if(isset($d['tr_win_haot'])) { $x = $this->testAction('`uid` = "'.$user['id'].'" AND `time` > "'.$qlst['time'].'" AND `vars` = "win_haot" LIMIT 1', 2); $x = (0+$x[0]); if($x < $d['tr_win_haot']) { $bad = 1; } unset($x); } if(isset($d['kill_bot'])) { $ex = explode(',', $d['kill_bot']); $i = 0; while($i < count($ex)) { $x = 0; $ex2 = explode('=', $ex[$i]); $bot2 = mysql_fetch_array(mysql_query('SELECT `id`, `login` FROM `users` WHERE `id` = "'.$ex2[0].'" LIMIT 1')); if(isset($bot2['id'])) { if(isset($qlst['id'])) { $x = $this->testAction('`uid` = "'.$user['id'].'" AND `time` > "'.$qlst['time'].'" AND `vars` = "win_bot_'.$ex2[0].'"', 2); $x = ($x[0]+0); } } $i++; } if($x < $ex2[1]) { $bad = 1; } unset($x); } if($bad == 0) { $nagr = $this->expl($qu['win_date']); mysql_query('UPDATE `actions` SET `vals` = "win" WHERE `uid` = "'.$user['id'].'" AND `vars` = "start_quest'.$id.'" LIMIT 1'); if(isset($nagr['add_cr'])) { $user['money'] += $nagr['add_cr']; $c .= $nagr['add_cr'].' кр. '; } if(isset($nagr['add_point'])) { $user['doblest'] += $nagr['add_point']; if(isset($nagr['add_cr'])) { $c .= 'и '.$nagr['add_point'].' репутации '; } else { $c .= $nagr['add_point'].' репутации '; } } if(isset($nagr['add_exp'])) { $user['exp'] += $nagr['add_exp']; if(isset($nagr['add_cr']) || isset($nagr['add_point'])) { $c .= 'и '.$nagr['add_exp'].' опыта'; } else { $c .= $nagr['add_exp'].' опыта'; } } mysql_query('UPDATE `users` SET `money` = "'.$user['money'].'", `exp` = "'.$user['exp'].'", `doblest` = "'.$user['doblest'].'" WHERE `id` = "'.$user['id'].'" LIMIT 1'); $this->error = 'Вы успешно сдали задание!'; $text = '<font style="color: Red;">Внимание!</font> За успешно выполненное задание Вы получили : '.$c; $this->msg($text, '{[]}'.$user['login'].'{[]}', $user['room']); } else { $this->error = 'Не все условия задания были выполнены ...'; } } else { $this->error = 'Квест не найден ...'; } } public function msg($text, $who, $room) { $fp = fopen("/tmp/chat.txt", "a"); flock($fp, LOCK_EX); fputs($fp, ":[".time()."]:[{$who}]:[".($text)."]:[".$room."]\r\n"); fflush($fp); flock($fp, LOCK_UN); fclose($fp); } } $q = new Quests;