public function ejecutar($id_usuario, $id_partido, $id_equipo) { $ret = 0; //Traer el array de efectos parent::ejecutar($id_usuario, $id_partido, $id_equipo); //Validar usuario $us = Usuarios::model()->findByPk($id_usuario); if ($us === null) { throw new Exception("Usuario incorrecto.", 404); } // Cojo el equipo del usuario $equipo = $us->equipos; // Modifico Los factores de ese partido $ret = min($ret, Partidos::aumentar_factores($id_partido, $equipo->id_equipo, "defensivo", Efectos::$datos_acciones['RetransmitirRRSS']['defensivo'])); //Modifico los recursos Del usuario if (Recursos::aumentar_recursos($id_usuario, "animo", Efectos::$datos_acciones['RetransmitirRRSS']['animo']) == 0) { $ret = min($ret, 0); } else { $ret = -1; } // Incorporo un registro a la tabla acciones turno si el usuario aun no esta en ella AccionesTurno::incorporarAccion($id_usuario, $id_partido, $id_equipo); //Finalizar función return $ret; }
/** * Ejecutar la accion * * @param int $id_usuario id del usuario que realiza la accion * @throws \Exception usuario no encontrado * @return int 0 si completada con exito ; -1 en caso contrario */ public function ejecutar($id_usuario, $id_partido, $id_equipo) { $ret = 0; //Traer el array de efectos parent::ejecutar($id_usuario, $id_partido, $id_equipo); //Validar usuario $us = Usuarios::model()->findByPk($id_usuario); if ($us === null) { throw new Exception("Usuario incorrecto.", 404); } // Modifico el animo del usuario $ret = min($ret, Recursos::aumentar_recursos($id_usuario, "animo", Efectos::$datos_acciones['DoblarApuesta']['animo'])); // Incorporo un registro a la tabla acciones turno si el usuario aun no esta en ella AccionesTurno::incorporarAccion($id_usuario, $id_partido, $id_equipo); //Finalizar función return $ret; }
public function ejecutar($id_usuario, $id_partido, $id_equipo) { $ret = 0; //Traer el array de efectos parent::ejecutar($id_usuario, $id_partido, $id_equipo); //Validar usuario $us = Usuarios::model()->findByPk($id_usuario); if ($us === null) { throw new Exception("Usuario incorrecto.", 404); } // Cojo el equipo del usuario $equipo = $us->equipos; // Modifico Los factores de ese partido $ret = min($ret, Partidos::aumentar_factores($id_partido, $equipo->id_equipo, "moral", Efectos::$datos_acciones['CorearEstadio']['moral'])); // Incorporo un registro a la tabla acciones turno si el usuario aun no esta en ella AccionesTurno::incorporarAccion($id_usuario, $id_partido, $id_equipo); //Finalizar función return $ret; }
private function bonifAnimo($equipo, $bonus) { /*$bonifParticipante = 3; $bonifNoParticipante = 1*/ try { $participantes = AccionesTurno::model()->findAllByAttributes(array('equipos_id_equipo' => $equipo, 'partidos_id_partido' => $this->id_partido)); $usuarios = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo' => $equipo)); $bonusAmbiente = $bonus * (pow(1.5, $this->ambiente + 1) / (4 + 0.7 * $this->ambiente)); //(1.5^(a+1))/(4+.7*a) foreach ($usuarios as $user) { //Esta bonificacion se le da a todos $rec = $user->recursos; $rec['animo'] = min(round($bonusAmbiente + $rec['animo']), $rec['animo_max']); $rec->save(); } foreach ($participantes as $participante) { //Esta se le da solo a los participantes $user = $participante->usuarios; $rec = $user->recursos; $rec['animo'] = min(round(3 * $bonusAmbiente + $rec['animo']), $rec['animo_max']); $rec->save(); } } catch (Exception $exc) { throw new Exception("Error al generar la bonificacion al animo de final de partido", 1); } }
/** * Usar accion en el partido * * Incorpora la accion, busca la participacion y suma influencia a la accion y * * @param $participacion * @param int $cantidad * @return void */ public static function usarPartido($id_usuario, $id_equipo, $id_partido, $habilidad, $res) { // Importar acciones Yii::import('application.components.Acciones.*'); // Restar recursos $res['dinero'] -= $habilidad['dinero']; $res['animo'] -= $habilidad['animo']; $res['influencias'] -= $habilidad['influencias']; $res['influencias_partido_bloqueadas'] += $habilidad['influencias']; $res->save(); //Incorporo la accion si ese usuario aun no ha participado AccionesTurno::incorporarAccion($id_usuario, $id_partido, $id_equipo); $participacion = AccionesTurno::buscarParticipacion($id_usuario, $id_partido, $id_equipo); //Sumo la influencia de esta accion a la que tenga acumulada AccionesTurno::sumarInfluencia($participacion, $habilidad->influencias); //Tomar nombre de habilidad para instanciación dinámica $nombreHabilidad = $habilidad->codigo; //echo '<pre>'.die(var_dump($id_partido)).'</pre>' ; //Llamar al singleton correspondiente y ejecutar dicha acción $nombreHabilidad::getInstance()->ejecutar($id_usuario, $id_partido, $id_equipo); }
/** * Ejecuta la accion de partido pulsada. Este método será llamado por Ajax durante el partido, * de modo que lo único que hará será devolver los datos de éxito o fallo para informar al * usuario. * * Cualquier habilidad resta los recursos iniciales al jugador, además, * * - Por ser una habilidad de partido se ejecuta al momento * * > El id del jugador y la aficion a la que pertence se recogen de la variable de sesion * * - CODIGOS DEVUELTOS - * * 0 -> Habilidad no encontrada * 1 -> Habilidad no desbloqueada * 2 -> Habilidad en cooldown * 3 -> Recursos insuficientes * 4 -> Error de equipo * 5 -> Error de partido, puede ser que no esté en juego o que no sea el siguiente del equipo * 6 -> La acción no es de partido * 7 -> Acción ejecutada con éxito * 8 -> Error general * * @param int $id_accion id de la habilidad que se ejecuta * * @return void */ public function actionUsarPartido($id_accion) { // Actualizar recursos de usuario Recursos::model()->actualizaRecursos(Yii::app()->user->usIdent); //Comenzar transaccion $trans = Yii::app()->db->beginTransaction(); try { // Importar elementos necesarios Yii::import('application.components.Acciones.*'); Yii::import('application.components.Partido'); //Cojo el id_usuario $id_usuario = Yii::app()->user->usIdent; //Obtener modelo de Habilidades $habilidad = Habilidades::model()->findByPk($id_accion); //Habilidad no encontrada if ($habilidad === null) { $trans->rollback(); // Devolver error de acción no encontrada $data = array('ok' => false, 'error' => 'Habilidad incorrecta'); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } //Habilidad encontrada //Obtener modelo de Desbloqueadas $desbloqueada = Desbloqueadas::model()->findByAttributes(array('usuarios_id_usuario' => $id_usuario, 'habilidades_id_habilidad' => $id_accion)); //Si no esta desbloqueada para el usuario, error if ($desbloqueada === null) { $trans->rollback(); // Devolver error de habilidad no desbloqueada $data = array('ok' => false, 'error' => 'Acción no desbloqueada'); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } //Si esta desbloqueada //Comprovar que no esta en cooldown if ($desbloqueada['fin_del_cooldown'] > ($now = time())) { $trans->rollback(); // Devolver error de cooldown $data = array('ok' => false, 'error' => 'Habilidad en cooldown', 'cooldownEnd' => $desbloqueada['fin_del_cooldown']); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } else { //se actualiza el cooldown $desbloqueada['fin_del_cooldown'] = $now + $habilidad['cooldown_fin']; $desbloqueada->save(); } //Si esta disponible //Obtener modelo de Recursos $res = Recursos::model()->findByAttributes(array('usuarios_id_usuario' => $id_usuario)); //Si no son suficientes recursos cancelar transaccion y notificar al usuario if ($res['dinero'] < $habilidad['dinero'] || $res['animo'] < $habilidad['animo'] || $res['influencias'] < $habilidad['influencias']) { $trans->rollback(); // Devolver error de recursos insuficientes $data = array('ok' => false, 'error' => 'Recursos insuficientes'); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } $usuario = Usuarios::model()->findByPk($id_usuario); //Si tenemos suficientes recursos comprobamos el tipo de acción if ($habilidad['tipo'] == Habilidades::TIPO_PARTIDO) { //Sacar id de equipo y partido para poder ejecutar la accion $id_equipo = Yii::app()->user->usAfic; $equipo = Equipos::model()->findByAttributes(array('id_equipo' => $id_equipo)); if ($equipo === null) { $trans->rollback(); // Devolver error de equipo incorrecto $data = array('ok' => false, 'error' => 'Equipo incorrecto'); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } $siguientepartido = $equipo->sigPartido; $id_partido = $siguientepartido->id_partido; // Comprobar si el partido está en juego if ($siguientepartido->turno <= Partido::PRIMER_TURNO || $siguientepartido->turno > Partido::ULTIMO_TURNO) { $trans->rollback(); // Devolver error de partido incorrecto $data = array('ok' => false, 'error' => 'Partido incorrecto'); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } // Todo correcto, ejecutar acción de partido AccionesTurno::usarPartido($id_usuario, $id_equipo, $id_partido, $habilidad, $res); // EXP: sumar experencia al usuario $usuario->sumarExp(Usuarios::MEDIA_EXP); } else { // Tipo inválido $trans->rollback(); // Devolver error de tipo inválido $data = array('ok' => false, 'error' => 'Acción incorrecta'); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } // Finalizar transacción $trans->commit(); // Todo correcto $data = array('ok' => true, 'message' => 'Acción ejecutada correctamente', 'cooldownEnd' => $desbloqueada['fin_del_cooldown']); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } catch (Exception $e) { $trans->rollback(); // Devolver error general $data = array('ok' => false, 'error' => 'Error al ejecutar la acción '); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } }