|
You last visited: Today at 07:31
Advertisement
error beim compilen der source (DNA System)
Discussion on error beim compilen der source (DNA System) within the Flyff Private Server forum part of the Flyff category.
11/17/2012, 13:06
|
#1
|
elite*gold: 5
Join Date: Oct 2012
Posts: 1,335
Received Thanks: 505
|
error beim compilen der source (DNA System)
hey leute, bekomme folgenden error:
Code:
WorldServer fatal error LNK1120: 1 unaufgelöste externe Verweise
WorldServer error LNK2019: Nicht aufgelöstes externes Symbol '"public: int __thiscall CProject::LoadMonsterDNA(char const *)" (?LoadMonsterDNA@CProject@@QAEHPBD@Z)', verwiesen in Funktion '"public: int __thiscall CProject::OpenProject(char const *)" (?OpenProject@CProject@@QAEHPBD@Z)'
wäre nett wenn mir wer helfen könnte den error zu fixen.
mfg. Crowley
|
|
|
11/17/2012, 13:07
|
#2
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
du hast iwo ein #endif oder ein #ifdef zu viel / zuwenig
|
|
|
11/17/2012, 13:14
|
#3
|
elite*gold: 5
Join Date: Oct 2012
Posts: 1,335
Received Thanks: 505
|
hm. habe schon alles durchgeguckt. hättest du vlt kurz zeit drauf zugucken?
|
|
|
11/17/2012, 13:32
|
#4
|
ベトナム警察
elite*gold: 0
Join Date: Jan 2012
Posts: 16,496
Received Thanks: 3,518
|
Zeig uns doch mal den Ausschnitt von Zeile 1208.
|
|
|
11/17/2012, 13:34
|
#5
|
elite*gold: 5
Join Date: Oct 2012
Posts: 1,335
Received Thanks: 505
|
ja da ist nichts und da gehört auch nichts rein
hier die ganze datei:
Code:
#include "stdafx.h"
#include "DefineObj.h"
#include "defineSkill.h"
#include "ActionMover.h"
#include "User.h"
#include "defineitem.h"
#include "AttackArbiter.h"
#ifdef __MONSTER_WEAPON
#include "guild.h"
extern CGuildMng g_GuildMng;
extern CUserMng g_UserMng;
#include "party.h"
extern CPartyMng g_PartyMng;
#include "dpdatabaseclient.h"
extern CDPDatabaseClient g_dpDBClient;
#ifdef __EVENT_MONSTER
#include "EventMonster.h"
#endif // __EVENT_MONSTER
#if __VER >= 12 // __NEW_ITEMCREATEMON_SERVER
#include "CreateMonster.h"
#endif // __NEW_ITEMCREATEMON_SERVER
//////////////////////////////////////////////////////////////////////
// ATTACK_INFO
//////////////////////////////////////////////////////////////////////
ATK_TYPE ATTACK_INFO::GetAtkType() const
{
ATK_TYPE type = ATK_GENERIC;
if( dwAtkFlags & AF_MELEESKILL )
{
type = ATK_MELEESKILL;
}
else if( dwAtkFlags & AF_MAGICSKILL )
{
type = ATK_MAGICSKILL;
}
else if( dwAtkFlags & AF_MAGIC ) // ÀÏ¹Ý ¿Ïµå °ø°Ý
{
type = ATK_MAGIC;
}
else if( dwAtkFlags & AF_FORCE ) // ¹Ý»ç µ¥¹ÌÁö°°Àº °æ¿ì
{
type = ATK_FORCE;
}
return type;
}
// ¹æ¾î·Â ¹«½ÃÀÇ °æ¿ìÀΰ¡?
BOOL ATTACK_INFO::CanIgnoreDEF() const
{
int nSkill = GetSkill();
switch ( nSkill )
{
case SI_BIL_PST_ASALRAALAIKUM :
return TRUE;
case SI_JST_YOYO_HITOFPENYA :
return TRUE;
}
if( dwAtkFlags & AF_FORCE ) // ¹Ì¸®°è»ê µÈ µ¥¹ÌÁöÀÇ °æ¿ì, ¹æ¾î·Â ¹«½Ã (¿¹: ¹Ý»ç, »çÀÌű ¿ù)
return TRUE;
return FALSE;
}
int ATTACK_INFO::GetChargeLevel() const
{
if( IsSkillAttack( dwAtkFlags ) )
return 0;
return ( nParam & 0xFF); // ¿ÏµåÃæÀü·®
}
int ATTACK_INFO::GetSkillLevel() const
{
ASSERT( IsSkillAttack( dwAtkFlags ) );
return ( nParam & 0xFF);
}
int ATTACK_INFO::GetAttackCount() const
{
return ( nParam >> 8) & 0xFF; // ÀÏ¹Ý 0, Áö¼Óµ¥¹ÌÁö 1ÀÌ»ó
}
int ATTACK_INFO::GetSkill() const
{
if( IsSkillAttack( dwAtkFlags ) )
return ( nParam >> 16) & 0xFFFF; // ½ºÅ³À̾ú´Ù¸é ½ºÅ³ID
else
return 0;
}
BOOL ATTACK_INFO::IsRangeAttack() const
{
return ( dwAtkFlags & AF_RANGE );
}
//////////////////////////////////////////////////////////////////////
// CAttackArbiter
//////////////////////////////////////////////////////////////////////
CAttackArbiter::CAttackArbiter( DWORD dwMsg, CMover* pAttacker, CMover* pDefender, DWORD dwAtkFlags, int nParam, BOOL bTarget, int nReflect )
: m_dwMsg( dwMsg ),
m_pAttacker( pAttacker ),
m_pDefender( pDefender ),
m_dwAtkFlags( dwAtkFlags ),
m_nParam( nParam ),
m_bTarget( bTarget ),
m_nReflect( nReflect )
{
#if __VER >= 11 // __REFLECTDMG_AFTER
m_nReflectDmg = 0;
#endif // __REFLECTDMG_AFTER
}
CAttackArbiter::~CAttackArbiter()
{
}
int CAttackArbiter::OnDamageMsgW()
{
if( !CheckValidDamageMsg() )
{
/* ºÒÇÊ¿äÇÑ ÄÚµå
#if __VER >= 8 // __S8_PK
if( m_pAttacker->IsPlayer() && m_pDefender->IsPlayer() )
{
HITTYPE type = m_pAttacker->GetHitType( m_pDefender, m_bTarget, m_nReflect );
if( type == HITTYPE_PK )
{
if( m_nReflect )
return 0;
if( m_pAttacker->IsChaotic() || m_pDefender->IsChaotic() )
return 0;
#ifdef __JEFF_11_4
CWorld* pWorld = m_pDefender->GetWorld();
if( pWorld && pWorld->IsArena() )
return 0;
#endif // __JEFF_11_4
if( m_pDefender->IsPKPink() )
m_pAttacker->SetPKPink( GetTickCount() + SEC(prj.m_PKSetting.nReadyAttack) );
else
m_pAttacker->SetPKPink( GetTickCount() + SEC(prj.m_PKSetting.nGeneralAttack) );
g_UserMng.AddPKPink( m_pAttacker, 1 );
}
}
#endif // __VER >= 8 __S8_PK
*/
return 0;
}
ATTACK_INFO info;
info.dwAtkFlags = m_dwAtkFlags;
info.pAttacker = m_pAttacker;
info.pDefender = m_pDefender;
info.nParam = m_nParam;
info.nParts = PARTS_RWEAPON;
int nDamage = 0;
BYTE cbHandFlag = GetHandFlag();
for( BYTE cbFlag = 0x01; cbFlag <= 0x02; ++cbFlag )
{
if( cbHandFlag & cbFlag )
{
info.nParts = (cbFlag & 0x01) ? PARTS_RWEAPON : PARTS_LWEAPON;
#ifdef __EVENTLUA_SPAWN
if( m_pDefender->IsNPC() && prj.m_EventLua.IsEventSpawnMonster( m_pDefender->GetIndex() ) && !m_pAttacker->IsMode( ONEKILL_MODE ) )
{
nDamage = 1;
continue;
}
#endif // __EVENTLUA_SPAWN
#if __VER < 11 // __REMOVE_ENDURANCE
m_pDefender->Abrade( m_pAttacker, info.nParts );
#endif // __REMOVE_ENDURANCE
int n = CalcDamage( &info ); // µ¥¹ÌÁö¸¦ ±¸ÇÑ´Ù. (m_dwAtkFlagsµµ º¯°æµÉ ¼ö ÀÖ´Ù)
if( n > 0 )
{
ProcessAbnormal( n, &info ); // ½ºÅÏ, ¾ÏÈæ, µ¶, ¹Ý»ç »óÅÂó¸®
#if __VER >= 9 // __ULTIMATE
StealHP( n, info.GetAtkType() ); // ÈíÇ÷
#else // __ULTIMATE
StealHP( n ); // ÈíÇ÷
#endif // __ULTIMATE
nDamage += n;
}
}
}
#if __VER >= 8 // __GUILDCOMBAT_85
if( m_pAttacker->IsPlayer() && m_pDefender->IsPlayer() )
{
nDamage -= (nDamage * m_pDefender->GetParam( DST_PVP_DMG_RATE, 0) / 100);
#if __VER >= 9 // __CHAO_DMGDEC
if( !m_pAttacker->IsGuildCombatTarget( m_pDefender ) )
{
int nDamageDecRate = m_pAttacker->GetPKValue() * 5;
if( nDamageDecRate > 99 )
nDamageDecRate = 99;
nDamage -= (int)( nDamage * ( (float)nDamageDecRate/(float)100) );
}
#endif // __CHAO_DMGDEC
}
#endif // __VER >= 8
#ifdef __MONSTER_WEAPON
if(info.pAttacker->bWeaponMonster)
{
MonsterDNA* pDNA = prj.m_aMonsterDNA.GetAt(info.pAttacker->GetIndex());
if(pDNA)
{
nDamage *= (int)(pDNA->fAttackFactor * 10);
if(nDamage < 0)
nDamage = INT_MAX;
nDamage /= 10;
}
}
#endif
nDamage = max( nDamage, 1 );
int nHP = MinusHP( &nDamage ); // HP °¨¼Ò ½ÃÅ´
#if __VER >= 14 // __INSTANCE_DUNGEON
if( CMonsterSkill::GetInstance()->MonsterTransform( m_pDefender, nHP ) )
return 0;
#endif // __INSTANCE_DUNGEON
if( m_pDefender->m_pActMover->IsSit() ) // ¾É±âÇØÁ¦ & À̵¿À» ¸ØÃã
m_pDefender->m_pActMover->ResetState( OBJSTA_MOVE_ALL );
m_pDefender->m_pActMover->SendActMsg( OBJMSG_STAND );
m_pDefender->OnAttacked( m_pAttacker, nDamage, m_bTarget, m_nReflect ); // °ø°ÝÀÚ ÇǰÝÀÚ ÀúÀå, °æÇèÄ¡ Áö±ÞÀ² º¯°æ
if( nHP > 0 )
{
OnDamaged( nDamage ); // µ¥¹ÌÁö ¸ð¼Ç ÃëÇϱâ, µ¥¹ÌÁö Àü¼Û, ¹üÁËÀÚ¼³Á¤
// MinusHP()¿¡¼* °¡Á®¿È - µ¥¹ÌÁö ÀÌÈÄ È¸º¹½ÃÄÑ¾ß ÇÑ´Ù.
int nActionHPRate = m_pDefender->GetAdjParam( DST_AUTOHP ); // ¹ßµ¿ HPÀ²
if( nActionHPRate > 0 )
{
float fHPPercent = (float)nHP / m_pDefender->GetMaxHitPoint(); // ÇöÀç HPÀÇ ÆÛ¼¾Æ® À²
if( fHPPercent <= (nActionHPRate / 100.0f) ) // ÇöÀç HP°¡ ¹ßµ¿HPÀÌÇϰ¡ µÇ¸é
{
float fAddHP = m_pDefender->GetChgParam( DST_AUTOHP ) / 100.0f; // ȸº¹½Ãų HPÀ²
int nAddHP = (int)( m_pDefender->GetMaxHitPoint() * fAddHP ); // MaxHPÀÇ ÀÏÁ¤ºñÀ²À» ÃëÇÔ.
nHP += nAddHP;
m_pDefender->SetPointParam( DST_HP, nHP, TRUE ); // HPÁõ°¡.
g_UserMng.AddCreateSfxObj( m_pDefender, XI_GEN_CURE01 ); // ȸº¹ È¿°ú ¹ß»ý.
m_pDefender->RemoveBuff( BUFF_SKILL, SI_ASS_HEAL_PREVENTION ); // ÇØÁ¦.
}
}
#if __VER >= 11 // __REFLECTDMG_AFTER
if( m_nReflectDmg )
{
m_pAttacker->m_pActMover->SendDamage( AF_FORCE, m_pDefender->GetId(), m_nReflectDmg, TRUE, 2 );
m_nReflectDmg = 0;
}
#endif// __REFLECTDMG_AFTER
}
else
OnDied(); // °æÇèÄ¡, ¾ÆÀÌÅÛ µå¶ø
#if __VER >= 8 // 8Â÷ µà¾óÁ¸¿¡ °ü°è¾øÀÌ PVP°¡´ÉÇϰÔÇÔ Neuz, World
m_pDefender->EndPVP(nHP);
#else //__VER >= 8
m_pDefender->m_nHitPoint = nHP;
#endif //__VER >= 8
return nDamage;
}
// µ¥¹ÌÁö¸¦ ÀÔ±â À§ÇÑ Á¶°ÇÀ» ÃæÁ·Çϴ°¡? TRUE - ÃæÁ·
BOOL CAttackArbiter::CheckValidDamageMsg()
{
#ifdef __EVENT_MONSTER
// À̺¥Æ® ¸ó½ºÅÍÀÌ°í ·¹º§ÀÌ 15³Ñ°Ô Â÷À̳ª¸é MISS
if( m_pAttacker->IsPlayer() && !m_pDefender->IsPlayer() )
{
MoverProp* lpMoverProp = m_pDefender->GetProp();
if( lpMoverProp && CEventMonster::GetInstance()->SetEventMonster( lpMoverProp->dwID ) )
if( m_pAttacker->GetLevel() - m_pDefender->GetLevel() >= CEventMonster::GetInstance()->GetLevelGap() )
m_dwAtkFlags = AF_MISS;
}
#endif // __EVENT_MONSTER
#if __VER >= 12 // __NEW_ITEMCREATEMON_SERVER
if( m_pAttacker->IsPlayer() && !CCreateMonster::GetInstance()->IsAttackAble( static_cast<CUser*>(m_pAttacker), m_pDefender, TRUE ) )
{
m_dwAtkFlags = AF_MISS;
m_pDefender->m_idAttacker = NULL_ID;
m_pDefender->m_idTargeter = NULL_ID;
}
#endif // __NEW_ITEMCREATEMON_SERVER
if( m_dwAtkFlags & AF_MISS )
{
g_UserMng.AddDamage( m_pDefender, GETID( m_pAttacker ), 0, m_dwAtkFlags );
return FALSE;
}
// ¸Â´Â½ÃÁ¡¿¡µµ ½ºÆ¿Ã¼Å©¸¦ ÇØ¾ßÇÑ´Ù.
// µ¿½Ã¿¡ ½ºÅ³À» ½èÀ»¶§ ¹ßµ¿Çϴ½ÃÁ¡¿¡ ½ºÅ³À» »ç¿ëÇϱⶫ¿¡ µÑ´Ù ½ºÆ¿»óŰ¡ ¾Æ´Ñä·Î µé¾î¿À±â ¶§¹®ÀÌ´Ù.
// ¹ßµ¿ÇÏ´Â ½ÃÁ¡¿¡µµ ¿ª½Ã ½ºÆ¿Ã¼Å©¸¦ ÇØ¾ßÇϴ°ÍÀº ³»¸÷À» µý³ðÀÌ °ø°ÝÇÏ´Â ¸ð¼ÇÀÌ ¾Æ¿¹ ³ª¿ÀÁö ¾Ê±â À§Çؼ* ¹Ì¸® üũ ÇØ¾ßÇϱ⶧¹®.
if( !g_eLocal.GetState( EVE_STEAL ) )
{
if( m_pAttacker->IsSteal( m_pDefender ) ) // m_pAttacker°¡ ½ºÆ¿ÇÏ·Á Çϴ°¡?
return FALSE;
}
return TRUE;
}
int CAttackArbiter::CalcATK( ATTACK_INFO* pInfo )
{
int nATK = 0;
int nCount = pInfo->GetAttackCount(); // ÀÏ¹Ý 0, Áö¼Óµ¥¹ÌÁö 1ÀÌ»ó
switch( pInfo->GetAtkType() )
{
case ATK_FORCE: // ¹Ì¸®°è»êµÈ µ¥¹ÌÁö (¹Ý»ç, »çÀÌű ¿ù)
nATK = m_nParam;
nCount = 0;
break;
case ATK_MELEESKILL: // ¹Ð¸®½ºÅ³
nATK = m_pAttacker->GetMeleeSkillPower( pInfo );
break;
case ATK_MAGICSKILL: // ¸ÅÁ÷ ½ºÅ³
nATK = m_pAttacker->GetMagicSkillPower( pInfo );
break;
case ATK_MAGIC: // ¿Ïµå °ø°Ý
nATK = m_pAttacker->GetMagicHitPower( pInfo->GetChargeLevel() );
break;
case ATK_GENERIC: // ÀÏ¹Ý °ø°Ý
nATK = m_pAttacker->GetHitPower( pInfo );
break;
}
nATK = (int)( nATK * m_pAttacker->GetATKMultiplier( m_pDefender, pInfo->dwAtkFlags ) ); // ¼ø¼ö°ø°Ý·ÂÀ» ÁõÆøÇÑ´Ù.
if( nCount > 0 ) // Áö¼Óµ¥¹ÌÁö´Â °è»êµÈ ATK 10%
nATK = (int)( nATK * 0.1f );
//#ifdef __PET_0410
nATK += m_pAttacker->GetParam( DST_ATKPOWER, 0 );
//#endif // __PET_0410
#if __VER >= 9 // __EVENTLUA_ATKDEF
if( m_pAttacker->IsPlayer() )
nATK += prj.m_EventLua.GetAttackPower();
#endif // __EVENTLUA_ATKDEF
#ifdef __JEFF_11
if( nATK < 0 )
nATK = 0;
#endif // __JEFF_11
return nATK;
}
// µ¥¹ÌÁö¸¦ ±¸ÇÑ´Ù. (m_dwAtkFlagsµµ º¯°æµÉ ¼ö ÀÖ´Ù)
int CAttackArbiter::CalcDamage( ATTACK_INFO* pInfo )
{
if( m_pAttacker->m_dwMode & ONEKILL_MODE ) // ¿øÅ³ ¸ðµå
return m_pDefender->GetHitPoint();
int nDamage = PostCalcDamage( CalcATK( pInfo ), pInfo );
m_dwAtkFlags = pInfo->dwAtkFlags;
return nDamage;
}
int CAttackArbiter::OnAfterDamage( ATTACK_INFO* pInfo, int nDamage )
{
CMover* pAttacker = pInfo->pAttacker;
CMover* pDefender = pInfo->pDefender;
if( pAttacker->IsPlayer() && nDamage > 0 )
{
if( pDefender->GetAdjParam( DST_CHRSTATE ) & CHS_DOUBLE ) // ´õºíµ¥¹ÌÁö »óÅ °É·È´Ù
pDefender->RemoveChrStateBuffs( CHS_DOUBLE );
}
if( pDefender->GetAdjParam( DST_CHRSTATE) & CHS_ATK_COUNTERATTACK ) // °ø°Ý´çÇßÀ»¶§ : µ¥¹ÌÁö ¾øÀ½
{
if( pDefender->IsRangeObj( pAttacker->GetPos(), 3.0f ) )
{
pDefender->RemoveChrStateBuffs( CHS_ATK_COUNTERATTACK );
int nLevel = 1;
if( pDefender->IsPlayer() )
{
LPSKILL pSkill = pDefender->GetSkill(SI_ACR_YOYO_COUNTER);
if( pSkill )
{
#ifdef __SKILL0517
nLevel = pDefender->GetSkillLevel( pSkill );
#else // __SKILL0517
nLevel = pSkill->dwLevel;
#endif // __SKILL0517
}
}
#if __VER >= 8 // __S8_PK
pDefender->DoUseSkill( SI_GEN_ATK_COUNTER, nLevel, pAttacker->GetId(), SUT_NORMAL, FALSE, 0 );
#else // __VER >= 8 __S8_PK
pDefender->DoUseSkill( SI_GEN_ATK_COUNTER, nLevel, pAttacker->GetId(), SUT_NORMAL, 0 );
#endif // __VER >= 8 __S8_PK
nDamage = 0;
pInfo->dwAtkFlags = AF_MISS;
}
}
else
if( pDefender->GetAdjParam( DST_CHRSTATE) & CHS_DMG_COUNTERATTACK ) // °ø°Ý´çÇßÀ»¶§ : µ¥¹ÌÁö ÀÖÀ½
{
if( pDefender->IsRangeObj( pAttacker->GetPos(), 3.0f ) )
{
pDefender->RemoveChrStateBuffs( CHS_DMG_COUNTERATTACK );
#if __VER >= 8 // __S8_PK
pDefender->DoUseSkill( SI_GEN_ATK_COUNTER, pInfo->GetSkillLevel(), pAttacker->GetId(), SUT_NORMAL, FALSE, 0 );
#else // __VER >= 8 __S8_PK
pDefender->DoUseSkill( SI_GEN_ATK_COUNTER, pInfo->GetSkillLevel(), pAttacker->GetId(), SUT_NORMAL, 0 );
#endif // __VER >= 8 __S8_PK
}
}
if( pInfo->GetSkill() == SI_JST_YOYO_HITOFPENYA && nDamage > 0 )
{
nDamage = min( pAttacker->GetGold(), nDamage );
pAttacker->AddGold( -nDamage );
}
#if __VER >= 9 //__AI_0509
if( pDefender->IsReturnToBegin() )
{
nDamage = 0;
pInfo->dwAtkFlags = AF_MISS;
}
#endif // __AI_0509
return nDamage;
}
enum POSTCALC_TYPE
{
POSTCALC_DPC, // Defense, Parry, Critical Àû¿ë
POSTCALC_MAGICSKILL, // ¼Ó¼º°ø°Ý Æ÷ÇÔ ¸ÅÁ÷ ½ºÅ³
POSTCALC_GENERIC, // ±ÙÁ¢°ø°Ý
};
// °ø°Ý°è»ê ŸÀÔ
POSTCALC_TYPE GetPostCalcType( DWORD dwAtkFlags )
{
if ( dwAtkFlags & AF_MAGICSKILL ) // ¸ÅÁ÷ ½ºÅ³
return POSTCALC_MAGICSKILL;
if ( dwAtkFlags & AF_GENERIC ) // ÀÏ¹Ý °ø°Ý
return POSTCALC_GENERIC;
return POSTCALC_DPC;
}
int CAttackArbiter::PostCalcDamage( int nATK, ATTACK_INFO* pInfo )
{
if ( pInfo->dwAtkFlags & AF_FORCE ) //
return nATK;
CMover* pAttacker = pInfo->pAttacker;
CMover* pDefender = pInfo->pDefender;
// ¿¹¿Üó¸®: ¸ÅÁ÷½ºÅ³ÀÌ ¾Æ´Ï¸é, ¸ó½ºÅͰ¡ Ç÷¹À̾ °ø°ÝÇÒ ¶§ ·¹º§Â÷¿¡ µû¸¥ °ø°Ý·ÂUP
if( ((pInfo->dwAtkFlags & AF_MAGICSKILL) == 0) && pAttacker->IsNPC() && pDefender->IsPlayer() )
{
int nDelta = pAttacker->GetLevel() - pDefender->GetLevel();
if( nDelta > 0 )
{
float fpower = 1.0f + ( 0.05f * nDelta );
nATK = (int)( nATK * fpower );
}
}
int nDamage = nATK;
switch( GetPostCalcType( pInfo->dwAtkFlags ) )
{
case POSTCALC_DPC:
nDamage = pDefender->ApplyDPC( nATK, pInfo ); // Defense, Parry, Critical Àû¿ë
#if __VER < 13 // __EXT_ENCHANT
if( nATK > 0 )
nDamage += pAttacker->CalcPropDamage( pDefender, pInfo->dwAtkFlags ); // ¼Ó¼ºµ¥¹ÌÁö¸¦ Ãß°¡
#endif // __EXT_ENCHANT
break;
case POSTCALC_MAGICSKILL:
nDamage = pAttacker->PostCalcMagicSkill( nATK, pInfo );
break;
case POSTCALC_GENERIC:
nDamage = pAttacker->PostCalcGeneric( nATK, pInfo );
break;
}
if( nDamage <= 0 )
return 0;
nDamage += pAttacker->CalcLinkAttackDamage( nDamage ); // ¸µÅ©¾îÅà ½ºÅ³À» Àû¿ëÇÑ´Ù.
if( pInfo->GetSkill() == SI_BIL_PST_ASALRAALAIKUM )
nDamage += PostAsalraalaikum();
nDamage = (int)( nDamage * pAttacker->GetDamageMultiplier( pInfo ) ); // µ¥¹ÌÁöÁõÆø
nDamage = OnAfterDamage( pInfo, nDamage );
return nDamage;
}
int CAttackArbiter::PostAsalraalaikum()
{
int nAddDmg = 0;
LPSKILL pSkill = m_pAttacker->GetSkill( SI_BIL_PST_ASALRAALAIKUM );
DWORD dwSkillLevel =
#ifdef __SKILL0517
m_pAttacker->GetSkillLevel( pSkill );
#else // __SKILL0517
pSkill ? pSkill->dwLevel : 0;
#endif // __SKILL0517
#if __VER >= 12 // __MONSTER_SKILL
if( m_pAttacker->IsNPC() )
dwSkillLevel = CMonsterSkill::GetInstance()->GetMonsterSkillLevel( m_pAttacker, SI_BIL_PST_ASALRAALAIKUM );
#endif // __MONSTERSKILL
switch( dwSkillLevel )
{
case 1: nAddDmg = 20; break;
case 2: nAddDmg = 30; break;
case 3: nAddDmg = 40; break;
case 4: nAddDmg = 50; break;
case 5: nAddDmg = 60; break;
case 6: nAddDmg = 70; break;
case 7: nAddDmg = 80; break;
case 8: nAddDmg = 90; break;
case 9: nAddDmg = 100; break;
case 10: nAddDmg = 150; break;
}
int nMP = m_pAttacker->GetManaPoint();
if( m_pAttacker->IsPlayer() && m_pAttacker->IsSMMode( SM_MAINTAIN_MP ) == FALSE )
m_pAttacker->SetPointParam( DST_MP, 0 ); // 0À¸·Î ¸¸µë.
return ( ( ( m_pAttacker->GetStr() / 15 ) * dwSkillLevel ) * ( 5 + nMP / 10 ) + nAddDmg ); // 34% weniger DMG als vorher
// return ( ( ( m_pAttacker->GetStr() / 10 ) * dwSkillLevel ) * ( 5 + nMP / 10 ) + nAddDmg ); //alte Formel
}
//
//
void CAttackArbiter::ChanceSkill( int nDestParam, CCtrl *pAttackCtrl, CCtrl *pDefendCtrl )
{
#ifdef _DEBUG
if( nDestParam == DST_CHR_CHANCESTEALHP )
{
int a = 0;
}
#endif
if( m_pAttacker->GetType() != OT_MOVER ) return;
if( m_pDefender->GetType() != OT_MOVER ) return;
CMover *pAttacker = (CMover *)pAttackCtrl;
CMover *pDefender = (CMover *)pDefendCtrl;
int nRate = pAttacker->GetAdjParam( nDestParam );
if( nRate > 0 ) // °ø°ÝÀÚ°¡ ½ºÅ³¹ßµ¿»óÅÂ
{
if( (int)( xRandom(100) ) <= nRate )
{
DWORD dwAddSkill = pAttacker->GetChgParam( nDestParam ); // Ÿ°Ý½Ã ¹ßµ¿µÉ ¾Öµå½ºÅ³
AddSkillProp *pAddSkillProp;
pAddSkillProp = prj.GetAddSkillProp( dwAddSkill );
if( pAddSkillProp )
pAttacker->DoActiveSkill( pAddSkillProp->dwName, pAddSkillProp->dwSkillLvl, pDefender ); // dwActiveSkill Lv1ÀÌ ¹ßµ¿µÊ.
// m_pDefender->SetPoison( TRUE, m_pAttacker->GetId(), m_pAttacker->GetChgParam( DST_CHR_CHANCEPOISON ), m_pAttacker->m_tmPoisonUnit, m_pAttacker->m_wPoisonDamage );
}
}
}
// »óÅÂÀÌ»ó(¹Ý»ç, ½ºÅÏ, ¾ÏÈæ, µ¶)ó¸®
void CAttackArbiter::ProcessAbnormal( int nDamage, ATTACK_INFO* pInfo )
{
int nSkill = pInfo->GetSkill();
//¹æ¾îÀÚ°¡ ¹Ý»ç»óÅÂÀ̸é? °ø°ÝÀÚµµ µ¥¹ÌÁö¸¦ ÀԴ´Ù.
int nReflectDmgRate = m_pDefender->GetAdjParam( DST_REFLECT_DAMAGE );
if( nReflectDmgRate > 0 )
{
int nReflectRate = m_pDefender->GetChgParam( DST_REFLECT_DAMAGE );
BOOL bAble = TRUE;
if( nReflectRate > 0 ) // ¹Ý»ç½Ãų È®·üÀÌ ÀÖÀ»¶© È®·ü°Ë»ç ÇÔ
if( (int)( xRandom(100) ) > nReflectRate ) // È®·ü ½ÇÆÐ³Ä?
bAble = FALSE;
ATK_TYPE atkType = pInfo->GetAtkType();
switch( atkType )
{
case ATK_MELEESKILL:
case ATK_MAGICSKILL:
if( m_pDefender->HasBuff( BUFF_SKILL, SI_PSY_NLG_CRUCIOSPELL ) ) // ¹æ¾îÀÚ°¡ Å©·ç½Ã¿À ½ºÆçÀÏ °æ¿ì
bAble = FALSE;
#if __VER >= 11 // __REFLECTDMG_AFTER
break;
#endif // __REFLECTDMG_AFTER
case ATK_FORCE: // ¹Ì¸®°è»êµÈ µ¥¹ÌÁö
bAble = FALSE;
break;
}
if( bAble )
{
int nDmg = (int)( nDamage * (float)(nReflectDmgRate / 100.0f) );
#if __VER >= 8 // __S8_PVP_DST_REFLECT_DAMAGE
if( m_pAttacker->IsPlayer() && m_pDefender->IsPlayer() )
nDmg = (int)( nDmg * 0.1f );
#endif // __VER >= 8 // __S8_PVP_DST_REFLECT_DAMAGE
#if __VER >= 11 // __REFLECTDMG_AFTER
m_nReflectDmg = nDmg;
#else // __REFLECTDMG_AFTER
m_pAttacker->m_pActMover->SendDamage( AF_FORCE,
m_pDefender->GetId(),
nDmg, TRUE, 2 );
#endif // __REFLECTDMG_AFTER
}
}
// chipi_080325 - AF_MAGICSKILL Àΰæ¿ì ƯÁ¤ ½ºÅ³¿¡ ÇÑÇØ »óÅÂÀÌ»ó ó¸®
if( (m_dwAtkFlags & AF_MAGICSKILL) && m_pAttacker->IsPlayer() )
{
switch( nSkill )
{
case SI_BIL_PST_BGVURTIALBOLD :
case SI_BIL_PST_ASALRAALAIKUM :
ChanceSkill( DST_CHR_CHANCESTUN, m_pAttacker, m_pDefender );
break;
}
}
if( m_dwAtkFlags & (AF_GENERIC | AF_MELEESKILL) ) // ±ÙÁ¢ÆòŸ/±ÙÁ¢½ºÅ³¿¡ ¸Â¾Ò´Ù.
{
if( m_pAttacker->IsPlayer() )
{
ChanceSkill( DST_CHR_CHANCESTUN, m_pAttacker, m_pDefender );
ChanceSkill( DST_CHR_CHANCEPOISON, m_pAttacker, m_pDefender );
ChanceSkill( DST_CHR_CHANCEDARK, m_pAttacker, m_pDefender );
ChanceSkill( DST_CHR_CHANCEBLEEDING, m_pAttacker, m_pDefender );
ChanceSkill( DST_CHR_CHANCESTEALHP, m_pAttacker, m_pDefender );
}
// Active Skill(¸¶¹ý ¹ßµ¿)
{
ItemProp *pAttackerHandItemProp = m_pAttacker->GetActiveHandItemProp();
if( pAttackerHandItemProp )
{
DWORD dwActiveSkill = pAttackerHandItemProp->dwActiveSkill;
DWORD dwActiveSkillLevel = pAttackerHandItemProp->dwActiveSkillLv;
if( dwActiveSkillLevel == NULL_ID )
dwActiveSkillLevel = 1;
if( dwActiveSkill != NULL_ID ) // °ø°ÝÀÚÀÇ ¹«±â¿¡ ¹ßµ¿¸¶¹ýÀÌ ÀÖ´Ù.
{
if( pAttackerHandItemProp->dwActiveSkillRate == NULL_ID || // = ¸é 100%
(DWORD)( random(100) ) < pAttackerHandItemProp->dwActiveSkillRate ) // ¹ßµ¿È®·ü¿¡ °É·È´Â°¡.
{
m_pAttacker->DoActiveSkill( dwActiveSkill, dwActiveSkillLevel, m_pDefender, true ); // dwActiveSkill Lv1ÀÌ ¹ßµ¿µÊ. true¸¦ ÁذÇ. ¿©±â¼* È®·ü°è»ê ÇÞÀ¸¹Ç·Î ³»ºÎ¿¡¼*´Â ÇÏÁö¸¶¶ó´Â¶æ.
TRACE( "%sÀÇ ActiveSkill ¹ßµ¿, ", m_pAttacker->GetName() );
}
}
}
}
} // AF_GENERIC
if( m_dwAtkFlags & ( AF_MELEESKILL | AF_MAGICSKILL ) ) // ½ºÅ³°ø°ÝÀÌ ½ÃµµµÉ¶§
{
ItemProp* pSkillProp;
AddSkillProp *pAddSkillProp;
m_pAttacker->GetSkillProp( &pSkillProp, &pAddSkillProp, nSkill, pInfo->GetSkillLevel(), "ProcessAbnormal" );
DWORD dwActiveSkill = pAddSkillProp->dwActiveSkill;
if( dwActiveSkill != NULL_ID ) // Ãß°¡ ¹ßµ¿ ½ºÅ³ÀÌ ÀÖ´Ù.
{
DWORD dwActiveSkillRate = pAddSkillProp->dwActiveSkillRate;
#if __VER >= 9 // __SKILL_0706
if( m_pAttacker->IsPlayer() && m_pDefender->IsPlayer() )
dwActiveSkillRate = pAddSkillProp->dwActiveSkillRatePVP;
#endif // __SKILL_0706
// ¹ßµ¿È®·ü¿¡ °É·È´Â°¡.
if( dwActiveSkillRate == NULL_ID || xRandom(100) < dwActiveSkillRate )
m_pAttacker->DoActiveSkill( dwActiveSkill, pAddSkillProp->dwSkillLvl, m_pDefender ); // ¹ßµ¿
}
}
}
// HP °¨¼Ò ½ÃÅ´
int CAttackArbiter::MinusHP( int *pnDamage )
{
int nHP = m_pDefender->GetHitPoint() - *pnDamage; // HP¸¦ ±ð´Â´Ù.
if( nHP <= 0 )
{
if( m_pDefender->m_dwMode & MATCHLESS2_MODE ) // HP°¡ 0¹Ì¸¸À¸·Î ¶³¾îÁ³´Âµ¥ ¹Ý¹«Àû »óųÄ
nHP = 1; // hp¸¦ 1·Î º¹±¸ÇØÁÜ
else
nHP = 0; // ¹Ý¹«Àû ¾Æ´Ï¸é °Á Á×´Â°Ô ¸Â´Ù.
*pnDamage = m_pDefender->GetHitPoint() - nHP;
}
/*
else
{
int nActionHPRate = m_pDefender->GetAdjParam( DST_AUTOHP ); // ¹ßµ¿ HPÀ²
if( nActionHPRate > 0 )
{
float fHPPercent = (float)nHP / m_pDefender->GetMaxHitPoint(); // ÇöÀç HPÀÇ ÆÛ¼¾Æ® À²
if( fHPPercent <= (nActionHPRate / 100.0f) ) // ÇöÀç HP°¡ ¹ßµ¿HPÀÌÇϰ¡ µÇ¸é
{
float fAddHP = m_pDefender->GetChgParam( DST_AUTOHP ) / 100.0f; // ȸº¹½Ãų HPÀ²
int nAddHP = m_pDefender->GetMaxHitPoint() * fAddHP; // MaxHPÀÇ ÀÏÁ¤ºñÀ²À» ÃëÇÔ.
nHP += nAddHP;
m_pDefender->SetPointParam( DST_HP, nHP ); // HPÁõ°¡.
g_UserMng.AddCreateSfxObj( m_pDefender, XI_GEN_CURE01 ); // ȸº¹ È¿°ú ¹ß»ý.
m_pDefender->RemoveBuff( BUFF_SKILL, SI_ASS_HEAL_PREVENTION ); // ÇØÁ¦.
}
}
}
*/
return nHP;
}
// ÈíÇ÷
#if __VER >= 9 // __ULTIMATE
void CAttackArbiter::StealHP( int nDamage, ATK_TYPE type )
#else // __ULTIMATE
void CAttackArbiter::StealHP( int nDamage )
#endif // __ULTIMATE
{
ItemProp *pHandItem = m_pAttacker->GetActiveHandItemProp();
if( pHandItem )
{
if( pHandItem->dwDestParam1 == DST_CHR_STEALHP ) // µé°í ÀÖ´ø ¹«±â¿¡ ÈíÇ÷ ¿É¼ÇÀÌ ÀÖÀ¸¸é
{
int nStealHP = (int)( nDamage * (pHandItem->nAdjParamVal1 / 100.0f) ); // ½ÇÁ¦°¡°ÝÇÑ µ¥¹ÌÁöÀÇ %¸¦ ÃëÇÔ.
m_pAttacker->SetDestParam( DST_HP, nStealHP, NULL_CHGPARAM ); // °ø°ÝÀÚ¿¡°Ô ÈíÇ÷HP¸¦ ÁÜ.
}
}
#if __VER >= 9 // __ULTIMATE
if( type == ATK_GENERIC && m_pAttacker->IsPlayer() )
{
int nDstHP = m_pAttacker->GetParam( DST_MELEE_STEALHP, 0 );
int nStealHP = (int)( nDamage * (nDstHP / 100.0f) );
if( 0 < nDstHP )
m_pAttacker->SetDestParam( DST_HP, nStealHP, NULL_CHGPARAM ); // °ø°ÝÀÚ¿¡°Ô ÈíÇ÷HP¸¦ ÁÜ.
}
#endif // __ULTIMATE
}
// °ø°Ý´çÇÏ°í µ¥¹ÌÁö¸¦ ÀÔÀ» °æ¿ì ó¸®
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 = 15.0f; // Waffen EXP einstellen Ich habe hier vorhin von 25 auf 15 gestellt
CItemElem* pItemElem;
BYTE nValue = 0;
BOOL bLvlUp = FALSE;
#ifdef __MONSTER_WEAPON
if(m_pAttacker->bWeaponMonster)
{
MonsterDNA* pDNA = prj.m_aMonsterDNA.GetAt(m_pAttacker->GetIndex());
if(pDNA)
{
m_pAttacker->dwAttackCount++;
if(m_pAttacker->dwAttackCount > pDNA->dwAttackCount)
{
m_pAttacker->Delete();
return;
}
}
}
pItemElem = m_pAttacker->GetWeaponItem();
if(pItemElem && m_pAttacker->IsPlayer())
{
// 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->m_bMonster )
{
MonsterDNA* pDNA = prj.m_aMonsterDNA.GetAt(pItemElem->m_dwMonsterID);
if(pDNA)
{
FLOAT fChance = xRandomF(100); // <- ValueToChange
if(fChance < pDNA->fAppearChance)
{
CObj* pObj = CreateObj( D3DDEVICE, OT_MOVER, pDNA->dwID );
if( NULL == pObj )
return;
pObj->SetPos( m_pDefender->GetPos() );
pObj->InitMotion( MTI_STAND );
pObj->UpdateLocalMatrix();
((CMover*)pObj)->bWeaponMonster = TRUE;
((CMover*)pObj)->dwTarget = m_pDefender->GetId();
((CMover*)pObj)->SetGold(((CMover*)pObj)->GetLevel()*15); // ¸ó½ºÅÍ »ý¼º½Ã ±âº» Æä³Ä¸¦ ¼³Á¤
((CMover*)pObj)->uOwner = m_pAttacker->m_idPlayer;
m_pDefender->GetWorld()->ADDOBJ( pObj, TRUE, m_pDefender->GetLayer() );
}
}
}
}
#endif
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_SKILL_BARUNA_WEA_DEATHRUNE);
}
}
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_SKILL_BARUNA_WEA_DEATHRUNE);
}
}
}
}
double CalcDifference(double value1, double value2)
{
if(value1 == value2)
return 0.0;
if(value1 > value2)
return value1 - value2;
else
return value2 - value1;
}
int CalcDifference(int value1, int value2)
{
if(value1 == value2)
return 0;
if(value1 > value2)
return value1 - value2;
else
return value2 - value1;
}
// °ø°Ý´çÇϰí Á×´Â °æ¿ì ó¸®
void CAttackArbiter::OnDied()
{
#ifdef __MONSTER_WEAPON
CMover* tmpMover;
if(m_pAttacker->bWeaponMonster)
{
tmpMover = m_pAttacker;
m_pAttacker = (CMover*)g_UserMng.GetUserByPlayerID(m_pAttacker->uOwner);
if(!IsValidObj(m_pAttacker))
{
tmpMover->Delete();
return;
/*m_pAttacker = tmpMover;
tmpMover = NULL;*/
}
}
#endif
#if __VER >= 8 // 8Â÷ µà¾óÁ¸¿¡ °ü°è¾øÀÌ PVP°¡´ÉÇϰÔÇÔ Neuz, World
if( m_pDefender && m_pAttacker && m_pDefender->m_nDuel != 0 && m_pAttacker->m_nDuel != 0 &&
m_pDefender->m_idDuelOther == m_pAttacker->GetId() )
{
OnDiedPVP();
return;
}
#endif //__VER >= 8
m_pDefender->SubPVP( m_pAttacker, m_nReflect ); // m_pDefender°¡ Á×°í³* ÈÄ ½½·ÎÅͰü·Ã ó¸®.
m_pAttacker->AddKillRecovery();
OnDiedSchoolEvent();
if( m_pDefender->IsNPC() && m_pDefender->IsDie() )
{
m_pDefender->Delete(); // ÀÏ´Ü ¶«»§... ÀÌ·±°æ¿ì´Â °Á ¾ø¾ÖÀÚ.
return;
}
if( m_pDefender->m_dwIndex == MI_CLOCKWORK1 || m_pDefender->m_dwIndex == MI_BIGMUSCLE || m_pDefender->m_dwIndex == MI_KRRR )
m_pDefender->SubAroundExp( m_pAttacker, 50.0f ); // ¹Ý°æ50¹ÌÅÍ À̳»¿¡´Â ´Ù °æÇèÄ¡ ³ª´²°¡Áü.
else
m_pAttacker->SubExperience( m_pDefender ); // m_pDefender¸¦ Á×ÀÌ°í ³*ÈÄÀÇ m_pAttacker °æÇèÄ¡ ó¸®.
#ifdef __MONSTER_WEAPON
if(!m_pDefender->bWeaponMonster)
#endif
m_pDefender->DropItemByDied( m_pAttacker );
#if __VER >= 8 // __S8_PK
#ifdef __JEFF_11_4
BOOL bArena = m_pDefender->GetWorld() && m_pDefender->GetWorld()->IsArena();
#endif // __JEFF_11_4
if( m_pDefender->IsPlayer() && m_pDefender->IsChaotic()
#ifdef __JEFF_11_4
&& !bArena
#endif // __JEFF_11_4
)
{
DWORD dwPropensity = m_pDefender->GetPKPropensity(); // undorflow
m_pDefender->SetPKPropensity( m_pDefender->GetPKPropensity() - xRandom( prj.m_PKSetting.nDiePropensityMin, prj.m_PKSetting.nDiePropensityMax + 1 ));
if( dwPropensity <= m_pDefender->GetPKPropensity() )
m_pDefender->SetPKPropensity( 0 );
g_UserMng.AddPKPropensity( m_pDefender );
g_dpDBClient.SendLogPkPvp( m_pDefender, m_pAttacker, 0, 'P' );
}
#endif // __VER >= 8 // __S8_PK
m_pAttacker->m_nAtkCnt = 0; // Ÿ°ÙÀ» Á׿´À¸¸é °ø°ÝÀÚÀÇ ¾îÅÃÄ«¿îÆ® Ŭ¸®¾î
#ifdef __MONSTER_WEAPON
if(IsValidObj(tmpMover))
m_pAttacker = tmpMover;
//delete tmpMover;
#endif
m_pDefender->DoDie( m_pAttacker, m_dwMsg ); // m_pDefender¾ß Á×¾î¶ó.
m_pAttacker->ClearDestObj(); // ¸ñÇ¥¸¦ Á׿´À¸¸é À̵¿¸ñÇ¥µµ Ŭ¸®¾î.
}
#if __VER >= 8 // 8Â÷ µà¾óÁ¸¿¡ °ü°è¾øÀÌ PVP°¡´ÉÇϰÔÇÔ Neuz, World
// PVP°ø°Ý´çÇϰí Á×´Â °æ¿ì ó¸®
void CAttackArbiter::OnDiedPVP()
{
if( m_pDefender->IsNPC() && m_pDefender->IsDie() )
{
m_pDefender->Delete(); // ÀÏ´Ü ¶«»§... ÀÌ·±°æ¿ì´Â °Á ¾ø¾ÖÀÚ.
return;
}
m_pDefender->SubDuel( m_pAttacker );//µà¾ó°á°ú º¸³»±â
m_pDefender->SetPosChanged( TRUE );
m_pAttacker->SetPosChanged( TRUE );
m_pAttacker->ClearDuel();
( (CUser*)m_pAttacker )->AddSetDuel( m_pAttacker );
m_pDefender->ClearDuel();
( (CUser*)m_pDefender )->AddSetDuel( m_pDefender );
m_pDefender->AddKillRecovery();
m_pAttacker->AddKillRecovery();
m_pAttacker->m_nAtkCnt = 0; // °ø°ÝÀÚÀÇ ¾îÅÃÄ«¿îÆ® Ŭ¸®¾î
m_pDefender->m_nAtkCnt = 0; // ¹æ¾îÀÚÀÇ ¾îÅÃÄ«¿îÆ® Ŭ¸®¾î
m_pDefender->DoPVPEnd( m_pAttacker, false ,m_dwMsg ); //
( (CUser*)m_pAttacker )->AddDuelStart( m_pDefender->m_idPlayer , 3 ); // ¼*·Î »ó´ë¹æ¿¡ ´ëÇÑ ¾ÆÀ̵𸸠º¸³»ÁÖ¸é µÈ´Ù. 3:À̱è, 4 : Áü
( (CUser*)m_pDefender )->AddDuelStart( m_pAttacker->m_idPlayer , 4 );
m_pAttacker->ClearDestObj(); // À̵¿¸ñÇ¥µµ Ŭ¸®¾î.
m_pDefender->ClearDestObj(); // À̵¿¸ñÇ¥µµ Ŭ¸®¾î.
}
#endif // __VER >= 8
// ½ºÄðÀ̺¥Æ® ó¸®
void CAttackArbiter::OnDiedSchoolEvent()
{
if( g_eLocal.GetState( EVE_SCHOOL_BATTLE ) == SBS_START2 ) // '/sbstart2'¿¡¼*¸¸ ÇǰÝ
{
if( m_pDefender->m_dwAuthorization < AUTH_GAMEMASTER )
{
if( !m_pDefender->IsMode( OBSERVE_MODE ) )
{
CGuild* pGuild = m_pDefender->GetGuild();
if( pGuild )
pGuild->m_nDead++;
}
m_pDefender->SetMode( OBSERVE_MODE );
g_UserMng.AddModifyMode( (CUser*)m_pDefender );
}
static EVENTITEM eventitem[3] =
{
II_GEN_FOO_INS_HOTDOG, 12,
II_GEN_REF_REF_TENTH, 7,
II_GEN_POT_DRI_VITAL900, 7,
};
for( int i = 0; i < 3; i++ )
{
CItemElem* pItemElem = new CItemElem;
pItemElem->m_dwItemId = eventitem[i].dwIndex;
pItemElem->m_nItemNum = (short)( eventitem[i].dwPrabability );
pItemElem->m_nHitPoint = pItemElem->GetProp()->dwEndurance;
pItemElem->SetSerialNumber();
CItem* pItem = new CItem;
pItem->m_pItemBase = pItemElem;
pItem->SetIndex( D3DDEVICE, pItemElem->m_dwItemId );
pItem->SetPos( m_pDefender->GetPos() );
pItem->SetAngle( (float)( xRandom( 360 ) ) );
m_pDefender->GetWorld()->ADDOBJ( pItem, TRUE, m_pDefender->GetLayer() );
}
}
}
BYTE CAttackArbiter::GetHandFlag( void )
{
BYTE cbHandFlag = 0x01; // µðÆúÆ®´Â ¿À¸¥¼ÕÀÌ´Ù .
if( m_dwAtkFlags & AF_RANGE ) // ȰÀÇ °æ¿ì ¹«Á¶°Ç ¿À¸¥¼Õ
return cbHandFlag;
if( m_dwAtkFlags & AF_GENERIC ) // ÆòŸÀ϶©
{
cbHandFlag = m_nParam & 0x03; // ÇÏÀ§ 2ºñÆ®¸¦ »©¿À¸é ¿À¸¥¼ÕÀ¸·Î Ä£°ÇÁö ¿Þ¼ÕÀ¸·ÎÄ£°ÇÁö ³ª¿Â´Ù.
if( cbHandFlag == 0 )
cbHandFlag = 0x01; // °ªÀÌ ¾øÀ¸¸é µðÆúÆ®´Â ¿À¸¥¼Õ
}
return cbHandFlag;
}
|
|
|
11/17/2012, 14:41
|
#6
|
elite*gold: 28
Join Date: Aug 2012
Posts: 2,335
Received Thanks: 471
|
#ifdef __MONSTER_WEAPON ganz am anfang wo ist das end if dazu?
|
|
|
11/17/2012, 15:15
|
#7
|
elite*gold: 5
Join Date: Oct 2012
Posts: 1,335
Received Thanks: 505
|
so hab 2 neue errors. der andere error ist nun weg
|
|
|
 |
