Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

[SHARE] SIMPLE KILL FEED STYLING [SOURCE CODE]

Joined
May 2, 2012
Messages
475
Reaction score
244
i have updated the .rar file as of 3:22AM GMT +8
I CANNOT ASSIST YOU ON ADDING THIS FEATURE ON YOUR SOURCE. ADD THIS AT YOUR OWN RISK!!! YOU MUST HAVE ATLEAST BASIC KNOWLEDGE ON WRTING C++
Reference :

s_NetGlobal.h
add this

// KILL FEED
NET_MSG_GCTRL_KILLFEED_SELECT_REQ = (NET_MSG_GCTRL + 3146), // <<< change 3146 to yours
NET_MSG_GCTRL_KILLFEED_FB = (NET_MSG_GCTRL + 3147), // <<<< change 3147 to yours
PKRankData.h
find SPK_HISTORY
add this as new member of the struct

BYTE cKF_KILLER;
find SPK_HISTORY()
add this

, cKF_KILLER ( 0 )
it will look like this
spk_history - [SHARE] SIMPLE KILL FEED STYLING [SOURCE CODE] - RaGEZONE Forums


GLContrlPcMsg.h
add this

// KILL FEED
enum EMKILL_FEED_SELECT_FB
{
EMKILL_FEED_SELECT_OK = 0, // feed back ok
EMKILL_FEED_SELECT_FAIL = 1, // feed back failed
EMKILL_FEED_SELECT_NOITEM = 2, // feed back no item probably no card
EMKILL_FEED_SELECT_NOTITEM = 3, // feed back not item kill feed card
EMKILL_FEED_SELECT_ALREADY = 4, // feed same kill feed style
EMKILL_FEED_SELECT_REQUIRE = 5, // card prerequisite problem ( ex. not enough level )
};
at the end of the file just before " }; "
add this

// KILL FEED
struct SNET_KILLFEED_SELECT_REQ : public NET_MSG_GENERIC
{
BYTE cIndex;
unsigned int m_Crc32; // ÆÐŶÁ¶ÀÛ ¶§¹®¿¡ CRC32 »ðÀÔ
SNET_KILLFEED_SELECT_REQ ()
: cIndex (-1)
, m_Crc32(0)
{
dwSize = sizeof(SNET_KILLFEED_SELECT_REQ);
nType = NET_MSG_GCTRL_KILLFEED_SELECT_REQ;
GASSERT( sizeof( SNET_KILLFEED_SELECT_REQ ) <= NET_DATA_BUFSIZE );
}
};

// KILL FEED
struct SNET_KILLFEED_SELECT_FB : public NET_MSG_GENERIC
{
EMKILL_FEED_SELECT_FB emFB;
BYTE cIndex;
SNET_KILLFEED_SELECT_FB ()
: emFB(EMKILL_FEED_SELECT_FAIL)
{
dwSize = sizeof(SNET_KILLFEED_SELECT_FB);
nType = NET_MSG_GCTRL_KILLFEED_FB;
GASSERT( sizeof( SNET_KILLFEED_SELECT_FB ) <= NET_DATA_BUFSIZE );
}
};
DxGlobalStage.cpp
add this

// KILL FEED
case NET_MSG_GCTRL_KILLFEED_FB:
just before
{
GLGaeaClient::GetInstance().MsgProcess ( nmg );
}
break;
GLGaeaClient.cpp
// KILL FEED
case NET_MSG_GCTRL_KILLFEED_FB:
just before
{
m_Character.MsgProcess ( nmg );
}
break;
GLCharacterMsg.cpp
void GLCharacter::MsgProcess ( NET_MSG_GENERIC* nmg ) // <<< find this
{
switch ( nmg->nType )
{
// add this
// KILL FEED
case NET_MSG_GCTRL_KILLFEED_FB:
{
GLMSG::SNET_KILLFEED_SELECT_FB* pNetMsg = ( GLMSG::SNET_KILLFEED_SELECT_FB* ) nmg;
switch ( pNetMsg->emFB )
{
case EMKILL_FEED_SELECT_ALREADY:
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::FORESTGREEN, ID2GAMEINTEXT("EMKILL_FEED_SELECT_ALREADY") );
break;
case EMKILL_FEED_SELECT_OK:
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::FORESTGREEN, ID2GAMEINTEXT("EMKILL_FEED_SELECT_OK") );
CInnerInterface::GetInstance().HideGroup( STYLE_KILL_FEED_WINDOW );
break;
case EMKILL_FEED_SELECT_NOITEM:
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::FORESTGREEN, ID2GAMEINTEXT("EMKILL_FEED_SELECT_NOITEM") );
break;
case EMKILL_FEED_SELECT_NOTITEM:
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::FORESTGREEN, ID2GAMEINTEXT("EMKILL_FEED_SELECT_NOTITEM") );
break;
case EMKILL_FEED_SELECT_REQUIRE:
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::FORESTGREEN, ID2GAMEINTEXT("EMKILL_FEED_SELECT_REQUIRE") );
break;
}
}
break;
GLGaeaServerMsg.cpp
// KILL FEED
case NET_MSG_GCTRL_KILLFEED_SELECT_REQ: /// <<<<< add this
{
if ( dwGaeaID == GAEAID_NULL ) return E_FAIL;

PGLCHAR pChar = GetChar ( dwGaeaID );
if ( !pChar ) return S_FALSE;
pChar->MsgProcess ( nmg ); // <<<<< find this
}
break;
GLCharMsg.cpp
Kill Feed - [SHARE] SIMPLE KILL FEED STYLING [SOURCE CODE] - RaGEZONE Forums

also add new method in GLCharMsg.cpp

// KILL FEED
HRESULT GLChar::MsgReqKillFeedSelect(NET_MSG_GENERIC* nmg)
{
GLMSG::SNET_KILLFEED_SELECT_REQ* pNetMsg = ( GLMSG::SNET_KILLFEED_SELECT_REQ* ) nmg;
GLMSG::SNET_KILLFEED_SELECT_FB NetMsgFB;

if ( !IsValidBody() )
return TRUE;

SINVENITEM* pInvenItem = m_cInventory.FindItem ( ITEM_KILL_FEED_SELECTOR );
if (!pInvenItem)
{
NetMsgFB.emFB = EMKILL_FEED_SELECT_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, (NET_MSG_GENERIC*) &NetMsgFB );
return TRUE;
}

if ( CheckCoolTime( pInvenItem->sItemCustom.GetNativeID() ) )
return TRUE;

const SITEM* pItem = GLItemMan::GetInstance().GetItem( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
NetMsgFB.emFB = EMKILL_FEED_SELECT_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, (NET_MSG_GENERIC*) &NetMsgFB );
return TRUE;
}

if ( pItem->sBasicOp.emItemType != ITEM_KILL_FEED_SELECTOR )
{
NetMsgFB.emFB = EMKILL_FEED_SELECT_NOTITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, (NET_MSG_GENERIC*) &NetMsgFB );
return TRUE;
}

// Note : ·¹º§ Á¶°Ç È®ÀÎ
//
if ( !SIMPLE_CHECK_ITEM( pInvenItem->sItemCustom.sNativeID ) )
{
NetMsgFB.emFB = EMKILL_FEED_SELECT_REQUIRE;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, (NET_MSG_GENERIC*) &NetMsgFB );
return TRUE;
}

if ( pNetMsg->cIndex < 0 || pNetMsg->cIndex > 6 )
{
NetMsgFB.emFB = EMKILL_FEED_SELECT_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, (NET_MSG_GENERIC*) &NetMsgFB );
return TRUE;
}

if ( DoDrugInvenItem( pInvenItem->wPosX, pInvenItem->wPosY ) )
{
m_nKILLFEEDSELECTOR = pNetMsg->cIndex;
NetMsgFB.emFB = EMKILL_FEED_SELECT_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, (NET_MSG_GENERIC*) &NetMsgFB );
}
else
{
NetMsgFB.emFB = EMKILL_FEED_SELECT_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, (NET_MSG_GENERIC*) &NetMsgFB );
return TRUE;
}

