Отсчет времени до сбора

  • Автор темы skroliks
  • Дата начала
MegaGoblin
PHP, JS, AJAX, CSS, HTML
Участник
Сообщения
322
Реакции
72
  • #21
Так тебе надо чтобы оно автоматически собиралось раз в 20 секунд? Или чтобы нельзя было собирать ресурсы чаще, чем раз в 20 секунд.

Тот код, который ты скинул - как по мне, там логика неверная. Подумай немного :D
 
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
  • #22
НУ смотри.. У меня корабли..
Нужно чтобы было так - Нажимаешь на кнопку - отправляешь их в рейс. Время рейса к примеру 20 секунд. Нужно чтобы после нажатия кнопки через 20 секунд корабли типа прилетали и отгружали ресурсы на склад. Потом опять можно отправлять.
Чтобы нельзя было их отправить до того времени пока не пройдет 20 секунд я сделал. А нужно еще сделать чтобы ресурсы отгружались не сразу после нажатия кнопки (как сейчас) а после 20 секунд.
 
MegaGoblin
PHP, JS, AJAX, CSS, HTML
Участник
Сообщения
322
Реакции
72
  • #23
Ок скажу твою ошибку. У тебя идет обновление времени всегда. Собрал или нет - твоему коду все равно

$db->Query("UPDATE db_users_b SET last_sbor_a = '".time()."' WHERE id = '$usid' LIMIT 1");


А должно быть только в случае успешного сбора, т/е/ после условия с проверкой на 20 секунд.
 
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
  • #24
Ну вот, сделал так:

