Merge branch 'DevelopMadara'

This commit is contained in:
Hepatica
2024-04-07 03:12:57 +02:00
24 changed files with 1579 additions and 61 deletions

363
.gitignore vendored Normal file
View File

@@ -0,0 +1,363 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Oo]ut/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd

View File

@@ -0,0 +1,307 @@
.bet-button {
border: none;
padding: 10px 20px;
margin: 5px;
border-radius: 10px;
color: white;
font-weight: bold;
cursor: pointer;
transition: transform 0.1s ease;
outline: none;
}
/* Цвета для кнопок */
.bet-button.red {
background-color: #863443;
}
.bet-button.green {
background-color: #2D4940;
}
.bet-button.black {
background-color: #202333;
}
/* Стили для нажатой кнопки */
.bet-button:active {
transform: scale(0.95);
/* Уменьшение при нажатии */
}
.bet-button.active {
opacity: 0.7; /* Пример изменения стиля активной кнопки */
}
/* Можно добавить тени для кнопок, чтобы они выглядели объемнее */
.bet-button {
margin: 1.2% 0 0 5.8%;
margin-bottom:1vh;
box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.2);
}
/* Стиль для тени при нажатии (опционально) */
.bet-button:active {
box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.2);
}
.double-start {
z-index: 1;
border-radius: 20px;
background: #1D223E;
box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);
width: 42vh;
height: 37vh;
border: 1px solid #262C55;
margin: 2.6%;
margin-top: 0px;
}
.double-game {
z-index: 1;
border-radius: 20px;
width: 69%;
height: 94%;
}
.double-ui-component {
display: flex;
align-items: center;
background-color: #25325A;
border-radius: 15px;
/* padding: 10px 20px; */
padding-right: 2vh;
padding-bottom: 1vh;
padding-top: 1vh;
padding-left: 2vh;
margin-bottom: 1vh;
max-width: 300px;
color: white;
font-family: Arial, sans-serif;
/* background: linear-gradient(to right, #1C213390 50%, #2F5139); */
}
.double-ui-component-gradient {
background: linear-gradient(to right, #1C213390 50%, #2F5139);
}
/* .double-ui-component img {} */
.double-ui-component .double-username {
flex-grow: 1;
text-align: left;
margin-left: 1vh;
font-size: 18px;
font-family: Montserrat;
font-weight: bold;
color: #515D83;
}
.double-ui-component .double-score {
display: flex;
align-items: center;
}
.double-score {
font-size: 20px;
font-family: Montserrat;
font-weight: bold;
color: #748985;
}
.double-img-user {
margin-top: 6px;
}
.double-ui-component .double-score img {
width: 3vh;
height: 3vh;
margin-left: 10px;
}
.double-members-ingame-red {
overflow-y: auto;
background: linear-gradient(to bottom right,
#A9373C,
#1C2133 20%);
z-index: 1;
border: 2px solid #3B4260;
border-radius: 15px;
box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);
margin-top: 1vh;
width: 100%;
height: 49vh;
/* height: 94%; */
padding: 2vh;
}
.double-members-ingame-green {
overflow-y: auto;
background: linear-gradient(to bottom right,
#345D3B,
#1C2133 20%);
z-index: 1;
border: 2px solid #3B4260;
border-radius: 15px;
box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);
margin-top: 1vh;
width: 100%;
height: 49vh;
/* height: 94%; */
padding: 2vh;
}
.double-members-ingame-black {
overflow-y: auto;
background: linear-gradient(to bottom right,
#1B1A1A,
#1C2133 26%);
z-index: 1;
border: 2px solid #3B4260;
border-radius: 15px;
box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);
margin-top: 1vh;
margin-top: 1vh;
width: 100%;
/* height: 94%; */
height: 49vh;
padding: 2vh;
}
.double-members-flex-container {
display: flex;
justify-content: space-between;
align-items: center;
color: white;
margin-bottom: 2vh;
}
.double-red-box {
display: flex;
align-items: baseline;
font-size: 18px;
font-family: Montserrat;
font-weight: bold;
color: #B64848;
}
.double-white-box {
display: flex;
align-items: baseline;
font-size: 18px;
font-family: Montserrat;
font-weight: bold;
color: FEEBEB;
}
.double-green-box {
display: flex;
align-items: baseline;
font-size: 18px;
font-family: Montserrat;
font-weight: bold;
color: #5EA25C;
}
.double-number-color {
color: #56629A;
font-weight: bold;
font-size: 18px;
font-family: Montserrat;
}
.double-red-box span {
font-size: larger;
/* Or any specific size */
margin-left: 5px;
/* Spacing between RED and X2 */
}
.double-user-icon {
display: flex;
align-items: center;
}
.double-user-icon .double-user-icon-span {
background-image: url('../../../icons-games/double-game/MembersInGame.png');
width: 20px;
height: 20px;
margin-right: 5px;
}
.double-game {
z-index: 1;
border-radius: 20px;
width: 69%;
height: 94%;
}
.double-game-main-box {
border-radius: 10px;
border: 1px solid #262C55;
padding-top: 4vh;
padding-bottom: 4vh;
padding-left: 0vh !important;
padding-right: 0vh !important;
background: #1A1F37;
margin-bottom: 1vh !important;
}
.double-carousel {
z-index: 1;
position: relative;
background: #2E2D37;
box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);
width: 100%;
margin-top: 1px;
border: 1vh solid #2E2D37;
border-right: 0vh !important;
border-left: 0vh !important;
height: 95%;
}
.container-double-history-text {
display: flex;
}
.double-history-text {
background-color: #728DF8;
border: none;
color: #0E1220;
padding-right: 1vh;
padding-left: 1vh;
font-size: 16px;
margin: 4px 2px;
border-radius: 5px;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
font-size: 18px;
font-family: Montserrat;
font-weight: bold;
}
.double-carousel-arrow {
position: absolute;
bottom: -3vh;
left: 50%;
transform: translateX(-50%);
color: #728DF8;
font-size: 24px;
}
.double-carousel-arrow-upper {
position: absolute;
top: -3vh;
left: 50%;
transform: translateX(-50%) rotate(180deg);
color: #728DF8;
font-size: 24px;
}
.double-game-history-main-box {
border-radius: 20px;
border: 1px solid #262C55;
padding-top: 1vh;
padding-bottom: 0vh;
padding-left: 1vh;
padding-right: 0vh;
background: #1A1F37;
}

View File

@@ -47,17 +47,12 @@
.carousel-arrow { .carousel-arrow {
position: absolute; position: absolute;
bottom: -20px; bottom: -20px;
/* Регулируйте положение стрелки относительно нижнего края карусели */
left: 50%; left: 50%;
/* Центрирование стрелки по горизонтали */
transform: translateX(-50%); transform: translateX(-50%);
/* Дополнительное центрирование, чтобы точка указывала точно на центр */
color: #728DF8; color: #728DF8;
/* Цвет стрелки */
font-size: 24px; font-size: 24px;
/* Размер стрелки */
/* Добавьте любые дополнительные стили, такие как цвет фона, границы и т.д. */
} }
.jackpot-useringame-list{ .jackpot-useringame-list{
margin-top: 3.5%; margin-top: 3.5%;
overflow-y: auto; overflow-y: auto;

View File

@@ -150,7 +150,8 @@
#diamonds-input { #diamonds-input {
/* width: 347px; /* width: 347px;
height: 38px; */ height: 38px; */
width: 37vh; /* width: 37vh; */
width: 36vh;
height: 4vh; height: 4vh;
} }

View File

@@ -97,7 +97,7 @@
.bg-early{ .bg-early{
border-radius: 40px; border-radius: 40px;
background: #969B9E; background: #EF4444;
box-shadow: 4px 4px 4px 0px rgba(0, 0, 0, 0.25); box-shadow: 4px 4px 4px 0px rgba(0, 0, 0, 0.25);
} }
@@ -357,7 +357,7 @@
.gamemode__twoline--first__element { .gamemode__twoline--first__element {
width: 100%; width: 100%;
margin: 2% 3.6% 0 5.5%; margin: 2% 3.6% 0 5.5%;
min-height: 180px; min-height: 209px;
} }
.linecontent-3 { .linecontent-3 {
@@ -370,23 +370,13 @@
color: #fff; color: #fff;
text-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); text-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
font-family: Montserrat Alternates; font-family: Montserrat Alternates;
font-size: 80px; font-size: 60px;
font-weight: 700; font-weight: 700;
text-transform: uppercase; text-transform: uppercase;
padding: 4.5% 2.2%; padding: 4.5% 2.2%;
} }
.gamemode__twoline--first__element .container {
display: flex;
justify-content: center;
align-items: center;
}
.gamemode__twoline--first__element .container a {
margin-right: 10%;
padding: 12px 10px;
margin-bottom: 3%;
}
.gamemode__twoline--two__element { .gamemode__twoline--two__element {
margin-top: 2%; margin-top: 2%;
@@ -406,6 +396,21 @@
.cumming_soon--img { .cumming_soon--img {
margin-bottom: 4%; margin-bottom: 4%;
} }
.gamemode__twoline--two__element {
margin-top: 2%;
width: 100%;
min-height: 180px;
}
.gamemode__twoline--first__element .container {
display: flex;
justify-content: center;
}
.gamemode__twoline--first__element .container a {
margin-right: 10%;
}
/* /GameMode */ /* /GameMode */
@@ -430,7 +435,7 @@
} }
.title-twoline { .title-twoline {
font-size: 60px; font-size: 40px;
} }
.line__img__jackpot { .line__img__jackpot {
@@ -472,11 +477,7 @@
width: 80px; width: 80px;
} }
.gamemode__twoline--first__element .container a {
margin-right: 10%;
padding: 2px 11px 11px 11px;
margin-bottom: 3%;
}
.line__btn__jackpot { .line__btn__jackpot {
border-radius: 16px; border-radius: 16px;
@@ -506,7 +507,7 @@
} }
.title-twoline { .title-twoline {
font-size: 40px; font-size: 20px;
} }
.line__img__jackpot { .line__img__jackpot {
@@ -549,11 +550,7 @@
width: 80px; width: 80px;
} }
.gamemode__twoline--first__element .container a {
margin-right: 10%;
padding: 2px 11px 11px 11px;
margin-bottom: 3%;
}
.line__btn__jackpot { .line__btn__jackpot {
border-radius: 10px; border-radius: 10px;
@@ -575,15 +572,16 @@
height: 265px; height: 265px;
} }
.gamemode__twoline--first__element {
width: 100%;
margin: 0 3.6% 0 5.5%;
min-height: 60px;
}
.gamemode__twoline--two__element { .gamemode__twoline--two__element {
margin-top: 0; margin-top: 0;
width: 100%; width: 100%;
min-height: 60px; min-height: 60px;
} }
.gamemode__twoline--first__element {
margin-top: 0;
width: 100%;
min-height: 60px;
}
} }

View File

@@ -76,3 +76,56 @@
background: red; /* Цвет фона трека для Firefox */ background: red; /* Цвет фона трека для Firefox */
height: 8px; /* Высота трека для Firefox */ height: 8px; /* Высота трека для Firefox */
} }
/* toggle in label designing */
.toggle {
position : relative ;
display : flex;
width : 60px;
height : 32px;
background-color: #000413;
border-radius: 5px;
justify-content: center;
align-items: center;
}
/* After slide changes */
.toggle:after {
content: '';
position: absolute;
width: 22px;
height: 22px;
border-radius: 5px;
display: flex;
justify-content: center;
align-items: center;
align-content: center;
background-color: #EF4444;
top: 5px;
left: 6px;
transition: all 0.5s;
}
/* Toggle text */
.toggle p {
font-family: Arial, Helvetica, sans-serif;
font-weight: bold;
}
/* Checkbox checked effect */
.checkbox:checked + .toggle::after {
left : 34px;
}
/* Checkbox checked toggle label bg color */
/* Checkbox vanished */
.checkbox {
display : none;
}

View File

@@ -109,6 +109,22 @@ button {
grid-gap: 0.625rem; grid-gap: 0.625rem;
} }
.content-grid--double {
display: grid;
grid-auto-columns: 1fr;
grid-template-columns: 0.35fr repeat(5, 1fr) 1fr;
grid-template-rows: auto 0fr repeat(4, 1fr);
grid-template-areas:
"menu header header header header header header"
"menu double double double double double chat"
"menu double double double double double chat"
"menu double double double double double chat"
"menu double double double double double chat"
"menu double double double double double chat"
"menu double double double double double chat";
grid-gap: 0.625rem;
}
.grid-crash { .grid-crash {
display: grid; display: grid;
grid-template-columns: 0.35fr repeat(5, 1fr) 1fr; grid-template-columns: 0.35fr repeat(5, 1fr) 1fr;
@@ -211,6 +227,12 @@ button {
margin: 0.625rem 2.438rem 1.125rem 1.125rem; */ margin: 0.625rem 2.438rem 1.125rem 1.125rem; */
} }
.double {
display: flex;
grid-area: double;
}
.about { .about {
grid-area: about; grid-area: about;
@@ -279,7 +301,7 @@ button {
grid-area: help; grid-area: help;
display: flex; display: flex;
/* height:99%; */ /* height:99%; */
height:86vh; height: 86vh;
border-radius: 3.125rem; border-radius: 3.125rem;
background: #17181C; background: #17181C;
box-shadow: 0.25rem 0.25rem 0.25rem 0px rgba(0, 0, 0, 0.25); box-shadow: 0.25rem 0.25rem 0.25rem 0px rgba(0, 0, 0, 0.25);
@@ -314,6 +336,7 @@ button {
height: 35%; height: 35%;
z-index: 0; z-index: 0;
} }
/* /Crash */ /* /Crash */
/* Media */ /* Media */

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -29,10 +29,14 @@ export function ConnectToChat() {
return; return;
} }
if (dataObject.MessageType == 'DoubleGameState') {
eventBus.emit('doubleGame', event.data)
return;
}
if (dataObject.MessageType == "CrashGameState") { if (dataObject.MessageType == "CrashGameState") {
eventBus.emit('crash', event.data); eventBus.emit('crash', event.data);
return; return;
} }
if (Array.isArray(dataObject.CurrentGame.PlayerList)) { if (Array.isArray(dataObject.CurrentGame.PlayerList)) {
@@ -41,7 +45,7 @@ export function ConnectToChat() {
} }
} catch (error) { } catch (error) {
void(error); void (error);
} }
}; };

View File

@@ -0,0 +1,69 @@
import { BackendApiUrl } from '@/properties/Сonfig.js';
import {
GetCookie
} from "@/assets/js/storage/CookieStorage.js";
export async function GetNewestDoubleGames() {
try {
const response = await fetch(`${BackendApiUrl}/GameDouble/GetNewestDoubleGames`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
redirect: 'follow'
})
if (!response.ok) {
console.log('Fetch error:', response.status)
}
return await response
}
catch (error) {
console.log('Fetch error')
}
}
export async function JoinGame(amount, betColor) {
let betColorInt = 0;
if (betColor == "red") {
betColorInt = 0;
}
if (betColor == "green") {
betColorInt = 1;
}
if (betColor == "black") {
betColorInt = 2;
}
const data = {
UserCredentials: {
SearchToken: GetCookie("SearchToken"),
AUTHTOKEN: GetCookie("AUTHTOKEN")
},
bet: amount,
betColor: betColorInt
}
try {
const response = await fetch(`${BackendApiUrl}/GameDouble/JoinGame`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data),
redirect: 'follow'
})
if (!response.ok) {
console.log('Fetch error:', response.status)
}
return await response.json()
}
catch (error) {
console.log('Fetch error')
}
}

View File

@@ -9,7 +9,8 @@
<!-- <div class="fotosloti"><a href="#"><img src="../assets/icons-menu/slots-icon.svg" ></a></div> --> <!-- <div class="fotosloti"><a href="#"><img src="../assets/icons-menu/slots-icon.svg" ></a></div> -->
<a href="#" @click="$router.push({ name: 'jackpot' })"><img class="menu__content--jackpot-icon" src="../assets/icons-menu/jackpot-icon.svg"></a> <a href="#" @click="$router.push({ name: 'jackpot' })"><img class="menu__content--jackpot-icon" src="../assets/icons-menu/jackpot-icon.svg"></a>
<a href="#" @click="$router.push({ name: 'crash' })"><img class="menu__content--cruch-icon" src="../assets/icons-menu/crush-icon.svg"></a> <a href="#" @click="$router.push({ name: 'crash' })"><img class="menu__content--cruch-icon" src="../assets/icons-menu/crush-icon.svg"></a>
<a href="#"><img class="menu__content--chest-icon" src="../assets/icons-menu/case-icon.png"></a> <a href="#" @click="$router.push({ name: 'double' })"><img class="menu__content--chest-icon" src="../assets/icons-menu/case-icon.png"></a>
<!-- <a href="#" @click="$router.push({ name: 'saper' })"><img class="menu__content--bomb-icon" src="../assets/icons-menu/bomb-icon.svg"></a> --> <!-- <a href="#" @click="$router.push({ name: 'saper' })"><img class="menu__content--bomb-icon" src="../assets/icons-menu/bomb-icon.svg"></a> -->
<a href="#" @click="$router.push({ name: 'saper' })"><img class="menu__content--bomb-icon" src="../assets/icons-menu/bomb-icon.svg"></a> <a href="#" @click="$router.push({ name: 'saper' })"><img class="menu__content--bomb-icon" src="../assets/icons-menu/bomb-icon.svg"></a>
</div> </div>

View File

@@ -29,6 +29,8 @@
</li> </li>
</transition-group> </transition-group>
</ul> </ul>
</div> </div>
<writechat-component @send="ClaimDatamsg"></writechat-component> <writechat-component @send="ClaimDatamsg"></writechat-component>
<!-- <div class="chat__mute-button"> <!-- <div class="chat__mute-button">

View File

@@ -22,6 +22,7 @@ export const eventBus = mitt()
// const app = createApp(App) // const app = createApp(App)
const app = createApp(siteIsOff ? SiteOff : App); const app = createApp(siteIsOff ? SiteOff : App);
if (!siteIsOff) { if (!siteIsOff) {
app.use(router); app.use(router);
app.mixin(Mixins); app.mixin(Mixins);
@@ -32,6 +33,20 @@ if (!siteIsOff) {
// app.use(router) // app.use(router)
// app.mixin(Mixins) // app.mixin(Mixins)
app.config.warnHandler = (msg) => {
// Intercept specific warning message and suppress it
if (msg.includes('Property or method "clickedBtn" is not defined on the instance but referenced during render.')) {
// You can simply return to ignore it, or even better, log it somewhere if you have a logging system
return;
}
// Log or handle other warnings as you see fit
};
app.use(router)
app.mixin(Mixins)
app.mount('#app') app.mount('#app')
// app.provide(eventBus) // app.provide(eventBus)

View File

@@ -79,15 +79,19 @@
<div class="gamemode__twolines"> <div class="gamemode__twolines">
<div class="gamemode__twoline--first__element bg-early"> <div class="gamemode__twoline--first__element bg-early">
<ul> <ul>
<li v-for="mode in twolinefirstelementGameMode" :key="mode"> <li v-for="mode in twolinetwoelementGameMode" :key="mode.id">
<div :class="'linecontent-' + mode.id"> <div :class="'linecontent-' + mode.id">
<h3 class="title-twoline">скоро</h3> <h3 class="title-twoline">рулетка</h3>
</div> </div>
<div class="container"> <div class="container">
<a href="#" class="cumming_soon_btn" <!-- <a href="#" class="line__btn">play <span class="line__btn--elm">></span></a> -->
<a
href="#"
@click="$router.push({ name: 'double' })"
class="line__btn--crash"
>play <span class="line__btn--elm"></span></a >play <span class="line__btn--elm"></span></a
> >
<img src="@/assets/icons-gamemodes/slots-icon.png" class="cumming_soon--img" /> <img class="crash--img" src="@/assets/icons-gamemodes/slots-icon.png" />
</div> </div>
</li> </li>
</ul> </ul>

View File

@@ -12,19 +12,32 @@
<button id="volume-down" @click="volumeDown">-</button> <button id="volume-down" @click="volumeDown">-</button>
</div> </div>
--> -->
<div class="volume-section"> <div class="classssboxxxx">
<h1 class="volume-text">Звук</h1> <div class="volume-section">
<input <h1 class="volume-text">Звук</h1>
id="volumeControl" <input
type="range" id="volumeControl"
min="0" type="range"
max="10" min="0"
v-model="volume" max="10"
@input="handleVolumeChange" v-model="volume"
ref="volumeControl" @input="handleVolumeChange"
/> ref="volumeControl"
<h1 class="volume-text--grey">Данная страница находится в разработке, и будет полностью переделанна</h1> />
</div>
<!-- 3/23/2024 DT I turned off the chat off button because it wasn't working and wasn't displaying correctly on the frontend -->
<!-- <div class="buttonbox">
<input type="checkbox"
id="switch"
class="checkbox" />
<label for="switch"
class="toggle">
</label>
<p>скрыть чат</p>
</div> -->
</div> </div>
</section> </section>
</div> </div>

View File

@@ -0,0 +1,668 @@
<template>
<div class="content-grid--double">
<aside-bar-component></aside-bar-component>
<chat-component></chat-component>
<header-component></header-component>
<div class="bg-gradient-left"></div>
<section class="double">
<div class="double-start">
<div
class="jackpot-start__content title-saper padding-elements-jackpot"
>
<h2>Рулетка</h2>
<p>Крути, ставь, побеждай!</p>
<div class="saper-start__choises diamonds diamonds-input__margin">
<h3>Цвет победной ячейки</h3>
<button class="bet-button red" :class="{ active: activeButton === 'red' }" @click="handleClick('red')">
x2
</button>
<button class="bet-button green" :class="{ active: activeButton === 'green' }" @click="handleClick('green')">
x20
</button>
<button class="bet-button black" :class="{ active: activeButton === 'black' }" @click="handleClick('black')">
x2
</button>
<div class="diamonds__choises">
<img
class="diamond-icon"
src="@/assets/icons-games/saper-game/icon-diamond-ore-saper.png"
/>
<input
v-model="amountDeposit"
type="number"
id="diamonds-input"
/>
<div class="diamonds__btns btn-style__diamonds">
<ul class="diamonds-btns__display">
<li v-for="(item, index) in JackpotNumbers" :key="index">
<button
@click="clickedBtnChoice(index, item.diamonds)"
:class="{
'btn-click': clickedBtn === index,
[index]: clickedBtn === index,
}"
:id="item.diamonds === 'max' ? 'max-button' : null"
v-if="item.diamonds !== undefined"
>
{{ item.diamonds }}
</button>
</li>
</ul>
</div>
</div>
</div>
<div class="jackpot-start__btns">
<div class="error-block" v-if="ErrorClick">
<h2>Ошибка при заполнении</h2>
</div>
<button
class="btn-start"
:class="{ 'animate-start-btn': ErrorClick }"
@click="clickPlayBtn"
>
Начать игру
</button>
<!-- <button class="btn-claim" v-if="winningAmount === 0">Забрать {{ winningAmount }} АР</button>
<button class="btn-claim" @click="claimWinningAmount()" v-else>Забрать {{ winningAmount.toFixed(2) }} АР</button> -->
</div>
</div>
</div>
<!-- </div> -->
<div class="double-game">
<div class="bootstrap-wrapper">
<div class="container">
<div class="row">
<div class="col-md-12 double-game-main-box">
<div class="double-carousel">
<div class="double-carousel-arrow"></div>
<div class="double-carousel-arrow-upper"></div>
<Carousel
ref="carousel"
:wrapAround="true"
:autoplay="autoPlay"
class="no-pointer-events"
:transition="150"
:itemsToShow="10"
@slide-start="handleStepCarousel"
>
<Slide v-for="(slide, index) in slides" :key="index">
<div>
<img
:src="slide.img"
onerror="this.onerror=null;this.src='data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';"
/>
</div>
</Slide>
</Carousel>
</div>
</div>
<div class="col-md-12 double-game-history-main-box">
<div class="container-double-history-text">
<span class="double-history-text">история</span>
</div>
<div class="double--history-carousel">
<Carousel
ref="carouselHistory"
class="no-pointer-events"
:transition="150"
:itemsToShow="24"
>
<Slide v-for="(slide, index) in slidesHistory" :key="index">
<div>
<img
:src="slide.img"
onerror="this.onerror=null;this.src='data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';"
/>
</div>
</Slide>
</Carousel>
</div>
</div>
<div class="col-md-4" style="padding-left: 0px">
<div class="double-members-ingame-red">
<div class="double-members-flex-container">
<div class="double-red-box">RED X2</div>
<div class="double-user-icon">
<span class="double-user-icon-span"></span>
<span class="double-number-color">{{
numberUserCountRed
}}</span>
</div>
</div>
<div
v-for="user in usersRed"
:key="user.name"
class="double-ui-component"
:id="`user-${user.name}`"
>
<img :src="user.image" alt="User" width="40" height="40" />
<div class="double-username">{{ user.name }}</div>
<div class="double-score">
{{ user.amount }}
<img
class="double-img-user"
src="@/assets/icons-header/diamond-ore-icon.png"
/>
</div>
</div>
<!-- </div> -->
</div>
</div>
<div class="col-md-4" style="padding-left: 0px">
<div class="double-members-ingame-green">
<div class="double-members-flex-container">
<div class="double-green-box">GREEN X20</div>
<div class="double-user-icon">
<span class="double-user-icon-span"></span>
<span class="double-number-color">{{
numberUserCountGreen
}}</span>
</div>
</div>
<div
v-for="user in usersGreen"
:key="user.name"
class="double-ui-component"
:id="`user-${user.name}`"
>
<img :src="user.image" alt="User" width="40" height="40" />
<div class="double-username">{{ user.name }}</div>
<div class="double-score">
{{ user.amount }}
<img
class="double-img-user"
src="@/assets/icons-header/diamond-ore-icon.png"
/>
</div>
</div>
</div>
</div>
<div
class="col-md-4"
style="padding-left: 0px; padding-right: 0px"
>
<div class="double-members-ingame-black">
<div class="double-members-flex-container">
<div class="double-white-box">BLACK X2</div>
<div class="double-user-icon">
<span class="double-user-icon-span"></span>
<span class="double-number-color">{{
numberUserCountBlack
}}</span>
</div>
</div>
<div
v-for="user in usersBlack"
:key="user.name"
class="double-ui-component"
:id="`user-${user.name}`"
>
<img :src="user.image" alt="User" width="40" height="40" />
<div class="double-username">{{ user.name }}</div>
<div class="double-score">
{{ user.amount }}
<img
class="double-img-user"
src="@/assets/icons-header/diamond-ore-icon.png"
/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</div>
</template>
<script>
import { reactive, ref, onMounted } from "vue";
import AsideBarComponent from "@/components/AsidebarComponent.vue";
import HeaderComponent from "@/components/HeaderComponent.vue";
import ChatComponent from "@/components/ChatComponent.vue";
import JackpotNumbers from "@/mocks/JackpotNumbers";
import { GetNewestDoubleGames,JoinGame } from "@/assets/js/games/double/DoubleApi";
import { GetCurrentMoney } from "@/assets/js/rest/RestMethods";
import { GetCookie } from "@/assets/js/storage/CookieStorage";
import { Carousel, Slide } from "vue3-carousel";
import "vue3-carousel/dist/carousel.css";
import "@/assets/css/PagesStyles/games-pages/jackpot.css";
import "@/assets/css/PagesStyles/games-pages/double.css";
import "@/assets/css/global.css";
import { eventBus } from "@/main";
import { useVuelidate } from "@vuelidate/core";
import {
maxValue,
minValue,
required,
numeric,
integer,
} from "@vuelidate/validators";
export default {
components: {
HeaderComponent,
AsideBarComponent,
ChatComponent,
Carousel,
Slide,
},
data() {
return {
JackpotNumbers,
clickedColor: "",
amountDeposit: 0,
activeButton: null
};
},
methods: {
async clickedBtnChoice(index, content) {
this.clickedBtn = index;
if (content === "max") {
await GetCurrentMoney(
GetCookie("AUTHTOKEN"),
GetCookie("SearchToken")
).then((response) => {
const responseBalance = response.currentMoney;
if (responseBalance === this.balance) {
this.amountDeposit = parseInt(responseBalance);
}
});
} else {
this.amountDeposit = content;
}
},
async handleClick(color) {
this.clickedColor = color;
this.activeButton = color;
}
,
async clickPlayBtn() {
this.v$.$touch();
this.offBtn = true;
if (
this.balance < this.amountDeposit ||
!Number.isInteger(Number(this.amountDeposit))
) {
this.textError = "Некорректное значение. Введите целое число.";
this.offBtn = false;
this.errorPlayButton();
}
await JoinGame(this.amountDeposit,this.clickedColor).then((response) => {
if (
response === `You can't join to started or ended game` ||
response === "Player alredy in the game."
) {
this.offBtn = false;
if (response === `You can't join to started or ended game`) {
this.textError = "Игра уже началась или только закончилась!";
this.errorPlayButton();
} else if (response === "Player alredy in the game.") {
this.textError = "Вы уже в игре!";
this.errorPlayButton();
}
return;
}
// if (response.ok) {
// this.offBtn = false;
// this.startGame = true;
// }
});
this.offBtn = false;
}
},
validations() {
return {
amountDeposit: {
required,
numeric,
minValue: minValue(1),
maxValue: maxValue(this.balance),
integer,
},
};
},
async created() {},
setup() {
const v$ = useVuelidate();
const usersRed = ref([]);
const usersGreen = ref([]);
const usersBlack = ref([]);
const numberUserCountRed = ref(0);
const numberUserCountGreen = ref(0);
const numberUserCountBlack = ref(0);
const slides = reactive([
{
img: require("@/assets/icons-games/double-game/RectangleGreenDouble.png"),
target: "Green",
},
{
img: require("@/assets/icons-games/double-game/RectangleRedDouble.png"),
target: "Red",
},
{
img: require("@/assets/icons-games/double-game/RectangleBlackDouble.png"),
target: "Black",
},
{
img: require("@/assets/icons-games/double-game/RectangleRedDouble.png"),
target: "Red",
},
{
img: require("@/assets/icons-games/double-game/RectangleBlackDouble.png"),
target: "Black",
},
{
img: require("@/assets/icons-games/double-game/RectangleGreenDouble.png"),
target: "Green",
},
{
img: require("@/assets/icons-games/double-game/RectangleBlackDouble.png"),
target: "Black",
},
{
img: require("@/assets/icons-games/double-game/RectangleRedDouble.png"),
target: "Red",
},
{
img: require("@/assets/icons-games/double-game/RectangleBlackDouble.png"),
target: "Black",
},
{
img: require("@/assets/icons-games/double-game/RectangleRedDouble.png"),
target: "Red",
},
]);
const slidesHistory = reactive([]);
let doubleData = reactive({});
let autoPlay = ref(0);
let targetColor = ref("");
let timeToGame = ref(0);
let endGame = ref(false);
onMounted(() => {
loadGameHistory();
// usersRed.value = fetchUsersRed();
eventBus.on("doubleGame", (dataDouble) => {
const dataDoubleParse = JSON.parse(dataDouble);
if (dataDoubleParse.Players.length > 0) {
processUsersInGame(dataDoubleParse.Players);
}
if (endGame.value != true) {
if (dataDoubleParse.Status == "InGame") {
autoPlay.value = 20;
targetColor.value = dataDoubleParse.WInColor;
}
if (dataDoubleParse.Status == "GameEnd") {
targetColor.value = dataDoubleParse.WInColor;
endGame.value = true;
autoPlay.value = 150;
addWinEffectTouUsers(
dataDoubleParse.Players,
dataDoubleParse.WInColor
);
}
}
});
});
function addWinEffectTouUsers(usersArray, winColor) {
usersArray.forEach((user) => {
if (user.BetColor == winColor) {
setTimeout(() => {
addGradientClassToUser(user);
}, 2000);
}
});
}
function addGradientClassToUser(user) {
const element = document.getElementById("user-" + user.UserName);
if (element) {
element.classList.add("double-ui-component-gradient");
}
}
function addUserIfNotExist(usersArray, newUser, BetColor) {
const userExists = usersArray.some((user) => user.name === newUser.name);
if (!userExists) {
if (BetColor == "Red") {
numberUserCountRed.value += 1;
}
if (BetColor == "Green") {
numberUserCountGreen.value += 1;
}
if (BetColor == "Black") {
numberUserCountBlack.value += 1;
}
usersArray.push(newUser);
}
}
function handleStepCarousel(data) {
try {
if (endGame.value == true) {
let { currentSlideIndex } = data;
if (
slides[currentSlideIndex + 1].target == targetColor.value &&
endGame.value == true
) {
stopAutoPlay();
setTimeout(() => {
setTimeout(() => {
if (
usersRed.value.length > 0 ||
usersBlack.value.length > 0 ||
usersGreen.value.length > 0
) {
usersRed.value = [];
usersGreen.value = [];
usersBlack.value = [];
}
}, 4000);
loadGameHistory();
}, 2000);
}
}
} catch (error) {
void error;
}
}
function processUsersInGame(users) {
users.forEach((user) => {
if (user.BetColor == "Red") {
const newUser = {
name: user.UserName,
image:
"https://avatar.spworlds.ru/face/55/" + user.UserName + ".png",
amount: user.Bet,
hasGradient: false,
};
addUserIfNotExist(usersRed.value, newUser, "Red");
}
if (user.BetColor == "Green") {
const newUser = {
name: user.UserName,
image:
"https://avatar.spworlds.ru/face/55/" + user.UserName + ".png",
amount: user.Bet,
hasGradient: false,
};
addUserIfNotExist(usersGreen.value, newUser, "Green");
}
if (user.BetColor == "Black") {
const newUser = {
name: user.UserName,
image:
"https://avatar.spworlds.ru/face/55/" + user.UserName + ".png",
amount: user.Bet,
hasGradient: false,
};
addUserIfNotExist(usersBlack.value, newUser, "Black");
}
});
}
async function loadGameHistory() {
try {
await GetNewestDoubleGames()
.then((response) => {
return response.json();
})
.then((data) => {
slidesHistory.value = [];
slidesHistory.length = 0;
for (let i = 0; i < 25; i++) {
// doubleData = Object.assign(doubleData, dataDoubleParse);
// timeToGame.value = doubleData.WaitingTime;
if (data[i].winColor == "Red") {
slidesHistory.push({
img: require("@/assets/icons-games/double-game/HistoryRectangleRedDouble.png"),
target: "Red",
});
}
if (data[i].winColor == "Black") {
slidesHistory.push({
img: require("@/assets/icons-games/double-game/HistoryRectangleBlackDouble.png"),
target: "Black",
});
}
if (data[i].winColor == "Green") {
slidesHistory.push({
img: require("@/assets/icons-games/double-game/HistoryRectangleGreenDouble.png"),
target: "Green",
});
}
}
console.log(data);
})
.catch((error) => {
void error;
});
} catch (error) {
void error;
}
}
function stopAutoPlay() {
autoPlay.value = 0;
endGame.value = false;
targetColor.value = "";
}
return {
slides,
slidesHistory,
autoPlay,
doubleData,
targetColor,
timeToGame,
handleStepCarousel,
stopAutoPlay,
usersRed,
usersBlack,
usersGreen,
v$,
};
},
};
</script>
<style scoped>
.carousel__slide {
padding: 1px;
}
.carousel__viewport {
perspective: 2000px;
}
.carousel__track {
transform-style: preserve-3d;
}
.carousel__slide--sliding {
transition: 0.5s;
}
.carousel__slide {
opacity: 0.9;
transform: rotateY(-20deg) scale(0.9);
}
.carousel__slide--active ~ .carousel__slide {
transform: rotateY(20deg) scale(0.9);
}
.carousel__slide--prev {
opacity: 1;
transform: rotateY(-10deg) scale(0.95);
}
.carousel__slide--next {
opacity: 1;
transform: rotateY(10deg) scale(0.95);
}
.carousel__slide--active {
opacity: 1;
transform: rotateY(0) scale(1.1);
}
.double--history-carousel {
opacity: 1 !important;
transform: rotateY(0) scale(1) !important;
}
.double--history-carousel .carousel__slide--active ~ .carousel__slide,
.double--history-carousel .carousel__slide--prev,
.double--history-carousel .carousel__slide--next,
.double--history-carousel .carousel__slide--active {
opacity: 1;
transform: rotateY(0) scale(1);
}
</style>

View File

@@ -6,6 +6,7 @@ import SapergamePage from "@/pages/games-pages/SapergamePage.vue";
import SettingsPage from "@/pages/SettingsPage.vue"; import SettingsPage from "@/pages/SettingsPage.vue";
import CrashGamePage from "@/pages/games-pages/CrashgamePage.vue"; import CrashGamePage from "@/pages/games-pages/CrashgamePage.vue";
import JackpotPage from "@/pages/games-pages/JackpotPage.vue"; import JackpotPage from "@/pages/games-pages/JackpotPage.vue";
import DoublePage from "@/pages/games-pages/DoublePage.vue";
import AboutPage from "@/pages/AboutPage.vue"; import AboutPage from "@/pages/AboutPage.vue";
import HelpPage from "@/pages/HelpPage.vue" ; import HelpPage from "@/pages/HelpPage.vue" ;
@@ -17,6 +18,7 @@ export default createRouter({
{ path: '/game/saper', component: SapergamePage, name: 'saper' }, { path: '/game/saper', component: SapergamePage, name: 'saper' },
{ path: '/game/crash', component: CrashGamePage, name: 'crash' }, { path: '/game/crash', component: CrashGamePage, name: 'crash' },
{ path: '/game/jackpot', component: JackpotPage, name: 'jackpot' }, { path: '/game/jackpot', component: JackpotPage, name: 'jackpot' },
{ path: '/game/double', component: DoublePage, name: 'double' },
{ path: '/settings', component: SettingsPage, name: 'settings' }, { path: '/settings', component: SettingsPage, name: 'settings' },
{ path: '/about', component: AboutPage, name: 'about' }, { path: '/about', component: AboutPage, name: 'about' },
{ path: '/help', component: HelpPage, name: 'help' }, { path: '/help', component: HelpPage, name: 'help' },