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

Travian - Kako oni to rade?

[es] :: PHP :: Travian - Kako oni to rade?
(Zaključana tema (lock), by dakipro)
Strane: 1 2

[ Pregleda: 10034 | Odgovora: 26 ] > FB > Twit

Postavi temu

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Zlatni_bg
Nikola S
Beograd

Član broj: 65708
Poruke: 4420
*.dynamic.sbb.rs.



+498 Profil

icon Travian - Kako oni to rade?05.10.2011. u 14:41 - pre 151 meseci
Pozdrav,

Ranije sam igrao ovu igricu, verujem da je dosta od vas culo za nju. E sad, front-end igrice je PHP sa nesto javascripta, ono sto mene interesuje je kako su resili jedan problem.

Pre svega, sta mislite, da li koriste jos nesto sem PHP-a za server-side? A sada, ono glavno pitanje. U igrici je moguce napadati druge igrace, stavljati zgrade da se grade, stavljati vojnike da se prave itd... Sve se to desava na nivou sekundi, dakle svake sekunde se napravi hiljadama igraca nova zgrada, vojnik itd... Igrac vidi preostalo vreme do izgradnje zgrade (uzecu zgradu kao primer), u sekundama, verovatno PHP uzme vreme zavrsetka pa se obradi vreme do kraja izgradnje koje se potom odbrojava... Ono sto moram da napomenem je da ce se zgrada koju je igrac stavio da se pravi, napraviti i ukoliko on nije online. Npr, kliknete "Napravi batinara", izbaci vam da ce batinar biti napravljen za 12 min 20 sec, i on se tada napravi.

Kako biste vi resili taj problem? Ja sam razmisljao o cron jobu koji ce izvrsavati skriptu na svakih 1s (nisam siguran da cron moze da izvrsava skriptu svake sekunde, cak sta vise mislim da ne moze?) i da uzima iz baze podataka vremena zavrsetka neke akcije, potom da ukoliko se vreme poklapa, menja neke druge vrednosti u drugoj tabeli itd... Mozda cron na svakih minut sa loopom koji se izvrsava sa pauzom na svakih 1s?
THE ONLY EASY DAY WAS YESTERDAY
 
0

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: Travian - Kako oni to rade?05.10.2011. u 15:25 - pre 151 meseci
Pa jedan od najjednostavnijih nacina je da koristis tabelu sa vremenom kada ce zgrada biti izgradjena ili kada ce jedinica biti dostpuna (UNIX_TIMESTAMP())

Ti kada stavis da se gradi zgrada kojoj treba 5min da se napravi, odmah u tabelu upises tu zgradu i stavis joj da ce biti dostupna NOW()+600 tj. na trenutno vreme dodas 600 sekundi.

Onda kada provjeravas koje zgrade korisnik ima radis upit gdje na kraj dodas where `dostupno` <= UNIX_TIMESTAMP() i on ce selektovati sve zgrade koje su do sada zavrsene.

Ako hoces da izlistas sve zgrade koje se jos uvijek prave onda uradis query gde trazis where `dostupno`>= UNIX_TIMESTAMP() i on ti vrati sve zgrade koje ce biti u buducnosti dostupne.
Onda uzmes tu vrednost dostupno i oduzmes od nje now() koji ti daje trenutno vreme (od UNIX ere) u sekundama i dobit ces za koliko sekundi ce ta zgrada biti dostupna. JS koristis da te
sekunde uoblici u HH:MM:SS format i da odbrojava do nule.

Isto to vazi i za vojnike samo malkice drugacije.

Kad igraci napadaju jedan drugog uzimas iz baze gradjevine/vojnike koji su trenutno dostpuni i to je to.

Dakle ti njemu stavis u bazi podataka da on vec ima tu zgradu, ali ga ogranicis da moze da je koristi tek od Tog-i-Tog trenutka.
 
0

Milos911
Serbia

Član broj: 219127
Poruke: 1230
77.243.20.*



+303 Profil

icon Re: Travian - Kako oni to rade?05.10.2011. u 15:46 - pre 151 meseci
Malo je komplikovanije od toga...
Ok, kad se napadaju recimo da se radi ta provera na osnovu toga sta je dostupno. Logicno provera se radi svaki put kad korisnik ucita stranicu. E sad, sta ako imamo 3 korisnika, koji napadaju jedno selo? Znaci mora da se pravi provera svih napada koji se desavaju na serveru, da bi korisnik 2 znao da li je korisnik 1 promenio nesto u selu. I tako za ostale stvari. A kad se sve to sastavi, postaje zesce zahtevno :/.
I ja sam se jednom bavio ovom problematikom(ima negde topic), i na kraju odustao(mada i dalje razmisljam kako najbolje ovo resiti)...
 
0

Zlatni_bg
Nikola S
Beograd

Član broj: 65708
Poruke: 4420
*.dynamic.sbb.rs.



+498 Profil

icon Re: Travian - Kako oni to rade?05.10.2011. u 16:11 - pre 151 meseci
Pozdrav CK i Milose,

Hvala na odgovorima :)

To sa tabelom vremena nije sporno, to je ja mislim najbolji nacin. Ali kako izvrsavati skriptu ili bar loop svake sekunde, da to sve bude efektivno? Skripta ce morati svake sekunde da proverava sve predstojece napade, izgradnju vojnika, zgrada, jos gomile stvari... nisam siguran da li ce to sve moci u sekundi da se izvrsi, a ako se ne izvrsi... nastaju problemi.
THE ONLY EASY DAY WAS YESTERDAY
 
0

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: Travian - Kako oni to rade?05.10.2011. u 16:13 - pre 151 meseci
Ne secam se bas toliko kako je Travian radio ali siguran sam da ima mnogo nacina da se ovakav problem resi.

Moze recimo preko cron job koji bi svakih x sekundi radio update bitaka, npr ako dva korisnika napadaju istovremeno treceg onda
ili njih dvojicu sastaviti zajedno pa racunati (ali onda je upitna podela plena) ili recimo raditi random select da napadne jedan pa za njim drugi.

Ja sam npr. pravio isto MMORPG igricu gdje je su u bazi bili cuvani podaci o kupovini, napadima, prodaji itd. i bila je tabela kada ce taj predmet
biti dostupan ili kada pocinje taj napad ili neka druga kriminalna aktivnost koju je banda mogla da izvrsi. Bio je jedan cron job koji je svakih 2min
radio obradu svih neobradjenih proracuna napada i sl. stvari a svaki put kada se neki igrac loguje ili otvori bilo koju stranicu bila bi mala provera
koja gleda da li je isteklo 60 sekundi od posljednjeg poziva refresh funkcije, ako jeste pozvao bi mysql funkciju koja bi uradila refresh tj. dala svim
korisnicima HP, Awake, Energy itd. ali ne preko maksimalne vrednosti.

Nisam sto posto siguran kako je to u Travianu uradjeno ali ako te bas interesuje mozes da googlas za Travian clone pa ce ti izaci neka skripta
koja je dosta slicna i koja vjerovatno ima slican mehanizam obrade bitki i ostalih stvari.

Treba imati u vidu da Travian vrti dobru lovu i da imaju svoje servere tako da njima potrosnja resursa i nije toliki problem. :)
 
0

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: Travian - Kako oni to rade?05.10.2011. u 16:18 - pre 151 meseci
Ah, mrzim ovo kad se pojavi odgovor dok i ja saljem isti :)

Pa pazi, ako nema nikoga od igraca online onda nemas problema. Ako ima igraca online, onda mozes da napises malu skriptu koja bi
u pozadini uradila brzinsku provjeru da li ima podataka za obradu, ako ima da ih obradi i posalje rezultate, ako nema nikome nista.

Znaci nije poenta da se podaci obradjuju u realnom vremenu nego da korisniku stvoris iluziju kao da je to tako.
Ti recimo podatke o bitci ne moras da obradjujes sve dok ne dodje taj trenutak kada je bitka zapocela (trenutno vreme = vremenu kada pocinje bitka).
E sad mozes znaci ili da korisnik kada otvori neku stranicu da se u pozadini izvrsi provjera da li treba neku bitku da obradi ili recimo
da imas cron job koji ce to raditi automatski svake minute ili dve. Ako imas cron job onda u izracunavanju vremena kada ce bitka zapoceti
uvijek zaokruzujes na punu minutu -1 s tako da tu bitku tvoj cron job sigurno zahvati u pravo vreme :)
 
0

valjan
Janko Valencik
Software Deployer
Schneider Electric
Novi Sad

Član broj: 158605
Poruke: 3531
*.dynamic.sbb.rs.



+553 Profil

icon Re: Travian - Kako oni to rade?06.10.2011. u 03:39 - pre 151 meseci
Igrao sam ga i ja pre nekoliko godina, i ako se dobro sećam bilo je tu jako puno Ajax-a, tako da je sasvim moguće da je veliki deo obrade prepušten samim browserima. Browser sam vodi računa o timingu, i u odgovarajućem trenutku samo pošalje upit serveru "ej, šta je bilo sa onim mojim...?". Većina tih stvari oko izgradnje su ionako nebitne serveru, a važne su samo klijentu koji je u tom trenutku onlne, pa je zato po meni ovakav pristup sa prebacivanjem dela obrade na klijenata sasvim logičan, barem po meni. Npr. klijentu se pošalje vreme kad zgrada treba da bude gotova, a onda browser sam uz pomoć javascripta iscrtava određene faze izgradnje, osvežava brojače itd. Što se samih bitaka tiče, svaki vojnik ima određeni index za napad i odbranu, neke građevine imaju faktor pojačavanja tog indexa, neke protivničke jedinice imaju faktor slabljenja odbrambenog indexa branilaca itd., tako da se sve otprilike svede na (a-b)(sum(x)) na obe strane, i odgovarajućim algoritmom se onda pobrišu poginuli iz baze (npr. slabije jedinice imaju viši koeficijent, tj. "prednost" pri umiranju, i sve se opet svede na dve-tri formule), tako da se u stvari obračun završi u par procesorskih taktova i server ne bude nešto naročito opterećen ovim.

Na taj način server održava samo bazu i radi sinhronizaciju sa klijentima, i obrađuje izuzetno mali set podataka, tako da može sasvim fino da radi bez nekih preteranih hardverskih zahteva... Ovo je barem način kako bih ja to sve rešio, i kako mi se čini i da jeste u stvarnosti bilo rešeno...
 
0

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: Travian - Kako oni to rade?06.10.2011. u 03:59 - pre 151 meseci
Ja sam skoro pa identicno nesto radio na svojoj browser igrici i realno gledano ti upiti i obrade zahtjeva nisu nikakav problem sto se hardverske zahtjevnosti tice,
u nekoliko navrata je bilo i do 400-500 online igraca koji su se medjusobno napadali i aktivno igrali igricu a navedeni sistem je radio bez ikakvih problema.

Jos je server dodatno bio resterecen jer se uz pomoc AJAX-a ucitava i osvezava samo dio stranice koji je relevantan za korisnika a ostali ostaje statican tj. sa serverske
strane je statican ali korisniku java script vrsi odbrojavanje i racunanje.

Naravno stvar je malo drugacija na travianu gdje je sigurno da u svakom trenutku ima barem 2-3k online igraca ali opet verujem da bi ovakav sistem uz neku malu optimizaciju
i uz pomoc AJAX-a radio bez ikakvih problema.
 
0

Milos911
Serbia

Član broj: 219127
Poruke: 1230
77.243.20.*



+303 Profil

icon Re: Travian - Kako oni to rade?06.10.2011. u 06:55 - pre 151 meseci
Citat:
valjan: Igrao sam ga i ja pre nekoliko godina, i ako se dobro sećam bilo je tu jako puno Ajax-a, tako da je sasvim moguće da je veliki deo obrade prepušten samim browserima. Browser sam vodi računa o timingu, i u odgovarajućem trenutku samo pošalje upit serveru "ej, šta je bilo sa onim mojim...?". Većina tih stvari oko izgradnje su ionako nebitne serveru, a važne su samo klijentu koji je u tom trenutku onlne, pa je zato po meni ovakav pristup sa prebacivanjem dela obrade na klijenata sasvim logičan, barem po meni.

