valjan Janko Valencik Software Deployer Schneider Electric Novi Sad
Član broj: 158605 Poruke: 3531 *.dynamic.sbb.rs.
|
E upravo tako kako kaže @Radovan_III - ako sve ovo posmatraš kao vrstu knjigovodstvenog programa, biće ti mnogo lakše da sve realizuješ. Imaš početno stanje u "magacinu", i imaš ubeležene promene (koliko čega je i kad dodato). Onda u svakom trenutku možeš tačno da izračunaš koliko čega ima. Kada igrač nije online, njemu nije ni bitno šta se tad dešava, i nema potrebe opterećivati server proračunima, upitima u bazu, ažuriranjima stanja itd. Onog trenutka kad otvori stranicu na kojoj treba da se ispiše stanje resursa, tad odradiš upite, obaviš proračun i serviraš mu. A kad obratiš pažnju na to da resurse u igri u stvari stvaraju i troše sami likovi, znaćeš da ti nikakvi kronovi ne trebaju. Jednostavno, znaš da seljak generiše tri žita na minut, ali i pojede 0,1 žito, i potroši 0,05 gvožđa i 0,07 drveta na "amortizaciju motike" ili koji god razlog. Isto tako znaš da drvoseča generiše 2 drveta na minut, ali pojede 0,2 žita i potroši X gvožđa i Y drveta na "amortizaciju sekire" i obnovu kolibe, i imaš sličnu kalkulaciju za rudara, itd. Samo evidentiraš u bazi kad je koji od ovih likova napravljen, i onda nemaš nikakvih problema da u svakom trenutku znaš tačno koliko čega treba da bude. Naravno, i vojnici donesu iz pljačke nešto pa se stanje samim tim uveća, a prilikom odbrane selo bude opljačkano pa se stanje umanji, ali i to lepo uneseš u jednu tabelu, pa se jednostavnim upitom veoma brzo sve može sabrati i dobiti realno stanje resursa u svakom trenutku, bez potrebe da se svaki minut nešto beleži.
Znači, dovoljna ti je jedna tabela gde ćeš imati recimo id_igraca i id_lika, količinu ako dozvoljavaš generisanje više likova odjednom, i timestap kada je on gotov (odrediš koliko vremena X treba za izgradnju svakog lika i upišeš ga kao now()+X u trenutku kada igrač inicira kreiranje tog lika). Ako je timestamp veći od now(), lik je još u izgradnji i možeš lako da prezentuješ igraču koliko % je on "gotov" koristeći razliku između timestampa i now(), a ako je timestamp manji od now(), proračunaš koliko je on do sad dodao resursa i koliko je pojeo, popio i potrošio istih, i tu računicu prezentuješ igraču. Ako i svaku bitku organizuješ po principu id_igraca, id_resursa, kolicina, timestamp (a to sve možeš već izračunati u trenutku kada igrač inicira napad), opet ćeš uvek uz jedan upit imati realno stanje resursa u svakom trenutku. Naravno, drugi igrač može kasnije odigrati potez kojim će promeniti stanje u odbrani i samim tim uticati na onaj prethodni obračun, ali nikakav problem, ponovo sve preračunaš u trenutku kad on inicira svoj potez i opet ažuriraš onu malo pre pomenutu tabelu za oba igrača. Treći igrač može u međuvremenu da inicira napad na drugog i stigne tamo pre prvog, čime opet utiče na količinu resursa kod sve trojice, ali nikakav problem, evidentiraš u nekoj drugoj tabeli id_napadaca i id_branioca i timestamp kada će doći do neke bitke (jer vojsci treba neko vreme da doputuje do drugog sela), i kad god neki igrač inicira napad na bilo koga, proveriš da li se onaj drugi igrač nalazi još negde u koloni id_branioca i da li je timestamp te bitke veći od timestampa ove bitke, i ako postoji ažuriraš resurse i za taj id_napadaca, jer znaš koliko će treći maznuti od drugog i koliko će drugi u međuvremenu generisati novih dok prvi ne stigne do njega, itd.
Ne znam da li sam uopšte uspeo da pomognem, ali kažem, kad sve shvatiš kao knjigovodstveni program, mnogo će ti sve biti jednostavnije za realizaciju...
|