Tópico: [Gracia Parte 2] Gracia CT 2 Jail System
Ver um Único Post
Antigo 12-08-2013, 05:21 PM   #1 (permalink)
Setokaiba
Jesus Te Ama, Mas EU Não!
 
Avatar de Setokaiba
 
Registrado em: Oct 2008
Localização: 45º 33º 34º N | 122º 41º 41º W DESTINATION: ANYWHERE Adidas
Posts: 4,133
Agradeceu: 837
Agradecido 6,058 Vezes em 2,106 Posts
Achei Ruim:
Acharam ruim Vezes em Posts
Meu Estado:
Pontos: 20,442, Nível: 90
Pontos: 20,442, Nível: 90 Pontos: 20,442, Nível: 90 Pontos: 20,442, Nível: 90
Atividade: 99%
Atividade: 99% Atividade: 99% Atividade: 99%

Nome Real: Anderson Andrade

Inventório de Setokaiba Usuário possui 1x Lock Fan Usuário possui 1x Oakley Usuário possui 1x Apple Inc. Fan/User Usuário possui 1x Honda Usuário possui 1x Windows Seven User

Padrão Gracia CT 2 Jail System

Como existem inúmeros bugs e truques para se libertarem da prisão, segue um código para evitar isso:

L2Extend.ini
Código: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
[JailSystem]
ModEnabled=1
BlockChat=1
BlockParty=1
BlockItems=1
BlockAttack=1
BlockGeneralActions=1
CJailSystem.h
Código: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
class CJailSystem
{
	public:

		CJailSystem() { }
		~CJailSystem() { }
		static void Initialize();
		static bool IncommingPackets(CSocket *pSocket, CSPacket *pPacket, INT16 nPacketLen, BYTE nPacketID);
		static bool BlockPacket(CSocket *pSocket, BYTE *packet);
		static bool Say2(CSocket *pSocket, CSPacket *pPacket, int nPacketID, int Length);
		static bool RequestSendFriendMsg(CSocket *pSocket, CSPacket *pPacket, int nPacketID, int Length);
		static bool RequestJoinParty(CSocket *pSocket, CSPacket *pPacket, int nPacketID, int Length);

	private:

		bool bModEnabled;
		bool bBlockChat;
		bool bBlockParty;
		bool bBlockItems;
		bool bBlockAttack;
		bool bBlockGeneralActions;
};
Código: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
CJailSystem *pJS = NULL;

void CJailSystem::Initialize()
{
	// Initializing the Object
	pJS = new CJailSystem();

	// Parsing the Config File
	pJS->bModEnabled = CIniFile::GetIntValue("ModEnabled","JailSystem","L2Extend.ini") == 1 ? true : false;
	pJS->bBlockChat = CIniFile::GetIntValue("BlockChat","JailSystem","L2Extend.ini") == 1 ? true : false;
	pJS->bBlockParty = CIniFile::GetIntValue("BlockParty","JailSystem","L2Extend.ini") == 1 ? true : false;
	pJS->bBlockItems = CIniFile::GetIntValue("BlockItems","JailSystem","L2Extend.ini") == 1 ? true : false;
	pJS->bBlockAttack = CIniFile::GetIntValue("BlockAttack","JailSystem","L2Extend.ini") == 1 ? true : false;
	pJS->bBlockGeneralActions = CIniFile::GetIntValue("BlockGeneralActions","JailSystem","L2Extend.ini") == 1 ? true : false;

}

INT32 nJailSystemIncommingPackets = 0;
bool CJailSystem::IncommingPackets(CSocket *pSocket, CSPacket *pPacket, INT16 nPacketLen, BYTE nPacketID)
{
	L2SERVER_SHARED_GUARD(nJailSystemIncommingPackets);
	TLS_TRACE_BEGIN;

	bool bResult = true;

	if ( pJS->bModEnabled && pSocket->user->IsValidUser() )
	{
		if ( !pSocket->user->SD->nBuilderLevel ) {
			
			// Is in jail
			if ( pSocket->user->IsInJail() ) {
				switch ( nPacketID )
				{
					case 0x21: //RequestBypassToServer
					case 0x2e: //RequestMagicSkillList
					case 0x33: //RequestShortCutReg
					case 0x34: //RequestShortCutUse
					case 0x35: //RequestShortCutDel
					case 0x3f: //RequestSkillList
					case 0x63: //RequestQuestList
					case 0x64: //RequestDestroyQuest
					case 0xcd: //RequestShowMiniMap
					case 0x5b: //SendBypassBuildCmd
					case 0x5e: //RequestFriendInvite
					case 0x5f: //RequestFriendAddReply
					case 0x61: //RequestFriendDel
					case 0x6d: //RequestRestartPoint
					case 0x6e: //RequestGMCommand
					case 0x81: //RequestGMList
					case 0x82: //RequestJoinAlly
					case 0x83: //RequestAnswerJoinAlly
					case 0x84: //RequestWithdrawAlly
					case 0x85: //RequestOustAlly
					case 0x86: //RequestDismissAlly
					case 0x87: //RequestSetAllyCrest
					case 0x88: //RequestAllyCrest
					case 0x89: //RequestChangePetName
					case 0xa0: //RequestBlock
					case 0xac: //RequestRecipeBookOpen
					case 0xad: //RequestRecipeBookDestroy
						if (pJS->bBlockGeneralActions) bResult = BlockPacket(pSocket, pPacket->GetBytes(0x00));
						break;

					case 0x1e: //RequestSellItem
					case 0x0f: //ItemList
					case 0x11: //RequestUnEquipItem
					case 0x12: //RequestDropItem 0x17 RequestDropItemFromPet (?)
					case 0x13: //GetItem (not used any more?)
					case 0x14: //UseItem
					case 0x15: //TradeRequest
					case 0x72: //RequestCrystallizeItem
					case 0x73: //RequestPrivateStoreManageSell
					case 0x74: //SetPrivateStoreListSell
					case 0x1f: //RequestBuyItem
					case 0x44: //AnswerTradeRequest
					case 0x58: //RequestEnchantItem
					case 0x59: //RequestDestroyItem
					case 0x8a: //RequestPetUseItem
					case 0x8b: //RequestGiveItemToPet
					case 0x76: //RequestPrivateStoreQuitSell
					case 0x91: //SetPrivateStoreListBuy
					case 0x92: //RequestPrivateStoreBuyManageCancel
					case 0x93: //RequestPrivateStoreBuyQuit
						if (pJS->bBlockItems) bResult = BlockPacket(pSocket, pPacket->GetBytes(0x00));
						break;

					case 0x0A: //Attack
					case 0x2F: //RequestMagicSkillUse
						if (pJS->bBlockAttack) bResult = BlockPacket(pSocket, pPacket->GetBytes(0x00));
						break;

					case 0x29: //RequestJoinParty
					case 0x2A: //RequestAnswerJoinParty
					case 0x2B: //RequestWithDrawalParty
						if (pJS->bBlockParty) bResult = BlockPacket(pSocket, pPacket->GetBytes(0x00));
						break;

					case 0xCC: //RequestSendFriendMsg
						if (pJS->bBlockChat) bResult = RequestSendFriendMsg(pSocket, pPacket, nPacketID, nPacketLen);
						break;
					case 0x38: //Say2
						if (pJS->bBlockChat) bResult = Say2(pSocket, pPacket, nPacketID, nPacketLen);
						break;

					default:
						bResult = true;
						break;
				}
			}
			// Try to interact with someone in jail
			else {
				switch ( nPacketID )
				{
					case 0xCC: //RequestSendFriendMsg
						if (pJS->bBlockChat) bResult = RequestSendFriendMsg(pSocket, pPacket, nPacketID, nPacketLen);
						break;
					case 0x38: //Say2
						if (pJS->bBlockChat) bResult = Say2(pSocket, pPacket, nPacketID, nPacketLen);
						break;
					case 0x29: //RequestJoinParty
						if (pJS->bBlockParty) bResult = RequestJoinParty(pSocket, pPacket, nPacketID, nPacketLen);
						break;

					default:
						bResult = true;
						break;
				}
			}
		}
	}
	
	if (!bResult) {
		//CLog::AddAnsi(1,"[%s] Blocked Pckt[0x%02X] from [%ls]",__FUNCTION__,nPacketID,pSocket->user->SD->wszName);
	}

	TLS_TRACE_END;
	return bResult;
}

INT32 nBlockPacket = 0;
bool CJailSystem::BlockPacket(CSocket *pSocket, BYTE *packet)
{
	L2SERVER_SHARED_GUARD(nBlockPacket);
	TLS_TRACE_BEGIN;

	if(pSocket->user->IsValidUser()) {
		pSocket->Send("c", 0x25); // 0x1F - ActionFailed
		goto ACTION_FAILED;
	}

	TLS_TRACE_END;
	return true;

	ACTION_FAILED:
	TLS_TRACE_END;
	return false;

}