Ako sam dobro ukapirao, mislim da to nije najbolje resenje. Ako se borba odigrava u 22:34, niko nije online, sta ce biti? Ili ako se gradjevina zavrsava u 22:30, pomoc stize u 22:31, sledeca gradjevina koja pojacava odbranu u 22:32, borba u 22:34. Niko online. Sve se mora izracunati tad, ili se to isto racunanje mora raditi na nivou servera svaki put kad korisnik ucita stranicu (moze on koristiti ajax koliko hoce, svejedno mora pretraziti citavu bazu da proveri da li ga jos neko napada, pomaze, sta se zavrsava u tom trenutku, itd...
Citat:
ColdKeyboard
Jos je server dodatno bio resterecen jer se uz pomoc AJAX-a ucitava i osvezava samo dio stranice koji je relevantan za korisnika a ostali ostaje statican tj. sa serverske
strane je statican ali korisniku java script vrsi odbrojavanje i racunanje.
Server i tako i tako mora da odradi racunanje (ne mozes korisniku ostaviti da racuna snagu svoje vojske (mozes, ali ce se za par dana pojaviti userjs "cheat for unlimited power in that game")), tako da jedino sto js moze da uradi je da izracuna i proveri da li se poklapa sa podatkom sa servera (ali posto vec radi tu proveru, moze i samo da pokupi info - svejedno mu je).

Mislim da je najbolje resenje neka modifikacija onog predloga sa vremenima, sa mozda jos malo cron-a. I extra mega giga dobro optimizovana baza...
Sorry sto ispada da samo govorim "ovo nije ok" a ne nudim resenje :/.
 
0

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Travian - Kako oni to rade?06.10.2011. u 07:28 - pre 151 meseci
Postoji tabela sa svim zakazanim bitkama. Postoji skripta koja radi stalno (bez prestanka, kao servis/demon). U tu skriptu se ubacuju sve bitke koje će se dogoditi u narednom minutu (SELECT upitom) i dalje čeka na njihovo obrađivanje. Stanje zgrada je bitno u trenutku održavanja bitke, a to je prost SELECT upit da li je NOW() manje od vremena kada zgrada postaje dostupna. Jednom dnevno mogu da se završene zgrade prebace iz tabele zgrada u gradnji kako ne bismo stalno poredili vremena nepotrebno.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
0

valjan
Janko Valencik
Software Deployer
Schneider Electric
Novi Sad

Član broj: 158605
Poruke: 3531
*.dynamic.sbb.rs.



+553 Profil

icon Re: Travian - Kako oni to rade?06.10.2011. u 09:49 - pre 151 meseci
Citat:
Milos911: Server i tako i tako mora da odradi racunanje (ne mozes korisniku ostaviti da racuna snagu svoje vojske (mozes, ali ce se za par dana pojaviti userjs "cheat for unlimited power in that game")),


Secam se da je svako kod koga je detektovano prisustvo GreasMonkey-a momentalno dobijao ban na Travijan serveru. Zbog toga sam i pretpostavio da je JS u browseru klijenta odradjivao veci deo posla... E sad, to je bilo davno, od tada se pojavilo jos nekoliko verzija Travijana, moguce je da sad funkcionisu drugacije...
 
0

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
*.static.stelkom.net.



+18 Profil

icon Re: Travian - Kako oni to rade?06.10.2011. u 10:43 - pre 151 meseci
Moje neka ideja sto se tice borbi je da se napravi tabela recimo `fight` u kojoj cemo imati podatke kad ce zavrsiti bitka i kako, ko je ucesnik itd...

E sad ako ovaj sto se brani pocne praviiti u medjuvremenu jednog vojnika, se u funkciji za dodavanje vojnika dodaje snaga za branioca i ponovo se racuna i radi UPDATE te bitke u bazi.
Znaci pri svakoj promjeni u selu se mora neki trigger napraviti koji ce da radi update bitke. Na primjer prodaja zita ili gline, se odma obradjuje i cuva u bitku.

Cron job se na Unix moze izvrsavati minimalno u 1 min., a sta ako bas u medjuvremenu bude napravljen vojnik ili prodato zito recimo...

Tako ja to zamisljam teoretski, a implemetacija je vjerovatno teza dosta, ali zato je tu OOP i mozda upotreba observer patterna :)

P.S. JS/Ajax se upotrebljava samo za prikaz podataka korisniku nikako za kakva racunanja.
 
0

valjan
Janko Valencik
Software Deployer
Schneider Electric
Novi Sad

Član broj: 158605
Poruke: 3531
*.dynamic.sbb.rs.



+553 Profil

