QuakeC:рандомная загрузка уровней

Написано: вторник, 3 апреля 2012 г. автор st1x51
0

Рандомная загрузка уровней[QuakeC]
Открываем client.qc и видим такую вот картину:
void() NextLevel =
{
 local entity o;

 if (mapname == "start")
 {
  if (!cvar("registered"))
  {
   mapname = "e1m1";
  }
  else if (!(serverflags & 1))
  {
   mapname = "e1m1";
   serverflags = serverflags | 1;
  }
  else if (!(serverflags & 2))
  {
   mapname = "e2m1";
   serverflags = serverflags | 2;
  }
  else if (!(serverflags & 4))
  {
   mapname = "e3m1";
   serverflags = serverflags | 4;
  }
  else if (!(serverflags & 8))
  {
   mapname = "e4m1";
   serverflags = serverflags - 7;
  }

  o = spawn();
  o.map = mapname;
 }
 else
 {
  // find a trigger changelevel
  o = find(world, classname, "trigger_changelevel");

  // go back to start if no trigger_changelevel
  if (!o)
  {
   mapname = "start";
   o = spawn();
   o.map = mapname;
  }
 }

 nextmap = o.map;
 gameover = TRUE;
 
 if (o.nextthink < time)
 {
  o.think = execute_changelevel;
  o.nextthink = time + 0.1;
 }
};
 
Копируем NextLevel() функцию и меняем ей имя на NextRandomLevel.
Теперь,замените это:
 
if (mapname == "start")
 {
  if (!cvar("registered"))
  {
   mapname = "e1m1";
  }
  else if (!(serverflags & 1))
  {
   mapname = "e1m1";
   serverflags = serverflags | 1;
  }
  else if (!(serverflags & 2))
  {
   mapname = "e2m1";
   serverflags = serverflags | 2;
  }
  else if (!(serverflags & 4))
  {
   mapname = "e3m1";
   serverflags = serverflags | 4;
  }
  else if (!(serverflags & 8))
  {
   mapname = "e4m1";
   serverflags = serverflags - 7;
  }

  o = spawn();
  o.map = mapname;
 }
 else
 {
  // find a trigger changelevel
  o = find(world, classname, "trigger_changelevel");

  // go back to start if no trigger_changelevel
  if (!o)
  {
   mapname = "start";
   o = spawn();
   o.map = mapname;
  }
 } 
 
На это:

local float whichmap;
 
 whichmap = rint (random()*36 + 1);
 
 if (whichmap == 1)
  mapname = "start";
 else if (whichmap == 2)
  mapname = "e1m1";
 else if (whichmap == 3)
  mapname = "e1m2";
 else if (whichmap == 4)
  mapname = "e1m3";
 else if (whichmap == 5)
  mapname = "e1m4";
 else if (whichmap == 6)
  mapname = "e1m5";
 else if (whichmap == 7)
  mapname = "e1m6";
 else if (whichmap == 8)
  mapname = "e1m7";
 else if (whichmap == 9)
  mapname = "e1m8";
 else if (whichmap == 10)
  mapname = "e2m1";
 else if (whichmap == 11)
  mapname = "e2m2";
 else if (whichmap == 12)
  mapname = "e2m3";
 else if (whichmap == 13)
  mapname = "e2m4";
 else if (whichmap == 14)
  mapname = "e2m5";
 else if (whichmap == 15)
  mapname = "e2m6";
 else if (whichmap == 16)
  mapname = "e2m7";
 else if (whichmap == 17)
  mapname = "e3m1";
 else if (whichmap == 18)
  mapname = "e3m2";
 else if (whichmap == 19)
  mapname = "e3m3";
 else if (whichmap == 20)
  mapname = "e3m4";
 else if (whichmap == 21)
  mapname = "e3m5";
 else if (whichmap == 22)
  mapname = "e3m6";
 else if (whichmap == 23)
  mapname = "e3m7";
 else if (whichmap == 24)
  mapname = "e4m1";
 else if (whichmap == 25)
  mapname = "e4m2";
 else if (whichmap == 26)
  mapname = "e4m3";
 else if (whichmap == 27)
  mapname = "e4m4";
 else if (whichmap == 28)
  mapname = "e4m5";
 else if (whichmap == 29)
  mapname = "e4m6";
 else if (whichmap == 30)
  mapname = "e4m7";
 else if (whichmap == 31)
  mapname = "e4m8";
 else if (whichmap == 32)
  mapname = "dm1";
 else if (whichmap == 33)
  mapname = "dm2";
 else if (whichmap == 34)
  mapname = "dm3";
 else if (whichmap == 35)
  mapname = "dm4";
 else if (whichmap == 36)
  mapname = "dm5";
 else
  mapname = "dm6";
 
 o = spawn();
 o.map = mapname;
 
В CheckRules() Функции найдите:
 
if (deathmatch && fraglimit && self.frags >= fraglimit)
{
 NextLevel ();
 return;
}  

Теперь замените NextLevel (); на:
NextRandomLevel ();
 
Все.Компилим.Теперь наши уровни загружаются рандомно

0 коммент.: