82 lines
2.3 KiB
Zig
82 lines
2.3 KiB
Zig
// zig fmt: off
|
|
const std = @import("std");
|
|
const builtin = @import("builtin");
|
|
const Allocator = std.mem.Allocator;
|
|
|
|
const Artificer = @import("artificer");
|
|
const Api = @import("artifacts-api");
|
|
|
|
pub const std_options = .{
|
|
.log_scope_levels = &[_]std.log.ScopeLevel{
|
|
.{ .scope = .api, .level = .info },
|
|
.{ .scope = .artificer, .level = .debug },
|
|
}
|
|
};
|
|
|
|
fn getAPITokenFromArgs(allocator: Allocator) !?[]u8 {
|
|
const args = try std.process.argsAlloc(allocator);
|
|
defer std.process.argsFree(allocator, args);
|
|
|
|
if (args.len < 2) {
|
|
return null;
|
|
}
|
|
|
|
const filename = args[1];
|
|
const cwd = std.fs.cwd();
|
|
var token_buffer: [256]u8 = undefined;
|
|
const token = try cwd.readFile(filename, &token_buffer);
|
|
|
|
return try allocator.dupe(u8, std.mem.trim(u8, token, "\n\t "));
|
|
}
|
|
|
|
pub fn main() !void {
|
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
|
defer _ = gpa.deinit();
|
|
const allocator = gpa.allocator();
|
|
|
|
const token = (try getAPITokenFromArgs(allocator)) orelse return error.MissingToken;
|
|
defer allocator.free(token);
|
|
|
|
var store = try Api.Store.init(allocator);
|
|
defer store.deinit(allocator);
|
|
|
|
var server = try Api.Server.init(allocator, &store);
|
|
defer server.deinit();
|
|
|
|
try server.setToken(token);
|
|
|
|
std.log.info("Prefetching server data", .{});
|
|
{
|
|
const cwd_path = try std.fs.cwd().realpathAlloc(allocator, ".");
|
|
defer allocator.free(cwd_path);
|
|
|
|
const cache_path = try std.fs.path.resolve(allocator, &.{ cwd_path, "./api-store.bin" });
|
|
defer allocator.free(cache_path);
|
|
|
|
// TODO: Don't prefetch images
|
|
try server.prefetchCached(allocator, cache_path);
|
|
}
|
|
|
|
const character_id = (try server.getCharacter("Blondie")).?;
|
|
|
|
var artificer = try Artificer.init(allocator, &server, character_id);
|
|
defer artificer.deinit(allocator);
|
|
|
|
// _ = try artificer.appendGoal(Artificer.Goal{
|
|
// .gather = .{
|
|
// .item = store.items.getId("sap").?,
|
|
// .quantity = 1
|
|
// }
|
|
// });
|
|
|
|
_ = try artificer.appendGoal(Artificer.Goal{
|
|
.craft = .{
|
|
.item = store.items.getId("copper").?,
|
|
.quantity = 2
|
|
}
|
|
});
|
|
|
|
std.log.info("Starting main loop", .{});
|
|
try artificer.runUntilGoalsComplete();
|
|
}
|