Jesus Te Ama, Mas EU Não!
Registrado em: Oct 2008
Localização: 45º 33º 34º N | 122º 41º 41º W DESTINATION: ANYWHERE Adidas
Posts: 4,133
Agradecido 6,058 Vezes em 2,106 Posts
Achei Ruim:
Acharam ruim Vezes em Posts
Meu Estado:
Pontos: 20,442, Nível: 90
Nome Real: Anderson Andrade
Inventório de Setokaiba
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
[JailSystem]
ModEnabled=1
BlockChat=1
BlockParty=1
BlockItems=1
BlockAttack=1
BlockGeneralActions=1
CJailSystem.h
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;
};
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