소프트락 감사: 재추첨 장터 해금 + 진행 불가 위험 3건 수정
- 입양 재추첨 버튼: 장터 완공 전까지 숨김 (완공 후 해금) - 부엌 있는데 요리 가능 고양이가 없으면 입양 후보에 요리 적성 보장 - 서버 접속 불가 시에도 닉네임 결정 가능 (오프라인 시작 → 이후 자동 재등록) - 저장 403(미등록 닉네임) 시 재등록 후 재시도 - 파업 중 굶주림 행복도 하락 제외 + 자연 회복 +2/분 (전원 파업 데드락 방지) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
이 커밋은 다음에 포함됨:
+33
-15
@@ -315,7 +315,10 @@ export default function Game() {
|
||||
🐾 고양이
|
||||
</button>
|
||||
<button
|
||||
onClick={() =>
|
||||
onClick={() => {
|
||||
const needCook =
|
||||
state.buildings.some((b) => b.type === "kitchen") &&
|
||||
!state.cats.some((c) => c.aptitude.cooking > 0);
|
||||
setCandidates(
|
||||
engine.generateCandidates(
|
||||
3,
|
||||
@@ -323,10 +326,12 @@ export default function Game() {
|
||||
? "fishing"
|
||||
: state.tutorialStep === 4
|
||||
? "logging"
|
||||
: undefined,
|
||||
: needCook
|
||||
? "cooking"
|
||||
: undefined,
|
||||
),
|
||||
)
|
||||
}
|
||||
);
|
||||
}}
|
||||
disabled={state.cats.length >= state.hall.capacity}
|
||||
className={"nature-btn flex items-center gap-1.5 px-4 py-2 text-[15px] disabled:cursor-not-allowed disabled:opacity-50" + tut("adopt")}
|
||||
>
|
||||
@@ -523,9 +528,15 @@ export default function Game() {
|
||||
highlightPick={tutTarget === "adopt-pick"}
|
||||
cost={adoptCost(state)}
|
||||
coins={Math.floor(state.coins ?? 0)}
|
||||
rerollUnlocked={state.buildings.some(
|
||||
(b) => b.type === "market" && b.constructionUntil === undefined,
|
||||
)}
|
||||
onReroll={() => {
|
||||
const err = run(() => engine.payReroll());
|
||||
if (!err)
|
||||
if (!err) {
|
||||
const needCook =
|
||||
state.buildings.some((b) => b.type === "kitchen") &&
|
||||
!state.cats.some((c) => c.aptitude.cooking > 0);
|
||||
setCandidates(
|
||||
engine.generateCandidates(
|
||||
3,
|
||||
@@ -533,9 +544,12 @@ export default function Game() {
|
||||
? "fishing"
|
||||
: state.tutorialStep === 4
|
||||
? "logging"
|
||||
: undefined,
|
||||
: needCook
|
||||
? "cooking"
|
||||
: undefined,
|
||||
),
|
||||
);
|
||||
}
|
||||
}}
|
||||
onPick={(cat) => {
|
||||
const err = run(() => engine.adoptCandidate(cat));
|
||||
@@ -1333,6 +1347,7 @@ function AdoptModal({
|
||||
cost,
|
||||
onReroll,
|
||||
coins,
|
||||
rerollUnlocked,
|
||||
}: {
|
||||
candidates: Cat[];
|
||||
onPick: (cat: Cat) => void;
|
||||
@@ -1341,6 +1356,7 @@ function AdoptModal({
|
||||
cost: number;
|
||||
onReroll: () => void;
|
||||
coins: number;
|
||||
rerollUnlocked?: boolean;
|
||||
}) {
|
||||
return (
|
||||
<div
|
||||
@@ -1431,15 +1447,17 @@ function AdoptModal({
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
<div className="mt-4 flex items-center justify-center gap-3">
|
||||
<button
|
||||
onClick={onReroll}
|
||||
disabled={coins < REROLL_COST}
|
||||
className="wood-plank px-4 py-1.5 text-xs hover:brightness-110 disabled:cursor-not-allowed disabled:opacity-40"
|
||||
>
|
||||
🎲 다른 아이들 보기 (🪙{REROLL_COST})
|
||||
</button>
|
||||
</div>
|
||||
{rerollUnlocked && (
|
||||
<div className="mt-4 flex items-center justify-center gap-3">
|
||||
<button
|
||||
onClick={onReroll}
|
||||
disabled={coins < REROLL_COST}
|
||||
className="wood-plank px-4 py-1.5 text-xs hover:brightness-110 disabled:cursor-not-allowed disabled:opacity-40"
|
||||
>
|
||||
🎲 다른 아이들 보기 (🪙{REROLL_COST})
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
<p className="mt-3 text-center text-xs text-[#8a7551]">
|
||||
한 마리만 선택할 수 있어요 · 패시브에 마우스를 올리면 상세 정보가 보입니다
|
||||
</p>
|
||||
|
||||
새 이슈에서 참조
사용자 차단