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