PHP будни (FastCore)

Регистрация
9 Янв 2025
Сообщения
9
Розыгрыши
0
Реакции
4
Нет меня
Задаем несложные вопросы по PHP.
Например:
1.
Не разобрались в куске кода, исправить, доработать строки.
2. Излагаем свои мысли, кратко, ясно как можно ближе к сути.
3. Не флудим, не хамим, только по делу и по FastCore.
Задаем вопросы и излагаем свои мысли кратко.
 
Доброго времени суток. Возникла такая проблема, на движке FastCore (обычная ферма) сроки жизни у персонажей работают. Но есть проблема в том, что когда срок жизни у персонажа заканчивается и если юзер не успевает собрать со счетчика, то что накрутилось с последнего снятия средств. Счетчик автоматически обнуляется ... и не собранные средства сгорают.
Можно ли как то устранить эту проблему, тоесть при закрытии срока депозита, чтобы оставшиеся средства автоматически переводились на баланс для вывода. Или может Вы свое решение по этому поводу скажите....
За ранее спасибо!
 
Это стандартная проблема в данных скриптах. Где то делал, на какой то демке, не помню....
Поискать надо
 
Доброго времени суток. Возникла такая проблема, на движке FastCore (обычная ферма) сроки жизни у персонажей работают. Но есть проблема в том, что когда срок жизни у персонажа заканчивается и если юзер не успевает собрать со счетчика
Такой вариант пойдет?
PHP:
public function SumCalc2($per_h, $sum_tree, $last_sbor, $end_time) {
    if ($last_sbor > 0) {
        if ($sum_tree > 0 && $per_h > 0) {
            sprintf("%.6f", $sum_tree);
            $expired = ($last_sbor < $end_time) ? ($end_time- $last_sbor) : 0;
            $per_sec = $per_h / 3600;
            return round($per_sec * $expired, 4);
        } else { return 0; }
    } else { return 0; }
}
PHP:
# Ищем покупки
$update_speed = $db->query('SELECT * FROM db_store WHERE uid = '.$uid.' AND status = 1 ORDER BY end DESC')->fetchAll();
foreach($update_speed as $us) {

    # Если срок прошел
    if ($us['end'] < $time) {
 
        $speed_down = $us['speed'];
        $profit_us = $func->SumCalc2($speed_down, 1, $us['last'], $us['end']); // Подсчитываем прибыль

        # Убавляем скорость
        $db->query("UPDATE db_users SET speed = speed - '$speed_down' WHERE id = '$uid'");

        # Начисляем прибыль пользователю
        if ($profit_us > 0) {
            $money_add = $profit_us / $cnf['coint'];
            $money_b = ( (100 - $cnf['p_sell']) / 100) * $money_add;
            $money_p = ( ($cnf['p_sell']) / 100) * $money_add;

            $db->query("UPDATE db_users SET money_b = money_b + '$money_b', money_p = money_p + '$money_p', last = '$time' WHERE id = '$uid'");
        }

        # Меняем статус на 0
        $pers_id = $us['id'];
        $db->query("UPDATE db_store SET status = '0' WHERE id = '$pers_id'");
    }
}
 
Последнее редактирование:
Не пойдет.
У юзера несколько персонажей.
Один из них умер вчера, второй сегодня.
Юзер зашел через неделю и снял доход за неделю, то есть больше, чем положено.
Нужно учитывать не только время последнего сбора, но и окончание срока каждого из персонажей
 
Не пойдет.
У юзера несколько персонажей.
Один из них умер вчера, второй сегодня.
Юзер зашел через неделю и снял доход за неделю, то есть больше, чем положено.
Нужно учитывать не только время последнего сбора, но и окончание срока каждого из персонажей
в таком случае можно переделать функцию SumCalc чтобы время передавать какую хочешь. Сейчас поправлю.
 
в таком случае можно переделать функцию SumCalc чтобы время передавать какую хочешь. Сейчас поправлю.
Вот по этому, я и спросил, может Вы сами подскажите решение данной проблемы ... было бы не плохо, по тому как не один, я задавался подобным вопросом. Многие возьмут на заметку ... если допишите - код!
 
ну выше код вполне годный для простой фермы
 
Не согласен. Если перс за 10 руб., не критично.
А за 1К - это уже минус для админа
вероятно что-то упустил или не стандартный подход,
возможно эти трюки нужно делать непосредственно во время сбора прибыли
 
Плюс нужно учесть правильную работу и остановку счетчика, который обычно есть на странице сбора
Сообщение автоматически объединено:

Тут решение для стандарт скриптов типа GamePort

Фикс: сбор без потерь
 
Последнее редактирование:
Столкнулся с проблемой . Персонаж умер-а счётчик начал крутить в обратную сторону
 

Вложения

  • UACDJ4dqUcI.jpg
    UACDJ4dqUcI.jpg
    54.9 КБ · Просмотры: 5
Сталкивался с таким, но сейчас вообще не помню почему.
Если не ошибаюсь что-то в базе менялось в ручную у конкретного юзера
 
В базе db_users колонка speed со знаком минус?
Возможно рассинхрон идет, и когда персонаж умер, убавляется скорость

PHP:
# Если срок прошел
    if ($us['end'] < $time) {

        # Убавляем скорость
        $speed_down = $us['speed'];
        $db->query("UPDATE db_users SET speed = speed - '$speed_down' WHERE id = '$uid'");


но не до нуля, а со знаком минус.
( как вариант )
 
я попробую...завтра отпишусь
Сообщение автоматически объединено:

я попробую...завтра отпишусь
# Если срок прошел
if ($us['end'] < $time) {

# Убавляем скорость
$speed_down = $us['speed'];
$db->query("UPDATE db_users SET speed = speed - '$speed_down' WHERE id = '$uid'");

# Меняем статус на 0
$pers_id = $us['id'];
$db->query("UPDATE db_store SET status = '0' WHERE id = '$pers_id'");


# За регистрацию персонаж
$title = 'ЩЕНОК-ПОДАРОК';
$speed_pers = '0.005';
$end = $time+60*60*24*15;

# Создаем пользователя
$db->query('INSERT INTO db_users (login, email, pass, reg, speed, last, rid, referer, refsite) VALUES (?,?,?,?,?,?,?,?,?)', array($login, $email, $pass, $time, $speed_pers, $time, $rid, $referer, $site));
$lid = $db->LastInsert();

$db->query("INSERT INTO db_store (uid, tarif, title, speed, level, `add`, `end`, `last` ) VALUES ('$lid', '1', '$title', '$speed_pers', '1', '$time', '$end', '$time')");
 

Вложения

  • Opera Снимок_2025-01-19_100505_server221.hosting.reg.ru.png
    Opera Снимок_2025-01-19_100505_server221.hosting.reg.ru.png
    73 КБ · Просмотры: 5
Последнее редактирование:
а в db_store статус ставится на ноль , если срок прошел?
или статус 1 ?

Возможно статус не обнуляется и при заходе на страницу думает что персонаж активный.
Не зная кода , и не зная скрипт, как вариант, прописать условие, например:
Если speed меньше 0.000001 , то speed равно 0 .
Это конечно криво и через костыли, но в минус не будет уходить.
 
Разобрался с помощью ваших советов...всё работает(y)
 
Назад
Верх Низ