File "Mines.php"
Full Path: /home/trinadezambia/public_html/gambling/app/Games/Mines.php
File size: 4.33 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace App\Games;
use App\Constants\Status;
use App\Models\GuessBonus;
class Mines extends Game {
protected $alias = 'mines';
protected $hasCustomCompleteLogic = true;
protected $extraValidationRule = [
'mines' => 'required|integer|min:1|max:20',
];
protected function gameResult() {
$probableWin = $this->demoPlay
? $this->game->probable_win_demo
: $this->game->probable_win;
$random = mt_rand(0, 100);
if ($random <= $probableWin) {
$win = Status::WIN;
$result = $random;
$availableMine = floor($result / 4);
if (($this->request->mines + $availableMine) > 25) {
$moreMines = ($this->request->mines + $availableMine) - 25;
$availableMine -= $moreMines;
}
} else {
$win = Status::LOSS;
$result = 0;
$availableMine = 0;
}
$this->extraResponseOnStart = array_merge($this->extraResponseOnStart, [
'available_mine' => $availableMine,
]);
$winLossData['win_status'] = $win;
$winLossData['result'] = $result;
return $winLossData;
}
protected function customCompleteLogic($gameLog) {
if ($this->request->type == 'mine') {
return $this->goldMine($gameLog, $this->request?->count, $this->request?->is_blast);
} else {
return $this->collect($gameLog, $gameLog->gold_count);
}
}
private function goldMine($gameLog, $count = 0, $isBlast = null) {
$res['mines'] = $gameLog->mines;
$res['gold_count'] = $gameLog->gold_count;
$res['mine_image'] = getImage(activeTemplate(true) . 'images/mines/mines.png');
$res['gold_image'] = getImage(activeTemplate(true) . 'images/mines/gold.png');
$res['gold_transparent'] = getImage(activeTemplate(true) . 'images/mines/gold_transparent.png');
if (!$gameLog->result) {
$res['sound'] = 'mine.mp3';
$gameLog->win_status = Status::LOSS;
$gameLog->mine_available = 0;
$gameLog->save();
} else {
if ($gameLog->mine_available == 0 || $isBlast == 'blast') {
if ($isBlast == 'blast') {
$gameLog->gold_count = $count;
$gameLog->mine_available = $gameLog->mines - $count;
}
$gameLog->win_status = Status::LOSS;
$res['sound'] = 'mine.mp3';
} else {
$gameLog->gold_count += 1;
$gameLog->mine_available -= 1;
$winAmount = 0;
$mineBonus = GuessBonus::where('alias', $this->game->alias)->where('chance', $gameLog->mines)->first();
if ($mineBonus) {
$winAmount = $gameLog->invest + ($gameLog->invest * ($gameLog->gold_count * $mineBonus->percent) / 100);
}
$gameLog->win_amo = $winAmount;
$gameLog->save();
$res['type'] = 'success';
$res['sound'] = 'win.wav';
return [
'should_return' => true,
'data' => $res,
];
}
}
$this->extraResponseOnEnd = array_merge($this->extraResponseOnEnd, $res);
return ['should_return' => false];
}
private function collect($gameLog, $count = 0) {
if ($count) {
$mineBonus = GuessBonus::where('alias', $this->game->alias)->where('chance', $gameLog->mines)->first();
if ($mineBonus) {
$winAmount = $gameLog->invest + ($gameLog->invest * ($count * $mineBonus->percent) / 100);
}
$gameLog->win_amo = $winAmount ?? 0;
$gameLog->win_status = Status::WIN;
$gameLog->gold_count = $count;
$gameLog->mine_available = $gameLog->mines - $count;
$gameLog->save();
}
$res['sound'] = 'win.wav';
$res['success'] = 'Congratulation! you won ' . getAmount($gameLog->win_amo) . ' ' . gs('cur_text');
$this->extraResponseOnEnd = array_merge($this->extraResponseOnEnd, $res);
return ['should_return' => false];
}
}