Autor | Zpráva | ||
---|---|---|---|
game Profil * |
#1 · Zasláno: 8. 6. 2011, 19:08:21
Pekný večer,robím si vlastnú amatérsku online hru,narazil som na problém stavania budov,neviete ako to funguje už v existujúcich online hrách?mňa napadá len do db uložiť nejaký čas ked to má byť uložené a potom pomocou podmienky if overiť či už je toľko alebo viac a potom ak je tak aby upgradovalo mysql úroveň budovy,ibaže tak by to nešlo pretože aj keby to spúšťam cronom každú sekundu aby systém overoval všetky stavania či už skočili tak potom neviem ako by systém mal rozoznať že kde má u akého nicku zmeniť riadok v db,jediné možno pomocou session nick ibaže tá by sa zmazala ked by dotyčný zavrel prehliadač:(neviete niekto pomôcť?
|
||
DarkMeni Profil |
#2 · Zasláno: 8. 6. 2011, 19:47:05
Možná bude dobrý nastavit aktualizaci po zobrazení profilu vesnice (jestli je ta hra něco jako DK nebo ********) a nebo až po přihlášení/zobrazení stránky hráčem.
|
||
undisputed Profil |
#3 · Zasláno: 8. 6. 2011, 20:48:59
No len to by nebolo vhodné riešenie pretože ak by mal niekto produkciu napr 50za hodinu rozšíril by na 250 a zmenilo by mu to až po tom ako sa znova prihlási by mu dosť stratil na tom,
Rozmýšľam teraz nedalo by sa to spraviť že by sa session uložila platnosť na napr 3mesiace? |
||
DarkMeni Profil |
#4 · Zasláno: 8. 6. 2011, 21:19:41
Jak jsi to myslel s tím příkladem že by ztratil?
K Session: na 3 měsíce? No, možná ale mam pocit že po zavření okna se ta sessiona zruší. |
||
undisputed Profil |
#5 · Zasláno: 8. 6. 2011, 21:42:50
K tým surovinám si predstav produkuješ 100za hodinu dáš stavať tak aby ti produkovalo 500za hodinu,prídeš tam za 5hodín s tým že si myslíš že budeš už mať
5hodín krát 500 ale budeš mať len 5hodín krát 100, k tej session neviem to bol len návrh preňho neviem ako to presne funguje |
||
DarkMeni Profil |
#6 · Zasláno: 9. 6. 2011, 15:30:40
Aha, se surovinama máš pravdu, ale když nastaví aby se ukládal čas poslední akce, a potom po přihlášení aby se mu to vypočítalo a přidalo tolik surovin kolik se mu mezitím vyprodukovalo, například:
Byl tu ve 14:00 Produkci má 5ks/vteřina Vrátí se v 20:30 Vapočítá se počet vteřin od 14 do 20:30 a to se vynásobí produkcí ks/s. Vypadá to docela jednoduše, kód by byl možná trochu hrozivý ale mam pocit že zrovna tak nějak to v těch prohlížečových hrách dělají, možná sem-tam nastaví pingnutí serveru a nebo vstup ajaxem. |
||
1Pupik1989 Profil |
#7 · Zasláno: 9. 6. 2011, 17:54:52
Stačí odpočítávání javascriptem na pozadí a při dosažení času odeslat AJAXem požadavek do databáze. Z databáze pak znovu vyčíst hodnotu a jedeme. Možná ani načítat hodnotu není potřeba, jelikož při reloadu se stejně načte znovu, takže stačí akorát javascriptem přidat do proměnné momentální produkci.
|
||
miskith Profil |
#8 · Zasláno: 10. 6. 2011, 16:20:29
Já bych to dělal tak, že bych odpočítával přes JS, ale do databáze to neukládal (kvůli programům zrychlující čas prohlížeče -> rychlejší produkce). Místo toho bych vždy při aktualizaci podle posledni aktualizace přepočítal pomocí PHP aktuální počet surovin. A nebo pokud by uživatel/hráč čekal (přes JS) až mu naběhne třeba 1000 od nějaké suroviny a pak dal postavit (tudíž by neměl v databázi aktuální stav surovin), přepočítal bych to pomocí AJAXu.
PS: SESSION jde nastavit doba expirace stejně jako u cookie.session_set_cookie_params() |
||
Darker Profil |
#9 · Zasláno: 10. 6. 2011, 17:04:02
Co se týče časem daného stavění/produkce v reálném čase, data se obvykle generují až když se někdo zeptá (jak říkal [#6] DarkMeni)
Totéž platí pro budovy. Jelikož stavba budovy (a při jednodužším herním enginu i produkce surovin) je lineární, nemusíš nic načítat a spočítáš si to pro zobrazení u klienta (pokud například chceš aby viděl timeout u stavějící se budovy). |
||
game Profil * |
#10 · Zasláno: 10. 6. 2011, 17:41:56
Aha,ďakujem za odpovede.
Ale pre začiatok by som to asi vyriešil najľahšou možnosťou pre mňa a to nastavenim asi tej session,teda pomocou session_set_cookie_params () Ako to nastaviť nejak bližšie?lebo keď by som to tam len tak dal by mi to ťažko išlo.diky |
||
game Profil * |
#11 · Zasláno: 10. 6. 2011, 18:56:06
Môže niekto napísať ako to nastaviť ?
|
||
miskith Profil |
#12 · Zasláno: 10. 6. 2011, 19:44:06
Pod jménem funkce, který jsem zaslal výše, se nachází odkaz na oficiální PHP podporu, kde máš v "komentářích" hromadu příkladů.
Jinak by také šlo nastavit trvání session přes běžné vytváření COOKIES, kdy bys zadal hodnotu odpovídající SESSION ID. |
||
game Profil * |
#13 · Zasláno: 10. 6. 2011, 19:58:00
No cookies nechcem..,a na ten link veď práve ked to tam len dám tak mi nič nefunguje
|
||
DarkMeni Profil |
#14 · Zasláno: 10. 6. 2011, 20:03:29
1Pupik1989:
„Stačí odpočítávání javascriptem na pozadí a při dosažení času odeslat AJAXem požadavek do databáze“ AJAX = Asynchron JavaScript XML To by šlo taky, a bylo by to dynamické, ...Ale co kdyby měl uživatel JavaScript vypnutý? Pak by to už byl problém a na řadu příjde matematika v PHP a poslední záznamy z databáze. A to mě přivedlo k odtázce která se k tématu moc nehodí ale: Existuje způsob jak zjistit jestli má uživatel zapnutý JS a podle toho podřídit běh PHPka? |
||
game Profil * |
#15 · Zasláno: 10. 6. 2011, 20:38:51
Ako to mám teda nastaviť?mám v session nick uložený nick,z návodu som našiel len toto:
session.cookie_lifetime=86400; Ale ked to tam takto dám tak nič nefunguje takže neviem ako to treba spojazdniť |
||
DarkMeni Profil |
#16 · Zasláno: 10. 6. 2011, 20:55:16
Session ti zajistí aby si prohlížeč pamatoval že ten a ten člověk tu byl nebo je přihlášený, ale jestli chceš aktualizovat stav výstavby budov tak se bude hodit buď nějaké pingnutí serveru a nebo projet ty budovy toho člověka pokaždý když někdo zapne jeho profil nebo když se přihlásí, a když tam bude nějaký výsledek, jako že ten hráč nějakou budovu staví tak zkontrolovat od kolika se staví, jak dlouho se má stavět a kolik hodin je teď a popřípadně tu budovu z buildlistu smazat a hráči na tý budově zvýšit level nebo jí nechat tak jak je v případě že podmínka nebude platit.
Doufám že jsem správně pochopil co chceš udělat. |
||
game Profil * |
#17 · Zasláno: 10. 6. 2011, 21:07:09
Keď si do session uložím nick,a v skripte budem kontrolovať či už je určitý čas ktorý budem mať v db a budem ten skript opakovať cronom tak mi to bude fungovať len potrebujem tu session spraviť
|
||
DarkMeni Profil |
#18 · Zasláno: 10. 6. 2011, 21:29:31
No ten nick můžeš uložit i do nějaké tabulky v databázi, a změní se jen to že ho pak nebudeš tahat $_SESSION ale mysql_query("SELECT ..."); a navíc mam pocit že k $_SESSION se jen tak nedostaneš.
|
||
miskith Profil |
#19 · Zasláno: 11. 6. 2011, 11:48:52
Pokud vím, tak CRON se k SESSION přihlášeného uživatele nedostane, protože CRON se nespouští pod návštěvníkem/hráčem, ale pod serverem. Asi si pleteš CRON a JavaScript. JavaScript můžeš volat každých x vteřin/minut/... na straně uživatele/hráče.
A to s tím COOKIES na prodloužení lifetimu SESSION sem myslel nějak takto (ano, takto to funguje, ale mělo by i přes tu funkci... Asi něco špatně děláš): setcookie("PHPSESSID", $session_id, $lifetime, $path, $domain, $secure, $httponly); |
||
game Profil * |
#20 · Zasláno: 11. 6. 2011, 15:25:14
Aha no spravil som to teda tak ako niekto písal,
Že vždy si len do db uložím čo sa stavia a u akého hráča a tým je to vyriešené,lebo v skripte kontroluje len či už nejaký cas skončil a ak hej tak updatetne db,a ten skript opakuje cron |
||
1Pupik1989 Profil |
#21 · Zasláno: 12. 6. 2011, 14:22:08
DarkMeni:
Dal bych jako podmínku spuštěný javascript. Bez javascriptu už snad žádná hra nefunguje (žádná větší). Samozřejmě bourání a upravování stavící fronty by šlo jen PHP + skript do DB + redirect zpět, ale hezčí je, když člověk klikne a je to nastavené. Já osobně to mám javascriptem a ajaxem. Vyčtu hodnoty z DB a akorát odpočítávám. Ke každé další položce akorát přičtu čas té předešlé, aby se nestavili zároveň. |
||
DarkMeni Profil |
#22 · Zasláno: 12. 6. 2011, 14:27:59
Ale dá se phpkem vůbec zjistit jestli uživatel má nebo nemá zapnutý js a včas to "zabít"?
|
||
1Pupik1989 Profil |
#23 · Zasláno: 12. 6. 2011, 18:33:23
<noscript></noscript> a mezi to hodit přesměrování v hlavičce nebo přesměrování meta tagem. Víc mě zatím nenapadá. Další možnost by byla věci v JS generovat přímo JS. Třeba udělat hlášku že JS není aktivovaný jsem dělal přes div s display:block a javascriptem mu nastavil hodnotu na none, takže zmizel.
|
||
miskith Profil |
#24 · Zasláno: 13. 6. 2011, 16:10:59
Funkce get_browser() by to podle php.net měla také zjistit. Osobně jsem ale nikdy nezkoušel.
|
||
DarkMeni Profil |
#25 · Zasláno: 13. 6. 2011, 17:24:30
Z nějakého důvodu mi tenhle kód u javascriptu napíše pokaždý 1, když js bude zapnutý ale i když zapnutý nebude.
$browser = get_browser(null,true); print_r($browser); Takže tohle asi jen zjistí jestli prohlížeč js podporuje. |
||
Nox Profil |
#26 · Zasláno: 13. 6. 2011, 18:22:35 · Upravil/a: Nox
Proč vyhazovat lidi bez JS?
Proč to zjišťovat v PHP? Není důvod Vymysli to tak aby nepřítomnost JS nic nekazila a bude - JS stejně nesmí samo spustit nějakou akci bez toho aniž by to minimálně validoval server, jinak si ti takhle každý nakliká budov kolik bude chtít Takže JS bude třeba jen zjišťovat jestli je něco nového a pokud JS nebude, tak si uživatel prostě bude refreshovat když si vzpomene OGame to má třeba tak že pokud jakýkoli časovač dojede na 0 tak se zamění za "hotovo" a stránka se normálně refreshne Případně to můžeš prostě překreslit (tohle by zrovna byla pohoda pomocí Nette) Do databáze rozhodně ANO - resp. do persistentního (trvalého) úložiště, což cookies, sessions, atd. nejsou (persistentní jsou soubory, databáze (kromě enginu MEMORY)...) Pokud to dáš do session - smažu si cookies a přijdu o budovy, nebo změním prohlížeš/počítač na dýl a přijdu o budovy atd. Navíc tyhle věci by se měly brát jako že je je možné smazat (cookies, sessions, cache a generovaná data atd.) a nemělo by to ovlivnit chod aplikace |
||
Časová prodleva: 13 let
|
0