TnZ Scripting Tricks FAQ (update:18-09-2008, aktualnie skryptów: 23)
Tutaj znajdziecie takie małe FAQ o skryptowaniu. Jeśli chcecie dowiedzieć się jak "coś" zrobić a sami nie możecie do tego dojść - poproście - postaram się tutaj wkleić rozwiązanie 0. Jak w prosty sposób odpalić dowolną animację postaci ze skryptu (np. pozdrowienie ręką?) ?
Tutaj znajdziecie takie małe FAQ o skryptowaniu. Jeśli chcecie dowiedzieć się jak "coś" zrobić a sami nie możecie do tego dojść - poproście - postaram się tutaj wkleić rozwiązanie 0. Jak w prosty sposób odpalić dowolną animację postaci ze skryptu (np. pozdrowienie ręką?) ?
1. Jak zmienić skryptem apearance postaci?To całkiem proste. Wystarczy otworzyć postać i wybrać sobie odpowiednią animację (http://images.wikia.com/djinni/images//5/54/AnimEssay1.JPG), którą chcemy wykorzystać.Duplikujemy ją jako animację wirutalną o nazwie special1 (mamy jeszcze do wykorzystanie special2, special3, special4 oraz special5). Nastepnie mozemy ta animacje odtworzyc napostaci ze skryptu uzywajac funkcje : AssignCommand(object Target, ActionPlayAnimation(ANIMATION_FIREFORGET_SPECIAL1))
Note: kreatura zmieni tylko wyglad, ale nie np. sety animacji!!2. Jak skryptem wymusić aby Wiedźmin wyciągnął miecz?void main(){ object oTarget = GetObjectByTag("my_tag"); int iApearance = 1; SetCreatureAppearance(oTarger, iApearance);}
Note: Oczywiscie mozecie uzyc INVENTORY_SLOT_SILVERSWORD zamiast *STEELSWORD.3. Jak skryptem odpalic efekt tzw. camera shake?void main(){ object oPC = GetFirstPC(); object oItem = GetItemInSlot(INVENTORY_SLOT_STEELSWORD, oPC); AssignCommand(oPC, ActionEquipItem(oItem, INVENTORY_SLOT_RIGHTHAND));}
4. Czy można za pomocą skryptu zmusić Wiedźmina bądź jakiegoś NePCa by przeszedł z punktu A do punktu B?#include "inc_cameffects"void main(){ CameraShake(0.1, 0.07, 0.3);}
5. Czy istnieja jakaś funkcja, która usypia skrypt na podaną ilość milisekund? Coś jak sleep() w C++.Nie do konca, ale mozna do tego uzyc funkcji DelayCommand. Np:Lepiej to zrobic wykorzystujac actionpointy ale oczywiscie mozna tez skryptem :void main(){ object oTarget = GetObjectByTag("moj_tag_postaci"); object oGoTo = GetObjectByTag("tag_obiektu_docelowego"); AssignCommand(oTarger, ActionMoveToObject(oGoTo));}
6. Jak wymusić rozpoczęcie dialogu?void Moja_odpalana_za_jakis_czas_funkcja(){ // cos tam sie tutaj dzieje}void main(){ float fCzas = 10.0; DelayCommand(fCzas, Moja_odpalana_za_jakis_czas_funkcja());}
7. Jak stowrzyć obiekty zapalane/gaszone za pomocą igni/aardUżyj funkcji TeleportAndTalk(oTarget, "nazwa_dialogu"); - NPC podejdzie i zagada.Ewentualnie TeleportPCAndTalk(oTarger, "nazwa_dialogu"); - Geralt zagada.
#include "inc_ai"// skrypt podpinamy pod "on spell cast at" placeabla// Zapalanie/gaszenie ognia czarami Aard oraz Igni.// (by M "TnZ" K)// ======================================================================================================== // Dystans swiatel jakie gasimy wokolo obiektu-przy kazdym ognisku mozemy wstawic obiekt dodatkowego swiatla (tag ob_light) float xDist = 10.0f; // Tag obiektow ze swiatlami string xTag = "ob_light";// ========================================================================================================void PlaceCampfireMappinOnMap(object oCampfire){ // Wrzucamy mappin ogniska na mape - a niech gracze wiedza gdzie to ognisko bylo if (GetLocalInt(oCampfire, "HasMarker")!=1 && GetDistanceBetween(GetFirstPC(), oCampfire)= 0 && nSpellId = 30 && nSpellId = 30 && nSpellId 0 && oItem!=OBJECT_INVALID) { if (CompareTags(GetTag(oItem),sTag)) { nStack = GetItemStackSize(oItem); if (nCount>=nStack) { nCount-=nStack; DestroyObject(oItem); nRemoved+=nStack; } else { SetItemStackSize(oItem,nStack-nCount); nRemoved+=nCount; break; } } oItem = GetNextItemInInventory(oOwner); } return nRemoved;}// Returns the number of stackable items matching tag sTag in oOwner's inventory.int GetItemCount (object oOwner, string sTag) { object oItem = GetFirstItemInInventory(oOwner); int nCount; while (oItem!=OBJECT_INVALID) { if (CompareTags(GetTag(oItem),sTag)) { nCount+=GetItemStackSize(oItem); } oItem = GetNextItemInInventory(oOwner); } return nCount;}// Create multiple items in oTarget basing on sItemTemplate, REGARDLESS of allowed stack size. Multiple stacks will be created as needed.int CreateManyItemsOnObject (string sItemTemplate,object oTarget=OBJECT_SELF,int nStackSize=1) { int i; for (i=0;i