Huhu habe mir mal überlegt ein Taschendiebstahlsystem für G1 zu implementieren.
Ambient NPC sollen einen neuen Dialog erhalten "Taschendiebstahl" (bisher alle NPC)

Pläne:
-50% brauchen Stufe 1, 50% brauchen Stufe 2
-Diebstahl soll zufällige Menge an Erz geben. (wichtig durch Neuladen nicht veränderbar)
-Diebstahl soll auch exp Punkte geben, dabei möchte ich, die selben EXP nutzen, die man sonst erhält wenn man Personen niederschlägt.
-Schatten sollen erst ab Kapitel 2 und Gardisten erst ab Kapitel 3 beklaut werden (weil sonst zu viel Erz am Anfang)

in B_AssignAmbientInfos.d fügte ich folgendes ein

Code:
FUNC VOID B_AssignAmbientInfos(var c_NPC amb_self)
{

if (amb_self.aivar[AIV_MONSTERLOOT1]==0) ///damit nur einmal vergeben wird
{
global_random = Hlp_Random (2); amb_self.aivar[AIV_MONSTERLOOT1]=(1+global_random); ///1 für anfänger, 2 für Meister

if ((amb_self.guild == GIL_VLK) || (amb_self.guild == GIL_SFB)|| (amb_self.guild == GIL_BAU)) &&  (amb_self.aivar[AIV_MONSTERLOOT1]==1)
{ global_random = Hlp_Random (9); amb_self.aivar[AIV_MONSTERLOOT2]=(global_random+2);  amb_self.aivar[AIV_MONSTERLOOT3]=1;   }   

else if ((amb_self.guild == GIL_VLK)|| (amb_self.guild == GIL_SFB) || (amb_self.guild == GIL_BAU)) &&  (amb_self.aivar[AIV_MONSTERLOOT1]==2)
{ global_random = Hlp_Random (21); amb_self.aivar[AIV_MONSTERLOOT2]=(global_random+5);  amb_self.aivar[AIV_MONSTERLOOT3]=1;   }   
   
             
else if ((amb_self.guild == GIL_STT) || (amb_self.guild == GIL_NOV) || (amb_self.guild == GIL_ORG)) &&  (amb_self.aivar[AIV_MONSTERLOOT1]==1)
{ global_random = Hlp_Random (11); amb_self.aivar[AIV_MONSTERLOOT2]=(global_random+5);   amb_self.aivar[AIV_MONSTERLOOT3]=2;  }   

else if ((amb_self.guild == GIL_STT) || (amb_self.guild == GIL_NOV) || (amb_self.guild == GIL_ORG)) &&  (amb_self.aivar[AIV_MONSTERLOOT1]==2)
{ global_random = Hlp_Random (21); amb_self.aivar[AIV_MONSTERLOOT2]=(global_random+10);  amb_self.aivar[AIV_MONSTERLOOT3]=2;   }   


else if ((amb_self.guild == GIL_GRD) || (amb_self.guild == GIL_TPL) || (amb_self.guild == GIL_SLD)) &&  (amb_self.aivar[AIV_MONSTERLOOT1]==1)
{ global_random = Hlp_Random (21); amb_self.aivar[AIV_MONSTERLOOT2]=(global_random+10);  amb_self.aivar[AIV_MONSTERLOOT3]=3;   }  

else if ((amb_self.guild == GIL_GRD) || (amb_self.guild == GIL_TPL) || (amb_self.guild == GIL_SLD)) &&  (amb_self.aivar[AIV_MONSTERLOOT1]==2)
{ global_random = Hlp_Random (41); amb_self.aivar[AIV_MONSTERLOOT2]=(global_random+20);  amb_self.aivar[AIV_MONSTERLOOT3]=3;   } ; 

B_AssignAmbientInfos_Dieb(amb_self); 
};


	if ( (amb_self.npctype==NPCTYPE_AMBIENT)||(amb_self.npctype==NPCTYPE_GUARD) ) //Alle Ambient-NPCs in den Lagern
	{	
		if (amb_self.guild == GIL_VLK)
		{
			if (amb_self.voice == 1)
			{
				B_AssignAmbientInfos_Vlk_1(amb_self);

.....
amb_self.aivar[AIV_MONSTERLOOT1] nutze ich für die Stufe, Fortgeschrittener oder Meister Dieb. (kein Diebstahl mit Stufe 0 möglich)
amb_self.aivar[AIV_MONSTERLOOT2] nutze ich für den Betrag an Erz, zufallsbedingt
amb_self.aivar[AIV_MONSTERLOOT3] nutze ich für den NPC. Stärkere NPCS wie Gardisten oder Söldner geben mehr Erz, dafür kann man sie erst später bestehlen. Gibt nur Stufe 1, 2 oder 3

Habe eine neue Ambient_Dialoge erstellt
Code:
INSTANCE Info_AmbientDIEB(C_INFO)
{
	nr			= 3;
	condition	= Info_AmbientDIEB_Condition;
	information	= Info_AmbientDIEB_Info;
	permanent	= 1;
	description = "Taschendiebstahl";
};                       

FUNC INT Info_AmbientDIEB_Condition()
{

if (self.aivar[AIV_MONSTERLOOT3] >=kapitel)
&& (Npc_GetTalentSkill(other, NPC_TALENT_PICKPOCKET) >= self.aivar[AIV_MONSTERLOOT1])
&& (self.level <20)
{
	return 1;
};
};

FUNC VOID Info_AmbientDIEB_Info()
{
self.aivar[AIV_MONSTERLOOT1]=10; ///damit Dialog pro NPC nur einmalig
CreateInvItems(self, ItMiNugget, self.aivar[AIV_MONSTERLOOT2]);
B_GiveInvItems	(self, hero,	ItMinugget,	self.aivar[AIV_MONSTERLOOT2]);

if	!self.aivar[AIV_WASDEFEATEDBYSC]
&& ((self.npctype==NPCTYPE_AMBIENT)||(self.npctype==NPCTYPE_GUARD))
{
		B_GiveXP (self.level * 10);
self.aivar[AIV_WASDEFEATEDBYSC] = TRUE;
}; 
	AI_StopProcessInfos	(self);
};


	
// *************************************************************************
// -------------------------------------------------------------------------

FUNC VOID B_AssignAmbientInfos_Dieb(var c_NPC slf)
{
	
	Info_AmbientDIEB.npc					= Hlp_GetInstanceID(slf);

};
aber irgendwie klappt das nicht so wirklich, ich bekomme immer den selben Betrag. Und sobald ich in spätere Kapitel komme sollte ich auch Gardisten bestehlen können, klappt aber nicht.

Also wo liegt der Fehler? Ansich müsste dank if (amb_self.aivar[AIV_MONSTERLOOT1]==0) für jeden einzelnen NPC bestimmte Vorrausetzungen und eine einzigartige Erzmenge erstellt werden?

Ach und nur so ne kleine Frage am Rande, den Gnadenstoß kann man ja nur mit scharfen Waffen geben, könnte man dies ändern, sodass man auch mit stumpfen Waffen den Gnadenstoß geben kann?