]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'marin-t/bot-badcvar' into 'master'
authorMario <mario.mario@y7mail.com>
Tue, 7 Apr 2020 19:29:06 +0000 (19:29 +0000)
committerMario <mario.mario@y7mail.com>
Tue, 7 Apr 2020 19:29:06 +0000 (19:29 +0000)
Allow changing bot_ai_*

See merge request xonotic/xonotic-data.pk3dir!768

1  2 
qcsrc/server/g_world.qc

diff --combined qcsrc/server/g_world.qc
index 650c249139596cc69df943e447000214f9293d84,5c71899a7ea92c6b3d0501f688f70c127295cfa9..fce1f942d5704ab0084d74d45315bd92d894b184
@@@ -398,6 -398,7 +398,7 @@@ void cvar_changes_init(
                //   :%s,//\([^ ]*\).*,BADCVAR("\1");,
                //   :%!sort
                // yes, this does contain some redundant stuff, don't really care
+               BADPREFIX("bot_ai_");
                BADCVAR("bot_config_file");
                BADCVAR("bot_number");
                BADCVAR("bot_prefix");
@@@ -1258,7 -1259,7 +1259,7 @@@ void Maplist_Init(
                                break;
                }
        }
 -      
 +
        if (i == Map_Count)
        {
                bprint( "Maplist contains no usable maps!  Resetting it to default map list.\n" );
@@@ -1705,9 -1706,11 +1706,9 @@@ void ShuffleMaplist(
        cvar_set("g_maplist", shufflewords(autocvar_g_maplist));
  }
  
 -float leaderfrags;
 +int fragsleft_last;
  float WinningCondition_Scores(float limit, float leadlimit)
  {
 -      float limitreached;
 -
        // TODO make everything use THIS winning condition (except LMS)
        WinningConditionHelper(NULL);
  
                leadlimit = 0; // not supported in this mode
  
        if(MUTATOR_CALLHOOK(Scores_CountFragsRemaining))
 -      // these modes always score in increments of 1, thus this makes sense
        {
 -              if(leaderfrags != WinningConditionHelper_topscore)
 -              {
 -                      leaderfrags = WinningConditionHelper_topscore;
 +              float fragsleft = FLOAT_MAX, leadingfragsleft = FLOAT_MAX;
 +              if (limit)
 +                      fragsleft = limit - WinningConditionHelper_topscore;
 +              if (leadlimit)
 +                      leadingfragsleft = WinningConditionHelper_secondscore + leadlimit - WinningConditionHelper_topscore;
 +
 +              if (limit && leadlimit && autocvar_leadlimit_and_fraglimit)
 +                      fragsleft = max(fragsleft, leadingfragsleft);
 +              else
 +                      fragsleft = min(fragsleft, leadingfragsleft);
  
 -                      if (limit)
 -                      {
 -                              if (leaderfrags == limit - 1)
 -                                      Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_1);
 -                              else if (leaderfrags == limit - 2)
 -                                      Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_2);
 -                              else if (leaderfrags == limit - 3)
 -                                      Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_3);
 -                      }
 +              if (fragsleft_last != fragsleft) // do not announce same remaining frags multiple times
 +              {
 +                      if (fragsleft == 1)
 +                              Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_1);
 +                      else if (fragsleft == 2)
 +                              Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_2);
 +                      else if (fragsleft == 3)
 +                              Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_3);
 +
 +                      fragsleft_last = fragsleft;
                }
        }
  
 -      limitreached = false;
 -      if (limit && WinningConditionHelper_topscore >= limit)
 -              limitreached = true;
 -      if(leadlimit)
 -      {
 -              float leadlimitreached;
 -              leadlimitreached = (WinningConditionHelper_topscore - WinningConditionHelper_secondscore >= leadlimit);
 -              if(autocvar_leadlimit_and_fraglimit)
 -                      limitreached = (limitreached && leadlimitreached);
 -              else
 -                      limitreached = (limitreached || leadlimitreached);
 -      }
 +      bool fraglimit_reached = (limit && WinningConditionHelper_topscore >= limit);
 +      bool leadlimit_reached = (leadlimit && WinningConditionHelper_topscore - WinningConditionHelper_secondscore >= leadlimit);
  
 -      if(limit)
 -              game_completion_ratio = max(game_completion_ratio, bound(0, WinningConditionHelper_topscore / limit, 1));
 +      bool limit_reached;
 +      // only respect leadlimit_and_fraglimit when both limits are set or the game will never end
 +      if (limit && leadlimit && autocvar_leadlimit_and_fraglimit)
 +              limit_reached = (fraglimit_reached && leadlimit_reached);
 +      else
 +              limit_reached = (fraglimit_reached || leadlimit_reached);
  
        return GetWinningCode(
 -              WinningConditionHelper_topscore && limitreached,
 +              WinningConditionHelper_topscore && limit_reached,
                WinningConditionHelper_equality
        );
  }
@@@ -1864,6 -1866,10 +1865,6 @@@ Exit deathmatch games upon condition
  */
  void CheckRules_World()
  {
 -      float timelimit;
 -      float fraglimit;
 -      float leadlimit;
 -
        VoteThink();
        MapVote_Think();
  
                return;
        }
  
 -      timelimit = autocvar_timelimit * 60;
 -      fraglimit = autocvar_fraglimit;
 -      leadlimit = autocvar_leadlimit;
 +      float timelimit = autocvar_timelimit * 60;
 +      float fraglimit = autocvar_fraglimit;
 +      float leadlimit = autocvar_leadlimit;
 +      if (leadlimit < 0) leadlimit = 0;
  
        if(warmup_stage || time <= game_starttime) // NOTE: this is <= to prevent problems in the very tic where the game starts
        {
        float wantovertime;
        wantovertime = 0;
  
 -      if(timelimit > game_starttime)
 -              game_completion_ratio = (time - game_starttime) / (timelimit - game_starttime);
 -      else
 -              game_completion_ratio = 0;
 -
        if(checkrules_suddendeathend)
        {
                if(!checkrules_suddendeathwarning)