3. března 2013 10:51

Víčkův únor 2013

Jaký byl únor 2013 pro vás?
1/13%Dobrý
1/13%Hrozný
8Hlasovalo

Únor byl, co se týče školy, docela klidný. Bylo po vysvědčení, tak učitelé neměli potřebu zkoušet, nebo dávat testy. To platilo vlastně až na poslední týden, to byly kromě středy tak tři testy denně. Proč? No protože příští týden máme jarní prázdniny, tak aby měli učitelé co dělat ...

Paradox copyrightu

Jednou jsem tak přemýšlel a přišel jsem na zajímavý paradox. Znak copyrightu © spolu s rokem a jménem se používá k označení díla, že je chráněno autorskými právy a jeho zkopírování by vás teoreticky mohlo dostat do problémů. Toto označení používám všude, kde můžu. Určitě jste si všimli, že u každého mého projektu naleznete © XXXX - YYYY Tomáš Hypeš, zpravidla i s odkazem na můj web. Paradoxem je, že nevím, jak se tento znak píše (neznám klávesovou zkratku pro jeho napsání, ani jeho HTML entitu), ale vždy ho odněkud zkopíruju.

Má tvorba v únoru

Co se týče blogování, tak už jsem konečně dodržel pravidlo jeden článek týdně. Dobře, měl jsem to zjednodušené tím, že únor byl nejkratší měsíc v roce ... Každopádně bych v tom rád pokračoval. Dokonce příští prázdninový týden bych chtěl napsat alespoň dva články, tak snad se to povede. Během března možná začnu psát i nový seriál.

Co se týče nové Elfánie, tak už tolik nadšený nejsem, protože jsem se dostal ve svých plánech do skluzu. Snad to o prázdninách doženu. Ovšem stále platí, že Elfánie bude hotova nejdříve za rok. Hold jsem si s ní vzal docela velké sousto. Oproti staré verzi je mnohem komplikovanější, což se týče programování i hraní.

Elfánie v2.0a3

Pojďme se podívat na novinky v Elfánii. Verzi 2.0a3 dostali testeři již před týdnem a obsahuje dvě novinky. U soubojů jsem minule skončil, tak s nimi dnes začnu.

Souboje mezi hráči
Vyzvat hráče

Co ještě dodat, v minulém článkujsem v podstatě celý souboj popsal (v době psaní článku jsem měl souboj téměř hotový).

Tlačítko k vyzvání soupeře na souboj jsem přidal do okna hráče, viz. obrázek. Jako odměnu za vítězství dostanete zlato, zkušenosti a proslulost. Zlato ukradnete soupeři (určité procento z jeho majetku). Počet zkušeností se určuje podle obtížnosti protivníka a může je dostat v malém množství i poražený. Proslulost se počítá podle úrovní hráčů a poraženému se proslulost odčítá.

Noční můra se vrátila

Upozornění: Tady jsem se trochu rozepsal o problému v programování, jestli vás to nezajímá, můžete přeskočit k dalšímu nadpisu.

Sice trochu předbíhám, ale také to patří k soubojům, protože jsem na to přišel právě u nich. Při programování první verze Elfánie bylo mojí noční můrou zdvojování akcí při dvojkliku. Někteří hráči nechápali, že se na odkazy klepe jednou, ale klikali na ně dvakrát, tím pádem se odeslali dvě stejné akce v téměř stejný čas a často se stávalo, že se vyhodnotily paralelně a do databáze se uložili oba výsledky. Například, že v jeden čas jeden souboj proběhl dvakrát.

Ve staré Elfánii jsem to vyřešil antibugovými skripty. To jsou takové skripty, které takováto zdvojení hledají a dodatečně opravují. Sice ne příliš šťastné řešení, ale funkční.

V nové verzi jsem se takovým skriptům chtěl vyhnout a docela se to i dařilo, ale až do nahrání verze 2.0a3 na testovací svět. U soubojů začalo docházet ke zdvojením, ovšem tady to mělo horší důsledek, než ve staré Elfánii. Dvojkliky hráčů mám ošetřené JavaScriptem, takže k nim docházet nemůže. Problém ale nastal u automatických aktualizacích (průběh akce po dokončení časového odpočtu). Automatické aktualizace probíhají při většině požadavcích na server a navíc je provádí každou minutu server. U požadavků od hráče se sice většinou zaktualizuje pouze jeho postava, ale i tak začalo docházet ke zdvojení souboje. Další kámen úrazu je, že databáze je postavena tak, že když dojde ke zdvojení souboje, tak databáze bude nekonzistentní a při skriptech začne docházet k chybám - tzn. některé části hry přestanou fungovat (v lepším případě jen hráčům, kterých se to týká).

Narychlo jsem přidal nějaké ochrany, které sice počet zdvojování snížili, ale úplně nezastavili. Navíc jsem začal objevovat další slabá místa, kde docházelo ke zdvojování, ale jejich důsledek nebyl tak velký, abych si ho všiml.

Už jsem chtěl začít dělat na antibugových skriptech, ale vzpomněl jsem si, že jsem slyšel něco o zamykání tabulek. Tak jsem se zeptal SuperMartase a něco si o tom vyhledal na internetu a začal jsem to používat. Zamykání tabulek tento problém 100%ně řeší a nechápu, jak jsem do teď mohl programovat Elfánii bez toho. Sice nevím, jak to bude s rychlostí při velkém množství hráčů, ale snad to nebude tak zlé ... Kdyžtak se vždy najde místo, které se dá optimalizovat.

Tuto opravu dostanou testeři s verzí 2.0a4.

Proboha, tolik jsem toho napsat nechtěl ... Někdy nevím, co bych napsal, a někdy bych o tom mohl napsat celou knihu ... No, jdeme radši dál.

Nová zpráva z výcviku

Připomeňme si, jak vypadala zpráva z výcviku, když jsem vám ji představil:

Zpráva z výcviku

Na obrázku je vidět pouze zpráva z pěti kol, ale výcvik může trvat při prodlužování až hodinu, což je 60 minut. U této zprávy by to bylo šíleně nepřehledné. Proto jsem někdy v lednu vymyslel novou podobu zprávy.

Co si myslíte o nové zprávě z výcviku?
9Hlasovalo

Přemýšlel jsem o tom, co hráč od zprávy očekává. Jsou to dvě věci - kolik vycvičil za poslední kolo a kolik za celý výcvik. Z toho nová podoba zprávy vychází. Ve staré zprávě se jedna věc opakuje stále dokola - výsledek za kolo. Každé kolo má svůj řádek, kde je našlapána spousta informací.

V nové zprávě vyplňuje jedno kolo výcviku celé okno. Díky tomu zde mohu zobrazit více informací a zpráva navíc není přecpaná miliony progressBary. Ve zprávě se zobrazuje poslední kolo a můžete tu vidět informace o změně za toto kolo a za celý výcvik.

Jestli se chcete podívat na výsledek jiného kola, máte možnost. Přidal jsem slider, kterým můžete procházet jednotlivá kola. Informace o celém výcviku se načítají najednou při otevírání zprávy, takže při procházení jednotlivých kol nemusíte čekat, až se stáhnou data.

Nová zpráva z výcviku vypadá takto:

Zpráva z výcviku

V únoru jsem ještě přidal k výcviku pár novinek a změn:

  • Poupraveny vzorce výcviku.
  • Při získání dalšího bodu vlastnosti se zvýší motivace.
  • Při zrušení výcviku před jeho začátkem se vrátí i zlato.
  • Pevně nastavená maximální délka výcviku - 60 minut.
Další změny

Ve verzi 2.0a3 bylo spousta dalších drobných změn, ale myslím, že nemá cenu se o nich zmiňovat. Ještě víc, než změn, bylo oprav.

Verze 2.0a4

