ACID: Porovnání verzí

Z WoWResource Wiki
Přejít na: navigace, hledání
m
m (ACID SVN)
Řádek 228: Řádek 228:
 
* [http://wiki.udbforums.org/index.php/Event_AI UDB wiki]
 
* [http://wiki.udbforums.org/index.php/Event_AI UDB wiki]
 
* [http://www.wowresource.eu/index.php?showtopic=6905 Původní téma na fóru]
 
* [http://www.wowresource.eu/index.php?showtopic=6905 Původní téma na fóru]
 +
* [https://sd2-acid.svn.sourceforge.net/svnroot/sd2-acid ACID SVN]
  
 
[[Kategorie:Scripty]]
 
[[Kategorie:Scripty]]

Verze z 10. 5. 2008, 17:55

Od revize 220, ScriptDev2 implementoval DB-based skriptovací systém, který dovoluje použití databázi (MySQL) pro vytvoření vlastních události. Systém se jmenuje ACID (Artificial Creature Intelligence Database), dříve známý pod názvem EventAI. .

A základní 2 věty eventAI zní: „Co dělat? Kdy to dělat?“. První věta (Co) se bude nazývat akci. Druhá věta (Kdy) se bude nazývat událost. Kdokoliv, kdo chce vytvořit eventAI skript potřebuje jen odpovědět na dvě otázky nahoře. Nějaké události se budou vyskytovat jen jednou, zatímco jiné mohou být časované tak, aby se spouštěla ve specifikovaném intervalu, který si určíme. Základní představa skriptu byla vysvětlena, popojdeme tedy dále. Událost může užívat tři různé parametry a tyto parametry ovládají různé věci v závislosti na události. Pokud parametr není výslovně pojmenovaný pro událost, nebude užívaný pro tu událost.

V databázi ScriptDev2 najděte tabulku `eventai_scripts` a `localized_texts`. Pouze v těchto dvou tabulkách se tyto události tvoří. Tabulka `eventai_scripts` slouží k deklarování události a tabulka `localized_texts` slouží k uložení vlastních Textů (Text ID). Zaměříme se nyní na tabulku `eventai_scripts`. Její první sloupec `id` je primary key, který nás vůbec nezajímá. Druhý sloupec `creature_id`. Jak už z názvu vychází, zde se bude zapisovat creature ID. Asi se ptáte „A jak to ovlivní tu creaturu?“. Tato creatura bude hlavním děním naší události. Další sloupec `event_type` je sloupec, do kterého zapisujeme typ události (Druhá věta).

Jednotlivé typy událostí (event_type)
ID Jméno Parametr 1 Parametr 2 Parametr 3 Popis
0 EVENT_T_TIMER_REPEAT Čas N N Událost se opakuje, když je creatura v boji.
1 EVENT_T_TIMER_SINGLE Čas N N Vyčká Čas po začátku boji, pak spustí událost.
2 EVENT_T_TIMER_OOC_REPEAT Čas N N Událost se opakuje, je-li creatura mimo boji.
3 EVENT_T_TIMER_OOC_SINGLE Čas N N Vyčká Čas po konci boje, pak spustí událost.
4 EVENT_T_HP HP % Čas * N Událost se spustí, jakmile HP creatury dosáhne HP (v procentech). Pokud Čas není nula opakuje se.
5 EVENT_T_MANA MANA % Čas * N Totéž, co u HP s výjímkou, že je místo HP mana.
6 EVENT_T_AGGRO N N N Událost se spustí, při nabrání aggra.
7 EVENT_T_KILL Čas * N N Událost se spustí, při zabití hráče, pokud není Čas = 0 vyčká a poté se spustí.
8 EVENT_T_DEATH N N N Událost se spustí, při zabití creatury.
9 EVENT_T_EVADE N N N Událost se spustí, při resetování creaturových AIček
10 EVENT_T_SPELLHIT Spell ID * Čas * N Událost se spustí, při úderu kouzla. Pokud je Spell ID = 0, událost se spustí, při úderu jakýmkoli kouzlem. Pokud není Čas = 0, po úderu kouzlem vyčká Čas a poté se spustí.a


Další sloupec `event_param1` je typu parametru. To znamená, že do tohoto sloupce zapisujeme data, které vstupují do události a ovlivňují ji. Mají své vlastní typy (Čas v ms, Procenta, Flags). Jak jste si mohli všimnout v tabulce jsou popsány jednotlivé paramatery 1 2 3 k určitým událostním typům. Uvedeme si malinký příklad, ať nejste tak zmatení.

Zapíši do `creature_id` ID 123. Do `event_type` zapíši 4, což je EVENT_T_HP - znamená, že tato událost se spustí při dosažení určitého % HP. Určitého % HP je myšleno co? Hádejte  :) ... Je to parametr 1 (z tabulky můžete vyčíst) no a kde najdu tuto hodnotu? V tabulce, konkrétně ve sloupci `event_param1`. Jednoduché, že? Nu, přejdeme dále. Další sloupec je `event_param2` má stejné vlastnosti jako parametr 1 (`event_param1`) akorát nemusí být vždy použit (parametr 1 také nemusí být vždy použit). Uvedeme si příklad. Představte si, že Vám maminka peče koláč a teďkom vytáhne tři koláčové formy, ale dělá jenom jeden koláč. Jenže, co kdyby přišla návštěva? Musela by uvařit tři koláče a použít tři koláčové formy. Tak stejně je to i s parametry. Např. při časovači Vám stačí čas (interval), za který se určitá akce opakuje, kdežto u EVENT_T_HP by se mohl hodit i další parametr např. k předání času jako zpoždění. Shrneme si zatím, co jsme zapsali: `creature_id` 123, `event_type` 4 (EVENT_T_HP), `event_param1` 90 (při 90% HP) `event_param2` 2000 (2000 milisekund spoždění). Nyní jsme si „zodpověděli“ druhou větu - událost (Kdy to dělat). No a co naše první věta? Když se na to podíváte z dálky na druhou větou (Kdy to dělat), je v ní napsáno, že se má něco dělat! A co? To nám řekne naše první věta. Nyní si to převedeme na eventAI. Další sloupec v tabulce `eventai_scripts` je `action1_type`. Do tohoto sloupce ukládáme jaký typ akce se má provést při naši události.

Jednotlivé typy akcí (action_type)
ID Jméno Parametr 1 Parametr 2 Parametr 3 Popis
1 ACTION_T_SAY Text ID N N Creatura řekne text s určitým Text ID /say
2 ACTION_T_YELL Text ID N N Creatura zařve text s určitým Text ID /yell
3 ACTION_T_TEXTEMOTE Text ID N N Creatura vyjádří textový cit. /e
4 ACTION_T_SOUND Sound ID N N Creatura pustí zvuk.
5 ACTION_T_EMOTE Emote ID N N Creatura vyjádří cit. /cry
6 ACTION_T_RANDOM_SAY Text ID 1 Text ID 2 Text ID 3 Vybere z těchto 3 Text ID jednu a řekne ji. Pokud je Text ID = -1 vynechá jej.
7 ACTION_T_RANDOM_YELL Text ID 1 Text ID 2 Text ID 3 Vybere z těchto 3 Text ID jednu a zařve ji. Pokud je Text ID = -1 vynechá jej.
8 ACTION_T_RANDOM_TEXTEMOTE Text ID 1 Text ID 2 Text ID 3 Vybere z těchto 3 Text ID jednu a vyjádří textový cit /e. Pokud je Text ID = -1 vynechá jej.
9 ACTION_T_RANDOM_SOUND Sound ID 1 Sound ID 2 Sound ID 3 Vybere z těchto 3 Sound ID jednu a pustí ji. Pokud je Sound ID = -1 vynechá ji.
10 ACTION_T_RANDOM_EMOTE Emote ID 1 Emote ID 2 Emote ID 3 Vybere z těchto 3 Emote ID jednu a emotuje ji. Pokud je Emote ID = -1 vynechá ji.
11 ACTION_T_CAST Spell ID T-Type Interrupt * Vrhnout kouzlo na cíl. Pokud je Interrupt = 1, kouzlo se může přerušit.
12 ACTION_T_SUMMON Creature ID T-Type Duration * Vyvolá kreaturu (peta). Duration čas za jak dlouho má pet zmizet. Pokud je Duration = 0 (výchozí), pet zmizí při zabití.
13 ACTION_T_THREAT_SINGLE_PCT Threat % T-Type N Modifikuje hrozbu cíle procentem Threat.
14 ACTION_T_THREAT_ALL_PCT Threat % NU N Modifikuje hrozbu každého v okolí procentem Threat.
15 ACTION_T_QUEST_COMPLETE Quest ID T-Type N Dokončí quest s ID Quest ID (Musí být hráč).
16 ACTION_T_QUEST_CASTCREATUREGO Quest ID Spell ID T-Type Emulates spell cast on the creature for the target (must be a player)
17 ACTION_T_SET_UNIT_FIELD Index Value T-Type Sets unit field at the index to the value given for the target
18 ACTION_T_SET_UNIT_FLAG Flag(s) T-Type N Nastaví flag(y) na cíli.
19 ACTION_T_REMOVE_UNIT_FLAG Flag(s) T-Type N Odstraní flag(y) na cíli.
20 ACTION_T_AUTO_ATTACK Boolean N N Pokud je Boolean 0 (false), zastaví se auto útok, jestli je Boolean 1 (true), útok bude pokračovat.
21 ACTION_T_COMBAT_MOVEMENT Boolean N N Pokud je Boolean 0 (false), zastaví se bojový pohyb, jestli je Boolean 1 (true), bude se pohybovat.
22 ACTION_T_SET_PHASE Phase # N N Sets current phase to number given
23 ACTION_T_INC_PHASE Number N N Increments (or decrements) the phase by given number.

Opět máte tabulku s popisem. Opět, tyto akce pobírají parametry, které je ovlivňují. U parametrů akcí nám přibyl další typ parametru a to je TARGET (cíl).

Seznam všch možných TARGETů
ID Name Description
0 TARGET_T_SELF Cíl je sám.
1 TARGET_T_HOSTILE Cíl je stávající oběť (obvykle cíl s největším aggrem v okolí).
2 TARGET_T_HOSTILE_SECOND_AGGRO Cíl je creatura s druhým největším aggrem.
3 TARGET_T_HOSTILE_LAST_AGGRO Cíl je creatura s nejmenším aggrem.
4 TARGET_T_HOSTILE_RANDOM Náhodné vybrání cíle (cíl v okolí).
5 TARGET_T_HOSTILE_RANDOM_NOT_TOP Náhodné vybrání cíle, mimo creaturu s největším aggrem (cíl v okolí).


Ukážeme si teď pár praktických příkladů...

INSERT INTO `eventai_scripts` (
`id`,
`creature_id`,
`event_type`,
`event_param1`,
`event_param2`,
`action1_type`,
`action1_param1`,
`action2_type`,
`action2_param1`,
`comment`
) 
VALUES 
(NULL,'123','4','90','2000','1','1','4','1564',
'Popis neni povinny.. jen kvuli prehledu');
  • event type - EVENT_T_HP
  • event parametr 1 - 90 (procenta HP viz. tabulka)
  • event parametr 2 - 2000 (čas (ms) viz. tabulka - TARGETy dole jsou vysvětlivky -> nepovinný parametr označován * )
  • event parametr 3 - N (není žádný, viz. tabulka - TARGETy dole jsou vysvětlivky)
  • action1 type - typ první akce - 1 - ACTION_T_SAY (promluví)
  • action1 parametr 1 - 1 (text ID 1 viz. tabulka)
  • action2 type - typ druhé akce - ACTION_T_SOUND (4)
  • action2 parametr 1 - 1564 (sound ID viz. tabulka - creatura zahraje zvuk s ID)
  • comment - nepovinný komentář pro developery

A co že se při tomto eventAI scriptu stane? Event type nám říka, že se to stane při dosažení určité hodnoty HP. Event parametr 1 nám ríká, že HP musí dosáhnout hodnoty 90%. Event parametr 2 nám říká, že po dosáhnutí určité hodnoty HP bude čekat 2000 milisekund. Action type1 nám říká, že první akce bude /say (creatura promluví) určitý text ID, nebo Váš text ID, který si sami vytvoříte a jeho data zapíšete do tabulky `localized_texts`. Action2 type nám říká, že se zahraje určitý zvuk. Action2 parametr 1 nám určuje ID zvuku, který se má zahrát....

Externí odkazy