You last visited: Today at 21:34
Advertisement
[Re-Release] Weaponlevel Sourcecode
Discussion on [Re-Release] Weaponlevel Sourcecode within the Flyff PServer Guides & Releases forum part of the Flyff Private Server category.
06/09/2013, 20:26
#1
elite*gold: 0
Join Date: Nov 2012
Posts: 21
Received Thanks: 6
[Re-Release] Weaponlevel Sourcecode
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:
Code:
ar >> aEquipInfoAdd[nParts].bItemResist >> aEquipInfoAdd[nParts].nResistAbilityOption;
Darunter einfügen:
Code:
#ifdef __WEAPON_LVL
ar >> aEquipInfoAdd[nParts].nWeaponLevel >> aEquipInfoAdd[nParts].nWeaponExp;
#endif
AttackArbiter.cpp :
Suche nach:
Code:
#include "AttackArbiter.h"
Darunter einfügen:
Code:
#ifdef __WEAPON_LVL
#include "UserMacro.h"
#endif
Suche nach:
Code:
void CAttackArbiter::OnDamaged( int nDamage )
Ersetze Funktion durch:
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 );
}
}
}
}
Item.cpp :
Suche nach:
Code:
CItemElem::CItemElem()
Füge das:
Code:
#ifdef __WEAPON_LVL
m_nWeaponExp = 0;
m_nWeaponLevel = 1;
#endif
über:
ein.
Suche nach:
Code:
#if __VER >= 15 // __PETVIS
m_bTranformVisPet = ie.m_bTranformVisPet;
#endif // __PETVIS
Darunter einfügen:
Code:
#ifdef __WEAPON_LVL
m_nWeaponLevel = ie.m_nWeaponLevel;
m_nWeaponExp = ie.m_nWeaponExp;
#endif
Item.h
Suche nach:
Code:
enum { expired = 0x01, binds = 0x02, isusing = 0x04, };
Darunter einfügen:
Code:
#ifdef __WEAPON_LVL
DWORD m_nWeaponExp;
int m_nWeaponLevel;
#endif
Mover.h
Suche nach:
Code:
#ifdef __ADD_RESTATE_LOW
#define RESTATE_LOW 50
#endif // __ADD_RESTATE_LOW
Darüber einfügen:
Code:
#ifdef __WEAPON_LVL
#define UI_WEAPON_LEVEL 19
#define UI_WEAPON_EXP 20
#endif
Suche nach:
Code:
#ifdef __CLIENT
CTexture* pTexture;
#endif // __CLIENT
Darunter einfügen:
Code:
#ifdef __WEAPON_LVL
int nWeaponExp;
int nWeaponLevel;
#endif
Suche nach:
Code:
#ifdef __CLIENT
pTexture = NULL;
#endif // __CLIENT
Darunter einfügen:
Code:
#ifdef __WEAPON_LVL
nWeaponExp = 0;
nWeaponLevel = 0;
#endif
MoverEquip.cpp :
Suche nach:
Code:
void CMover::SetDestParamEquip( ItemProp* pItemProp, CItemElem* pItemElem, BOOL bIgnoreSetItem )
{
if( pItemElem && pItemElem->IsFlag( CItemElem::expired ) )
return;
Darunter einfügen:
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
Suche nach:
Code:
void CMover::ResetDestParamEquip( ItemProp* pItemProp, CItemElem* pItemElem )
{
if( pItemElem && pItemElem->IsFlag( CItemElem::expired ) )
return;
Darunter einfügen:
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
MoverParam.cpp :
Code:
( (CItemElem*)pItemBase )->m_byFlag = byFlag;
UpdateParts( FALSE );
#endif // __CLIENT
UpdateParam();
break;
}
Darunter einfügen:
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
ObjSerialize.cpp :
Suche nach:
Code:
#if __VER >= 15 // __PETVIS
ar << m_bTranformVisPet;
#endif // __PETVIS
Darunter einfügen:
Code:
#ifdef __WEAPON_LVL
ar << m_nWeaponLevel;
ar << m_nWeaponExp;
#endif
Suche nach:
Code:
#ifdef __CLIENT
SetTexture();
#endif
Darunter einfügen:
Code:
#ifdef __WEAPON_LVL
ar >> m_nWeaponLevel;
ar >> m_nWeaponExp;
#endif
Project.cpp :
Suche nach:
Code:
if( m_UltimateWeapon.Load_GemAbility() == FALSE )
{
return FALSE;
}
return TRUE;
}
#endif // __ULTIMATE
Darunter einfügen:
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
Suche nach:
Code:
BOOL CProject::OpenProject( LPCTSTR lpszFileName )
{
Darunter einfügen:
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
Project.h :
Suche nach:
Code:
static FLOAT m_fItemDropRate; // ¸ó½ºÅÍ ¾ÆÀÌÅÛ µå·Ó·ü
static FLOAT m_fGoldDropRate; // ¸ó½ºÅÍ Æä³Ä µå·Ó·ü
static FLOAT m_fMonsterExpRate; // ¸ó½ºÅÍ °æÇèÄ¡·ê
Darüber einfügen(unter "public"):
Code:
#ifdef __WEAPON_LVL
map<DWORD, WeaponLevelingProp> m_aWeaponLevelingProp;
WeaponLevelingProp* GetWeaponLevelingProp(DWORD dwItemKind);
#endif
ProjectCmn.h :
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;
}
};
Darunter einfügen:
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
DbManagerFun.cpp :
Suche nach:
Code:
#endif // __SYS_PLAYER_DATA
}
#endif // __MA_VER11_05 // Äɸ¯ÅÍ ºÀÀÎ °Å·¡ ±â´É world,database,neuz
Darunter einfügen:
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
DbManagerSave.cpp :
Suche nach:
Code:
pItemElem->m_bItemResist, pItemElem->m_nResistAbilityOption,
pItemElem->m_idGuild,
pItemElem->m_nResistSMItemId
Darunter einfügen:
Code:
#ifdef __WEAPON_LVL
, pItemElem->m_nWeaponLevel
, pItemElem->m_nWeaponExp
#endif
Suche nach:
Code:
void CDbManager::SaveOneItem( CItemElem* pItemElem, PItemStruct pItemStruct )
Funktion ersetzen durch:
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
);
tooltip.cpp :
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 ) );
Darunter einfügen:
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
tooltip.h :
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();
Darüber einfügen (unter "public"):
Code:
#ifdef __WEAPON_LVL
CItemElem* m_pItemElem;
BOOL m_bGaugeShow;
int m_nWeaponExp;
int m_nWeaponLevel;
#endif
WndManager.cpp :
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 );
Darunter einfügen:
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
Suche nach:
Code:
void CWndMgr::PutToolTipItemAndSubToolTip( CItemBase* pItemBase, CPoint point, CRect* pRect, int nFlag )
{
Darunter einfügen:
Code:
#ifdef __WEAPON_LVL
g_toolTip.m_pItemElem = (CItemElem*)pItemBase;
#endif
Suche nach:
Code:
switch( nSubToolTipFlag )
{
case 0:
{
Darunter einfügen:
Code:
#ifdef __WEAPON_LVL
g_toolTip.m_pItemElem = (CItemElem*)pPartsItemBase;
#endif
Suche nach:
Code:
g_toolTip.PutToolTipEx( pPartsItemBase->m_dwItemId, strEquipItem, *pRect, point, 0, nSubToolTipFlag );
if( pPartsItemProp->IsUltimate() )
g_toolTip.SetUltimateToolTip( pPartsItemBase );
break;
}
case 1:
{
Darunter einfügen:
Code:
#ifdef __WEAPON_LVL
g_toolTipSub1.m_pItemElem = (CItemElem*)pPartsItemBase;
#endif
Suche nach:
Code:
g_toolTipSub1.PutToolTipEx( pPartsItemBase->m_dwItemId, strEquipItem, *pRect, point, 0, nSubToolTipFlag );
if( pPartsItemProp->IsUltimate() )
g_toolTipSub1.SetUltimateToolTip( pPartsItemBase );
break;
}
case 2:
{
Darunter einfügen:
Code:
#ifdef __WEAPON_LVL
g_toolTipSub2.m_pItemElem = (CItemElem*)pPartsItemBase;
#endif
Suche nach:
Code:
CItemElem* pItemElem = (CItemElem*)pItemBase;
CString str = _T( "" );
CString strTemp = _T( "" );
CString strEnter = '\n';
DWORD dwColorBuf;
Darunter einfügen:
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
Obj.cpp :
Suche nach:
Code:
m_byFlag = 0;
m_nItemNum = 1;
m_idGuild = 0;
m_nAbilityOption = 0;
m_nRepairNumber = 0;
m_nHitPoint = 0;
m_nRepair = 0;
Darüber einfügen:
Code:
#ifdef __WEAPON_LVL
m_nWeaponExp = 0;
m_nWeaponLevel = 1;
#endif
Suche nach:
Code:
#if __VER >= 15 // __PETVIS
m_bTranformVisPet = ie.m_bTranformVisPet;
#endif // __PETVIS
Darunter einfügen:
Code:
#ifdef __WEAPON_LVL
m_nWeaponLevel = ie.m_nWeaponLevel;
m_nWeaponExp = ie.m_nWeaponExp;
#endif
Obj.h :
Suche nach:
Code:
private:
int m_nAbilityOption;
public:
enum { expired = 0x01, binds = 0x02, };
Darunter einfügen:
Code:
#ifdef __WEAPON_LVL
DWORD m_nWeaponExp;
int m_nWeaponLevel;
#endif
WndField.cpp :
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
WndField.h :
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
Darunter einfügen:
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
Vergesst in der VersionCommon.h vom Worldserver, Databaseserver und der Neuz den Eintrag nicht:
Code:
#define __WEAPON_LVL
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
06/09/2013, 21:12
#2
elite*gold: 18
Join Date: Sep 2009
Posts: 20,174
Received Thanks: 14,476
Füg doch bitte Spoiler ein, danke.
06/10/2013, 00:48
#3
elite*gold: 0
Join Date: Apr 2010
Posts: 82
Received Thanks: 27
Put item in post, and restart serv, level and exp are lost....
06/10/2013, 03:54
#4
elite*gold: 115
Join Date: Jan 2012
Posts: 1,156
Received Thanks: 894
Quote:
Originally Posted by
Meutledaron
Put item in post, and restart serv, level and exp are lost....
There are missing code on dbmanagersave.cpp
06/10/2013, 06:10
#5
elite*gold: 0
Join Date: Jun 2013
Posts: 21
Received Thanks: 12
I don't think it copied everything in the code.
06/10/2013, 07:49
#6
elite*gold: 0
Join Date: Feb 2013
Posts: 160
Received Thanks: 151
Ja, ich würde mal sagen du hast was vergessen.
Is net so schlau zu denken das alles in #ifdef __WEAPON_LVL ist
gibt nämlich auch codes die nicht dort drinne sind z.b.
sprintf( pItemStruct->szItem,
dort müsst ihr noch 2x %d einfügen fürs speichern der Exp und Level.
06/10/2013, 15:45
#7
elite*gold: 0
Join Date: Dec 2012
Posts: 4
Received Thanks: 1
Dann sagt den Leuten doch auch was sie machen müssen und gebt net immer nur so antworten
Geht in die DbManagerSave.cpp
und ersetzt
das:
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
);
mit dem
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
);
06/10/2013, 18:25
#8
elite*gold: 0
Join Date: May 2013
Posts: 240
Received Thanks: 11
nice thnanks
if i change the exp to 40 it past leveling?
06/11/2013, 04:59
#9
elite*gold: 0
Join Date: Jan 2011
Posts: 26
Received Thanks: 2
Just wanna point out that the IK3_THSWD and IK3_THAXE are useless unless you change your whole Spec_Item / propitem.txt's 2hand sword and axes IK3s
since it all uses IK3_SWD and IK3_AXE and what really determines if its 2handed is HD_ONE and HD_TWO which is on another parameter.
06/11/2013, 16:55
#10
elite*gold: 0
Join Date: May 2013
Posts: 240
Received Thanks: 11
when server down it back to the original stat for example STR+2 when a servr restart i goes to STR+1
08/28/2013, 13:52
#11
elite*gold: 0
Join Date: Jun 2011
Posts: 98
Received Thanks: 20
wo in der datenbank kommen die beiden spalten für waffenexp und level rein?
08/28/2013, 20:51
#12
elite*gold: 0
Join Date: Jul 2012
Posts: 78
Received Thanks: 8
@leo2222 denk mal nach ich schätze bei der item datenbank wo anderst wäre es recht sinfrei
08/29/2013, 15:41
#13
elite*gold: 0
Join Date: Jun 2011
Posts: 186
Received Thanks: 202
Wenn ihr schon leeched, dann gebt wenigstens den Urheber an! Ist zwar schon alt der Thread, aber da werden bitte Credits für Dardan und Aldimaster eingefügt! Notfalls bitte von Mod wenn der Threadersteller nicht mehr aktiv ist.
09/09/2013, 10:35
#14
elite*gold: 0
Join Date: Oct 2008
Posts: 275
Received Thanks: 68
Na Toll...
Habs genau so eingebaut und nun crasht der Client wenn ich mich einloggen will ...
Nach der Charakterauswahl crasht es ...
in der Error.log des Servers steht folgendes :
¾ÆÅÛ ¹þ±â´Âµ¥ ½ÇÆÐ : TestChar
Was kann ich jetzt machen ?
09/10/2013, 11:39
#15
elite*gold: 0
Join Date: May 2013
Posts: 37
Received Thanks: 1
how about the database?
Similar Threads
[TUTORIAL] Level Effekte beim Weaponlevel ändern!
12/03/2012 - Flyff PServer Guides & Releases - 6 Replies
Hey Leute,
da mich schon ein paar Leute drauf angesprochen haben wo dies geändert wird, habe ich mir überlegt mal ein kleines Tutorial zu machen für die jeniegen die keine Ahnung haben.
ihr öffnet aus dem _COMMON ordner Project.cpp im source.
hier sucht ihr folgende Funktion:
#ifdef __WEAPON_LEVELING
// 1h Sword
All times are GMT +2. The time now is 21:35 .