Compare commits

...

2 Commits

Author SHA1 Message Date
Tomasi - Developing
54bf204a51 . 2026-02-02 14:15:49 +01:00
Tomasi - Developing
2bde6c110a v1.001 2026-02-02 14:14:39 +01:00
8 changed files with 239 additions and 201 deletions

152
CHANGELOG-BETA.md Normal file
View File

@ -0,0 +1,152 @@
# Changelog Beta Phase
All notable changes during the beta phase of PlayerManagement
from **0.3.0-beta** to **0.11.0** are documented here.
⚠️ These versions are no longer actively maintained.
---
## [0.11.0] 2025-06-19
### ✨ Added
- **Squad Management per Player:** You can now add up to **four squads per player**, each with:
- Power (in millions)
- Position
- Type: Tank, Aircraft, Missile, or Mixed
- **Visual Enhancements:** Squad types are displayed with custom icons and total power is summarized at the top of the squad card.
### 🛠️ Fixed
- (N/A)
---
## [0.10.0] 2025-06-02
### ✨ Added
- **Team Selection for Desert Storm:** Team A / Team B selectable when creating an entry.
- **Team Display in Table:** Selected team is shown in the Desert Storm overview table.
---
## [0.9.1] 2025-04-24
### ✨ Added
- **Number Formatting Input Mask:** Automatic formatting (e.g. `250000``250.000`).
### 🛠️ Fixed
- Selected category was not saved correctly when updating a custom event.
---
## [0.9.0] 2025-04-23
### ✨ Added
- Event categories for custom events.
- Category-based leaderboards depending on event type.
### 🛠️ Fixed
- Minor display issues in events and leaderboards.
---
## [0.8.3] 2025-04-10
### ♻️ Changed
- Updated all NuGet packages.
- Cleaned up Serilog and Seq configuration.
---
## [0.8.0] 2025-03-11
### ✨ Added
- Feedback page with GitHub issue creation.
- Screenshot upload support.
- Success message with GitHub issue link.
---
## [0.7.0] 2025-02-06
### ✨ Added
- MVP page with calculation formula.
- Filters for R4/R5 members.
- API key generation.
- MVP list API endpoint.
---
## [0.6.1] 2025-01-28
### 🛠️ Fixed
- VS table data display bug.
---
## [0.6.0-beta] 2025-01-28
### ✨ Added
- Pagination for all tables.
- Alliance-wide Zombie Siege wave overview.
---
## [0.5.1-beta] 2025-01-27
### 🛠️ Fixed
- Zombie Siege: custom smile for exactly 20 waves.
---
## [0.5.0-beta] 2025-01-21
### ✨ Added
- VS Duel bar chart for player detail view.
---
## [0.4.1-beta] 2025-01-21
### ✨ Added
- Excel import for players.
### 🛠️ Fixed
- Week pipe calculation logic.
---
## [0.4.0-beta] 2025-01-20
### ✨ Added
- Player dismissal page (GUI).
---
## [0.3.6-beta] 2025-01-16
### ✨ Added
- Core player dismissal functionality.
---
## [0.3.5-beta] 2025-01-09
### 🛠️ Fixed
- MVP calculation formula.
---
## [0.3.4-beta] 2025-01-07
### ✨ Added
- Alliance MVP calculation with API support.
---
## [0.3.3-beta] 2024-12-17
### ✨ Added
- Custom event functionality.
---
## [0.3.2-beta] 2024-12-03
### ✨ Added
- Event progress status.
- League tiers in VS Duel.
---
## [0.3.1-beta] 2024-11-28
### ✨ Added
- Zombie Siege event.
---
## [0.3.0-beta] 2024-11-26
### ✨ Added
- Initial beta release.

View File

@ -15,6 +15,7 @@ Project("{54A90642-561A-4BB1-A94E-469ADEE60C69}") = "Ui", "Ui\Ui.esproj", "{7716
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Projektmappenelemente", "Projektmappenelemente", "{E8BE2EF5-0D8D-4D68-9979-0680938F26DF}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Projektmappenelemente", "Projektmappenelemente", "{E8BE2EF5-0D8D-4D68-9979-0680938F26DF}"
ProjectSection(SolutionItems) = preProject ProjectSection(SolutionItems) = preProject
CHANGELOG-BETA.md = CHANGELOG-BETA.md
README.md = README.md README.md = README.md
EndProjectSection EndProjectSection
EndProject EndProject

203
README.md
View File

@ -16,201 +16,22 @@
## Changelog ## Changelog
All notable changes to this project are documented here. All notable changes to PlayerManagement are documented here.
This project is currently in the **Beta Phase**. This section contains **stable (non-beta) releases only**.
📜 **Beta history:**
All beta versions (0.x.x) can be found here →
➡️ [`CHANGELOG-BETA.md`](CHANGELOG-BETA.md)
--- ---
### **[0.11.0]** - *2025-06-19* ### **[1.0.1]** *2026-02-02* 🎉
#### ✨ Added #### ✨ Added
- **Squad Management per Player:** You can now add up to **four squads per player**, each with: - **Zombie Siege Perfect Checkbox**
- **Power** (in millions) A new **“Perfect” checkbox** is available for each player.
- **Position** When enabled, the survived wave is **automatically set to 20**.
- **Type**: Tank, Aircraft, Missile, or Mixed
- **Visual Enhancements:** Squad types are displayed with custom icons and total power is summarized at the top of the squad card.
🛠️ **Fixed** - **Player Search in Add & Edit Dialogs**
- (N/A) In **Zombie Siege** and **Desert Storm**, players can now be **searched by player name** when **adding or editing** entries.
--- ---
### **[0.10.0]** - *2025-06-02*
#### ✨ Added
- **Team Selection for Desert Storm:** You can now assign **Team A** or **Team B** when creating a Desert Storm entry.
- **Team Display in Table:** The selected team is now also shown in the Desert Storm overview table.
🛠️ **Fixed**
- (N/A)
---
### **[0.9.1]** - *2025-04-24*
#### ✨ Added
- **Number Formatting Input Mask:** Numbers are now automatically formatted for better readability (e.g., `250000``250.000`).
🛠️ **Fixed**
- Fixed an issue where the selected category was not saved correctly when updating a custom event.
---
### **[0.9.0]** - *2025-04-23*
#### ✨ Added
- **Event Categories:** Custom events can now be assigned to specific categories.
- **Category-Based Leaderboards:** Each category can have its own leaderboard, depending on the event type (e.g., participation-only, points-only, or a combination).
🛠️ **Fixed**
- Minor display issues in the event and leaderboard sections have been resolved.
---
### **[0.8.3]** - *2025-04-10*
#### ♻️ Changed
- **NuGet Packages:** Updated all dependencies, including Serilog and Seq, to their latest stable versions.
- **Logging Setup:** Cleaned up and reorganized the Serilog configuration for improved clarity and maintainability.
🛠️ **Fixed**
- (N/A)
---
### **[0.8.0]** - *2025-03-11*
#### ✨ Added
- **Feedback Page:** Users can now submit feedback, including bug reports and feature requests.
- **GitHub Integration:** Feedback is automatically created as a GitHub issue, providing a direct link to track progress.
- **Screenshot Upload:** Users can attach a screenshot to better illustrate issues.
- **Success Message:** After submission, the form hides, and a success message with the GitHub issue link is displayed.
🛠️ **Fixed**
- (N/A)
---
### **[0.7.0]** - *2025-02-06*
#### ✨ Added
- **MVP Page**: A new page has been introduced where players can be loaded and a list of MVPs is displayed based on a calculation formula.
- **Filter Options**: You can now display the entire alliance, only R4/R5 members, or just players without R5/R4.
- **API Key**: A new tab has been added under the alliance section, allowing users to generate an API key to access endpoints and integrate them into their own systems.
- **MVP List Endpoint**: The API endpoint for fetching the MVP list is now available.
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.6.1]** - *2025-01-28*
#### ✨ Added
- *(N/A)*
#### 🛠️ Fixed
- **VS Table**: Resolved a bug that caused incorrect data display.
---
### **[0.6.0-beta]** - *2025-01-28*
#### ✨ Added
- **Pagination**: Implemented and adjusted for all tables.
- **Zombie Siege**: Expanded the table to display all waves survived by the entire alliance.
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.5.1-beta]** - *2025-01-27*
#### ✨ Added
- *(N/A)*
#### 🛠️ Fixed
- *Zombie siege**: Smile customised for exactly 20 waves
---
### **[0.5.0-beta]** - *2025-01-21*
#### ✨ Added
- **Player VS Duel**: In the player detail view, the VS points can now be viewed as a bar chart.
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.4.1-beta]** - *2025-01-21*
#### ✨ Added
- **Excel Import**: Players can now be imported via Excel.
#### 🛠️ Fixed
- **Week Pipe Logic**: Corrected calculation logic for weekly processing.
---
### **[0.4.0-beta]** - *2025-01-20*
#### ✨ Added
- **Player Dismissal Page**: A new GUI page was added for dismissing players.
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.3.6-beta]** - *2025-01-16*
#### ✨ Added
- **Player Dismissal Function**: Core dismissal functionality implemented.
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.3.5-beta]** - *2025-01-09*
#### ✨ Added
- *(N/A)*
#### 🛠️ Fixed
- **MVP Formula**: Corrected MVP calculation formula.
---
### **[0.3.4-beta]** - *2025-01-07*
#### ✨ Added
- **Alliance MVP Calculation**: Implemented MVP calculation for alliances with API endpoint support.
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.3.3-beta]** - *2024-12-17*
#### ✨ Added
- **Custom Event**: Introduced custom event functionality.
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.3.2-beta]** - *2024-12-03*
#### ✨ Added
- **Event Progress**: "In Progress" status added to events.
- **League Details in VS Duel**: Added league tiers (e.g., Silver, Gold, Diamond).
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.3.1-beta]** - *2024-11-28*
#### ✨ Added
- **Zombie Siege Event**: Introduced a new Zombie Siege event.
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.3.0-beta]** - *2024-11-26*
#### ✨ Added
- **Initial Beta Release**: Core features introduced in the first beta release.
#### 🛠️ Fixed
- *(N/A in the initial release)*

View File

@ -6,8 +6,19 @@
</div> </div>
<div class="modal-body"> <div class="modal-body">
<!-- 🔍 Suche oben, volle Breite -->
<div class="mb-3 w-75 m-auto">
<div class="input-group">
<input
type="search"
class="form-control"
placeholder="Search player..."
[(ngModel)]="playerSearch"
/>
</div>
</div>
<div class="row"> <div class="row">
@for (player of playerParticipated; track player.playerId; let i = $index) { @for (player of filteredPlayers; track player.playerId; let i = $index) {
<div class="col-12 col-md-6 mb-4"> <div class="col-12 col-md-6 mb-4">
<div class="d-flex flex-column align-items-center border p-3"> <div class="d-flex flex-column align-items-center border p-3">
<h6 class="mb-4 text-color">{{player.playerName}}</h6> <h6 class="mb-4 text-color">{{player.playerName}}</h6>

View File

@ -18,6 +18,7 @@ export class DesertStormParticipantsModalComponent implements OnInit {
@Input({required: true}) allianceId!: string; @Input({required: true}) allianceId!: string;
@Input() players: {playerId: string, playerName: string, participated: boolean, registered: boolean, startPlayer: boolean}[] | undefined; @Input() players: {playerId: string, playerName: string, participated: boolean, registered: boolean, startPlayer: boolean}[] | undefined;
playerSearch: string = '';
ngOnInit() { ngOnInit() {
if (this.players) { if (this.players) {
@ -27,6 +28,15 @@ export class DesertStormParticipantsModalComponent implements OnInit {
} }
} }
get filteredPlayers() {
const q = this.playerSearch.trim().toLowerCase();
if (!q) return this.playerParticipated;
return this.playerParticipated.filter(p =>
(p.playerName ?? '').toLowerCase().includes(q)
);
}
getPlayers() { getPlayers() {
this._playerService.getAlliancePlayer(this.allianceId).subscribe({ this._playerService.getAlliancePlayer(this.allianceId).subscribe({
next: ((response) => { next: ((response) => {

View File

@ -6,13 +6,35 @@
</div> </div>
<div class="modal-body"> <div class="modal-body">
<!-- 🔍 Suche oben, volle Breite -->
<div class="mb-3 w-75 m-auto">
<div class="input-group">
<input
type="search"
class="form-control"
placeholder="Search player..."
[(ngModel)]="playerSearch"
/>
</div>
</div>
<div class="check-box-container d-flex flex-wrap"> <div class="check-box-container d-flex flex-wrap">
@for (player of playerParticipated; track player.playerId) { @for (player of filteredPlayers; track player.playerId) {
<div class="form-check flex-item"> <div class="form-check flex-item">
<label class="form-check-label" for="{{player.playerId}}"> <div class="d-flex align-items-center justify-content-between">
<span class="text-color">{{ player.playerName }}</span> <span class="text-color">{{ player.playerName }}</span>
</label>
<select class="form-select" [(ngModel)]="player.survivedWaves"> <div class="d-flex align-items-center gap-2">
<input
type="checkbox"
class="form-check-input m-0"
[checked]="player.survivedWaves === 20"
(change)="onPerfectToggle($event, player)"
/>
<span class="small text-warning">Perfect</span>
</div>
</div>
<select class="form-select mt-1" [(ngModel)]="player.survivedWaves">
@for (wave of waves; track wave) { @for (wave of waves; track wave) {
<option [ngValue]="wave">{{ wave }}</option> <option [ngValue]="wave">{{ wave }}</option>
} }

View File

@ -19,6 +19,17 @@ export class ZombieSiegeParticipantsModalComponent implements OnInit {
@Input() players: { playerId: string, playerName: string, survivedWaves: number; }[] | undefined; @Input() players: { playerId: string, playerName: string, survivedWaves: number; }[] | undefined;
@Input({required: true}) allianceId!: string; @Input({required: true}) allianceId!: string;
playerSearch: string = '';
get filteredPlayers() {
const q = this.playerSearch.trim().toLowerCase();
if (!q) return this.playerParticipated;
return this.playerParticipated.filter(p =>
(p.playerName ?? '').toLowerCase().includes(q)
);
}
ngOnInit() { ngOnInit() {
if (this.players) { if (this.players) {
@ -42,4 +53,14 @@ export class ZombieSiegeParticipantsModalComponent implements OnInit {
}) })
}); });
} }
onPerfectToggle(event: Event, player: any) {
const checked = (event.target as HTMLInputElement).checked;
if (checked) {
player.survivedWaves = 20;
} else {
player.survivedWaves = 0;
}
}
} }

View File

@ -65,7 +65,7 @@
} }
<!-- No Squads --> <!-- No Squads -->
@if (!squads?.length) { @if (!squads.length) {
<div class="text-muted text-center"> <div class="text-muted text-center">
No squads available. No squads available.
</div> </div>