Diskuze o textových hrách

TADS WebUI - pár dotazů + obrovské poděkování Gaspodovi

lopik

  • Nováček
  • *
    • Příspěvků: 5
    • Zobrazit profil
Ahoj,
 po TADSU už asi patnáct let pokukuju, ale nikdy jsem se do ničeho nepustil, až teď a to hlavně díky zdejšímu Gaspodovi. Díky moc za češtinu - muselo to dát hrozně práce a musím říct, že jsem ani nečekal, že to může takhle dobře fungovat. Stejně tak děkuji za návod, příklady a otevřený zdrojáky - bez toho bych se nikam nepohnul. 
 Ale teď k pár dotazům - zkouším napsat nějakou sranda hru určenou spíš pro známé z našeho "uměleckého sdružení" i když ven to (pokud to někdy dodělám) pustím určitě aspoň sem a vybral jsem si WebUI variantu TADSu, hlavně kvůli přístupnosti - hra se dá pustit v browseru, ale i kvůli podpoře multimedií a webových vymožeností. Narážím na hodně překážek, které se více nebo méně úspěšně dost pracně snažím překonávat, ale rád bych se zeptal na pár drobností, který se mi nedaří vygooglovat - bohužel to vypadá, že to je relativně mrtvý projekt a málokdo s tím dělá..

1) TADS Workbench + WebUI + moderní windows  -  opravdu velice často to padá - každá kompilace je na zkřížení prstů (chyba 0xc0000005 - neplatný přístup) - zkoušel jsem módy kompatibility, dát tomu práva, starší verze atd.. - nic moc nepomáhá, jediné co jsem vypozoroval, tak to, že na pomalejším PC se chová stabilněji. Bugtracker už je vypnout, program je a osiřelý, nikdo se o to dál nestará, jde najít že se to děje, ale ne už řešení.. Nenapadlo vás někoho něco?

2) Android + WebUI  -  hry puštěné přes tads.org relativně fungují i na mobilních zařízení, ale jsou tam velké nedostatky ohledně formátování textu a podobných detailů - mám pocit, že by to všechno mělo jít JavaScriptem a CSS vyřešit, ale já jsem tím hodně nepolíbený.  Nezahlídl jste někdo už nějakou hotovější JS knihovnu, co by se o to dokázala postarat?  Samostatný android interpreter, co umí WebUI pravděpodobně neexistuje..

3) Windows Interpreter pro WebUI - jediné co to zvládne je pravděpodobně HTML Tads, kde je ale velký problém s chováním prohlížeče - používá nějaký prehistorický Explorer, takže nejdou testovat zvuky atd.. Javascript je taky hodně na hraně - opět neexistuje něco lepšího?

4) Jak je vlastně složitá migrace z WebUI na obyčejný TADS - na to téma jsou nějaké návody, podle všeho to nebude tak strašné, když oželím grafiku a ostatní.. Pletu se hodně? :)

5) MORE prompt  -  narazil jsem na takovou drobnost - při více textu v okně bych rád, aby se na konci viditelného framu ukázala hláška typu "Zmáčkni mezeru pro pokračování.", to udělat sám asi nedokážu, vygooglovat taky ne..

6) Vlastní hosting - nevím jak moc se dá spolehnout na tads.org . Zahlédl jsem i nějaké návody jak rozchodit vlastní server, ale popravdě jsem to zas tolik nestudoval - máte s tím někdo praxi? Je to reálně možné rozchodit a to stabilně, aby se z toho nestal za dvě hodiny třeba nějaký spambot, pro někoho, kdo Linux nainstaloval dvakrát v životě a radši hned zas utekl zpátky k Win?

Pak mně vrtá hlavou ještě pár drobností k samotnému TADSu a jeho knihovnám..
- HINT - podle dokumentace se HINTy tváří, že fungují na bázi samostatného menu - rád bych to měl "uvnitř" hry - tzn. na příkaz HINT by se napsala kontextová nápověda přímo do hry. Přehlédl jsem něco, resp. neexistuje knihovna co to řeší?

- herní slovník - vzhledem k tomu, že, jestli vůbec někdo, budou hru hrát lidi, co textovky neznaj, hodilo by se možná mít dostupný klikací slovník přímo ve hře - líbilo by se mi něco jako měl například Gateway od Legend - https://www.myabandonware.com/media/screenshots/f/frederik-pohls-gateway-1er/frederik-pohls-gateway_1.jpg . Opět líný dotaz - nezahlédl jste někdo knihovnu co to už řeší?

A poslední teď už spíš k webu - líbila by se mi online highscore tabulka - umím si technicky představit jak to vyřešit, ale nenapadá mě vlastně, kde to hostovat - neznáte nějakou webovou službu zdarma, která by mi dovolila hodit si tam html + možnost nějakýho zakladního PHP nebo něčeho podobného?


Ještě jednou děkuju za češtinu a návody - hrozně mi to pomohlo, je to boží - popravdě jsem snad nenarazil ne o moc lepší zdroje k TADS ani v angličtině. Vím taky, že těch X dotazů je trochu typu "Unesu to pane Lorenc?", ale i tak doufám, že aspoň něco se dozvím, takže předem díky i za každou reakci.


gaspoda

  • Plný člen
  • ***
    • Příspěvků: 141
    • Zobrazit profil
Díky moc za češtinu - muselo to dát hrozně práce a musím říct, že jsem ani nečekal, že to může takhle dobře fungovat.

Hm, docela dalo, ale právě mě motivovalo, že jsem viděl, jak dobře to může fungovat pro hráče, a říkal jsem si, že by byla škoda potenciálu nevyužít.

1) TADS Workbench + WebUI + moderní windows  -  opravdu velice často to padá

No jo, o tom se ví - něco je i v gitu opravené, ale nová verze nevyšla, Mike si dává od TADSu oraz. Jestli někdy nabere síly a opraví chyby nikdo neví. On celý workbench je vlastně doslova letitý a má i problém s tím, že nepodporuje UTF-8, to je slabina.

2) Android + WebUI  -  hry puštěné přes tads.org relativně fungují i na mobilních zařízení, ale jsou tam velké nedostatky ohledně formátování textu a podobných detailů

No, na mobily to bohuzel nikdo nevyladil, trochu práce by to dalo. Ale u textovek se hodně píše, myslím, že mobily jsou snažší pro hraní gamebooků.

3) Windows Interpreter pro WebUI - jediné co to zvládne je pravděpodobně HTML Tads, kde je ale velký problém s chováním prohlížeče - používá nějaký prehistorický Explorer, takže nejdou testovat zvuky atd.. Javascript je taky hodně na hraně - opět neexistuje něco lepšího?

Já Windows ani Workbench nepoužívám, tak nevím přesně, jak se to tam nastavuje. Princip je ale takový, že ten interpret ve webovém režimu prostě otevře server a vypíše adresu, tak to dělá frobtads na linuxu a tu adresu si pak otevřu v jakémkoliv prohlížeči. Jak ale přesvědčit Workbench, že to má otevřít v něčem modernějším, z paměti nevím.

Lepšího? No prostě to hostovat na veřejném serveru a pustit to v normálním prohlížeči, to je jasné. To je právě ta hlavní síla WebUI, že by mohla poskytnou vše, co moderní prohlížeče umí. Ale fakt nevím, jak si to rozdejchat lokálně při vývoji na Windows. Umím to jen na Linuxu s Frobtadsem.

4) Jak je vlastně složitá migrace z WebUI na obyčejný TADS - na to téma jsou nějaké návody, podle všeho to nebude tak strašné, když oželím grafiku a ostatní.. Pletu se hodně? :)

Záleží, co použiješ. Když budeš používat základní obyčejné věci, tak hra bude obojetná. Tedy ze stejného zdrojáku půjde zkompilovat hra pro normální interpret a pro webUI pouhou změnou několika řádek v makefile. Podrobněji je to rozebrané v:

http://tads.org/t3doc/doc/sysman/webui.htm

Třeba konkrétně Základna jde zkompilovat pro tradiční interpret, jen se z ní vynechají vlastnosti související s multiplayer hraním a online bodováním. Kdybys ale použil Banner API či zvuky v normálním interpretu či naopak ve webovém upravit Javascriptový frontend, tak pak seš s interpretem svázaný. Podobně se trochu liší možnosti HTML značek.

Obrázky používat můžeš, ale musí se ukládat do nějaké složky, kterou ve webovém interpretru povolíš ke stahování, viz http://tads.org/t3doc/doc/sysman/webui.htm#resfiles

5) MORE prompt

inputManager.pauseForMore(true);

A k tomu se ještě váží blízké funkce, jako:

inputManager.getKey(nil, nil);
inputManager.getInputLine(nil, nil);
cls();

6) Vlastní hosting - nevím jak moc se dá spolehnout na tads.org . Zahlédl jsem i nějaké návody jak rozchodit vlastní server.

Herní servery provozuje několik lidí, jsou zapojeny do "cloudu" kolem ifdb a může je využít kdokoliv - ty servery nespouští jen hry hostované na ifdb (byť v tom případě pokud člověk se člověk přihlásí, tak mu to ukládá savy do jeho účtu), ale ty servery dokážou pustit jakýkoliv herní soubor, který se někde nachází na HTTP adrese na internetu (ne https). Spolehlivé podle mě jsou, přímo je nemám nijak vyzkoušené, ale provozuje je úžší skupina lidí, kteří se kolem TADSu motají a ti celkem vědí, co dělají. Určitě není důvod se tím trápit sám, veřejné servery jsou tu právě proto, aby je lidé mohli využívat a nemuseli se patlat s provozem vlastního serveru, zvlášť pokud to není jejich parketa.

- HINT - podle dokumentace se HINTy tváří, že fungují na bázi samostatného menu - rád bych to měl "uvnitř" hry - tzn. na příkaz HINT by se napsala kontextová nápověda přímo do hry.

Myslím, že Eric Eve měl v nějaké hře příkazy "think" a "think harder" (popravdě nevím, jestli to byla hra v TADSu či Informu), ale je pochopitelně možnost udělat si svůj zjednodušený hint systém, který nebude využívat menu. Koneckonců vlastně Boris v Základně na asteroidu sloužil trochu jako hintsystém, "rád" poradil s opravou, což může být také přístup.

Ale to hintmenu radím vyzkoušet, abys věděl, jak funguje, jak se menu proměňuje v praxi v různých okamžicích. Pointa je ve dvou věcech. Jednak skutečně se jedná o kontextově senzitivní systém, tedy s přispěním programátora nabízí jen ty nápovědy, které jsou zrovna relevantní, jenže to v každém okamžiku hry může být celkem dost různých věcí zároveň a jen hráč ví, o čem zrovna přemýšlí. Vem si, že můžeš vykrádat trezor i ovládat robota nebo luštit papírky a s každou akcí seš jinak daleko, proto má TADS na hinty menu, ve kterém si vybereš kapitolu a v každé kapitole nějaké téma, o kterém byses potřeboval poradit. A v tom přijde ten druhý moment, že nápovědový systém umožňuje nápovědy k jedné věci dávkovat po malých krocích a nechat hráči, aby si vybral, jak silnou nápovědu chce. Aby mu to pomohlo, ale nezkazilo všechnu radost a zároveň když by byl beznadějně zaseklý, aby si mohl nechat napovědět víc. Tohle nejde dost dobře udělat bez menu.

hodilo by se možná mít dostupný klikací slovník přímo ve hře. [...] Opět líný dotaz - nezahlédl jste někdo knihovnu co to už řeší?

Tohle je určitě složitější a ne, nevím o žádné hotové knihovně. Jednoduše se dají dělat odkazy, na které když klikneš, tak přenesou příkaz do řádky a spustí ho, ale takové, které tam přenesou jen část příkazu, to bys musel jít hodně do hloubky. Sám nevím, jak bych to dělal, musel bych to podrobně načís a zkoušet, řešení z rukávu nevysypu. Určitě by to ale bylo odlišné pro tradiční interpret a webUI, určitě se dá kompletně otesat JavaScript toho WebUI a udělat doslova cokoliv, když umíš JavaScript (já s ním poněkud válčím), ale už je to složitější. Nicméně abych byl trochu pozitivní, tak jeden maník udělal ukázku, co se také ve WebUI dá udělat, protože ho zatím moc lidí moc nevyužilo, což je docela škoda, za mě je to jedna z nejvíce podceněných věcí v TADSu ze strany komunity:

https://intfiction.org/t/tads-3-webui-demo-game-and-mini-guide/41491

líbila by se mi online highscore tabulka - umím si technicky představit jak to vyřešit, ale nenapadá mě vlastně, kde to hostovat

