home *** CD-ROM | disk | FTP | other *** search
/ Hacker 9 / HACKER09.ISO / Games / StarSiege.exe / Starsiege / Missions.vol / KOTH_Death_Valley.cs < prev    next >
Text File  |  1998-07-27  |  12KB  |  424 lines

  1. //////
  2. //script for titan king-of-the-hill
  3. //
  4.  
  5.  
  6. function setDefaultMissionOptions()
  7. {
  8.     $server::TeamPlay = False;        // for DM_ games
  9. }
  10.  
  11. //--------------------------------------------------------
  12. // start clean (just because)
  13. function onMissionStart()
  14. {
  15.     $king="";
  16.     $victor="No one";
  17.     initGlobalVars();
  18. }
  19.  
  20. ///----------------------------------------------------------
  21. ///Chat instructions to new arrivals
  22. function player::onAdd(%this)
  23. {
  24.     chat(%this,0,"-Welcome to Death Valley.  (King-of-the-Hill)");
  25.     chat(%this,0,"-Contact the landing pad between the turrets to become king.");
  26.     chat(%this,0,"-As king, score more points per kill.");
  27.     chat(%this,0,"-Use the turrets and battlements to your advantage.");
  28.     chat(%this,0,"-Good Luck.  You're probably going to need it.");
  29.  
  30.     if($server::TeamPlay != True)
  31.     {
  32.         setTeam(%this, red);
  33.     }
  34. }
  35.  
  36.  
  37. //----------------------------------------------------------------
  38. //Initialize Turrets
  39.  
  40. function redturret::turret::onAdd(%this)
  41. {
  42.     $turret1=%this;
  43. //    echo("i am a turret",%this);
  44.     resetKing();          
  45. }
  46. function purpleturret::turret::onAdd(%this)
  47. {
  48.     $turret2=%this;
  49. }
  50. function yellowturret::turret::onAdd(%this)
  51. {
  52.     $turret3=%this;
  53. }
  54. function blueturret::turret::onAdd(%this)
  55. {
  56.     $turret4=%this;
  57. }
  58.  
  59. //----------------------------------------------------------
  60. function resetKing()
  61. {
  62.     setVehicleSpecialIdentity($king,false,"Purple");
  63.     dataRelease($king,"KingFlag");
  64.     $oldKing=$king;
  65.     $king="";
  66.     if(!($server::TeamPlay))
  67.     {
  68.         setTurretOwner($turret1,0);
  69.         setTurretOwner($turret2,0);
  70.         setTurretOwner($turret3,0);
  71.         setTurretOwner($turret4,0);
  72.  
  73.     }
  74.    else
  75.     {
  76.         setTeam($turret1,"Red");
  77.         setTeam($turret2,"Purple");
  78.         setTeam($turret3,"Yellow");
  79.         setTeam($turret4,"Blue");
  80.  
  81.     }
  82. //    echo("the turrets are owned by:",$king,$kingsTeam);
  83. }
  84.  
  85. //-----------------------------------------------------------
  86. //make the turrets not fire at the king
  87. function throne::trigger::onContact(%this,%object)
  88. {
  89. //is the person on the throne already king?
  90.     if ($king==%object) {return;}
  91. //does the team own this turret
  92.     if($server::TeamPlay)
  93.     {
  94.         if (getTeam($king)==getTeam(%object))
  95.         {
  96.             //denyTeam();
  97.             return;
  98.          }
  99.     }
  100.     isKingAway();
  101.     if ($king=="")
  102.     {
  103.         //echo("noone is king");
  104.         $king=%object;
  105.         if($server::TeamPlay){$kingsTeam=getTeam($king);}
  106.         //give the new king a little lovin for making it thru the turrets if his team was last in charge
  107.         if ((!($server::TeamPlay)) && $king!=$oldKing)
  108.         {
  109.             chat(%object,0,"You receive repair for becoming king.");
  110.             healObject($king,10000);
  111.             reloadObject($king,10000);
  112.         }
  113.         wall(getName($king),"is king.");
  114.         setVehicleSpecialIdentity($king,True,"Purple");
  115.         dataStore($king,"KingFlag","True");
  116.         kingPoint();
  117.         if($king!=$oldKing)
  118.         {
  119.             dataStore(playerManager::vehicleIdToPlayerNum($king),"KingAtEnd",1+dataRetrieve(playerManager::vehicleIdToPlayerNum($king),"KingAtEnd"));
  120.         }
  121.         if($server::TeamPlay)
  122.         {
  123.             wall($kingsTeam,"has the throne.");
  124.         }
  125. //        echo("The turrets sb owned by",$king,$kingsTeam);
  126.         //set turret owner to new king
  127.         if(!($server::TeamPlay))
  128.         {
  129.             setTurretOwner($turret1, $king);
  130.             setTurretOwner($turret2, $king);
  131.             setTurretOwner($turret3, $king);
  132.             setTurretOwner($turret4, $king);
  133.  
  134.         }
  135.         if($server::TeamPlay)
  136.         {
  137.             setTeam($turret1,$kingsTeam);
  138.             setTeam($turret2,$kingsTeam);
  139.             setTeam($turret3,$kingsTeam);
  140.             setTeam($turret4,$kingsTeam);
  141.  
  142.         }
  143.         return;
  144.     }
  145.     if(!($server::TeamPlay)){chat(%object,0,"You can not be king if the king is alive and near.");}
  146.     damageObject(%this,50);
  147. }
  148.  
  149. function isKingAway()
  150. {
  151. //how far away is the king
  152.     %kingAway=getDistance($king,"MissionGroup\\Scenario\\Castle\\throne");
  153. //    echo(%kingAway,"=distance from king to throne.");
  154.     if (%kingAway>=300||%kingAway==0)
  155.     {
  156.         resetKing();        
  157.         if (%kingAway!=0) {wallDim("The king is away from the throne.  He has been dethroned.");}
  158.     }
  159.  
  160. }
  161.  
  162.  
  163. //----------------------------------------------------------------
  164. //Scoring 
  165.  
  166. function vehicle::onDestroyed(%destroyed,%destroyer)
  167. {
  168. //if the king is destroyed, he loses his throne
  169.     if (%destroyed==$king)
  170.     {
  171.         //special case where king kills self
  172.         if (%destroyed==$king&&%destroyer==$king)
  173.         {
  174.             wallDim("A suicidal king.  The throne is empty!");
  175.             resetKing();
  176.             return;
  177.         }
  178.         //special case where the king is killed by own turrets
  179.         if (%destroyer==$turret1||%destroyer==$turret2||%destroyer==$turret3||%destroyer==$turret4)
  180.         {
  181.             wallDim("The king was killed by his turrets and loses points!");
  182.             dataStore(playerManager::vehicleIdToPlayerNum(%destroyed),"kingKills",dataRetrieve(playerManager::vehicleIdToPlayerNum(%destroyed),"kingKills")-5);
  183.             resetKing();
  184.             return;
  185.         }
  186.         resetKing();
  187.         wall(getName(%destroyer),"has killed the king.");
  188.         if (!($server::TeamPlay)){dataStore(playerManager::vehicleIdToPlayerNum(%destroyer),"kingKills",1+dataRetrieve(playerManager::vehicleIdToPlayerNum(%destroyer),"kingKills"));}
  189.         else if(getTeam(%destroyer)!=getTeam($king))
  190.         {
  191.             dataStore(playerManager::vehicleIdToPlayerNum(%destroyer),"kingKills",1+dataRetrieve(playerManager::vehicleIdToPlayerNum(%destroyer),"kingKills"));        
  192.         }
  193.     }
  194.     if (%destroyer==$turret1||%destroyer==$turret2||%destroyer==$turret3||%destroyer==$turret4)
  195.     {
  196.         if ($king=="") {return;}
  197.         wallDim("Kill for the kings turrets.");  
  198.         dataStore(playerManager::vehicleIdToPlayerNum($king),"KillsAsKing",1+dataRetrieve(playerManager::vehicleIdToPlayerNum($king),"KillsAsKing"));
  199.         return;
  200.     }
  201.     if (%destroyer==$king)
  202.     {
  203.         if (!($server::TeamPlay)){dataStore(playerManager::vehicleIdToPlayerNum(%destroyer),"KillsAsKing",1+dataRetrieve(playerManager::vehicleIdToPlayerNum(%destroyer),"KillsAsKing"));}
  204.         if ($server::TeamPlay)
  205.         {
  206.             if (getTeam(%destroyed)!=getTeam($king))
  207.             {
  208.                 dataStore(playerManager::vehicleIdToPlayerNum(%destroyer),"KillsAsKing",1+dataRetrieve(playerManager::vehicleIdToPlayerNum(%destroyer),"KillsAsKing"));        
  209.             }
  210.         }
  211.    
  212.     }
  213.     wallDim(strcat(getName(%destroyer)," killed ",getName(%destroyed),"."));
  214. }
  215. //------------------------------------------------------------------------
  216. //end:  find out who wins
  217.  
  218. function onMissionEnd()
  219. {
  220. //  points for ending as king
  221.     if (playerManager::getPlayerCount()<=0){return;}
  222.     isKingAway();
  223.     dataStore(playerManager::vehicleIdToPlayerNum($king),"KingAtEnd",10+dataRetrieve(playerManager::vehicleIdToPlayerNum($king),"KingAtEnd"));
  224.     %winner=getName($king);
  225.     if ($king=="") {%winner="No one";}
  226.     wallDim(%winner,"gets an extra 10 points for finishing as King.");
  227.     if ($server::TeamPlay)    {getHITeamScore();}
  228.    else {getHIPlayerScore();}
  229.     wall($victor,"is victorious!");        
  230. }
  231.  
  232. //------------------------------------------------------------------------
  233.  
  234. function kingPoint()
  235. {
  236.     isKingAway();
  237.     if ($king==""){return;}
  238.     if (dataRetrieve($king,"KingFlag")!="True"){return;}
  239. //    dataStore(playerManager::vehicleIdToPlayerNum(%destroyer),"kingKills",1+dataRetrieve(playerManager::vehicleIdToPlayerNum(%destroyer),"kingKills"));
  240. //    chat($king,0,"KING POINT.");
  241.     kingPointPassenger();
  242. }
  243.  
  244. function kingPointPassenger()
  245. {
  246.     %order="kingPoint();";
  247.     schedule(%order,20);
  248. }
  249.  
  250. //Scoreing Stuff
  251. function getPlayerScore(%player)
  252. {
  253.    return (getKingAtEnd(%player)+getKills(%player)+getKingKills(%player)+(getKillsAsKing(%player)*2)-getDeaths(%player));            
  254. }
  255.  
  256. function getKingKills(%player)
  257. {
  258.     %kingKills=dataRetrieve(%player,"kingKills");
  259.     if (%kingKills=="") {%kingKills=0;}
  260.     return %kingKills;
  261. }
  262.  
  263. function getKillsAsKing(%player)
  264. {
  265.     %turretKills=dataRetrieve(%player,"KillsAsKing");
  266.     if (%turretKills=="") {%turretKills=0;}
  267.     return %turretKills;
  268. }
  269.  
  270. function getKingAtEnd(%player)
  271. {
  272.     %KingPoints=dataRetrieve(%player,"KingAtEnd");
  273.     if (%KingPoints=="") {%KingPoints=0;}
  274.     return %KingPoints;
  275. }
  276. function getKOTHTeamScore(%team)
  277. {
  278. //This is a cannonball.  Start team score at 0 and iterate thru
  279. //all players add their score to the score of the team they are on and return it
  280. //    echo("kothteamscore called");
  281.     %score=0;
  282.     %playerScore=0;
  283.     for (%i=0; %i<playerManager::getPlayerCount(); %i=%i+1)
  284.     {
  285.         %player=playerManager::getPlayerNum(%i);
  286.         %playerScore=getPlayerScore(%player);
  287.         if (%team==getTeam(%player))
  288.         {
  289.             %score=%score+%playerScore;
  290.             //echo("Team Score: ",%score);
  291.         }
  292.     }
  293.     return %score;    
  294. }
  295.  
  296. function teamColorForScore(%teamId)
  297. {
  298.     %team=getTeamNameFromTeamId(%teamId);
  299.     %score=getKOTHTeamScore(%team);
  300.     return %score;
  301. }
  302. //-----------------------------------------------------------------------
  303. /// find highest player or team scores
  304.  
  305. function getHITeamScore()
  306. {
  307.     for (%i=0; %i<playerManager::getPlayerCount(); %i=%i+1)
  308.     {                      
  309.         %HITeamScore = 0;
  310.         %tS = 0;
  311.         %teamPlayer = playerManager::getPlayerNum(%i);
  312.         %tS = getKOTHTeamScore(getTeam(%teamPlayer));
  313.         //echo(%tS);
  314.  
  315.  
  316.         if (%tS > %HITeamScore)
  317.         {
  318.             %HITeamScore = %tS;
  319.             //echo(%tS, " ", %HITeamScore);
  320.             $victor = getTeam(%teamPlayer);
  321.             
  322.             //echo($victor);
  323.         }
  324.     }
  325.     return $victor;    
  326. }
  327.  
  328. function getHIplayerScore()
  329. {
  330. //    echo ("hi player score called");
  331.     %score=0;
  332.     %playerScore=0;
  333.     %HIPlayerScore=0;
  334.     for (%i=0; %i<playerManager::getPlayerCount(); %i=%i+1)
  335.     {
  336.         %player=playerManager::getPlayerNum(%i);
  337.         %playerScore=getPlayerScore(%player);
  338.  //        echo("player is ",%player,getName(%player));
  339.         if (%playerScore>=%HIPlayerScore)
  340.         {
  341.             //echo(%playerScore, "is higher than",%HIPlayerScore);
  342.             %HIPlayerScore=%playerScore;
  343.             //echo("so now high score is",%HIPlayerScore);
  344.             $victor=getName(%player);
  345.  
  346.         }
  347.     }
  348.     return $victor;    
  349. }
  350.  
  351.  
  352.  
  353. //  Scoreboard
  354.  
  355. function initScoreBoard()
  356. {
  357.     deleteVariables("$ScoreBoard::PlayerColumn*");
  358.     deleteVariables("$ScoreBoard::TeamColumn*");
  359.  
  360.     if (!($server::TeamPlay))
  361.     {
  362.         //Player Column Headings
  363.         $ScoreBoard::PlayerColumnHeader1="SCORE";
  364.         $ScoreBoard::PlayerColumnHeader2="KILLS AS KING";
  365.         $ScoreBoard::PlayerColumnHeader3="KING KILLS";
  366.         $ScoreBoard::PlayerColumnHeader4="KILLS";
  367.         $ScoreBoard::PlayerColumnHeader5="DEATHS";
  368.         $ScoreBoard::PlayerColumnHeader6="PING";
  369.  
  370.         //Player Column Functions
  371.         $ScoreBoard::PlayerColumnFunction1="getPlayerScore";
  372.         $ScoreBoard::PlayerColumnFunction2="getKillsAsKing";
  373.         $ScoreBoard::PlayerColumnFunction3="getKingKills";
  374.         $ScoreBoard::PlayerColumnFunction4="getKills";
  375.         $ScoreBoard::PlayerColumnFunction5="getDeaths";
  376.         $ScoreBoard::PlayerColumnFunction6="getPing";
  377.     }
  378.    else 
  379.     {
  380.         //Player Column Headings
  381.         $ScoreBoard::PlayerColumnHeader1="TEAM";
  382.         $ScoreBoard::PlayerColumnHeader2="SCORE";
  383.         $ScoreBoard::PlayerColumnHeader3="KILLS AS KING";
  384.         $ScoreBoard::PlayerColumnHeader4="KING KILLS";
  385.         $ScoreBoard::PlayerColumnHeader5="KILLS";
  386.         $ScoreBoard::PlayerColumnHeader6="DEATHS";
  387.         $ScoreBoard::PlayerColumnHeader7="PING";
  388.  
  389.         //Player Column Functions
  390.         $ScoreBoard::PlayerColumnFunction1="getTeam";
  391.         $ScoreBoard::PlayerColumnFunction2="getPlayerScore";
  392.         $ScoreBoard::PlayerColumnFunction3="getKillsAsKing";
  393.         $ScoreBoard::PlayerColumnFunction4="getKingKills";
  394.         $ScoreBoard::PlayerColumnFunction5="getKills";
  395.         $ScoreBoard::PlayerColumnFunction6="getDeaths";
  396.         $ScoreBoard::PlayerColumnFunction7="getPing";
  397.  
  398.     }
  399.  
  400.     //Team Column Headings
  401.       $ScoreBoard::TeamColumnHeader1="SCORE";
  402.  
  403.     //Team Column Headings
  404.      $ScoreBoard::TeamColumnFunction1="teamColorForScore";
  405.  
  406.  
  407.  
  408.  
  409.     serverInitScoreBoard();
  410. }
  411. //-------------------------------------------------------------
  412.  
  413. function initGlobalVars()
  414. {
  415.     for (%i=0; %i<playerManager::getPlayerCount(); %i=%i+1)
  416.     {
  417.         %player=playerManager::getPlayerNum(%i);
  418.                               
  419.         dataRelease(%player,"KingAtEnd");
  420.         dataRelease(%player,"kingKills");   
  421.         dataRelease(%player,"KillsAsKing");           
  422.     }
  423. }
  424.