Stránka 1 z 1
Pár věcí do pořádku
Napsal: 08.09.2006 22:36:56
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.
Napsal: 12.09.2006 13:24:16
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
Napsal: 12.09.2006 15:54:25
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

Napsal: 19.09.2006 17:59:14
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????
Napsal: 22.09.2006 10:34:32
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