Něco takového jsem měl udělané a technicky je to skutečně celkem jednoduché. Kde to hostovat nevím, asi na každém rohu, PHP umí každý, k tomu se vyjadřovat nechci. Chtěl jsem spíš upozornit na některé důsledky, které to má. Abys mohl z hry v TADSu posílat online něco někam, tak to musí skutečně být hra založená na WebUI, tradiční interpret by to nezvládl mj. z toho důvodu, že tradiční interpretry fungují jako sandbox, který běžící hru kompletně izoluje od okolního prostředí počítače z bezpečnostních důvodů. Ale i u toho WebUI je v tom háček, veřejné servery dokážou hostovat hry (i cizí), ale jen takové ty běžně se chovající. Právě z důvodů bezpečnosti je myslím na veřejných serverech síťová komunikace zakázaná. Pro mě to nebyl problém, protože si hostuji komplet svůj server, mám i udělaný storage server a celkem v tom umím chodit, ale pro běžného uživatele TADSu to může být docela překážka.


lopik

  • Nováček
  • *
    • Příspěvků: 5
    • Zobrazit profil
Díky za rychlou odpověď..

Citace
5) MORE prompt

inputManager.pauseForMore(true);
A k tomu se ještě váží blízké funkce, jako:
inputManager.getKey(nil, nil);
inputManager.getInputLine(nil, nil);
cls();

Na tohle už jsem trochu koukal, ale je tam problém, že nedokážu zjistit, jak velké okno s textem vlastně je, ani kolik textu to vlastně vypíše - tzn. jak poznat, že už je text mimo viditelný frame. Zkoušel jsem koukat zběžně i do output.t a podobných knihoven, něco jsem hledal v dokumentaci a hodně input/output funkcí s WebUi asi moc nefunguje..
 S tím bude možná částečně spojené i podivné chování timeDelay(delay) - rád bych například "dramatickou pauzu" při vypisování textu, případně změnit i celkový feel z hraní, kdyby se text vypisoval např. pomaleji  bohužel jsem narazil na to, že se výstup celý nejdříve připraví do nějakého "bufferu", který se pak najednou vyplivne až k nové příkazové řádce.. - tzn. že např. něco jako

"Lezeš po žebříku."
timeDelay (1000)
"Už jsi nahoře, ještě si potřebuješ oddychnout"
timeDelay (1000)

se chová tak, že po napsání JDI NAHORU nejdřív čekáš dvě sekundy a pak až to najednou napíše "Lezeš po žebříku. Už jsi nahoře...". To ale půjde vyřešit s použitím Inputmanageru..




Citace
6) Vlastní hosting - nevím jak moc se dá spolehnout na tads.org . Zahlédl jsem i nějaké návody jak rozchodit vlastní server.

Herní servery provozuje několik lidí, jsou zapojeny do "cloudu" kolem ifdb a může je využít kdokoliv....[/quote]

 To je dobrá zpráva - co mě trochu načalo je to, jak je vidět, že spousta věcí obzvášť kolem TADS v dnešní době už  nefuguje - různé linky z tads.org, bugtracker atd.  O co mám dál trošku strach je i traffic - nevím jak by se tvářili na hru, kde je X MB multimediíí, co se každou chvíli volají ze serveru. I když to se dá naštěstí vyřešit linkováním mimo "hru", není třeba dávat je do vnitřních Resource Files.. Kvůli dalším věcem budu asi potřebovat beztak nějaký VPS, takže jsem přemýšlel, jestli by to tam nemělo smysl rovnou rozchodit..


- HINTY - máš úplnou pravdu, nad tím se víc zamyslím. Něco jako hint system se dá vyřešit například mobilem, něco i přes TIPY nebo přímo ve hře v popisech atd..  -  počítám, že finální hru budou hrát lidi, co vlastně nějaký těžký puzzly atd, vůbec nechtějí - snažím se to udělat co nejpřístupnější, proto i to WebUi, kde, jak píšeš, jde hostovat i  mimo IFDB - stačí dát kamkoliv jeden link..



hodilo by se možná mít dostupný klikací slovník přímo ve hře. [...] Opět líný dotaz - nezahlédl jste někdo knihovnu co to už řeší?


 jeden maník udělal ukázku, co se také ve WebUI dá udělat, protože ho zatím moc lidí moc nevyužilo, což je docela škoda, za mě je to jedna z nejvíce podceněných věcí v TADSu ze strany komunity:

https://intfiction.org/t/tads-3-webui-demo-game-and-mini-guide/41491


