Ejemplo n.º 1
0
/// Wenn ein Kampf gewonnen wurde
void nofAggressiveDefender::WonFighting()
{
	//addon BattlefieldPromotion active? -> increase rank!
	if(GAMECLIENT.GetGGS().isEnabled(ADDON_BATTLEFIELD_PROMOTION))
		IncreaseRank();
    // Angreifer tot
    attacker  = NULL;

    // Ist evtl. unser Heimatgebäude zerstört?
    if(!building)
    {
        // Rumirren
        state = STATE_FIGUREWORK;
        StartWandering();
        Wander();

        // Ziel Bescheid sagen
        if(attacked_goal)
            attacked_goal->UnlinkAggressiveDefender(this);

        return;
    }

    // Angreifer ist tot, nach anderen suchen, die in meiner Nähe sind und mich evtl noch mit denen kloppen
    MissionAggressiveDefendingLookForNewAggressor();
}
void nofAggressiveDefender::AttackerLost()
{
	attacker = NULL;

	// Wenn wir auf die gewartet hatten, müssen wir uns einen neuen Angreifer suchen
	if(state == STATE_WAITINGFORFIGHT)
		MissionAggressiveDefendingLookForNewAggressor();
}
/// Wenn ein Kampf gewonnen wurde
void nofAggressiveDefender::WonFighting()
{
	// Angreifer tot
	attacker  = NULL;

	// Ist evtl. unser Heimatgebäude zerstört?
	if(!building)
	{
		// Rumirren
		state = STATE_FIGUREWORK;
		StartWandering();
		Wander();

		// Ziel Bescheid sagen
		if(attacked_goal)
			attacked_goal->UnlinkAggressiveDefender(this);

		return;
	}

	// Angreifer ist tot, nach anderen suchen, die in meiner Nähe sind und mich evtl noch mit denen kloppen
	MissionAggressiveDefendingLookForNewAggressor();
}
void nofAggressiveDefender::MissAggressiveDefendingWalk()
{
    // Ist evtl. unser Heimatgebäude zerstört?
    if(!building)
    {
        InformTargetsAboutCancelling();

        // Rumirren
        state = STATE_FIGUREWORK;
        StartWandering();
        Wander();
        return;
    }

    // Wenns das Zielgebäude nich mehr gibt, gleich nach Hause gehen!
    if(!attacked_goal)
    {
        ReturnHomeMissionAggressiveDefending();
        return;
    }

    // Does the attacker still exists?
    if(!attacker)
    {
        // Look for a new one
        MissionAggressiveDefendingLookForNewAggressor();
        return;
    }

    // Does he still want to fight?
    if(!attacker->IsReadyForFight())
    {
        // Look for a new one
        CancelAtAttacker();
        MissionAggressiveDefendingLookForNewAggressor();
        return;
    }

    // Look for enemies
    if(FindEnemiesNearby())
    {
        // Enemy found -> abort, because nofActiveSoldier handles all things now
        // Note it is ok, if the enemy is our attacker.
        // If we win, we will either see, that the attacker is busy or be notified because he did
        // If we loose, we will tell him later
        return;
    }

    RTTR_Assert(pos != attacker->GetPos()); // If so, why was it not found?

    // Calc next walking direction
    unsigned char dir = gwg->FindHumanPath(pos, attacker->GetPos(), 100, true);

    if(dir == 0xFF)
    {
        // No route found
        // Look for new attacker
        CancelAtAttacker();
        MissionAggressiveDefendingLookForNewAggressor();
    } else
    {
        // Continue walking towards him
        StartWalking(Direction(dir));
    }
}
void nofAggressiveDefender::MissAggressiveDefendingWalk()
{
	// Ist evtl. unser Heimatgebäude zerstört?
	if(!building)
	{
		attacker = NULL;

		// Ziel Bescheid sagen
		if(attacked_goal)
		{
			attacked_goal->UnlinkAggressiveDefender(this);
			attacked_goal = 0;
		}

		// Rumirren
		state = STATE_FIGUREWORK;
		StartWandering();
		Wander();

		

		return;
	}

	// Wenns das Zielgebäude nich mehr gibt, gleich nach Hause gehen!
	if(!attacked_goal)
	{
		ReturnHomeMissionAggressiveDefending();
		return;
	}

	// Does the attacker still exists?
	if(!attacker)
	{
		// Look for a new one
		MissionAggressiveDefendingLookForNewAggressor();
		return;
	}

	// Does he still want to fight?
	if(!attacker->IsReadyForFight())
	{
		// Look for a new one
		MissionAggressiveDefendingLookForNewAggressor();
		return;
	}

	// Look for enemies
	if(FindEnemiesNearby())
		// Enemy found -> abort, because nofActiveSoldier handles all things now
		return;

	// Calc next walking direction
	dir = gwg->FindHumanPath(x,y,attacker->GetX(),
			attacker->GetY(),100,true);

	if(dir == 0xFF)
	{
		// No route found
		// Look for new attacker
		MissionAggressiveDefendingLookForNewAggressor();
	}
	else
	{
		// Continue walking towards him
		StartWalking(dir);
	}
}