示例#1
0
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;
}
示例#3
0
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);
	}	
}
示例#4
0
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);
}
示例#5
0
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);
}