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().

Kontakt
Jeżeli masz do mnie pytanie, bądź jesteś zainteresowany współpracą ze mną, napisz do mnie.
Skontaktuj się ze mną
Zamknij
Programy Prace Kursy Skontaktuj się ze mną