/** * Return spear, shield and armour in use for a knight in one round. * @param unknown_type $knigth_id * @param unknown_type $armourPosition * @param unknown_type $shieldPosition * @param unknown_type $spearPosition * @return multitype:NULL */ public static function getCurrentEquipment4Round($knigth_id, $armourPosition = "null", $shieldPosition = self::POSITION_SHIELD, $spearPosition = self::POSITION_SPEAR) { $equipment = array('spear_object' => null, 'spear' => null, 'shield_object' => null, 'shield' => null, 'armour_object' => null, 'armour' => null); $sql = 'SELECT identificator, position FROM inventory WHERE knights_id = :knights_id AND (position = ' . $armourPosition . ' OR position = ' . $shieldPosition . ' OR position = ' . $spearPosition . ' )'; //echo $sql;die; $command = Yii::app()->db->createCommand($sql); $command->bindValue('knights_id', $knigth_id); $result = $command->queryAll(); foreach ($result as $element) { switch ($element['position']) { case Inventory::POSITION_SHIELD: $equipment['shield_object'] = ArmoursObjects::model()->findByPk($element['identificator']); $equipment['shield'] = Armours::model()->findByPk($equipment['shield_object']->armours_id); break; case Inventory::POSITION_SPEAR: $equipment['spear_object'] = SpearsObjects::model()->findByPk($element['identificator']); $equipment['spear'] = Spears::model()->findByPk($equipment['spear_object']->spears_id); break; default: $equipment['armour_object'] = ArmoursObjects::model()->findByPk($element['identificator']); $equipment['armour'] = Armours::model()->findByPk($equipment['armour_object']->armours_id); } } return $equipment; }
/** * knight's equipment are repaired automatically. Looking for equipment with pde loosed, calculate repair cost, substract to knight coins and add pde points. * Return if error * @param unknown_type $combat * @param unknown_type $knight * @return multitype:number boolean */ public static function autorepairObjectsEquipment(&$combat, &$knight) { // $output = array('errno' => 0, 'error' => '', 'automatic_repair' => true, 'repair_cost' => 0, 'not_enought_money' => false); //Prepared statement $sql = ''; //Load all items of inventory of knight $inventory = Inventory::model()->findAll('knights_id = :knights_id AND (type = ' . Inventory::EQUIPMENT_TYPE_ARMOUR . ' OR type = ' . Inventory::EQUIPMENT_TYPE_SPEAR . ' )', array(':knights_id' => $knight->id)); if (count($inventory)) { //For each item check maximun pde foreach ($inventory as $item) { //Load class of item if ($item['type'] == Inventory::EQUIPMENT_TYPE_ARMOUR) { $object = ArmoursObjects::model()->findByPk($item['identificator']); $classItem = Armours::model()->findByPk($object->armours_id); } else { $object = SpearsObjects::model()->findByPk($item['identificator']); $classItem = Spears::model()->findByPk($object->spears_id); } //echo "\n".$knight->name.": ".$classItem->name." PDE MAX (".$classItem->pde.") object pde (".$object->current_pde.") "; //Check if need a repair if ($object->current_pde < $classItem->pde) { //Check prize of reparation $percentPDEloose = 1 - $object->current_pde / $classItem->pde; $repair_cost = ceil($classItem->prize * $percentPDEloose); //echo "coins (".$knight->coins.") percent ($percentPDEloose) prize class item(".$classItem->prize.") repair cost (".$repair_cost.")"; //Check coins and cost if ($knight->coins > $repair_cost) { Yii::log('Reparando ' . $classItem->name . ' por ' . $repair_cost . ' MO'); //Add autorepair row $objectRepair = new ObjectRepairs(); $objectRepair->attributes = array('knights_id' => $knight->id, 'inventory_type' => $item['type'], 'combats_id' => $combat->id, 'object_identificator' => $item['identificator'], 'class_identificator' => $classItem->id, 'current_pde' => $object->current_pde, 'maximum_pde' => $classItem->pde, 'repair_cost' => $repair_cost, 'date' => date('Y-m-d H:m:s')); if (!$objectRepair->save()) { $output['errno'] = 2; $output['error'] .= $objectRepair->getErrors(); } //We can repair the object $object->current_pde = $classItem->pde; if (!$object->save()) { $output['errno'] = 4; } //Subtract coins $knight->coins -= $repair_cost; $output['repair_cost'] += $repair_cost; } else { //Upsss, knight has not enought money!! we break loop Yii::log('¡¡No se puede reparar!!'); $output['not_enought_money'] = true; break; } } } } else { $output['errno'] = 1; } //var_dump($output); return $output; }
public function actionShowPendingRoundDialog() { $output = array('errno' => 1, 'html' => ''); //Check session is enable if (!Yii::app()->user->isGuest) { //Check if user is in his page if (Yii::app()->user->knights_id == $this->knight->id) { //Check input if (isset($_GET['id']) && is_numeric($_GET['id']) && $_GET['id'] > 0) { //Search combat $combat = Combats::model()->with('rounds')->find('id=:id', array(':id' => $_GET['id'])); if ($combat) { //Check if status is enable if ($combat->status == Combats::STATUS_ENABLE) { //Check if user is in combat if (Yii::app()->user->knights_id == $combat->from_knight || Yii::app()->user->knights_id == $combat->to_knight) { //Check the last round is pending if ($combat->rounds[count($combat->rounds) - 1]->status == Rounds::STATUS_PENDING) { //cargamos el inventario del caballero $item_list = Inventory::model()->findAll('knights_id=:knights_id', array(':knights_id' => $this->knight->id)); $inventory = array(); foreach ($item_list as $item) { switch ($item->type) { case Inventory::EQUIPMENT_TYPE_ARMOUR: $armours_object = ArmoursObjects::model()->with(array('armours' => array('with' => array('type0', 'armoursMaterials', 'equipmentSize', 'equipmentQualities', 'equipmentRarity'))))->find('t.id=:id', array(':id' => $item->identificator)); $item_info['armours_id'] = $armours_object->armours->id; $item_info['name'] = $armours_object->armours->name; $item_info['armoursPDE'] = $armours_object->armours->pde; $item_info['current_pde'] = $armours_object->current_pde; $item_info['armours_type_name'] = $armours_object->armours->type0->name; $item_info['armoursMaterialName'] = $armours_object->armours->armoursMaterials->name; $item_info['armoursMaterialEndurance'] = $armours_object->armours->armoursMaterials->endurance; $item_info['armoursMaterialPrize'] = $armours_object->armours->armoursMaterials->prize; $item_info['armoursMaterialName'] = $armours_object->armours->armoursMaterials->name; $item_info['equipmentSizeName'] = $armours_object->armours->equipmentSize->name; $item_info['equipmentQualitiesName'] = $armours_object->armours->equipmentQualities->name; $item_info['equipmentRarityName'] = $armours_object->armours->equipmentRarity->name; $template = 'armour'; break; case Inventory::EQUIPMENT_TYPE_SPEAR: $spears_object = SpearsObjects::model()->with(array('spears' => array('with' => array('equipmentQualities', 'equipmentRarity', 'equipmentSize', 'spearsMaterials', 'spearsObjects'))))->find('t.id=:id', array(':id' => $item->identificator)); $item_info['spears_id'] = $spears_object->spears->id; $item_info['name'] = $spears_object->spears->name; $item_info['PDE'] = $spears_object->spears->pde; $item_info['current_pde'] = $spears_object->current_pde; $item_info['spears_damage'] = $spears_object->spears->damage; $item_info['spearPrize'] = $spears_object->spears->prize; $item_info['spearsMaterialName'] = $spears_object->spears->spearsMaterials->name; $item_info['equipmentQualitiesName'] = $spears_object->spears->equipmentQualities->name; $item_info['equipmentSizeName'] = $spears_object->spears->equipmentSize->name; $item_info['equipmentRarityName'] = $spears_object->spears->equipmentRarity->name; $template = 'spear'; break; case Inventory::EQUIPMENT_TYPE_TRICK: //FALTA DEFINIR LOS TRICKS!! $template = 'trick'; break; } $data_template = array('item' => $item, 'item_info' => $item_info); $inventory[$item->position] = $this->renderFile(Yii::app()->basePath . '/views/character/item_' . $template . '.php', $data_template, true); } //return html $output['html'] = $this->renderFile(Yii::app()->basePath . '/views/character/dialog_pending_round.php', array('inventory' => $inventory), true); $output['errno'] = 0; } else { $output['html'] = '<p>La última ronda no está pendiente.</p>'; } } else { $output['html'] = '<p>No participas en este combate.</p>'; } } else { $output['html'] = '<p>No se puede mostrar si el desafio no está en curso.</p>'; } } else { $output['html'] = '<p>No se ha encontrado el desafio.</p>'; } } else { $output['html'] = '<p>Los datos de entrada no tienen un formato válido.</p>'; } } else { $output['html'] = '<p>Sólo puedes toquetear tu caballero.</p>'; } } else { $output['html'] = '<p>Tu sesión ha expirado. Tienes que volver a hacer login.</p>'; } echo CJSON::encode($output); }