36 (*existing) = (*update);
88 while (!quest->
steps.empty()) {
90 quest->
steps.pop_back();
101 int condition_parsed = 0;
106 char namedquest[500];
107 namedquest[0] =
'\0';
108 if (sscanf(buffer,
"%s %d-%d", namedquest, &condition->
minstep, &condition->
maxstep) != 3) {
109 if (sscanf(buffer,
"%s <=%d", namedquest, &condition->
maxstep) == 2) {
111 condition_parsed = 1;
112 }
else if (sscanf(buffer,
"%s %d", namedquest, &condition->
minstep) == 2) {
114 condition_parsed = 1;
115 }
else if (strstr(buffer,
"finished")) {
116 if (sscanf(buffer,
"%s finished", namedquest) == 1) {
118 condition_parsed = 1;
122 condition_parsed = 1;
124 if (condition_parsed)
127 return condition_parsed;
132 snprintf(buf, len,
"%s finished", cond->
quest_code);
int maxstep
The latest step that triggers the condition, to match, the stages must be between minstep and maxstep...
sstring step_description
Step description to show player.
Definition of an in-game quest.
sstring quest_code
The quest that triggers the condition.
std::vector< quest_step_definition * > steps
Quest steps.
sstring quest_comment
Quest comment, not visible to players.
sstring add_string(const char *str)
Share a string.
#define FREE_AND_CLEAR_STR_IF(xyz)
uint32_t client_code
The code used to communicate with the client, merely a unique index.
std::unordered_map< std::string, quest_definition *> m_assets
Known assets.
void quest_destroy_step(quest_step_definition *step)
void free_string(sstring str)
This will reduce the refcount, and if it has reached 0, str will be freed.
quest_definition * quest_create(const char *name)
int quest_condition_from_string(quest_condition *condition, const char *buffer)
Parse a single step condition.
One condition to automatically move to a quest step.
void quest_destroy_condition(quest_condition *condition)
quest_condition * quest_create_condition(void)
Allocate a quest_condition, will call fatal() if out of memory.
bool quest_is_system
If set then the quest isn't counted or listed.
quest_step_definition * quest_create_step(void)
Allocate a quest_step_definition, will call fatal() if out of memory.
sstring quest_code
Quest internal code.
void asset_destroy(quest_definition *quest)
void quest_destroy(quest_definition *quest)
std::vector< quest_condition * > conditions
The conditions that must be satisfied to trigger the step.
void quest_write_condition(char *buf, size_t len, const quest_condition *cond)
Write a step condition to a buffer.
sstring quest_title
Quest title for player.
void fatal(enum fatal_error err)
fatal() is meant to be called whenever a fatal signal is intercepted.
virtual void replace(quest_definition *existing, quest_definition *update) override
Replace an asset by an updated version.
void quest_clear(quest_definition *quest)
int minstep
The earliest step in the quest that triggers the condition, -1 means finished, 0 means not started...
sstring quest_description
Quest longer description.
virtual void added(quest_definition *quest) override
An asset was either referenced (but undefined) or defined.
quest_definition * asset_create(const std::string &name)