/// 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); } }