Z powodu coraz to częstszych pytań o przyrost surowców w MMORTS, toteż ja postanowiłem przedstawić to w dość prostej formie. Artykuł zawiera w pełni działający PHP oraz JS. W zapytaniu do bazy użyłem LEFT JOIN'ów co szczególnie optymalizuje .
Na początku zajmiemy się PHP później przyjdzie czas na JS:
tworzymy tablę surowce (oczywiście ja tą tabelę wymyślam wy jeśli macie swoją pomijacie ten punkt)
z polami:
id int(11)
gracz varchar(255)
drewno bigint(11)
metal bigint(11)
glina bigint(11)
drewno_przyrost bigint(11)
metal_przyrost bigint(11)
glina_przyrost bigint(11)
Tabela mówi sama przez się.
Teraz zik php:
<?php
session_start();
include('config.php'); //względna ścieżka do pliku z podłączeniem do bazy
$time = time();
$czas = time()-$gracz['ost_akcja'];
if(isset($_SESSION['login'])){ //nazwa sesji może być inna, nie wiem jaką wy macie
$gracz = mysql_query(mysql_fetch_array("SELECT gracze.ost_akcja,gracze.login,surowce.glina,surowce.metal,surowce.glina,surowce.
drewno_przyrost,surowce.metal_przyrost,surowce.glina_przyrost FROM gracze LEFT JOIN surowce ON gracze.login = surowce.gracz WHERE gracze.login = '".$_SESSION['login']."'")) or die('Błąd: '.mysql_error());
$upd = mysql_query("UPDATE gracze SET ost_akcja = '".$time."' WHERE login = '".$_SESSION['login']."'");
if($czas > 0){ //zabezpieczenie przeciw ujemnym wartością
$drewno = $czas*$gracz['drewno_przyrost'];
$metal = $czas*$gracz['metal_przyrost'];
$glina = $czas*$gracz['glina_przyrost'];
$upd2 = mysql_query("UPDATE surowce SET drewno = drewno + ".$drewno.",metal = metal + ".$metal.",glina = glina + ".$glina." WHERE login = '".$_SESSION['login']."'");
}
$sur = query("SELECT glina,metal,glina,drewno_przyrost,metal_przyrost,glina_przyrost FROM surowce WHERE gracz = '".$_SESSION['login']."'") or die('Błąd: '.mysql_error());
}
?>
UWAGA! Jak widzicie w zapytaniu oprócz tabeli surowce używam także tabeli 'gracze' - dajcie jaką wy macie, tak by miała pole 'login'
Malutka funkcja dodająca do div'a określoną ilość surowca co 1 sek:
<script>
function Surowce(ilosc,przyrost,surowiec){
var wynik = ilosc+przyrost;
document.getElementById(surowiec).innerHTML = wynik;
setTimeout(function() { Surowce(wynik,przyrost,surowiec); }, 1000);
}
</script>
Jak widzicie mamy tu 3 dane w funkcji
- ilość czyli aktualna ilość surowca w naszym mieście
- przyrost czyli jaki jest przyrost surowca co 1sek
- surowiec czyli nazwa surowca i div'a
Następnie dodajemy np 3 div'y:
<div id="drewno"></div><div id="metal"></div><div id="glina"></div>
A w body dodajemy opcje w onload=""
Surowce(<?= $sur['drewno'];?>,<?= $sur['drewno_przyrost']; ?>,'drewno');
Surowce(<?= $sur['metal'];?>,<?= $sur['metal_przyrost']; ?>,'metal');
Surowce(<?= $sur['glina'];?>,<?= $sur['glina_przyrost']; ?>,'glina');
I tak oto gracz będzie widział przyrost surowców w czasie rzeczywistym a po każdym odświeżeniu będzie zapytanie do bazy update'ujące surowce gracza. ;)