/** * @note Mission trigger function * @sa CP_MissionTriggerFunctions * @sa CP_ExecuteMissionTrigger */ static void CP_AddTechAsResearchable_f (void) { if (cgi->Cmd_Argc() < 2) { Com_Printf("Usage: %s <tech>\n", cgi->Cmd_Argv(0)); return; } const char* techID = cgi->Cmd_Argv(1); technology_t* tech = RS_GetTechByID(techID); RS_MarkOneResearchable(tech); }
/** * @brief This function parses a list of items that should be set to researchable = true after campaign start * @param[in] campaign The campaign data structure * @param[in] name Name of the techlist * @param[in,out] text Script to parse * @param[in] researchable Mark them researchable or not researchable * @sa CP_ParseScriptFirst */ static void CP_ParseResearchableCampaignStates (const campaign_t *campaign, const char *name, const char **text, qboolean researchable) { const char *errhead = "CP_ParseResearchableCampaignStates: unexpected end of file (equipment "; const char *token; int i; /* get it's body */ token = Com_Parse(text); if (!*text || *token != '{') { Com_Printf("CP_ParseResearchableCampaignStates: equipment def \"%s\" without body ignored\n", name); return; } if (!Q_streq(campaign->researched, name)) { Com_DPrintf(DEBUG_CLIENT, "..don't use '%s' as researchable list\n", name); return; } Com_DPrintf(DEBUG_CLIENT, "..campaign researchable list '%s'\n", name); do { token = Com_EParse(text, errhead, name); if (!*text || *token == '}') return; for (i = 0; i < ccs.numTechnologies; i++) { technology_t *tech = RS_GetTechByIDX(i); if (Q_streq(token, tech->id)) { if (researchable) { tech->mailSent = MAILSENT_PROPOSAL; RS_MarkOneResearchable(tech); } else { /** @todo Mark unresearchable */ } Com_DPrintf(DEBUG_CLIENT, "...tech %s\n", tech->id); break; } } if (i == ccs.numTechnologies) Com_Printf("CP_ParseResearchableCampaignStates: unknown token \"%s\" ignored (tech %s)\n", token, name); } while (*text); }