Jump to content
  • Announcements

    • Xmat

      Pravidlo pro postování v TTT

      Do sekce Tipy, triky, tutoriály nepatří žádné dotazy.   Postujte sem vaše návody, tipy a různé další věci jež uznáte za vhodné sdělit zdejšímu osazenstvu, ale veškeré dotazy směřujte do sekce Všeobecná diskuse.
    • Replik

      Seznam návodů a důležitých témat v této sekci

      Pro lepší přehlednost jsem vytvořil tento seznam, který vás, méně zkušené, lépe provede touto sekcí. Věřím, že zde najdete, co hledáte. Vypsané jsou návody, které jsou oficiálně uznané jako návody. Běžné diskuze, které neposkytují postupy a rady zvěřejněny nejsou.   Instalace vlastního MaNGOS Serveru Díky těmto návodům budete (měli by jste být) schopni vytvořit a následně spustit váš vlastní server. Nastavení je pro verze s i bez datadisku.   Instalace MaNGOS Serveru (bez datadisku TBC) - Autor Benny Instalace MaNGOS Serveru (s datadiskem TBC) - Autor Malfik Instalace MaNGOS Serveru v prostředí Linux - Autor charlie Instalace MaNGOS Serveru v prostředí Linux - Autor kupkoid   Chyby a jejich řešení při přihlašování k serveru - Autor Cybe   Zálohování uživatelských dat   Dávkový soubor (BAT soubor) pro vytvoření SQL záloh - Autor Replik   Kompilování - tvoření vlastních release (revizí)   Tvorba kompilací pro Win32 (MangoScript) - Autor bLuma   Ostatní - těžko zařaditelné, ale neznamená to, že nejsou dobré   VIP Systém - Autor charlie Tvorba Webových stránek pro MaNGOS - Autor zahuba Tvorba teleportačních NPC (MangoScript) - Autor Replik Registrační web (původně předělaná SPORA) Funkční pro Antrix i MaNGOS - Autor Replik Nastavení a spuštění Minimanager pro MaNGOS - Autor BlackMartin Nastavení MaNGOS Website - Autor Artorius   Samozřejmě jsou zde i jiné návody, ale tyto jsou nejvíce používané, proto věřím, že vám budou nápomocné. Tuto sekci budeme upravovat podle potřeby. Pokud by jste něco nenašli nebo si nevěděli rady, hledejte na fóru a teprve potom založte vlastní topik. Pokud nějaký autor vytvoří kvalitní návod a chtěl by ho zveřejnit i v tomto seznamu, doporučuji, aby mi napsal zprávu skrze PM.   Díky a přeji hezký den na WoWResource   Replik
    • Aristo

      Příspěvky tam, kde nemají co dělat

      Dodržujte zákaz přispívání do topiků s repaky pokud si to zakladatelé nepřejí!! Opakované psaní příspěvků bude trestáno warnem.
    • Aristo

      Používání spoilerů

      Poslední dobou má většina uživatelů fora zvláštní nutkání postovat extrémně dlouhé texty nebo kódy, které zabírají v nejedenom případu i 80% obsahu celé stránky a hodně tak zvedají nepřehlednost v topiku. Chtěl bych všechny uživatele požádat, aby při postování citací, jakýchkoliv kódů, errorů, atp... delších než 30 řádků používali funkci spoileru.   Funkci vyvoláte příkazem [spoiler] text [/spoiler]   Ukázka:  
Sign in to follow this  
WodaN'

[Lua Epic Release] Lua in-game Scripter

Recommended Posts

pokecas, spyta sa ta na meno NPC, na jeho id, kolko chces aby mal phase (max 5), kolko spellov v kazdej phasy (max 3), kedy ma aka phase zacat (na kolko %), potom sa ta spyta na ID spellov, intervaly (ako casto ich ma castit), jeho max a min hp, max a min damage a na koniec display ID... v zlozke scripts budes mat novy script <tvoje meno>_<meno bossa> a tam budes mat SQL ako komentare a RegisterUntiEventy tiez ako komentare, staci ho hodit do DB a "--" pred RegisterUnitEvent zmazat, restartovat scripty (reloadscripts do world), reload tables (.server reload creature_names/creature_proto) a mas jednoducheho bossa

Share this post


Link to post
Share on other sites

Vypadá to jako zajímavá věcička, i když slovíčko epic bych z názvu vypustil. Rozhodně to může usnadnit práci eventerů - mohou si pro své eventy vytvářet npc, aniž by se jim musel dávat přístup do databáze.

 

Být tebou, rozhodně bych to ješě vylepšil:

  • Npc bych rozhodně vkládal přímo do db (předpokládám že to lua umí). Možná bych i přidal možnost spuštění plánovaného restartu serveru např na půlnoc (pochybuju že eventer bude mít příkaz na restart serveru, a ascentí creature template počítám ze hry reloadnout nejde)
  • Vytvořil bych speciální tabulku, kam se bude ukládat id účtu ze kterého bylo npc vytvořeno a jméno scriptu (asi by stálo za hřích pro různé plevely omezit počet takto vytvořených npc např na 5-10, aby v tom nebyl zbytečně bordel)
  • S výše zmíněným nápadem souvisí další: přidat možnost zobrazit svoje scripty (pouze scripty z toho kterého acc který je vytvořil) a následně je dle potřeby odstranit (smaže staré npc a uvolní limit pro npc na nový event)

Když tohle uděláš, to slovíčko epic už bude trošku víc na místě (i když celkově ac-webácký/mmowneďácký/jakýkolivjinačí zlozvyk přidávání epic prakticky ke každému topicu v lásce nemám).

 

Rozhodně suprovej nápad, možná by stálo za hřích to předělat pro tc, event_ai by je k tomu jako dělané. Když budu mít někdy čas, třeba se do toho pustím.

 

+rep, za originální nápad - a toho si važ, dávám ji málokdy. :-)

 

edit: Kód už tak hezký není - lua určitě umí věci jako třídy, metody atd... nešlo by to zobecnit abys nemusel jak křeček v kolečku vypisovat phase1_spell1, phase2_spell2... počítám že šlo. :-)

Např kdybys použil třídu phase, z nichž každá by měla buď list nebo pole obsahující její jednotlivé prvky, mohl bys v každé fázi mít tolik spellů, kolik bys chtěl / kolik scriptovací engine povolím, fází bys mohl mít také v zásadě neomezeně (nebo maximum). Ale to bys musel asi kompletněš přepsat ten kód.

A určitě bych zvážil možnost předělání dialogů do přívětivějšího systému nabídek a subnabídek, mezi kterými by se dalo libovolně pohybovat.

V reálu by to mohlo vypadat třeba takhle:

 

-- Basic creature settings

------ id (<< back)

------ damage

---------- mindamage (<< back)

---------- maxdamage (<< back)

---------- << Back

------ hp

---------- minhp (<< back)

---------- maxhp (<< back)

---------- << Back

------ name (<< back)

------ displayid (<< back)

------ << Back

-- Phases

------ phase 1

---------- phase settings

-------------- at % hp (<< back) // s tím že pokud bys něco z toho nastavil, hodilo by tě to do nabídky phase 1

-------------- after x seconds (<< back)

---------- add new spell (<< back)

-------------- spellid (<< back)

-------------- say text (<< back)

-------------- target type

------------------- self // po nastavení čehokoliv tě to hodí do add new spell

------------------- highest threat

------------------- random ...

------------------- << Back

-------------- << Back

---------- viewspelllist / remove spell (<< back)

---------- << Back

------ phase 2

...

 

(na úplném začátku by se tě to třeba zeptalo na počet fází - nebo bys je mohl třeba dynamicky přidávat (add new phase / delete existing phase) pokud bys nechtěl jednotlivé fáze ukládat do proměných, databáze by posloužila úplně stejně dobře).

Tohle by bylo opravdu epic. :)

Edited by Hkarta
  • Upvote 1

Share this post


Link to post
Share on other sites

Wodan +rep, dobra prace ;) (ascent teda nepouzivam ale repku ti nemuzu odeprit).

[offtopic]Hkarta: Zkusim to udelat ja nejak. Kdyztak ti reknu kdyz mi to nepude :D.

Share this post


Link to post
Share on other sites

Npc bych rozhodně vkládal přímo do db

to davam v druhej verzii :) admin to moze zmenit ci chce rovno do DB alebo to davat do scriptu :)

Možná bych i přidal možnost spuštění plánovaného restartu serveru např na půlnoc (pochybuju že eventer bude mít příkaz na restart serveru, a ascentí creature template počítám ze hry reloadnout nejde)

toto moc nechapem, ale restartnut table sa da pomocou .server reload creature_names a creature_proto

Vytvořil bych speciální tabulku, kam se bude ukládat id účtu ze kterého bylo npc vytvořeno a jméno scriptu (asi by stálo za hřích pro různé plevely omezit počet takto vytvořených npc např na 5-10, aby v tom nebyl zbytečně bordel)

easy :) -- ale ako som povedal, uklada to script <meno hraca co to vytvaral>_<meno bossa> -- cize je lahke zistit kto script vytvoril :)

přidat možnost zobrazit svoje scripty (pouze scripty z toho kterého acc který je vytvořil) a následně je dle potřeby odstranit (smaže staré npc a uvolní limit pro npc na nový event)

v pohode, az na mazanie scriptu zo zlozky (z DB vim ako), musel by som zistil command na io

Edited by WodaN'

Share this post


Link to post
Share on other sites

Vypadá to jako zajímavá věcička, i když slovíčko epic bych z názvu vypustil. Rozhodně to může usnadnit práci eventerů - mohou si pro své eventy vytvářet npc, aniž by se jim musel dávat přístup do databáze.

 

Být tebou, rozhodně bych to ješě vylepšil:

  • Npc bych rozhodně vkládal přímo do db (předpokládám že to lua umí). Možná bych i přidal možnost spuštění plánovaného restartu serveru např na půlnoc (pochybuju že eventer bude mít příkaz na restart serveru, a ascentí creature template počítám ze hry reloadnout nejde)
  • Vytvořil bych speciální tabulku, kam se bude ukládat id účtu ze kterého bylo npc vytvořeno a jméno scriptu (asi by stálo za hřích pro různé plevely omezit počet takto vytvořených npc např na 5-10, aby v tom nebyl zbytečně bordel)
  • S výše zmíněným nápadem souvisí další: přidat možnost zobrazit svoje scripty (pouze scripty z toho kterého acc který je vytvořil) a následně je dle potřeby odstranit (smaže staré npc a uvolní limit pro npc na nový event)

Když tohle uděláš, to slovíčko epic už bude trošku víc na místě (i když celkově ac-webácký/mmowneďácký/jakýkolivjinačí zlozvyk přidávání epic prakticky ke každému topicu v lásce nemám).

 

Rozhodně suprovej nápad, možná by stálo za hřích to předělat pro tc, event_ai by je k tomu jako dělané. Když budu mít někdy čas, třeba se do toho pustím.

 

+rep, za originální nápad - a toho si važ, dávám ji málokdy. :-)

 

Prosím ťa ak by si bol taký dobrý a pustil sa do toho čo najskôr :)

Share this post


Link to post
Share on other sites

rasty888: teď bohužel fakt nemám čas, potřebuju dodělat jeden projekt. Aždostanu zaplaceno, třeba se na to podívám. :)

woodan: Ještě jsem ti tam dopsal nějaké postřehy / nápady.

Edited by Hkarta

Share this post


Link to post
Share on other sites

Tak proste len aby to niekedy bolo :D možno to niekto spraví aj skôr nikdy nevieš ale len keby náhodou .

Share this post


Link to post
Share on other sites

woodan: Ještě jsem ti tam dopsal nějaké postřehy / nápady.

 

jop, to menu chcem vylepsit, nvm ci som to pisal, a to s tymi spell1phase1 atd, myslim ze sa to da, ale ako vravis, trebalo by prepisat celi script + bolo by to zlozitejsie ako to je teraz, sice by to zabralo asi o 100 riadkov menej, ale sral by som sa s tym dalsich par dni kym by som prisiel na to ako to presne spravit a ako to funguje

 

-- Phases

------ phase 1

---------- phase settings

-------------- at % hp (<< back) // s tím že pokud bys něco z toho nastavil, hodilo by tě to do nabídky phase 1

-------------- after x seconds (<< back)

---------- add new spell (<< back)

-------------- spellid (<< back)

-------------- say text (<< back)

-------------- target type

------------------- self // po nastavení čehokoliv tě to hodí do add new spell

------------------- highest threat

------------------- random ...

------------------- << Back

-------------- << Back

---------- viewspelllist / remove spell (<< back)

---------- << Back

 

