-
Notifications
You must be signed in to change notification settings - Fork 24
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
base: master
Are you sure you want to change the base?
Conversation
@holzmaster passt das grob in dein lootkonzept? |
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 |
There was a problem hiding this 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
) | ||
.addSubcommand( | ||
new SlashCommandSubcommandBuilder() | ||
.setName("ausrüsten") |
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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"?
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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/storage/fightinventory.ts
Outdated
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(); | ||
} |
There was a problem hiding this comment.
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) {
// ...
}
There was a problem hiding this comment.
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"; |
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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
Ich hab mal die Konflikte gelöst und master reingemergt |
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")) |
There was a problem hiding this comment.
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 } = { |
There was a problem hiding this comment.
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:
export const fightTemplates: { [name: string]: Equipable } = { | |
export const fightTemplates: Record<string, Equipable> = { |
} | ||
const defence = enemy.defend(); | ||
const result = calcDamage(rawDamage, defence); | ||
console.log( |
There was a problem hiding this comment.
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
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