icon Re: Travian - Kako oni to rade?06.10.2011. u 12:02 - pre 151 meseci
Ne kapiram zasto bi se stalno nesto proracunavalo? Pustis vojsku u napad, u tom trenutku napravis obracun i to je to. U medjuvremenu branilac krene da pravi novog vojnika, napravis novi obracun u trenutku kad je izdao komandu, ako novi vojnik bude gotov do pristizanja napadaca preracunas formulu, ako ne nikom nista. Branilac povuce svoju vojsku na minut i po pre napada, u trenutku izdavanja komande napravis novi obracun i to je to. Nema potrebe da se stalno nesto preracunava, brojaci i ostala cuda su samo sminka za korisnika. U svakom od malo pre pobrojanih trenutaka se moze znati tacan ishod borbe, nema tu nikakve mistike i nepoznanica. Naravno, jedan igrac ne zna koliko je onaj drugi poslao vojske na njega, odnosno onaj koji napada ne zna sve detalje o zidovima, carolijama, tacnom brojcanom stanju protivnika i sl., ali server ovo "zna" u svakom trenutku. I zasto bi onda preracunavao nesto u t+n trenutku, kad je u t trenutku situacija bila potpuno ista...?
 
0

Zlatni_bg
Nikola S
Beograd

Član broj: 65708
Poruke: 4420
*.dynamic.sbb.rs.



+498 Profil

icon Re: Travian - Kako oni to rade?06.10.2011. u 13:46 - pre 151 meseci
Ne moze se nista proracunati u trenutku slanja napada, zato sto je moguce da ce napadnutom igracu u medjuvremenu neko poslati odbrambrenu vojsku i promeniti ishod bitke, isto tako i on sam moze izgraditi jos vojske itd... po meni je jedino sto moze da odradi taj posao skripta koja se izvrsava svakih 60 sec preko crona, a u sebi ima loop koji se izvrsava 60 puta svake sekunde... ili 5 min preko crona a 300x loop... al' nisam siguran koliko je pametno svake sekunde raditi velike mysql upite? Pogotovu jer se mora menjati sadrzaj vise tabela, raditi silni proracuni sto se borbi tice, itd. Da li sve to moze da se izvrsi u jednoj sekundi a da ne zagusi server?

Sve akcije moraju biti server side, i raditi nezavisno od toga da li je igrac online ili nije... nebitno da l' je napadnut ili je napadac :)
THE ONLY EASY DAY WAS YESTERDAY
 
0

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
*.static.stelkom.net.



+18 Profil

icon Re: Travian - Kako oni to rade?06.10.2011. u 14:01 - pre 151 meseci
- ako branilac pravi vojsku u medjuvremenu:
> pri pozivu funkcije za pravljenje vojnika, se pozove i funkcija koja provjeri za to selo da li postoji bitka u `fights` i ako ce vojnik biti gotov prije kraja bitke, se rezultat bitke mjenja

- ako mu neko posalje vojsku u medjuvremneu:
> pri slanju vojske, se pogleda jel za to seloo postoji bitka i ako postoji i ako ce vojnici stici prije kraja bitke, se pravi UPDATE rezultata bitke

^ to smo vec napisali valjan i ja...

To da ces neke query-je raditi svake sekunde preko Cron-a, bolje zaboravi ima da ubije server.
 
0

valjan
Janko Valencik
Software Deployer
Schneider Electric
Novi Sad

Član broj: 158605
Poruke: 3531
*.dynamic.sbb.rs.



+553 Profil

icon Re: Travian - Kako oni to rade?06.10.2011. u 14:42 - pre 151 meseci
Citat:
Zlatni_bg: Ne moze se nista proracunati u trenutku slanja napada, zato sto je moguce da ce napadnutom igracu u medjuvremenu neko poslati odbrambrenu vojsku i promeniti ishod bitke, isto tako i on sam moze izgraditi jos vojske itd...


Ocigledno da nisi nista shvatio - prilikom svake akcije korisnika se napravi obracun, i eventualno koriguje onaj postojeci prethodni. Nema nikakve potrebe da se bilo sta proracunava u medjuvremenu, jer ako nema akcije korisnika, nema nikakvih izmena.