skusal som uplne na zaciatku to spravit tak aby kazdy mohol davat kolko chce spellov, bohuzial mi to nejako neslo kedze by niekto mohol dat spellov 200 (nekto zakerny kto by sa fakt nudil) a ostatne funkcie by nesli, kedze by intid spellu 200 bolo priklad 210, a 210 by bolo aj "BACK" tlacitko, krizilo by sa to a nvm co este

Edited by WodaN'

Share this post


Link to post
Share on other sites

No zabralo by to minimálně o polovinu řádků méně a naučil by ses při tom psát scripty efektivněji a přidávání případných dalších funkcí by bylo snažší. Ale to už je na tobě, pokud to budu někdy v budoucnu portovat na tc, rozhodně to napíšu tak, jak jsem si te´d hezky naplánoval. :-P

 

edit: @woodan: Neříkej mi že neumíš vytvořit jednoduchou podmínku ve stylu

 

if (spellcount(phaseID) < maxspellcount)
{ 
... 
} 
else
{  
"Naser si, máš toho moc." 
}

Edited by Hkarta

Share this post


Link to post
Share on other sites

No zabralo by to minimálně o polovinu řádků méně a naučil by ses při tom psát scripty efektivněji a přidávání případných dalších funkcí by bylo snažší. Ale to už je na tobě, pokud to budu někdy v budoucnu portovat na tc, rozhodně to napíšu tak, jak jsem si te´d hezky naplánoval. :-P

 

nemyslim si ze by to zabralo tak strasne malo riadkov, bolo by tam treba pridat dalsiu table pre for i = 1, Spells[player:GetName()] atd atd, cize by to vyslo asi rovnako, priklad miesto

Spell1Phase1[player:GetName()] = code

byt tam bolo

table.insert(Phase1Spells, player:GetName(), code)

cize asi rovnako

 

edit: @woodan: Neříkej mi že neumíš vytvořit jednoduchou podmínku ve stylu

 

if (spellcount(phaseID) < maxspellcount)
{ 
... 
} 
else
{  
"Naser si, máš toho moc." 
}

 

if(code <= "3") then
                       SpellsPhase2[player:GetName()] = code
                       PhaseSpellsMenu(pUnit, event, player, id, intid, code)
               else
                       player:SendBroadcastMessage("Every Phase can have max 3 spells!")
                       PhaseSpellsMenu(pUnit, event, player, id, intid, code)
               end

nedavas pozor :)

 

vravim, dalsia verzia bude ina, budem sa snazit spravit to co najjednoduchsie, toto som chcel mat rychlo z krku, bol to len taky napad ked som bol zhuleny, myslel som si ze to nespravim, spravil som to ako ma to hned napadlo, vcera som to robil od 16:00 do 23:00 (cca) a som rad ze to vyslo aspon tak ako to vyslo

Edited by WodaN'

Share this post


Link to post
Share on other sites

Napsal jsem ti kus pseudokódu abych demonstroval svůj záměr. Je to psaný c# stylem, ale snad to pochopíš. ;)

 

Pseudokód

int maxspellcount = 7;
int maxpahses = 7;
int actualphase = 0;
Phase[] phases = new Phase[maxphases];

class Condition
{
  // konstruktor, gety, sety
  int value;
  bool type; // false = on % hp; true = on x sec
}

class Spell
{
  // konstruktor, gety, sety
  int spellid;
  int targettype;
  string say;
}

class Phase
{
// konstruktor, gety, sety
int actual = 0;
Spells[] spells = new Spells[maxspellcount];
Condition cond;

public AddSpell(Spell spell)
{
 	if (actual < maxspellcount)
 	spells[actual] = spell;
 	actual++;
}

public RemoveSpell(int position)
{
 	spells[position] = null;

 	for (int x = 0; x < maxspellcount; x++)
 	{
		// znovu bys seřadil spelly aby hodnoty null byly až na konci.
		// actual bys nastavil na počet spellů + 1 		
 	} 	
}

// viewspells atd, zobrazovací metody
}

phases[actualphase] = new Phase();
...
// tady by si to udělal v zásadě stejně jako ve třídě Phase metody AddSpell, RemoveSpell atd.

// TODO: výpis, export do souboru. Prostě bys ty třídy co máš projel cca dvěma? Vnořenejma forcyklama.

 

Omlouvám se za formátování kódu, reply box mi ničí tabulátory.

Edited by Hkarta

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×