]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/campaign.qc
Properly support team field on trigger_multiple
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / campaign.qc
index 2c091d56e15f19bed4cda5890861ef29fae33db2..e80769cc2783edabcca7b1952aafbb5f9b06a256 100644 (file)
@@ -1,4 +1,7 @@
 #include "campaign.qh"
+
+#include "defs.qh"
+
 #include "cheats.qh"
 #include "miscfunctions.qh"
 #include "g_world.qh"
@@ -22,7 +25,7 @@ float CampaignBailout(string s)
        cvar_string = cvar_string_normal;
        cvar_set = cvar_set_normal;
        cvar_set("g_campaign", "0");
-       print("^4campaign initialization failed: ", s, "\n");
+       LOG_INFO("^4campaign initialization failed: ", s);
        if(autocvar__campaign_testrun)
                error("CAMPAIGN FAIL AHAHAHAHAHAHAHAHAH))");
        return 1;
@@ -73,21 +76,25 @@ void CampaignPreInit()
 {
        float baseskill;
        string title;
-       if(autocvar_sv_cheats)
-       {
-               CampaignBailout("JOLLY CHEATS AHAHAHAHAHAHAH))");
-               return;
-       }
        campaign_level = autocvar__campaign_index;
        campaign_name = strzone(autocvar__campaign_name);
        campaign_index_var = strzone(strcat("g_campaign", campaign_name, "_index"));
        CampaignFile_Load(campaign_level, 2);
+
        if(campaign_entries < 1)
        {
                CampaignBailout("unknown map");
                return;
        }
 
+       if(autocvar_sv_cheats)
+       {
+               MapInfo_SwitchGameType(MapInfo_Type_FromString(campaign_gametype[0]));
+               CampaignFile_Unload();
+               CampaignBailout("JOLLY CHEATS AHAHAHAHAHAHAH))");
+               return;
+       }
+
        baseskill = autocvar_g_campaign_skill;
        baseskill = baseskill + campaign_botskill[0];
        if(baseskill < 0)
@@ -121,7 +128,6 @@ void CampaignPreInit()
        strunzone(title);
 }
 
-string GetMapname();
 void CampaignPostInit()
 {
        // now some sanity checks
@@ -185,25 +191,16 @@ void CampaignSaveCvar(string cvarname, float value)
 
 void CampaignPreIntermission()
 {
-       entity head;
-       float won;
-       float lost;
+       int won = 0;
+       int lost = 0;
        string savevar;
 
-       won = lost = 0;
-
-       head = findchain(classname, "player");
-       while(head)
-       {
-               if(IS_REAL_CLIENT(head))
-               {
-                       if(head.winning)
-                               won = won + 1;
-                       else
-                               lost = lost + 1;
-               }
-               head = head.chain;
-       }
+       FOREACH_CLIENT(IS_PLAYER(it) && IS_REAL_CLIENT(it), {
+               if(it.winning)
+                       won += 1;
+               else
+                       lost += 1;
+       });
 
        if(autocvar__campaign_testrun)
        {
@@ -266,7 +263,7 @@ void CampaignPostIntermission()
        if(campaign_won && campaign_entries < 2)
        {
                // last map won!
-               print("^2test run: campaign looks GOOD\n");
+               LOG_DEBUG("^2test run: campaign looks GOOD");
                localcmd("togglemenu 1\n");
                CampaignFile_Unload();
                return;