Advertisement
Adam445

cod4 tag

May 22nd, 2019
445
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.09 KB | None | 0 0
  1. /*
  2. Tag
  3. Objective: Score points by being "it"; kill the "it" player to become "it"
  4. Map ends: When one player reaches the score limit, or time limit is reached
  5. Respawning: No wait / Away from other players
  6.  
  7. Level requirements
  8. ------------------
  9. Spawnpoints:
  10. classname mp_dm_spawn
  11. All players spawn from these. The spawnpoint chosen is dependent on the current locations of enemies at the time of spawn.
  12. Players generally spawn away from enemies.
  13.  
  14. Spectator Spawnpoints:
  15. classname mp_global_intermission
  16. Spectators spawn from these and intermission is viewed from these positions.
  17. Atleast one is required, any more and they are randomly chosen between.
  18.  
  19. Level script requirements
  20. -------------------------
  21. Team Definitions:
  22. game["allies"] = "marines";
  23. game["axis"] = "opfor";
  24. Because Deathmatch doesn't have teams with regard to gameplay or scoring, this effectively sets the available weapons.
  25.  
  26. If using minefields or exploders:
  27. maps\mp\_load::main();
  28.  
  29. Optional level script settings
  30. ------------------------------
  31. Soldier Type and Variation:
  32. game["american_soldiertype"] = "normandy";
  33. game["german_soldiertype"] = "normandy";
  34. This sets what character models are used for each nationality on a particular map.
  35.  
  36. Valid settings:
  37. american_soldiertype normandy
  38. british_soldiertype normandy, africa
  39. russian_soldiertype coats, padded
  40. german_soldiertype normandy, africa, winterlight, winterdark
  41. */
  42.  
  43. /* TODO:
  44. - change objective text displayed in score screen (spawnPlayer())
  45. - status icon in scoreboard for "it" player
  46. - resolve issue with gametypeobjectname thing - no MGs or anything will be available!
  47. */
  48.  
  49. main()
  50. {
  51. maps\mp\gametypes\_globallogic::init();
  52. maps\mp\gametypes\_callbacksetup::SetupCallbacks();
  53. maps\mp\gametypes\_globallogic::SetupCallbacks();
  54.  
  55. maps\mp\gametypes\_globallogic::registerTimeLimitDvar( "tag", 30, 0, 1440 );
  56. maps\mp\gametypes\_globallogic::registerScoreLimitDvar( "tag", 100, 0, 500 );
  57. maps\mp\gametypes\_globallogic::registerRoundLimitDvar( "tag", 1, 0, 10 );
  58. maps\mp\gametypes\_globallogic::registerNumLivesDvar( "tag", 0, 0, 10 );
  59.  
  60. level.onStartGameType = ::onStartGameType;
  61. level.onSpawnPlayer = ::onSpawnPlayer;
  62. level.onPlayerKilled = ::onPlayerKilled;
  63. level.onPlayerDisconnect = ::onPlayerDisconnect;
  64.  
  65. level.onPlayerScore = ::onPlayerScore;
  66. }
  67.  
  68.  
  69. onStartGameType()
  70. {
  71. game["headicon_tagged"] = "headicon_tag_it"; // (temp)
  72. precacheHeadIcon(game["headicon_tagged"]);
  73.  
  74. if ( level.teamBased )
  75. {
  76. maps\mp\gametypes\_globallogic::setObjectiveText( "allies", &"OBJECTIVES_TAG_TEAM" );
  77. maps\mp\gametypes\_globallogic::setObjectiveText( "axis", &"OBJECTIVES_TAG_TEAM" );
  78.  
  79. if ( level.splitscreen )
  80. {
  81. maps\mp\gametypes\_globallogic::setObjectiveScoreText( "allies", &"OBJECTIVES_TAG_TEAM" );
  82. maps\mp\gametypes\_globallogic::setObjectiveScoreText( "axis", &"OBJECTIVES_TAG_TEAM" );
  83. }
  84. else
  85. {
  86. maps\mp\gametypes\_globallogic::setObjectiveScoreText( "allies", &"OBJECTIVES_TAG_SCORE_TEAM" );
  87. maps\mp\gametypes\_globallogic::setObjectiveScoreText( "axis", &"OBJECTIVES_TAG_SCORE_TEAM" );
  88. }
  89. maps\mp\gametypes\_globallogic::setObjectiveHintText( "allies", &"OBJECTIVES_TAG_HINT_TEAM" );
  90. maps\mp\gametypes\_globallogic::setObjectiveHintText( "axis", &"OBJECTIVES_TAG_HINT_TEAM" );
  91. }
  92. else
  93. {
  94. maps\mp\gametypes\_globallogic::setObjectiveText( "allies", &"OBJECTIVES_TAG" );
  95. maps\mp\gametypes\_globallogic::setObjectiveText( "axis", &"OBJECTIVES_TAG" );
  96.  
  97. if ( level.splitscreen )
  98. {
  99. maps\mp\gametypes\_globallogic::setObjectiveScoreText( "allies", &"OBJECTIVES_TAG" );
  100. maps\mp\gametypes\_globallogic::setObjectiveScoreText( "axis", &"OBJECTIVES_TAG" );
  101. }
  102. else
  103. {
  104. maps\mp\gametypes\_globallogic::setObjectiveScoreText( "allies", &"OBJECTIVES_TAG_SCORE" );
  105. maps\mp\gametypes\_globallogic::setObjectiveScoreText( "axis", &"OBJECTIVES_TAG_SCORE" );
  106. }
  107. maps\mp\gametypes\_globallogic::setObjectiveHintText( "allies", &"OBJECTIVES_TAG_HINT" );
  108. maps\mp\gametypes\_globallogic::setObjectiveHintText( "axis", &"OBJECTIVES_TAG_HINT" );
  109. }
  110.  
  111. //level.hudtaggedicon = "compass_flag_german";
  112. //precacheShader(level.hudtaggedicon);
  113. level.hudtaggedoverlay = "overlay_tag_it";
  114. precacheShader(level.hudtaggedoverlay);
  115.  
  116. setClientNameMode("auto_change");
  117.  
  118. level.spawnpoints = getentarray("mp_dm_spawn", "classname");
  119. if(!level.spawnpoints.size)
  120. {
  121. maps\mp\gametypes\_callbacksetup::AbortLevel();
  122. return;
  123. }
  124.  
  125. for(i = 0; i < level.spawnpoints.size; i++)
  126. level.spawnpoints[i] placeSpawnpoint();
  127.  
  128. allowed[0] = "tag";
  129. maps\mp\gametypes\_gameobjects::main(allowed);
  130.  
  131. level.QuickMessageToAll = true;
  132.  
  133. level.someoneTagged = false;
  134. level.taggedOverlayAlpha = .35;
  135. level.taggedOverlayAlphaFlash = .85;
  136.  
  137. thread updateGametypeDvars();
  138. }
  139.  
  140.  
  141. onSpawnPlayer()
  142. {
  143. spawnpointname = "mp_dm_spawn";
  144. spawnpoints = getentarray(spawnpointname, "classname");
  145. spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_DM(spawnpoints);
  146.  
  147. if(isdefined(spawnpoint))
  148. self spawn(spawnpoint.origin, spawnpoint.angles);
  149. else
  150. maps\mp\_utility::error("NO " + spawnpointname + " SPAWNPOINTS IN MAP");
  151. }
  152.  
  153.  
  154. onPlayerDisconnect()
  155. {
  156. if (self isTagged())
  157. setTaggedPlayer(undefined);
  158. }
  159.  
  160.  
  161. onPlayerScore( event, player, victim )
  162. {
  163. if ( event == "kill" && player isTagged() )
  164. player.pers["score"] += 1;
  165. }
  166.  
  167.  
  168. onPlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration)
  169. {
  170. if( isPlayer( attacker ) )
  171. {
  172. if( attacker == self ) // killed himself
  173. setTaggedPlayer(undefined); // suicide: no longer tagged
  174. else if ( self isTagged() || !level.someoneTagged )
  175. setTaggedPlayer( attacker ); // tag transferred
  176. }
  177. else // If you weren't killed by a player, you were in the wrong place at the wrong time
  178. {
  179. if ( self isTagged() )
  180. setTaggedPlayer(undefined); // no longer tagged
  181. }
  182. }
  183.  
  184.  
  185. updateGametypeDvars()
  186. {
  187. }
  188.  
  189.  
  190. isTagged()
  191. {
  192. return ( level.someoneTagged && isdefined(self) && isdefined(self.tagged) && self.tagged );
  193. }
  194.  
  195.  
  196. setTaggedPlayer(player)
  197. {
  198. if (level.someoneTagged)
  199. {
  200. if (isdefined(player) && player == level.taggedPlayer)
  201. return;
  202.  
  203. level.taggedPlayer.tagged = false;
  204. level.taggedPlayer.headicon = "";
  205.  
  206. if ( isDefined( level.taggedHudOverlay ) )
  207. level.taggedHUDOverlay destroy();
  208.  
  209. level.someoneTagged = false;
  210. level.taggedPlayer = undefined;
  211. }
  212.  
  213. level notify("tagged_player_changed");
  214.  
  215. if (isdefined(player) && isPlayer(player))
  216. {
  217. level.someoneTagged = true;
  218. level.taggedPlayer = player;
  219. level.taggedPlayer.tagged = true;
  220. level.taggedPlayer.headicon = game["headicon_tagged"];
  221.  
  222. // add HUD icon
  223. /*level.taggedHUDIcon = newClientHudElem(level.taggedPlayer);
  224. level.taggedHUDIcon.x = 30;
  225. level.taggedHUDIcon.y = 95;
  226. level.taggedHUDIcon.alignX = "center";
  227. level.taggedHUDIcon.alignY = "middle";
  228. level.taggedHUDIcon.horzAlign = "left";
  229. level.taggedHUDIcon.vertAlign = "top";
  230. iconSize = 40;
  231. level.taggedHUDIcon setShader(level.hudtaggedicon, iconSize, iconSize);*/
  232.  
  233. // overlay
  234. overlay = newClientHudElem(level.taggedPlayer);
  235. overlay.archived = false;
  236. overlay.x = 0;
  237. overlay.y = 0;
  238. /*if (level.splitscreen) {
  239. scrnsize = 427;//getdvarint("scr_screensize");
  240. overlay setshader (level.hudtaggedoverlay, scrnsize, int((scrnsize*3)/4));
  241. }
  242. else*/
  243. overlay setshader (level.hudtaggedoverlay, 640, 480);
  244. overlay.alignX = "left";
  245. overlay.alignY = "top";
  246. overlay.horzAlign = "fullscreen";
  247. overlay.vertAlign = "fullscreen";
  248. //overlay.sort = 20;
  249.  
  250. overlay thread flashOverTime();
  251.  
  252. level.taggedHUDOverlay = overlay;
  253.  
  254. //thread awardTagPoints();
  255. }
  256. }
  257.  
  258.  
  259. flashOverTime()
  260. {
  261. level endon("tagged_player_changed");
  262.  
  263. self.alpha = level.taggedOverlayAlphaFlash;
  264. self fadeOverTime(1.5);
  265. self.alpha = level.taggedOverlayAlpha;
  266. wait(1.5);
  267.  
  268. while(1)
  269. {
  270. wait(5.0);
  271.  
  272. self fadeOverTime(1);
  273. self.alpha = level.taggedOverlayAlphaFlash;
  274. wait(1);
  275.  
  276. self fadeOverTime(1);
  277. self.alpha = level.taggedOverlayAlpha;
  278. wait(1);
  279. }
  280. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement