Pár věcí do pořádku

Vaše problémy, rady a skripty týkající se tohoto prográmku
Odpovědět
Uživatelský avatar
Smrt Bob
Misspelling Chicken
Misspelling Chicken
Příspěvky: 5
Registrován: 08 zář 2006 17:37
Kontaktovat uživatele:

Pár věcí do pořádku

Příspěvek od Smrt Bob »

Nevím, ako tuto položku vidí GM, ja osobně jsem skripty postovat nechci ani bych je tu nerad viděl, ale:

Funkce:
Mám funkci piti(), chci ji spusti v rámci jiné(třeba tréning).
zde jsem na internetu viděl hodně špatných popisů
A) UO.Exec() - Funkci spustí, nikoliv v rámci sama sebe, ale jako další(Není to zastaralé ani špatné)
B) Piti() - Zde funkci spustí a čeká na příkaz return, nebo konec funkce
Výhoda A) je že funkci nadále nekontrolujete a beží vám dvě funkce naráz, můžete ji vypnout pomocí ,terminate piti
Výhoda b) je čekání an konec funkce, nemusíte se bát pauz a hlavně možnost získaní hodnoty funkcí vrácenou(pomocí funkce return Hodnota)
použití funkce Uo.Exec() pro waitmenu je obdobné, dnes už asi přežité

Edit: až zas narazím na nějaké tyto vtipné popisy, tak to sem napíšu.
No a posthunt je něco jako chození v RARE na trh, je to pro lidi co hledají kompenzaci pro absenci rozdílu ve velikosti postav ve hre.
Uživatelský avatar
Smrt Bob
Misspelling Chicken
Misspelling Chicken
Příspěvky: 5
Registrován: 08 zář 2006 17:37
Kontaktovat uživatele:

Příspěvek od Smrt Bob »

Správná pauza ma:
A) Dynamickou cast, reagujici na spravné podmínky
B) Statickou část bránicí chybě při selhání dynamické části
c) Pojistky na případy nouze(Třeba tady je to ruční pojistka)

Kód: Vybrat vše

wait(2000)(minimum pro činnost - 300ms)
repeat
    wait(300)
until UO.Injournal("Přesná hláška fizzu|Přesná hláška uspěchu|Pauziruj")
if UO.Injournal("Pauziruj")
    repeat
        wait(300)
    until UO.Injournal("Resume")
end if
Nebo:

Kód: Vybrat vše

sub Cekej(Time, Text)
    UO.DeleteJournal()
    wait(Time)
    repeat
        wait(300)
    until UO.Injournal(Text) or UO.Injournal("Pauziruj")
    if UO.Injournal("Pauziruj")
        repeat
            wait(300)
        until UO.Injournal("Resume")
    end if
return 0
end sub
No a posthunt je něco jako chození v RARE na trh, je to pro lidi co hledají kompenzaci pro absenci rozdílu ve velikosti postav ve hre.
Carda
Elder Letter
Elder Letter
Příspěvky: 211
Registrován: 07 zář 2006 19:12

Příspěvek od Carda »

Hmm s tim Cekej je to pekny napad ;) Spis bych misto toho pauziruj napsal 'World save has been initiated|Resync|RESYNC|resync'. Ale nesmel by ten kdo to resyncuje udelat nejakej preklep :D
Spike
Orc Writer
Orc Writer
Příspěvky: 77
Registrován: 08 zář 2006 01:24
Kontaktovat uživatele:

Příspěvek od Spike »

Smrt Bob píše:Správná pauza ma:

Kód: Vybrat vše

sub Cekej(Time, Text)
    UO.DeleteJournal()
    wait(Time)
    repeat
        wait(300)
    until UO.Injournal(Text) or UO.Injournal("Pauziruj")
    if UO.Injournal("Pauziruj")
        repeat
            wait(300)
        until UO.Injournal("Resume")
    end if
return 0
end sub
Tak to pauziruj jsem teda absolutne vubec nepochopil. Jakej to ma mit vyznam????
Hobbit
Misspelling Chicken
Misspelling Chicken
Příspěvky: 7
Registrován: 22 zář 2006 10:27

Příspěvek od Hobbit »

napises (reknes do hry, treba pomoci makra) Pauziruj a vono to zacne delat pauzu doud nenapises Resume. Predpokladam ze tak to autor myslel.

Na druhou stranu - pokud je dobre napsana dynamicka pauza, i pri worldsave/resyncu se nic nestane - klient posle serveru pozadavek na akci a protoze se mu nevrati odpoved vyjadrujici provedeni akce bude cekat a dalsi pozadavek na akci uz neposle.

Je to vsechno o kontrole logu, bohuzel u nekterych skillu se musi psat pauza trochu oklikou - protoze akce oznami ze zacne, ale uz nenahlasi skonceni, nebo ho nenahlasi vzdy (mam dojem treba meditka - uz sem asi rok na inject nesahnul, takze si to presne nepamatuju).
Tam se pak pise dynamicka pauza trochu jinak - ohlidame si ze se vratilo zapoceni akce, pockame pevne stanovenej casovej usek a pak akci zacneme znovu.
Pokud je resync, worldsave ci neco podobneho, prvni akce nemusi skoncit regulerne (server ji nezpracuje) a my uz posleme pozadavek na novou akci - ale protoze u ni se uz nenahlasi to, ze zacala, script se opet zastavi - na serveru v tu chvili nevisi jeden ale dva pozadavky, nicmene dalsi se uz neposlou a to je celej vtip tyhle ochrany - neposilat serveru pozadavky na akce, kdyz je nezpracovava a uklada si je jenom do fronty.

Samozrejme - pokud si udelate ochrany i na hlasky worldsave/resync je to jenom dobre, kazdy ulehceni prace serveru se hodi.

V kazdym pripade doporucuju udelat si "nouzovou brzdu" - klavesovou zkratku s funkci terminate all - kdyz se vam v injectu neco pokaka, muzete ho snadno zastavit
Odpovědět