void CBuffEffect::PoisonEffect(LPOBJ lpObj,BYTE PoisonRate) { int DecreaseHealthPoint = 0; int DecreaseShiledPoint = 0; DecreaseHealthPoint = (int)(PoisonRate * lpObj->Life / 100.0); DecreaseShiledPoint = DecreaseHealthPoint; if(lpObj->lpAttackObj != 0 && lpObj->Type == OBJ_USER && lpObj->lpAttackObj->Type == OBJ_USER) { if(lpObj->iShield-DecreaseShiledPoint > 0) { lpObj->iShield -= DecreaseShiledPoint; DecreaseHealthPoint = 0; } else { DecreaseHealthPoint = DecreaseShiledPoint - lpObj->iShield; DecreaseShiledPoint = lpObj->iShield; lpObj->Life -= DecreaseHealthPoint; lpObj->iShield = 0; } } else { lpObj->Life -= DecreaseHealthPoint; DecreaseShiledPoint = 0; } if(lpObj->Life < 0.0f) lpObj->Life = 0.0f; if(lpObj->lpAttackObj != 0) gObjLifeCheck(lpObj, lpObj->lpAttackObj, DecreaseHealthPoint, 2, 0, 0, 1, DecreaseShiledPoint); }
BOOL TMonsterSkillElement::ApplyElementNormalAttack(int iIndex, int iTargetIndex) { LPOBJ lpObj = &gObj[iIndex]; LPOBJ lpTargetObj = &gObj[iTargetIndex]; if ( lpTargetObj->Connected < PLAYER_PLAYING ) return FALSE; if ( this->m_iNullifiedSkill == -1 ) this->m_iNullifiedSkill = 0; if ( this->m_iIncAndDecType != -1 && this->m_iIncAndDecValue != -1 ) { if ( lpTargetObj->pInventory[9].m_Type != ITEMGET(this->m_iIncAndDecType, this->m_iIncAndDecValue) && lpTargetObj->pInventory[10].m_Type != ITEMGET(this->m_iIncAndDecType, this->m_iIncAndDecValue) && lpTargetObj->pInventory[11].m_Type != ITEMGET(this->m_iIncAndDecType, this->m_iIncAndDecValue) ) { lpTargetObj->Life = 0; gObjLifeCheck(lpTargetObj, lpObj, 100, 0, 0, 0, 0 ,0); return FALSE; } } if ( this->m_iNullifiedSkill == 0 ) { gObjAttack(lpObj, lpTargetObj, 0, 0, 0, 0 ,0); } else { gObjAddMsgSendDelay(lpObj, 55, iTargetIndex, this->m_iNullifiedSkill, 0); } return FALSE; }
void CBuffEffect::AbsorbHP(LPOBJ lpObj,int iREDUCE_HP) { int ReduceHP = 0; int ReduceShield = 0; ReduceHP = iREDUCE_HP; ReduceShield = ReduceHP; if( lpObj->Live == FALSE ) { return; } if( lpObj->lpAttackObj != NULL && lpObj->Type == OBJ_USER && lpObj->lpAttackObj->Type == OBJ_USER ) { ReduceShield = ReduceHP * 90 / 100; ReduceHP -= ReduceShield; if( lpObj->iShield - ReduceShield > 0 ) { lpObj->iShield -= ReduceShield; lpObj->Life -= ReduceHP; } else { ReduceHP = ReduceHP + (ReduceShield - lpObj->iShield); ReduceShield = lpObj->iShield; lpObj->Life -= ReduceHP; lpObj->iShield = 0; } lpObj->lpAttackObj->Life += ReduceHP; if( lpObj->lpAttackObj->Life > (lpObj->lpAttackObj->MaxLife + lpObj->lpAttackObj->AddLife) ) lpObj->lpAttackObj->Life = (lpObj->lpAttackObj->MaxLife + lpObj->lpAttackObj->AddLife); GCReFillSend(lpObj->lpAttackObj->m_Index, (WORD)lpObj->lpAttackObj->Life, -1, 0, lpObj->lpAttackObj->iShield); } else { ReduceShield = 0; lpObj->Life -= ReduceHP; } if( lpObj->Life < 0.0f) { lpObj->Life = 0; } if( lpObj->lpAttackObj != NULL ) { gObjLifeCheck(lpObj,lpObj->lpAttackObj,ReduceHP,3,0,0,0,ReduceShield); } }
void CKanturuMaya::KanturuMayaAct_Hands() { int TickCount = GetTickCount() - this->m_iMayaSkillTime; if ( TickCount < 20000 ) return; this->m_iMayaSkillTime = GetTickCount(); if ( this->m_iMayaObjIndex < 0 || this->m_iMayaObjIndex > OBJMAX ) // #errot change to OBJMAX-1 return; for ( int iCount=OBJ_STARTUSERINDEX;iCount < OBJMAX;iCount++) { if ( gObj[iCount].Type == OBJ_USER && gObjIsConnected(iCount) && gObj[iCount].MapNumber == MAP_INDEX_KANTURU_BOSS ) { KANTURU_UTIL.NotifyKanturuWideAreaAttack(this->m_iMayaObjIndex, iCount, 1); TMonsterSkillManager::UseMonsterSkill(this->m_iMayaObjIndex, iCount, 1,-1,0); if ( gObj[iCount].pInventory[10].m_Type == ITEMGET(13,38) && gObj[iCount].pInventory[10].m_Durability != 0.0f ) { continue; } if ( gObj[iCount].pInventory[11].m_Type == ITEMGET(13,38) && gObj[iCount].pInventory[11].m_Durability != 0.0f ) { continue; } if ( gObj[iCount].MapNumber == MAP_INDEX_KANTURU_BOSS ) // #warning unuseful if { LPOBJ lpMayaHandObj = &gObj[this->m_iMayaObjIndex]; gObj[iCount].Life = 0; gObjLifeCheck(&gObj[iCount], lpMayaHandObj, (int)gObj[iCount].Life, 0, 0, 0, 0, 0); LogAddTD("[ KANTURU ][ BrokenShower ] [%s][%s] User Dying cause NOT wearing MoonStone Pandent", gObj[iCount].AccountID, gObj[iCount].Name); } } } LogAddTD("[ KANTURU ][ BrokenShower ] Skill Using : Index(%d) %s", this->m_iMayaObjIndex, gObj[this->m_iMayaObjIndex].Name); }
void CBuffEffect::GiveDamageEffect(LPOBJ lpObj,int Damage) { int DecreaseHealthPoint = 0; int DecreaseShiledPoint = 0; DecreaseHealthPoint = Damage; DecreaseShiledPoint = DecreaseHealthPoint; if( !lpObj->Live ) return; if(lpObj->lpAttackObj != 0 && lpObj->Type == OBJ_USER && lpObj->lpAttackObj->Type == OBJ_USER) { DecreaseShiledPoint = 90 * DecreaseHealthPoint / 100; DecreaseHealthPoint -= DecreaseShiledPoint; if(lpObj->iShield-DecreaseShiledPoint > 0) { lpObj->iShield -= DecreaseShiledPoint; lpObj->Life -= DecreaseHealthPoint; } else { DecreaseHealthPoint += DecreaseShiledPoint - lpObj->iShield; DecreaseShiledPoint = lpObj->iShield; lpObj->Life -= DecreaseHealthPoint; lpObj->iShield = 0; } } else { DecreaseShiledPoint = 0; lpObj->Life -= DecreaseHealthPoint; } if(lpObj->Life < 0.0f) lpObj->Life = 0.0f; if(lpObj->lpAttackObj != 0) gObjLifeCheck(lpObj, lpObj->lpAttackObj, DecreaseHealthPoint, 3, 0, 0, 0, DecreaseShiledPoint); }