Guten Abend epvp,
Wir der Titel schon sagt re-release ich hier den reinen Sourcecode des Waffenlevelsystems, da ich mir gedacht habe, dass es für Anfänger hilfreich sei.
Und schon gehts los:
DPClient.cpp:
Suche nach:
Darunter einfügen:
AttackArbiter.cpp:
Suche nach:
Darunter einfügen:
Suche nach:
Ersetze Funktion durch:
Item.cpp:
Suche nach:
Füge das:
über:
ein.
Suche nach:
Darunter einfügen:
Item.h
Suche nach:
Darunter einfügen:
Mover.h
Suche nach:
Darüber einfügen:
Suche nach:
Darunter einfügen:
Suche nach:
Darunter einfügen:
MoverEquip.cpp:
Suche nach:
Darunter einfügen:
Suche nach:
Darunter einfügen:
MoverParam.cpp:
Darunter einfügen:
ObjSerialize.cpp:
Suche nach:
Darunter einfügen:
Suche nach:
Darunter einfügen:
Project.cpp:
Suche nach:
Darunter einfügen:
Suche nach:
Darunter einfügen:
Project.h:
Suche nach:
Darüber einfügen(unter "public"):
ProjectCmn.h:
Suche nach:
Darunter einfügen:
DbManagerFun.cpp:
Suche nach:
Darunter einfügen:
DbManagerSave.cpp:
Suche nach:
Darunter einfügen:
Suche nach:
Funktion ersetzen durch:
tooltip.cpp:
Suche nach:
Darunter einfügen:
tooltip.h:
Suche nach:
Darüber einfügen (unter "public"):
WndManager.cpp:
Suche nach:
Darunter einfügen:
Suche nach:
Darunter einfügen:
Suche nach:
Darunter einfügen:
Suche nach:
Darunter einfügen:
Suche nach:
Darunter einfügen:
Suche nach:
Darunter einfügen:
Obj.cpp:
Suche nach:
Darüber einfügen:
Suche nach:
Darunter einfügen:
Obj.h:
Suche nach:
Darunter einfügen:
WndField.cpp:
Am Ende der Datei einfügen:
WndField.h:
Suche nach:
Darunter einfügen:
Vergesst in der VersionCommon.h vom Worldserver, Databaseserver und der Neuz den Eintrag nicht:
Ich habe das System nicht selbst gecodet habe es lediglich aus einer Source extrahiert und übersichtlicher gestaltet.
Wer es benutzen möchte viel Spaß dabei, wer es nicht mag einfach nicht beachten.
MfG
Edit: Sicherung des Waffenlevels und der EXP von xConsx
Wir der Titel schon sagt re-release ich hier den reinen Sourcecode des Waffenlevelsystems, da ich mir gedacht habe, dass es für Anfänger hilfreich sei.
Und schon gehts los:
DPClient.cpp:
Suche nach:
Code:
ar >> aEquipInfoAdd[nParts].bItemResist >> aEquipInfoAdd[nParts].nResistAbilityOption;
Code:
#ifdef __WEAPON_LVL ar >> aEquipInfoAdd[nParts].nWeaponLevel >> aEquipInfoAdd[nParts].nWeaponExp; #endif
Suche nach:
Code:
#include "AttackArbiter.h"
Code:
#ifdef __WEAPON_LVL #include "UserMacro.h" #endif
Code:
void CAttackArbiter::OnDamaged( int nDamage )
Code:
void CAttackArbiter::OnDamaged( int nDamage )
{
#if __VER >= 9 // __RECOVERY10
m_pDefender->m_nAtkCnt = 1;
#endif // __RECOVERY10
m_pDefender->SetDamagedMotion( m_pAttacker, m_dwAtkFlags );
g_UserMng.AddDamage( m_pDefender, GETID( m_pAttacker ), nDamage, m_dwAtkFlags );
FLOAT fFaktor = 22.0f; // Waffen EXP einstellen Ich habe hier vorhin von 25 auf 15 gestellt
CItemElem* pItemElem;
BYTE nValue = 0;
BOOL bLvlUp = FALSE;
if(m_pDefender->IsPlayer() && !m_pAttacker->IsPlayer())
{
// Wenn Spieler von Monster angegriffen -> Schild leveln.
pItemElem = m_pDefender->GetWeaponItem(PARTS_SHIELD);
nValue = 1;
}
else
if(!m_pDefender->IsPlayer() && m_pAttacker->IsPlayer())
{
// Wenn Monster von Spieler angegriffen -> Waffe leveln.
pItemElem = m_pAttacker->GetWeaponItem();
nValue = 2;
}
if(nValue == 1)
{
// if(m_pDefender->HasBuff(BUFF_ITEM, II_SYS_SYS_SCR_WEAPON_EXP2))
// fFaktor *= 2;
//if(m_pDefender->HasBuff(BUFF_ITEM, II_SYS_SYS_SCR_WEAPON_EXP3))
// fFaktor *= 3;
}
else
if(nValue == 2)
{
//if(m_pAttacker->HasBuff(BUFF_ITEM, II_SYS_SYS_SCR_WEAPON_EXP2))
// fFaktor *= 2;
//if(m_pAttacker->HasBuff(BUFF_ITEM, II_SYS_SYS_SCR_WEAPON_EXP3))
// fFaktor *= 3;
}
nDamage = (int)(nDamage * fFaktor);
if(pItemElem && (nValue == 1 || nValue == 2))
{
if(nValue == 2) // Wenn erste Hand eine Waffe ist
{
// Prüfe ob in der anderen Hand auch eine Waffe ist.
if(m_pAttacker->GetLWeaponItem())
{
BYTE cbHandFlag = GetHandFlag();
int nPart;
for( BYTE cbFlag = 0x01; cbFlag <= 0x02; ++cbFlag )
{
if( cbHandFlag & cbFlag )
{
nPart = (cbFlag & 0x01) ? PARTS_RWEAPON : PARTS_LWEAPON;
}
}
pItemElem = m_pAttacker->GetWeaponItem(nPart);
}
}
if(pItemElem && pItemElem->m_nWeaponLevel < 30 && pItemElem->m_nWeaponExp + nDamage >= (DWORD)(INT_MAX / 100 * pItemElem->m_nWeaponLevel))
{
// Level up
int nRest = pItemElem->m_nWeaponExp + nDamage - (INT_MAX / 100 * pItemElem->m_nWeaponLevel);
pItemElem->m_nWeaponExp = 0;
if(nValue == 2)
{
m_pAttacker->ResetDestParamEquip(pItemElem->GetProp(), pItemElem);
}
else
if(nValue == 1)
{
m_pDefender->ResetDestParamEquip(pItemElem->GetProp(), pItemElem);
}
pItemElem->m_nWeaponLevel++;
if(nValue == 2)
{
m_pAttacker->SetDestParamEquip(pItemElem->GetProp(), pItemElem);
}
else
if(nValue == 1)
{
m_pDefender->SetDestParamEquip(pItemElem->GetProp(), pItemElem);
}
bLvlUp = TRUE;
while(nRest > 0)
{
if(pItemElem->m_nWeaponLevel < 30 && nRest >= (INT_MAX / 100 * pItemElem->m_nWeaponLevel))
{
// Level Up
nRest -= (INT_MAX / 100 * pItemElem->m_nWeaponLevel);
if(nValue == 2)
{
m_pAttacker->ResetDestParamEquip(pItemElem->GetProp(), pItemElem);
}
else
if(nValue == 1)
{
m_pDefender->ResetDestParamEquip(pItemElem->GetProp(), pItemElem);
}
pItemElem->m_nWeaponLevel++;
if(nValue == 2)
{
m_pAttacker->SetDestParamEquip(pItemElem->GetProp(), pItemElem);
}
else
if(nValue == 1)
{
m_pDefender->SetDestParamEquip(pItemElem->GetProp(), pItemElem);
}
}
else
{
pItemElem->m_nWeaponExp += nRest;
if(pItemElem->m_nWeaponExp > (DWORD)(INT_MAX / 100 * pItemElem->m_nWeaponLevel))
pItemElem->m_nWeaponExp = (INT_MAX / 100 * pItemElem->m_nWeaponLevel);
nRest = 0;
}
}
}
else
{
// Exp gesteigert
pItemElem->m_nWeaponExp += nDamage;
if(pItemElem->m_nWeaponExp > (DWORD)(INT_MAX / 100 * pItemElem->m_nWeaponLevel))
pItemElem->m_nWeaponExp = (INT_MAX / 100 * pItemElem->m_nWeaponLevel);
}
CString str;
if(bLvlUp && pItemElem && pItemElem->GetProp())
{
str.Format("Deine Waffe(%s) ist auf Level %d gestiegen", pItemElem->GetProp()->szName, pItemElem->m_nWeaponLevel);
}
if(nValue == 2)
{
m_pAttacker->UpdateItem((BYTE)pItemElem->m_dwObjId, UI_WEAPON_LEVEL, pItemElem->m_nWeaponLevel);
m_pAttacker->UpdateItem((BYTE)pItemElem->m_dwObjId, UI_WEAPON_EXP, pItemElem->m_nWeaponExp);
if(bLvlUp)
{
((CUser*)m_pAttacker)->AddText(str);
g_UserMng.AddCreateSfxObj(m_pAttacker, XI_GEN_LEVEL_UP01 );
}
}
else
if(nValue == 1)
{
m_pDefender->UpdateItem((BYTE)pItemElem->m_dwObjId, UI_WEAPON_LEVEL, pItemElem->m_nWeaponLevel);
m_pDefender->UpdateItem((BYTE)pItemElem->m_dwObjId, UI_WEAPON_EXP, pItemElem->m_nWeaponExp);
if(bLvlUp)
{
((CUser*)m_pDefender)->AddText(str);
g_UserMng.AddCreateSfxObj(m_pDefender, XI_GEN_LEVEL_UP01 );
}
}
}
}
Suche nach:
Code:
CItemElem::CItemElem()
Code:
#ifdef __WEAPON_LVL m_nWeaponExp = 0; m_nWeaponLevel = 1; #endif
Code:
m_idGuild = 0;
Suche nach:
Code:
#if __VER >= 15 // __PETVIS m_bTranformVisPet = ie.m_bTranformVisPet; #endif // __PETVIS
Code:
#ifdef __WEAPON_LVL m_nWeaponLevel = ie.m_nWeaponLevel; m_nWeaponExp = ie.m_nWeaponExp; #endif
Suche nach:
Code:
enum { expired = 0x01, binds = 0x02, isusing = 0x04, };
Code:
#ifdef __WEAPON_LVL DWORD m_nWeaponExp; int m_nWeaponLevel; #endif
Suche nach:
Code:
#ifdef __ADD_RESTATE_LOW #define RESTATE_LOW 50 #endif // __ADD_RESTATE_LOW
Code:
#ifdef __WEAPON_LVL #define UI_WEAPON_LEVEL 19 #define UI_WEAPON_EXP 20 #endif
Code:
#ifdef __CLIENT CTexture* pTexture; #endif // __CLIENT
Code:
#ifdef __WEAPON_LVL int nWeaponExp; int nWeaponLevel; #endif
Code:
#ifdef __CLIENT pTexture = NULL; #endif // __CLIENT
Code:
#ifdef __WEAPON_LVL nWeaponExp = 0; nWeaponLevel = 0; #endif
Suche nach:
Code:
void CMover::SetDestParamEquip( ItemProp* pItemProp, CItemElem* pItemElem, BOOL bIgnoreSetItem )
{
if( pItemElem && pItemElem->IsFlag( CItemElem::expired ) )
return;
Code:
#ifdef __WEAPON_LVL
if(pItemElem && pItemElem->GetProp())
{
WeaponLevelingProp* pProp = prj.GetWeaponLevelingProp(pItemElem->GetProp()->dwItemKind3);
if(pProp)
{
SetDestParam( pProp->dwDstParameter, pProp->dwAdjPerLevel * pItemElem->m_nWeaponLevel, NULL_CHGPARAM );
}
}
#endif
Code:
void CMover::ResetDestParamEquip( ItemProp* pItemProp, CItemElem* pItemElem )
{
if( pItemElem && pItemElem->IsFlag( CItemElem::expired ) )
return;
Code:
#ifdef __WEAPON_LVL
if(pItemElem && pItemElem->GetProp())
{
WeaponLevelingProp* pProp = prj.GetWeaponLevelingProp(pItemElem->GetProp()->dwItemKind3);
if(pProp)
{
ResetDestParam( pProp->dwDstParameter, pProp->dwAdjPerLevel * pItemElem->m_nWeaponLevel);
}
}
#endif
Code:
( (CItemElem*)pItemBase )->m_byFlag = byFlag; UpdateParts( FALSE ); #endif // __CLIENT UpdateParam(); break; }
Code:
#ifdef __WEAPON_LVL
case UI_WEAPON_LEVEL:
{
((CItemElem*)pItemBase)->m_nWeaponLevel = dwValue;
}
break;
case UI_WEAPON_EXP:
{
((CItemElem*)pItemBase)->m_nWeaponExp = dwValue;
}
break;
#endif
Suche nach:
Code:
#if __VER >= 15 // __PETVIS ar << m_bTranformVisPet; #endif // __PETVIS
Code:
#ifdef __WEAPON_LVL ar << m_nWeaponLevel; ar << m_nWeaponExp; #endif
Code:
#ifdef __CLIENT SetTexture(); #endif
Code:
#ifdef __WEAPON_LVL ar >> m_nWeaponLevel; ar >> m_nWeaponExp; #endif
Suche nach:
Code:
if( m_UltimateWeapon.Load_GemAbility() == FALSE )
{
return FALSE;
}
return TRUE;
}
#endif // __ULTIMATE
Code:
#ifdef __WEAPON_LVL
WeaponLevelingProp* CProject::GetWeaponLevelingProp(DWORD dwItemKind)
{
map<DWORD, WeaponLevelingProp>::iterator i = m_aWeaponLevelingProp.find( dwItemKind );
if( i != m_aWeaponLevelingProp.end() )
return &i->second;
return NULL;
}
#endif
Code:
BOOL CProject::OpenProject( LPCTSTR lpszFileName )
{
Code:
#ifdef __WEAPON_LVL // 1h Sword WeaponLevelingProp pWeaponLevelingProp(IK3_SWD, DST_STR, 1); m_aWeaponLevelingProp.insert(make_pair(pWeaponLevelingProp.dwItemKind, pWeaponLevelingProp)); // 1h Axe pWeaponLevelingProp = WeaponLevelingProp(IK3_AXE, DST_STR, 1); m_aWeaponLevelingProp.insert(make_pair(pWeaponLevelingProp.dwItemKind, pWeaponLevelingProp)); // 2h Sword pWeaponLevelingProp = WeaponLevelingProp(IK3_THSWD, DST_STR, 1); m_aWeaponLevelingProp.insert(make_pair(pWeaponLevelingProp.dwItemKind, pWeaponLevelingProp)); // 2h Axe pWeaponLevelingProp = WeaponLevelingProp(IK3_THAXE, DST_STR, 1); m_aWeaponLevelingProp.insert(make_pair(pWeaponLevelingProp.dwItemKind, pWeaponLevelingProp)); // Shield pWeaponLevelingProp = WeaponLevelingProp(IK3_SHIELD, DST_STA, 1); m_aWeaponLevelingProp.insert(make_pair(pWeaponLevelingProp.dwItemKind, pWeaponLevelingProp)); // Knuckle pWeaponLevelingProp = WeaponLevelingProp(IK3_KNUCKLEHAMMER, DST_STR, 1); m_aWeaponLevelingProp.insert(make_pair(pWeaponLevelingProp.dwItemKind, pWeaponLevelingProp)); // Stick pWeaponLevelingProp = WeaponLevelingProp(IK3_CHEERSTICK, DST_INT, 1); m_aWeaponLevelingProp.insert(make_pair(pWeaponLevelingProp.dwItemKind, pWeaponLevelingProp)); // Wand pWeaponLevelingProp = WeaponLevelingProp(IK3_WAND, DST_INT, 1); m_aWeaponLevelingProp.insert(make_pair(pWeaponLevelingProp.dwItemKind, pWeaponLevelingProp)); // Staff pWeaponLevelingProp = WeaponLevelingProp(IK3_STAFF, DST_INT, 1); m_aWeaponLevelingProp.insert(make_pair(pWeaponLevelingProp.dwItemKind, pWeaponLevelingProp)); // BOW pWeaponLevelingProp = WeaponLevelingProp(IK3_BOW, DST_DEX, 1); m_aWeaponLevelingProp.insert(make_pair(pWeaponLevelingProp.dwItemKind, pWeaponLevelingProp)); // YOYO pWeaponLevelingProp = WeaponLevelingProp(IK3_YOYO, DST_STR, 1); m_aWeaponLevelingProp.insert(make_pair(pWeaponLevelingProp.dwItemKind, pWeaponLevelingProp)); #endif
Suche nach:
Code:
static FLOAT m_fItemDropRate; // ¸ó½ºÅÍ ¾ÆÀÌÅÛ µå·Ó·ü static FLOAT m_fGoldDropRate; // ¸ó½ºÅÍ Æä³Ä µå·Ó·ü static FLOAT m_fMonsterExpRate; // ¸ó½ºÅÍ °æÇèÄ¡·ê
Code:
#ifdef __WEAPON_LVL map<DWORD, WeaponLevelingProp> m_aWeaponLevelingProp; WeaponLevelingProp* GetWeaponLevelingProp(DWORD dwItemKind); #endif
Suche nach:
Code:
struct ObjProp
{
DWORD dwID; // º¯¼ö¸í
TCHAR szName[64]; // Çѱ۸íĪ
DWORD dwType;
DWORD dwAI; // AIInterface
DWORD dwHP;
ObjProp()
{
*szName = '\0';
dwID = dwType = dwAI = dwHP = 0;
}
};
Code:
#ifdef __WEAPON_LVL
struct WeaponLevelingProp
{
WeaponLevelingProp(DWORD dwItemKind2, DWORD dwDstParameter2, DWORD dwAdjPerLevel2)
{
dwItemKind = dwItemKind2;
dwDstParameter = dwDstParameter2;
dwAdjPerLevel = dwAdjPerLevel2;
}
DWORD dwItemKind;
DWORD dwDstParameter;
DWORD dwAdjPerLevel;
};
#endif
Suche nach:
Code:
#endif // __SYS_PLAYER_DATA } #endif // __MA_VER11_05 // Äɸ¯ÅÍ ºÀÀÎ °Å·¡ ±â´É world,database,neuz
Code:
#ifdef __WEAPON_LVL pItemElem->m_nWeaponLevel = GetIntPaFromStr( pstrItem, pLocation ); pItemElem->m_nWeaponExp = GetIntPaFromStr( pstrItem, pLocation ); if(pItemElem->m_nWeaponExp < 0) pItemElem->m_nWeaponExp = 0; if(pItemElem->m_nWeaponLevel < 1) pItemElem->m_nWeaponLevel = 1; #endif
Suche nach:
Code:
pItemElem->m_bItemResist, pItemElem->m_nResistAbilityOption, pItemElem->m_idGuild, pItemElem->m_nResistSMItemId
Code:
#ifdef __WEAPON_LVL , pItemElem->m_nWeaponLevel , pItemElem->m_nWeaponExp #endif
Code:
void CDbManager::SaveOneItem( CItemElem* pItemElem, PItemStruct pItemStruct )
Code:
void CDbManager::SaveOneItem( CItemElem* pItemElem, PItemStruct pItemStruct )
{
char szPiercing[32] = {0,};
if( pItemElem->IsEmpty() == FALSE )
{
#if __VER >= 11 // __MA_VER11_05 // Äɸ¯ÅÍ ºÀÀÎ °Å·¡ ±â´É world,database,neuz
if( pItemElem->m_dwItemId == II_SYS_SYS_SCR_SEALCHARACTER )
sprintf( pItemStruct->szItem, "%d,%d,%d,%d,,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d ,%d/",
pItemElem->m_dwObjId, pItemElem->m_dwItemId,
0, 0,
pItemElem->m_nItemNum, pItemElem->m_nRepairNumber,
pItemElem->m_nHitPoint, pItemElem->m_nRepair,
0, pItemElem->m_byFlag,
pItemElem->GetSerialNumber(), pItemElem->GetOption(),
pItemElem->m_bItemResist, pItemElem->m_nResistAbilityOption,
pItemElem->m_idGuild,
pItemElem->m_nResistSMItemId
);
else
sprintf( pItemStruct->szItem, "%d,%d,%d,%d,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,% d,%d,%d/",
pItemElem->m_dwObjId, pItemElem->m_dwItemId,
0, 0, pItemElem->m_szItemText,
pItemElem->m_nItemNum, pItemElem->m_nRepairNumber,
pItemElem->m_nHitPoint, pItemElem->m_nRepair,
0, pItemElem->m_byFlag,
pItemElem->GetSerialNumber(), pItemElem->GetOption(),
pItemElem->m_bItemResist, pItemElem->m_nResistAbilityOption,
pItemElem->m_idGuild,
pItemElem->m_nResistSMItemId
, pItemElem->m_nWeaponLevel
, pItemElem->m_nWeaponExp
);
Suche nach:
Code:
m_apTextureToolTip[ nSetting + 6 ].Render( p2DRender, CPoint( PlusRect.left, PlusRect.bottom ) ); m_apTextureToolTip[ nSetting + 8 ].Render( p2DRender, CPoint( PlusRect.right, PlusRect.bottom ) );
Code:
#ifdef __WEAPON_LVL
if(m_pItemElem && m_pItemElem->GetProp())
{
WeaponLevelingProp* pProp = prj.GetWeaponLevelingProp(m_pItemElem->GetProp()->dwItemKind3);
if(pProp)
{
CGaugeMaker pGaugeMaker;
pGaugeMaker.Render(p2DRender, rect, MulDiv(m_pItemElem->m_nWeaponExp, 100, INT_MAX / 100 * m_pItemElem->m_nWeaponLevel));
}
}
#endif
Suche nach:
Code:
CToolTip();
~CToolTip();
void SetPosition( int nPos ) { m_nPosition = nPos; }
void SetEnable( BOOL bEnable ) { m_bEnable = bEnable; }
BOOL GetEnable() { return m_bEnable; }
void CancelToolTip();
Code:
#ifdef __WEAPON_LVL CItemElem* m_pItemElem; BOOL m_bGaugeShow; int m_nWeaponExp; int m_nWeaponLevel; #endif
Suche nach:
Code:
else
{
strTemp.Format( prj.GetText(TID_GAME_TOOLTIP_DEFENSE_B) );
pEdit->AddString( strTemp, dwItemColor[g_Option.m_nToolTipText].dwGeneral );
strTemp.Format( " %d ~ %d", nMin, nMax );
}
}
pEdit->AddString( strTemp, dwColorMinMax );
Code:
#ifdef __WEAPON_LVL
WeaponLevelingProp* pProp = prj.GetWeaponLevelingProp(pItemElem->GetProp()->dwItemKind3);
if(pProp)
{
strTemp.Format("\nLevel Effect: %s +%d", FindDstString(pProp->dwDstParameter), pProp->dwAdjPerLevel * pItemElem->m_nWeaponLevel);
pEdit->AddString( strTemp, 0xFFFF0000);
}
#endif
Code:
void CWndMgr::PutToolTipItemAndSubToolTip( CItemBase* pItemBase, CPoint point, CRect* pRect, int nFlag )
{
Code:
#ifdef __WEAPON_LVL g_toolTip.m_pItemElem = (CItemElem*)pItemBase; #endif
Code:
switch( nSubToolTipFlag )
{
case 0:
{
Code:
#ifdef __WEAPON_LVL g_toolTip.m_pItemElem = (CItemElem*)pPartsItemBase; #endif
Code:
g_toolTip.PutToolTipEx( pPartsItemBase->m_dwItemId, strEquipItem, *pRect, point, 0, nSubToolTipFlag );
if( pPartsItemProp->IsUltimate() )
g_toolTip.SetUltimateToolTip( pPartsItemBase );
break;
}
case 1:
{
Code:
#ifdef __WEAPON_LVL g_toolTipSub1.m_pItemElem = (CItemElem*)pPartsItemBase; #endif
Code:
g_toolTipSub1.PutToolTipEx( pPartsItemBase->m_dwItemId, strEquipItem, *pRect, point, 0, nSubToolTipFlag );
if( pPartsItemProp->IsUltimate() )
g_toolTipSub1.SetUltimateToolTip( pPartsItemBase );
break;
}
case 2:
{
Code:
#ifdef __WEAPON_LVL g_toolTipSub2.m_pItemElem = (CItemElem*)pPartsItemBase; #endif
Code:
CItemElem* pItemElem = (CItemElem*)pItemBase; CString str = _T( "" ); CString strTemp = _T( "" ); CString strEnter = '\n'; DWORD dwColorBuf;
Code:
#ifdef __WEAPON_LVL
if(pItemElem && pItemElem->GetProp())
{
WeaponLevelingProp* pProp = prj.GetWeaponLevelingProp(pItemElem->GetProp()->dwItemKind3);
if(pProp)
{
strTemp.Format("Exp: %d%%\n", MulDiv(((CItemElem*)pItemBase)->m_nWeaponExp, 100, INT_MAX / 100 * ((CItemElem*)pItemBase)->m_nWeaponLevel));
strEdit.AddString( strTemp, D3DCOLOR_XRGB( 178, 0, 255 ));
}
}
#endif
Suche nach:
Code:
m_byFlag = 0; m_nItemNum = 1; m_idGuild = 0; m_nAbilityOption = 0; m_nRepairNumber = 0; m_nHitPoint = 0; m_nRepair = 0;
Code:
#ifdef __WEAPON_LVL m_nWeaponExp = 0; m_nWeaponLevel = 1; #endif
Code:
#if __VER >= 15 // __PETVIS m_bTranformVisPet = ie.m_bTranformVisPet; #endif // __PETVIS
Code:
#ifdef __WEAPON_LVL m_nWeaponLevel = ie.m_nWeaponLevel; m_nWeaponExp = ie.m_nWeaponExp; #endif
Suche nach:
Code:
private:
int m_nAbilityOption;
public:
enum { expired = 0x01, binds = 0x02, };
Code:
#ifdef __WEAPON_LVL DWORD m_nWeaponExp; int m_nWeaponLevel; #endif
Am Ende der Datei einfügen:
Code:
#ifdef __WEAPON_LVL
CGaugeMaker::CGaugeMaker()
{
m_pVBGauge = NULL;
m_bVBGauge = NULL;
}
CGaugeMaker::~CGaugeMaker()
{
SAFE_RELEASE( m_pVBGauge );
}
void CGaugeMaker::Render(C2DRender* p2DRender, CRect rect, int nWidth)
{
rect.top += 5;
rect.left += 32;
rect.right = rect.left + nWidth;
rect.bottom = rect.top + 10;
m_texGauFillNormal.LoadTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_THEME, "GauEmptyNormal.bmp" ), 0xffff00ff, TRUE );
g_Neuz.m_pd3dDevice->CreateVertexBuffer( sizeof( TEXTUREVERTEX2 ) * 3 * 6, D3DUSAGE_WRITEONLY | D3DUSAGE_DYNAMIC, D3DFVF_TEXTUREVERTEX2, D3DPOOL_DEFAULT, &m_pVBGauge, NULL );
m_bVBGauge = m_pTheme->MakeGaugeVertex( g_Neuz.m_pd3dDevice, &rect, 0x84ff0000, m_pVBGauge, &m_texGauFillNormal );
if( m_bVBGauge )
m_pTheme->RenderGauge( p2DRender->m_pd3dDevice, m_pVBGauge, &m_texGauFillNormal );
}
#endif
Suche nach:
Code:
CWndTreasureRecieve(); virtual ~CWndTreasureRecieve(); void InsertItem( DWORD dwID, int idx, int nCount ); virtual BOOL Initialize( CWndBase* pWndParent = NULL, DWORD nType = MB_OK ); virtual BOOL OnChildNotify( UINT message, UINT nID, LRESULT* pLResult ); virtual void OnDraw( C2DRender* p2DRender ); virtual void OnInitialUpdate(); }; #endif//__TREASUREBOX
Code:
#ifdef __WEAPON_LVL
class CGaugeMaker : public CWndNeuz
{
public:
LPDIRECT3DVERTEXBUFFER9 m_pVBGauge;
BOOL m_bVBGauge;
CTexture m_texGauFillNormal;
CGaugeMaker();
~CGaugeMaker();
void Render(C2DRender* p2DRender, CRect rect, int nWidth);
};
#endif
Code:
#define __WEAPON_LVL
Wer es benutzen möchte viel Spaß dabei, wer es nicht mag einfach nicht beachten.
MfG
Edit: Sicherung des Waffenlevels und der EXP von xConsx