NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: neustále běžící script na serveru

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
tomekmichalhu:30.5.2017 7:18

Zdravím, řeším takový problém. Chci vytvořit "hru" ve stylu např. travian (samozřejmě jen pro výukové účely) a chci aby mi na serveru běžel nějaký script co bude neustále hlídat dění v hráčově vesnici, bude mu přičítat suroviny, hlídat útoky a tak podobně. Je nějaká možnost dostat to na nějaký free hosting? (chci pozvat pár lidí v rámci beta testováni). Děkuji za opdovědi.

 
Odpovědět
30.5.2017 7:18
Avatar
David Hynek
Tvůrce
Avatar
David Hynek:30.5.2017 11:59

Jestli si myslíš, že přičítání surovin se děje tak, že script nepřetržitě připočítává surovinu po surovině, tak si to myslíš špatně. Vždy se to vypočítává na základě události. Tedy když se přihlásíš jednou denně, tak se ti vypočítá počet surovin, od posledního odhlášení po aktuální přihlášení krát hodinová produkce. Z toho se odečte spotřeba, nebo loupeže a td. Tedy vždy se to vypočítává na základě nějaké události...

Nahoru Odpovědět
30.5.2017 11:59
Čím víc vím, tím víc věcí nevím.
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:30.5.2017 12:59

No ale pokud by bylo potreba nejake aktualni udaje neprihlaseneho hrace pro jineho, tak by bylo potreba mit uz udaje vypocitany.

Podival bych se po nejakem hostingu s planovacem (cron - namatkou pres stejdu googla mi vyskocila endora) a poustel bych pravidelne ulohou skript, kde se periodicky vypocita vse potrebne

 
Nahoru Odpovědět
30.5.2017 12:59
Avatar
mkub
Tvůrce
Avatar
Odpovídá na tomekmichalhu
mkub:30.5.2017 16:55

riesenie tohoto problemu neustale beziacim skryptom je nevhodne a navyse zbytocne zatazuje server....
treba to riesit pomocou udalosti a prepocitavanim, v tomto pripade dany script nezatazuje server a popravde sa script spusta tolkokrat, kolkokrat si ho uzivatelia vyziadaju (cize pokial su 10-ti uzivatelia a ma sa spustit iba raz, tak sa spusti 10x, pre kazdeho zvlast), s tym treba taktiez pocitat

 
Nahoru Odpovědět
30.5.2017 16:55
Avatar
tomekmichalhu:31.5.2017 6:29

Děkuji za odpovědi, trochu jsem to promyslel a teoreticky by se dalo všechno vypočítat zpětně až když to bude potřeba. Akorát bude trochu problém pokud se suroviny nebudou vyrábět celou dobu stejně (např. se dostaví upgrade budovy, takže produkce suroviny vzroste o 10%).

 
Nahoru Odpovědět
31.5.2017 6:29
Avatar
Odpovídá na tomekmichalhu
Michal Šmahel:31.5.2017 14:35

Můžeš udělat to, že si stav surovin uložíš vždy při převzetí nového stavu (úrovně) budovy (nebo jiné detekce změny produkce) napevno do databáze. S počtem surovin si budeš muset uložit i datum poslední aktualizace, aby bylo možné to dopočítávat.

To znamená, že nebude problém s úrovněmi budov, aktuální stav si vždy spočítáš bez problémů.

// Takhle jednoduše dopočteš suroviny, když budeš potřebovat aktuální stav
naposled uložené + (počet hodin od poslední aktualizace * počet surovin za hodinu)
Nahoru Odpovědět
31.5.2017 14:35
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
tomekmichalhu:31.5.2017 17:04

Naskýtá se problém jak aktualizovat stav surovin zrovna ve chvíli kdy se dostaví budova, pokud hráč zrovna nebude online. Napadá mě akorát nastavit nějaký "budík" který by ve stanovený čas spustil script, ale jak, to netuším.

 
Nahoru Odpovědět
31.5.2017 17:04
Avatar
Odpovídá na tomekmichalhu
Neaktivní uživatel:31.5.2017 20:23

Opět to přepočítáš, až to bude požadováno. Zatočím-li právě teď na tvou vesnici a ty jsi den nebyl přihlášen, tak se prostě načtou patřičné údaje z databáze společně s tím, kdy se mají dostavět budovy, a nějaký chytrý algoritmus to dopočítá. Tedy nejprve do události, kdy se dostaví upgrade, pak od upgradu do současnosti. Přepočítané hodnoty se uloží zpět do databáze a vrátí se jiné části programu, aby se mohl provést útok.

Vlastně to bude takový blackbox. Vytvoříš si třídu (nebo několik tříd), která jako jediná bude číst a měnit suroviny ve tvé vesnici. Vždy, když budeš chtít číst, načte data z databáze, přičte suroviny na základě času. Pokud se během té doby něco mimořádného stalo, tak to také započítá a výsledek uloží do databáze a taktéž ho vrátí.

Smysl je tedy takový, že nebudeš muset nikdy používat CRONa ani jiné skripty, které by musely běžet neustále. Možnou nevýhodou je to, že pokud je ve vesnici hodně událostí, mohl by přepočet chvíli trvat. Také by mohlo docházet ke konfliktům, kdy by se spustily dva dotazy na danou vesnici a tedy dva různá vlákna by začala počítat, jak to s tím stavem surovin vlastně je. To by ale vadit moc nemělo si myslím, žádné chyby by se vyskytovat neměly, jen se může stát, že se sem tam něco bude počítat dvakrát.

Nahoru Odpovědět
31.5.2017 20:23
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.