Advertisement
Guest User

Untitled

a guest
May 6th, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.37 KB | None | 0 0
  1. #include maps\_anim;
  2. #include maps\_utility;
  3. #include common_scripts\utility;
  4. #include maps\_zombiemode_utility;
  5. #include maps\_zombiemode_net;
  6.  
  7.  
  8. cherry_init()
  9. {
  10.  
  11. PrecacheItem( "zombie_perk_bottle_cherry" );
  12. PrecacheShader( "cherry_vending_zombies" );
  13.  
  14. cherry_trigger = GetEnt( "zombie_vending_cherry", "targetname" );
  15.  
  16. cherry_trigger thread cherry_trigger_think();
  17.  
  18. level thread maps\_zombiemode_perks::machine_watcher_factory("cherry_on");
  19.  
  20. PrecacheModel("bo2_p6_zm_vending_electric_cherry_off");
  21. PrecacheModel("bo2_p6_zm_vending_electric_cherry_on");
  22.  
  23.  
  24. thread wait_a_little();
  25. thread turn_cherry_on();
  26.  
  27. }
  28.  
  29.  
  30. wait_a_little()
  31. {
  32.  
  33. flag_wait( "all_players_connected" );
  34.  
  35. level._effect["electric_cherry"] = LoadFx("electric_cherry");
  36.  
  37. players = get_players();
  38. for(i=0;i<players.size;i++)
  39. {
  40. players[i] thread cherry_think();
  41. }
  42.  
  43. }
  44.  
  45. cherry_think()
  46. {
  47.  
  48. flag_wait( "all_players_connected");
  49.  
  50.  
  51. while(1)
  52. {
  53.  
  54. self.current_cherry_weapon = self GetCurrentWeapon();
  55.  
  56. self waittill("reload_start");
  57.  
  58. if(self hasPerk("specialty_boost"))
  59. {
  60.  
  61. self.tag_origin_cherry = spawn("script_model",self.origin + (0,0,48));
  62. self.tag_origin_cherry setmodel("tag_origin");
  63. self.tag_origin_cherry linkTo(self);
  64.  
  65.  
  66. //self.tag_origin delete();
  67.  
  68.  
  69. self.currentweapon = self GetCurrentWeapon();
  70. self.clipSize = WeaponClipSize(self.currentweapon);
  71. self.clipRemaining = self GetCurrentWeaponClipAmmo();
  72.  
  73. zombies = getaiarray( "axis", "all" );
  74.  
  75. self.cherry_ratio = 1 - (self.clipRemaining/self.clipSize);
  76.  
  77. self.cherry_radius = (200 * self.cherry_ratio) + 64;
  78.  
  79. for(k=0;k<zombies.size;k++)
  80. {
  81. if(Distance2D( self.origin, zombies[k].origin ) < self.cherry_radius)
  82. {
  83.  
  84. if(zombies[k].health < 1500)
  85. {
  86. zombies[k] DoDamage( zombies[k].health + 666 , zombies[k].origin);
  87. zombies[k].deathanim = random( level._zombie_tesla_death[zombies[k].animname] );
  88. zombies[k] maps\_zombiemode_tesla::tesla_play_death_fx(1);
  89. }
  90. else
  91. {
  92. zombies[k] DoDamage( 1500 , zombies[k].origin);
  93. zombies[k] enable_pain();
  94. zombies[k] cherry_play_death_fx();
  95. }
  96.  
  97. }
  98. wait .01;
  99. }
  100.  
  101. network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect["tesla_shock"],self.tag_origin_cherry,"tag_origin");
  102.  
  103. self playsound( "imp_tesla" );
  104.  
  105. for(k=0;k<zombies.size;k++)
  106. {
  107. zombies[k] disable_pain();
  108. }
  109.  
  110. wait .01;
  111. }
  112. wait 1;
  113.  
  114. self.tag_origin_cherry delete();
  115.  
  116. }
  117. }
  118.  
  119. turn_cherry_on()
  120. {
  121. machine = getent("vending_cherry", "targetname");
  122.  
  123. machine setmodel("bo2_p6_zm_vending_electric_cherry_off");
  124.  
  125. level waittill("electricity_on");
  126.  
  127.  
  128. machine setmodel("bo2_p6_zm_vending_electric_cherry_on");
  129. machine vibrate((0,-100,0), 0.3, 0.4, 3);
  130. machine playsound("perks_power_on");
  131. machine thread maps\_zombiemode_perks::perk_fx("doubletap_light");
  132.  
  133.  
  134. level notify( "specialty_boost_power_on" );
  135. }
  136.  
  137.  
  138. cherry_trigger_think()
  139. {
  140.  
  141. perk = "specialty_boost";
  142.  
  143. self SetHintString( &"ZOMBIE_FLAMES_UNAVAILABLE" );
  144. self SetCursorHint( "HINT_NOICON" );
  145. self UseTriggerRequireLookAt();
  146.  
  147. notify_name = perk + "_power_on";
  148.  
  149. level waittill("electricity_on");
  150.  
  151. perk_hum = spawn("script_origin", self.origin);
  152. perk_hum playloopsound("perks_machine_loop");
  153.  
  154. self thread check_player_has_perk(perk);
  155.  
  156. self SetHintString("Press & hold &&1 to buy Electric Cherry [Cost: 2000]");
  157.  
  158. for( ;; )
  159. {
  160. self waittill( "trigger", player );
  161. index = maps\_zombiemode_weapons::get_player_index(player);
  162.  
  163. cost = 2000;
  164.  
  165. if (player maps\_laststand::player_is_in_laststand() )
  166. {
  167. continue;
  168. }
  169.  
  170. if(player in_revive_trigger())
  171. {
  172. continue;
  173. }
  174.  
  175. if( player isThrowingGrenade() )
  176. {
  177. wait( 0.1 );
  178. continue;
  179. }
  180.  
  181. if( player isSwitchingWeapons() )
  182. {
  183. wait(0.1);
  184. continue;
  185. }
  186.  
  187. if ( player HasPerk( perk ) )
  188. {
  189. self playsound("deny");
  190. player thread maps\_zombiemode_perks::play_no_money_perk_dialog();
  191. continue;
  192. }
  193.  
  194. if ( player.score < cost )
  195. {
  196. self playsound("deny");
  197. player thread maps\_zombiemode_perks::play_no_money_perk_dialog();
  198. continue;
  199. }
  200.  
  201. sound = "bottle_dispense3d";
  202. player achievement_notify( "perk_used" );
  203. playsoundatposition(sound, self.origin);
  204. player maps\_zombiemode_score::minus_to_player_score( cost );
  205.  
  206.  
  207. sound = "mx_cherry_sting";
  208.  
  209. self thread maps\_zombiemode_perks::play_vendor_stings(sound);
  210.  
  211. gun = player perk_give_bottle_begin();
  212. player.is_drinking = 1;
  213. player waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
  214.  
  215. // restore player controls and movement
  216. player perk_give_bottle_end( gun, "specialty_boost" );
  217. player.is_drinking = undefined;
  218. // TODO: race condition?
  219. if ( player maps\_laststand::player_is_in_laststand() )
  220. {
  221. continue;
  222. }
  223.  
  224. player SetPerk("specialty_boost");
  225.  
  226. player thread maps\_zombiemode_perks::perk_vo(perk);
  227. player setblur( 4, 0.1 );
  228. wait(0.1);
  229. player setblur(0, 0.1);
  230.  
  231.  
  232. player perk_hud_create( perk );
  233.  
  234. //stat tracking
  235. player.stats["perks"]++;
  236.  
  237. //player iprintln( "Bought Perk: " + perk );
  238. bbPrint( "zombie_uses: playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type perk",
  239. player.playername, player.score, level.round_number, cost, perk, self.origin );
  240.  
  241. player thread perk_think( perk );
  242.  
  243. }
  244. }
  245.  
  246. check_player_has_perk(perk)
  247. {
  248. dist = 128 * 128;
  249. while(true)
  250. {
  251. players = get_players();
  252. for( i = 0; i < players.size; i++ )
  253. {
  254. if(DistanceSquared( players[i].origin, self.origin ) < dist)
  255. {
  256. if(!players[i] hasperk(perk) && !(players[i] in_revive_trigger()))
  257. {
  258. if (IsDefined(level.script) && level.script == "nazi_zombie_theater")
  259. self setinvisibletoplayer(players[i], false);
  260. else
  261. self setvisibletoplayer(players[i]);
  262. }
  263. else
  264. {
  265. self SetInvisibleToPlayer(players[i]);
  266. }
  267. }
  268.  
  269.  
  270. }
  271.  
  272. wait(0.1);
  273.  
  274. }
  275.  
  276. }
  277.  
  278. perk_hud_create( perk )
  279. {
  280. if ( !IsDefined( self.perk_hud ) )
  281. {
  282. self.perk_hud = [];
  283. }
  284.  
  285. shader = "cherry_vending_zombies";
  286.  
  287.  
  288. hud = create_simple_hud( self );
  289. hud.foreground = true;
  290. hud.sort = 1;
  291. hud.hidewheninmenu = false;
  292. hud.alignX = "left";
  293. hud.alignY = "bottom";
  294. hud.horzAlign = "left";
  295. hud.vertAlign = "bottom";
  296. hud.x = self.perk_hud.size * 30;
  297. hud.y = hud.y - 70;
  298. hud.alpha = 1;
  299. hud SetShader( shader, 24, 24 );
  300.  
  301. self.perk_hud[ perk ] = hud;
  302. }
  303.  
  304. perk_think()
  305. {
  306.  
  307. self waittill_any( "fake_death", "death", "player_downed" );
  308.  
  309. self UnsetPerk("specialty_boost");
  310. self.maxhealth = 100;
  311. self maps\_zombiemode_perks::perk_hud_destroy("specialty_boost");
  312.  
  313. }
  314.  
  315. perk_give_bottle_begin()
  316. {
  317. self DisableOffhandWeapons();
  318. self DisableWeaponCycling();
  319.  
  320. self AllowLean( false );
  321. self AllowAds( false );
  322. self AllowSprint( false );
  323. self AllowProne( false );
  324. self AllowMelee( false );
  325.  
  326. wait( 0.05 );
  327.  
  328. if ( self GetStance() == "prone" )
  329. {
  330. self SetStance( "crouch" );
  331. }
  332.  
  333. gun = self GetCurrentWeapon();
  334. weapon = "";
  335.  
  336. self GiveWeapon("zombie_perk_bottle_cherry");
  337. self SwitchToWeapon("zombie_perk_bottle_cherry");
  338.  
  339. return gun;
  340. }
  341.  
  342. perk_give_bottle_end( gun, perk )
  343. {
  344. assert( gun != "zombie_perk_bottle_cherry" );
  345. assert( gun != "syrette" );
  346.  
  347. self EnableOffhandWeapons();
  348. self EnableWeaponCycling();
  349.  
  350. self AllowLean( true );
  351. self AllowAds( true );
  352. self AllowSprint( true );
  353. self AllowProne( true );
  354. self AllowMelee( true );
  355. weapon = "";
  356.  
  357. weapon = "zombie_perk_bottle_cherry";
  358.  
  359.  
  360. // TODO: race condition?
  361. if ( self maps\_laststand::player_is_in_laststand() )
  362. {
  363. self TakeWeapon(weapon);
  364. return;
  365. }
  366.  
  367. if ( gun != "none" && gun != "mine_bouncing_betty" )
  368. {
  369. self SwitchToWeapon( gun );
  370. }
  371. else
  372. {
  373. // try to switch to first primary weapon
  374. primaryWeapons = self GetWeaponsListPrimaries();
  375. if( IsDefined( primaryWeapons ) && primaryWeapons.size > 0 )
  376. {
  377. self SwitchToWeapon( primaryWeapons[0] );
  378. }
  379. }
  380.  
  381. self TakeWeapon(weapon);
  382. }
  383.  
  384. cherry_play_death_fx()
  385. {
  386. tag = "J_SpineUpper";
  387. fx = "tesla_shock";
  388.  
  389. network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect["tesla_shock"], self, tag );
  390. self playsound( "imp_tesla" );
  391.  
  392. if ( !self enemy_is_dog() )
  393. {
  394. if( RandomInt( 100 ) < level.zombie_vars["tesla_head_gib_chance"] )
  395. {
  396. wait( RandomFloat( 0.53, 1.0 ) );
  397. }
  398. else
  399. {
  400. network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect["tesla_shock_eyes"], self, "J_Eyeball_LE" );
  401. }
  402. }
  403. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement