bool cProtoFunc::NPCTalkEx(LPOBJ gObj, int NpcId)
{
	bool bResult = false;
	OBJECTSTRUCT *gObjNPC = (OBJECTSTRUCT*)OBJECT_POINTER(NpcId);
#ifdef _GS
	if (gObjNPC->Class == 479 && Config.Duel.Enabled)
	{
		PMSG_SEND_WINDOW aSend;
		// ----
		aSend.uHead			 = 0xC3;
		aSend.uSize			 = 0x04;
		aSend.uPacketType	 = 0x30;
		aSend.uNum			 = 0x21;
		gObj->m_IfState.use  = 479;
		gObj->m_IfState.type = 20;
		// ----
		DataSend(gObj->m_Index, (BYTE*)&aSend, 4);
		g_DuelSystem.SendDuelStatus(gObj);

		bResult = true;
	}
	if (gObjNPC->Class == 492 && moss.MossConfig.EnableMoss)
	{
		if (gObj->m_PK_Level > 3 && moss.MossConfig.UsePK == 0)
		{
			Chat.Message(gObj->m_Index,"[Moss The Gambler] PK player don`t use Moss The Gambler");
			return false;
		}
		if (moss.GetStatusMoss() == FALSE)
		{
			Chat.Message(gObj->m_Index,"[Moss The Gambler] Moss is closed");
			return false;
		}
		BYTE Send2[6] = {0xC3,0x06,0x30,0x00,0x27,0x00};
		BYTE Send[71] = {0xC2,0x00,71,0x31,0x00,5,0x00,71,0x00,0x01,0x00,0x00,13*16,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x02,72,0x00,0x01,0x00,0x00,13*16,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x04,73,0x00,0x01,0x00,0x00,13*16,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x18,74,0x00,0x01,0x00,0x00,13*16,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x06,75,0x00,0x01,0x00,0x00,13*16,0x00,0xFF,0xFF,0xFF,0xFF,0xFF};
		DataSend(gObj->m_Index,Send2,6);
		DataSend(gObj->m_Index,Send,71);
		gObj->TargetShopNumber = 492;
		gObj->m_IfState.use    = 1;
		gObj->m_IfState.type   = 3;
		bResult = true;
	}
	if ((gObjNPC->Class == Config.ClearNpc.NpcId) && (Config.ClearNpc.Enabled))
	{
		PkClear(gObj, gObjNPC);
		bResult = true;		
	}
	if(gObjNPC->Class == 236 && Config.Archer.Enabled)
	{
		GoldenArcher.GoldenArcherClick(gObj);
		bResult = true;
	}
	if (gObjNPC->Class == 241)
	{
		if( AddTab[gObj->m_Index].Resets < Config.GuildRes)
		{
			Chat.Message(1,gObj->m_Index,"You don't have enough Resets, you need %d more resets.", Config.GuildRes - AddTab[gObj->m_Index].Resets);
			bResult = true;
		}
		if( gObj->Level < Config.GuildLevel)
		{
			Chat.Message(1,gObj->m_Index,"You don't have enough Level, you need %d more Level.", Config.GuildLevel - gObj->Level);
			bResult = true;
		}
	} 
#endif
	return bResult;
}
bool cProtoFunc::NPCTalkEx(LPOBJ gObj, int NpcId)
{					
	bool bResult = false;
	OBJECTSTRUCT *gObjNPC = (OBJECTSTRUCT*)OBJECT_POINTER(NpcId);

	if ((gObjNPC->Class == Config.ClearNpc.NpcId) && (Config.ClearNpc.Enabled))
	{
		PkClear(gObj, gObjNPC);
		bResult = true;		
	}
	if ((gObjNPC->Class == Config.ResetNpcNumber) && (Config.IsResetSystem == 2))
	{	   		
		if(AddTab[gObj->m_Index].ResType == -1)
		{
			ResetSystem.MainReset(gObj, gObjNPC);
			bResult = true;		
		}
		else
		{
			if(gObjNPC != NULL)
				NPCMessageLog(cLog.c_Blue, cLog.t_RESET, gObj, gObjNPC, "You have %2.1f more secs for answer.", AddTab[gObj->m_Index].ResType/1000.0f);
			else
				Chat.MessageLog(0, cLog.c_Blue, cLog.t_RESET, gObj, "[Reset] You have %2.1f more secs for answer.", AddTab[gObj->m_Index].ResType/1000.0f);
			bResult = true;
		}
	}							 
 	if (gObjNPC->Class == 236) 
 	{
		AddTab[gObj->m_Index].ArcherObj = gObjNPC;
		bResult = false;
 	}
	if (gObjNPC->Class == Config.Marry.MarryNpcNum && !AddTab[gObj->m_Index].IsMarried) 
	{

		if(!cMarry.StartMarriage(gObj, gObjNPC))
		bResult = true;
	}
	/*
	if (gObjNPC->Class == Config.Marry.DivorceNpcNum) 
	{							
		if(Config.Marry.DivorceNpcNum == Config.Marry.MarryNpcNum)	
			return true;
		if(!cMarry.StartMarriage(gObj, gObjNPC))
			bResult = true;
	}
	*/
	if (gObjNPC->Class == 241)
	{
		if( AddTab[gObj->m_Index].Resets < Config.GuildRes)
		{
			Chat.Message(1,gObj->m_Index,"You don't have enought Resets, you need %d more resets.", Config.GuildRes - AddTab[gObj->m_Index].Resets);
			bResult = true;
		}
		if( gObj->Level < Config.GuildLevel)
		{
			Chat.Message(1,gObj->m_Index,"You don't have enought Level, you need %d more Level.", Config.GuildLevel - gObj->Level);
			bResult = true;
		}
	} 
	
#ifdef _GameServer_
	if (gObjNPC->Class == 479 && Config.Duel.Enabled)
	{
		PMSG_SEND_WINDOW aSend;
		// ----
		aSend.uHead			 = 0xC3;
		aSend.uSize			 = 0x04;
		aSend.uPacketType	 = 0x30;
		aSend.uNum			 = 0x21;
		gObj->m_IfState.use  = 479;
		gObj->m_IfState.type = 20;
		// ----
		DataSend(gObj->m_Index, (BYTE*)&aSend, 4);
		g_DuelSystem.SendDuelStatus(gObj);

		bResult = true;
	}
		if(gObjNPC->Class == 492 && Config.Moss.Enabled)
		{
		
			if (gObj->m_PK_Level > 3 && Config.Moss.UsePkPlayers == 0 )
			{															 
				Chat.Message(1,gObj->m_Index,"[Moss The Gambler] PK players can`t use Moss The Gambler");
				bResult = false;
			}
			else
			{
				BYTE Send2[6] = {0xC3,0x06,0x30,0x00,0x27,0x00};
				BYTE Send[71] = {0xC2,0x00,71,0x31,0x00,5,0x00,71,0x00,0x01,0x00,0x00,13*16,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x02,72,0x00,0x01,0x00,0x00,13*16,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x04,73,0x00,0x01,0x00,0x00,13*16,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x18,74,0x00,0x01,0x00,0x00,13*16,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x06,75,0x00,0x01,0x00,0x00,13*16,0x00,0xFF,0xFF,0xFF,0xFF,0xFF};
				DataSend(gObj->m_Index,Send2,6);
				DataSend(gObj->m_Index,Send,71);
				gObj->TargetShopNumber = 492;
				gObj->m_IfState.use    = 1;
				gObj->m_IfState.type   = 3;
				bResult = true;
			}
		}
#endif

	return bResult;
}