INT32 nSay2 = 0;
bool CJailSystem::Say2(CSocket *pSocket, CSPacket *pPacket, int nPacketID, int Length)
{
	L2SERVER_SHARED_GUARD(nSay2);
	TLS_TRACE_BEGIN;

	INT32 nPos = 0;
	wstring sText		= pPacket->GetWString(nPos) ; nPos += ((sText.size()*2)+2);
	INT32 nType			= pPacket->GetDWord(nPos) ; nPos += 4;
	wstring sTarget     = pPacket->GetWString(nPos) ; nPos += ((sTarget.size()*2)+2);

	if(pSocket->user->IsValidUser()) {
		if (pSocket->user->IsInJail() && nType>1) {
			pSocket->SendSystemMessage(1357); // You have been blocked from chatting with that contact.
			goto ACTION_FAILED;
		}
		else if (nType == 2) {
			CObjectEx *pTargetEx = CPlayerTracker::GetUserByName(sTarget);
			if ( pTargetEx && pTargetEx->pCreature->IsValidUser() ) {
				if ( pTargetEx->pCreature->IsInJail() && pTargetEx->pCreature->SD->nBuilderLevel==0 ) {
					pSocket->SendSystemMessage(1355); // That contact is currently blocked from chatting
					goto ACTION_FAILED;
				}
			}
		}
	}

	TLS_TRACE_END;
	return true;
	
	ACTION_FAILED:
	TLS_TRACE_END;
	return false;
}

INT32 nRequestSendFriendMsg = 0;
bool CJailSystem::RequestSendFriendMsg(CSocket *pSocket, CSPacket *pPacket, int nPacketID, int Length)
{
	L2SERVER_SHARED_GUARD(nRequestSendFriendMsg);
	TLS_TRACE_BEGIN;

	INT32 nPos = 0;
	wstring sText		= pPacket->GetWString(nPos) ; nPos += ((sText.size()*2)+2);
	wstring sTarget     = pPacket->GetWString(nPos) ; nPos += ((sTarget.size()*2)+2);

	if(pSocket->user->IsValidUser()) {
		CObjectEx *pTargetEx = CPlayerTracker::GetUserByName(sTarget);
		if ( pTargetEx && pTargetEx->pCreature->IsValidUser() ) {
			if ( pSocket->user->IsInJail() ) {
				pSocket->SendSystemMessage(1357); // You have been blocked from chatting with that contact.
				goto ACTION_FAILED;
			}
			else if ( pTargetEx->pCreature->IsInJail() && pTargetEx->pCreature->SD->nBuilderLevel==0 ) {
				pSocket->SendSystemMessage(1355); // That contact is currently blocked from chatting
				goto ACTION_FAILED;
			}
		}
	}

	TLS_TRACE_END;
	return true;
	
	ACTION_FAILED:
	TLS_TRACE_END;
	return false;
}


INT32 nRequestJoinParty = 0;
bool CJailSystem::RequestJoinParty(CSocket *pSocket, CSPacket *pPacket, int nPacketID, int Length)
{
	L2SERVER_SHARED_GUARD(nRequestJoinParty);
	TLS_TRACE_BEGIN;

	INT32 nPos = 0;
	wstring sTarget         = pPacket->GetWString(nPos); nPos += ((sTarget.size()*2)+2);
	INT32 nItemDistribution = pPacket->GetDWord(nPos);   nPos += 4;

	if(pSocket->user->IsValidUser()) {
		CObjectEx *pTargetEx = CPlayerTracker::GetUserByName(sTarget);
		if ( pTargetEx && pTargetEx->pCreature->IsValidUser() ) {
			if ( pSocket->user->IsInJail() ) goto ACTION_FAILED;
			else if ( pTargetEx->pCreature->IsInJail() && pTargetEx->pCreature->SD->nBuilderLevel==0 ) goto ACTION_FAILED;
		}
	}

	TLS_TRACE_END;
	return true;
	
	ACTION_FAILED:
	TLS_TRACE_END;
	return false;
}
Dessa forma o char ficará impossibilitado de executar inúmeras ações.

By FidoW

Setokaiba está offline  
Links Patrocinados
 

Search Engine Optimization by vBSEO 3.3.0