コード例 #1
0
ファイル: Unit.cpp プロジェクト: Rizoo/snoxd-koserver
short Unit::GetACDamage(int damage, Unit *pTarget)
{
	// This isn't applicable to NPCs.
	if (isNPC() || pTarget->isNPC())
		return damage;

#ifdef EBENEZER
	if (pTarget->isDead())
		return 0;

	CUser * pUser  = TO_USER(this);
	uint8 weaponSlots[] = { RIGHTHAND, LEFTHAND };

	foreach_array (slot, weaponSlots)
	{
		_ITEM_TABLE * pWeapon = pUser->GetItemPrototype(slot);
		if (pWeapon == nullptr)
			continue;

		if (pWeapon->isDagger())
			damage -= damage * pTarget->m_sDaggerR / 200;
		else if (pWeapon->isSword())
			damage -= damage * pTarget->m_sSwordR / 200;
		else if (pWeapon->isAxe())
			damage -= damage * pTarget->m_sAxeR / 200;
		else if (pWeapon->isMace())
			damage -= damage * pTarget->m_sMaceR / 200;
		else if (pWeapon->isSpear())
			damage -= damage * pTarget->m_sSpearR / 200;
		else if (pWeapon->isBow())
			damage -= damage * pTarget->m_sBowR / 200;
	}
コード例 #2
0
ファイル: GameObj.cpp プロジェクト: lansdon/Fortress2D
// Process calculated launches for individual objects.   (currently this is for processing AI launches)
void GameObj::doLaunch() {
	GameObj* newAmmo = nextAmmo();
	if(newAmmo != NULL && launch.launchTriggered) {
	
		if(!isNPC()) {
			launch.angle += 90;
		}

		//newAmmo->body->SetActive(true);
		//newAmmo->body->SetAwake(true);
		//newAmmo->goSettings.setHP(newAmmo->goSettings.getHPMax());
		//newAmmo->goSettings.setHP(1);
		//setGroundContact(false);
		newAmmo->resetObjectState();

		newAmmo->goSettings.setInitVecAngle(launch.angle);
		newAmmo->goSettings.setCurrentVecAngle(launch.angle);
		newAmmo->goSettings.setVelocityMax(0);
		newAmmo->goSettings.setInitLinearVelocity(launch.velocity); 
		newAmmo->body->SetTransform(this->body->GetPosition(), Util::deg2Rad(launch.angle));
		newAmmo->body->SetLinearVelocity(launch.velocity);
		newAmmo->body->SetAngularDamping(.01);
		newAmmo->goSettings.setTeam(goSettings.isNPC());
		newAmmo->body->GetFixtureList()->SetFilterData(newAmmo->getFixtureCollisionFilter());
		launch.launchTriggered = false;
	}
}
コード例 #3
0
ファイル: GameObj.cpp プロジェクト: lansdon/Fortress2D
void GameObj::addContact(GameObj *enemy) {
	if(enemy == NULL) {
		groundContact = true;
	}
	else if(enemy->isNPC() != isNPC()) {
//		contacts++; 
		if(enemy->getType() != Settings::OBJ_T_BULLET) {
			addEnemy(enemy); 
		}
	}
}
コード例 #4
0
ファイル: character.cpp プロジェクト: th3conc3pt3ur/Radonia
void Character::collisionAction(Character *c) {
	if(!c || (c->isNPC() || !isNPC()) || (c->isPlayer() || !isPlayer())) {
		// Stop movement timer
		m_movementTimer.stop();
		
		// Update collision state
		m_inCollision = true;
		
		// Exit function to avoid problems if c == NULL
		return;
	}
	
	if(c->isMonster() && isPlayer()) {
		// Hurt player
		hurt(m_x + m_hitboxW / 2 - c->x() + c->hitboxW() / 2, m_y + m_hitboxH / 2 - c->y() + c->hitboxH() / 2);
	}
}
コード例 #5
0
ファイル: ordershield.m.C プロジェクト: Grimoric/UODEMO
TRIGGER( equip )(obj equippedon)
{
  if(isNPC(equippedon))
  {
    return(0x01);
  }
  if(getCompileFlag(0x01))
  {
    if(hasScript(equippedon, "orderguild"))
    {
      return(0x01);
    }
  }
  else
  {
    if(Q4SN(equippedon) >= 0x05)
    {
      return(0x01);
    }
  }
  Q4HV();
  return(0x00);
}