А использование таймера принципиально? Почему бы, просто, не вывести "Вы закончите работу в 22:05 30 февраля" Классическая ошибка, которую совершают проектировщики абсолютно надёжных систем, - недооценка изобретательности клинических идиотов.
jiumx60rus, я же не говорил что я мастер про и знаю абсолютно все основы..
Добавлено (30.07.2012, 21:41) --------------------------------------------- Nosorog, нет не принципиально:)
Добавлено (31.07.2012, 03:37) --------------------------------------------- не знаю даже, писать мне о еще одной моей проблеме или нет, просто есть люди, которые незнание воспринимают во штыки....но все же)
вообщем то работает, но через раз, иногда выдает противника , а иногда ничего не выдает) происходит все так, игрок на арене вводит уровень противника, ему рандомом выводит его.... вот мой запрос в базу, может я не правильно написал?
Code
$rnd = rand(1, mysql_result(mysql_query("SELECT MAX(id) FROM users"),0)); $res = mysql_query("SELECT * FROM users WHERE lvl= '".$lvl_GET."' AND id='".$rnd."' AND login <> '".$login1."' LIMIT 1"); $my = mysql_fetch_array($res);
vladboss, проблема в том, что ты сначала случайным образом выбираешь ид (носорог правильно сказал, что запись с этим ид могла быть удалена, но не это здесь проблема), а потом задаешь условие
Code
lvl= '".$lvl_GET."' AND id='".$rnd."'
Если у игрока с выбранным ид уровень не соответствует введенному игроком, то этот запрос ничего вернет - условие И выполнено не будет. Чем больше будет игроков с разными уровнями, тем реже будет получаться хоть какой-то результат.
Решение (мое, не факт что лучшее):
Code
$res = mysql_query("SELECT * FROM users WHERE lvl= '".$lvl_GET."' AND login <> '".$login1."'"); $my = mysql_fetch_array($res); $j = count($my); $arr_index= rnd(0, $j); $result = $my[$arr_index];
Ну попробую я...то есть ты вводишь id врага, далее сервер должен из всех юзеров вернуть одного этого-же уровня, что и игрок? А то вопрос не очень понял...
Code
$q = mysql_query("SELECT * FROM `users` WHERE lvl = '".$lvl_get ."' ORDER BY RAND() LIMIT 1"); //логика: выбираем одного юзера из всех такого же // уровня, как и игрок (выбор рандомен) $arr = mysql_fetch_assoc($q);
Писал на скорую руку, может тему плохо прочитал... пусто!)
Сообщение отредактировал gmmmm - Вторник, 31 Июля 2012, 20:44
gmmmm, во, этот вариант намного лучше предложенного мной. Nosorog, а этот вариант, извини конечно но через задницу. И он не будет работать как надо, потому что выдаст результат только если абсолютно случайный игрок будет иметь нужный уровень Discord: alpotapov#1741
Теперь полностью рабочий пример. Тестил на своем хостинге, создав таблицу users с полями id, lvl, добавил множество элементов...
Немного подумав, пришел к выводу, что я и авторы предыдущих постов разработали не правильную логику. Нужно сначала выбрать все записи с lvl = 1 например (1,5,8,9 например это будет), далее собрать эти элементы в массив и перемешав функцией shuffle мы получаем рандомный результат.
Code
<?php $q = mysql_query("SELECT * FROM `users` WHERE lvl = '1'");
Nosorog, а этот вариант, извини конечно но через задницу
Интересно, через что прошел твой пример?
Quote (gmmmm)
ORDER BY RAND() LIMIT 1
Этот вариант у меня сразу отпал, т.к. имеет серьезные проблемы с производительностью.
Quote (gmmmm)
shuffle($key)
А вот это, ИМХО, правильное решение. Классическая ошибка, которую совершают проектировщики абсолютно надёжных систем, - недооценка изобретательности клинических идиотов.
gmmmm, что за жесть... Два запроса к базе, substr и explode против одного запроса к базе и rnd Вы, ребята, как знаете, но самый адекватный вариант - мой:
gmmmm, что за жесть... Два запроса к базе, substr и explode против одного запроса к базе и rnd Вы, ребята, как знаете, но самый адекватный вариант - мой:
Лучше будет 5 запросов к базе, если они выполняются быстрее, чем один. Вот этот тормозной запрос будет занимать меньше времени чем твоя конструкция: ORDER BY RAND() LIMIT Классическая ошибка, которую совершают проектировщики абсолютно надёжных систем, - недооценка изобретательности клинических идиотов.
спасибо всем огромное за то что не кинули в игнор и помогли:) gmmmm, все работает, спасибо) но ты забыл приписать то, чтобы сам себя не вытащил.. HerrPotapov, спасибо) блин но пустой экран выводит((( -помог ставь +
gmmmm, хех) так то еще парочка вопросов есть, но не сейчас, на днях отпишусь) если есть желание еще интересное разобрать:D
Добавлено (05.08.2012, 12:17) --------------------------------------------- gmmmm, такая ситуация: на арене(бой) хочу ограничить количество сражений по времени т.е. сразился 2 раза и следующий раз только через 4 минуты, и так все время) у меня есть задумка..я испробывал ее-работает частично, помоги испрвить ошибки или что то новое подскажи)
я сделал так: в БД таблица 'war_time' со значением "2"(количество боев) на арене после того как прошел бой, в базу в таблице 'war_time' вычитаем -1 и так пока не дойдет до нуля т.е. два раза всего, каждый раз при входе на арену, замутил проверку, если значение в таблице равно 0, то через time() отсчитываем 4 минуты , НО у меня очень замудренно как то, и трудно разобраться из за чего не работает.. предложи пожалуйста решение проблемы) спасибо)
Таблица war_time boi - кол-во боев и поле time - 0,
Code
if ($boi == 0) { if ($time == 0) заносим в базу time() + 240(4min) echo "лимит!"; else тянем из бд время if ($time > time()) echo "рано еще"; else обновляем базу time = 0 boi + 2 } else $boi - 1 и тут сам бой..
вот моя логика, осталось привести ее в рабочее состояние. Додумывай пусто!)