Вопрос-Ответ по php

Печать RSS
6601
Кураторы темы:


Землянин
0
3950. Ботаник eGo, я хочу организовать, что-то наподобие игры, т.е. сытость, определение в процентах сыт ли он или голоден, и хочу, чтоб через определенное время сытость персонажа уменьшалась, при этом вписывалась в файл. smile ну, конечно мне нужен не сам код всего этого процесса, если есть таков, а именно подсчет времени, когда персонажу нужно уменьшить сытость! smile ну, неужели без cron'а никак не обойтись, ведь множество онлайн-игр работают без cron'а и успешно считывают состояние персонажа, изменяя их через определенное время?! smile
K

Транклюкаторщик
0
51, можно в принципе.
при каждом переходе юзера по страницам проверять время последней кормежки со временем через которое нужно есть, делать соответственные записи.
я еще не сталкивался с такого рода задачами, будет интересно послушать другие мнения
Изменил: KOZZ (18.11.2010 / 13:49)

ツ ツ ツ
0
Без крона можно, просто на странице где выводится эта информация, сначало узнавай время последнего изменения файла, отнимай от текущего времени ну и потом дели на то время через которое должны сниматься проценты, далее умножай количество процентов (те которые сниматься по времени) на полученый результат и отнимай от тех что в файле, только провеку делай, если в итоге выйдет отрицательное число, обнули его, чтоб в минуса не заходили проценты
Изменил: Lugaro (18.11.2010 / 14:00)
K

Транклюкаторщик
0
3953. .::lugaro::., ооо... еле прочитал, не то что понять %)

ツ ツ ツ
0
3954. Ботаник eGo, когда свет включат, если не забуду пример покажуD
K

Транклюкаторщик
0
3955. .::lugaro::., буду ждать smile

Землянин
0
а каким образом можно выявить время последнего редактирования? smile
K

Транклюкаторщик
0
3957, редактирования чего? если файла - filemtime

ツ ツ ツ
0
Ботаник eGo (18 Ноября 2010 / 13:06)
3955. .::lugaro::., буду ждать smile
<?php
$file = 'db.dat'; //Файл с процентами
$time = 60; //Время через которое снимать проценты (сек)
$minus = 5; //Сколько снимать процентов

$fileTime = filemtime($file);
$data = file_get_contents($file);

if($fileTime  < time()-$time){
	$data = $data - ((time()-$fileTime) / $time * $minus);
	$data = 0 > $data ? 0 : (int)$data;
	file_put_contents($file, $data);
}
echo $data.'%';
?>

Добавлено через 04:36 сек.
Только (int) лучше заменить на ceil, ато будет снимать на 1 процент больше указанного
Изменил: Lugaro (18.11.2010 / 14:51)

Землянин
0
даже стыдно стало, т.к. кроме filemtime() я ничего не знакомого не увидел, и что оказалось то - все так элементарно! sad спасибо. D
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск