Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PHP Igrica problem sa vremenom

[es] :: PHP :: PHP Igrica problem sa vremenom

[ Pregleda: 1826 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Aolynk
Igor Jovanovic
PHP Developer
Beograd

Član broj: 273679
Poruke: 7
*.dynamic.isp.telekom.rs.



Profil

icon PHP Igrica problem sa vremenom24.11.2010. u 16:46 - pre 164 meseci
Pozdrav svim clanovima. Ne znam da li je ovo pocetnicko ako jeste neka prebace o PHP za pocentike...

E moj problem je sledeci...


Ja i moj tim smo napravili igricu koja je slicna Travianu, radjena je u PHP-u koja podrzava MySQL....
Sada u igrici se sve zasniva na vremenu i vremenskim zonama...
NPR: Da bi dogradili resursno polje na neki level morate da sacekate na primer 1:50 min.
E sada problem je sto to moze da se ubrza naravno ko se malo razume. Udje se na sat u racunaru i pomeris sat unapred automatski se i u browseru promeni vreme i njegovo resursno polje je zavrseno sto pravi veliki problem....Kako to da zaustavim???
Da ne moze da utice promena vremena na svom racunaru...

I da posto mi nesto nije jasno taj ceo proces vremenskih zona na internetu jel ima neko da mi uopste pojasni...

Da li neko moze na primer da promeni svoju vremensku zonu a da ona utice na server?
Ili nedaj boze da neko hakuje da postoji neki propust i menja zone kako hoce...

Kako to da obezbedim? Ja i par drugara smo testirali igricu radi super ima dosta matematickih proracuna nije previse komplikovana ali sada radimo na testiranju bezbednosti....

Bicu vam zahvalan na svakom odgovoru a uskoro cete i moci da probate igricu samo da sredimo bezbednost.
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
212.178.232.*

Sajt: norway.dakipro.com


+190 Profil

icon Re: PHP Igrica problem sa vremenom24.11.2010. u 17:01 - pre 164 meseci
Nema (ne bi trebalo) da vreme na racunaru utice na vreme desavanja u igri, jer vi (nadam se) sa date() ili slicnom funkcijom dobijate vreme servera, znaci 1.5h je isto toliko sta god ti menjao na svom racunaru i u kojoj god vremenskoj zoni bio, makar i promenio vremensku zonu.
Sta god da se salje serveru, proverite da li je zaista toliko vremena proslo (za dobijanje resursa od podnosenja zahteva ili kako vec treigerujete pocetak i kraj neke akcije) i to je to.
Jedino ako vam neko promeni vreme na serveru :)
 
Odgovor na temu

Aolynk
Igor Jovanovic
PHP Developer
Beograd

Član broj: 273679
Poruke: 7
*.dynamic.isp.telekom.rs.



Profil

icon Re: PHP Igrica problem sa vremenom24.11.2010. u 17:06 - pre 164 meseci
mi smo stavili igru na server i testirali taj slucaj i sto je najgore uspelo je.. Nije mi jasno kako ne bi postavio temu da to nije uspelo...
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
212.178.232.*

Sajt: norway.dakipro.com


+190 Profil

icon Re: PHP Igrica problem sa vremenom24.11.2010. u 17:27 - pre 164 meseci
Verujem ti da je uspelo, ali to je zato sto na serveru nemate uopste proveru da li je proslo dovoljno vremena od zahteva za resurse (ili kako vam vec igra radi) do trenutka kada je browser poslao zahtev za dopunu resursa (ili cega vec u igrici).
Znaci, vi morate nekako zabeleziti na serveru za usera kada je nesto zapocelo (recimo sakupljanje drva) i onda morate na serveru opet proveriti da li je to vreme zaista i proslo, a ne oslanjati se na flesh ili JS da to vreme vodi za vas... Takodje, to mora biti i automatski bez client-side poziva za te resurse, sta ako ugasi browser ili mu nestane net u trenutku kada treba da dopuni resurse, server mora sam da zna koji user sta radi, paralelno client-side tehnologiji najcesce
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
*.dynamic.isp.telekom.rs.



+34 Profil

icon Re: PHP Igrica problem sa vremenom25.11.2010. u 13:57 - pre 163 meseci
Citat:
Aolynk
NPR: Da bi dogradili resursno polje na neki level morate da sacekate na primer 1:50 min.
E sada problem je sto to moze da se ubrza naravno ko se malo razume. Udje se na sat u racunaru i pomeris sat unapred automatski se i u browseru promeni vreme i njegovo resursno polje je zavrseno sto pravi veliki problem....Kako to da zaustavim???
Da ne moze da utice promena vremena na svom racunaru...


Ne kapiram zasto se uopste i oslanjate na javascript. Dakipro je objasnio problem; nestane mu struje, ugasi browser.... Sve su to real-life situacije. Jos ako je ceo program jedan veliki JS, onda ce da imate probleme kad-tad.

Generalno, igrica bi (po meni) trebalo ovako: igrac klikne na 'iscepaj drva'. To se posalje serveru, server u bazu upise tu akciju kao 'igrac Petar Peric je trazio da se iseku drva, posao ce biti gotov u 15:47 jer je ranga 1'. Zatim klijent (JS) na svaki minut salje upit serveru 'e bato, sta se desava' a server mu odgovara tipa 'napao te Laza Lazic i uzeo ti 120 sumpora, drva su isecena i sad ih imas 420' i slicno.

Ako nemate VPS ili dedicated server, onda platis ~$10/godisnje neki server koji ce recimo 'main_calc.php' da izvrsava na svaki minut. Taj .php bi prvo proverio sve zadatke kao sto je onaj za drva, neko je trazio kopanje gvozdja, napadi itd... a zatim bi snimio novu situaciju u bazu.

Ti zaista ne smes da se oslonis na JS za bilo sta. Ako je recimo cena necega upisana u JS, dovoljan je greasemonkey da se izmeni ta JS i promeni cena. Ili jos jednostavnije; promeni URL ili sama forma, ne znam kakav vam je kod.
 
Odgovor na temu

Milos911
Serbia

Član broj: 219127
Poruke: 1230
*.mbb.telenor.rs.



+303 Profil

icon Re: PHP Igrica problem sa vremenom25.11.2010. u 21:51 - pre 163 meseci
Sto se ovog problema tice prvo treba da odlucite da li cete da koristite sekunde ili minute u racunanju. Posto su sekunde vise fer (jer ako koristite minute morate da zaokruzujete vrednosti, sto znaci da ce se nesto raditi par sekundi krace ili duze) pretpostavicu da cete njih koristiti. Onda imate dve opcije: da vam se skripta pokrece svaki sekund, ili da cuvate u bazi kad treba da se izvrsi neka akcija i na osnovu toga pokrecete skriptu (ovo drugo je komplikovanija opcija). Svaku, ali svaku korisnikovu akciju morate cuvati u bazi, jer ako se oslanjate na js onda svako moze da vara u igrici.
Onda imate sledeci problem: Posto teoretski svakog sekunda ima mnogo proracuna (u skripti koju sam ja pisao to je bilo slanje resursa, vojske, onda razne borbe, izgradnja gradjevina...), moze se desiti da loop koji obavlja sve to traje duze od 1 sec. Ako se to dogodi postoji teoretska sansa da igrica opet ne bude fer prema igracu, jer nije na vreme izracunala ono sto treba. Takodje postoji sansa da imate dva ili vise uzastopnih pokretanja skripte koja ce napraviti totalnu zbrku u bazi koji cete tesko kasnije resiti. Tako da morate da brinete i o tome .
 
Odgovor na temu

Aolynk
Igor Jovanovic
PHP Developer
Beograd

Član broj: 273679
Poruke: 7
*.adsl.eunet.rs.



Profil

icon Re: PHP Igrica problem sa vremenom04.12.2010. u 12:13 - pre 163 meseci
Ma sve je uradjeno kako treba nego samo sam hteo da vidim za to vreme to me je jako bunilo...
Mitke to sto si ti nabrojao to smo sve uradili zahevi se salju i iproveravaju. JS smo upotrebili u malim delovima nismo se previse oslanjali na njega previse...

Konsultovao sam se sa jednim provajderom objasnio mi je sve lepo objasnio za menjanje vremena na serveru i mislim da nece biti problema jer jedino oni mogu da promene vreme na serveru...

 
Odgovor na temu

ColdKeyboard
Sasa Karanovic
Hardware and Firmware Engineer
Toronto, Canada

Član broj: 31924
Poruke: 868
*.dynamic.sbb.rs.

Jabber: ColdKeyboard
Sajt: www.SasaKaranovic.com


+11 Profil

icon Re: PHP Igrica problem sa vremenom04.12.2010. u 18:40 - pre 163 meseci
Ja u svojoj igrici se oslanjam samo na PHP time() odnosno UNIX_TIMESTAMP() funkcije u MySQL bazi.

Ujedno po meni je to i jedno od elegantnijih rjesenja jer server upisuje svoje vrijeme u bazi, tu mu stavis da treba da bude zavrseno za dvije minute odnosno time() + 120
i kada posaljes serveru zahtjev da to upise u bazu ili da provjeri da li je prosao taj trenutak kada je neka akcija zavrsena koristi se vrijeme sa servera.

Druga stvar, cron-job moze da se koristi ali isto tako nije obavezan. Naravno, prije nego sto pocnem da objasnjavam alternativu moram reci da je on jako pozeljan i veoma dobar
ukoliko je veliko opterecenje odnosno ako ima mnogo online igraca.

Alternativa je to da mozes u MySQL bazu da upises vrijeme kada je posljednji put izvrsena provjera (da li je stiglo vrijeme kada ce resursi biti sakupljeni, ako jeste dodaj), i onda svaki put
kada korisnik otvori stranicu vrsis provjeru da li je proslo vise od 60, 120 ili neki drugi vremenski interval koji odredis za vrijeme kada ce se dodavati resursi igracima, ako jeste zakljucaj posao i dodaj resurse.
Naravno ovo je malo nepogodno zbog nepreciznosti i mogucih manjih glitcheva ali ako nemas cronjob na test serveru i ovo ce da radi.

E da, mozes i da napravis funkciju koja ce da izlista datog igraca (ili odabrana dva igraca objasnit cu zasto dva) pa da kada god igrac otvori stranicu da je pokrenes i da ona
vrsi provjeru samo za tog jednog igraca koji otvara stranicu. A u slucaju da jedan igrac napada drugog ili ga spijunira ili sta god vec, pokrenes opet funkciju za oba ili samo za tog igraca
kojeg ovaj napada, pa tek nakon sto ona podijeli resurse i sta sve vec treba e onda pustis da ga pljacka napada ili spijunira.


Nadam se da sam bio od pomoci ;)
 
Odgovor na temu

[es] :: PHP :: PHP Igrica problem sa vremenom

[ Pregleda: 1826 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.