From e3eb1f123c3d1304988cb4c25f176b3eea7d73cf Mon Sep 17 00:00:00 2001
From: peter
Date: Fri, 7 Feb 2020 17:30:55 +0100
Subject: [PATCH] pretty up
---
src/backend/Admin/Admin.ts | 2 +-
src/backend/Components/Item/Interface.ts | 4 +-
src/backend/Components/Item/ItemManager.ts | 28 +++-
src/backend/Components/Raid/Interface.ts | 1 +
src/backend/Components/Raid/RPCInterface.ts | 1 +
src/backend/Components/Raid/RaidManager.ts | 120 +++++++++++++++---
src/backend/Types/Types.ts | 2 +
.../components/header/header.component.ts | 6 +-
.../pages/character/character.component.html | 2 +
.../pages/character/character.component.ts | 5 +-
.../characters/characters.component.html | 2 +
.../pages/pages-layout.component.ts | 4 -
.../frontcraft/pages/pages-routing.module.ts | 4 -
.../pages/raid/archive.component.ts | 33 +++--
.../frontcraft/pages/raid/raid.component.html | 118 +++++++++++++++--
.../frontcraft/pages/raid/raid.component.ts | 69 ++++++++--
.../pages/rules/rules.component.html | 2 +-
.../pages/shop/buytoken.component.ts | 38 +++---
src/frontend/src/assets/images/dwarf.png | Bin 0 -> 6690 bytes
src/frontend/src/assets/images/dwarf_xs.gif | Bin 0 -> 350 bytes
src/frontend/src/assets/images/gnome.png | Bin 0 -> 9813 bytes
src/frontend/src/assets/images/gnome_xs.gif | Bin 0 -> 373 bytes
src/frontend/src/assets/images/human.png | Bin 0 -> 6633 bytes
src/frontend/src/assets/images/human_xs.gif | Bin 0 -> 350 bytes
src/frontend/src/assets/images/night elf.png | Bin 0 -> 9622 bytes
.../src/assets/images/night elf_xs.gif | Bin 0 -> 371 bytes
src/frontend/src/assets/images/team.png | Bin 625071 -> 0 bytes
src/frontend/src/assets/images/warlock.png | Bin 0 -> 9620 bytes
test/backendTest.ts | 25 +++-
29 files changed, 376 insertions(+), 90 deletions(-)
create mode 100644 src/frontend/src/assets/images/dwarf.png
create mode 100644 src/frontend/src/assets/images/dwarf_xs.gif
create mode 100644 src/frontend/src/assets/images/gnome.png
create mode 100644 src/frontend/src/assets/images/gnome_xs.gif
create mode 100644 src/frontend/src/assets/images/human.png
create mode 100644 src/frontend/src/assets/images/human_xs.gif
create mode 100644 src/frontend/src/assets/images/night elf.png
create mode 100644 src/frontend/src/assets/images/night elf_xs.gif
delete mode 100644 src/frontend/src/assets/images/team.png
create mode 100644 src/frontend/src/assets/images/warlock.png
diff --git a/src/backend/Admin/Admin.ts b/src/backend/Admin/Admin.ts
index be0a143..487db7c 100644
--- a/src/backend/Admin/Admin.ts
+++ b/src/backend/Admin/Admin.ts
@@ -56,7 +56,7 @@ implements TableDefinitionExporter, IAdmin {
connection: {
filename: Path.join(__dirname, "data/frontworkAdmin.sqlite")
},
- useNullAsDefault: true
+ useNullAsDefault: true,
}
}
}
diff --git a/src/backend/Components/Item/Interface.ts b/src/backend/Components/Item/Interface.ts
index 007f7d4..152988b 100644
--- a/src/backend/Components/Item/Interface.ts
+++ b/src/backend/Components/Item/Interface.ts
@@ -7,8 +7,8 @@ export class IItemManager{
setPriority: (itemname:string, priority: any) => Promise
calculatePriorities: (itemname: string, character:Character) => Promise
deletePriority: (priority:SRPriority) => Promise
- getTokens: (character:Character) => Promise
- getToken: (character:Character, item:Item) => Promise<(SRToken & Character & Item) | void>
+ getTokens: (character:Character, valid?:boolean) => Promise
+ getToken: (character:Character, item:Item, valid?:boolean) => Promise<(SRToken & Character & Item) | void>
getAllPriorities: () => Promise<(SRPriority & Spec & Item)[]>
wipeCurrencyAndItems: () => Promise
}
\ No newline at end of file
diff --git a/src/backend/Components/Item/ItemManager.ts b/src/backend/Components/Item/ItemManager.ts
index f24965a..751926a 100644
--- a/src/backend/Components/Item/ItemManager.ts
+++ b/src/backend/Components/Item/ItemManager.ts
@@ -146,18 +146,27 @@ implements FrontworkComponent, TableDefin
if(matchingtoken){
//update signupid and increment level
- console.log("delete shadow tokens");
+
await this.admin
.knex('tokens')
- .update({
- signupid: signup.id,
- level: matchingtoken.level+1
- })
.where({
characterid: character.id,
itemname: item.itemname
})
+ .update({
+ signupid: signup.id,
+ level: matchingtoken.level+1
+ })
+
+ await this.admin
+ .knex('tokens')
+ .where({
+ characterid: character.id,
+ itemname: item.itemname,
+ signupid: null
+ }).del()
+
return await this.getToken(character, item)
}
}
@@ -248,7 +257,7 @@ implements FrontworkComponent, TableDefin
}).reduce((prev, curr) => prev+curr, 0)
}
- getToken = async (character:Character, item:Item): Promise<(SRToken & Character & Item) | void>=> {
+ getToken = async (character:Character, item:Item,valid=true): Promise<(SRToken & Character & Item) | void>=> {
return await this.admin
.knex('tokens as t')
.select('*')
@@ -258,6 +267,13 @@ implements FrontworkComponent, TableDefin
characterid: character.id,
"i.itemname": item.itemname
})
+ .andWhere(function(){
+ if(valid){
+ this.whereNotNull('t.signupid')
+ }else{
+ this.whereNull('t.signupid')
+ }
+ })
.first()
}
diff --git a/src/backend/Components/Raid/Interface.ts b/src/backend/Components/Raid/Interface.ts
index 0b173a8..2dd4ef5 100644
--- a/src/backend/Components/Raid/Interface.ts
+++ b/src/backend/Components/Raid/Interface.ts
@@ -14,4 +14,5 @@ export class IRaidManager{
getPastRaids: (limit: number) => Promise
getArchiveRaid: (id:number) => Promise
startRaid: (raid:Raid) => Promise
+ adminUnsign: (character:Character, raid:Raid) => Promise
}
diff --git a/src/backend/Components/Raid/RPCInterface.ts b/src/backend/Components/Raid/RPCInterface.ts
index 171dcf6..dbf2fa2 100644
--- a/src/backend/Components/Raid/RPCInterface.ts
+++ b/src/backend/Components/Raid/RPCInterface.ts
@@ -17,6 +17,7 @@ export type RaidManagerFeatureIfc = {
archiveRaid: IRaidManager['archiveRaid']
setBenched: IRaidManager['setBenched']
startRaid: IRaidManager['startRaid']
+ adminUnsign: IRaidManager['adminUnsign']
}
signup: {
getSignups: IRaidManager['getSignups']
diff --git a/src/backend/Components/Raid/RaidManager.ts b/src/backend/Components/Raid/RaidManager.ts
index b12b241..4c983da 100644
--- a/src/backend/Components/Raid/RaidManager.ts
+++ b/src/backend/Components/Raid/RaidManager.ts
@@ -7,6 +7,9 @@ import { IRaidManager } from "./Interface";
import { IUserManager } from "../User/Interface";
import { ICharacterManager } from "../Character/Interface";
import { _Tiers } from "../../Types/Items";
+import { IItemManager } from "../Item/Interface";
+import { ItemManager } from "../Item/ItemManager";
+import { SpecT } from "../../Types/PlayerSpecs";
@Injectable(IRaidManager)
export class RaidManager
@@ -22,6 +25,9 @@ implements FrontworkComponent, IRaidManag
@Inject(ICharacterManager)
private characterManager: ICharacterManager
+ @Inject(ItemManager)
+ private itemManager: IItemManager
+
exportRPCs = () => [
this.getRaids,
this.getRaidData,
@@ -38,7 +44,8 @@ implements FrontworkComponent, IRaidManag
this.removeSignup,
this.archiveRaid,
this.setBenched,
- this.startRaid
+ this.startRaid,
+ this.adminUnsign
]
},{
name: 'signup' as 'signup',
@@ -136,15 +143,20 @@ implements FrontworkComponent, IRaidManag
archiveRaid = async (raid:Raid) : Promise => {
const raidData = await this.getRaidData(raid)
+
+ const tx = await this.admin.knex.transaction()
+
await this.admin.knex('archive')
+ .transacting(tx)
.insert({
id:raidData.id,
raiddata: JSON.stringify(raidData)
})
await Promise.all(
- Object.values(raidData.participants).flat().flatMap((signup) => this.admin
+ Object.values(raidData.participants).flat().flatMap((signup) => this.admin
.knex('tokens')
+ .transacting(tx)
.where({
characterid: signup.characterid,
signupid: null
@@ -153,8 +165,11 @@ implements FrontworkComponent, IRaidManag
))
await this.admin.knex('raids')
+ .transacting(tx)
.where('id', '=', raid.id)
.del()
+ await tx.commit()
+
const row = await this.admin.knex('archive')
.select('*')
@@ -162,7 +177,6 @@ implements FrontworkComponent, IRaidManag
id:raidData.id,
})
.first()
-
return JSON.parse(row.raiddata)
}
@@ -184,7 +198,7 @@ implements FrontworkComponent, IRaidManag
}
getRaidData = async (raid:Raid) : Promise => {
- const ret = {
+ const raiddata = {
participants:{
Druid: <(Signup&Character&Spec)[]>[],
Hunter: <(Signup&Character&Spec)[]>[],
@@ -198,8 +212,11 @@ implements FrontworkComponent, IRaidManag
late: <(Signup&Character&Spec)[]>[],
bench: <(Signup&Character&Spec)[]>[],
},
- tokens:{}
+ tokens:{},
+ healers:<(Signup&Character&Spec)[]>[],
+ tanks:<(Signup&Character&Spec)[]>[]
}
+ const tx = await this.admin.knex.transaction()
const subQuery = this.admin
.knex('signups')
@@ -211,14 +228,17 @@ implements FrontworkComponent, IRaidManag
})
.as('signupcount')
+
const raidInDb: Raid = await this.admin.knex('raids')
.select('*', subQuery)
+ .transacting(tx)
.where('id','=',raid.id)
.first()
const characterData: (Signup & Character & Spec)[] = await this.admin
.knex('signups as s')
- .select('s.id as id', 'charactername', 'class', 'specname', 'race', 'userid', 'benched', 'late', 'raidid', 'characterid')
+ .transacting(tx)
+ .select('s.id as id', 'charactername', 'class', 'specid', 'specname', 'race', 'userid', 'benched', 'late', 'raidid', 'characterid', 'specid')
.join('raids as r', 's.raidid','=','r.id')
.join('characters as c', 's.characterid','=','c.id')
.join('users as u', 'c.userid','=','u.id')
@@ -227,18 +247,19 @@ implements FrontworkComponent, IRaidManag
characterData.forEach(data => {
if(data.benched){
- ret.participants.bench.push(data)
+ raiddata.participants.bench.push(data)
return
}
if(data.late){
- ret.participants.late.push(data)
+ raiddata.participants.late.push(data)
return
}
- ret.participants[data.class].push(data)
+ raiddata.participants[data.class].push(data)
})
const tokenData: (Character & SRToken & Item)[] = await this.admin
.knex('signups as s')
+ .transacting(tx)
.select('*', 's.id as id')
.join('raids as r', 's.raidid','=','r.id')
.where('r.id','=',raid.id)
@@ -249,14 +270,33 @@ implements FrontworkComponent, IRaidManag
.join('tokens as t', 't.characterid','=','c.id')
.join('items as i', 'i.itemname','=','t.itemname')
+ await tx.commit()
+
tokenData.forEach(data => {
- if(!ret.tokens[data.itemname])
- ret.tokens[data.itemname] = []
- ret.tokens[data.itemname].push(data)
+ if(!raiddata.tokens[data.itemname])
+ raiddata.tokens[data.itemname] = []
+ raiddata.tokens[data.itemname].push(data)
})
+
+ raiddata.tanks = Object.values(raiddata.participants).flatMap(
+ (tanks:any[]) => tanks.filter((p:any) =>
+ !p.benched
+ && !p.late
+ && (p.specname==="Protection"
+ || p.specname==="Feral (Tank)"))
+ )
+ raiddata.healers = Object.values(raiddata.participants).flatMap(
+ (healers:any[]) => healers.filter((p:any) =>
+ !p.benched
+ && !p.late
+ && (p.specname==="Holy"
+ || p.specname==="Discipline"
+ || p.specname==="Restoration"))
+ )
+
return {
...raidInDb,
- ...ret
+ ...raiddata
}
}
@@ -273,9 +313,11 @@ implements FrontworkComponent, IRaidManag
if(!maybeUserRecord || maybeUserRecord.user.id != character.userid){
throw new Error("Bad Usertoken")
}
+ const tx = await this.admin.knex.transaction()
const exists = await this.admin
.knex('signups')
+ .transacting(tx)
.select('*')
.where({
raidid: raid.id!,
@@ -286,20 +328,28 @@ implements FrontworkComponent, IRaidManag
if(!exists){
await this.admin
.knex('signups')
+ .transacting(tx)
.insert({
raidid: raid.id!,
characterid: character.id!,
- late: late
+ late: late,
+ benched: false,
})
}else{
await this.admin
.knex('signups')
+ .transacting(tx)
+ .where({
+ id: exists.id
+ })
.update({
raidid: raid.id!,
characterid: character.id!,
- late: late
+ late: late,
+ benched: false,
})
}
+ await tx.commit()
return await this.admin
.knex('signups')
@@ -317,6 +367,46 @@ implements FrontworkComponent, IRaidManag
throw new Error("Bad Usertoken")
}
+ return await this.adminUnsign(character, raid)
+ }
+
+ adminUnsign = async (character:Character, raid:Raid) => {
+
+ const user = await this.characterManager.getUserOfCharacter(character)
+
+ const signup = await this.admin.knex('signups as si')
+ .where({
+ "si.raidid": raid.id!,
+ "si.characterid": character.id!,
+ }).first()
+
+ const tokens = await this.admin.knex('tokens as t')
+ .where('t.signupid', signup.id)
+
+ //check if token has to be deleted
+ Promise.all(
+ tokens.map(async token => {
+ await this.userManager.incrementCurrency(user, 1)
+ const prio = await this.itemManager.calculatePriorities(token.itemname, character)
+ if(token.level <= prio+1){
+ await this.admin.knex('tokens')
+ .where({
+ characterid: character.id,
+ itemname: token.itemname
+ }).del()
+ }else{
+ await this.admin.knex('tokens')
+ .where({
+ characterid: character.id,
+ itemname: token.itemname
+ }).update({
+ signupid: null,
+ level: token.level-1
+ })
+ }
+ })
+ )
+
await this.admin.knex('signups')
.where({
raidid: raid.id!,
diff --git a/src/backend/Types/Types.ts b/src/backend/Types/Types.ts
index 33c0cdf..4d01c5a 100644
--- a/src/backend/Types/Types.ts
+++ b/src/backend/Types/Types.ts
@@ -58,6 +58,8 @@ export type RaidData = Raid & {
tokens: {
[itemname in string]: (Character & SRToken & Item)[]
}
+ tanks: (Signup & Character & Spec)[]
+ healers: (Signup & Character & Spec)[]
}
export type SRToken = {
diff --git a/src/frontend/src/app/@theme/components/header/header.component.ts b/src/frontend/src/app/@theme/components/header/header.component.ts
index e43cae9..2dc2dec 100644
--- a/src/frontend/src/app/@theme/components/header/header.component.ts
+++ b/src/frontend/src/app/@theme/components/header/header.component.ts
@@ -73,8 +73,12 @@ export class HeaderComponent implements OnInit, OnDestroy {
this.api.connectShoutbox((msg) => {
this.chatlog.push(msg)
- if(msg.message != this.lastmessage)
+ msg['reply']=false
+
+ if(msg.message != this.lastmessage){
this.newmessage = true
+ msg['reply']=true
+ }
if(this.chatwindow) this.chatwindow.messages.push(msg)
}).then(sendMsg => {
this.sendMessage = (msg) => {
diff --git a/src/frontend/src/app/frontcraft/pages/character/character.component.html b/src/frontend/src/app/frontcraft/pages/character/character.component.html
index f6828d8..26985b4 100644
--- a/src/frontend/src/app/frontcraft/pages/character/character.component.html
+++ b/src/frontend/src/app/frontcraft/pages/character/character.component.html
@@ -15,7 +15,9 @@ status="control">
+
{{char.race}}
+
{{char.specname}} {{char.class}}
Owned by {{char.username}} ({{char.rank}})
diff --git a/src/frontend/src/app/frontcraft/pages/character/character.component.ts b/src/frontend/src/app/frontcraft/pages/character/character.component.ts
index 8980fac..42c02d5 100644
--- a/src/frontend/src/app/frontcraft/pages/character/character.component.ts
+++ b/src/frontend/src/app/frontcraft/pages/character/character.component.ts
@@ -13,7 +13,10 @@ export class FrontcraftCharacterComponent implements OnInit{
@Input() name?: string
@Input() link?: "owner" | "character" = 'owner'
- char : (Character & User & Spec) = {} as any
+ char : (Character & User & Spec) = {
+ race: 'Human',
+ class: 'Warrior'
+ } as any
color : string
tokens
diff --git a/src/frontend/src/app/frontcraft/pages/characters/characters.component.html b/src/frontend/src/app/frontcraft/pages/characters/characters.component.html
index 9134289..795c0d3 100644
--- a/src/frontend/src/app/frontcraft/pages/characters/characters.component.html
+++ b/src/frontend/src/app/frontcraft/pages/characters/characters.component.html
@@ -17,12 +17,14 @@
+
{{character.race}}
|
{{character.specname}}
|
+
{{character.class}}
|
diff --git a/src/frontend/src/app/frontcraft/pages/pages-layout.component.ts b/src/frontend/src/app/frontcraft/pages/pages-layout.component.ts
index 4b9f1e2..ef7f33c 100644
--- a/src/frontend/src/app/frontcraft/pages/pages-layout.component.ts
+++ b/src/frontend/src/app/frontcraft/pages/pages-layout.component.ts
@@ -22,10 +22,6 @@ export class PagesLayoutComponent implements AfterContentInit{
icon: 'people',
title: 'Characters',
link: '/frontcraft/characters',
- },{
- icon: 'shopping-cart',
- title: 'Token Shop',
- link: '/frontcraft/shop',
},{
icon: 'book-open-outline',
title: 'Loot Rules',
diff --git a/src/frontend/src/app/frontcraft/pages/pages-routing.module.ts b/src/frontend/src/app/frontcraft/pages/pages-routing.module.ts
index f95c932..371e302 100644
--- a/src/frontend/src/app/frontcraft/pages/pages-routing.module.ts
+++ b/src/frontend/src/app/frontcraft/pages/pages-routing.module.ts
@@ -39,10 +39,6 @@ export const routes: Routes = [
path: 'characters',
component: FrontcraftCharactersComponent,
},
- {
- path: 'shop',
- component: FrontcraftShopComponent
- },
{
path: 'rules',
component: FrontcraftRulesComponent
diff --git a/src/frontend/src/app/frontcraft/pages/raid/archive.component.ts b/src/frontend/src/app/frontcraft/pages/raid/archive.component.ts
index 2c89b0c..d5f8dd5 100644
--- a/src/frontend/src/app/frontcraft/pages/raid/archive.component.ts
+++ b/src/frontend/src/app/frontcraft/pages/raid/archive.component.ts
@@ -27,8 +27,13 @@ export class FrontcraftArchiveComponent implements OnInit{
Warlock: [],
Warrior: [],
},
- tokens:{}
+ tokens:{},
+ tanks:[],
+ healers: []
}
+ tokens = {}
+ displayedtokens = {}
+ search = ""
constructor(
private api: ApiService,
@@ -46,19 +51,21 @@ export class FrontcraftArchiveComponent implements OnInit{
const raidManager = this.api.get('RaidManager')
const raiddata = await raidManager.getArchiveRaid(parseInt(param))
this.raid = raiddata
+ this.tokens = raiddata.tokens;
- Object.values(raiddata.participants).flat().forEach(p => {
+ [
+ ...raiddata.tanks,
+ ...raiddata.healers,
+ ...Object.values(raiddata.participants).flat()
+ ].forEach(p => {
p['color'] = getClassColor(p.class)
})
-
- const matchingSignup = Object.values(raiddata.participants).flat().find(char => char.userid === this.api.getCurrentUser()!.id!)
- if(matchingSignup){
- this.isSignedup = true
- this.mySignup = matchingSignup
- this.mySignup.status = matchingSignup['benched']?'Bench':matchingSignup['late']?'Late':'Attending'
- }else{
- this.isSignedup = false
- this.mySignup = null
- }
- }
+
+ this.changeSearch()
+ }
+
+ changeSearch = () => {
+ this.tokens = this.raid.tokens;
+ this.displayedtokens = this.raid.tokens;
+ }
}
\ No newline at end of file
diff --git a/src/frontend/src/app/frontcraft/pages/raid/raid.component.html b/src/frontend/src/app/frontcraft/pages/raid/raid.component.html
index ff6b63a..7d0e65c 100644
--- a/src/frontend/src/app/frontcraft/pages/raid/raid.component.html
+++ b/src/frontend/src/app/frontcraft/pages/raid/raid.component.html
@@ -17,14 +17,32 @@
Status: {{mySignup.status}}
+
+
+ unsign
+
@@ -44,6 +62,74 @@
badgePosition="top right"
[badgeStatus]="raid.signupcount<40?'warning':'success'">
@@ -70,12 +167,14 @@
-
+
+
+
-
+
@@ -104,15 +203,6 @@
size="medium">
start
-
-
diff --git a/src/frontend/src/app/frontcraft/pages/raid/raid.component.ts b/src/frontend/src/app/frontcraft/pages/raid/raid.component.ts
index cdaed87..ccf3447 100644
--- a/src/frontend/src/app/frontcraft/pages/raid/raid.component.ts
+++ b/src/frontend/src/app/frontcraft/pages/raid/raid.component.ts
@@ -1,10 +1,10 @@
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { ApiService as ApiService } from '../../services/login-api';
-import { RaidData, Raid, Signup } from '../../../../../../backend/Types/Types';
+import { RaidData, Raid, Signup, Character, Spec, Item, SRToken } from '../../../../../../backend/Types/Types';
import { NbWindowService, NbToastrService, NbDialogService } from '@nebular/theme';
import { FrontcraftCharacerpickerComponent } from './characterpicker.component';
-import { getClassColor } from '../../../../../../backend/Types/PlayerSpecs';
+import { getClassColor, SpecT } from '../../../../../../backend/Types/PlayerSpecs';
import { FrontcraftBuyTokenComponent } from '../shop/buytoken.component';
@Component({
@@ -15,8 +15,9 @@ export class FrontcraftRaidComponent implements OnInit{
canSignup = false
isSignedup = false
+ islate = false
manageRaid
- mySignup
+ mySignup: (Signup & Character & Spec)
raid: RaidData = {
participants:{
@@ -30,9 +31,14 @@ export class FrontcraftRaidComponent implements OnInit{
Warlock: [],
Warrior: [],
},
+ tanks: [],
+ healers: [],
tokens:{}
}
-
+ tokens = {}
+ displayedtokens = {}
+ search = ""
+
constructor(
private api: ApiService,
private route: ActivatedRoute,
@@ -93,11 +99,40 @@ export class FrontcraftRaidComponent implements OnInit{
const signupFeature = this.api.get('signup')
if(!signupFeature) return
- await signupFeature.unsign(this.api.getAuth().token.value, {id: this.mySignup.characterid, userid: this.mySignup.userid}, this.raid)
+ await signupFeature.unsign(this.api.getAuth().token.value, {
+ ...this.mySignup,
+ id: this.mySignup.characterid,
+ }, this.raid)
this.toast.show('Success', 'Unsigned', { status: 'success' })
this.refresh()
}
+ setLate = async (value:boolean) => {
+ const auth = this.api.getAuth()
+ const signup = this.api.get('signup')
+ if(!signup) return
+
+ console.log("setlate");
+
+
+ await signup.sign(auth.token.value, {
+ ...this.mySignup,
+ id: this.mySignup.characterid,
+ }, this.raid, value)
+ this.toast.show('Signup', 'Success', { status: 'success' })
+ this.refresh()
+ }
+
+ adminUnsign = async() => {
+ const manage = this.api.get('manageRaid')
+ if(!manage) return
+ await manage.adminUnsign({
+ ...this.mySignup,
+ id: this.mySignup.characterid,
+ }, this.raid)
+ this.refresh()
+ }
+
refresh = async () => {
const param = this.route.snapshot.paramMap.get('id');
@@ -105,22 +140,40 @@ export class FrontcraftRaidComponent implements OnInit{
const raiddata = await raidManager.getRaidData({
id: param
})
+
this.raid = raiddata
+ this.tokens = raiddata.tokens;
- Object.values(raiddata.participants).flat().forEach(p => {
+ [...raiddata.tanks, ...raiddata.healers, ...Object.values(raiddata.participants).flat()].forEach(p => {
p['color'] = getClassColor(p.class)
})
+
const user = this.api.getCurrentUser()
const matchingSignup = Object.values(raiddata.participants).flat().find(char => user && char.userid === user.id!)
if(matchingSignup){
-
this.isSignedup = true
this.mySignup = matchingSignup
- this.mySignup.status = matchingSignup['benched']?'Bench':matchingSignup['late']?'Late':'Attending'
+ this.mySignup['status'] = matchingSignup['benched']?'Bench':matchingSignup['late']?'Late':'Attending'
}else{
this.isSignedup = false
this.mySignup = null
}
+ this.changeSearch()
+ }
+
+ changeSearch(){
+ if(!this.search || this.search == ""){
+ this.displayedtokens = this.tokens
+ }else{
+ this.displayedtokens = {}
+ Object.entries(this.tokens).forEach((e: [string, (Character & SRToken & Item)[]]) => {
+ const filteredTokens = e[1].filter(item => {
+ return item.itemname.toLocaleLowerCase().includes(this.search.toLocaleLowerCase())
+ })
+ if(filteredTokens.length > 0)
+ this.displayedtokens[e[0]] = filteredTokens
+ })
+ }
}
setBench(signup:Signup){
diff --git a/src/frontend/src/app/frontcraft/pages/rules/rules.component.html b/src/frontend/src/app/frontcraft/pages/rules/rules.component.html
index 0450bd2..7a98fae 100644
--- a/src/frontend/src/app/frontcraft/pages/rules/rules.component.html
+++ b/src/frontend/src/app/frontcraft/pages/rules/rules.component.html
@@ -20,7 +20,7 @@
{{rule.description}}
- +{{rule.modifier}} {{rule.race}} {{rule.specname}} {{rule.class}}
+ 0">+{{rule.modifier}} {{rule.race}} {{rule.specname}} {{rule.class}}
diff --git a/src/frontend/src/app/frontcraft/pages/shop/buytoken.component.ts b/src/frontend/src/app/frontcraft/pages/shop/buytoken.component.ts
index c06ff6a..f469495 100644
--- a/src/frontend/src/app/frontcraft/pages/shop/buytoken.component.ts
+++ b/src/frontend/src/app/frontcraft/pages/shop/buytoken.component.ts
@@ -72,13 +72,18 @@ import { _Tiers, allItems, Tiers } from '../../../../../../backend/Types/Items';
.then(chars => {
chars.forEach(char => {
char['color'] = getClassColor(char.class)
- this.api.get('ItemManager').getToken(char, this.item).then(token => {
- if(token) this.ownedtokens.push(token)
- else{
- this.api.get('ItemManager').calculatePriorities(this.item.itemname, char).then(modifier => {
- this.modifier[char.charactername] = modifier
- })
- }
+ this.api.get('ItemManager').getToken(char, this.item, false).then(token => {
+ if(token) this.ownedtokens.push(token)
+ else{
+ this.api.get('ItemManager').getToken(char, this.item, true).then(tokken => {
+ if(tokken) this.ownedtokens.push(tokken)
+ else{
+ this.api.get('ItemManager').calculatePriorities(this.item.itemname, char).then(modifier => {
+ this.modifier[char.charactername] = modifier
+ })
+ }
+ })
+ }
})
})
this.characters = chars
@@ -90,15 +95,14 @@ import { _Tiers, allItems, Tiers } from '../../../../../../backend/Types/Items';
}
buyToken = async (charactername:string) => {
-
- const src = this.api.get('ItemManager')
- const token = await src.buyToken(this.api.getAuth().token.value, charactername, this.item.itemname, this.signup)
-
- if(token){
- this.toastr.show(token.characterid+' now has a token for '+token.itemname+' of level '+token.level, 'Yay', {status: 'success'})
- }else{
- this.toastr.show('Error (something went wrong)', 'Oh no', {status: 'danger'})
- }
- this.dialogRef.close()
+ const src = this.api.get('ItemManager')
+ const token = await src.buyToken(this.api.getAuth().token.value, charactername, this.item.itemname, this.signup)
+
+ if(token){
+ this.toastr.show(token.characterid+' now has a token for '+token.itemname+' of level '+token.level, 'Yay', {status: 'success'})
+ }else{
+ this.toastr.show('Error (something went wrong)', 'Oh no', {status: 'danger'})
+ }
+ this.dialogRef.close()
}
}
\ No newline at end of file
diff --git a/src/frontend/src/assets/images/dwarf.png b/src/frontend/src/assets/images/dwarf.png
new file mode 100644
index 0000000000000000000000000000000000000000..39e14b0957a54ee625985c50128d8113a8151a47
GIT binary patch
literal 6690
zcmV+-8r|iIP)1I`9LToxJ#z9~C@c3X
z^4oVNrEzUqMh_1Of9C|P@uLNq`%zKeza7fQvjy3@T9x(Zg6Ke^OXPAndEXBh-w?g^s70wVzTR*gNEQoEGofwwJk(_L|BH4a9kb9@c
zOTbeq#M?
z{bW6o%~~kC_vfV<=Hh!1gn6kqOERyQ*_jXIlkXQ~UO$aT;bFBU9|kh_oe^2*lfRnM
zvxNFOlC2j*$!ml&V`}8GMse-=f_!$ZARASEt#96L1d_{Is56=EKXv@pN^m5QQYDh|
z_d>mNBn|bhalIr_DU|TZeDXdGuxxK{$IHS0SpIHN@`v-X^iD}yKbw?=mqulGts;#B
zS$Xf`q*M>*q^0X>@<@E5;*(K)0%93HJtlc`IFe64n3T@Dkz9RtOqSJ>s+zi_QJFth
zkb0DtnWu8nR9E6ScUNp2&QO}KRb*=;l7%A~>AYT*&fSJ=vw9jOeZ3&_YDK$I)(>+h
zbMXlRHT%Nsggys>RI8CJHv?%M9gzjS+LGQ;3*3xarypwQO|2`=A0C$6!`=0o4{}n~
z(9h3J%JST}tmy~7cxzH`%e4IYN0IC-Y9RGJwMX