Jump to content

Jorila

Inactive Member
  • Posts

    58
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by Jorila

  1. Am 24.2.2016 um 17:04 schrieb Motumbo:

    To me its working correctly,

    but i need to know how to do :

    ----> capability to ban a player even if he is offline, (if i try to do that, it tells me  "is not playing"

    -----> add a notice all message after i ban someone with name player ban reason  (like the phrase for syslog) - like /n (GM-Message) message

    Same, can someone help?

    I know, its an old thread. Excuse me.

  2. On 18.12.2016 at 4:26 PM, Chyumgo said:

    In cmd_emotion.cpp:

    Find list emotion_types[] and change this:

    
    { "키스",	"french_kiss",	NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		2.0f },
    { "뽀뽀",	"kiss",		NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		1.5f },

    To this:

    
    { "키스",	"french_kiss",	NEED_PC | BOTH_DISARM,		2.0f },
    { "뽀뽀",	"kiss",		NEED_PC | BOTH_DISARM,		1.5f },

     

    Please, be aware of that, animations are made separately for each interaction.
    So if you want to have it brilliat, you need to make new animations for kissing female with female (sura - ninja, warrior - shaman etc.) and male with male too.

    Thanks! How can i add a Male/Male Female/Female Wedding?

  3. Hello,

    someone know about the old change-bug with 1-5 bonus by equip-item

    i already fix 1-5 bonus, but how can i fix 6/7 bonus adder/changer? with this fix is 6/7 not fixed.

    thank you. :)

     

    question2: limittype8 or 9 (i dont know anymore) give the item a time-value. the time is running only when the item is equip like EXP-Ring, thieves gloves, costume, costume-mount, dragon-soul etc.

    how can i add the limittype8 function for items like pet/mounts = (type18/questitem)?

    question3: Zauber_aufheben.png how can i add +-10 lvl for the skill-function. example: sura lvl 15 cannot debuff a user with lvl 100

     

    thank you very much. :)

  4. Spoiler

    #include "StdAfx.h"
    #include "PythonNetworkStream.h"
    #include "PythonNonPlayer.h"
    #include "AbstractApplication.h"
    #include "AbstractPlayer.h"
    #include "AbstractCharacterManager.h"
    #include "AbstractChat.h"
    #include "InstanceBase.h"

    #define ishan(ch)        (((ch) & 0xE0) > 0x90)
    #define ishanasc(ch)    (isascii(ch) || ishan(ch))
    #define ishanalp(ch)    (isalpha(ch) || ishan(ch))
    #define isnhdigit(ch)    (!ishan(ch) && isdigit(ch))
    #define isnhspace(ch)    (!ishan(ch) && isspace(ch))

    #define LOWER(c)        (((c) >= 'A' && (c) <= 'Z') ? ((c) + ('a' - 'A')) : (c))
    #define UPPER(c)        (((c) >= 'a' && (c) <= 'z') ? ((c) + ('A' - 'a')) : (c))

    void SkipSpaces(char **string)
    {
        for (; **string != '\0' && isnhspace((unsigned char) **string); ++(*string));
    }

    char *OneArgument(char *argument, char *first_arg)
    {
        char mark = FALSE;

        if (!argument)
        {
            *first_arg = '\0';
            return NULL;
        }

        SkipSpaces(&argument);

        while (*argument)
        {
            if (*argument == '\"')
            {
                mark = !mark;
                ++argument;
                continue;
            }

            if (!mark && isnhspace((unsigned char) *argument))
                break;

            *(first_arg++) = LOWER(*argument);
            ++argument;
        }

        *first_arg = '\0';

        SkipSpaces(&argument);
        return (argument);
    }

    void AppendMonsterList(const CPythonNonPlayer::TMobTableList & c_rMobTableList, const char * c_szHeader, int iType)
    {
        DWORD dwMonsterCount = 0;
        std::string strMonsterList = c_szHeader;

        CPythonNonPlayer::TMobTableList::const_iterator itor = c_rMobTableList.begin();
        for (; itor!=c_rMobTableList.end(); ++itor)
        {
            const CPythonNonPlayer::TMobTable * c_pMobTable = *itor;
            if (iType == c_pMobTable->bRank)
            {
                if (dwMonsterCount != 0)
                    strMonsterList += ", ";
                strMonsterList += c_pMobTable->szLocaleName;
                if (++dwMonsterCount > 5)
                    break;
            }
        }
        if (dwMonsterCount > 0)
        {
            IAbstractChat& rkChat=IAbstractChat::GetSingleton();
            rkChat.AppendChat(CHAT_TYPE_INFO, strMonsterList.c_str());
        }
    }

    bool CPythonNetworkStream::ClientCommand(const char * c_szCommand)
    {
        return false;
    }

    bool SplitToken(const char * c_szLine, CTokenVector * pstTokenVector, const char * c_szDelimeter = " ")
    {
        pstTokenVector->reserve(10);
        pstTokenVector->clear();

        std::string stToken;
        std::string strLine = c_szLine;

        DWORD basePos = 0;

        do
        {
            int beginPos = strLine.find_first_not_of(c_szDelimeter, basePos);
            if (beginPos < 0)
                return false;

            int endPos;

            if (strLine[beginPos] == '"')
            {
                ++beginPos;
                endPos = strLine.find_first_of("\"", beginPos);

                if (endPos < 0)
                    return false;
                
                basePos = endPos + 1;
            }
            else
            {
                endPos = strLine.find_first_of(c_szDelimeter, beginPos);
                basePos = endPos;
            }

            pstTokenVector->push_back(strLine.substr(beginPos, endPos - beginPos));

            // Ãß°¡ ÄÚµå. ¸ÇµÚ¿¡ ÅÇÀÌ ÀÖ´Â °æ¿ì¸¦ üũÇÑ´Ù. - [levites]
            if (int(strLine.find_first_not_of(c_szDelimeter, basePos)) < 0)
                break;
        } while (basePos < strLine.length());

        return true;
    }

    void CPythonNetworkStream::ServerCommand(char * c_szCommand)
    {
        // #0000811: [M2EU] ÄܼÖâ ±â´É Â÷´Ü 
        if (strcmpi(c_szCommand, "ConsoleEnable") == 0)
            return;

        if (m_apoPhaseWnd[PHASE_WINDOW_GAME])
        {
            bool isTrue;
            if (PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], 
                "BINARY_ServerCommand_Run", 
                Py_BuildValue("(s)", c_szCommand),
                &isTrue
            ))
            {
                if (isTrue)
                    return;
            }
        }
        else if (m_poSerCommandParserWnd)
        {
            bool isTrue;
            if (PyCallClassMemberFunc(m_poSerCommandParserWnd, 
                "BINARY_ServerCommand_Run", 
                Py_BuildValue("(s)", c_szCommand),
                &isTrue
            ))
            {
                if (isTrue)
                    return;
            }
        }

        CTokenVector TokenVector;
        if (!SplitToken(c_szCommand, &TokenVector))
            return;
        if (TokenVector.empty())
            return;

        const char * szCmd = TokenVector[0].c_str();
        
        if (!strcmpi(szCmd, "quit"))
        {
            PostQuitMessage(0);
        }
        else if (!strcmpi(szCmd, "BettingMoney"))
        {
            if (2 != TokenVector.size())
            {
                TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
                return;
            }

            //UINT uMoney= atoi(TokenVector[1].c_str());        
            
        }
        // GIFT NOTIFY
        else if (!strcmpi(szCmd, "gift"))
        {
            PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "Gift_Show", Py_BuildValue("()"));     
        }
        // CUBE
        else if (!strcmpi(szCmd, "cube"))
        {
            if (TokenVector.size() < 2)
            {
                TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
                return;
            }

            if ("open" == TokenVector[1])
            {
                if (3 > TokenVector.size())
                {
                    TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
                    return;
                }

                DWORD npcVNUM = (DWORD)atoi(TokenVector[2].c_str());
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Cube_Open", Py_BuildValue("(i)", npcVNUM));
            }
            else if ("close" == TokenVector[1])
            {
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Cube_Close", Py_BuildValue("()"));
            }
            else if ("info" == TokenVector[1])
            {
                if (5 != TokenVector.size())
                {
                    TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
                    return;
                }

                UINT gold = atoi(TokenVector[2].c_str());
                UINT itemVnum = atoi(TokenVector[3].c_str());
                UINT count = atoi(TokenVector[4].c_str());
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Cube_UpdateInfo", Py_BuildValue("(iii)", gold, itemVnum, count));
            }
            else if ("success" == TokenVector[1])
            {
                if (4 != TokenVector.size())
                {
                    TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
                    return;
                }

                UINT itemVnum = atoi(TokenVector[2].c_str());
                UINT count = atoi(TokenVector[3].c_str());
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Cube_Succeed", Py_BuildValue("(ii)", itemVnum, count));
            }
            else if ("fail" == TokenVector[1])
            {
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Cube_Failed", Py_BuildValue("()"));
            }
            //else if ("r_list" == TokenVector[1])
            //{
                //result list (/cube r_list npcVNUM resultCount resultText)
                //20383 4 72723,1/72725,1/72730.1/50001,5 <- ÀÌ·±½ÄÀ¸·Î "/" ¹®ÀÚ·Î ±¸ºÐµÈ ¸®½ºÆ®¸¦ ÁÜ
                //if (5 != TokenVector.size())
                //{
                    //TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %d", c_szCommand, 5);
                    //return;
                //}

                //DWORD npcVNUM = (DWORD)atoi(TokenVector[2].c_str());

                //PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Cube_ResultList", Py_BuildValue("(is)", npcVNUM, TokenVector[4].c_str()));
            //}
            else if ("m_info" == TokenVector[1])
            {
                // material list (/cube m_info requestStartIndex resultCount MaterialText)
                // ex) requestStartIndex: 0, resultCount : 5 - ÇØ´ç NPC°¡ ¸¸µé¼ö ÀÖ´Â ¾ÆÀÌÅÛ Áß 0~4¹ø°¿¡ ÇØ´çÇÏ´Â ¾ÆÀÌÅÛÀ» ¸¸µå´Â µ¥ ÇÊ¿äÇÑ ¸ðµç Àç·áµéÀÌ MaterialText¿¡ µé¾îÀÖÀ½
                // À§ ¿¹½Ãó·³ ¾ÆÀÌÅÛÀÌ ´Ù¼öÀÎ °æ¿ì ±¸ºÐÀÚ "@" ¹®ÀÚ¸¦ »ç¿ë
                // 0 5 125,1|126,2|127,2|123,5&555,5&555,4/120000 <- ÀÌ·±½ÄÀ¸·Î ¼­¹ö¿¡¼­ Ŭ¶ó·Î ¸®½ºÆ®¸¦ ÁÜ

                if (5 != TokenVector.size())
                {
                    TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %d", c_szCommand, 5);
                    return;
                }

                UINT requestStartIndex = (UINT)atoi(TokenVector[2].c_str());
                UINT resultCount = (UINT)atoi(TokenVector[3].c_str());

                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Cube_MaterialInfo", Py_BuildValue("(iis)", requestStartIndex, resultCount, TokenVector[4].c_str()));
            }
        }
        // CUEBE_END
        else if (!strcmpi(szCmd, "ObserverCount"))
        {
            if (2 != TokenVector.size())
            {
                TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
                return;
            }

            UINT uObserverCount= atoi(TokenVector[1].c_str());                

            PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], 
                "BINARY_BettingGuildWar_UpdateObserverCount", 
                Py_BuildValue("(i)", uObserverCount)
            );
        }
        else if (!strcmpi(szCmd, "ObserverMode"))
        {        
            if (2 != TokenVector.size())
            {
                TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
                return;
            }

            UINT uMode= atoi(TokenVector[1].c_str());
            
            IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
            rkPlayer.SetObserverMode(uMode ? true : false);

            PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], 
                "BINARY_BettingGuildWar_SetObserverMode", 
                Py_BuildValue("(i)", uMode)
            );
        }
        else if (!strcmpi(szCmd, "ObserverTeamInfo"))
        {        
        }
        else if (!strcmpi(szCmd, "StoneDetect"))
        {
            if (4 != TokenVector.size())
            {
                TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
                return;
            }

            // vid distance(1-3) angle(0-360)
            DWORD dwVID = atoi(TokenVector[1].c_str());
            BYTE byDistance = atoi(TokenVector[2].c_str());
            float fAngle = atof(TokenVector[3].c_str());
            fAngle = fmod(540.0f - fAngle, 360.0f);
            Tracef("StoneDetect [VID:%d] [Distance:%d] [Angle:%d->%f]\n", dwVID, byDistance, atoi(TokenVector[3].c_str()), fAngle);

            IAbstractCharacterManager& rkChrMgr=IAbstractCharacterManager::GetSingleton();

            CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(dwVID);
            if (!pInstance)
            {
                TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Not Exist Instance", c_szCommand);
                return;
            }

            TPixelPosition PixelPosition;
            D3DXVECTOR3 v3Rotation(0.0f, 0.0f, fAngle);
            pInstance->NEW_GetPixelPosition(&PixelPosition);

            PixelPosition.y *= -1.0f;

            switch (byDistance)
            {
                case 0:
                    CEffectManager::Instance().RegisterEffect("d:/ymir work/effect/etc/firecracker/find_out.mse");
                    CEffectManager::Instance().CreateEffect("d:/ymir work/effect/etc/firecracker/find_out.mse", PixelPosition, v3Rotation);
                    break;
                case 1:
                    CEffectManager::Instance().RegisterEffect("d:/ymir work/effect/etc/compass/appear_small.mse");
                    CEffectManager::Instance().CreateEffect("d:/ymir work/effect/etc/compass/appear_small.mse", PixelPosition, v3Rotation);
                    break;
                case 2:
                    CEffectManager::Instance().RegisterEffect("d:/ymir work/effect/etc/compass/appear_middle.mse");
                    CEffectManager::Instance().CreateEffect("d:/ymir work/effect/etc/compass/appear_middle.mse", PixelPosition, v3Rotation);
                    break;
                case 3:
                    CEffectManager::Instance().RegisterEffect("d:/ymir work/effect/etc/compass/appear_large.mse");
                    CEffectManager::Instance().CreateEffect("d:/ymir work/effect/etc/compass/appear_large.mse", PixelPosition, v3Rotation);
                    break;
                default:
                    TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Distance", c_szCommand);
                    break;
            }

    #ifdef _DEBUG
            IAbstractChat& rkChat=IAbstractChat::GetSingleton();
            rkChat.AppendChat(CHAT_TYPE_INFO, c_szCommand);
    #endif
        }
        else if (!strcmpi(szCmd, "StartStaminaConsume"))
        {
            if (3 != TokenVector.size())
            {
                TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
                return;
            }

            DWORD dwConsumePerSec = atoi(TokenVector[1].c_str());
            DWORD dwCurrentStamina = atoi(TokenVector[2].c_str());

            IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
            rPlayer.StartStaminaConsume(dwConsumePerSec, dwCurrentStamina);
        }
        
        else if (!strcmpi(szCmd, "StopStaminaConsume"))
        {
            if (2 != TokenVector.size())
            {
                TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %d", c_szCommand, TokenVector.size());
                return;
            }

            DWORD dwCurrentStamina = atoi(TokenVector[1].c_str());

            IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
            rPlayer.StopStaminaConsume(dwCurrentStamina);
        }
        else if (!strcmpi(szCmd, "sms"))
        {
            IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
            rPlayer.SetMobileFlag(TRUE);
        }
        else if (!strcmpi(szCmd, "nosms"))
        {
            IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
            rPlayer.SetMobileFlag(FALSE);
        }
        else if (!strcmpi(szCmd, "mobile_auth"))
        {
            PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnMobileAuthority", Py_BuildValue("()"));
        }
        else if (!strcmpi(szCmd, "messenger_auth"))
        {
            const std::string & c_rstrName = TokenVector[1].c_str();
            PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnMessengerAddFriendQuestion", Py_BuildValue("(s)", c_rstrName.c_str()));
        }
        else if (!strcmpi(szCmd, "combo"))
        {
            int iFlag = atoi(TokenVector[1].c_str());
            IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
            rPlayer.SetComboSkillFlag(iFlag);
            m_bComboSkillFlag = iFlag ? true : false;
        }
        else if (!strcmpi(szCmd, "setblockmode"))
        {
            int iFlag = atoi(TokenVector[1].c_str());
            PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnBlockMode", Py_BuildValue("(i)", iFlag));
        }
        // Emotion Start
        else if (!strcmpi(szCmd, "french_kiss"))
        {
            int iVID1 = atoi(TokenVector[1].c_str());
            int iVID2 = atoi(TokenVector[2].c_str());

            IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
            CInstanceBase * pInstance1 = rkChrMgr.GetInstancePtr(iVID1);
            CInstanceBase * pInstance2 = rkChrMgr.GetInstancePtr(iVID2);
            if (pInstance1 && pInstance2)
                pInstance1->ActDualEmotion(*pInstance2, CRaceMotionData::NAME_FRENCH_KISS_START, CRaceMotionData::NAME_FRENCH_KISS_START);
        }
        else if (!strcmpi(szCmd, "kiss"))
        {
            int iVID1 = atoi(TokenVector[1].c_str());
            int iVID2 = atoi(TokenVector[2].c_str());

            IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
            CInstanceBase * pInstance1 = rkChrMgr.GetInstancePtr(iVID1);
            CInstanceBase * pInstance2 = rkChrMgr.GetInstancePtr(iVID2);
            if (pInstance1 && pInstance2)
                pInstance1->ActDualEmotion(*pInstance2, CRaceMotionData::NAME_KISS_START, CRaceMotionData::NAME_KISS_START);
        }
        else if (!strcmpi(szCmd, "slap"))
        {
            int iVID1 = atoi(TokenVector[1].c_str());
            int iVID2 = atoi(TokenVector[2].c_str());

            IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
            CInstanceBase * pInstance1 = rkChrMgr.GetInstancePtr(iVID1);
            CInstanceBase * pInstance2 = rkChrMgr.GetInstancePtr(iVID2);
            if (pInstance1 && pInstance2)
                pInstance1->ActDualEmotion(*pInstance2, CRaceMotionData::NAME_SLAP_HURT_START, CRaceMotionData::NAME_SLAP_HIT_START);
        }
        else if (!strcmpi(szCmd, "clap"))
        {
            int iVID = atoi(TokenVector[1].c_str());
            IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
            CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(iVID);
            if (pInstance)
                pInstance->ActEmotion(CRaceMotionData::NAME_CLAP);
        }
        else if (!strcmpi(szCmd, "cheer1"))
        {
            int iVID = atoi(TokenVector[1].c_str());
            IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
            CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(iVID);
            if (pInstance)
                pInstance->ActEmotion(CRaceMotionData::NAME_CHEERS_1);
        }
        else if (!strcmpi(szCmd, "cheer2"))
        {
            int iVID = atoi(TokenVector[1].c_str());
            IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
            CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(iVID);
            if (pInstance)
                pInstance->ActEmotion(CRaceMotionData::NAME_CHEERS_2);
        }
        else if (!strcmpi(szCmd, "dance1"))
        {
            int iVID = atoi(TokenVector[1].c_str());
            IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
            CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(iVID);
            if (pInstance)
                pInstance->ActEmotion(CRaceMotionData::NAME_DANCE_1);
        }
        else if (!strcmpi(szCmd, "dance2"))
        {
            int iVID = atoi(TokenVector[1].c_str());
            IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
            CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(iVID);
            if (pInstance)
                pInstance->ActEmotion(CRaceMotionData::NAME_DANCE_2);
        }
        else if (!strcmpi(szCmd, "dig_motion"))
        {
            int iVID = atoi(TokenVector[1].c_str());
            IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
            CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(iVID);
            if (pInstance)
                pInstance->ActEmotion(CRaceMotionData::NAME_DIG);
        }
        // Emotion End
        else
        {
            static std::map<std::string, int> s_emotionDict;

            static bool s_isFirst = true;
            if (s_isFirst)
            {
                s_isFirst = false;

                s_emotionDict["dance3"] = CRaceMotionData::NAME_DANCE_3;
                s_emotionDict["dance4"] = CRaceMotionData::NAME_DANCE_4;
                s_emotionDict["dance5"] = CRaceMotionData::NAME_DANCE_5;
                s_emotionDict["dance6"] = CRaceMotionData::NAME_DANCE_6;
                s_emotionDict["congratulation"] = CRaceMotionData::NAME_CONGRATULATION;
                s_emotionDict["forgive"] = CRaceMotionData::NAME_FORGIVE;
                s_emotionDict["angry"] = CRaceMotionData::NAME_ANGRY;
                s_emotionDict["attractive"] = CRaceMotionData::NAME_ATTRACTIVE;
                s_emotionDict["sad"] = CRaceMotionData::NAME_SAD;
                s_emotionDict["shy"] = CRaceMotionData::NAME_SHY;
                s_emotionDict["cheerup"] = CRaceMotionData::NAME_CHEERUP;
                s_emotionDict["banter"] = CRaceMotionData::NAME_BANTER;
                s_emotionDict["joy"] = CRaceMotionData::NAME_JOY;
            }

            std::map<std::string, int>::iterator f = s_emotionDict.find(szCmd);
            if (f == s_emotionDict.end())
            {
                TraceError("Unknown Server Command %s | %s", c_szCommand, szCmd);
            }
            else
            {
                int emotionIndex = f->second;

                int iVID = atoi(TokenVector[1].c_str());
                IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
                CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(iVID);

                if (pInstance)
                    pInstance->ActEmotion(emotionIndex);
            }        
        }
    }

    @Grimmjow

×
×
  • 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.