Skip to content

Commit

Permalink
Fix pr #390: Fix issue #389: Jutsu Level Transfer
Browse files Browse the repository at this point in the history
  • Loading branch information
openhands-agent committed Feb 20, 2025
1 parent c21c5d1 commit 0448c59
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 24 deletions.
80 changes: 61 additions & 19 deletions app/src/app/jutsus/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,8 @@ export default function MyJutsu() {
const [userjutsu, setUserJutsu] = useState<(Jutsu & UserJutsu) | undefined>(
undefined,
);
const [transferTarget, setTransferTarget] = useState<(Jutsu & UserJutsu) | undefined>(
undefined,
);
const [transferTarget, setTransferTarget] = useState<(Jutsu & UserJutsu) | undefined>(undefined);
const [transferLevels, setTransferLevels] = useState<number>(1);

// User Jutsus & items
const { data: userJutsus, isFetching: l1 } = api.jutsu.getUserJutsus.useQuery(
Expand Down Expand Up @@ -379,6 +378,7 @@ export default function MyJutsu() {
transferLevel({
fromJutsuId: userjutsu.jutsuId,
toJutsuId: transferTarget.jutsuId,
levels: transferLevels,
});
} else {
setIsOpen(false);
Expand All @@ -391,8 +391,7 @@ export default function MyJutsu() {
if (filteredJutsus?.length) {
setTransferTarget(undefined);
setUserJutsu(userjutsu);
const targetJutsu = filteredJutsus[0];
setTransferTarget(targetJutsu);
setTransferLevels(1);
setIsOpen(true);
} else {
showMutationToast({
Expand All @@ -405,20 +404,63 @@ export default function MyJutsu() {
>
{transferTarget ? (
<>
<p>
Transfer level {userjutsu.level} from {userjutsu.name} to{" "}
{transferTarget.name}?
</p>
<p>
This will reset {userjutsu.name} to level 1 and set{" "}
{transferTarget.name} to level {userjutsu.level}.
</p>
<p>
Cost:{" "}
{usedTransfers >= freeTransfers
? `${JUTSU_TRANSFER_COST} reputation points`
: "Free"}
</p>
<div className="flex flex-col gap-4">
<div className="flex flex-col gap-2">
<label htmlFor="target-jutsu">Target Jutsu:</label>
<select
id="target-jutsu"
className="p-2 border rounded"
value={transferTarget.jutsuId}
onChange={(e) => {
const selected = allJutsu?.find(
(j) => j.jutsuId === e.target.value
);
if (selected) {
setTransferTarget(selected);
}
}}
>
{allJutsu
?.filter(
(j) =>
j.jutsuId !== userjutsu.jutsuId &&
j.jutsuType === userjutsu.jutsuType &&
j.jutsuRank === userjutsu.jutsuRank
)
.map((j) => (
<option key={j.jutsuId} value={j.jutsuId}>
{j.name} (Level {j.level})
</option>
))}
</select>
</div>
<div className="flex flex-col gap-2">
<label htmlFor="transfer-levels">Levels to Transfer:</label>
<input
id="transfer-levels"
type="number"
className="p-2 border rounded"
min={1}
max={Math.min(userjutsu.level - 1, JUTSU_TRANSFER_MAX_LEVEL)}
value={transferLevels}
onChange={(e) => setTransferLevels(parseInt(e.target.value))}
/>
</div>
<p>
Transfer {transferLevels} level(s) from {userjutsu.name} to{" "}
{transferTarget.name}?
</p>
<p>
This will reduce {userjutsu.name} to level {userjutsu.level - transferLevels} and increase{" "}
{transferTarget.name} to level {transferTarget.level + transferLevels}.
</p>
<p>
Cost:{" "}
{usedTransfers >= freeTransfers
? `${JUTSU_TRANSFER_COST} reputation points`
: "Free"}
</p>
</div>
</>
) : (
<p>Select a jutsu to transfer the level to.</p>
Expand Down
16 changes: 11 additions & 5 deletions app/src/server/api/routers/jutsu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ export const jutsuRouter = createTRPCRouter({
z.object({
fromJutsuId: z.string(),
toJutsuId: z.string(),
levels: z.number().min(1).max(JUTSU_TRANSFER_MAX_LEVEL),
}),
)
.output(baseServerResponse)
Expand Down Expand Up @@ -96,6 +97,11 @@ export const jutsuRouter = createTRPCRouter({
`Cannot transfer levels above ${JUTSU_TRANSFER_MAX_LEVEL}`,
);
}
if (input.levels > fromUserJutsu.level - 1) {
return errorResponse(
`Cannot transfer more levels than available (max ${fromUserJutsu.level - 1})`,
);
}
// Check if user has free transfers
const freeTransfers = getFreeTransfers(user.federalStatus);
const usedTransfers = recentTransfers.length;
Expand Down Expand Up @@ -126,18 +132,18 @@ export const jutsuRouter = createTRPCRouter({
await Promise.all([
ctx.drizzle
.update(userJutsu)
.set({ level: fromUserJutsu.level })
.set({ level: toUserJutsu.level + input.levels })
.where(eq(userJutsu.id, toUserJutsu.id)),
ctx.drizzle
.update(userJutsu)
.set({ level: toUserJutsu.level })
.set({ level: fromUserJutsu.level - input.levels })
.where(eq(userJutsu.id, fromUserJutsu.id)),
ctx.drizzle.insert(actionLog).values({
id: nanoid(),
userId: ctx.userId,
tableName: "userjutsu",
changes: [
`Transfered jutsu level ${fromUserJutsu.level} from ${fromJutsu.name} to ${toJutsu.name}`,
`Transferred ${input.levels} level(s) from ${fromJutsu.name} to ${toJutsu.name}`,
],
relatedId: ctx.userId,
relatedMsg: "JutsuLevelTransfer",
Expand All @@ -148,8 +154,8 @@ export const jutsuRouter = createTRPCRouter({
return {
success: true,
message: needsReputation
? `Level transferred for ${JUTSU_TRANSFER_COST} reputation points`
: "Level transferred for free",
? `${input.levels} level(s) transferred for ${JUTSU_TRANSFER_COST} reputation points`
: `${input.levels} level(s) transferred for free`,
};
}),

Expand Down

0 comments on commit 0448c59

Please sign in to comment.