Bez toho odkazu bych neudělal nic - taky jsem na to narazil a je to jeden z mála zdrojů, z kterýho se dá i pro laika "opsat" jak se vlastně dá s WebUi  a potažmo HTML, JS a podobně zacházet - navíc to perfektně vysvětlil - jeho ukázku jsem v podstatě jen upravil, aby mi to ukazovalo grafické okno a komunikovalo to s ním jak potřebuji.. K tomu se trochu váže i to highscore - naivně si myslím, že to půjde udělat tak, že ven bude komunikovat přímo vložená html stránka, která IFDB servery "obejde" - dá se přes to rozchodit vkládání externích médií, kde funguje i ovládání  (i když je fakt, že jsem něco preventivně povoloval i přímo v kódu hry) takže už by nemusel být takový problém poslat navíc pár textových dat..

O slovník se asi z čista pokoušet vůbec nebudu - myslel jsem na něj více kvůli přístupnosti pro běžné uživatele + možnost klikání na telefonu, ale když si představím ty různé "herní" problémy se schovanými věcmi a podobně a navíc to že bych to musel ještě celý nějak zkusti napsat..


lopik

  • Nováček
  • *
    • Příspěvků: 5
    • Zobrazit profil
Ještě k Workbenchi a češtině - je to mrzutá situace, naštěstí jde používat externí editor..  Workbench sice neumí české znaky, ale aspoň nic nerozbije a to ani při úpravách přímo uvnitř  -  např. při chybách při komplilaci, se dá nějaká ta závorka opravit rovnou a po uložení se české znaky nerozhážou. Horší je to neustálé padání..


gaspoda

  • Plný člen
  • ***
    • Příspěvků: 141
    • Zobrazit profil
Na tohle už jsem trochu koukal, ale je tam problém, že nedokážu zjistit, jak velké okno s textem vlastně je, ani kolik textu to vlastně vypíše - tzn. jak poznat, že už je text mimo viditelný frame.

Aha, to jsme se úplně nepochopili. To, co jsem psal, tak je myšlené na dramatickou pauzu v určité situaci v příběhu, ne na automatické pozastavování výpisu při dlouhém textu, to by se muselo asi dělat na klientu JavaScriptem, tam teprve máš nějaký přístup k metrice vyrenderovaného textu a scrollingu. Očekáváš takové situace běžně, protože ti jde o malý displej mobilu?

To ale půjde vyřešit s použitím Inputmanageru..

Ano, je potřeba to dělat přes inputManager, protože funkce, které jsi zmínil, jsou nízkoúrovňovým API a nepočítají s bufferování textu. V http://tads.org/t3doc/doc/techman/t3inout.htm je to více rozebrané, je to očekávané chování, nízkoúrovňové funkce nemá používat programátor přímo.

naivně si myslím, že to půjde udělat tak, že ven bude komunikovat přímo vložená html stránka, která IFDB servery "obejde"

To asi ano, i když teď z paměti si nejsem jistý, jak je to content security policy, ale minimálně vkládat odkaz na obrázek s daty v cestě by mělo jít.

Ještě k Workbenchi a češtině - je to mrzutá situace, naštěstí jde používat externí editor..  Workbench sice neumí české znaky, ale aspoň nic nerozbije a to ani při úpravách přímo uvnitř  -  např. při chybách při komplilaci, se dá nějaká ta závorka opravit rovnou a po uložení se české znaky nerozhážou. Horší je to neustálé padání..

Já už jsem kolikrát přemýšlel, jestli by nejlepší nebyla cesta, kdyby někdo udělal jednoduché vývojové prostředí na webu - třeba monaco editor plus panýlek s nabídkou souborů, ukládání do gitu, playtest přímo přes webui, postranní browser skrz dokumentaci, nějaká sdílená databáze pro ukázky řešení běžných problémů... Ale asi by to i tak bylo hodně práce.


lopik

  • Nováček
  • *
    • Příspěvků: 5
    • Zobrazit profil
Citace
.. muselo asi dělat na klientu JavaScriptem, tam teprve máš nějaký přístup k metrice vyrenderovaného textu a scrollingu. Očekáváš takové situace běžně..

Javascript asi bude cesta, na to by i něco mohlo jít najít..  Je to taková blbost, ale ty situace nastávají vlastně dost často - jakýkoliv delší text to spustí.. Hru jako takovou dělám spíš na menší okno, navíc půlku zabere grafika. Teď se to chová tak, že nezobrazený text naštěstí neodskroluje, ale to že jde zmáčknout mezerník a nemusí se šahat na lištu nebo šipky nemusí každého napadnout..


