Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Poc von einem Kampfsystem mit items #479

Open
wants to merge 29 commits into
base: master
Choose a base branch
from

Conversation

Feluin
Copy link
Contributor

@Feluin Feluin commented Oct 19, 2024

Moin, hab hier mal ein Kampfsystem gebastelt um items loszuwerden. (Bzw zum tauschen)

Noch lange nicht fertig, hier noch die TODOs:

[X] - Items doppelt ausrüstbar
[X] - Kampfhistorie
[ ] - Drops von Bossen
[ ] - Balancing
[ ] - Bessere Texte
[X] - Win/Loose-screen
[ ] - Mehr items als nur ötti und ayran
[ ] - Freischalten der Bosse
[ ] - Waffen /rüstung
[ ] - Mehr bosse

Eventuelle noch ne karte zum reisen aber das kommt in V2.

Wer bock hat kann sich mein shitcode mal anschauen.

Ideen gerne, umsetzung noch viel besser

@Feluin
Copy link
Contributor Author

Feluin commented Dec 19, 2024

@holzmaster passt das grob in dein lootkonzept?

@Feluin Feluin marked this pull request as ready for review January 3, 2025 15:45
@Feluin
Copy link
Contributor Author

Feluin commented Jan 3, 2025

Wär jetzt in son nem Alpha-stadium, das ist auch viel shitcode dabei, gerne ein code review oder direkt überarbeiten, wenn einer bock hat.

Feedback zu der nicht technischen seite wär auch nicht schlecht

Copy link
Collaborator

@holzmaster holzmaster left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ich hab nur mal grob drübergescrollt und das eigentliche Feature bzw. die business-logic noch nicht angeschaut

src/storage/db/model.ts Outdated Show resolved Hide resolved
)
.addSubcommand(
new SlashCommandSubcommandBuilder()
.setName("ausrüsten")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Vielleicht passt hier "anlegen" oder "tragen" besser. Zumindest glaube ich, dass sich /gegenstand anlegen oder so verständlicher ist als /gegenstand ausrüsten

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oder kollidiert das mit "benutzen"?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

anlegen finde ich tatsächlich passender.

Meinst du das benutzen und anlegen eigenlich das selbe tut? noch könnte man beides in ein command machen, aber potentiell gibt es items die man im chat und im kampf nutzen kann, daher würd ich das getrennt lassen

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benutzen ist etwas, was in dem moment eine Aktion ausführt. Also z.b. ein Geschenk in den Chat droppt

src/service/fightData.ts Outdated Show resolved Hide resolved
src/service/lootData.ts Outdated Show resolved Hide resolved
Comment on lines 78 to 87
const equippedStuff = await getItemsByType(userId, itemType, ctx);
for (let i = 0; i <= equippedStuff.length - maxItems[itemType]; i++) {
const unequipitem = await lootService.getUserLootById(
userId,
equippedStuff[i].lootId,
ctx,
);
unequippeditems.push(unequipitem?.displayName ?? String(equippedStuff[i].lootId));
await ctx.deleteFrom("fightinventory").where("id", "=", equippedStuff[i].id).execute();
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Vielleicht kann man das hier einfacher machen mit sowas:

const equippedStuff = await getItemsByType(userId, itemType, ctx);

const excessItems = equippedStuff.slice(maxItems[itemType]);
for (const toRemove of excessItems) {
  // ...
}

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

das ist viel schöner, thx

@@ -0,0 +1,29 @@
import { sql, type Kysely } from "kysely";
import { createUpdatedAtTrigger } from "@/storage/migrations/10-loot-attributes.js";
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Die funktion kannste ruhig rüberkopieren

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oder in eine sql- migration- helper auslagern?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Migrationen sollten jeweils komplett self-contained und "in der Zeit eingefroren" sein. Sonst wird irgendwann mal irgendwas minimales in dem Shared-Teil geändert und dann schlagen alte migrationen fehl, wenn man ein neues Dev-System aufsetzt

@holzmaster
Copy link
Collaborator

Ich hab mal die Konflikte gelöst und master reingemergt

@holzmaster
Copy link
Collaborator

Das Map-Refactoring und den Random-Service hab ich auch schon mal nach master geschoben

.ifNotExists()
.addColumn("id", "integer", c => c.primaryKey().autoIncrement())
.addColumn("userId", "text")
.addColumn("lootId", "integer", c => c.references("loot.id"))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

onDelete und onUpdate würd ich hier noch definieren

@@ -0,0 +1,216 @@
import { randomValue, type Range } from "@/service/random.js";

export const fightTemplates: { [name: string]: Equipable } = {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hier geht auch ein Record:

Suggested change
export const fightTemplates: { [name: string]: Equipable } = {
export const fightTemplates: Record<string, Equipable> = {

}
const defence = enemy.defend();
const result = calcDamage(rawDamage, defence);
console.log(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hier am besten noch den Logger benutzen

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants