Zabieranie pancerzy i rozkładanie zwłok
Robię na przykładzie Necka w G1 Najpierw wybieramy pancerz i robimy z niego 2 przedmioty :
- pancerz bez mainflag zbroi (aby dało się go zabrać) zbroja fałszywka
- przedmiot z flags=ITEM_MULTI|ITEM_MISSION (aby postać nam nie znikała przy rozkładaniu)
przedmiot1:
INSTANCE GRD_ARMOR_Lmam(C_Item) { name = "Lekka zbroja Strażnika"; mainflag = ITEM_KAT_NF;//aby dało się zabrac flags = 0; protection [PROT_EDGE] = 45; protection [PROT_BLUNT] = 45; protection [PROT_POINT] = 5; protection [PROT_FIRE] = 20; protection [PROT_MAGIC] = 0; value = VALUE_GRD_ARMOR_L; wear = WEAR_TORSO; visual = "grdl.3ds"; visual_skin = 0; material = MAT_LEATHER; description = name; TEXT[1] = NAME_Prot_Edge; COUNT[1] = protection [PROT_EDGE]; TEXT[2] = NAME_Prot_Point; COUNT[2] = protection [PROT_POINT]; TEXT[3] = NAME_Prot_Fire; COUNT[3] = protection [PROT_FIRE]; TEXT[4] = NAME_Prot_Magic; COUNT[4] = protection [PROT_MAGIC]; TEXT[5] = NAME_Value; COUNT[5] = value; };
przedmiot2:
INSTANCE nie_znikaj(C_Item) { name = "Magia Avallacha ^^ "; mainflag = ITEM_KAT_ARMOR;//aby nie dało sie zabrać z ekwipunku flags = ITEM_MULTI|ITEM_MISSION;//aby postać nie znikała (czyli to co Avallach nazwał magią (na pewno wie o co chodzi ale nie chciało mu się tłumaczyć :) ) po prostu itemy MISSION ze względu na swoją wagę nie mogą być skasowane) value = VALUE_VLK_ARMOR_L; wear = WEAR_TORSO; visual = "vlkl.3ds"; visual_skin = 0; material = MAT_LEATHER; };
jak mamy przedmioty dajemy je naszej postaci która posiada pancerz czyli w naszym wypadku do Neka
CreateInvItem (self, GRD_ARMOR_Lmam); CreateInvItem (self, nie_znikaj);
Bedziemy potrzebowali jednej zmiennej więc do Story_Globals.d dodamy to:
var int dzien;
a do Startup.d dodamy jej zerowanie
dzien=0;
będzie to nasza zmienna czasu na razie przypisujemy 0 żeby zachować neutralność bo nie ma dnia 0 w późniejszych krokach przypiszemy właściwy dzien.
Teraz idziemy dalej aby to wszystko działało trzeba zrobić skrypt który będziemy wywoływać co jakiś określony czas np.1-2 sekjak zrobić uruchamianie naszego skryptu??Pomoc jest tutaj a więc przejdźmy do pisania samego skryptu który będziemy wywoływać
Pierwsza cześć skryptu
var C_NPC nekk; nekk = Hlp_GetNpc(GRD_282_Nek); //zmienna NPC przyda się w kolejnych krokach //(if)jeśli mamy w ekwipunku fałszywkę if(Npc_HasItems(hero, GRD_ARMOR_Lmam)>=1){ CreateInvItem (hero, GRD_ARMOR_L); //to utwórz prawdziwą Npc_RemoveInvItem (hero, GRD_ARMOR_Lmam); //i usuń fałszywkę //jeżeli NEK NIE MA fałszywki (warunek dla konkretnych NPC) if (!Npc_HasItems(nekk, GRD_ARMOR_Lmam)>=1){ Mdl_SetVisualBody (nekk,"hum_body_Naked0", 0, 0,"Hum_Head_FatBald", 2, 1, -1); //usuwanie zbroi z wyglądu NPC Npc_RemoveInvItem (nekk, GRD_ARMOR_L); //usuwanie właściwej zbroi NPC z ekwipunku dzien=Wld_GetDay(); //dzień zabrania zbroi (rozpoczyna proces gnicia) }; };
p jeśli mamy do załatwienia 2 NPC kopiujemy drugi IF i wstawiamy go pod nim czyli mamy już napisane w jaki sposób zabieramy zbroje to teraz nam został proces gnicia ja zrobiłem tylko 2 etapy szkielet a potem sama bryłka rudy zostająca po całej postaci.
//1 dzień if((dzien+1) == Wld_GetDay()){ Mdl_SetVisualBody (nekk,"Ske_Body3",DEFAULT,DEFAULT,"", DEFAULT, DEFAULT,-1); //zmiana w kościotrupa }; //2 dzień if((dzien+2) == Wld_GetDay()){ if(Npc_HasItems(nekk, nie_znikaj)>=1){ Npc_RemoveInvItem (nekk, nie_znikaj); //spowoduje usuniecie blokady usunięcia postaci Wld_InsertItem (ItMiNugget, "LOCATION_15_IN_2"); //spowoduje pozostawienie bryłki rudy po postaci fajnie by było dać tam np. kosc goblina z G2 ;) }; };
możemy zrobić ile chcemy etapów analogicznie do tego.Jeden i drugi skrypt dajemy do funkcji naszego wyzwalacza :
func void tick_tock() { };
mała podpowiedz aby nie obciążać procka 2 cześć skryptu może powędrować do monologu spania oraz B_RefreshArmor. B_RefreshArmor jest uruchamiany raz na dobę dokładnie o 24 lecz nie uruchomi się jeśli 24 godzinie prześpimy. I odwrotnie jeśli gracz nie będzie spał to monolog się nie uruchomi więc RefreshArmor i monolog wzajemnie się uzupełniają. Jeśli nie wiesz dokładnie jak to zrobić zrób całość na tick_tock().