Thalie http://thalie.pilsfree.cz/forum/ |
|
Užitečné scripty http://thalie.pilsfree.cz/forum/viewtopic.php?f=1&t=5362 |
Page 1 of 3 |
Author: | -RoF- [ 11:05 15. Aug 2011 ] |
Post subject: | Užitečné scripty |
Moc se ve scriptech nevyznám, ale pokud už jsou v modulu a je k nim návod, tak je rád použivám. Jde mi o to, aby se sem dávaly scripty, které už v modulu jsou a aby se psalo k čemu jsou a jak je využít. ![]() A taky aby sem někdo dával nově vytvořené scripty a tak dále. ![]() Takže script 1 Mám dveře na které jsem použil script ja_door_onopen, zamkl jsem je a použil na předmět (například dalekohled) vedle script ku_opendoor. Vše samozřejmě funguje jak má. Ted bych ale třeba rád ten dalekohled (který ovládá dveře) zamkl a použít by šel jen po odemčení klíčem. Jak to udělat? Páč script ku_opendoor se vykoná, ikdyž je ovládací předmět zamčený. script 2 Mám další dveře ![]() Existuje ten script v modulu a nebo se musí vytvořit nový? script 3 A aby toho nebylo málo, mám další dveře, opět zamčené, jak jinak ![]() ![]() Existuje takový spouštěč, script ve hře? Na Dragon hammeru byl spouštěč pojmenovaný pressure, ale script se odkazoval na nějaký další, který rozlišoval hmotnost. Popřípadě existuje jednodušší řešení? ![]() To asi zatím vše, díkas za odpovědi ![]() Popřípadě sem pište jiné užitečné scripty a prosím i návody k nim a k nastavení proměných. Díkas ![]() |
Author: | kucik [ 12:26 15. Aug 2011 ] |
Post subject: | Re: Užitečné scripty |
1. Zamčená páka Viděl bych to asi nějak takhle: ku_lever_lock.nss Code: void main() { object oLever = OBJECT_SELF; string script; if(GetLocked(oLever)) { PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE); SpeakString(oLever, "* Paka je zamcena a neni mozne s ni hnout *"); string script = GetLocalString(oLever,"LOCKED"); if(GetStringLength(script) > 0) { ExecuteScript(script, oLever); } } else { string script = GetLocalString(oLever,"UNLOCKED"); PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE); DelayCommand(2.0,PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE)); if(GetStringLength(script) > 0) { ExecuteScript(script, oLever); } } } Do proměnný UNLOCKED na páce dáš script, kterej se má vykonat pouze když je páka odemčená. |
Author: | kucik [ 12:33 15. Aug 2011 ] |
Post subject: | Re: Užitečné scripty |
2. Otevírání dveří pomocí více pák (nutnost spustit najednou více pák.) ku_door_lever.nss: Code: void LeverReturn(object oDoors, object oLever) { AssignCommand(oLever,PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE)); int iPushed = GetLocalInt(oDoors,"KU_LEVER_PUSHED") - 1; if(iPushed < 0) iPushed = 0; SetLocalInt(oDoors,"KU_LEVER_PUSHED",iPushed); } void main() { int iType = 0; //Doors string sTag = ""; int i; //ovladacmu prvku nastavit tyto promenne: //DOORS_COUNT, int, pocet dveri //PLC_DOORS, int, 1 pokud jsou dvere placeable //DOORS_TAG, string, tag dvari int iCount = GetLocalInt(OBJECT_SELF,"DOORS_COUNT"); float LeverTimeout = GetLocalFloat(OBJECT_SELF,"TIMEOUT"); object oLever = OBJECT_SELF; if(GetLocalInt(OBJECT_SELF,"PLC_DOORS")) { iType = 1; sTag = GetLocalString(OBJECT_SELF,"DOORS_TAG"); } if(iCount < 1) { iCount = 1; } PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE); if(GetStringLength(sTag) > 0) { for(i=1;i<=iCount;i++) { object oDoors = GetNearestObjectByTag(sTag,OBJECT_SELF,i); //SpeakString("mam dvere:"+GetName(oDoors)); int iNeeded = GetLocalInt(oDoors,"LEVER_COUNT"); int iPushed = GetLocalInt(oDoors,"KU_LEVER_PUSHED") + 1; SetLocalInt(oDoors,"KU_LEVER_PUSHED",iPushed); if(iPushed == iNeeded) { AssignCommand(oDoors,ActionOpenDoor(oDoors)); } DelayCommand(LeverTimeout,LeverReturn(oDoors,oLever)); } } SpeakString("Neni urceny tag dveri: 'DOORS_TAG'"); } Ovládá se to zhruba stejně jako ku_opendoor. Tzn. do DOORS_TAG nastavit tag dveří, který to má otevírat, DOORS_COUNT = počet dveří, který to otevírá. Navíc: int LEVER_COUNT = počet pák, které se musí stlačit zároveň pro otevření. float TIMEOUT = interval ve vteřinách, v kterym musí být páky spuštěny, protože by se těžko podařilo stlačit páky přesně najednou. PS: Obojí jsem psal z hlavy a nemám to jak testnout. Můžou tam být chyby. |
Author: | kucik [ 12:34 15. Aug 2011 ] |
Post subject: | Re: Užitečné scripty |
3. Takže chceš trigger na zemi, nebo jak je to myšleno? |
Author: | -RoF- [ 12:47 15. Aug 2011 ] |
Post subject: | Re: Užitečné scripty |
kucik wrote: 3. Takže chceš trigger na zemi, nebo jak je to myšleno? Ano trigger na zemi. Jinak děkuju za 1 a 2. Super ![]() |
Author: | kucik [ 13:18 15. Aug 2011 ] |
Post subject: | Re: Užitečné scripty |
Pokud to má být jen trigger na zemi, který otevře dveře, tak tam úplně stejně můžeš dát ku_opendoor. Pokud to má dělat ještě něco jiinýho, tak to chce popsat co. |
Author: | -RoF- [ 13:32 15. Aug 2011 ] |
Post subject: | Re: Užitečné scripty |
kucik wrote: Pokud to má být jen trigger na zemi, který otevře dveře, tak tam úplně stejně můžeš dát ku_opendoor. Pokud to má dělat ještě něco jiinýho, tak to chce popsat co. To máš pravdu, stačí pak v proměné nastavit na dveřích DOORCLOSE_DELAY int třeba na 2, takže to ta postava nestihne proběhnout těma dveřma. Je to asi jednodušší než vytvářet nový script ![]() Mě hlavně jde o to, abych z některých dungů vyhnal solisty a bylo tam potřeba aspon minimálně 2-3 postavy. No další dotazy dodám. ![]() Díkas |
Author: | -RoF- [ 14:58 18. Sep 2011 ] |
Post subject: | Re: Užitečné scripty |
Další dotaz ![]() V jednom dungu na Thalii (v jednom chrámu v bažinách) je logická hádanka, kterou když postava správě vypočítá a řekne číslo, tak se objeví portál. Šlo by to udělat i na slovo? Třeba postava řekne něco a objeví se portál? Pokud ano, jaký by byl script ![]() Díkas. ![]() |
Author: | kucik [ 15:07 18. Sep 2011 ] |
Post subject: | Re: Užitečné scripty |
Slo. Jen se slovama je trosicku potiz: Rozlisuji se velka a mala pismena, je podstatna diakritika. |
Author: | -RoF- [ 11:18 19. Sep 2011 ] |
Post subject: | Re: Užitečné scripty |
kucik wrote: Slo. Jen se slovama je trosicku potiz: Rozlisuji se velka a mala pismena, je podstatna diakritika. Jasně no, ale tak to bych zvolil slovo, které by snad nedělalo problém. A jaký je prosímtě ten script? Myslím ten v chrámu na ty čísla. Popřípadě i na to slovo. Díky ![]() |
Author: | kucik [ 11:44 19. Sep 2011 ] |
Post subject: | Re: Užitečné scripty |
V tom chrámu je specifickej pro účely chrámu. Můžu ti ho poslat, lae stejně by se musel předělat na konkrétní účel. |
Author: | -RoF- [ 13:28 19. Sep 2011 ] |
Post subject: | Re: Užitečné scripty |
kucik wrote: V tom chrámu je specifickej pro účely chrámu. Můžu ti ho poslat, lae stejně by se musel předělat na konkrétní účel. Tak pošli prosím, já mrknu aspon co to obsahuje a třeba z toho něco použiju někdy ![]() |
Author: | -RoF- [ 15:53 19. Sep 2011 ] |
Post subject: | Re: Užitečné scripty |
Ted mě napadla další věc (já vím jsem otravný ![]() Rád bych dal do dungu vězení a v něm nějaké živé a nebo položivé NPC. A jelikož na Thalii jsou postavy, které rády zachranují nějaké vězně z dungu. Tak bych chtěl, že pokud PC najde klíč od vězení a odemkne, tak po kliknutí na NPC mu vyskočí rozhovor s tím že bud může vězně nechat trpět v base a nebo ho pustí. Jde mi o to jaký script je na odvolání NPC? Díkas ![]() |
Author: | kucik [ 16:13 19. Sep 2011 ] |
Post subject: | Re: Užitečné scripty |
Tady je script pro sochu cca tak, jak se používá v chrámu. Viz http://www.nwnlexicon.com/compiled/func ... tring.html Chová se to case insensitivně. V podstatě si nastavíš pattern podle toho, co čekáš že PC řekne a pak porovnáváš, jestli to pasuje. Code: void main() { if(GetLocalInt( OBJECT_SELF, "JA_CHRAM2_ACTIV")) return; if(!GetLocalInt( OBJECT_SELF, "JA_CHRAM2_AGE")){ int iAge = Random(1000); SetListenPattern( OBJECT_SELF, "*n", 1); SetListenPattern( OBJECT_SELF, "** *n **", 2); SetListenPattern( OBJECT_SELF, "** *n", 3); SetListenPattern( OBJECT_SELF, "*n **", 4); SetListening( OBJECT_SELF, TRUE ); } int iAge = GetLocalInt( OBJECT_SELF, "JA_CHRAM2_AGE"); int iMatch = GetListenPatternNumber(); int iSaid = 0; if( iMatch == 1 || iMatch == 4 ){ iSaid = StringToInt(GetMatchedSubstring(0)); } else if( iMatch == 2 || iMatch == 3){ iSaid = StringToInt(GetMatchedSubstring(2)); } if( iSaid == iAge ){ effect eStart = EffectVisualEffect( VFX_IMP_GOOD_HELP ); ApplyEffectAtLocation( DURATION_TYPE_INSTANT, eStart, GetLocation(OBJECT_SELF) ); PlayAnimation( ANIMATION_PLACEABLE_ACTIVATE ); SetLocalInt( OBJECT_SELF, "JA_CHRAM2_ACTIV", 1 ); } } Na zmizení NPC je návod tady: http://www.nwnlexicon.com/compiled/func ... ppear.html |
Author: | -RoF- [ 09:27 20. Sep 2011 ] |
Post subject: | Re: Užitečné scripty |
kucik wrote: .... Děkuju, omrknu a zkusím jak se mi to povede, snad ![]() |
Page 1 of 3 | All times are UTC + 1 hour [ DST ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |