	
//////////////////////////////////////
// 	Class - Definitions 
//	Global Instances
//	Phoenix V0.50b
//////////////////////////////////////

CONST INT MAX_EXPERIENCE = 4;
CONST INT MAX_CHAPTER	 = 5;
CONST INT MAX_MISSIONS   = 3 * MAX_CHAPTER;

CLASS C_MOB {

	VAR INT		id;							// Nummer des Objektes
	VAR STRING  	name;
	VAR INT		hp,hp_max;					// Strukturpunkte
	VAR INT		flags;						// Tragbar / "Schiebbar" / Versteck / Behälter
	VAR INT		damage;

	VAR INT		status;						// z.B. Open / Closed / Locked ( bei Behältern )
	VAR INT		key_hole;					// Schlüsselloch nr
	VAR INT		key_level;					// Schloß - Schwierigkeitsgrad ( 0 - 150 )
	VAR FUNC	on_action;					// Parserfunction bei Benutzung des Items
	VAR FUNC	on_spot;
	VAR FUNC	on_item;

	VAR INT		sides;						// Bei ziehen : Welche Seiten sind erlaubt

	// Besitzer
	VAR FUNC	owner;						// Besitzer : Instanz-Name
	VAR INT		owner_guild;				// Besitzer : Gilde

	VAR STRING  	visual;
	VAR STRING	visual_destroyed;	

	VAR INT		material;					
};

CLASS C_NPC {
	
	VAR INT     		id;								// absolute ID des NPCs
	VAR STRING 		name[5];						// Namen des NPC
	VAR STRING 		slot;
	VAR INT	    		memory;
	VAR INT     		attribute[MAX_ATTRIBUTE];
	VAR INT	    		guild,level;
	VAR INT			exp;

	VAR INT	    		regrow;
	VAR FUNC    		mission[MAX_MISSIONS];

	VAR INT     		talents;						// Talente des NSCs
	VAR INT			fight_talents;
	VAR INT			fight_tactic;

	VAR INT			buy[10];
	VAR INT			sell[10];

	VAR INT	    		weapon;
	
	VAR INT			voice;

	VAR INT			bodymass;

// *******************************************************************************
// *******************************************************************************
// *************************** NEU : MASTERAI ************************************
// *******************************************************************************
// *******************************************************************************

	VAR FUNC		daily_routine;			// Tagesablauf

	VAR FUNC		assessDamage;
	VAR FUNC		assessEnemy;
	VAR FUNC		assessMurder;
	VAR FUNC		assessThreat;
	VAR FUNC		assessRemoveWeapon;
	VAR FUNC		assessFriendsDamage;
	VAR FUNC		catchThief;
	VAR FUNC		assessTheft;
	VAR FUNC		observeIntruder;
	VAR FUNC		assessCall;
	VAR FUNC		assessTalk;
	VAR FUNC		assessTalkEnd;
	VAR FUNC		assessItem;
	VAR FUNC		assessMob;
	VAR FUNC		moveMob;
	VAR FUNC		moveNpc;

	VAR FUNC		reactToMemory;

	// Bonis von mir
	VAR FUNC		parried;		// hat einen Angriff pariert
	VAR FUNC		enemyDown;		// Feind liegt am Boden 
	VAR FUNC		dies;			// NSC stirbt.

	// **********************
	// SENSES
	// **********************

	VAR INT 		senses;			// Sinne
	VAR INT 		senses_range;		// Reichweite der Sinne in cm

	// **********************
	// Feel free to use
	// **********************
	VAR INT			aivar[50];					
	VAR STRING		wp;
};

CLASS C_Mission {
	VAR STRINGP name;						// Name des Auftrages
	VAR INT		global;						// BOOL : Globale oder persoenliche Mission
	VAR INT		id;							// Missionsnummer
	VAR INT		duration;					// Max. Dauer in Tageszeiten
	VAR INT		chapter;					// In welchen Kapiteln gültig ?
	VAR FUNC conditions;
	VAR FUNC criteria;
	VAR FUNC offer;
	VAR FUNC acknowledge;
	VAR FUNC refuse;
	VAR FUNC abort;
	VAR FUNC done;
	VAR FUNC running;
};