return S_OK;
}
GLChar.h
declare this

HRESULT MsgReqKillFeedSelect ( NET_MSG_GENERIC* nmg );
InnerInterface.h
add and declare

class CKillFeedSelectorWindow;

CKillFeedSelectorWindow* m_pKillFeedStyleSelector;
InnerInterface.cpp
find ResetControl() add this

m_pKillFeedStyleSelector = NULL;
InnerInterfaceSimple.cpp
add this

{
m_pKillFeedStyleSelector = new CKillFeedSelectorWindow (&GLGaeaClient::GetInstance(), this );
m_pKillFeedStyleSelector->Create ( STYLE_KILL_FEED_WINDOW, "BASIC_WINDOW", UI_FLAG_XSIZE | UI_FLAG_YSIZE );
m_pKillFeedStyleSelector->CreateBaseWindowBlack( "STYLE_KILL_FEED_WINDOW", "Kill Feed Styling" );
m_pKillFeedStyleSelector->CreateSubControl ();
m_pKillFeedStyleSelector->SetAlignFlag ( UI_FLAG_CENTER_Y | UI_FLAG_CENTER_X );
RegisterControl ( m_pKillFeedStyleSelector);
ShowGroupFocus ( STYLE_KILL_FEED_WINDOW );
HideGroup ( STYLE_KILL_FEED_WINDOW );
}
InnerInterfaceGuid.h
add this

STYLE_KILL_FEED_WINDOW,
GLCharData.h
add new member on SCHARDATA()
//KILL FEED
int m_nKILLFEEDSELECTOR;

SCHARDATA ()
: m_nKILLFEEDSELECTOR(0)
, m_dwUserID(0) // ->>> find this

Change GetNativeID() to sNativeID
Also add Method for Opening kill feed window on GLCharactorReq.cpp.
like this
else if ( pItem->sBasicOp.emItemType==ITEM_PET_SKILL ) // <---- find this
{
GLGaeaClient::GetInstance().GetPetClient()->ReqLearnSkill ( wPosX, wPosY );
}

else if ( pItem->sBasicOp.emItemType == ITEM_KILL_FEED_SELECTOR ) // KILL FEED
{
ReqKillFeedWindowOpen(wPosX, wPosY);
}
Refer to this Click me

CLIENT UPDATE
Comment.ini
find [ITEMTYPE]
ADD this
comment.ini - [SHARE] SIMPLE KILL FEED STYLING [SOURCE CODE] - RaGEZONE Forums

Check Attached for UI WIndow.
KillFeedSelectorWindow.rar ( contains cpp & h )


I'll be Updating this thread for GUI. ( xml )

Merry Christmas and Happy New Year! :)
ejsayaaa - [SHARE] SIMPLE KILL FEED STYLING [SOURCE CODE] - RaGEZONE Forums


CREDITS TO


Credits Used Textures from Thai Server I don't know who's.
 

Attachments

You must be registered for see attachments list
Last edited:
Experienced Elementalist
Joined
Nov 8, 2023
Messages
245
Reaction score
36
1703644234869 - [SHARE] SIMPLE KILL FEED STYLING [SOURCE CODE] - RaGEZONE Forums

Anyone knows where to Declare that ? I think Sir EJ forgot to put it in the guide .
 

Attachments

You must be registered for see attachments list
Experienced Elementalist
Joined
Nov 8, 2023
Messages
245
Reaction score
36
mind share how you solve the error 1 ?
I changed it to this since im using Juver
C++:
    if ( CheckCoolTime( pInvenItem->sItemCustom.sNativeID ) )
    return TRUE;
 
Joined
May 2, 2012
Messages
475
Reaction score
244
Change GetNativeID() to sNativeID

Or you can make one yourself

Declare m_nKILLFEEDSELECTOR; to your GLCharData. Then add for Database saving.

Like i said implement it at your own risk. Don't rely entirely on this thread because i might forgotten to put some ;)

Also add Method for Opening kill feed window on GLCharactorReq.

You know what i mean ;)
 
Back
Top