//includy
#include "precompiled.h" // najdeš ve ScriptDev2/include
#include "Player.h" // src/game (aby jsem mohl používat i jiné fce než jen co sou ve SD2 složce)
//definovaný spelly cez #define/enum,..
#define SPELL_KOKOT 25445
#define SAY_NABRANI_AGGRA -645685
#define SAY_UMREL_JSEM -589899
// teď si nepamatuju v jaký tabulce jsou napsaný IDčka, ale najdete to v DB :)
struct MANGOS_DLL_DECL fantasy_npcAI : public ScriptedAI
{
fantasy_npcAI(Creature* creature) : ScriptedAI(creature) {Reset();}
//definovaný uint32/bool,...
uint32 nejakejTimer;
Unit * target
//zde se píšou funkce.. nejen které najdete ve souborech které jsou ve složce ScriptDev2/include.
//Také vlastní funkce, nebo funkce z jakéhokoli souboru v jádru, jen musíte správně naincludovat *.h soubory
void Reset()
{
// definovaný timery pro začátek
nejakejTimer = 20000; // cas po kterym se spustí první akce v podmínce pro tennto timer...
//v podmínce už může být jiný čas a timer se bude počítat ten co je v podmínce if (nejakejTimer <= diff)
}
void Aggro(Unit *who)
{
// akce, když kreatura nabere aggro
DoScriptText(SAY_NABRANI_AGGRA,m_creature);
}
void UpdateAI(const uint32 diff)
{
// updateAI se aktualizuje každou sekundu
// příklad
if (nejakejTimer <= diff)
{
//akce která se provede když se splňuje podmínka
target = m_creature->getVictim();
m_creature->CastSpell(target, SPELL_KOKOT, true); //CastSpell(typ targetu, ID spellu, trrigered?)
//pokud chceš kouzlit spell s editovaným dmgem, napíšeš
const int32 dmg = 10520;
m_creature->CastCustomSpell(target,SPELL_KOKOT,&dmg,NULL,NULL,true); //dá 10520 dmg
nejakejTimer = 10000; // 10 sec ... novej timer musí bejt definovanej,
//jinak kreatura nebude dmgovat, chodit a jen provádět tuhle akci
}else nejakejTimer -= diff;
// else nejakejTimer -= diff; musí být, jinak se diff pro nejakejTimer nebude odpocitavat.
//Tudis nejakejTimer se nikdy nespusti ..
//da se taky napsat nejakejTimer = nejakejTimer - diff; ale tento způsob neni moc elegantní.
DoMeleeAttackIfReady(); // musí bejt vždy, jinak nebude útočit
}
};
CreatureAI* GetAI_fantasy_npc(Creature* Creature)
{
return new fantasy_npcAI(Creature);
}
void AddSC_fantasy_npc()
{
Script* newscript;
newscript = new Script;
newscript->Name = "npc_fantasy"; //jméno do tabulky ScriptName ve creature template
newscript->GetAI = &GetAI_fantasy_npc; // aby se vědělo, jaký AI je vlastně pod názvem (newscript->Name)
newscript->RegisterSelf();
}
//good luck :)
Když je to nový soubor, tak se ještě musí zapsat do 4 souborů, aby se mohlo zkompilovat, ty soubory sou: ScriptDev2/Makefile.am
pokud se soubor vloží do scripts/custom a soubor se jmenuje jmenosouboru.cpp, tak zvložíme toto:
...
script/custom/jmenosouboru.cpp \
...
další soubory jsou ScriptDev2/VC80/80ScriptDev2.vcproj a ScriptDev2/VC90/90ScriptDev2.vcproj
tam si najdem
...
<Filter
Name="custom"
>
a napíšem pod to
<File
RelativePath="..\script/custom/jmenosouboru.cpp"
>
...
posledním souborem je: ScriptDev2/system/ScriptLoader.cpp
najdem si
//custom
a pod něj napíšeme
extern void AddSC_fantasy_npc(); // extern void AddSC_ je vždy stejné, mění se jen fantasy_npc();
říkáte si proč zrovna fantasy_npc();?
vysvětlení je jednoduché:
jestliže naše funkce pro vytvoření scriptu vypadá takto
void AddSC_fantasy_npc()
{
Script* newscript;
newscript = new Script;
newscript->Name = "npc_fantasy"; //jméno do tabulky ScriptName ve creature template
newscript->GetAI = &GetAI_fantasy_npc; // aby se vědělo, jaký AI je vlastně pod názvem (newscript->Name)
newscript->RegisterSelf();
}
tak je vám už určitě jasné, proč zrovna fantasy_npc();
další věc, která se tam píše je: AddSC_fantasy_npc();
najdeme si fci:
void AddScripts()
//custom
a pod to napíšeme zmiňované
AddSC_fantasy_npc();
TODO: Samozřejmě to nemusíte psát vždy pod //custom nebo //jmeno instance,.. ale je to kvůli úpravě a přehlednosti.
- - - - - - - - TOHLE je pro ty co chtějí vidět mojí fotku :)
#include 'Brain.h'
int main(){
int brain = getBrainValue();
if (!brain)
use Google;
}