grinders-farm 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +135 -0
- package/SKILL.md +142 -0
- package/dist/scripts/generate-tiles.d.ts +2 -0
- package/dist/scripts/generate-tiles.d.ts.map +1 -0
- package/dist/scripts/generate-tiles.js +138 -0
- package/dist/scripts/generate-tiles.js.map +1 -0
- package/dist/src/adapters/auto-worker.d.ts +2 -0
- package/dist/src/adapters/auto-worker.d.ts.map +1 -0
- package/dist/src/adapters/auto-worker.js +79 -0
- package/dist/src/adapters/auto-worker.js.map +1 -0
- package/dist/src/adapters/daemon.d.ts +6 -0
- package/dist/src/adapters/daemon.d.ts.map +1 -0
- package/dist/src/adapters/daemon.js +6 -0
- package/dist/src/adapters/daemon.js.map +1 -0
- package/dist/src/adapters/image-server.d.ts +2 -0
- package/dist/src/adapters/image-server.d.ts.map +1 -0
- package/dist/src/adapters/image-server.js +90 -0
- package/dist/src/adapters/image-server.js.map +1 -0
- package/dist/src/adapters/oneshot.d.ts +2 -0
- package/dist/src/adapters/oneshot.d.ts.map +1 -0
- package/dist/src/adapters/oneshot.js +36 -0
- package/dist/src/adapters/oneshot.js.map +1 -0
- package/dist/src/adapters/terminal.d.ts +2 -0
- package/dist/src/adapters/terminal.d.ts.map +1 -0
- package/dist/src/adapters/terminal.js +70 -0
- package/dist/src/adapters/terminal.js.map +1 -0
- package/dist/src/game/crops.d.ts +8 -0
- package/dist/src/game/crops.d.ts.map +1 -0
- package/dist/src/game/crops.js +71 -0
- package/dist/src/game/crops.js.map +1 -0
- package/dist/src/game/engine.d.ts +15 -0
- package/dist/src/game/engine.d.ts.map +1 -0
- package/dist/src/game/engine.js +236 -0
- package/dist/src/game/engine.js.map +1 -0
- package/dist/src/game/farm.d.ts +12 -0
- package/dist/src/game/farm.d.ts.map +1 -0
- package/dist/src/game/farm.js +387 -0
- package/dist/src/game/farm.js.map +1 -0
- package/dist/src/game/types.d.ts +70 -0
- package/dist/src/game/types.d.ts.map +1 -0
- package/dist/src/game/types.js +23 -0
- package/dist/src/game/types.js.map +1 -0
- package/dist/src/index.d.ts +9 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +8 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/local-auto.d.ts +13 -0
- package/dist/src/local-auto.d.ts.map +1 -0
- package/dist/src/local-auto.js +239 -0
- package/dist/src/local-auto.js.map +1 -0
- package/dist/src/notify/openclaw-delivery.d.ts +36 -0
- package/dist/src/notify/openclaw-delivery.d.ts.map +1 -0
- package/dist/src/notify/openclaw-delivery.js +104 -0
- package/dist/src/notify/openclaw-delivery.js.map +1 -0
- package/dist/src/notify/openclaw-push.d.ts +49 -0
- package/dist/src/notify/openclaw-push.d.ts.map +1 -0
- package/dist/src/notify/openclaw-push.js +451 -0
- package/dist/src/notify/openclaw-push.js.map +1 -0
- package/dist/src/render/ansi-renderer.d.ts +6 -0
- package/dist/src/render/ansi-renderer.d.ts.map +1 -0
- package/dist/src/render/ansi-renderer.js +41 -0
- package/dist/src/render/ansi-renderer.js.map +1 -0
- package/dist/src/render/image-renderer.d.ts +3 -0
- package/dist/src/render/image-renderer.d.ts.map +1 -0
- package/dist/src/render/image-renderer.js +174 -0
- package/dist/src/render/image-renderer.js.map +1 -0
- package/dist/src/render/text-renderer.d.ts +3 -0
- package/dist/src/render/text-renderer.d.ts.map +1 -0
- package/dist/src/render/text-renderer.js +73 -0
- package/dist/src/render/text-renderer.js.map +1 -0
- package/dist/src/storage/local-storage.d.ts +15 -0
- package/dist/src/storage/local-storage.d.ts.map +1 -0
- package/dist/src/storage/local-storage.js +115 -0
- package/dist/src/storage/local-storage.js.map +1 -0
- package/package.json +44 -0
- package/src/notify/notify.json.example +3 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
import { GrowthStage, coordToLabel, labelToCoord, } from "./types.js";
|
|
2
|
+
import { CROP_DEFS, getCropDef, createPlantedCrop, advanceCropGrowth, getStage } from "./crops.js";
|
|
3
|
+
const DEFAULT_ROWS = 4;
|
|
4
|
+
const DEFAULT_COLS = 5;
|
|
5
|
+
const STARTING_GOLD = 50;
|
|
6
|
+
const MIN_MARKET_MULTIPLIER = 0.65;
|
|
7
|
+
const MAX_MARKET_MULTIPLIER = 1.35;
|
|
8
|
+
const MAX_SUPPLY_PENALTY = 0.35;
|
|
9
|
+
function clamp(n, min, max) {
|
|
10
|
+
return Math.min(max, Math.max(min, n));
|
|
11
|
+
}
|
|
12
|
+
function createEmptyMarketState() {
|
|
13
|
+
const sellMultipliers = {};
|
|
14
|
+
const recentSales = {};
|
|
15
|
+
for (const cropId of Object.keys(CROP_DEFS)) {
|
|
16
|
+
sellMultipliers[cropId] = 1;
|
|
17
|
+
recentSales[cropId] = 0;
|
|
18
|
+
}
|
|
19
|
+
return { sellMultipliers, recentSales };
|
|
20
|
+
}
|
|
21
|
+
function isValidOrder(order) {
|
|
22
|
+
return Boolean(order?.cropId && Number.isFinite(order.quantity) && Number.isFinite(order.rewardGold) && Number.isFinite(order.dueDay));
|
|
23
|
+
}
|
|
24
|
+
export function ensureFarmState(state) {
|
|
25
|
+
state.gridRows = state.gridRows || state.grid.length || DEFAULT_ROWS;
|
|
26
|
+
state.gridCols = state.gridCols || state.grid[0]?.length || DEFAULT_COLS;
|
|
27
|
+
state.market = state.market ?? createEmptyMarketState();
|
|
28
|
+
state.market.sellMultipliers = state.market.sellMultipliers ?? {};
|
|
29
|
+
state.market.recentSales = state.market.recentSales ?? {};
|
|
30
|
+
for (const cropId of Object.keys(CROP_DEFS)) {
|
|
31
|
+
if (!Number.isFinite(state.market.sellMultipliers[cropId]))
|
|
32
|
+
state.market.sellMultipliers[cropId] = 1;
|
|
33
|
+
if (!Number.isFinite(state.market.recentSales[cropId]))
|
|
34
|
+
state.market.recentSales[cropId] = 0;
|
|
35
|
+
}
|
|
36
|
+
if (state.activeOrder != null && !isValidOrder(state.activeOrder)) {
|
|
37
|
+
state.activeOrder = null;
|
|
38
|
+
}
|
|
39
|
+
for (let r = 0; r < state.grid.length; r++) {
|
|
40
|
+
for (let c = 0; c < state.grid[r].length; c++) {
|
|
41
|
+
const plot = state.grid[r][c];
|
|
42
|
+
plot.row = r;
|
|
43
|
+
plot.col = c;
|
|
44
|
+
plot.consecutiveSameCrop = plot.consecutiveSameCrop ?? 0;
|
|
45
|
+
if (plot.crop) {
|
|
46
|
+
const def = getCropDef(plot.crop.cropId);
|
|
47
|
+
if (!Number.isFinite(plot.crop.requiredWaterDays)) {
|
|
48
|
+
plot.crop.requiredWaterDays = def?.growthDays ?? 4;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return state;
|
|
54
|
+
}
|
|
55
|
+
function getMarketMultiplier(state, cropId) {
|
|
56
|
+
const market = state.market ?? createEmptyMarketState();
|
|
57
|
+
const m = market.sellMultipliers[cropId];
|
|
58
|
+
if (!Number.isFinite(m))
|
|
59
|
+
return 1;
|
|
60
|
+
return clamp(m, MIN_MARKET_MULTIPLIER, MAX_MARKET_MULTIPLIER);
|
|
61
|
+
}
|
|
62
|
+
export function getCurrentSellPrice(state, cropId) {
|
|
63
|
+
const def = getCropDef(cropId);
|
|
64
|
+
if (!def)
|
|
65
|
+
return 0;
|
|
66
|
+
return Math.max(1, Math.round(def.sellPrice * getMarketMultiplier(state, cropId)));
|
|
67
|
+
}
|
|
68
|
+
function rollDailyMarket(state) {
|
|
69
|
+
const market = state.market ?? (state.market = createEmptyMarketState());
|
|
70
|
+
for (const cropId of Object.keys(CROP_DEFS)) {
|
|
71
|
+
const demandNoise = (Math.random() - 0.5) * 0.5; // ±25%
|
|
72
|
+
const supplyPenalty = Math.min(MAX_SUPPLY_PENALTY, (market.recentSales[cropId] ?? 0) * 0.04);
|
|
73
|
+
market.sellMultipliers[cropId] = clamp(1 + demandNoise - supplyPenalty, MIN_MARKET_MULTIPLIER, MAX_MARKET_MULTIPLIER);
|
|
74
|
+
market.recentSales[cropId] = Math.max(0, (market.recentSales[cropId] ?? 0) - 1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function createRandomOrder(state) {
|
|
78
|
+
const cropIds = Object.keys(CROP_DEFS);
|
|
79
|
+
const cropId = cropIds[Math.floor(Math.random() * cropIds.length)];
|
|
80
|
+
const def = getCropDef(cropId);
|
|
81
|
+
const quantity = 2 + Math.floor(Math.random() * 3); // 2-4
|
|
82
|
+
const dueDay = state.day + 2 + Math.floor(Math.random() * 3); // +2~4 days
|
|
83
|
+
const rewardGold = Math.max(8, Math.round(quantity * def.sellPrice * 0.75));
|
|
84
|
+
return {
|
|
85
|
+
id: `D${state.day}-${Math.floor(Math.random() * 10000)}`,
|
|
86
|
+
cropId,
|
|
87
|
+
quantity,
|
|
88
|
+
rewardGold,
|
|
89
|
+
dueDay,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function applyRotationGrowthDays(plot, cropId, baseGrowthDays) {
|
|
93
|
+
const streak = plot.consecutiveSameCrop ?? 0;
|
|
94
|
+
if (plot.lastCropId === cropId && streak >= 1) {
|
|
95
|
+
return {
|
|
96
|
+
requiredWaterDays: baseGrowthDays + 1,
|
|
97
|
+
note: "(连作惩罚:生长 +1 天)",
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
if (plot.lastCropId && plot.lastCropId !== cropId) {
|
|
101
|
+
return {
|
|
102
|
+
requiredWaterDays: Math.max(2, baseGrowthDays - 1),
|
|
103
|
+
note: "(轮作加成:生长 -1 天)",
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
return { requiredWaterDays: baseGrowthDays, note: "" };
|
|
107
|
+
}
|
|
108
|
+
export function createNewFarm(rows = DEFAULT_ROWS, cols = DEFAULT_COLS) {
|
|
109
|
+
const grid = [];
|
|
110
|
+
for (let r = 0; r < rows; r++) {
|
|
111
|
+
const row = [];
|
|
112
|
+
for (let c = 0; c < cols; c++) {
|
|
113
|
+
row.push({ row: r, col: c, crop: null });
|
|
114
|
+
}
|
|
115
|
+
grid.push(row);
|
|
116
|
+
}
|
|
117
|
+
const state = ensureFarmState({
|
|
118
|
+
day: 1,
|
|
119
|
+
gold: STARTING_GOLD,
|
|
120
|
+
grid,
|
|
121
|
+
inventory: [],
|
|
122
|
+
gridRows: rows,
|
|
123
|
+
gridCols: cols,
|
|
124
|
+
market: createEmptyMarketState(),
|
|
125
|
+
activeOrder: null,
|
|
126
|
+
});
|
|
127
|
+
state.activeOrder = createRandomOrder(state);
|
|
128
|
+
return state;
|
|
129
|
+
}
|
|
130
|
+
function getPlot(state, row, col) {
|
|
131
|
+
if (row < 0 || row >= state.gridRows || col < 0 || col >= state.gridCols)
|
|
132
|
+
return null;
|
|
133
|
+
return state.grid[row][col];
|
|
134
|
+
}
|
|
135
|
+
function addToInventory(state, itemId, name, qty) {
|
|
136
|
+
const existing = state.inventory.find((i) => i.itemId === itemId);
|
|
137
|
+
if (existing) {
|
|
138
|
+
existing.quantity += qty;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
state.inventory.push({ itemId, name, quantity: qty });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
export function plant(state, cropId, label) {
|
|
145
|
+
ensureFarmState(state);
|
|
146
|
+
const def = getCropDef(cropId);
|
|
147
|
+
if (!def) {
|
|
148
|
+
const validIds = Object.keys(CROP_DEFS).join(", ");
|
|
149
|
+
return { success: false, message: `未知作物 "${cropId}"。可选: ${validIds}` };
|
|
150
|
+
}
|
|
151
|
+
const coord = labelToCoord(label);
|
|
152
|
+
if (!coord) {
|
|
153
|
+
return { success: false, message: `无效坐标 "${label}"。格式如 A1, B3` };
|
|
154
|
+
}
|
|
155
|
+
const plot = getPlot(state, coord.row, coord.col);
|
|
156
|
+
if (!plot) {
|
|
157
|
+
return {
|
|
158
|
+
success: false,
|
|
159
|
+
message: `坐标 ${label} 超出农场范围 (${state.gridRows}×${state.gridCols})`,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
if (plot.crop) {
|
|
163
|
+
return { success: false, message: `${coordToLabel(plot.row, plot.col)} 已有作物,请先收获或清除` };
|
|
164
|
+
}
|
|
165
|
+
if (state.gold < def.seedPrice) {
|
|
166
|
+
return { success: false, message: `金币不足!需要 ${def.seedPrice}G,当前 ${state.gold}G` };
|
|
167
|
+
}
|
|
168
|
+
state.gold -= def.seedPrice;
|
|
169
|
+
const planted = createPlantedCrop(cropId);
|
|
170
|
+
const rotation = applyRotationGrowthDays(plot, cropId, def.growthDays);
|
|
171
|
+
planted.requiredWaterDays = rotation.requiredWaterDays;
|
|
172
|
+
plot.crop = planted;
|
|
173
|
+
return {
|
|
174
|
+
success: true,
|
|
175
|
+
message: `在 ${coordToLabel(plot.row, plot.col)} 种下了${def.name} ${def.emoji}(-${def.seedPrice}G,余 ${state.gold}G)${rotation.note}`,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
export function water(state, label) {
|
|
179
|
+
ensureFarmState(state);
|
|
180
|
+
if (label) {
|
|
181
|
+
const coord = labelToCoord(label);
|
|
182
|
+
if (!coord)
|
|
183
|
+
return { success: false, message: `无效坐标 "${label}"` };
|
|
184
|
+
const plot = getPlot(state, coord.row, coord.col);
|
|
185
|
+
if (!plot)
|
|
186
|
+
return { success: false, message: `坐标 ${label} 超出范围` };
|
|
187
|
+
if (!plot.crop)
|
|
188
|
+
return { success: false, message: `${label} 是空地,无需浇水` };
|
|
189
|
+
if (getStage(plot.crop) === GrowthStage.Ready)
|
|
190
|
+
return { success: false, message: `${label} 的作物已成熟,请收获` };
|
|
191
|
+
plot.crop.watered = true;
|
|
192
|
+
const def = getCropDef(plot.crop.cropId);
|
|
193
|
+
return {
|
|
194
|
+
success: true,
|
|
195
|
+
message: `给 ${label} 的${def?.name ?? "作物"}浇了水 💧`,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
let count = 0;
|
|
199
|
+
for (const row of state.grid) {
|
|
200
|
+
for (const plot of row) {
|
|
201
|
+
if (plot.crop && getStage(plot.crop) !== GrowthStage.Ready && !plot.crop.watered) {
|
|
202
|
+
plot.crop.watered = true;
|
|
203
|
+
count++;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (count === 0)
|
|
208
|
+
return { success: false, message: "没有需要浇水的作物" };
|
|
209
|
+
return { success: true, message: `给 ${count} 块地浇了水 💧` };
|
|
210
|
+
}
|
|
211
|
+
export function harvest(state, label) {
|
|
212
|
+
ensureFarmState(state);
|
|
213
|
+
if (label) {
|
|
214
|
+
const coord = labelToCoord(label);
|
|
215
|
+
if (!coord)
|
|
216
|
+
return { success: false, message: `无效坐标 "${label}"` };
|
|
217
|
+
const plot = getPlot(state, coord.row, coord.col);
|
|
218
|
+
if (!plot)
|
|
219
|
+
return { success: false, message: `坐标 ${label} 超出范围` };
|
|
220
|
+
if (!plot.crop)
|
|
221
|
+
return { success: false, message: `${label} 是空地` };
|
|
222
|
+
if (getStage(plot.crop) !== GrowthStage.Ready)
|
|
223
|
+
return { success: false, message: `${label} 的作物还未成熟` };
|
|
224
|
+
const def = getCropDef(plot.crop.cropId);
|
|
225
|
+
addToInventory(state, def.id, def.name, 1);
|
|
226
|
+
if (plot.lastCropId === def.id) {
|
|
227
|
+
plot.consecutiveSameCrop = (plot.consecutiveSameCrop ?? 0) + 1;
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
plot.consecutiveSameCrop = 1;
|
|
231
|
+
}
|
|
232
|
+
plot.lastCropId = def.id;
|
|
233
|
+
plot.crop = null;
|
|
234
|
+
return {
|
|
235
|
+
success: true,
|
|
236
|
+
message: `收获了 ${def.name} ${def.emoji}!已放入仓库`,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
const harvested = [];
|
|
240
|
+
for (const row of state.grid) {
|
|
241
|
+
for (const plot of row) {
|
|
242
|
+
if (plot.crop && getStage(plot.crop) === GrowthStage.Ready) {
|
|
243
|
+
const def = getCropDef(plot.crop.cropId);
|
|
244
|
+
addToInventory(state, def.id, def.name, 1);
|
|
245
|
+
harvested.push(`${coordToLabel(plot.row, plot.col)}:${def.name}`);
|
|
246
|
+
if (plot.lastCropId === def.id) {
|
|
247
|
+
plot.consecutiveSameCrop = (plot.consecutiveSameCrop ?? 0) + 1;
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
plot.consecutiveSameCrop = 1;
|
|
251
|
+
}
|
|
252
|
+
plot.lastCropId = def.id;
|
|
253
|
+
plot.crop = null;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
if (harvested.length === 0)
|
|
258
|
+
return { success: false, message: "没有可收获的作物" };
|
|
259
|
+
return {
|
|
260
|
+
success: true,
|
|
261
|
+
message: `收获了 ${harvested.length} 个作物: ${harvested.join(", ")}`,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
export function sellAll(state) {
|
|
265
|
+
ensureFarmState(state);
|
|
266
|
+
if (state.inventory.length === 0) {
|
|
267
|
+
return { success: false, message: "仓库是空的,没什么可卖的" };
|
|
268
|
+
}
|
|
269
|
+
let orderMsg = "";
|
|
270
|
+
if (state.activeOrder) {
|
|
271
|
+
const order = state.activeOrder;
|
|
272
|
+
const inventoryItem = state.inventory.find((i) => i.itemId === order.cropId);
|
|
273
|
+
if (inventoryItem && inventoryItem.quantity >= order.quantity) {
|
|
274
|
+
inventoryItem.quantity -= order.quantity;
|
|
275
|
+
state.gold += order.rewardGold;
|
|
276
|
+
const def = getCropDef(order.cropId);
|
|
277
|
+
orderMsg = `\n✅ 完成订单:交付 ${def?.name ?? order.cropId}×${order.quantity},额外奖励 ${order.rewardGold}G!`;
|
|
278
|
+
if (inventoryItem.quantity <= 0) {
|
|
279
|
+
state.inventory = state.inventory.filter((i) => i.quantity > 0);
|
|
280
|
+
}
|
|
281
|
+
state.activeOrder = createRandomOrder(state);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
let totalGold = 0;
|
|
285
|
+
const sold = [];
|
|
286
|
+
const marketFeedback = [];
|
|
287
|
+
const market = state.market ?? (state.market = createEmptyMarketState());
|
|
288
|
+
for (const item of state.inventory) {
|
|
289
|
+
if (item.quantity <= 0)
|
|
290
|
+
continue;
|
|
291
|
+
const def = getCropDef(item.itemId);
|
|
292
|
+
if (def) {
|
|
293
|
+
const unitPrice = getCurrentSellPrice(state, def.id);
|
|
294
|
+
const earn = unitPrice * item.quantity;
|
|
295
|
+
totalGold += earn;
|
|
296
|
+
sold.push(`${def.name}×${item.quantity} = ${earn}G(${unitPrice}G/个)`);
|
|
297
|
+
market.recentSales[def.id] = (market.recentSales[def.id] ?? 0) + item.quantity;
|
|
298
|
+
const pressure = item.quantity >= 6 ? "高" : item.quantity >= 3 ? "中" : "低";
|
|
299
|
+
const dropLikelihood = pressure === "高" ? "大概率降价" : pressure === "中" ? "中概率降价" : "小概率降价";
|
|
300
|
+
marketFeedback.push(`${def.name}+${item.quantity}(压力${pressure},${dropLikelihood})`);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
state.gold += totalGold;
|
|
304
|
+
state.inventory = [];
|
|
305
|
+
const feedbackMsg = marketFeedback.length > 0
|
|
306
|
+
? `\n📉 市场反馈(仅以下作物更可能降价):${marketFeedback.join(";")}。`
|
|
307
|
+
: "";
|
|
308
|
+
return {
|
|
309
|
+
success: true,
|
|
310
|
+
message: `出售: ${sold.join(", ")}。共获得 ${totalGold}G(余 ${state.gold}G)${orderMsg}${feedbackMsg}`,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
export function nextDay(state) {
|
|
314
|
+
ensureFarmState(state);
|
|
315
|
+
const events = [];
|
|
316
|
+
for (const row of state.grid) {
|
|
317
|
+
for (const plot of row) {
|
|
318
|
+
if (plot.crop) {
|
|
319
|
+
const before = getStage(plot.crop);
|
|
320
|
+
plot.crop = advanceCropGrowth(plot.crop);
|
|
321
|
+
const after = getStage(plot.crop);
|
|
322
|
+
if (after !== before) {
|
|
323
|
+
const def = getCropDef(plot.crop.cropId);
|
|
324
|
+
const label = coordToLabel(plot.row, plot.col);
|
|
325
|
+
if (after === GrowthStage.Ready) {
|
|
326
|
+
events.push(`${label} ${def?.name} 成熟了!🎉`);
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
events.push(`${label} ${def?.name} → ${after}`);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
state.day++;
|
|
336
|
+
rollDailyMarket(state);
|
|
337
|
+
if (!state.activeOrder) {
|
|
338
|
+
state.activeOrder = createRandomOrder(state);
|
|
339
|
+
const def = getCropDef(state.activeOrder.cropId);
|
|
340
|
+
events.push(`📦 新订单:${def?.name ?? state.activeOrder.cropId} ×${state.activeOrder.quantity},截止第 ${state.activeOrder.dueDay} 天,奖励 ${state.activeOrder.rewardGold}G`);
|
|
341
|
+
}
|
|
342
|
+
else if (state.day > state.activeOrder.dueDay) {
|
|
343
|
+
const old = state.activeOrder;
|
|
344
|
+
const oldDef = getCropDef(old.cropId);
|
|
345
|
+
state.activeOrder = createRandomOrder(state);
|
|
346
|
+
const nextDef = getCropDef(state.activeOrder.cropId);
|
|
347
|
+
events.push(`⌛ 订单过期:${oldDef?.name ?? old.cropId} ×${old.quantity}`);
|
|
348
|
+
events.push(`📦 新订单:${nextDef?.name ?? state.activeOrder.cropId} ×${state.activeOrder.quantity},截止第 ${state.activeOrder.dueDay} 天,奖励 ${state.activeOrder.rewardGold}G`);
|
|
349
|
+
}
|
|
350
|
+
let msg = `☀️ 第 ${state.day} 天到了!`;
|
|
351
|
+
if (events.length > 0) {
|
|
352
|
+
msg += "\n" + events.join("\n");
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
msg += "\n今天农场一片宁静。";
|
|
356
|
+
}
|
|
357
|
+
return { success: true, message: msg };
|
|
358
|
+
}
|
|
359
|
+
export function getShopText(state) {
|
|
360
|
+
const lines = ["🏪 种子商店:", ""];
|
|
361
|
+
for (const def of Object.values(CROP_DEFS)) {
|
|
362
|
+
const unitSell = state ? getCurrentSellPrice(state, def.id) : def.sellPrice;
|
|
363
|
+
const todayRoi = `${unitSell - def.seedPrice}G`;
|
|
364
|
+
const marketTag = state
|
|
365
|
+
? unitSell > def.sellPrice
|
|
366
|
+
? "📈"
|
|
367
|
+
: unitSell < def.sellPrice
|
|
368
|
+
? "📉"
|
|
369
|
+
: "➖"
|
|
370
|
+
: "➖";
|
|
371
|
+
lines.push(` ${def.emoji} ${def.name} (${def.id}) — 种子 ${def.seedPrice}G | 今日售价 ${unitSell}G ${marketTag}(原价 ${def.sellPrice}G) | 生长 ${def.growthDays} 天 | 今日单个利润 ${todayRoi}`);
|
|
372
|
+
}
|
|
373
|
+
return lines.join("\n");
|
|
374
|
+
}
|
|
375
|
+
export function getInventoryText(state) {
|
|
376
|
+
ensureFarmState(state);
|
|
377
|
+
if (state.inventory.length === 0) {
|
|
378
|
+
return "📦 仓库: 空";
|
|
379
|
+
}
|
|
380
|
+
const lines = ["📦 仓库:"];
|
|
381
|
+
for (const item of state.inventory) {
|
|
382
|
+
const def = getCropDef(item.itemId);
|
|
383
|
+
lines.push(` ${def?.emoji ?? "?"} ${item.name} × ${item.quantity}`);
|
|
384
|
+
}
|
|
385
|
+
return lines.join("\n");
|
|
386
|
+
}
|
|
387
|
+
//# sourceMappingURL=farm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"farm.js","sourceRoot":"","sources":["../../../src/game/farm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export declare enum GrowthStage {
|
|
2
|
+
Empty = "empty",
|
|
3
|
+
Seed = "seed",
|
|
4
|
+
Sprout = "sprout",
|
|
5
|
+
Growing1 = "growing_1",
|
|
6
|
+
Growing2 = "growing_2",
|
|
7
|
+
Ready = "ready"
|
|
8
|
+
}
|
|
9
|
+
export interface CropDef {
|
|
10
|
+
id: string;
|
|
11
|
+
name: string;
|
|
12
|
+
emoji: string;
|
|
13
|
+
realMaturityDays: number;
|
|
14
|
+
growthDays: number;
|
|
15
|
+
seedPrice: number;
|
|
16
|
+
sellPrice: number;
|
|
17
|
+
}
|
|
18
|
+
export interface PlantedCrop {
|
|
19
|
+
cropId: string;
|
|
20
|
+
wateredDays: number;
|
|
21
|
+
watered: boolean;
|
|
22
|
+
/** Effective growth target for this specific crop instance (supports rotation effects). */
|
|
23
|
+
requiredWaterDays?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface Plot {
|
|
26
|
+
row: number;
|
|
27
|
+
col: number;
|
|
28
|
+
crop: PlantedCrop | null;
|
|
29
|
+
/** Last harvested crop id on this tile, for rotation bonuses/penalties. */
|
|
30
|
+
lastCropId?: string;
|
|
31
|
+
/** Consecutive count for same-crop harvesting on this tile. */
|
|
32
|
+
consecutiveSameCrop?: number;
|
|
33
|
+
}
|
|
34
|
+
export interface InventoryItem {
|
|
35
|
+
itemId: string;
|
|
36
|
+
name: string;
|
|
37
|
+
quantity: number;
|
|
38
|
+
}
|
|
39
|
+
export interface FarmState {
|
|
40
|
+
day: number;
|
|
41
|
+
gold: number;
|
|
42
|
+
grid: Plot[][];
|
|
43
|
+
inventory: InventoryItem[];
|
|
44
|
+
gridRows: number;
|
|
45
|
+
gridCols: number;
|
|
46
|
+
market?: FarmMarketState;
|
|
47
|
+
activeOrder?: FarmOrder | null;
|
|
48
|
+
}
|
|
49
|
+
export interface FarmMarketState {
|
|
50
|
+
sellMultipliers: Record<string, number>;
|
|
51
|
+
recentSales: Record<string, number>;
|
|
52
|
+
}
|
|
53
|
+
export interface FarmOrder {
|
|
54
|
+
id: string;
|
|
55
|
+
cropId: string;
|
|
56
|
+
quantity: number;
|
|
57
|
+
rewardGold: number;
|
|
58
|
+
dueDay: number;
|
|
59
|
+
}
|
|
60
|
+
export interface CommandResult {
|
|
61
|
+
message: string;
|
|
62
|
+
imagePath?: string;
|
|
63
|
+
success: boolean;
|
|
64
|
+
}
|
|
65
|
+
export declare function coordToLabel(row: number, col: number): string;
|
|
66
|
+
export declare function labelToCoord(label: string): {
|
|
67
|
+
row: number;
|
|
68
|
+
col: number;
|
|
69
|
+
} | null;
|
|
70
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/game/types.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,QAAQ,cAAc;IACtB,QAAQ,cAAc;IACtB,KAAK,UAAU;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,2FAA2F;IAC3F,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;IACf,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,WAAW,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAO/E"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export var GrowthStage;
|
|
2
|
+
(function (GrowthStage) {
|
|
3
|
+
GrowthStage["Empty"] = "empty";
|
|
4
|
+
GrowthStage["Seed"] = "seed";
|
|
5
|
+
GrowthStage["Sprout"] = "sprout";
|
|
6
|
+
GrowthStage["Growing1"] = "growing_1";
|
|
7
|
+
GrowthStage["Growing2"] = "growing_2";
|
|
8
|
+
GrowthStage["Ready"] = "ready";
|
|
9
|
+
})(GrowthStage || (GrowthStage = {}));
|
|
10
|
+
export function coordToLabel(row, col) {
|
|
11
|
+
return `${String.fromCharCode(65 + row)}${col + 1}`;
|
|
12
|
+
}
|
|
13
|
+
export function labelToCoord(label) {
|
|
14
|
+
const match = label.match(/^([A-Za-z])(\d+)$/);
|
|
15
|
+
if (!match)
|
|
16
|
+
return null;
|
|
17
|
+
const row = match[1].toUpperCase().charCodeAt(0) - 65;
|
|
18
|
+
const col = parseInt(match[2], 10) - 1;
|
|
19
|
+
if (row < 0 || col < 0)
|
|
20
|
+
return null;
|
|
21
|
+
return { row, col };
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/game/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,4BAAa,CAAA;IACb,gCAAiB,CAAA;IACjB,qCAAsB,CAAA;IACtB,qCAAsB,CAAA;IACtB,8BAAe,CAAA;AACjB,CAAC,EAPW,WAAW,KAAX,WAAW,QAOtB;AAkED,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,GAAW;IACnD,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { GameEngine } from "./game/engine.js";
|
|
2
|
+
export { LocalStorage } from "./storage/local-storage.js";
|
|
3
|
+
export { createNewFarm, plant, water, harvest, sellAll, nextDay } from "./game/farm.js";
|
|
4
|
+
export { CROP_DEFS, getCropDef, getAllCropIds } from "./game/crops.js";
|
|
5
|
+
export { renderFarmText } from "./render/text-renderer.js";
|
|
6
|
+
export { renderFarmImage } from "./render/image-renderer.js";
|
|
7
|
+
export type { FarmState, Plot, CropDef, PlantedCrop, CommandResult, InventoryItem } from "./game/types.js";
|
|
8
|
+
export { GrowthStage, coordToLabel, labelToCoord } from "./game/types.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3G,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { GameEngine } from "./game/engine.js";
|
|
2
|
+
export { LocalStorage } from "./storage/local-storage.js";
|
|
3
|
+
export { createNewFarm, plant, water, harvest, sellAll, nextDay } from "./game/farm.js";
|
|
4
|
+
export { CROP_DEFS, getCropDef, getAllCropIds } from "./game/crops.js";
|
|
5
|
+
export { renderFarmText } from "./render/text-renderer.js";
|
|
6
|
+
export { renderFarmImage } from "./render/image-renderer.js";
|
|
7
|
+
export { GrowthStage, coordToLabel, labelToCoord } from "./game/types.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CommandResult } from "./game/types.js";
|
|
2
|
+
/** Project root (grinders-farm repo), resolved from this file under `src/`. */
|
|
3
|
+
export declare const PROJECT_ROOT: string;
|
|
4
|
+
export declare const AUTO_PID_FILE: string;
|
|
5
|
+
export declare const AUTO_CONFIG_FILE: string;
|
|
6
|
+
/**
|
|
7
|
+
* 与 `startLocalAuto` 相同,但指定游戏仓库根目录(供 OpenClaw 插件使用,gameRoot 含 `src/adapters/oneshot.ts`)。
|
|
8
|
+
*/
|
|
9
|
+
export declare function startLocalAutoAtRoot(gameRoot: string, intervalSec: number): Promise<CommandResult>;
|
|
10
|
+
export declare function startLocalAuto(intervalSec: number): Promise<CommandResult>;
|
|
11
|
+
export declare function stopLocalAuto(): CommandResult;
|
|
12
|
+
export declare function getLocalAutoStatus(): CommandResult;
|
|
13
|
+
//# sourceMappingURL=local-auto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-auto.d.ts","sourceRoot":"","sources":["../../src/local-auto.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,+EAA+E;AAC/E,eAAO,MAAM,YAAY,QAAmE,CAAC;AAG7F,eAAO,MAAM,aAAa,QAAkC,CAAC;AAC7D,eAAO,MAAM,gBAAgB,QAA0C,CAAC;AAkFxE;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAoDxG;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAEhF;AAED,wBAAgB,aAAa,IAAI,aAAa,CAuD7C;AAED,wBAAgB,kBAAkB,IAAI,aAAa,CAiClD"}
|