BOOL CWeapon::Attack(LPOBJ lpObj, LPOBJ lpTargetObj, CMagicInf * lpMagic, int iCriticalDamage, int iActionType) { int iSkill = 0; int iSkillSuccess = TRUE; BYTE MsgDamage = 0; int ManaChange = 0; if ( lpMagic != NULL ) { iSkill = lpMagic->m_Skill; } if ( (lpTargetObj->Authority & 2) == 2 ) { return FALSE; } if ( lpObj->MapNumber != lpTargetObj->MapNumber ) { return FALSE; } #if (__GENS_SYSTEM__ == 1) if (gGensSystem.GetFriendlyFire() && gGensSystem.GensMap(lpObj->MapNumber)) { if (lpObj->Type == OBJ_USER && lpTargetObj->Type == OBJ_USER && lpObj->m_GensInfo.btFamily == lpTargetObj->m_GensInfo.btFamily) { return false; } } #endif if ( lpObj->MapNumber == MAP_INDEX_PKFIELD && lpObj->m_iDuelUser == -1) { return FALSE; } if ( lpTargetObj->Type == OBJ_USER ) { if ( gObjIsConnected(lpTargetObj) == FALSE ) { return FALSE; } } if ( gObjAttackQ(lpTargetObj) == 0 ) { return FALSE; } int MSBFlag = 0; if ( iCriticalDamage != 0 ) { MsgDamage = 3; } else { MsgDamage = 0; } int iAttackDamage = this->GetAttackDamage(lpObj->Class); int iTargetDefense = lpTargetObj->m_Defense; int iDefenseDown = gObjGetTotalValueOfEffect(lpObj,ADD_OPTION_DEFENSEDOWN); iTargetDefense -= (iTargetDefense * iDefenseDown)/100; BOOL bAllMiss = FALSE; if ( this->MissCheck(lpObj, lpTargetObj, iSkill, iSkillSuccess, bAllMiss) == FALSE ) { return FALSE; } if ( bAllMiss != FALSE ) { iAttackDamage = (iAttackDamage * 30)/100; } if ( lpTargetObj->DamageMinus != 0 ) { int lc11 = iAttackDamage; iAttackDamage -= (iAttackDamage * lpTargetObj->DamageMinus)/100; } int iTargetLevel = lpObj->Level / 10; if ( iAttackDamage < iTargetLevel ) { if ( iTargetLevel < 1 ) { iTargetLevel = 1; } iAttackDamage = iTargetLevel; } if ( lpTargetObj->m_SkillNumber == 18 ) { if ( iAttackDamage > 1 ) { iAttackDamage = iAttackDamage >> 1; } }
BOOL CWeapon::Attack(LPOBJ lpObj, LPOBJ lpTargetObj, CMagicInf * lpMagic, int iCriticalDamage, int iActionType) { int iSkill = 0; int iSkillSuccess = TRUE; BYTE MsgDamage = 0; int ManaChange = 0; if ( lpMagic != NULL ) { iSkill = lpMagic->m_Skill; } if ( (lpTargetObj->Authority & 2) == 2 ) { return FALSE; } if ( lpObj->MapNumber != lpTargetObj->MapNumber ) { return FALSE; } if ( lpTargetObj->Type == OBJ_USER ) { if ( gObjIsConnected(lpTargetObj) == FALSE ) { return FALSE; } } if ( gObjAttackQ(lpTargetObj) == 0 ) { return FALSE; } lpObj->m_TotalAttackCount++; int MSBFlag = 0; if ( iCriticalDamage != 0 ) { MsgDamage = 3; } else { MsgDamage = 0; } int iAttackDamage = this->GetAttackDamage(lpObj->Class); int iSkillDefense = lpTargetObj->m_SkillDefense; int iTargetDefense = lpTargetObj->m_Defense + iSkillDefense; iTargetDefense -= (iTargetDefense * lpTargetObj->m_SkillMagumReduceDefense)/100; BOOL bAllMiss = FALSE; if ( this->MissCheck(lpObj, lpTargetObj, iSkill, iSkillSuccess, bAllMiss) == FALSE ) { return FALSE; } if ( bAllMiss != FALSE ) { iAttackDamage = (iAttackDamage * 30)/100; } if ( lpTargetObj->DamageMinus != 0 ) { int lc11 = iAttackDamage; iAttackDamage -= (iAttackDamage * lpTargetObj->DamageMinus)/100; } int iTargetLevel = lpObj->Level / 10; if ( iAttackDamage < iTargetLevel ) { if ( iTargetLevel < 1 ) { iTargetLevel = 1; } iAttackDamage = iTargetLevel; } if ( lpTargetObj->m_SkillNumber == 18 ) { if ( iAttackDamage > 1 ) { iAttackDamage = iAttackDamage >> 1; } }
// ---------------------------------------------------------------------------------------------------------------------- BOOL CDarkSpirit::Attack(LPOBJ lpObj, LPOBJ lpTargetObj, CMagicInf * lpMagic, int criticaldamage, int iActionType) { int skillSuccess = 0; LPOBJ lpCallObj; LPOBJ lpCallTargetObj; unsigned char MsgDamage = 0; int ManaChange = 0; int iTempShieldDamage = 0; int iTotalShieldDamage = 0; if ( (lpTargetObj->Authority&2) == 2 ) return FALSE; if ( lpObj->MapNumber != lpTargetObj->MapNumber ) return FALSE; #if(GS_CASTLE) if( g_Crywolf.GetCrywolfState() == 3 || g_Crywolf.GetCrywolfState() == 5 ) { if(CRYWOLF_MAP_RANGE(lpTargetObj->MapNumber)) { if(lpTargetObj->Type == OBJ_MONSTER) return FALSE; } } #endif int skill = 0; if ( lpMagic ) skill = lpMagic->m_Skill; skillSuccess = TRUE; if ( lpObj->GuildNumber > 0 ) { if ( lpObj->lpGuild ) { if ( lpObj->lpGuild->WarState ) { if ( lpObj->lpGuild->WarType == 1 ) { if ( !GetBattleSoccerGoalMove(0) ) { return TRUE; } } } } } if ( lpTargetObj->Type == OBJ_MONSTER ) { if ( lpTargetObj->Class == 200 ) { if ( skill ) { gObjMonsterStateProc(lpTargetObj, 7, lpObj->m_Index, 0); } else { gObjMonsterStateProc(lpTargetObj, 6, lpObj->m_Index, 0); } return TRUE; } } if ( lpObj->Type == OBJ_USER ) { if ( !gObjIsConnected(lpObj)) { return FALSE; } } if ( lpTargetObj->Type == OBJ_USER ) { if ( !gObjIsConnected(lpTargetObj)) { return FALSE; } } if ( lpObj->Type == OBJ_USER && lpTargetObj->Type == OBJ_MONSTER ) // PLAYER VS MONSTER { if ( lpObj->m_RecallMon >= 0 ) { if ( lpObj->m_RecallMon == lpTargetObj->m_Index ) { return FALSE; } } } if ( !gObjAttackQ(lpTargetObj)) return FALSE; lpObj->m_TotalAttackCount++; if ( this->CheckAttackArea(lpObj, lpTargetObj) == FALSE ) return FALSE; lpCallObj = lpObj; lpCallTargetObj = lpTargetObj; if ( lpTargetObj->Type == OBJ_MONSTER ) { if ( lpTargetObj->m_RecallMon >= 0 ) { lpCallTargetObj = &gObj[lpTargetObj->m_RecallMon]; } } if ( this->PkCheck(lpCallObj, lpTargetObj) == FALSE ) return FALSE; int Strength = lpObj->Strength + lpObj->AddStrength; int Dexterity = lpObj->Dexterity + lpObj->AddDexterity; int Vitality = lpObj->Vitality + lpObj->AddVitality; int Energy = lpObj->Energy + lpObj->AddEnergy; int MSBFlag = 0; if ( criticaldamage ) { MsgDamage = 3; } else { MsgDamage = 0; } BOOL bAllMiss = FALSE; int AttackDamage = 0; if ( g_ShieldSystemOn == TRUE ) { if ( lpObj->Type == OBJ_USER && lpTargetObj->Type == OBJ_USER ) { if ( !this->MissCheckPvP(lpObj, lpTargetObj, skill, skillSuccess, bAllMiss) ) { return FALSE; } } else if ( !this->MissCheck(lpObj, lpTargetObj, skill, skillSuccess, bAllMiss) ) { return FALSE; } } else if ( !this->MissCheck(lpObj, lpTargetObj, skill, skillSuccess, bAllMiss) ) { return FALSE; } int targetdefense = this->GetTargetDefense(lpObj, lpTargetObj, MsgDamage); //AttackDamage = this->GetAttackDamage(lpObj, targetdefense, bIsOnDuel, criticaldamage); AttackDamage = this->GetAttackDamage(lpObj, targetdefense, 0, criticaldamage); if ( criticaldamage == 0 && iActionType == 0 ) { AttackDamage /= 1.5; } if ( bAllMiss ) { AttackDamage = ( AttackDamage * 30 ) / 100; } if ( lpTargetObj->DamageMinus ) { int beforeDamage = AttackDamage; AttackDamage -= ( ( AttackDamage * (int)lpTargetObj->DamageMinus) / 100 ); } int tlevel = lpObj->Level / 10; if ( AttackDamage < tlevel ) { if ( tlevel < 1 ) { tlevel = 1; } AttackDamage = tlevel; } if ( lpTargetObj->m_SkillNumber == 18 ) { if ( AttackDamage > 1 ) { AttackDamage >>= 1; } }
BOOL CDarkSpirit::Attack(LPOBJ lpObj, LPOBJ lpTargetObj, CMagicInf * lpMagic, int criticaldamage, int iActionType) { int skillSuccess = 0; LPOBJ lpCallObj; LPOBJ lpCallTargetObj; int MsgDamage = 0; int ManaChange = 0; int iTempShieldDamage = 0; int iTotalShieldDamage = 0; if ( (lpTargetObj->Authority&2) == 2 ) return FALSE; if ( lpObj->MapNumber != lpTargetObj->MapNumber ) return FALSE; #if (__GENS_SYSTEM__ == 1) if (gGensSystem.GetFriendlyFire() && gGensSystem.GensMap(lpObj->MapNumber)) { if (lpObj->Type == OBJ_USER && lpTargetObj->Type == OBJ_USER && lpObj->m_GensInfo.btFamily == lpTargetObj->m_GensInfo.btFamily) { return false; } } #endif if ( IF_MAP_RANGE(lpObj->MapNumber) && !g_ImperialGuardian.IsAttackAbleMonster(lpTargetObj->m_Index) ) return FALSE; if ( lpObj->MapNumber == MAP_INDEX_PKFIELD && lpObj->m_iDuelUser == -1) return FALSE; #if (GS_CASTLE == 1) if(g_Crywolf.GetCrywolfState() == CRYWOLF_STATE_READY || g_Crywolf.GetCrywolfState() == CRYWOLF_STATE_END) { if( ((lpTargetObj->MapNumber == MAP_INDEX_CRYWOLF_FIRSTZONE) ? TRUE : FALSE) && lpTargetObj->Type == OBJ_MONSTER) { return FALSE; } } #endif int skill = 0; if ( lpMagic ) skill = lpMagic->m_Skill; skillSuccess = TRUE; if ( lpObj->GuildNumber > 0 ) { if ( lpObj->lpGuild ) { if ( lpObj->lpGuild->WarState ) { if ( lpObj->lpGuild->WarType == 1 ) { if ( !GetBattleSoccerGoalMove(0) ) { return TRUE; } } } } } if ( lpTargetObj->Type == OBJ_MONSTER ) { if ( lpTargetObj->Class == 200 ) { if ( skill ) { gObjMonsterStateProc(lpTargetObj, 7, lpObj->m_Index, 0); } else { gObjMonsterStateProc(lpTargetObj, 6, lpObj->m_Index, 0); } return TRUE; } } if ( lpObj->Type == OBJ_USER ) { if ( !gObjIsConnected(lpObj)) { return FALSE; } } if ( lpTargetObj->Type == OBJ_USER ) { if ( !gObjIsConnected(lpTargetObj)) { return FALSE; } } if ( lpObj->Type == OBJ_USER && lpTargetObj->Type == OBJ_MONSTER ) // PLAYER VS MONSTER { if ( lpObj->m_RecallMon >= 0 ) { if ( lpObj->m_RecallMon == lpTargetObj->m_Index ) { return FALSE; } } } if ( !gObjAttackQ(lpTargetObj)) return FALSE; #if (ENABLETEST_ARCA == 1) if ( g_ArcaBattle.IsArcaBattleServer() && !g_AcheronGuardianEvent.IsPlayStart() && !g_ArcaBattle.IsEnableAttackObelisk(*lpObj, lpTargetObj->Class)) return 0; #endif #if (GS_CASTLE == 1) if ( g_CastleSiege.GetCastleState() == CASTLESIEGE_STATE_STARTSIEGE && lpObj->m_btCsJoinSide > 0 && lpObj->m_btCsJoinSide == lpTargetObj->m_btCsJoinSide) { return FALSE; } #endif if ( this->CheckAttackArea(lpObj, lpTargetObj) == FALSE ) return FALSE; lpCallObj = lpObj; lpCallTargetObj = lpTargetObj; if ( lpTargetObj->Type == OBJ_MONSTER ) { if ( lpTargetObj->m_RecallMon >= 0 ) { lpCallTargetObj = &gObj[lpTargetObj->m_RecallMon]; } } if ( this->PkCheck(lpCallObj, lpTargetObj) == FALSE ) return FALSE; int Strength = lpObj->Strength + lpObj->AddStrength; int Dexterity = lpObj->Dexterity + lpObj->AddDexterity; int Vitality = lpObj->Vitality + lpObj->AddVitality; int Energy = lpObj->Energy + lpObj->AddEnergy; BOOL bIsOnDuel = gObjDuelCheck(lpObj, lpTargetObj); #if (CUSTOM_OLYMP!=1) if ( bIsOnDuel ) { lpObj->m_iDuelTickCount = GetTickCount(); lpTargetObj->m_iDuelTickCount = GetTickCount(); } #endif int MSBFlag = 0; if ( criticaldamage == 1 ) { MsgDamage = 3; } else if( criticaldamage == 2 ) { MsgDamage = 2; } else { MsgDamage = 0; } BOOL bAllMiss = FALSE; int AttackDamage = 0; if ( g_ShieldSystemOn == TRUE ) { if ( lpObj->Type == OBJ_USER && lpTargetObj->Type == OBJ_USER ) { if ( !this->MissCheckPvP(lpObj, lpTargetObj, skill, skillSuccess, bAllMiss) ) { return FALSE; } } else if ( !this->MissCheck(lpObj, lpTargetObj, skill, skillSuccess, bAllMiss) ) { return FALSE; } } else if ( !this->MissCheck(lpObj, lpTargetObj, skill, skillSuccess, bAllMiss) ) { return FALSE; } int targetdefense = this->GetTargetDefense(lpObj, lpTargetObj, MsgDamage); if( targetdefense > 0 ) { float fpercent = rand()%100; if( fpercent < lpObj->m_MPSkillOpt.MpsDarkSpiritStr6 ) { targetdefense = 0; MsgDamage = 1; } } AttackDamage = this->GetAttackDamage(lpObj, targetdefense, bIsOnDuel, criticaldamage,(criticaldamage==2) ? TRUE : FALSE); if ( criticaldamage == 0 && iActionType == 0 ) { AttackDamage = (int)(AttackDamage/1.5f); } if ( bAllMiss ) { AttackDamage = ( AttackDamage * 30 ) / 100; } if ( lpTargetObj->DamageMinus ) { int beforeDamage = AttackDamage; AttackDamage -= ( ( AttackDamage * (int)lpTargetObj->DamageMinus) / 100 ); } int tlevel = lpObj->Level / 10; if ( AttackDamage < tlevel ) { if ( tlevel < 1 ) { tlevel = 1; } AttackDamage = tlevel; } if ( lpTargetObj->m_SkillNumber == 18 ) { if ( AttackDamage > 1 ) { AttackDamage >>= 1; } }