GameServer 1.00.90

Page 85 of 86 FirstFirst ... 357577787980818283848586 LastLast
Results 2,101 to 2,125 of 2143
  1. #2101
    Everything is a joke. duracel is offline
    MemberRank
    Sep 2005 Join Date
    442Posts

    Re: GameServer 1.00.90

    QuestUtil.cpp from gs.90. If i'll have some more free time i'll release also QuestInfo.cpp.
    Code:
    struct PMSG_3RD_QUEST_REQUEST_INFO
    {
    	PBMSG_HEAD h;
    	int iIndex;		//4
    	char Name[10];	//8
    	BYTE btState;	//0x12
    };
    
    void CQuestUtil::Quest3rdRequestInfo(LPOBJ lpObj) //Identical
    {
    	if( lpObj->m_i3rdQuestState == 1)
    		return;
    	
    	PMSG_3RD_QUEST_REQUEST_INFO pMsg;
    
    	pMsg.h.set((LPBYTE)&pMsg, 0x13, sizeof(pMsg));
    	pMsg.iIndex = lpObj->m_Index;
    	memcpy(&pMsg.Name, lpObj->Name, sizeof(pMsg.Name));
    	pMsg.btState = 0;
    	cDBSMng.Send((char*)&pMsg,pMsg.h.size);
    }
    
    struct PMSG_3RD_QUEST_INFO
    {
    	PBMSG_HEAD h;
    	int iIndex;			//0x4
    	char Name[10];		//0x8
    	int i3rdQuestIndex; //0x14
    	int iMonIndex1;		//0x18
    	int iMonKillCount1;	//0x1C
    	int iMonIndex2;		//0x20
    	int iMonKillCount2;	//0x24
    	int iMonIndex3;		//0x28
    	int iMonKillCount3;	//0x2C
    	int iMonIndex4;		//0x30
    	int iMonKillCount4;	//0x34
    	int iMonIndex5;		//0x38
    	int iMonKillCount5;	//0x3C
    };
    
    void CQuestUtil::Quest3rdLoadInfo(LPBYTE lpMsg) //Identical
    {
    	PMSG_3RD_QUEST_INFO * lpMsg2 = (PMSG_3RD_QUEST_INFO *)lpMsg;
    
    	if( !gObjIsConnectedGP(lpMsg2->iIndex) )
    		return;
    
    	int PlayerIndex = lpMsg2->iIndex;
    
    	LPOBJ lpObj = &gObj[PlayerIndex];
    
    	if( lpObj->m_i3rdQuestState == 0)
    	{
    		lpObj->m_i3rdQuestIndex = lpMsg2->i3rdQuestIndex;
    		lpObj->MonsterKillInfo[0].MonIndex	= lpMsg2->iMonIndex1;
    		lpObj->MonsterKillInfo[0].KillCount = lpMsg2->iMonKillCount1;
    		lpObj->MonsterKillInfo[1].MonIndex	= lpMsg2->iMonIndex2;
    		lpObj->MonsterKillInfo[1].KillCount = lpMsg2->iMonKillCount2;
    		lpObj->MonsterKillInfo[2].MonIndex	= lpMsg2->iMonIndex3;
    		lpObj->MonsterKillInfo[2].KillCount = lpMsg2->iMonKillCount3;
    		lpObj->MonsterKillInfo[3].MonIndex	= lpMsg2->iMonIndex4;
    		lpObj->MonsterKillInfo[3].KillCount = lpMsg2->iMonKillCount4;
    		lpObj->MonsterKillInfo[4].MonIndex	= lpMsg2->iMonIndex5;
    		lpObj->MonsterKillInfo[4].KillCount = lpMsg2->iMonKillCount5;
    		lpObj->m_i3rdQuestState = 1;
    
    		LogAddTD("[Quest] Set MonsterKillInfo [%s][%s](%d) (%d : %d/%d, %d/%d, %d/%d, %d/%d, %d/%d)",
    			lpObj->AccountID,lpObj->Name,lpObj->m_Index,
    			lpObj->m_i3rdQuestIndex,
    			lpObj->MonsterKillInfo[0].MonIndex,
    			lpObj->MonsterKillInfo[0].KillCount,
    			lpObj->MonsterKillInfo[1].MonIndex,
    			lpObj->MonsterKillInfo[1].KillCount,
    			lpObj->MonsterKillInfo[2].MonIndex,
    			lpObj->MonsterKillInfo[2].KillCount,
    			lpObj->MonsterKillInfo[3].MonIndex,
    			lpObj->MonsterKillInfo[3].KillCount,
    			lpObj->MonsterKillInfo[4].MonIndex,
    			lpObj->MonsterKillInfo[4].KillCount);
    	}
    }
    
    void CQuestUtil::Quest3rdSaveInfo(LPOBJ lpObj) //Identical
    {
    	if (lpObj->m_i3rdQuestState == 0)
    		return;
    
    	PMSG_3RD_QUEST_INFO pMsg;
    
    	PHeadSetB((LPBYTE)&pMsg, 0x14, sizeof(pMsg));
    	memcpy(&pMsg.Name, lpObj->Name, sizeof(pMsg.Name));
    
    	pMsg.iIndex = lpObj->m_Index;
    	pMsg.i3rdQuestIndex = lpObj->m_i3rdQuestIndex;
    	pMsg.iMonIndex1 = lpObj->MonsterKillInfo[0].MonIndex;
    	pMsg.iMonKillCount1 = lpObj->MonsterKillInfo[0].KillCount;
    	pMsg.iMonIndex2 = lpObj->MonsterKillInfo[1].MonIndex;
    	pMsg.iMonKillCount2 = lpObj->MonsterKillInfo[1].KillCount;
    	pMsg.iMonIndex3 = lpObj->MonsterKillInfo[2].MonIndex;
    	pMsg.iMonKillCount3 = lpObj->MonsterKillInfo[2].KillCount;
    	pMsg.iMonIndex4 = lpObj->MonsterKillInfo[3].MonIndex;
    	pMsg.iMonKillCount4 = lpObj->MonsterKillInfo[3].KillCount;
    	pMsg.iMonIndex5 = lpObj->MonsterKillInfo[4].MonIndex;
    	pMsg.iMonKillCount5 = lpObj->MonsterKillInfo[4].KillCount;
    
    	LogAddTD("[Quest] Save MonsterKillInfo [%s][%s] (%d : %d/%d, %d/%d, %d/%d, %d/%d, %d/%d)",
    		lpObj->AccountID,lpObj->Name,
    		pMsg.i3rdQuestIndex,
    		pMsg.iMonIndex1,
    		pMsg.iMonKillCount1,
    		pMsg.iMonIndex2,
    		pMsg.iMonKillCount2,
    		pMsg.iMonIndex3,
    		pMsg.iMonKillCount3,
    		pMsg.iMonIndex4,
    		pMsg.iMonKillCount4,
    		pMsg.iMonIndex5,
    		pMsg.iMonKillCount5);
    
    	cDBSMng.Send((char*)&pMsg,sizeof(pMsg));
    }
    Last edited by duracel; 10-02-12 at 07:23 PM.

  2. #2102
    Member laudaicat is offline
    MemberRank
    Oct 2008 Join Date
    86Posts

    Re: GameServer 1.00.90

    Quote Originally Posted by Young View Post
    Agree ! The point is... why this problem don't occour in previous version, like Season 2 ? The server side function is same. I thinkt that is one socket buffer overflow in the client...
    Season 2 don't have PACKET-TOOL check :P.

  3. #2103
    Proficient Member Young is offline
    MemberRank
    Jul 2005 Join Date
    BrazilLocation
    190Posts

    Re: GameServer 1.00.90

    Quote Originally Posted by laudaicat View Post
    Season 2 don't have PACKET-TOOL check :P.
    Hack check is done in GameServer, not in client. The packet that make many players disconnect is from Server to Client, so it is impossible to be this !

  4. #2104
    Valued Member Marin_scp is offline
    MemberRank
    Mar 2006 Join Date
    Inside EAXLocation
    103Posts

    Re: GameServer 1.00.90

    Hmm... 1.00.90 has some huge improvements over 1.00.18, if I had the time, I would teste GS 1.00.56 and 1.00.77 for the same bug, both have some improvements that 1.00.90 has over the previous generation GameServer, than we would be able to trace for the problem, for examplo, 1.00.77 and 1.00.90 have working Skill Tree, maby WebZen changed the functions that deals with skill and caused this bug, also, in GS 1.00.19 (and consequently the newer versions) the Buff scheme has completely changed, maby the calculos of additional damage and speed are causing this packet overflow.

    All of these are hipoteses, unfortunately, I don't have the time to teste on previous GS since I'm working only on 1.00.90, but I'm really forward a better fix thant disabling the effect for other players.

  5. #2105
    Mulegend Server Mulegend is offline
    MemberRank
    May 2006 Join Date
    Montevideo - UruguayLocation
    461Posts

    Re: GameServer 1.00.90

    Quote Originally Posted by Young View Post
    Agree ! The point is... why this problem don't occour in previous version, like Season 2 ? The server side function is same. I thinkt that is one socket buffer overflow in the client...
    Yes i think is client Side buffer overflow too

  6. #2106
    Member laudaicat is offline
    MemberRank
    Oct 2008 Join Date
    86Posts

    Re: GameServer 1.00.90

    Quote Originally Posted by Young View Post
    Hack check is done in GameServer, not in client. The packet that make many players disconnect is from Server to Client, so it is impossible to be this !
    I don't remove DarkRaven packet. My server have over 2000 Player (Season 6.3) and don't have this problem :P

  7. #2107
    Mulegend Server Mulegend is offline
    MemberRank
    May 2006 Join Date
    Montevideo - UruguayLocation
    461Posts

    Re: GameServer 1.00.90

    Cuz webzen fix that bug in New mains, young talk abou S4.5 and S4.6 mains

  8. #2108
    Account Upgraded | Title Enabled! boncha is offline
    MemberRank
    Oct 2008 Join Date
    254Posts

    Re: GameServer 1.00.90

    can some one share class CMagicInf for .90 ?
    tnx

  9. #2109
    Everything is a joke. duracel is offline
    MemberRank
    Sep 2005 Join Date
    442Posts

    Re: GameServer 1.00.90

    Quote Originally Posted by boncha View Post
    can some one share class CMagicInf for .90 ?
    tnx
    Its the same as .18 only a few new functions and this members:

    Code:
    	BYTE m_Level;		//0x4
    	int m_Skill;		//0x8
    	int m_DamageMin;	//0xC
    	int m_DamageMax;        //0x10

  10. #2110
    Proficient Member Young is offline
    MemberRank
    Jul 2005 Join Date
    BrazilLocation
    190Posts

    Re: GameServer 1.00.90

    Quote Originally Posted by laudaicat View Post
    I don't remove DarkRaven packet. My server have over 2000 Player (Season 6.3) and don't have this problem :P
    That's I'm talking about. The problem is in client, not in server ! 2k online players ? Is Arieth MU ? LMAO !

    Quote Originally Posted by boncha View Post
    can some one share class CMagicInf for .90 ?
    tnx
    Code:
    class CMagicInf
    {
    public:
    	CMagicInf(){};
    	virtual ~CMagicInf(){};
    
    	BYTE m_Level;
    	int m_Skill;
    	int m_DamageMin;
    	int m_DamageMax;
    };

  11. #2111
    Kingdom of Shadows [RCZ]ShadowKing is offline
    MemberRank
    Jul 2007 Join Date
    1,644Posts

    Re: GameServer 1.00.90

    Quote Originally Posted by boncha View Post
    can some one share class CMagicInf for .90 ?
    tnx
    New function: int CMagicInf2::SetMasterSkill(int aSkill, BYTE aLevel);

    .h
    Code:
    // ------------------------------------------------------------------------------------------------------------
    #pragma once
    // ------------------------------------------------------------------------------------------------------------
    
    class CMagicInf2
    {
    private:
        BYTE        m_Level;        // 0x04 -> mov byte => BYTE
        int            m_Skill;        // 0x08 -> DWORD    => int
        int            m_DamageMin;    // 0x0C -> DWORD    => int
        int            m_DamageMax;    // 0x10 -> DWORD    => int
    public:
                    CMagicInf2        (void);
        virtual ~    CMagicInf2        (void);
        // ----
        CMagicInf2 & operator = (CMagicInf2 & __that) // # Taken from Deathway .18
        {
            this->m_Level        = __that.m_Level;
            this->m_Skill        = __that.m_Skill;
            this->m_DamageMin    = __that.m_DamageMin;
            this->m_DamageMax    = __that.m_DamageMax;
            // ----
            return *this;
        };
        // ----
        void        Clear            (); // # none => incomplete type(void)
        bool        IsMagic            (); // # DWORD => BOOL(bool)
        int            Set                (int aType, int aIndex, BYTE aLevel); // # DWORD => int
        int            GetDamage        (); // # DWORD => int
        int            Set                (int aSkill, BYTE aLevel); // # DWORD => int
        int            SetMasterSkill    (int aSkill, BYTE aLevel); // # DWORD => int
    };
    // ------------------------------------------------------------------------------------------------------------
    .cpp
    Code:
    // ------------------------------------------------------------------------------------------------------------
    #include "stdafx.h"
    #include "TMagicInf2.h"
    // ------------------------------------------------------------------------------------------------------------
    
    /* CMagicInf::CMagicInf        - 0 arg - CMagicInf::CMagicInf    - 004A99A0 */
    CMagicInf2::CMagicInf2(void) // # DONE
    {
        this->Clear();
    }
    // ------------------------------------------------------------------------------------------------------------
    
    /* CMagicInf::~CMagicInf        - 0 arg    - CMagicInf::~CMagicInf    - 004A9A20 */
    CMagicInf2::~CMagicInf2(void) // # DONE
    {
        this->m_DamageMin  = 0;
        this->m_DamageMax  = 0;
    }
    // ------------------------------------------------------------------------------------------------------------
    
    /* void CMagicInf::Clear        - 0 arg    - CMagicInf::Clear        - 004A9A60 */
    void CMagicInf2::Clear() // # DONE
    {
        this->m_Skill  = 0xFF;
        this->m_Level  = 0;
    }
    // ------------------------------------------------------------------------------------------------------------
    
    /* bool CMagicInf::IsMagic        - 0 arg - CMagicInf::IsMagic    - 004A9A90 */
    bool CMagicInf2::IsMagic() // # DONE
    {
        if(this->m_Skill == 0xFF)
        {
            return false;
        }
        // ----
        return true;
    }
    // ------------------------------------------------------------------------------------------------------------
    
    /* int CMagicInf::Set            - 3 arg - CMagicInf::Set(3 arg)    - 004A9E40 */
    int    CMagicInf2::Set(int aType, int aIndex, BYTE aLevel) // # DONE
    {
        if(this->m_Skill != 0xFF)
        {
            // log "No space to add.
            return -1;
        }
        // ----
        this->m_Level = aLevel;
        this->m_Skill = GetSkillNumberInex(aType, aIndex, aLevel);
        // ----
        if(this->m_Skill < 0)
        {
            this->m_Skill = 1;
        }
        // ----
        // L043
        int damage            = MagicDamageC.SkillGet(this->m_Skill);
        // ----
        this->m_DamageMin    = damage;
        // ----
        this->m_DamageMax    = (damage / 2) + damage;
        // ----
        return this->m_Skill;
    }
    // ------------------------------------------------------------------------------------------------------------
    
    /* int CMagicInf::GetDamage    - 0 arg - CMagicInf::GetDamage    - 004A9F40 */
    int    CMagicInf2::GetDamage() // # DONE
    {
        if(this->m_Skill == 0xFF)
        {
            // log Damage value doesn't exist.
            // ----
            return 0;
        }
        // ----
        int unknown        = this->m_DamageMax - this->m_DamageMin; // # USELESS
        // ----
        return ((rand() % 1) + this->m_DamageMin);
    }
    // ------------------------------------------------------------------------------------------------------------
    
    /* int CMagicInf::Set            - 2 arg - CMagicInf::Set(2 arg) - 004AA080 */
    int    CMagicInf2::Set(int aSkill, BYTE aLevel) // # DONE
    {
        if(this->m_Skill != 0xFF)
        {
            return -1;
        }
        // ----
        this->m_Skill        = aSkill;
        this->m_Level        = aLevel;
        // ----
        int damage            = MagicDamageC.SkillGet(this->m_Skill);
        // ----
        this->m_DamageMin    = damage;
        this->m_DamageMax    = (damage / 2) + damage;
        // ----
        return this->m_Skill;
    }
    // ------------------------------------------------------------------------------------------------------------
    
    /* new function                - 2 arg, return    int                - 004AA110 */
    int    CMagicInf2::SetMasterSkill(int aSkill, BYTE aLevel) // # DONE
    {
        if(this->m_Skill != 0xFF)
        {
            // log "[MasterSkill] [ERROR!!] Fail - Update Master Skill:%d, Level:%d",
            // ----
            return -1;
        }
        // ----
        this->m_Skill        = aSkill;
        this->m_Level        = aLevel;
        // ----
        int damage            = MagicDamageC.SkillGet(this->m_Skill);
        // ----
        this->m_DamageMin    = damage;
        this->m_DamageMax    = (damage / 2) + damage;
        // ----
        return this->m_Skill;
    }
    // ------------------------------------------------------------------------------------------------------------
    There are 2 more functions compiled in that file but they are not part of the CMagicInf class. If you need them I will decompile them as well. All functions are 1:1 except var names and maybe some data types.

  12. #2112
    Everything is a joke. duracel is offline
    MemberRank
    Sep 2005 Join Date
    442Posts

    Re: GameServer 1.00.90

    You make me dizzy with all those comments , ShadowKing.

  13. #2113
    Valued Member Marin_scp is offline
    MemberRank
    Mar 2006 Join Date
    Inside EAXLocation
    103Posts

    Re: GameServer 1.00.90

    dude, stop asking about gens pvp map, 1.00.90 doesn't support Gens System or anything like it, if you use Zemattana Crappy GameServer, you'll have to look upon it for yourself.

    1.00.90 GameServer doesn't even support Vulcanus Map or NewPVP system. So stop asking for it.

  14. #2114
    Proficient Member xom1b is offline
    MemberRank
    Aug 2006 Join Date
    VietnamLocation
    197Posts

    Re: GameServer 1.00.90

    who can share decompilation of PC Bang Point System :D, thanks

  15. #2115
    Apprentice JoaoNetoADM is offline
    MemberRank
    Jan 2012 Join Date
    16Posts

    Re: GameServer 1.00.90

    Hello ,
    I need help with the socket system for new items added.

    Thank you in advance!

  16. #2116
    Proficient Member caothuphutho is offline
    MemberRank
    Dec 2007 Join Date
    0x00000000Location
    150Posts

    Re: GameServer 1.00.90

    Hi all.
    who can share fix 3rd class zen drop ?

  17. #2117
    Apprentice aureliomarcio is offline
    MemberRank
    Aug 2011 Join Date
    IGC Fan!Location
    23Posts

    Re: [Dev] GameServer 1.00.90

    How to get source?

  18. #2118
    Member MaThreeX is offline
    MemberRank
    May 2012 Join Date
    Czech RepublicLocation
    58Posts

    Re: GameServer 1.00.90

    Who can share GMO Login Protocol. We've just finished connect. But have some troubles with login. 1.03B client Season 5.4

  19. #2119
    CAARL, THAT KILLS PEOPLE! SmallHabit is offline
    MemberRank
    Oct 2010 Join Date
    LatviaLocation
    231Posts

    Re: GameServer 1.00.90

    struct PMSG_IDPASS
    {
    PBMSG_HEAD h;
    BYTE subcode; // 3
    char Id[10]; // 4
    char Pass[20]; // E // 20 for GMO
    DWORD TickCount; // 18
    BYTE CliVersion[5]; // 1C
    BYTE CliSerial[16]; // 21
    };
    Here you go. =)

  20. #2120
    Member MaThreeX is offline
    MemberRank
    May 2012 Join Date
    Czech RepublicLocation
    58Posts

    Re: GameServer 1.00.90

    useless
    Last edited by MaThreeX; 13-08-12 at 11:21 AM.

  21. #2121
    Apprentice GVeigaS is offline
    MemberRank
    Jul 2012 Join Date
    Rio de Janeiro,Location
    15Posts

    Re: GameServer 1.00.90

    someone who has disassembled the gameserver .90 could release CBuffManager :: InsertEffect (First function. cpp)

  22. #2122
    CAARL, THAT KILLS PEOPLE! SmallHabit is offline
    MemberRank
    Oct 2010 Join Date
    LatviaLocation
    231Posts

    Re: GameServer 1.00.90

    BOOL CBuffManager::InsertEffect(LPOBJ lpObj, int iEffectIndex, BYTE btEffectType1, BYTE btEffectType2, int iValue1, int iValue2, int iDuration) //0063ECE0
    {
    LPBUFF_EFFECT_DATA pEffectIndex = 0; //loc2
    LPBUFF_EFFECT_DATA pEffectIndex2 = 0; //loc3

    int loc4 = 0;
    int loc5 = 0;
    int loc6 = 0;

    if(lpObj == NULL)
    {
    return -1;
    }

    if(lpObj->Connected < PLAYER_PLAYING)
    {
    return -1;
    }

    if(g_BuffEffect.IsValidIndex(iEffectIndex) == FALSE)
    {
    return -1;
    }

    pEffectIndex = g_BuffEffect.GetBuffData(iEffectIndex);

    if(pEffectIndex == NULL)
    {
    return -1;
    }

    for(int i = 0; i < MAX_STATE_COUNT; i++)
    {
    if( lpObj->m_BuffEffectState[i].btBuffIndex != NULL )
    {
    pEffectIndex2 = g_BuffEffect.GetBuffData(lpObj->m_BuffEffectState[i].btBuffIndex);

    if(pEffectIndex2 == NULL) //season4 add-on (wz fix)
    {
    continue;
    }

    if(pEffectIndex2->btViewPortIndex == pEffectIndex->btViewPortIndex )
    {
    this->ClearEffect(lpObj,lpObj->m_BuffEffectState[i].btBuffIndex);
    loc6 = pEffectIndex2->btIndex;
    }

    if(pEffectIndex2->btType == 0)
    {
    loc4 +=1;
    }
    else if(pEffectIndex2->btType == 1)
    {
    loc5 += 1;
    }

    if(i > lpObj->m_btViewStateCount)
    {
    break;
    }
    }
    }

    for( i = 0; i < MAX_STATE_COUNT; i++)
    {
    if(lpObj->m_BuffEffectState[i].btBuffIndex == NULL)
    {
    lpObj->m_BuffEffectState[i].btBuffIndex = iEffectIndex;
    lpObj->m_BuffEffectState[i].btVpIndex = pEffectIndex->btViewPortIndex;
    lpObj->m_BuffEffectState[i].btEffectType1 = btEffectType1;
    lpObj->m_BuffEffectState[i].btEffectType2 = btEffectType2;
    lpObj->m_BuffEffectState[i].iValue1 = iValue1;
    lpObj->m_BuffEffectState[i].iValue2 = iValue2;
    lpObj->m_BuffEffectState[i].iDuration = iDuration;
    lpObj->m_BuffEffectState[i].dwBuffTickCount = GetTickCount();

    g_ViewportSkillState.AddBuffEffect(lpObj,btEffectType1,iValue1); //first
    g_ViewportSkillState.AddBuffEffect(lpObj,btEffectType2,iValue2); //second
    break;
    }
    }

    return loc6;
    }
    Here you go, I hope it will help.

  23. #2123
    Apprentice GVeigaS is offline
    MemberRank
    Jul 2012 Join Date
    Rio de Janeiro,Location
    15Posts

    Re: GameServer 1.00.90

    someone still has DataServer 0.70.04?

  24. #2124
    Valued Member flintzin is offline
    MemberRank
    Apr 2007 Join Date
    120Posts

    Re: GameServer 1.00.90

    Quote Originally Posted by GVeigaS View Post
    someone still has DataServer 0.70.04?
    Download Dataserver.rar from Sendspace.com - send big files the easy way

  25. #2125
    Apprentice GVeigaS is offline
    MemberRank
    Jul 2012 Join Date
    Rio de Janeiro,Location
    15Posts

    Re: GameServer 1.00.90

    thx small and flitzin, function void DbItemSetInByte (...), there is a new socket system call, which is just below it:


    if(ItemDbByte >= 16)
    {
    item.m_ItemOptionEx = DBI_GET_380OPTION(lpMsg->dbInventory[n*ItemDbByte+DBI_OPTION380_DATA]);

    if(item.m_ItemOptionEx)
    {
    item.m_Type = itype;

    if(g_kItemSystemFor380.Is380Item(&item)==false)
    {
    item.m_ItemOptionEx = 0;
    LogAddTD("[380Item][%s][%s] Invalid 380 Item Option in Inventory pos[%d]",
    lpObj->AccountID,lpObj->Name,n);
    }
    }
    }


    could someone post this source?



Advertisement