Similar Threads
|
errors beim compilen der source
10/29/2012 - Flyff Private Server - 0 Replies
hey habe grade das weapon level system eingebaut und es kommen folgende errors:
C:\Users\Server\Desktop\Server\Source\Source\_Int erface\WndManager.cpp(5209): error C2447: '{': Funktionskopf fehlt - Parameterliste im alten Stil?
C:\Users\Server\Desktop\Server\Source\Source\_Int erface\tooltip.cpp(650): error C2065: 'CGaugeMaker': nichtdeklarierter Bezeichner
C:\Users\Server\Desktop\Server\Source\Source\_Int erface\tooltip.cpp(650): error C2065: 'pGaugeMaker': nichtdeklarierter Bezeichner...
|
Probleme beim compilen der Source
08/23/2012 - Flyff Private Server - 8 Replies
Hallo Community,
ich habe beim compilen der Source (habe mehrere Sources versucht, immer das geiche Problem).
Hier ein Beispiel aus dem BuildLog:
\Source\Neuer Ordner\_Common\scanner.cpp"
"\users\administrator\desktop\\source\neuer ordner\_network\net2\src\buffer.cpp"
".\globalgiftbox.cpp"
".\dpwldsrvr.cpp"
".\dpsrvr.cpp"
|
[Source] Error beim Compilen der Neuz
04/14/2012 - Flyff Private Server - 0 Replies
Hallo ich wollte heute mal die neuz neu compilen wegen kleinen änderungen, nun erhalte ich aber ein error von den ich 0 ahnung habe. ich bitte um hilfe^^
------ Build started: Project: Neuz, Configuration: Release Win32 ------
Linking...
DPClient.obj : error LNK2019: unresolved external symbol "public: __thiscall CWndColosseumMassage::CWndColosseumMassage(void)&q uot; (??0CWndColosseumMassage@@QAE@XZ) referenced in function "public: void __thiscall CDPClient::OnColosseumEnter(class CAr &)"...
|
Fehler beim compilen der RoC Source :\
01/24/2012 - Flyff Private Server - 3 Replies
Hallo ..!
Ich habe beim compilen Folgende Fehler bekommen ..
C:\Bloody Angels\Build\Program\_Common\Colosseum.cpp(346): warning C4018: '<' : signed/unsigned mismatch
C:\Bloody Angels\Build\Program\_Common\Colosseum.cpp(331): warning C4018: '<' : signed/unsigned mismatch
C:\Bloody Angels\Build\Program\_Common\Colosseum.cpp(313): warning C4018: '<' : signed/unsigned mismatch
C:\Bloody Angels\Build\Program\_Common\Colosseum.cpp(292): warning C4018: '<' : signed/unsigned mismatch...
|
[v15 Source]Fehler beim Compilen
07/17/2011 - Flyff Private Server - 12 Replies
Guten Tag ,
Habe folgende Fehler :
Diese aber nur in der Neuz und im LoginServer.
Wisst da mehr ?
Linkungen sind alle richtig gesetzt.
|
All times are GMT +1. The time now is 07:31.
|
|