premium generator roll feature + added valkyrie generator page

This commit is contained in:
vvo
2022-10-23 19:13:01 +08:00
parent 92417157f6
commit 676ec11c7c
6 changed files with 431 additions and 1 deletions
+3 -1
View File
@@ -18,7 +18,8 @@ import {
saveValgene,
} from './handlers/profiles';
import {
copyResourcesFromGame
copyResourcesFromGame,
preGeneRoll
} from './utils'
import {
ARENA
@@ -45,6 +46,7 @@ export function register() {
R.Config('use_asphyxia_gameover',{ type: 'boolean', default: true, name:'Use Asphyxia Gameover', desc:'Enable the Asphyxia gameover message after ending the game.'})
R.WebUIEvent('copyResourcesFromGame', copyResourcesFromGame);
R.WebUIEvent('preGeneRoll', preGeneRoll);
R.WebUIEvent('updateProfile', updateProfile);
R.WebUIEvent('updateMix', updateMix);
R.WebUIEvent('importMix', importMix);
+59
View File
@@ -1,4 +1,5 @@
import {Counter} from './models/counter';
import {PREGENE} from './data/exg';
export function IDToCode(id: number) {
const padded = _.padStart(id.toString(), 8);
@@ -329,3 +330,61 @@ export const copyResourcesFromGame = async (data: {}) => {
errors: runErrors
}))
}
export const preGeneRoll = async (data: {
set: number,
refid: string,
items: []
}) => {
// prem_items_crew: DB.Find(refid, {collection:"item",type:11})
// prem_items_stamp: DB.Find(refid, { collection:"item",type:17 })
// prem_items_subbg: DB.Find(refid, { collection:"item",type:18 })
// prem_items_bgm: DB.Find(refid, { collection:"item",type:19 })
// prem_items_nemsys: DB.Find(refid, { collection:"item",type:20 })
let itemId = {
'crew': 11,
'stamp': 17,
'subbg': 18,
'bgm': 19,
'nemsys': 20
}
let preGeneSet = PREGENE.find(itemSet => itemSet.id === data.set)
let finishedRolling = false
if(preGeneSet != undefined) {
while(!finishedRolling) {
let rollWhat = 0
let probability = Math.random();
console.log("Rolling Premium Generator")
for(const probIndex in preGeneSet.probability) {
if(probability <= preGeneSet.probability[probIndex]) {
rollWhat = parseInt(probIndex);
break;
}
if(parseInt(probIndex) === preGeneSet.probability.length - 1) rollWhat = parseInt(probIndex);
}
let unobtainedItems = preGeneSet.items[Object.keys(preGeneSet.items)[rollWhat]].map((x) => x)
data.items.forEach(item => {
if(item['type'] == itemId[Object.keys(preGeneSet.items)[rollWhat]] && preGeneSet.items[Object.keys(preGeneSet.items)[rollWhat]].includes(item['id'])) {
unobtainedItems.splice(unobtainedItems.indexOf(item['id']), 1)
}
})
if(unobtainedItems.length > 0) {
let randomItemIndex = Math.floor(Math.random() * unobtainedItems.length);
console.log("Rolled item id: " + unobtainedItems[randomItemIndex] + " | item type: " + itemId[Object.keys(preGeneSet.items)[rollWhat]])
DB.Insert(data.refid, {
"collection": "item",
"type": itemId[Object.keys(preGeneSet.items)[rollWhat]],
"id": unobtainedItems[randomItemIndex],
"param": 1
})
let finalItemType = (Object.keys(preGeneSet.items)[rollWhat] === 'subbg') ? 'bg' : Object.keys(preGeneSet.items)[rollWhat]
await IO.WriteFile('webui/asset/logs/preGeneRollResult.json', JSON.stringify({'id': unobtainedItems[randomItemIndex], 'type': finalItemType}))
finishedRolling = true
} else {
console.log("No more " + Object.keys(preGeneSet.items)[rollWhat] + " items to get, will re-roll.")
}
}
} else console.log('pregeneset none')
}
+158
View File
@@ -0,0 +1,158 @@
function countGeneItems(geneItems, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys) {
let obtained = 0, total = 0;
if('crew' in geneItems.items) {
obtained += items_crew.filter(crew => geneItems.items.crew.includes(crew['id'])).length
total += geneItems.items['crew'].length
}
if('stamp' in geneItems.items) {
obtained += items_stamp.filter(stamp => geneItems.items.stamp.includes(stamp['id'])).length
total += geneItems.items['stamp'].length
}
if('subbg' in geneItems.items) {
obtained += items_subbg.filter(subbg => geneItems.items.subbg.includes(subbg['id'])).length
total += geneItems.items['subbg'].length
}
if('bgm' in geneItems.items) {
obtained += items_bgm.filter(bgm => geneItems.items.bgm.includes(bgm['id'])).length
total += geneItems.items['bgm'].length
}
if('nemsys' in geneItems.items) {
obtained += items_nemsys.filter(nemsys => geneItems.items.nemsys.includes(nemsys['id'])).length
total += geneItems.items['nemsys'].length
}
return [obtained, total]
}
function loadImages(itemList, itemType, userItems) {
itemList.forEach(item => {
let itemBrightness = userItems.find(userItem => userItem.id == item) != undefined ? 1 : 0.25
let imageUrl = 'static/asset/valgene_item/item_' + itemType + '_' + item + '.png'
$.get(imageUrl, function(data, textStatus) {
if (textStatus == "success") {
$('.' + itemType + '-items').append('<img style="width: 350px; padding: 10px; filter: brightness(' + itemBrightness + ')" src=' + imageUrl + '>')
}
})
})
}
async function getGeneratorEditionItems(gene_edition, itemSet) {
let valGeneData = await $.getJSON( "static/asset/json/valgene_data.json", function(data) {
return data
})
if(gene_edition === 'valkyrie') {
return valGeneData.valgene.find(valgene => valgene.id === itemSet)
} else {
return valGeneData.pregene.find(pregene => pregene.id === itemSet)
}
}
async function loadItems(itemSet, gene_edition, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys) {
let geneItems = await getGeneratorEditionItems(gene_edition, itemSet)
let itemCounts = countGeneItems(geneItems, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys)
if(itemCounts[0] >= itemCounts[1]) $('#pregene-roll').attr('disabled', 'disabled')
$('.count').text('Unlocked items: ' + itemCounts[0] + "/" + itemCounts[1])
if('crew' in geneItems.items) {
$('.item_banners').append('<div style="padding: 5px"><h3>Nemsys Crew</h3></div>')
$('.item_banners').append('<div class=crew-items style="text-align: center; background-color: #3a3a3a; padding: 20px; border-radius: 6px;"></div><br>')
loadImages(geneItems.items['crew'], 'crew', items_crew)
}
if('stamp' in geneItems.items) {
$('.item_banners').append('<div style="padding: 5px"><h3>Appeal Stamp</h3></div>')
$('.item_banners').append('<div class=stamp-items style="text-align: center; background-color: #3a3a3a; padding: 20px; border-radius: 6px;"></div><br>')
loadImages(geneItems.items['stamp'], 'stamp', items_stamp)
}
if('subbg' in geneItems.items) {
$('.item_banners').append('<div style="padding: 5px"><h3>Submonitor BG</h3></div>')
$('.item_banners').append('<div class=bg-items style="text-align: center; background-color: #3a3a3a; padding: 20px; border-radius: 6px;"></div><br>')
loadImages(geneItems.items['subbg'], 'bg', items_subbg)
}
if('bgm' in geneItems.items) {
$('.item_banners').append('<div style="padding: 5px"><h3>BGM</h3></div>')
$('.item_banners').append('<div class=bgm-items style="text-align: center; background-color: #3a3a3a; padding: 20px; border-radius: 6px;"></div><br>')
loadImages(geneItems.items['bgm'], 'bgm', items_bgm)
}
if('nemsys' in geneItems.items) {
$('.item_banners').append('<div style="padding: 5px"><h3>Nemsys</h3></div>')
$('.item_banners').append('<div class=nemsys-items style="text-align: center; background-color: #3a3a3a; padding: 20px; border-radius: 6px;"></div><br>')
loadImages(geneItems.items['nemsys'], 'nemsys', items_nemsys)
}
}
async function loadValgeneData(gene_edition) {
let valGeneData = await $.getJSON( "static/asset/json/valgene_data.json", function(data) {
return data
})
if(gene_edition === 'valkyrie') {
for(const valGeneDataIndex in valGeneData.valgene) {
$('#set_select').append('<option value=' + valGeneData.valgene[valGeneDataIndex].id + '>' + valGeneData.valgene[valGeneDataIndex].name + '</option>')
}
} else {
for(const pregeneDataIndex in valGeneData.pregene) {
$('#set_select').append('<option value=' + valGeneData.pregene[pregeneDataIndex].id + '>' + valGeneData.pregene[pregeneDataIndex].name + '</option>')
}
}
}
$(document).ready(function() {
if(document.getElementById("data-pass-unlock-all").innerText === 'true') {
$('.card-content').text("The \"Unlock All Valkyrie and Premium Items\" option is enabled. You wouldn't need this.")
$('#pregene-roll').attr('disabled')
return 0;
}
$('.input').hide()
$('.button').addClass('is-link')
let refid = document.getElementsByName("refid")[0].value
let items_crew = JSON.parse(document.getElementById("data-pass-crew").innerText);
let items_stamp = JSON.parse(document.getElementById("data-pass-stamp").innerText);
let items_subbg = JSON.parse(document.getElementById("data-pass-subbg").innerText);
let items_bgm = JSON.parse(document.getElementById("data-pass-bgm").innerText);
let items_nemsys = JSON.parse(document.getElementById("data-pass-nemsys").innerText);
let gene_edition = document.getElementById("generator-edition").innerText;
loadValgeneData(gene_edition)
loadItems(1, gene_edition, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys)
$('#set_select').change(function() {
$('.count').text('')
$('.item_banners').empty()
loadItems(parseInt($('#set_select').val()), gene_edition, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys)
})
$('#roll-result').on('click', function(){location.reload()})
$('#pregene-roll').on('click', async function() {
$('#pregene-roll').attr('disabled', 'disabled')
if(gene_edition === 'premium' && window.location.search.match(/(premium)/g) != undefined) {
let geneItems = await getGeneratorEditionItems(gene_edition, parseInt($('#set_select').val()))
console.log(geneItems)
if(countGeneItems(geneItems, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys)[0] >= countGeneItems(geneItems, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys)[1]) {
alert("All items have been unlocked already.")
} else {
emit('preGeneRoll', {
set: parseInt(document.getElementById('set_select').value),
refid: refid,
items: items_crew.concat(items_stamp, items_subbg, items_bgm, items_nemsys)
}).then(
function() {
$.getJSON("static/asset/logs/preGeneRollResult.json", function(data) {
$('.modal-card-head').append('<p class="modal-card-title">Rolled item!</p>')
$('.modal-card-body').append('<img style="width: 400px; padding: 10px;" src="static/asset/valgene_item/item_' + data.type + '_' + data.id + '.png">')
$('.modal-card-foot').append('<button onclick=location.reload(); class="button is-primary">Close</button>')
$('.modal').addClass('is-active')
})
})
}
} else {
alert("Not premium generator: a precaution")
}
})
})
@@ -0,0 +1,113 @@
{
"pregene": [
{
"id": 1,
"name": "Premium Generator 1 (Aqua Set)",
"items": {
"crew": [131],
"stamp": [69, 70, 71, 72, 73, 74, 75, 76, 77, 78],
"subbg": [166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185]
}
}
],
"valgene":[
{
"id": 1,
"name": "Valkyrie Generator Vol. 1",
"items":{
"crew": [117],
"stamp": [1, 2, 3, 4, 5],
"subbg": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
"bgm": [1, 2, 3, 4, 5, 6, 7, 8],
"nemsys": [1, 2, 3, 4]
}
},
{
"id": 2,
"name": "Valkyrie Generator Vol. 2",
"items":{
"crew": [119],
"stamp": [6, 7, 8, 9, 10],
"subbg": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33],
"bgm": [9, 10, 11, 12, 13, 14],
"nemsys": [5, 6, 7]
}
},
{
"id": 3,
"name": "Valkyrie Generator Vol. 3",
"items":{
"crew": [120],
"stamp": [11, 12, 13, 14, 15, 16],
"subbg": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56],
"bgm": [15, 16, 17],
"nemsys": [12, 13, 14]
}
},
{
"id": 4,
"name": "Valkyrie Generator Vol. 4",
"items":{
"crew": [121],
"stamp": [17, 18, 19, 20, 21],
"subbg": [57, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79],
"bgm": [18, 19, 20, 21],
"nemsys": [15, 16, 17]
}
},
{
"id": 5,
"name": "Valkyrie Generator Vol. 5",
"items":{
"crew": [124],
"stamp": [22, 23, 24, 25, 26, 27],
"subbg": [80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102],
"bgm": [22, 23, 24, 25],
"nemsys": [18, 19, 20]
}
},
{
"id": 6,
"name": "Valkyrie Generator Vol. 6",
"items":{
"crew": [129],
"stamp": [28, 29, 30, 31, 32],
"subbg": [103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127],
"bgm": [26, 27, 28, 29],
"nemsys": [21, 22, 23, 24, 25]
}
},
{
"id": 7,
"name": "Valkyrie Generator Vol. 7",
"items":{
"stamp": [33, 34, 35, 36, 37],
"subbg": [129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151],
"bgm": [30, 31, 32, 33, 34, 35, 36, 37],
"nemsys": [26, 27, 28, 29, 30]
}
},
{
"id": 8,
"name": "Valkyrie Generator Vol. 8",
"items":{
"crew": [130],
"stamp": [38, 39, 40, 41, 42],
"subbg": [152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165],
"bgm": [38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68],
"nemsys": [31]
}
},
{
"id": 9,
"name": "Valkyrie Generator Vol. 9",
"items":{
"crew": [133],
"stamp": [79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109],
"subbg": [186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199],
"bgm": [43, 44, 45, 46, 47],
"nemsys": [32]
}
}
]
}
@@ -0,0 +1,53 @@
//DATA//
prem_items_crew: DB.Find(refid, {collection:"item",type:11})
prem_items_stamp: DB.Find(refid, { collection:"item",type:17 })
prem_items_subbg: DB.Find(refid, { collection:"item",type:18 })
prem_items_bgm: DB.Find(refid, { collection:"item",type:19 })
prem_items_nemsys: DB.Find(refid, { collection:"item",type:20 })
unlock_all: U.GetConfig('unlock_all_valk_items')
-
//const padded = _.padStart(profile.id.toString(), 8);
//const sdvxid = `${padded.slice(0, 4)}-${padded.slice(4)}`;
link(rel="stylesheet" href="static/asset/css/datatables.css")
div
div.modal(id="roll-result")
div(class="modal-background jb-modal-close")
div(class="modal-card")
header(class="modal-card-head")
section(class="modal-card-body" style="text-align: center;")
footer(class="modal-card-foot")
.card
.card-header
p.card-header-title
span.icon
i.mdi.mdi-star
| Premium Generator
.card-content
.field
.control
.select
select(name="set_select" id="set_select")
// option(value="1") Premium Generator 1 (Aqua Set)
div(style="padding: 15px; text-align: center;")
div(style="padding: 5px")
h3.count()
input.input(type="text" name="refid", value=refid readonly)
button.button(id="pregene-roll" style="font-size: 20px") Roll
br()
div.item_banners()
div(hidden id='data-pass-crew') !{JSON.stringify(prem_items_crew)}
div(hidden id='data-pass-stamp') !{JSON.stringify(prem_items_stamp)}
div(hidden id='data-pass-subbg') !{JSON.stringify(prem_items_subbg)}
div(hidden id='data-pass-bgm') !{JSON.stringify(prem_items_bgm)}
div(hidden id='data-pass-nemsys') !{JSON.stringify(prem_items_nemsys)}
div(hidden id='data-pass-unlock-all') !{unlock_all}
div(hidden id='generator-edition') premium
script(src="static/asset/js/generator.js")
@@ -0,0 +1,45 @@
//DATA//
prem_items_crew: DB.Find(refid, {collection:"item",type:11})
prem_items_stamp: DB.Find(refid, { collection:"item",type:17 })
prem_items_subbg: DB.Find(refid, { collection:"item",type:18 })
prem_items_bgm: DB.Find(refid, { collection:"item",type:19 })
prem_items_nemsys: DB.Find(refid, { collection:"item",type:20 })
unlock_all: U.GetConfig('unlock_all_valk_items')
-
//const padded = _.padStart(profile.id.toString(), 8);
//const sdvxid = `${padded.slice(0, 4)}-${padded.slice(4)}`;
link(rel="stylesheet" href="static/asset/css/datatables.css")
div
.card
.card-header
p.card-header-title
span.icon
i.mdi.mdi-star
| Valkyrie Generator
.card-content
.field
.control
.select
select(name="set_select" id="set_select")
div(style="padding: 15px; text-align: center;")
div(style="padding: 5px")
h3.count()
input.input(type="text" name="refid", value=refid readonly)
br()
div.item_banners()
div(hidden id='data-pass-crew') !{JSON.stringify(prem_items_crew)}
div(hidden id='data-pass-stamp') !{JSON.stringify(prem_items_stamp)}
div(hidden id='data-pass-subbg') !{JSON.stringify(prem_items_subbg)}
div(hidden id='data-pass-bgm') !{JSON.stringify(prem_items_bgm)}
div(hidden id='data-pass-nemsys') !{JSON.stringify(prem_items_nemsys)}
div(hidden id='data-pass-unlock-all') !{unlock_all}
div(hidden id='generator-edition') valkyrie
script(src="static/asset/js/generator.js")