Jump to content

Amok

Premium
  • Posts

    104
  • Joined

  • Last visited

  • Days Won

    1
  • Feedback

    0%

Posts posted by Amok

  1. On 2/12/2020 at 8:44 PM, valdirk2 said:

    Didn't understand "bt full"?

    I'm Brazilian and I'm using google translate, sorry

    I found out where the problem is, I just don't know how to solve it.

    Inside the file Input.cpp

    In function CInputProcessor::Process

    I put a sys_log in:

    if (m_iBufferLeft < iPacketLen){
                sys_err("teste2");
                return true;
    }

    And whenever I try to login it appears in the syslog



     

    bool CInputProcessor::Process(LPDESC lpDesc, const void * c_pvOrig, int iBytes, int & r_iBytesProceed) { const char * c_pData = (const char *) c_pvOrig; BYTE bLastHeader = 0; int iLastPacketLen = 0; int iPacketLen; if (!m_pPacketInfo) { sys_err("No packet info has been binded to"); return true; } for (m_iBufferLeft = iBytes; m_iBufferLeft > 0;) { sys_err("teste"); BYTE bHeader = (BYTE) *(c_pData); const char * c_pszName; if (bHeader == 0) { iPacketLen = 1; sys_err("teste1"); } else if (!m_pPacketInfo->Get(bHeader, &iPacketLen, &c_pszName)) { sys_err("UNKNOWN HEADER: %d, LAST HEADER: %d(%d), REMAIN BYTES: %d, fd: %d", bHeader, bLastHeader, iLastPacketLen, m_iBufferLeft, lpDesc->GetSocket()); //printdata((BYTE *) c_pvOrig, m_iBufferLeft); lpDesc->SetPhase(PHASE_CLOSE); return true; } if (m_iBufferLeft < iPacketLen){ sys_err("teste2"); // <--------------------------------------------------------- return true; } if (bHeader) { sys_err("teste3"); if (test_server && bHeader != HEADER_CG_MOVE) sys_log(0, "Packet Analyze [Header %d][bufferLeft %d] ", bHeader, m_iBufferLeft); m_pPacketInfo->Start(); int iExtraPacketSize = Analyze(lpDesc, bHeader, c_pData); if (iExtraPacketSize < 0){ sys_err("teste4"); return true; } iPacketLen += iExtraPacketSize; lpDesc->Log("%s %d", c_pszName, iPacketLen); m_pPacketInfo->End(); } // TRAFFIC_PROFILER if (g_bTrafficProfileOn){ sys_err("teste5"); TrafficProfiler::instance().Report(TrafficProfiler::IODIR_INPUT, bHeader, iPacketLen); } // END_OF_TRAFFIC_PROFILER if (bHeader == HEADER_CG_PONG) sys_log(0, "PONG! %u %u", m_pPacketInfo->IsSequence(bHeader), *(BYTE *) (c_pData + iPacketLen - sizeof(BYTE))); if (m_pPacketInfo->IsSequence(bHeader)) { BYTE bSeq = lpDesc->GetSequence(); BYTE bSeqReceived = *(BYTE *) (c_pData + iPacketLen - sizeof(BYTE)); sys_err("teste7"); if (bSeq != bSeqReceived) { sys_err("SEQUENCE %x mismatch 0x%x != 0x%x header %u", get_pointer(lpDesc), bSeq, bSeqReceived, bHeader); LPCHARACTER ch = lpDesc->GetCharacter(); char buf[1024]; int offset, len; offset = snprintf(buf, sizeof(buf), "SEQUENCE_LOG [%s]-------------\n", ch ? ch->GetName() : "UNKNOWN"); if (offset < 0 || offset >= (int) sizeof(buf)) offset = sizeof(buf) - 1; for (size_t i = 0; i < lpDesc->m_seq_vector.size(); ++i) { len = snprintf(buf + offset, sizeof(buf) - offset, "\t[%03d : 0x%x]\n", lpDesc->m_seq_vector.hdr, lpDesc->m_seq_vector.seq); if (len < 0 || len >= (int) sizeof(buf) - offset) offset += (sizeof(buf) - offset) - 1; else offset += len; } snprintf(buf + offset, sizeof(buf) - offset, "\t[%03d : 0x%x]\n", bHeader, bSeq); sys_err("%s", buf); lpDesc->SetPhase(PHASE_CLOSE); return true; } else { sys_err("teste10"); lpDesc->push_seq(bHeader, bSeq); lpDesc->SetNextSequence(); //sys_err("SEQUENCE %x match %u next %u header %u", lpDesc, bSeq, lpDesc->GetSequence(), bHeader); } } c_pData += iPacketLen; m_iBufferLeft -= iPacketLen; r_iBytesProceed += iPacketLen; iLastPacketLen = iPacketLen; bLastHeader = bHeader; if (GetType() != lpDesc->GetInputProcessor()->GetType()){ sys_err("teste11"); return false; } } return true; }

    
    bool CInputProcessor::Process(LPDESC lpDesc, const void * c_pvOrig, int iBytes, int & r_iBytesProceed)
    {
    	const char * c_pData = (const char *) c_pvOrig;
    
    	BYTE	bLastHeader = 0;
    	int		iLastPacketLen = 0;
    	int		iPacketLen;
    
    	if (!m_pPacketInfo)
    	{
    		sys_err("No packet info has been binded to");
    		return true;
    	}
    
    	for (m_iBufferLeft = iBytes; m_iBufferLeft > 0;)
    	{
    		sys_err("teste");
    		BYTE bHeader = (BYTE) *(c_pData);
    		const char * c_pszName;
    
    		if (bHeader == 0) {
    			iPacketLen = 1;
    			sys_err("teste1");
    		}
    		else if (!m_pPacketInfo->Get(bHeader, &iPacketLen, &c_pszName))
    		{
    			sys_err("UNKNOWN HEADER: %d, LAST HEADER: %d(%d), REMAIN BYTES: %d, fd: %d",
    					bHeader, bLastHeader, iLastPacketLen, m_iBufferLeft, lpDesc->GetSocket());
    			//printdata((BYTE *) c_pvOrig, m_iBufferLeft);
    			lpDesc->SetPhase(PHASE_CLOSE);
    			return true;
    		}
    
    		if (m_iBufferLeft < iPacketLen){
    			sys_err("teste2"); // <---------------------------------------------------------
    			return true;
    		}
    		if (bHeader)
    		{
    			sys_err("teste3");
    			if (test_server && bHeader != HEADER_CG_MOVE)
    				sys_log(0, "Packet Analyze [Header %d][bufferLeft %d] ", bHeader, m_iBufferLeft);
    
    			m_pPacketInfo->Start();
    
    			int iExtraPacketSize = Analyze(lpDesc, bHeader, c_pData);
    
    			if (iExtraPacketSize < 0){
    				sys_err("teste4");
    				return true;
    			}
    			iPacketLen += iExtraPacketSize;
    			lpDesc->Log("%s %d", c_pszName, iPacketLen);
    			m_pPacketInfo->End();
    		}
    
    		// TRAFFIC_PROFILER
    		if (g_bTrafficProfileOn){
    			sys_err("teste5");
    			TrafficProfiler::instance().Report(TrafficProfiler::IODIR_INPUT, bHeader, iPacketLen);
    		}
    		// END_OF_TRAFFIC_PROFILER
    
    		if (bHeader == HEADER_CG_PONG)
    			sys_log(0, "PONG! %u %u", m_pPacketInfo->IsSequence(bHeader), *(BYTE *) (c_pData + iPacketLen - sizeof(BYTE)));
    
    		if (m_pPacketInfo->IsSequence(bHeader))
    		{
    			BYTE bSeq = lpDesc->GetSequence();
    			BYTE bSeqReceived = *(BYTE *) (c_pData + iPacketLen - sizeof(BYTE));
    			sys_err("teste7");
    			if (bSeq != bSeqReceived)
    			{
    				sys_err("SEQUENCE %x mismatch 0x%x != 0x%x header %u", get_pointer(lpDesc), bSeq, bSeqReceived, bHeader);
    
    				LPCHARACTER	ch = lpDesc->GetCharacter();
    
    				char buf[1024];
    				int	offset, len;
    
    				offset = snprintf(buf, sizeof(buf), "SEQUENCE_LOG [%s]-------------\n", ch ? ch->GetName() : "UNKNOWN");
    
    				if (offset < 0 || offset >= (int) sizeof(buf))
    					offset = sizeof(buf) - 1;
    
    				for (size_t i = 0; i < lpDesc->m_seq_vector.size(); ++i)
    				{
    					len = snprintf(buf + offset, sizeof(buf) - offset, "\t[%03d : 0x%x]\n",
    							lpDesc->m_seq_vector[i].hdr,
    							lpDesc->m_seq_vector[i].seq);
    
    					if (len < 0 || len >= (int) sizeof(buf) - offset)
    						offset += (sizeof(buf) - offset) - 1;
    					else
    						offset += len;
    				}
    
    				snprintf(buf + offset, sizeof(buf) - offset, "\t[%03d : 0x%x]\n", bHeader, bSeq);
    				sys_err("%s", buf);
    
    				lpDesc->SetPhase(PHASE_CLOSE);
    				return true;
    			}
    			else
    			{
    				sys_err("teste10");
    				lpDesc->push_seq(bHeader, bSeq);
    				lpDesc->SetNextSequence();
    				//sys_err("SEQUENCE %x match %u next %u header %u", lpDesc, bSeq, lpDesc->GetSequence(), bHeader);
    			}
    		}
    
    		c_pData	+= iPacketLen;
    		m_iBufferLeft -= iPacketLen;
    		r_iBytesProceed += iPacketLen;
    
    		iLastPacketLen = iPacketLen;
    		bLastHeader	= bHeader;
    
    		if (GetType() != lpDesc->GetInputProcessor()->GetType()){
    			sys_err("teste11");
    			return false;
    		}
    	}
    
    	return true;
    }

     

    Got the same Error :( someone knows how to fix ?

  2. Hi,

    I compiled the Source successful with clang and Server is running. But when ist want login with my Client it get stucked at connecting to Server... After some Look i think there is a problem with the handshake reply. The Client get the packet from server and reply it but the server didnt get the answer.

     

    Someone knows this error ?

     

    Thanks, for every hint.

     

  3. First error:

    the client cant get the Itempointer for the item: 165400

    check item_proto

     

    Second error is that there is EQUIPMENT_PENDANT  is not defined in the item class

    something like:  PyModule_AddIntConstant(poModule, "EQUIPMENT_PENDANT",            c_Equipment_Pendant);

    but you need to look that this is right for your source

  4. Hi i get a server crash when i change the blockmode on client.

     

    gdb:

    Spoiler

    #0  0x080bef72 in CHARACTER::SetQuestFlag (this=0x41ffc000, flag=@0xffff8f30, value=1) at /metin2/source/Server/game/src/char.cpp:6474
    #1  0x080be8aa in CHARACTER::SetBlockMode (this=0x41ffc000, bFlag=1 '\001') at /metin2/source/Server/game/src/char.cpp:6372
    #2  0x08185a7a in do_setblockmode (ch=0x41ffc000, argument=0xffff91d2 " 1", cmd=98, subcmd=0) at /metin2/source/Server/game/src/cmd_general.cpp:1314
    #3  0x0817dca3 in interpret_command (ch=0x41ffc000, argument=0xffff9fcb "setblockmode 1", len=14) at /metin2/source/Server/game/src/cmd.cpp:746
    #4  0x0829e2e1 in CInputMain::Chat (this=0x2b563c78, ch=0x41ffc000, data=0x294f3000 "\003\024", uiBytes=24) at /metin2/source/Server/game/src/input_main.cpp:661
    #5  0x082aa04e in CInputMain::Analyze (this=0x2b563c78, d=0x2b563c00, bHeader=3 '\003', c_pData=0x294f3000 "\003\024") at /metin2/source/Server/game/src/input_main.cpp:3346
    #6  0x08282129 in CInputProcessor::Process (this=0x2b563c78, lpDesc=0x2b563c00, c_pvOrig=0x294f3000, iBytes=24, r_iBytesProceed=@0xffffabdc) at /metin2/source/Server/game/src/input.cpp:98
    #7  0x081f5efe in DESC::ProcessInput (this=0x2b563c00) at /metin2/source/Server/game/src/desc.cpp:341
    #8  0x0804bdb4 in io_loop (fdw=0x29537140) at /metin2/source/Server/game/src/main.cpp:910
    #9  0x0804b684 in idle () at /metin2/source/Server/game/src/main.cpp:792
    #10 0x08049f9f in main (argc=1, argv=0xffffdcd0) at /metin2/source/Server/game/src/main.cpp:467

    Someone know how to solve ?

  5. 71124    Weißer Löwe    ITEM_COSTUME    COSTUME_MOUNT    0    1    ANTI_STACK    QUEST_USE_MULTIPLE | LOG    WEAR_SHIELD        100    100    0    0    0    REAL_TIME_FIRST_USE    86400    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    2400    0    0    0    0    0    0    0    0

     

    you can also use: TIMER_BASED_ON_WEAR then it only runs when the item is equiped

  6. 3 hours ago, mogulul said:

    When i put ITEM_COSTUME COSTUME_MOUNT....time change to 0,you know how can i fix this?

    I temp fixxed this with Limit Type...

    LimitType0 = REAL_TIME_START_FIRST_USE

    LimitValue0 = 86400

    86400 = 24 Hours (60*60*24)

    when mount is used first time the time runs

×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.