if(isset($_POST["item_a"])){

$sbor_a = (20 - (time() - $user_data["last_sbor_a"]));

if ($sbor_a <=0){

if ($user_data["a_t"] > 0){

if ($mesto_a <= $canput){

$db->Query("UPDATE db_users_b SET reis_a_t = '$hangar_a' WHERE id = '$usid' LIMIT 1");

echo "<center><font color = 'red'><b>Корабли успешно отправлены в рейс! До возврата: 20 секунд! </b></font></center><BR />";

$db->Query("SELECT * FROM db_users_b WHERE id = '$usid' LIMIT 1");
$user_data = $db->FetchArray();
$time_a = (time() - $user_data["last_sbor_a"]);

if ($time_a >= 20){

$db->Query("UPDATE db_users_b SET last_sbor_a = '".time()."' WHERE id = '$usid' LIMIT 1");
$db->Query("SELECT * FROM db_users_b WHERE id = '$usid' LIMIT 1");
$user_data = $db->FetchArray();
# Добавляем привезенные ресурсы на склад


Все как раньше - после нажатия на кнопку ресурсы сразу на склад капают. if ($time_a >= 20){ - вообще не работает или игнорируется :(
 
MegaGoblin
PHP, JS, AJAX, CSS, HTML
Участник
Сообщения
322
Реакции
72
  • #25
Мы уже проходили это...
У тебя снова $time_a всегда больше нуля.

Найди ошибку сам.
 
Freeman18rus
Участник
Сообщения
26
Реакции
3
  • #26
<?PHP
# Сколько привезут корабли
$mesto_a = (($user_data["a_t"]*$sonfig_site["a_in_h"]));

# Запуск кораблей
if(isset($_POST["item_a"])){
$db->Query("UPDATE db_users_b SET last_sbor_a = '".time()."' WHERE id = '$usid' LIMIT 1");
$db->Query("SELECT * FROM db_users_b WHERE id = '$usid' LIMIT 1");
$user_data = $db->FetchArray();
$time_a = (time() - $user_data["last_sbor_a"]);

if ($time_a <= 20){

if ($user_data["a_t"] > 0){

if ($mesto_a <= $canput){



$db->Query("UPDATE db_users_b SET reis_a_t = '$hangar_a' WHERE id = '$usid' LIMIT 1");

echo "<center><font color = 'red'><b>Корабли успешно отправлены в рейс! До возврата: 20 секунд! </b></font></center><BR />";





# Добавляем привезенные ресурсы на склад
$res_a = ($sonfig_site["a_in_h"]*$user_data["a_t"]);
$db->Query("UPDATE db_users_b SET a_b = a_b + '$res_a' WHERE id = '$usid' LIMIT 1");

$db->Query("SELECT * FROM db_users_b WHERE id = '$usid' LIMIT 1");
$user_data = $db->FetchArray();


} else echo "<center><font color = 'red'><b>На складе не хватает места!</b></font></center><BR />";

} else echo "<center><font color = 'red'><b>У вас нет кораблей данного типа для отправки</b></font></center><BR />";

} else echo "<center><font color = 'red'><b>Корабли еще не вернулись из рейса! До возврата: {$time_a} секунд! </b></font></center><BR />";

}

?>
Я так примерно понимаю, не могу сам проверить, пробуй
 
MegaGoblin
PHP, JS, AJAX, CSS, HTML
Участник
Сообщения
322
Реакции
72
  • #27
Freeman18rus написал(а):
<?PHP
# Сколько привезут корабли
$mesto_a = (($user_data["a_t"]*$sonfig_site["a_in_h"]));

# Запуск кораблей
if(isset($_POST["item_a"])){
$db->Query("UPDATE db_users_b SET last_sbor_a = '".time()."' WHERE id = '$usid' LIMIT 1");
$db->Query("SELECT * FROM db_users_b WHERE id = '$usid' LIMIT 1");
$user_data = $db->FetchArray();
$time_a = (time() - $user_data["last_sbor_a"]);

if ($time_a <= 20){

if ($user_data["a_t"] > 0){

if ($mesto_a <= $canput){



$db->Query("UPDATE db_users_b SET reis_a_t = '$hangar_a' WHERE id = '$usid' LIMIT 1");

echo "<center><font color = 'red'><b>Корабли успешно отправлены в рейс! До возврата: 20 секунд! </b></font></center><BR />";





# Добавляем привезенные ресурсы на склад
$res_a = ($sonfig_site["a_in_h"]*$user_data["a_t"]);
$db->Query("UPDATE db_users_b SET a_b = a_b + '$res_a' WHERE id = '$usid' LIMIT 1");

$db->Query("SELECT * FROM db_users_b WHERE id = '$usid' LIMIT 1");
$user_data = $db->FetchArray();


} else echo "<center><font color = 'red'><b>На складе не хватает места!</b></font></center><BR />";

} else echo "<center><font color = 'red'><b>У вас нет кораблей данного типа для отправки</b></font></center><BR />";

} else echo "<center><font color = 'red'><b>Корабли еще не вернулись из рейса! До возврата: {$time_a} секунд! </b></font></center><BR />";

}

?>
Я так примерно понимаю, не могу сам проверить, пробуй
У тебя тоже ошибка.
$db->Query("UPDATE db_users_b SET last_sbor_a = '".time()."' WHERE id = '$usid' LIMIT 1");
$db->Query("SELECT * FROM db_users_b WHERE id = '$usid' LIMIT 1");
$user_data = $db->FetchArray();
$time_a = (time() - $user_data["last_sbor_a"]);


$user_data["last_sbor_a"])
у тебя равно time();
Поэтому всегда $time_a будет равно нулю
 
Freeman18rus
Участник
Сообщения
26
Реакции
3
  • #28
Да да я уже понял но в остальном вроде верно
 
MegaGoblin
PHP, JS, AJAX, CSS, HTML
Участник
Сообщения
322
Реакции
72
  • #29
Freeman18rus написал(а):
Да да я уже понял но в остальном вроде верно
Вроде верно у него тоже было, надо лишь чуть-чуть подправить
 
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
  • #30
Сделал так:

# Запуск кораблей
if(isset($_POST["item_a"])){

$db->Query("SELECT * FROM db_users_b WHERE id = '$usid' LIMIT 1"); //
перенес данные о переменной time_a сюда
$user_data = $db->FetchArray();
$time_a = (time() - $user_data["last_sbor_a"]);
$sbor_a = (20 - (time() - $user_data["last_sbor_a"]));

if ($sbor_a <=0){
if ($user_data["a_t"] > 0){
if ($mesto_a <= $canput){

$db->Query("UPDATE db_users_b SET reis_a_t = '$hangar_a' WHERE id = '$usid' LIMIT 1");
echo "<center><font color = 'red'><b>Корабли успешно отправлены в рейс! До возврата: 20 секунд! </b></font></center><BR />";

if ($time_a >= 20){

$db->Query("UPDATE db_users_b SET last_sbor_a = '".time()."' WHERE id = '$usid' LIMIT 1");
$db->Query("SELECT * FROM db_users_b WHERE id = '$usid' LIMIT 1");
$user_data = $db->FetchArray();

# Добавляем привезенные ресурсы на склад


И потом для проверки поставил вместо sbor_a - time_a:
} else echo "<center><font color = 'red'><b>Корабли еще не вернулись из рейса! До возврата: {$time_a} секунд! </b></font></center><BR />";

До возврата увеличивается от 0 до 20 и потом можно опять запускать. Т.е. time_a работает и отсчет каждую секунду идет.
НО! ресурсы все так же отгружаются сразу после нажатия на кнопку а не через 20 секунд :(
 
Freeman18rus
Участник
Сообщения
26
Реакции
3
  • #31
Сделай кнопку собрать и отправить ;)
 
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
  • #32
Freeman18rus написал(а):
Сделай кнопку собрать и отправить ;)
Ну это по сути оно и есть.. НО:
Когда я только купил корабль - получается я сразу же могу собрать ресурсы, а нужно чтобы сначала корабль полетел и прилетел, а потом только ресурсы добавились :(
 
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
  • #33
Я понял, что переменная time_a совсем не нужна - уже есть переменная sbor_a - и она прекрасно работает.
Вопрос в том - как теперь сделать, чтобы не ресурсы сразу собирались и потом корабль летел, а наоборот :(
 
Freeman18rus
Участник
Сообщения
26
Реакции
3
  • #34
Так ты сам ответил на свой вопрос, у тебя сбор в любом случае будет по кнопке, а если ты купил корабль то нужно записать в базу последний сбор и отправить корабль, а первый сбор должен быть 0 по другому по моему тут ни как
 
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
  • #35
Это не подходит. Суть в том, что время полета корабля 12 часов. Во время полета я могу докупить еще корабль или корабли, но они не могут отправиться, пока не прилетели другие. Как-то так..
Думаю может сделать 2 кнопки - сбора и отправки в полет. Только нужно сделать, чтобы сбор не совершался, пока полет не окончился. Тоже та еще задачка..
 
Freeman18rus
Участник
Сообщения
26
Реакции
3
  • #36
Лучше сделать чтоб нельзя было купить пока не вернутся корабли, так проще задачу решать помоему это принцып фф
 
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
  • #37
Freeman18rus написал(а):
Лучше сделать чтоб нельзя было купить пока не вернутся корабли, так проще задачу решать помоему это принцып фф
Это нужно время полета заносить в бд и чтобы оно там считалось как-то.. В общем это для меня наверное еще очень сложно :(
 
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
  • #38
Блин.. Ну должно же быть все так просто: нажал на кнопочку, таймер пошел - таймер закончился, ресурсы собрались.. Почему же не получается? :(
 
Freeman18rus
Участник
Сообщения
26
Реакции
3
  • #39
Принцип php нажал кнопку выполнил действие, т.е. собрал и отправил, в фф не купишь ни чего пока сбор не произведешь
 
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
  • #40
в фф не купишь ни чего пока сбор не произведешь
это все прописано той же переменной last_sbor - удали ее и все что к ней относится - и покупай что хочешь когда хочешь..

Принцип php нажал кнопку выполнил действие, т.е. собрал и отправил
что-то мне кажется что это не так.. при чем тут php? это просто язык..
 
Сверху