CLASS C_Item {
	
	// Für alle Items
	VAR INT		id;				
	VAR STRING  name,id_name;
	VAR INT		hp, hp_max;

	VAR INT     mainflag,flags;					// Hauptflag und weitere Flags
	VAR INT		weight,value;

	// Für Waffen
	VAR INT		dam_weapon,dam_fire;
	VAR INT		dam_poison,dam_magic;
	VAR INT		attack_bonus;
	VAR INT		parry_bonus;
	VAR INT		range;
	VAR INT		reload_time;
	VAR INT		munition;

	// Für Rüstungen
	VAR INT		protection;
	VAR INT		wear;
	VAR INT		cloak;						// positiver Wert = Tarnung steigt
											// negativer Wert = Tarnung sinkt ( Auffälligkeit steigt )
	// Für Lichtquellen
	VAR INT		brightness;
	VAR INT		light_mode;

	// Für Nahrung
	VAR INT		nutrition;									// HP-Steigerung bei Nahrung

	// Benötigte Attribute zum Benutzen des Items
	VAR INT		cond_atr	[3];
	VAR INT		cond_value	[3];

	// Attribute, die bei anlegen des Items verändert werden
	VAR INT		change_atr	[3];
	VAR INT		change_value[3];

	// Parserfunktionen
	VAR FUNC	magic;			// Parserfunktion zum "Magie Header"
	VAR FUNC	on_equip;		// Parserfunktion, wenn Item equipped wird.
	VAR FUNC	on_use;			// ParserFunktion, wenn Item benutzt wird.

	// Besitzer
	VAR FUNC	owner;			// Besitzer : Instanz-Name
	VAR	INT		owner_guild;	// Besitzer : Gilde
	VAR INT		false_guild;	// Zur Schau getragene Gilde durch Verkleidung

	// Die 3DS-Datei
	VAR STRING visual;

	// Veränderung des NSC-Meshes beim Anlegen dieses Gegenstandes
	VAR STRING  visual_change;	// ASC - File
	VAR INT		visual_skin;

	VAR STRING 	use_slot;

	VAR INT		material;					
};

CLASS C_Focus {
	
	/// für NSCs
	VAR FLOAT	npc_longrange;							// Zurufweite	( 20 m )
	VAR FLOAT	npc_range1, npc_range2;					// Reichweite 
	VAR FLOAT	npc_azi;								// Azimuth		( Seitenwinkel )
	VAR FLOAT	npc_elevdo, npc_elevup;					// Elevation	( Höhenwinkel )
	VAR INT		npc_prio;								// Priorität
	/// für ITEMs
	VAR FLOAT	item_range1, item_range2;				// Reichweite 
	VAR FLOAT	item_azi;								// Azimuth		( Seitenwinkel )
	VAR FLOAT	item_elevdo, item_elevup;				// Elevation	( Höhenwinkel )
	VAR INT		item_prio;								// Priorität
	/// für MOBs
	VAR FLOAT	mob_range1, mob_range2;					// Reichweite 
	VAR FLOAT	mob_azi;								// Azimuth		( Seitenwinkel )
	VAR FLOAT	mob_elevdo, mob_elevup;					// Elevation	( Höhenwinkel )
	VAR INT		mob_prio;								// Priorität
};

CLASS C_PERC
{	
	VAR INT NPC_PERC_WASHIT;						// wurde getroffen
	VAR INT NPC_PERC_ENEMY;							// Enemy detected
	VAR INT NPC_PERC_MURDER	;					// AssessMurder
	VAR INT NPC_PERC_AIM;							// Anvisiert
	VAR INT NPC_PERC_WARNED;						// gewarnt
	VAR INT NPC_PERC_WITNESS_ATTACK;				// Freund wurde angegriffen
	VAR INT NPC_PERC_DRAW_WEAPON;					// Steht mit gezogener Waffe
	VAR INT NPC_PERC_REMOVE_WEAPON;
	VAR INT NPC_PERC_SOUND_FAR;
	VAR INT NPC_PERC_SOUND_NEAR;
	VAR INT NPC_PERC_THEFT;
	VAR INT NPC_PERC_INFRINGE_PERS;
	VAR INT NPC_PERC_WITNESS_THEFT;
	VAR INT NPC_PERC_INFRINGE_GUILD;
	VAR INT NPC_PERC_NPC;
	VAR INT NPC_PERC_CALL;
	VAR INT NPC_PERC_TALK;
	VAR INT NPC_PERC_ITEM;
	VAR INT NPC_PERC_MOB;
	VAR INT NPC_PERC_BLOCK_MOB;
	VAR INT NPC_PERC_BLOCK_NPC;
	VAR INT NPC_PERC_ENEMY_DOWN;						// Feind liegt am Boden
};

CLASS C_INFO 
{
	VAR INT		npc;
	VAR INT		nr;
	VAR FUNC	condition;
	VAR STRING	transition;
	VAR STRING  sc_default;
	VAR STRING  sc_hero;
	VAR STRING  sc_fighter;
	VAR STRING  sc_thief;
	VAR STRING  sc_mage;
	VAR STRING  sc_psionic;
	VAR STRING	information;
};

// ************************************************************
// Globale Klasseninstanzen
// ************************************************************

// Aktueller Npc und der SC
INSTANCE self,other (C_NPC);

// Opfer bei "witness"-Aktionen
INSTANCE victim(C_NPC);

// aktuelles Object
INSTANCE mob(C_MOB);

// aktuelles Item
INSTANCE item(C_Item);

// Waffe des aktuellen NPC
INSTANCE self_weapon(C_Item);
