예제 #1
0
 /**
  * Make current controlled soldier attack an ennemy soldier
  *
  * @param int $soldierId Id of the soldier to attack
  */
 public function attackSoldier($soldierId)
 {
     $this->_db->beginTransaction();
     try {
         $attackAp = $this->_ruleset->get('soldier.apPerAttack');
         $personna = $this->_db->fetchFirstRequest('getPersonnaSoldier', array(':id' => $this->_data['ID']));
         if (empty($personna)) {
             $this->_messenger->add('error', $this->_lang->get('noPersonna'));
         } else {
             if (empty($personna['soldier_id'])) {
                 $this->_messenger->add('error', $this->_lang->get('notASoldier'));
             } else {
                 if ($personna['AP'] < $attackAp || $personna['soldier_ap'] < $attackAp) {
                     $this->_messenger->add('error', sprintf($this->_lang->get('notEnoughAP'), $personna['AP'] . ' - ' . $personna['soldier_ap'], $attackAp));
                 } else {
                     $target = new Soldier($soldierId, $this->_DI);
                     if (empty($target->ID)) {
                         $this->_messenger->add('error', $this->_lang->get('soldierNotFound'));
                     } else {
                         if ($personna['battlefield_id'] != $target->battlefield_id || abs($personna['X'] - $target->X) > 1 || abs($personna['Y'] - $target->Y) > 1) {
                             $this->_messenger->add('error', $this->_lang->get('targetTooFar'));
                         } else {
                             if ($personna['hive_id'] == $target->hive_id) {
                                 $this->_messenger->add('error', $this->_lang->get('invalidTarget'));
                             } else {
                                 $damages = $this->_ruleset->get('soldier.damages');
                                 $killed = $target->receiveDamage($damages);
                                 $this->_db->executeRequest('soldierUseAP', array(':id' => $personna['soldier_id'], ':ap' => $attackAp));
                                 $this->_db->executeRequest('personnaUseAP', array(':id' => $this->_data['ID'], ':ap' => $attackAp));
                                 // Create log
                                 $this->_db->executeRequest('attackSoldierLog', array(':user_id' => $this->_data['user_id'], ':battlefield_id' => $personna['battlefield_id'], ':by_id' => $personna['soldier_id'], ':by_X' => $personna['X'], ':by_Y' => $personna['Y'], ':target_id' => $soldierId, ':target_X' => $target->X, ':target_Y' => $target->Y, ':damages' => $damages, ':kill' => $killed));
                             }
                         }
                     }
                 }
             }
         }
     } catch (Exception $e) {
         $this->_db->rollBack();
         throw $e;
     }
     $this->_db->commit();
 }