Momentálně připravuji verzi 2.0a4. Novinkou v této verzi bude liga, čímž završím PvP souboje. Liga bude opět propracovanější, než ve staré verzi. Dnes ji ale nebudu popisovat, to si nechám na březnový článek. Jen pro ochutnávku: jeden hráč se bude moct účastnit až šesti lig najednou.

Předpokládám, že verze 2.0a4 bude hotova nejdéle do půlky března.

Závěr

Pro nové čtenáře připomínám, že můžete navrhovat pro Elfánii názvy světů, měst a vesnic. Za každý návrh jsem vděčný. Formulář naleznete zde:

v2.elfanie.cz

Jestliže se chcete zúčastnit uzavřeného testování Elfánie, stačí odpovědět na otázky v dotazníku. Nemusíte znát správnou odpověď na všechny otázky, stačí mi, když odpovíte alespoň na nějaké, ale pokuste se odpovědět na co nejvíce otázek a co nejpřesněji. Na kvalitě odpovědí záleží pořadí, ve kterém vybírám nové testery. Dotazník naleznete zde:

v2.elfanie.cz/chci-se-zucastnit-testovani


Dotazy a připomínky směřujte do komentářů.

Hodnocení

Celkové hodnocení
5 hlasů
Vaše hodnocení
Vyberte počet hvězdiček

Komentáře

Jméno:
Předmět:
Komentář:
  :):-|:P:D;):(8)[evil][arrow][idea][?][!]
Kontrola:

4.3.2013 21:09:04 Re: Zamykání v MySQL

Že existuje nějaké zamykání tabulek, jsem věděl, ale bál jsem se právě té rychlosti. Ale pak jsem si uvědomil, že přesně to chci, aby mělo jen jedno připojení v jednu chvíli přístup.
Ani nechtěj vědět, jak prasácky je napsaná stará Elfánie. Tam ani nepoužívám spojování tabulek a taky to podle toho vypadá. Ovšem nejsem sám :)
Jinak jestli jsem to dobře pochopil, tak u zámku read mohou všechny pouze číst a u zámku write má připojení, které si tabulku zamklo, plný přístup, ale ostatní nemají přístup vůbec, takže právě write by měl být časově náročnější ;)
Co se týče InnoDB, tak jsem četl, že je celkově pomalejší, proto používám MyISAM.
Co jsem četl, tak tabulky by se měly odemykat automaticky s ukončením skriptu, takže by s tím neměl být problém. Navíc, kdybych zapomněl, tak by se později nějaký další příkaz určitě ozval. Takže v mým případě je důležitější zamykat, aby nedocházelo ke zdvojování.

Víčko
1
2

4.3.2013 20:34:42 Zamykání v MySQL

Četl jsem ten odstavec o navrácené noční můře a říkám si, že to je přece nesmysl, dobře naprogramovanej kus kódu přece vůči takovbejm blbostem musí být imunní a ne to řešit pomocí nějakejch magickej antibugovejch sktiptů. Maximálně stačí zamykat tabulky. Pak čtu dál a jsem moc rád, že tě napadlo to samé.

Co se týče rychlosti, záleží na tom, co konkrétně budeš zamykat. Pokud jenom write, tak to takovej efekt mít nebude, protože ostatní skripty budou normálně moci sahat pro data. V případě že i read, pak už je teoreticky zpomalení možné, nicméně pokud budeš zamykat tabulky jen na dobu nezbytně nutnou, tak nemáš problém.

Pokud by tě zajímalo jó profi řešení, tak v MySQL engine InnoDB umí zamykat i jednotlivé řádky, pak už opravdu s rychlostí není problém.

A ještě rada na závěr: není důležité tabulky zamykat, ale odemykat. ;)

Morfeus
1
0

3.3.2013 15:13:43 Re: HTML entita pro ©

A klávesová zkratka Alt + 0169 :)

SuperMartas
3
0

3.3.2013 15:12:39 HTML entita pro ©

Pro © je HTML entita ©. ;)

Grelek
2
0
© 2011 - 2019 SuperMartas a Tomáš Hypeš