Primer: posaljem 100 vojnika na selo A, koje se brani sa 200 vojnika. 100xkoeficijent_napada-200xkoeficijent_odbrane je tacno ono sto ce se desiti ako situacija ostane takva do momenta bitke. Posle deset sekundi, ako nijedan od igraca nista ne promeni, situacija je jos uvek 100xkn-200xko. Posle pet minuta isto tako. Ako branilac krene da pravi vojnika u medjuvremenu, ako on bude gotov posle napada, nikom nista (takvo je bilo pravilo kad sam ja igrao Travijan). Ako je gotov pre bitke, povecas koeficijent odbrane za njega, i opet ne moras nista dodatno da racunas do same bitke. Ako hoces da on ipak ucestvuje sa onolikim procentom koliko je gotov u trenutku bitke, onda ce odnos snaga u trenutku bitke biti 100xkn-(200+0.7m)xko (ako racunica pokaze da ce on biti gotov 70% u trenutku bitke), znaci samo korigujes racunicu kad igrac zada komandu za pravljenje vojnika, i nema potrebe da ponovo racunas to za 10-15 minuta kad ce racunica biti potpuno ista. Naravno, ako odbrambeni igrac posle toga odluci da povuce svoju vojsku minut i po pre napada, sad ce odnos snaga biti 100xkn-0, i nema opet potrebe da bilo sta dodatno proracunavas u narednim minutima ako niko od igraca ne dodaje akciju.

Znaci uvek uzimas da je stanje konstantno od zadnjeg obracuna do sledece promene igraca. Server tu ne unosi nikakve dodatne faktore, sve zavisi iskljucivo od igraca. Ne raste vojnicima koeficijent sam od sebe, nego uvek nakon neke akcije samog igraca (izgradio si novi objekat, ojacao zid, itd), a sve te akcije imaju tacno poznato vreme zavrsetka, tako da kad u trenutku n napravis presek, uvek ces znati kakvo ce biti stanje u n+x. Ono se za n+y moze (i najverovatnije ce se) promeniti, ali ces ti opet u tom n+y trenutku znati sta ce desiti u n+z, i tako u krug. Tebe zanimaju samo trenutni preseci stanja, i ne treba uopste da lupas glavu tim sto ce taj presek stanja vec za par milisekundi biti drugaciji, jer ti u svakom trenutku imas potpunu kontrolu i celokupan uvid u desavanja...

Ista stvar ti je i u realnom zivotu: imam 100 dinara u novcaniku, i imacu ih i za 10 dana, jer materija ne moze da nestane sama od sebe ni da se stvori iz niceg. Sutra prodjem pored pekare, uzmem dve perece, i ostalo mi je 50 dinara, i tih 50 dinara cu imati i narednih 15 dana, jer materija ne moze da nestane sama od sebe ni da se stvori iz niceg. Pera mi posle tri dana vrati onih 200 dinara sto mi je duzan od petka, i ja cu tih 250 dinara imati narednih 8 dana, jer materija ne moze da nestane sama od sebe ni da se stvori iz niceg. Nadam se da sad kapiras? Posmatras stvari u odredjenom trenutku kao da su vecne, i kad dodje do neke spoljne promene, korigujes i opet posmatras kao da je vecno...
 
0

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: Travian - Kako oni to rade?06.10.2011. u 15:20 - pre 151 meseci
Mislim da je ova metoda koju je valjan predlozio mozda i najbolja ako nemas mogucnost da podignes deamon/servis koji je Goran predlozio.
Goranova metoda je mnogo laksa u smislu da u trenutku bitke uzimas sve sto je izgradjeno i svu vojsku koja postoji, uradis proracun i posaljes
nazad rezultate. Jedino sto mozda nemas mogucnost da drzis skriptu u pozadini kao servis.
Valjanova metoda je jako dobro alternativno rjesenje ali onda moras dobro da pazis da slucajno ne selektujes pogresan unos u tabeli ukoliko korisnik ima
100-200 napada u istom trenutku na isto selo, ali to nije nikakav problem :)

@Milos
Nisi me razumio, svaka igrica mora da bude server-side i korisnik nikako ne moze da utice na algoritam ili izracunavanje, ali JS koja se vrti kod njega
moze da vrsi racunanje kao npr. za koliko ce se napraviti vojnik, onda kad to vreme istekne da uradi AJAX upit da li ima novih gradjevina/vojnika koji se prave
ili recimo da racuna vreme do napada itd... a to racunanje se svodi da od PHP-a dobije sekunde do napada kao npr napad_za=331 i on ce korisniku
u odgovarajuci dio interfejsa da postavi brojac koji ce da odbrojava od 5:31 do 0:00 i u tom trenutku uraditi neki refresh ako je potreban.
 
