Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Flyff > Flyff Private Server > Flyff PServer Guides & Releases
You last visited: Today at 07:09

  • Please register to post and access all features, it's quick, easy and FREE!

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.

Reply
 
Old   #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:
Code:
m_idGuild = 0;
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
Gomenosai is offline  
Thanks
1 User
Old 06/09/2013, 21:12   #2



 
Sedrika's Avatar
 
elite*gold: 18
The Black Market: 103/0/0
Join Date: Sep 2009
Posts: 20,174
Received Thanks: 14,475
Füg doch bitte Spoiler ein, danke.
Sedrika is offline  
Thanks
2 Users
Old 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....
Meutledaron is offline  
Thanks
1 User
Old 06/10/2013, 03:54   #4
 
Rhyder`'s Avatar
 
elite*gold: 115
Join Date: Jan 2012
Posts: 1,156
Received Thanks: 894
Quote:
Originally Posted by Meutledaron View Post
Put item in post, and restart serv, level and exp are lost....
There are missing code on dbmanagersave.cpp
Rhyder` is offline  
Thanks
1 User
Old 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.
SmexySelenA is offline  
Old 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.
i33zGames is offline  
Thanks
1 User
Old 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:


mit dem
xConsx is offline  
Thanks
1 User
Old 06/10/2013, 18:25   #8
 
WooTheFck's Avatar
 
elite*gold: 0
Join Date: May 2013
Posts: 239
Received Thanks: 11
nice thnanks

if i change the exp to 40 it past leveling?
WooTheFck is offline  
Old 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.
Synchronicity is offline  
Thanks
1 User
Old 06/11/2013, 16:55   #10
 
WooTheFck's Avatar
 
elite*gold: 0
Join Date: May 2013
Posts: 239
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
WooTheFck is offline  
Old 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?
Leo2222 is offline  
Old 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
Brauny349 is offline  
Old 08/29/2013, 15:41   #13
 
JustDread's Avatar
 
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.
JustDread is offline  
Thanks
1 User
Old 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 ?
guardianangel is offline  
Old 09/10/2013, 11:39   #15
 
elite*gold: 0
Join Date: May 2013
Posts: 37
Received Thanks: 1
how about the database?
cotton69 is offline  
Reply


Similar Threads 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 +1. The time now is 07:09.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.