Secret Experience

Secret Experience (https://secretexperience.net/)
-   [L2OFF | Admin] Custom Server & Client (https://secretexperience.net/l2off-admin-custom-server-client/)
-   -   [Gracia Parte 2] Gracia CT 2 Jail System (https://secretexperience.net/l2off-admin-custom-server-client/34075-gracia-ct-2-jail-system.html)

Setokaiba 12-08-2013 05:21 PM

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:

[JailSystem]
ModEnabled=1
BlockChat=1
BlockParty=1
BlockItems=1
BlockAttack=1
BlockGeneralActions=1

CJailSystem.h
Código:

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:

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. :daydreaming:

By FidoW


Horários baseados na GMT -3. Agora são 10:01 AM.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.