0

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
*.static.stelkom.net.



+18 Profil

icon Re: Travian - Kako oni to rade?06.10.2011. u 15:33 - pre 151 meseci
Ne znam tacno kako ste zamislili kako ce taj daemon raditi, tj. kako ce znati kad da odradi nesto, ali sta ako u trenutku bitke ta skripta crkne ? Ili recimo MySQL da ne radi iz nekog razloga.


U ovom nasem sistemu, ako slucajno ne radi MySQL i ako se sve transakcije ne zaavrse, funkcija vraca false i kaze korisniku da nije uspio napasti selo ili napraviti vojnika ili bilo sta. A posto vec unaprijed imamo rezultate bitke za to selo u tabeli, to nam nije problem.
 
0

Nemanja_666
Nemanja Tatic
Gradiska

Član broj: 116292
Poruke: 221
*.teol.net.



+19 Profil

icon Re: Travian - Kako oni to rade?06.10.2011. u 17:08 - pre 151 meseci
Koliko sam puta o tome pomislio kad sam igrao travian.

E sad mi imamo iluziju da se podatci odradjuju u realtime-u, a takodje se lako primjeti da statistike za dati dan moze kasniti 10ak minuta(kad se otvori top10 poslije bitaka ona nece biti updejtovana jos neko vrijeme).

E sad moje misljenje je(koje je vjerovatno pogresno):
Imamo tabelu zadatci gdje cuvamo pocetak, kraj, i korisnici od interesa (i naravno sve bitno o datom zadatku). E sad kad korisnik on interesa (oni kojima ishod zadatka bitan) osvjezi stranicu dati zadatci se izvrse.
Cron job svako neko vrijeme izvrse preostale zadatci radi statistike (statistika kasni).

E sad kako vode racune o resursima. Posto bi svake sekunde bio potreban da se izvrsava po nesto. Resursi se vjerovatno racunaju zavisno od proizvodnje po satu i zadnjeg stanja kad su resursi promjenenji nekim zadatkom.

 
0

Zlatni_bg
Nikola S
Beograd

Član broj: 65708
Poruke: 4420
*.dynamic.sbb.rs.



+498 Profil

icon Re: Travian - Kako oni to rade?07.10.2011. u 02:40 - pre 151 meseci
@Valjan,

Izvini, sad sam tek shvatio sta si rekao :) Nisam dobro procitao onaj deo o menjanju ishoda kada neko posalje pojacanje itd :) To je dobro resenje, zahtevnije je poprilicno matematicki ali je najefikasnije verovatno...

To sto je Goran rekao je moguce, ali ce morati da radi svake sekunde a ne svakog minuta, tako da verovatno otpada... Sto se mene tice, sve dolazi u obzir jer svoje projekte drzim na VPS-u, ali bilo bi lepo da diskutujemo i o tome da svako iz ovoga moze da izvuce nesto korisno, a ne samo ja :)

@vatri,

To ne bi trebalo da se desi. Ukoliko se dovoljno testira skripta i eliminise mogucnost greske, ne bi trebalo da bude problem. A i u svakom, a ne samo ovom, slucaju postoji mogucnost da do toga dodje.

A sad kad me je Nemanja podsetio, tu je problem i oko resursa... Da pojasnim: Svaki igrac ima "resursna polja", koja mogu biti podignuta na razlicite nivoe, pocev od 0 pa navise. Sto je nivo veci, vise ce se odredjenih resursa proizvoditi. Npr, ukupna proizvodnja zita ce biti 150 jedinica na sat vremena. Resursi ce se dobijati 1 po 1, a ne 150 na sat vremena. Znaci da 60 min/150 res = period kada cete dobijati 1 jedinicu resursa zito. Igrac te resurse dobija i kada nije online.
THE ONLY EASY DAY WAS YESTERDAY
 
0

[es] :: PHP :: Travian - Kako oni to rade?
(Zaključana tema (lock), by dakipro)
Strane: 1 2

[ Pregleda: 10034 | Odgovora: 26 ] > FB > Twit

Postavi temu

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