Surowce w MMORTS

Marek Szydełko
05.09.2015

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. ;)

 

 

 
 
Zgłoś swój pomysł na artykuł

Więcej w tym dziale Zobacz wszystkie