gaspoda

  • Plný člen
  • ***
    • Příspěvků: 141
    • Zobrazit profil
Ještě k Workbenchi a češtině - je to mrzutá situace, naštěstí jde používat externí editor..  Workbench sice neumí české znaky, ale aspoň nic nerozbije a to ani při úpravách přímo uvnitř  -  např. při chybách při komplilaci, se dá nějaká ta závorka opravit rovnou a po uložení se české znaky nerozhážou. Horší je to neustálé padání..

Trochu jsem si hrál, abych viděl, co zhruba je možné, ale je to značně nekompletní. Zkus na http://tads.cz/wide/ zmáčknout ikonu otevřít a napsat klíč "asteroid". Ikonou konsole se otevře prostor, kde jsou sem tam vidět chybové hlášky a pomocí ikonky play se spustí. Je potřeba povolit otevření vyskakovacího okna/záložky. Není tam autosave, každý soubor se musí uložit ikonou či ctrl+s.


lopik

  • Nováček
  • *
    • Příspěvků: 5
    • Zobrazit profil
Hezký editor!


Savování už nakonec vyřešil, tak nějak jak jsem čekal -

TADS pošle webevent na frame, kde to Javascript v dalším iframu přepošle přes GET na PHP server..  Bezpečnost je teda prakticky nulová, ale pro tyhle účely to celkem funguje, uživatelé můžou trochu rozbít formátování, neumí to zatím diakritiku, ale jinak je to relativně robustní (html tagy neprojdou. :-)


TADS -
Kód: [Vybrat]
modify ScoreAction
   
    execAction ()
    {
// Vypise skore jako predtim       
    inherited;
// Prepne graficke okno na html
      webMainWin.createFrame(skoreWin, 'skoreweb','0, 0 , 100%, 50%');
// Zepta se na jmeno
    "</br>Pokud chces zvecnit v sini slavy, napis nyni sve jmeno! </br>";
    jmenoHrace = inputManager.getInputLine(nil, nil);
        if ( jmenoHrace != '' ) {
            "OK, uz vim, ze jsi <<jmenoHrace>>. Zapisuji te na zed slavy </br>";
        // Reseno az ve skore.js - toto nechce poslat.. Vytvor URL POST pro skore.php ve formatu skoreWin.src + ?jmeno=Dan&skore=15&tahy=100
        // skoreUrl = skoreWin.src+'?jmeno='+jmenoHrace+'&skore='+libScore.totalScore+'&tahy='+libGlobal.totalTurns;
        // Posle JS event s adresou do Skore framu, který se restaruje s danou adresou a PHP prepise tabulku -
            skoreWin.sendWinEvent('<map><jmeno><<jmenoHrace>></jmeno></map><map><skore><<libScore.totalScore>></skore></map><map><tahy><<libGlobal.totalTurns>></tahy></map>');
           } ;
       
    // schova okno - samotný skoreWin ukradne focus, musím dát vsechny
    webMainWin.createFrame(obrazkyWin, 'obrazek','0, 0 , 100%, 50%');
    webMainWin.createFrame(skoreWin, 'skoreweb','0, 0 , 100%, 0%');
    webMainWin.createFrame(statuslineBanner, 'statusline','0, obrazek.bottom, 100%, 45px');
    statuslineBanner.init();
    statusLine.statusDispMode = StatusModeBrowser;
    webMainWin.createFrame(commandWin, 'command','0%, statusline.bottom, 100%, 100%');
    }
;
 

HTML část
Kód: [Vybrat]
<body>
<script type="text/javascript" src="/webuires/util.js"></script>
<script type="text/javascript" src="/webuires/skore.js"></script>
<body onload="javascript:skoreWinInit();">
<div class="bg">
<div class="deska" align=center>
<iframe class="obsah" id="skorephp"
src="http://xxxxxxxx/skore.php">
</iframe>
</div>
</div>
</body>

JavaScript:
Kód: [Vybrat]
function skoreWinInit()
 {
 utilInit();
 getInitState();
}

function onGameEvent(req, resp)
{

// adresa kde je skore.php
hosting = 'xxxxxxxx/skore.php'

// Datum do stringu retezec - opsano z jakpsatweb.cz
var datum = new Date(); // aktuální datum
var retezec = ""; // postupně se k němu budou přičítat další řetězce
retezec += datum.getDate() + ". "; // Den v měsíci
retezec += (1 + datum.getMonth()) + ". "; // Měsíce jsou číslovány od nuly
retezec += datum.getFullYear(); // Rok ve formátu 0000

// udela adresu  - format -  hosting?jmeno=Dan&skore=15&tahy=100&datum=1.6.2020
novaurl = hosting + '?jmeno=' + (xmlChildText(resp, "jmeno")) + '&skore=' + (xmlChildText(resp, "skore")) + '&tahy=' + (xmlChildText(resp, "tahy")) + '&datum=' + retezec;

// vymění src vnoreneho iframu ve skore.htm
document.getElementById("skorephp").src=novaurl;

// debug - vypíše novaurl
// alert (novaurl);
 }

function onGameState(req, resp)
 {}

a konečně PHP část na serveru, co se stará o samotnou tabulku:
Kód: [Vybrat]
<HTML><HEAD><TITLE>Skóre</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250" />
<style>
body {
  color: #CCCCCCCC;
  overflow: hidden;
}
b {text-allign: center;}
table {
text-align: left;
position = absolute;
width = 100%;
}
th, td {
}
</style>

<BODY>
<div align="center">
<b> TOP 10 Speedstopu </b>
</p>
<div align="center" width=90%>

<?php
// Načte pole
$soubor "skore.dat"
$vypis file_get_contents($soubor);
$skoretable unserialize($vypis);
// Načte get
$jmeno =  $_GET['jmeno'];
$skore =  $_GET['skore'];
$tahy =  $_GET['tahy'];
$datum =  $_GET['datum'];
  
// Když není jméno v get, neukládá nic
if(isset($_GET['jmeno']))
{
  
// Přidá řádek v poli 
  
$jmeno =  $_GET['jmeno'];
  
$skore =  $_GET['skore'];
  
$tahy =  $_GET['tahy'];
  
$datum =  $_GET['datum'];

  
$skoretable ['11'] = array ( 'jmenozaznam' => $jmeno ,
                                      
'skorezaznam' => $skore ,
                                      
'tahyzaznam' => $tahy ,
                                      
'datumzaznam' => $datum 
                                       
);

  
// Setřídí podle skore a tahu
  
$sort = array();
  foreach(
$skoretable as $k=>$v) {
      
$sort['skorezaznam'][$k] = $v['skorezaznam'];
      
$sort['tahyzaznam'][$k] = $v['tahyzaznam'];
  }

  
array_multisort ($sort['skorezaznam'], SORT_DESCSORT_NUMERIC$sort['tahyzaznam'], SORT_NUMERIC$skoretable);

   
// Uřízne poslední záznam (11. záznam)

  
unset($skoretable['11']);

   
// Uloží pole
  
$noveserialized serialize($skoretable);
  
$otevren fopen($soubor"r+"); 
  
rewind($otevren); 
  
fputs($otevren,$noveserialized); 
  
fclose($otevren); 
}
// Zobrazí pole

// echo '<pre>'; print_r($skoretable); echo '</pre>';

function html_table($data = array ())
{
    
$rows = array();
    foreach (
$data as $row) {
        
$cells = array();
        foreach (
$row as $cell) {
            
$cells[] = "<td>{$cell}</td>";
        }
        
$rows[] = "<tr>" implode(''$cells) . "</tr>";
    }
    return 
"<table width = 100% aligh = center><th width=40%></th><th width=15%>skóre</th><th width=15%>tahů</th><th width=30%>datum</th>" implode(''$rows) . "</table>";
}

echo 
html_table ($skoretable);

?>

</div>
</div>
</BODY></HTML>




gaspoda

  • Plný člen
  • ***
    • Příspěvků: 141
    • Zobrazit profil
TADS pošle webevent na frame, kde to Javascript v dalším iframu přepošle přes GET na PHP server..  Bezpečnost je teda prakticky nulová

Jsou v tom dvě rizika - jednak to uživatel může zablokovat, když to jde z jeho prohlížeče, s tím nic moc neuděláš, druhak ti může poslat schválně něco jiného (např. nekonečno bodů :-)) a to bys vyřešil tím, kdybys požadavek podepisoval, tedy posílal s ním nějaký klíč, který je vygenerován na základě obsahu požadavku a který umí udělat jen hra a pro hráče je neznámý. Např. jednoduchý hash z dat + tajný klíč.