comparison src/libmlk-rpg/rpg/quest.c @ 330:e0657709fbe3

rpg: add support for basic quests
author David Demelier <markand@malikania.fr>
date Wed, 06 Oct 2021 13:54:16 +0200
parents
children 460c78706989
comparison
equal deleted inserted replaced
329:ea4a3af71c18 330:e0657709fbe3
1 /*
2 * quest.c -- in game quests
3 *
4 * Copyright (c) 2020-2021 David Demelier <markand@malikania.fr>
5 *
6 * Permission to use, copy, modify, and/or distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19 #include <assert.h>
20
21 #include <assets/sql/quest-remove.h>
22 #include <assets/sql/quest-save.h>
23 #include <assets/sql/quest-step-load.h>
24 #include <assets/sql/quest-step-save.h>
25
26 #include "quest.h"
27 #include "save.h"
28
29 int
30 quest_save(struct quest *q, struct save *s)
31 {
32 assert(q);
33 assert(s);
34
35 const struct quest_step *step;
36
37 if (save_tx_begin(s) < 0)
38 return -1;
39
40 if (save_exec(s, (const char *)assets_sql_quest_save, "s", q->name) < 0) {
41 save_tx_rollback(s);
42 return -1;
43 }
44
45 for (size_t i = 0; i < q->stepsz; ++i) {
46 step = &q->steps[i];
47
48 if (save_exec(s, (const char *)assets_sql_quest_step_save, "ssi", q->name, step->name, step->percent) < 0) {
49 save_tx_rollback(s);
50 return -1;
51 }
52 }
53
54 save_tx_commit(s);
55
56 return 0;
57 }
58
59 int
60 quest_load(struct quest *q, struct save *s)
61 {
62 assert(q);
63 assert(s);
64
65 struct save_stmt stmt;
66 struct quest_step *step;
67
68 for (size_t i = 0; i < q->stepsz; ++i) {
69 step = &q->steps[i];
70
71 if (save_stmt_init(&stmt, s, (const char *)assets_sql_quest_step_load, "s", step->name))
72 return -1;
73
74 if (save_stmt_next(&stmt, "i", &step->percent) < 0) {
75 save_stmt_finish(&stmt);
76 return -1;
77 }
78
79 save_stmt_finish(&stmt);
80 }
81
82 return 0;
83 }