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'">
+ + Tanks ({{raid.tanks.length}}) + + + + + + + Healers ({{raid.healers.length}}) + + + + + B + + + {{ participant.charactername }}
@@ -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}}
+ +{{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 0000000..39e14b0 Binary files /dev/null and b/src/frontend/src/assets/images/dwarf.png differ diff --git a/src/frontend/src/assets/images/dwarf_xs.gif b/src/frontend/src/assets/images/dwarf_xs.gif new file mode 100644 index 0000000..7ccdce5 Binary files /dev/null and b/src/frontend/src/assets/images/dwarf_xs.gif differ diff --git a/src/frontend/src/assets/images/gnome.png b/src/frontend/src/assets/images/gnome.png new file mode 100644 index 0000000..3821686 Binary files /dev/null and b/src/frontend/src/assets/images/gnome.png differ diff --git a/src/frontend/src/assets/images/gnome_xs.gif b/src/frontend/src/assets/images/gnome_xs.gif new file mode 100644 index 0000000..744505a Binary files /dev/null and b/src/frontend/src/assets/images/gnome_xs.gif differ diff --git a/src/frontend/src/assets/images/human.png b/src/frontend/src/assets/images/human.png new file mode 100644 index 0000000..0bc152d Binary files /dev/null and b/src/frontend/src/assets/images/human.png differ diff --git a/src/frontend/src/assets/images/human_xs.gif b/src/frontend/src/assets/images/human_xs.gif new file mode 100644 index 0000000..054236b Binary files /dev/null and b/src/frontend/src/assets/images/human_xs.gif differ diff --git a/src/frontend/src/assets/images/night elf.png b/src/frontend/src/assets/images/night elf.png new file mode 100644 index 0000000..598f5ad Binary files /dev/null and b/src/frontend/src/assets/images/night elf.png differ diff --git a/src/frontend/src/assets/images/night elf_xs.gif b/src/frontend/src/assets/images/night elf_xs.gif new file mode 100644 index 0000000..d10e767 Binary files /dev/null and b/src/frontend/src/assets/images/night elf_xs.gif differ diff --git a/src/frontend/src/assets/images/team.png b/src/frontend/src/assets/images/team.png deleted file mode 100644 index 17c7d17..0000000 Binary files a/src/frontend/src/assets/images/team.png and /dev/null differ diff --git a/src/frontend/src/assets/images/warlock.png b/src/frontend/src/assets/images/warlock.png new file mode 100644 index 0000000..393a7d4 Binary files /dev/null and b/src/frontend/src/assets/images/warlock.png differ diff --git a/test/backendTest.ts b/test/backendTest.ts index fa03588..82ae6c3 100644 --- a/test/backendTest.ts +++ b/test/backendTest.ts @@ -79,7 +79,7 @@ const testAccounts : protoAccount[] = [ spec: 'Fury', rank: 'Classleader' },{ - name: 'Teenieweenie', + name: 'Teeniweeni', class: 'Warlock', race: 'Gnome', spec: 'Demonology', @@ -276,10 +276,30 @@ describe('Frontcraft', () => { undefined, 1, "hit bias" ), + makePrio( + 'Maladath, Runed Blade of the Black Flight', + undefined, + "Human", -2, "(1) Non-Human" + ), + makePrio( + 'Maladath, Runed Blade of the Black Flight', + {class:'Rogue', specname:'Subtlety'}, + undefined, 2, "...Rogues (weapon skill bias)" + ), + makePrio( + 'Maladath, Runed Blade of the Black Flight', + {class:'Rogue', specname:'Combat'}, + undefined, 2, "...Rogues (weapon skill bias)" + ), + makePrio( + 'Maladath, Runed Blade of the Black Flight', + {class:'Rogue', specname:'Assassination'}, + undefined, 2, "...Rogues (weapon skill bias)" + ), makePrio( 'Maladath, Runed Blade of the Black Flight', {class:'Warrior', specname:'Fury'}, - 'Human', 2, "weapon skill bias" + 'Human', 4, "+2 Fury Warrior (weapon skill bias), +2 to offset (1)" ), makePrio( @@ -556,7 +576,6 @@ describe('Frontcraft', () => { } else{ console.log("Bad user currency", dbUser); - } }) }