Example #1
0
 public function gerarNovoDuelo($params)
 {
     $this->uses('Hero');
     $rand = rand(0, 1);
     $mode = 0;
     $oficial = 1;
     switch ($mode) {
         case 0:
             //Sem Restrição
             $heroId1 = (int) Hero::select('id', array(), 'rand()', NULL, 1)[0]['id'];
             $heroId2 = (int) Hero::select('id', array(), 'rand()', NULL, 1)[0]['id'];
             break;
         case 1:
             //Sentinel x Scourge
             $heroId1 = (int) Hero::select('id', array('filiacao' => $rand ? 'SENTINEL' : 'SCOURGE'), 'rand()', NULL, 1)[0]['id'];
             $heroId2 = (int) Hero::select('id', array('filiacao' => $rand ? 'SCOURGE' : 'SENTINEL'), 'rand()', NULL, 1)[0]['id'];
             break;
         case 2:
             //Sentinel x Scourge | para apenas os que não jogaram X vezes como jogador/oponente | X = 1
             $count = (int) Hero::nativeQuery("SELECT count(*) as n FROM hero WHERE id NOT IN (SELECT jogador FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ") AND id NOT IN (SELECT oponente FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ")")[0]->n;
             if ($count < 2) {
                 return json_encode(NULL);
             }
             $heroId1 = Hero::nativeQuery("SELECT id FROM hero WHERE filiacao = '" . ($rand ? 'SENTINEL' : 'SCOURGE') . "' AND (id NOT IN (SELECT jogador FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ") AND id NOT IN (SELECT oponente FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ")) ORDER BY rand() LIMIT 1");
             $heroId2 = Hero::nativeQuery("SELECT id FROM hero WHERE filiacao = '" . ($rand ? 'SCOURGE' : 'SENTINEL') . "' AND (id NOT IN (SELECT jogador FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ") AND id NOT IN (SELECT oponente FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ")) ORDER BY rand() LIMIT 1");
             $heroId1 = $heroId1 ? (int) $heroId1[0]->id : NULL;
             $heroId2 = $heroId2 ? (int) $heroId2[0]->id : NULL;
             break;
         case 3:
             // para apenas os que jogaram X vezes como jogador/oponente | X = 1
             $count = (int) Hero::nativeQuery("SELECT count(*) as n FROM hero WHERE id NOT IN (SELECT jogador FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ") AND id NOT IN (SELECT oponente FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ")")[0]->n;
             if ($count < 2) {
                 return json_encode(NULL);
             }
             $heroId1 = Hero::nativeQuery("SELECT id FROM hero WHERE id NOT IN (SELECT jogador FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ") AND id NOT IN (SELECT oponente FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ") ORDER BY rand() LIMIT 1");
             $heroId1 = $heroId1 ? (int) $heroId1[0]->id : NULL;
             $heroId2 = Hero::nativeQuery("SELECT id FROM hero WHERE id NOT IN (SELECT jogador FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ") AND id NOT IN (SELECT oponente FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ") AND id <> {$heroId1} ORDER BY rand() LIMIT 1");
             $heroId2 = $heroId2 ? (int) $heroId2[0]->id : NULL;
             break;
         case 4:
             // Sentinel x Scourge | para apenas os que jogaram como jogador jogarão como oponente e vice-versa
             $heroId1 = Hero::nativeQuery("SELECT id FROM hero WHERE filiacao = '" . ($rand ? 'SENTINEL' : 'SCOURGE') . "' AND id NOT IN (SELECT jogador FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ") ORDER BY rand() LIMIT 1");
             $heroId2 = Hero::nativeQuery("SELECT id FROM hero WHERE filiacao = '" . ($rand ? 'SCOURGE' : 'SENTINEL') . "' AND id NOT IN (SELECT oponente FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ") ORDER BY rand() LIMIT 1");
             $heroId1 = $heroId1 ? (int) $heroId1[0]->id : NULL;
             $heroId2 = $heroId2 ? (int) $heroId2[0]->id : NULL;
             break;
         case 5:
             // para apenas os que jogaram como jogador jogarão como oponente e vice-versa
             $heroId1 = Hero::nativeQuery("SELECT id FROM hero WHERE id NOT IN (SELECT jogador FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ") ORDER BY rand() LIMIT 1");
             $heroId1 = $heroId1 ? (int) $heroId1[0]->id : NULL;
             $heroId2 = Hero::nativeQuery("SELECT id FROM hero WHERE id NOT IN (SELECT oponente FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ") AND id <> {$heroId1} ORDER BY rand() LIMIT 1");
             $heroId2 = $heroId2 ? (int) $heroId2[0]->id : NULL;
             break;
         case 6:
             // Sentinel (jogador) x Scourge (oponente) | para apenas os que jogaram como jogador jogarão como oponente e vice-versa
             $heroId1 = Hero::nativeQuery("SELECT id FROM hero WHERE filiacao = 'SENTINEL' AND id NOT IN (SELECT jogador FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ") ORDER BY rand() LIMIT 1");
             $heroId2 = Hero::nativeQuery("SELECT id FROM hero WHERE filiacao = 'SCOURGE' AND id NOT IN (SELECT oponente FROM duelo" . ($oficial === NULL ? "" : " WHERE oficial = {$oficial}") . ") ORDER BY rand() LIMIT 1");
             $heroId1 = $heroId1 ? (int) $heroId1[0]->id : NULL;
             $heroId2 = $heroId2 ? (int) $heroId2[0]->id : NULL;
             break;
     }
     //$hero1 = Hero::load($heroIds[ rand(0, count($heroIds)-1) ]);
     //$hero2 = Hero::load($heroIds[ rand(0, count($heroIds)-1) ]);
     $hero1 = Hero::load($heroId1);
     $hero2 = Hero::load($heroId2);
     if (!$hero1 || !$hero2) {
         return json_encode(NULL);
     }
     return json_encode(array($hero1, $hero2));
 }