Navigation

    Plutonium
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Donate
    1. Home
    2. S3VDITO

    S3VDITO (@S3VDITO)

    38
    Reputation
    65
    Posts
    206
    Profile views
    10
    Followers
    0
    Following
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    Information about S3VDITO

    Joined
    Last Online
    Website
    github.com/S3VDITO
    Location
    Russian Federation
    Age
    20

    About me

    Discord: S3VDIT0#5918

    Best posts made by S3VDITO

    • [Preview][Animated movement(not fully)] AIBots

      Since I try to make Survival Mod, the first thing I started is the bots, or rather their logic of movement and attack.

      At the moment I only implemented LookLogic (not fully)

      This is just a preview, I think in the future I can give the bots full logic, but my plans are only related to Survival Mod, I do not consider other modes yet (FFA is currently working)

      Send me PM, if you have any ideas for realizing

      Watching logic
      Youtube Video

      Move logic
      Youtube Video

      Animated move
      Youtube Video

      Implemeted:

      1. Look logic (default target player with num 0)
      2. Move logic (default target player with num 0) IF BOT SEE YOU
      3. Animated movement

      [this list will be updated]

      Download only look logic

      Download move logic added

      Download movement animation added

      Source:

      // This is preview version 
      // This is only the beginning of creating bots with the logic of movement and attack, 
      // but first of all I want to create Survival mode, so do not expect bots that can play in TDM, FFA, DZ and other.
      // I guess I would do it after creating this script
      
      // AIBots by S3VDITO
      // Ver 0.0.0.3
      // Realized: 
      // 1 - watching for player function (not works now)
      // 2 - move logic [not fully] [without check collision] (in progress...)
      // 3 - animated movement
      
      gsc.setDvar("testClients_doAttack", 0);
      gsc.setDvar("testClients_doCrouch", 0);
      gsc.setDvar("testClients_doMove", 0);
      gsc.setDvar("testClients_doReload", 0);
      gsc.setDvar("testClients_doWatchKillcam", 0);
      
      gsc.setDvarIfUninitialized("testClients_doSpeed", 4);
      
      global bot_speed = to_float(gsc.getDvar("testClients_doSpeed"));
      
      global bots_list = [];
      
      global player_target_list = [];
      
      level.onNotify("connected", fun(args) {
      	var player = args[0];
      	print(player.getGuid().find("bot"));
      	if(player.getGuid().find("bot") != 0)
      	{
      		print("Player connected");
      		player_target_list.push_back_ref(player);
      	}
      });
      
      level.onNotify("prematch_done", fun(args) {
      	if(gsc.getDvar("g_gametype") == "dm") {
      		for(var entRef = 0; entRef < 18; ++entRef)
      		{
      			var tempEntBot = gsc.getEntByNum(entRef);
      			if(tempEntBot.getGuid().find("bot") == 0)
      			{
      				var animBody = gsc.spawn("script_model", tempEntBot.getOrigin());
      				animBody.setmodel("mp_body_delta_elite_assault_ab");
      				animBody.notsolid();
      				
      				animBody.LinkTo(tempEntBot, "tag_origin", [-4, 0, -1], [-4, 0, -1]);
      				
      				bots_list.push_back_ref(tempEntBot);
      				
      				setInterval(fun[tempEntBot, animBody]() { 
      					botMove(tempEntBot, gsc.getEntByNum(0), animBody); 
      				}, 50);
      				
      				setInterval(fun[animBody]() { 
      					animBody.scriptModelPlayAnim("pb_stumble_pistol_walk_forward");
      				}, 1000);
      			}
      		}
      	}
      });
      
      def botMove(bot, target, animModel)
      {		
      	var bot_weapon_origin = bot.getTagOrigin("tag_weapon_left");
      
      	HideTestClientParts(bot);
      	
      	if(LockSightTest(bot, target) == false)
      	{
      		// animModel.scriptModelPlayAnim("pb_stand_alert_pistol");
      		return;
      	}
      	else
      	{
      		
      	
      		var angle = gsc.vectorToAngles([target.getTagOrigin("j_helmet")[0] - bot_weapon_origin[0], target.getTagOrigin("j_helmet")[1] - bot_weapon_origin[1], target.getTagOrigin("j_helmet")[2] - bot_weapon_origin[2]]);
      		bot.setPlayerAngles(angle);
      		
      		// Spaming field bug =(
      		//animModel.set("angles", bot.getPlayerAngles());
      	}
      	
      	var moveTarget = target.getOrigin();
      	var distance = gsc.distanceSquared(moveTarget, bot.getOrigin());
      	if(gsc.distance(moveTarget, bot.getOrigin()) <= 64)
      	{
      		// bot_speed = 0;
      	}
      	else
      	{
      		bot_speed = to_float(gsc.getDvar("testClients_doSpeed"));
      		var normalize = gsc.vectorNormalize([moveTarget[0] - bot.getOrigin()[0], moveTarget[1] - bot.getOrigin()[1], moveTarget[2] - bot.getOrigin()[2]]);
      		bot.setOrigin([bot.getOrigin()[0] + normalize[0] * bot_speed, bot.getOrigin()[1] + normalize[1] * bot_speed, bot.getOrigin()[2] + normalize[2] * bot_speed]);
      	}
      }
      
      def HideTestClientParts(bot)
      {
      	bot.hidepart("j_ankle_le");
      	bot.hidepart("j_hiptwist_le");
      	bot.hidepart("j_head");
      	bot.hidepart("j_helmet");
      	bot.hidepart("j_eyeball_le");
      	bot.hidepart("j_clavicle_le");
      }
      
      
      // Stolen from _stinger.gsc :)
      def LockSightTest(self, target)
      {
      	var eyePos = self.GetEye();
      	
      	var passed = gsc.SightTracePassed(eyePos, target.getOrigin(), false, target);
      	if ( passed == 1)
      	{
      		return true;
      	}
      
      	var front = target.GetPointInBounds(1, 0, 0);
      	passed = gsc.SightTracePassed( eyePos, front, false, target );
      	if (passed == 1)
      	{
      		return true;
      	}	
      
      	var back = target.GetPointInBounds(-1, 0, 0);
      	passed = gsc.SightTracePassed( eyePos, back, false, target );
      	if (passed == 1)
      	{
      		return true;
      	}
      
      	return false;
      }
      
      
      posted in MW3 Modding Releases & Resources
    • [Release] [GSC] MapEdit

      Simple MapEdit, don't wait for anything more, for now...

      Special thanks to @TTV_WIZEQC for the motivation to do this XD
      This script worked without problems on servers:

      • TF-Infected TP #1
      • TF-Infected TP #2

      I use GSC functions for rotate crates, script not using fields for modification angles

      UPDATED: Rewrited on GSC
      Source (notepad++ bad formating code 😞 )

      // #include maps\mp\gametypes\_teams; // error
      
      init()
      {
          switch(GetDvar("mapname"))
          {
              case "mp_rust":
                  CreateFloor((0, 0, 0), (512, 512, 0), false);
      			
      			createElevator((0, 0, 0), 512, (0, 0, 0));
                  break;
      		case "mp_paris":
      			thread createJumpZone((-1036.623, -739.0071, 145.1301), (0, 0, 1250));
      			thread createJumpZone((-1888.126, 632.3943, 289.125), (-250, 0, 1150));
      			break;
      		case "mp_dome":
      			thread createTeleportFlagPressedButton((0,0,-350), (500,0,900));
      			thread createTeleportFlag((0,125,-350), (500,0,1500));
      			break;
          }
      }
      
      createFloor(corner1, corner2, isInvisible)
      {
          width = corner1[0] - corner2[0];
          if (width < 0) 
          {
              width = width * -1;
          }
              
          length = corner1[1] - corner2[1];
              
          if (length < 0) 
          {
              length = length * -1;
          }
                  
          bwide = floor(width / 50);
          blength = floor(length / 30);
          C = (corner2[0] - corner1[0], corner2[1] - corner1[1], corner2[2] - corner1[2]);
          A = (C[0] / bwide, C[1] / blength, 0);
       
          for (i = 0; i < bwide; ++i)
          {
              for (j = 0; j < blength; ++j)
              {
                  crate = spawn("script_model", (corner1[0] + A[0] * i, corner1[1] + A[1] * j, corner1[2]));
                  crate setModel("com_plasticcase_friendly");
                  crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
                  
                  if(isInvisible)
                  {
                      crate hide();
                  }
              }
          }
      }
      
      createRamp(top, bottom, isInvisible) 
      {
          distance = distance(top, bottom);
          blocks = ceil(distance / 30) + 1;
          
          A = ((top[0] - bottom[0]) / blocks, (top[1] - bottom[1]) / blocks, (top[2] - bottom[2]) / blocks);
          temp = vectorToAngles((top[0] - bottom[0], top[1] - bottom[1], top[2] - bottom[2]));
          BA = (temp[2], temp[1] + 90, temp[0]);
       
          
          for (b = 0; b <= blocks; ++b) {
              crate = spawn("script_model", (bottom[0] + A[0] * b, bottom[1] + A[1] * b, bottom[2] + A[2] * b));
              crate setModel("com_plasticcase_friendly");
              crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
              crate.angles = BA;
              
              if(isInvisible)
              {
                  crate Hide();
              }
          }
      }
      
      createWall(start, end, isInvisible)
      {
          D = Distance2D(start, end);
          H = Distance((0, 0, start[2]), (0, 0, end[2]));
          blocks = Ceil(D / 60);
          height = Ceil(H / 30);
       
          C = (end[0] - start[0], end[1] - start[1], end[2] - start[2]);
          A = (C[0] / blocks, C[1] / blocks, C[2] / height);
          TXA = A[0] / 4;
          TYA = A[1] / 4;
          angle = vectorToAngles(C);
          angle = (0, angle[1], 90);
       
          for (h = 0; h < height; ++h)
          {
              crate = spawn("script_model", (start[0] + TXA, start[1] + TYA, start[2] + 15 + A[2] * h));
              crate setModel("com_plasticcase_friendly");
              crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      		crate.angles = angle;
              
              if(isInvisible)
              {
                  crate Hide();
              }
       
              for (i = 0; i < blocks; ++i)
              {
                  crate = spawn("script_model", (start[0] + A[0] * i, start[1] + A[1] * i, start[2] + 15 + A[2] * h));
                  crate setModel("com_plasticcase_friendly");
      			crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      			crate.angles = angle;
                  
                  if(isInvisible)
                  {
                      crate Hide();
                  }
              }
       
              crate = spawn("script_model", (start[0] + TXA * -1, start[1] + TYA * -1, start[2] + 15 + A[2] * h));
              crate setModel("com_plasticcase_friendly");
              crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      		crate.angles = angle;
              
              if(isInvisible)
              {
                  crate Hide();
              }
          }
      }
      
      createJumpZone(position, impulse)
      {
      	level endon("game_ended");
      	
      	zone = spawn("script_model", position);
      	zone setModel("weapon_c4_bombsquad");
      	zone setCursorHint("HINT_NOICON");
      	zone setHintString("Press and hold ^1[{+activate}] ^7for jump");
      	zone makeUsable();
      	
      	for (;;)
      	{
      		wait (.25);
      		
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, position);
      			if (dist < 75 && player isOnGround() && player useButtonPressed())
      			{
      				player setVelocity(impulse);
      			}
      		}
      	}
      }
      
      createTeleportFlagPressedButton(startOrigin, endOrigin)
      {
      	level endon("game_ended");
      	
      	flagEnter = spawn("script_model", startOrigin);
          flagEnter setModel(getTeamFlagModel("allieschar"));
      	flagEnter setCursorHint("HINT_NOICON");
      	flagEnter setHintString("Press and hold ^1[{+activate}] ^7for teleported");
      	flagEnter makeUsable();
      	
          flagExit = spawn("script_model", endOrigin);
          flagExit setModel(getTeamFlagModel("axischar"));
      	flagExit setCursorHint("HINT_NOICON");
      	flagExit setHintString("Press and hold ^1[{+activate}] ^7for go back");
      	flagExit makeUsable();
      	
      	curObjID = maps\mp\gametypes\_gameobjects::getNextObjID();
      	objective_add(curObjID, "active");
      	objective_position(curObjID, startOrigin);
      	objective_icon(curObjID, "compass_waypoint_bomb");
      
      	for (;;)
      	{
      		wait (.5);
      		foreach (player in level.players)
      		{
      			distEnter = distance(player.origin, startOrigin);
      			if (distEnter < 75 && player isOnGround() && player useButtonPressed())
      			{
      				player setOrigin(flagExit.origin);
      				continue;
      			}
      			
      			distExit = distance(player.origin, endOrigin);
      			if (distExit < 75 && player isOnGround() && player useButtonPressed())
      			{
      				player setOrigin(flagEnter.origin);
      				continue;
      			}
      		}
      	}
      }
      
      createTeleportFlag(startOrigin, endOrigin)
      {
      	level endon("game_ended");
      	
      	flagEnter = spawn("script_model", startOrigin);
          flagEnter setModel(getTeamFlagModel("allieschar"));
      	
          flagExit = spawn("script_model", endOrigin);
          flagExit setModel(getTeamFlagModel("axischar"));
      	
      	curObjID = maps\mp\gametypes\_gameobjects::getNextObjID();
      	objective_add(curObjID, "active");
      	objective_position(curObjID, startOrigin);
      	objective_icon(curObjID, "compass_waypoint_bomb");
      
      	for (;;)
      	{
      		wait (.25);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, startOrigin);
      			if (dist < 75)
      			{
      				player setOrigin(endOrigin);
      			}
      		}
      	}
      }
      
      createElevator(start, Z, angle)
      {
      	floors = [];
      	
      	origin = spawn("script_origin", start + (0, 0, 45));
      	
      	floor = spawn("script_model", start);
          floor setModel("com_plasticcase_enemy");
      	floor solid();
      	floor SetContents(1);
          floor CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      	floor.angles = angle;
      	
      	floor linkTo(origin);
      	
      	for (i = 0; i < 4; i++)
      	{
      		offset = (0, 0, 0);
      		
      		if (i == 0)
      			offset = (28, 30, 0);
      		else if (i == 1)
      			offset = (-28, 30, 0);
      		else if (i == 2)
      			offset = (28, -30, 0);
      		else if (i == 3)
      			offset = (-28, -30, 0);
      		
              floor = spawn("script_model", start + offset);
              floor setModel("com_plasticcase_enemy");
              floor CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      		floor.angles = angle;
      		floors[i] = floor;
      		floor linkTo(origin);
      	}
      	
      	for (;;)
      	{
      		wait (10);
      		origin moveZ(Z, 5);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, origin.origin);
      			if (dist < 125)
      			{
      				player playerLinkTo(origin);
      				player playerLinkedOffsetEnable();
      			}
      		}
      		
      		wait (5);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, origin.origin);
      			if (dist < 125)
      			{
      				player setOrigin(player.origin + (0, 0, 10));
      				player unLink();
      			}
      		}
      		
      		wait (10);
      		origin moveZ(-1 * Z, 5);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, origin.origin);
      			if (dist < 125)
      			{
      				player playerLinkTo(origin);
      				player playerLinkedOffsetEnable();
      			}
      		}
      		
      		wait (5);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, origin.origin);
      			if (dist < 125)
      			{
      				player setOrigin(player.origin + (0, 0, 10));
      				player unLink();
      			}
      		}
      	}
      }
      
      getTeamFlagModel(teamChar)
      {
      	return tableLookup("mp/factionTable.csv", 0, getMapCustom(teamChar), 10);
      }
      

      You can test script now on maps: Resistance(jump zones, tree lunge), Rust (center map), Dome(flags teleporter)

      CreateRamp(topOrigin, bottomOrigin, isInvisible);
      CreateFloor(originA, originB, isInvisible);
      CreateWall(originA, originB, isInvisible);
      
      Origins - is vector type
      [X, Y, Z]
      
      isInvisible - is bool type, false - visible, true - hide
      

      Screenshots from servers
      1.png 2.png 4.png 3.png

      Video
      Youtube Video

      posted in MW3 Modding Releases & Resources
    • [Release] Hight jump zone

      I wrote a small script to diversify the infection server 😃
      At first I wanted to make MapEdit, but so far it’s unrealistic ( i don’t know C++ and how to look for the necessary offsets)

      Before declaring me a thief, I’ll say that this is a piece of my code converted to ChaiScript, I just used fragments of QBots, because I don’t know the full syntax of Chai...

      Script can be work on dedicate server/private match

      Youtube Video

      global dev_mode = false;
      
      global jump_zones = [];
      level.onNotify("prematch_done", fun(arguments) {
      	switch(gsc.getDvar("mapname")) {
      	    case("mp_paris") {
      			createJumpZone([-1036.623, -739.0071, 145.1301], [0, 0, 1250]);
      			createJumpZone([-1888.126, 632.3943, 289.125], [-250, 0, 1150]);
              break;
      		}
      	}
      });
      
      level.onNotify("connected", fun(arguments) {
      	var player = arguments[0];
      	var distance = 0;
      	player.notifyOnPlayerCommand("jump_action", "+activate");
      	
      	player.onNotify("jump_action", fun[player](arguments) {
      		if(dev_mode) { 
      			print(player.getOrigin());
      			print(player.getPlayerAngles());
      		}
      		
      		for(var index = 0; index < size(jump_zones); ++index) {
      			if(gsc.distance(player.getOrigin(), jump_zones[index].getOrigin()) < 175 && player.isOnGround() == 1) {
      				
      				// i trying create jump script, but notify damage can't return MOD_DAMAGE...,
      				// pluto-framework can fix it(pluto-framework can handling damage)
      				
      				player.setVelocity(jump_zones[index].get("impulse"));
      				player.iPrintLnBold("I belive, i can fly");
      				break;
      			}
      		}
      	})
      });
      
      def createJumpZone(position, impulse) {
      	var zone = gsc.spawn("script_model", position);
      	zone.setModel("weapon_c4_bombsquad");
      	zone.setCursorHint("HINT_NOICON");
      	zone.setHintString("Press and hold ^1[{+activate}] ^7for jump");
      	zone.makeUsable();
      	zone.set("impulse", impulse);
      	
      	jump_zones.push_back_ref(zone);
      	
      	return zone;
      }
      

      How to install:
      jump.chai
      send jump.chai in "...\AppData\Local\Plutonium\storage\iw5\scripts"

      How to get pos:

      global dev_mode = false; // change false to true
      

      use mode spectator and pressing F (or other button with bind +activate) for show origin and angles on console

      How to add new maps:
      find it:

      	switch(gsc.getDvar("mapname")) {
      	    case("mp_paris") {
      			createJumpZone([-1036.623, -739.0071, 145.1301], [0, 0, 1250]);
      			createJumpZone([-1888.126, 632.3943, 289.125], [-250, 0, 1150]);
              break;
      		}
      

      and add new case (this is example):

      case("mp_dome") { createJumpZone([0, 0, -350], [0, 0, 99999]); break; }
      
      // origin is vector3 [X, Y, Z] (you can check needs origin with enabled dev mode)
      // jump_impulse is vector3 [X, Y, Z]
      createJumpZone(origin, jump_impulse);
      
      posted in MW3 Modding Releases & Resources
    • [Preview][Animated movement(not fully)] AIBots

      The walking animation has been added, it is primitive, but I can explain it with the limitations of the scripting language(ChaiScript), but I hope that the errors will be removed and the possibilities will be expanded.

      Post updated

      Demo video:
      Youtube Video

      posted in MW3 Modding Releases & Resources
    • [For fun release] Guided AH-6

      If you suddenly began to miss the controlled helicopters from Battlefield, then this script is for you!
      (I just had nothing to do)

      By the way, the "settargetyaw" function is not implemented in the "script engine", its number is 33328 (I can not rotate helicopter without it)

      alt text

      Script link

      Script code

      global airHeight = gsc.getEnt("airstrikeheight", "targetname").getOrigin()[2];
      global helicopterSpeed = 512;
      level.onNotify("prematch_done", fun(arguments) {
      
      });
      
      level.onNotify("connected", fun(arguments) {
      	var player = arguments[0];
      	
      	player.onNotify("spawned_player", fun[player](arguments) {
      		if(player.getGuid().find("bot") != 0)
      		{	
      			// hmm that not working =(
      			//player.setperk("specialty_explosivebullets", true, true);
      			
      			print("Player connected");
      			
      			var heli_angles = [0, 45, 0];
      			var heli = helicopter_setup(player, [player.getOrigin()[0], player.getOrigin()[1], airHeight], heli_angles);
      			helicopter_controls(player, heli, heli_angles);
      		}
      	});
      });
      
      def helicopter_controls(player, heli, heli_angles)
      {
      	player.PlayerLinkTo(heli, "tag_player_attach_left", .5f, 10, 170, 30, 150, false);
      
      	var moving_forward = false;
      	var moving_backward = false;
      	var moving_left = false;
      	var moving_right = false;
      	
      	var helicopter_height = airHeight;
      
      	player.notifyOnPlayerCommand("pressed_moveforward", "+forward");
      	player.notifyOnPlayerCommand("unpressed_moveforward", "-forward");
      	
      	player.notifyOnPlayerCommand("pressed_moveback", "+back");
      	player.notifyOnPlayerCommand("unpressed_moveback", "-back");
      	
      	player.notifyOnPlayerCommand("pressed_moveleft", "+moveleft");
      	player.notifyOnPlayerCommand("unpressed_moveleft", "-moveleft");
      	
      	player.notifyOnPlayerCommand("pressed_moveright", "+moveright");
      	player.notifyOnPlayerCommand("unpressed_moveright", "-moveright");
      	
      	player.onNotify("pressed_moveforward", fun[moving_forward](arguments) {
      		moving_forward = true;
      	});
      	player.onNotify("unpressed_moveforward", fun[moving_forward](arguments) {
      		moving_forward = false;
      	});
      	
      	player.onNotify("pressed_moveback", fun[moving_backward](arguments) {
      		moving_backward = true;
      	});
      	player.onNotify("unpressed_moveback", fun[moving_backward](arguments) {
      		moving_backward = false;
      	});
      	
      	player.onNotify("pressed_moveleft", fun[moving_left](arguments) {
      		moving_left = true;
      	});
      	player.onNotify("unpressed_moveleft", fun[moving_left](arguments) {
      		moving_left = false;
      	});
      	
      	player.onNotify("pressed_moveright", fun[moving_right](arguments) {
      		moving_right = true;
      	});
      	player.onNotify("unpressed_moveright", fun[moving_right](arguments) {
      		moving_right = false;
      	});
      	
      	setInterval(fun[player, heli, moving_forward, moving_backward, moving_left, moving_right, heli_angles, helicopter_height]() {
      	
      		var origin = heli.getOrigin();
      		var forward = gsc.AnglesToForward(heli_angles);
      		
      		if(player.fragbuttonpressed() == 1)
      		{
      			helicopter_height = helicopter_height - 64;
      			heli.setvehgoalpos([origin[0], origin[1], helicopter_height], true);
      		}
      		if(player.secondaryoffhandbuttonpressed() == 1)
      		{
      			helicopter_height = helicopter_height + 64;
      			heli.setvehgoalpos([origin[0], origin[1], helicopter_height], true);
      		}
      		
      		if(moving_left == true)
      		{
      			heli_angles = [0, heli_angles[1] + 5, 0];
      			// NOT WORKING
      			heli.settargetyaw(heli_angles[1]);
      		}
      		if(moving_right == true)
      		{
      			heli_angles = [0, heli_angles[1] - 5, 0];
      			// NOT WORKING
      			heli.settargetyaw(heli_angles[1]);
      		}
      		if(moving_forward == true)
      		{
      			heli.setvehgoalpos([origin[0] + forward[0] * helicopterSpeed, origin[1] + forward[1] * helicopterSpeed, helicopter_height], true);
      		}
      		if(moving_backward == true)
      		{
      			heli.setvehgoalpos([origin[0] + forward[0] * -helicopterSpeed, origin[1] + forward[1] * -helicopterSpeed, helicopter_height], true);
      		}
      	}, 100);
      }
      
      def helicopter_setup(owner, pathStart, forward)
      {
      	var heli = gsc.spawnHelicopter(owner, pathStart, forward, "attack_littlebird_mp" , "vehicle_little_bird_armed");
      	
      	heli.setMaxPitchRoll(45, 45);	
      	heli.setspeed(100, 100, 40);
      	heli.setYawSpeed(120, 60);
      	
      	return heli;
      }
      
      posted in MW3 Modding Releases & Resources
    • [Preview][Animated movement(not fully)] AIBots

      @Mr-Android
      I would like to implement this, but so far I am limited due to the lack of knowledge of many ChaiScript functions, and there is also a lack of GSC function waittill, thread (this is the most necessary), endon.
      MagicBullet => crush server
      BulletTrace(not working) and other functions that can return arrays do not return them
      Set/Get field either have no result or crush the server

      While I made the primitive logic of the movement of bots, I had to hide the model of the bot itself and move the model (otherwise I could not give animations of movement) (attached video, updated post)

      Youtube Video

      posted in MW3 Modding Releases & Resources
    • [Release] Flags Teleporter

      This answer to the question

      It probably makes sense to add hidden teleporters(Scavenger packs), but so be it.
      (video with demo below)

      Instructions for installing the script and setups here (instruction is similar)

      Download

      Source:

      global flagCount = 0;
      
      level.onNotify("prematch_done", fun(args){
      
      	switch(gsc.getDvar("mapname")) 
      	{
      	    case("mp_dome") 
      		{
      			createTeleportFlag([0,0,-350], [500,0,900]);
      			createTeleportFlag([0,125,-350], [500,0,1500]);
      			break;
      		}
      	}
      });
      
      def createTeleportFlag(startOrigin, endOrigin)
      {
      	var flagEnter = gsc.spawn("script_model", startOrigin);
          flagEnter.setModel(getTeamFlagModel("allieschar"));
      	
          var flagExit = gsc.spawn("script_model", endOrigin);
          flagExit.SetModel(getTeamFlagModel("axischar"));
      	
      	// omg...
      	// my teacher would kill me for this, but he doesn’t see it so everything is fine ;)
      	setInterval(fun[startOrigin, endOrigin]() { 
      		for(var entRef = 0; entRef < 18; ++entRef)
      		{
      			try 
      			{
      				var player = gsc.getEntByNum(entRef);
      				
      				if(gsc.isPlayer(player) == 1)
      				{
      					if(gsc.distance(player.getOrigin(), startOrigin) < 75)
      					{
      						player.setOrigin(endOrigin);
      					}
      				}
      			} 
      			catch (e) 
      			{
      
      			}
      
      		}
      	}, 100);
      	
      	var curObjID = 31 - ++flagCount;
      	gsc.objective_add(curObjID, "active");
      	gsc.objective_position(curObjID, startOrigin);
      	gsc.objective_icon(curObjID, "compass_waypoint_bomb");
      }
      
      // _teams.gsc
      def getTeamFlagModel(teamChar)
      {
      	return gsc.tableLookup("mp/factionTable.csv", 0, gsc.getMapCustom(teamChar), 10);
      }
      

      Youtube Video

      posted in MW3 Modding Releases & Resources
    • [Release] [GSC] MapEdit

      Added Elevator and Flag teleporter (telopter to/from by button)

      // #include maps\mp\gametypes\_teams; // error
      
      init()
      {
          switch(GetDvar("mapname"))
          {
              case "mp_rust":
                  CreateFloor((0, 0, 0), (512, 512, 0), false);
      			
      			createElevator((0, 0, 0), 512, (0, 0, 0));
                  break;
      		case "mp_paris":
      			thread createJumpZone((-1036.623, -739.0071, 145.1301), (0, 0, 1250));
      			thread createJumpZone((-1888.126, 632.3943, 289.125), (-250, 0, 1150));
      			break;
      		case "mp_dome":
      			thread createTeleportFlagPressedButton((0,0,-350), (500,0,900));
      			thread createTeleportFlag((0,125,-350), (500,0,1500));
      			break;
          }
      }
      
      createFloor(corner1, corner2, isInvisible)
      {
          width = corner1[0] - corner2[0];
          if (width < 0) 
          {
              width = width * -1;
          }
              
          length = corner1[1] - corner2[1];
              
          if (length < 0) 
          {
              length = length * -1;
          }
                  
          bwide = floor(width / 50);
          blength = floor(length / 30);
          C = (corner2[0] - corner1[0], corner2[1] - corner1[1], corner2[2] - corner1[2]);
          A = (C[0] / bwide, C[1] / blength, 0);
       
          for (i = 0; i < bwide; ++i)
          {
              for (j = 0; j < blength; ++j)
              {
                  crate = spawn("script_model", (corner1[0] + A[0] * i, corner1[1] + A[1] * j, corner1[2]));
                  crate setModel("com_plasticcase_friendly");
                  crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
                  
                  if(isInvisible)
                  {
                      crate hide();
                  }
              }
          }
      }
      
      createRamp(top, bottom, isInvisible) 
      {
          distance = distance(top, bottom);
          blocks = ceil(distance / 30) + 1;
          
          A = ((top[0] - bottom[0]) / blocks, (top[1] - bottom[1]) / blocks, (top[2] - bottom[2]) / blocks);
          temp = vectorToAngles((top[0] - bottom[0], top[1] - bottom[1], top[2] - bottom[2]));
          BA = (temp[2], temp[1] + 90, temp[0]);
       
          
          for (b = 0; b <= blocks; ++b) {
              crate = spawn("script_model", (bottom[0] + A[0] * b, bottom[1] + A[1] * b, bottom[2] + A[2] * b));
              crate setModel("com_plasticcase_friendly");
              crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
              crate.angles = BA;
              
              if(isInvisible)
              {
                  crate Hide();
              }
          }
      }
      
      createWall(start, end, isInvisible)
      {
          D = Distance2D(start, end);
          H = Distance((0, 0, start[2]), (0, 0, end[2]));
          blocks = Ceil(D / 60);
          height = Ceil(H / 30);
       
          C = (end[0] - start[0], end[1] - start[1], end[2] - start[2]);
          A = (C[0] / blocks, C[1] / blocks, C[2] / height);
          TXA = A[0] / 4;
          TYA = A[1] / 4;
          angle = vectorToAngles(C);
          angle = (0, angle[1], 90);
       
          for (h = 0; h < height; ++h)
          {
              crate = spawn("script_model", (start[0] + TXA, start[1] + TYA, start[2] + 15 + A[2] * h));
              crate setModel("com_plasticcase_friendly");
              crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      		crate.angles = angle;
              
              if(isInvisible)
              {
                  crate Hide();
              }
       
              for (i = 0; i < blocks; ++i)
              {
                  crate = spawn("script_model", (start[0] + A[0] * i, start[1] + A[1] * i, start[2] + 15 + A[2] * h));
                  crate setModel("com_plasticcase_friendly");
      			crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      			crate.angles = angle;
                  
                  if(isInvisible)
                  {
                      crate Hide();
                  }
              }
       
              crate = spawn("script_model", (start[0] + TXA * -1, start[1] + TYA * -1, start[2] + 15 + A[2] * h));
              crate setModel("com_plasticcase_friendly");
              crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      		crate.angles = angle;
              
              if(isInvisible)
              {
                  crate Hide();
              }
          }
      }
      
      createJumpZone(position, impulse)
      {
      	level endon("game_ended");
      	
      	zone = spawn("script_model", position);
      	zone setModel("weapon_c4_bombsquad");
      	zone setCursorHint("HINT_NOICON");
      	zone setHintString("Press and hold ^1[{+activate}] ^7for jump");
      	zone makeUsable();
      	
      	for (;;)
      	{
      		wait (.25);
      		
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, position);
      			if (dist < 75 && player isOnGround() && player useButtonPressed())
      			{
      				player setVelocity(impulse);
      			}
      		}
      	}
      }
      
      createTeleportFlagPressedButton(startOrigin, endOrigin)
      {
      	level endon("game_ended");
      	
      	flagEnter = spawn("script_model", startOrigin);
          flagEnter setModel(getTeamFlagModel("allieschar"));
      	flagEnter setCursorHint("HINT_NOICON");
      	flagEnter setHintString("Press and hold ^1[{+activate}] ^7for teleported");
      	flagEnter makeUsable();
      	
          flagExit = spawn("script_model", endOrigin);
          flagExit setModel(getTeamFlagModel("axischar"));
      	flagExit setCursorHint("HINT_NOICON");
      	flagExit setHintString("Press and hold ^1[{+activate}] ^7for go back");
      	flagExit makeUsable();
      	
      	curObjID = maps\mp\gametypes\_gameobjects::getNextObjID();
      	objective_add(curObjID, "active");
      	objective_position(curObjID, startOrigin);
      	objective_icon(curObjID, "compass_waypoint_bomb");
      
      	for (;;)
      	{
      		wait (.5);
      		foreach (player in level.players)
      		{
      			distEnter = distance(player.origin, startOrigin);
      			if (distEnter < 75 && player isOnGround() && player useButtonPressed())
      			{
      				player setOrigin(flagExit.origin);
      				continue;
      			}
      			
      			distExit = distance(player.origin, endOrigin);
      			if (distExit < 75 && player isOnGround() && player useButtonPressed())
      			{
      				player setOrigin(flagEnter.origin);
      				continue;
      			}
      		}
      	}
      }
      
      createTeleportFlag(startOrigin, endOrigin)
      {
      	level endon("game_ended");
      	
      	flagEnter = spawn("script_model", startOrigin);
          flagEnter setModel(getTeamFlagModel("allieschar"));
      	
          flagExit = spawn("script_model", endOrigin);
          flagExit setModel(getTeamFlagModel("axischar"));
      	
      	curObjID = maps\mp\gametypes\_gameobjects::getNextObjID();
      	objective_add(curObjID, "active");
      	objective_position(curObjID, startOrigin);
      	objective_icon(curObjID, "compass_waypoint_bomb");
      
      	for (;;)
      	{
      		wait (.25);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, startOrigin);
      			if (dist < 75)
      			{
      				player setOrigin(endOrigin);
      			}
      		}
      	}
      }
      
      createElevator(start, Z, angle)
      {
      	floors = [];
      	
      	origin = spawn("script_origin", start + (0, 0, 45));
      	
      	floor = spawn("script_model", start);
          floor setModel("com_plasticcase_enemy");
      	floor solid();
      	floor SetContents(1);
          floor CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      	floor.angles = angle;
      	
      	floor linkTo(origin);
      	
      	for (i = 0; i < 4; i++)
      	{
      		offset = (0, 0, 0);
      		
      		if (i == 0)
      			offset = (28, 30, 0);
      		else if (i == 1)
      			offset = (-28, 30, 0);
      		else if (i == 2)
      			offset = (28, -30, 0);
      		else if (i == 3)
      			offset = (-28, -30, 0);
      		
              floor = spawn("script_model", start + offset);
              floor setModel("com_plasticcase_enemy");
              floor CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      	floor.angles = angle;
      	floors[i] = floor;
      	floor linkTo(origin);
      	}
      	
      	for (;;)
      	{
      		wait (10);
      		origin moveZ(Z, 5);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, origin.origin);
      			if (dist < 125)
      			{
      				player playerLinkTo(origin);
      				player playerLinkedOffsetEnable();
      			}
      		}
      		
      		wait (5);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, origin.origin);
      			if (dist < 125)
      			{
      				player setOrigin(player.origin + (0, 0, 10));
      				player unLink();
      			}
      		}
      		
      		wait (10);
      		origin moveZ(-1 * Z, 5);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, origin.origin);
      			if (dist < 125)
      			{
      				player playerLinkTo(origin);
      				player playerLinkedOffsetEnable();
      			}
      		}
      		
      		wait (5);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, origin.origin);
      			if (dist < 125)
      			{
      				player setOrigin(player.origin + (0, 0, 10));
      				player unLink();
      			}
      		}
      	}
      }
      
      getTeamFlagModel(teamChar)
      {
      	return tableLookup("mp/factionTable.csv", 0, getMapCustom(teamChar), 10);
      }
      

      Youtube Video

      posted in MW3 Modding Releases & Resources
    • Access Violation when handling entities

      May be a problem in setOrigin itself, because many gsc functions work inappropriately(giveWeapon, openMenu, BulletTrace and may be others)

      For example, I do not get errors when using iPrint functions(but setOrigin crush dedicate and private match(I don’t know, maybe it’s just me)):

      level.onNotify("connected", fun(args) {
      	var player = args[0];
      	// Press space :)
      	player.onNotify("jumped", fun[player](args){
      		avFunction(player);
      	});
      });
      
      def avFunction(player)
      {
          var obj = gsc.spawn("script_model", player.getOrigin());
      
          var interval = setInterval(fun[player, obj]()
          {
      		player.iPrintLnBold("This is test");
      		player.iPrintLn(obj.getOrigin());
          }, 1000);
      }
      

      alt text

      posted in MW3 Modding Support & Discussion
    • i don't see my server

      @jeriqualy

      You can use command connect localhost:port
      If server with password:
      Open console

      1. send command: password YOUR_PASSWORD
      2. send command: connect localhost:port
      3. Done
        i can say that I have the same problem (but the players see my server, but I do not 😃 )
      posted in MW3 Server Hosting Support

    Latest posts made by S3VDITO

    • [Release] [GSC] MapEdit

      @Kalitos oh, yes, because of the cycles inside the elevator, thread must be created, thanks

      posted in MW3 Modding Releases & Resources
    • [Release] [GSC] MapEdit

      Added Elevator and Flag teleporter (telopter to/from by button)

      // #include maps\mp\gametypes\_teams; // error
      
      init()
      {
          switch(GetDvar("mapname"))
          {
              case "mp_rust":
                  CreateFloor((0, 0, 0), (512, 512, 0), false);
      			
      			createElevator((0, 0, 0), 512, (0, 0, 0));
                  break;
      		case "mp_paris":
      			thread createJumpZone((-1036.623, -739.0071, 145.1301), (0, 0, 1250));
      			thread createJumpZone((-1888.126, 632.3943, 289.125), (-250, 0, 1150));
      			break;
      		case "mp_dome":
      			thread createTeleportFlagPressedButton((0,0,-350), (500,0,900));
      			thread createTeleportFlag((0,125,-350), (500,0,1500));
      			break;
          }
      }
      
      createFloor(corner1, corner2, isInvisible)
      {
          width = corner1[0] - corner2[0];
          if (width < 0) 
          {
              width = width * -1;
          }
              
          length = corner1[1] - corner2[1];
              
          if (length < 0) 
          {
              length = length * -1;
          }
                  
          bwide = floor(width / 50);
          blength = floor(length / 30);
          C = (corner2[0] - corner1[0], corner2[1] - corner1[1], corner2[2] - corner1[2]);
          A = (C[0] / bwide, C[1] / blength, 0);
       
          for (i = 0; i < bwide; ++i)
          {
              for (j = 0; j < blength; ++j)
              {
                  crate = spawn("script_model", (corner1[0] + A[0] * i, corner1[1] + A[1] * j, corner1[2]));
                  crate setModel("com_plasticcase_friendly");
                  crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
                  
                  if(isInvisible)
                  {
                      crate hide();
                  }
              }
          }
      }
      
      createRamp(top, bottom, isInvisible) 
      {
          distance = distance(top, bottom);
          blocks = ceil(distance / 30) + 1;
          
          A = ((top[0] - bottom[0]) / blocks, (top[1] - bottom[1]) / blocks, (top[2] - bottom[2]) / blocks);
          temp = vectorToAngles((top[0] - bottom[0], top[1] - bottom[1], top[2] - bottom[2]));
          BA = (temp[2], temp[1] + 90, temp[0]);
       
          
          for (b = 0; b <= blocks; ++b) {
              crate = spawn("script_model", (bottom[0] + A[0] * b, bottom[1] + A[1] * b, bottom[2] + A[2] * b));
              crate setModel("com_plasticcase_friendly");
              crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
              crate.angles = BA;
              
              if(isInvisible)
              {
                  crate Hide();
              }
          }
      }
      
      createWall(start, end, isInvisible)
      {
          D = Distance2D(start, end);
          H = Distance((0, 0, start[2]), (0, 0, end[2]));
          blocks = Ceil(D / 60);
          height = Ceil(H / 30);
       
          C = (end[0] - start[0], end[1] - start[1], end[2] - start[2]);
          A = (C[0] / blocks, C[1] / blocks, C[2] / height);
          TXA = A[0] / 4;
          TYA = A[1] / 4;
          angle = vectorToAngles(C);
          angle = (0, angle[1], 90);
       
          for (h = 0; h < height; ++h)
          {
              crate = spawn("script_model", (start[0] + TXA, start[1] + TYA, start[2] + 15 + A[2] * h));
              crate setModel("com_plasticcase_friendly");
              crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      		crate.angles = angle;
              
              if(isInvisible)
              {
                  crate Hide();
              }
       
              for (i = 0; i < blocks; ++i)
              {
                  crate = spawn("script_model", (start[0] + A[0] * i, start[1] + A[1] * i, start[2] + 15 + A[2] * h));
                  crate setModel("com_plasticcase_friendly");
      			crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      			crate.angles = angle;
                  
                  if(isInvisible)
                  {
                      crate Hide();
                  }
              }
       
              crate = spawn("script_model", (start[0] + TXA * -1, start[1] + TYA * -1, start[2] + 15 + A[2] * h));
              crate setModel("com_plasticcase_friendly");
              crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      		crate.angles = angle;
              
              if(isInvisible)
              {
                  crate Hide();
              }
          }
      }
      
      createJumpZone(position, impulse)
      {
      	level endon("game_ended");
      	
      	zone = spawn("script_model", position);
      	zone setModel("weapon_c4_bombsquad");
      	zone setCursorHint("HINT_NOICON");
      	zone setHintString("Press and hold ^1[{+activate}] ^7for jump");
      	zone makeUsable();
      	
      	for (;;)
      	{
      		wait (.25);
      		
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, position);
      			if (dist < 75 && player isOnGround() && player useButtonPressed())
      			{
      				player setVelocity(impulse);
      			}
      		}
      	}
      }
      
      createTeleportFlagPressedButton(startOrigin, endOrigin)
      {
      	level endon("game_ended");
      	
      	flagEnter = spawn("script_model", startOrigin);
          flagEnter setModel(getTeamFlagModel("allieschar"));
      	flagEnter setCursorHint("HINT_NOICON");
      	flagEnter setHintString("Press and hold ^1[{+activate}] ^7for teleported");
      	flagEnter makeUsable();
      	
          flagExit = spawn("script_model", endOrigin);
          flagExit setModel(getTeamFlagModel("axischar"));
      	flagExit setCursorHint("HINT_NOICON");
      	flagExit setHintString("Press and hold ^1[{+activate}] ^7for go back");
      	flagExit makeUsable();
      	
      	curObjID = maps\mp\gametypes\_gameobjects::getNextObjID();
      	objective_add(curObjID, "active");
      	objective_position(curObjID, startOrigin);
      	objective_icon(curObjID, "compass_waypoint_bomb");
      
      	for (;;)
      	{
      		wait (.5);
      		foreach (player in level.players)
      		{
      			distEnter = distance(player.origin, startOrigin);
      			if (distEnter < 75 && player isOnGround() && player useButtonPressed())
      			{
      				player setOrigin(flagExit.origin);
      				continue;
      			}
      			
      			distExit = distance(player.origin, endOrigin);
      			if (distExit < 75 && player isOnGround() && player useButtonPressed())
      			{
      				player setOrigin(flagEnter.origin);
      				continue;
      			}
      		}
      	}
      }
      
      createTeleportFlag(startOrigin, endOrigin)
      {
      	level endon("game_ended");
      	
      	flagEnter = spawn("script_model", startOrigin);
          flagEnter setModel(getTeamFlagModel("allieschar"));
      	
          flagExit = spawn("script_model", endOrigin);
          flagExit setModel(getTeamFlagModel("axischar"));
      	
      	curObjID = maps\mp\gametypes\_gameobjects::getNextObjID();
      	objective_add(curObjID, "active");
      	objective_position(curObjID, startOrigin);
      	objective_icon(curObjID, "compass_waypoint_bomb");
      
      	for (;;)
      	{
      		wait (.25);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, startOrigin);
      			if (dist < 75)
      			{
      				player setOrigin(endOrigin);
      			}
      		}
      	}
      }
      
      createElevator(start, Z, angle)
      {
      	floors = [];
      	
      	origin = spawn("script_origin", start + (0, 0, 45));
      	
      	floor = spawn("script_model", start);
          floor setModel("com_plasticcase_enemy");
      	floor solid();
      	floor SetContents(1);
          floor CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      	floor.angles = angle;
      	
      	floor linkTo(origin);
      	
      	for (i = 0; i < 4; i++)
      	{
      		offset = (0, 0, 0);
      		
      		if (i == 0)
      			offset = (28, 30, 0);
      		else if (i == 1)
      			offset = (-28, 30, 0);
      		else if (i == 2)
      			offset = (28, -30, 0);
      		else if (i == 3)
      			offset = (-28, -30, 0);
      		
              floor = spawn("script_model", start + offset);
              floor setModel("com_plasticcase_enemy");
              floor CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      	floor.angles = angle;
      	floors[i] = floor;
      	floor linkTo(origin);
      	}
      	
      	for (;;)
      	{
      		wait (10);
      		origin moveZ(Z, 5);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, origin.origin);
      			if (dist < 125)
      			{
      				player playerLinkTo(origin);
      				player playerLinkedOffsetEnable();
      			}
      		}
      		
      		wait (5);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, origin.origin);
      			if (dist < 125)
      			{
      				player setOrigin(player.origin + (0, 0, 10));
      				player unLink();
      			}
      		}
      		
      		wait (10);
      		origin moveZ(-1 * Z, 5);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, origin.origin);
      			if (dist < 125)
      			{
      				player playerLinkTo(origin);
      				player playerLinkedOffsetEnable();
      			}
      		}
      		
      		wait (5);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, origin.origin);
      			if (dist < 125)
      			{
      				player setOrigin(player.origin + (0, 0, 10));
      				player unLink();
      			}
      		}
      	}
      }
      
      getTeamFlagModel(teamChar)
      {
      	return tableLookup("mp/factionTable.csv", 0, getMapCustom(teamChar), 10);
      }
      

      Youtube Video

      posted in MW3 Modding Releases & Resources
    • [Release] [GSC] MapEdit

      updated: Rewritten from Chai to GSC

      posted in MW3 Modding Releases & Resources
    • [Release] [GSC] MapEdit

      Simple MapEdit, don't wait for anything more, for now...

      Special thanks to @TTV_WIZEQC for the motivation to do this XD
      This script worked without problems on servers:

      • TF-Infected TP #1
      • TF-Infected TP #2

      I use GSC functions for rotate crates, script not using fields for modification angles

      UPDATED: Rewrited on GSC
      Source (notepad++ bad formating code 😞 )

      // #include maps\mp\gametypes\_teams; // error
      
      init()
      {
          switch(GetDvar("mapname"))
          {
              case "mp_rust":
                  CreateFloor((0, 0, 0), (512, 512, 0), false);
      			
      			createElevator((0, 0, 0), 512, (0, 0, 0));
                  break;
      		case "mp_paris":
      			thread createJumpZone((-1036.623, -739.0071, 145.1301), (0, 0, 1250));
      			thread createJumpZone((-1888.126, 632.3943, 289.125), (-250, 0, 1150));
      			break;
      		case "mp_dome":
      			thread createTeleportFlagPressedButton((0,0,-350), (500,0,900));
      			thread createTeleportFlag((0,125,-350), (500,0,1500));
      			break;
          }
      }
      
      createFloor(corner1, corner2, isInvisible)
      {
          width = corner1[0] - corner2[0];
          if (width < 0) 
          {
              width = width * -1;
          }
              
          length = corner1[1] - corner2[1];
              
          if (length < 0) 
          {
              length = length * -1;
          }
                  
          bwide = floor(width / 50);
          blength = floor(length / 30);
          C = (corner2[0] - corner1[0], corner2[1] - corner1[1], corner2[2] - corner1[2]);
          A = (C[0] / bwide, C[1] / blength, 0);
       
          for (i = 0; i < bwide; ++i)
          {
              for (j = 0; j < blength; ++j)
              {
                  crate = spawn("script_model", (corner1[0] + A[0] * i, corner1[1] + A[1] * j, corner1[2]));
                  crate setModel("com_plasticcase_friendly");
                  crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
                  
                  if(isInvisible)
                  {
                      crate hide();
                  }
              }
          }
      }
      
      createRamp(top, bottom, isInvisible) 
      {
          distance = distance(top, bottom);
          blocks = ceil(distance / 30) + 1;
          
          A = ((top[0] - bottom[0]) / blocks, (top[1] - bottom[1]) / blocks, (top[2] - bottom[2]) / blocks);
          temp = vectorToAngles((top[0] - bottom[0], top[1] - bottom[1], top[2] - bottom[2]));
          BA = (temp[2], temp[1] + 90, temp[0]);
       
          
          for (b = 0; b <= blocks; ++b) {
              crate = spawn("script_model", (bottom[0] + A[0] * b, bottom[1] + A[1] * b, bottom[2] + A[2] * b));
              crate setModel("com_plasticcase_friendly");
              crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
              crate.angles = BA;
              
              if(isInvisible)
              {
                  crate Hide();
              }
          }
      }
      
      createWall(start, end, isInvisible)
      {
          D = Distance2D(start, end);
          H = Distance((0, 0, start[2]), (0, 0, end[2]));
          blocks = Ceil(D / 60);
          height = Ceil(H / 30);
       
          C = (end[0] - start[0], end[1] - start[1], end[2] - start[2]);
          A = (C[0] / blocks, C[1] / blocks, C[2] / height);
          TXA = A[0] / 4;
          TYA = A[1] / 4;
          angle = vectorToAngles(C);
          angle = (0, angle[1], 90);
       
          for (h = 0; h < height; ++h)
          {
              crate = spawn("script_model", (start[0] + TXA, start[1] + TYA, start[2] + 15 + A[2] * h));
              crate setModel("com_plasticcase_friendly");
              crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      		crate.angles = angle;
              
              if(isInvisible)
              {
                  crate Hide();
              }
       
              for (i = 0; i < blocks; ++i)
              {
                  crate = spawn("script_model", (start[0] + A[0] * i, start[1] + A[1] * i, start[2] + 15 + A[2] * h));
                  crate setModel("com_plasticcase_friendly");
      			crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      			crate.angles = angle;
                  
                  if(isInvisible)
                  {
                      crate Hide();
                  }
              }
       
              crate = spawn("script_model", (start[0] + TXA * -1, start[1] + TYA * -1, start[2] + 15 + A[2] * h));
              crate setModel("com_plasticcase_friendly");
              crate CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      		crate.angles = angle;
              
              if(isInvisible)
              {
                  crate Hide();
              }
          }
      }
      
      createJumpZone(position, impulse)
      {
      	level endon("game_ended");
      	
      	zone = spawn("script_model", position);
      	zone setModel("weapon_c4_bombsquad");
      	zone setCursorHint("HINT_NOICON");
      	zone setHintString("Press and hold ^1[{+activate}] ^7for jump");
      	zone makeUsable();
      	
      	for (;;)
      	{
      		wait (.25);
      		
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, position);
      			if (dist < 75 && player isOnGround() && player useButtonPressed())
      			{
      				player setVelocity(impulse);
      			}
      		}
      	}
      }
      
      createTeleportFlagPressedButton(startOrigin, endOrigin)
      {
      	level endon("game_ended");
      	
      	flagEnter = spawn("script_model", startOrigin);
          flagEnter setModel(getTeamFlagModel("allieschar"));
      	flagEnter setCursorHint("HINT_NOICON");
      	flagEnter setHintString("Press and hold ^1[{+activate}] ^7for teleported");
      	flagEnter makeUsable();
      	
          flagExit = spawn("script_model", endOrigin);
          flagExit setModel(getTeamFlagModel("axischar"));
      	flagExit setCursorHint("HINT_NOICON");
      	flagExit setHintString("Press and hold ^1[{+activate}] ^7for go back");
      	flagExit makeUsable();
      	
      	curObjID = maps\mp\gametypes\_gameobjects::getNextObjID();
      	objective_add(curObjID, "active");
      	objective_position(curObjID, startOrigin);
      	objective_icon(curObjID, "compass_waypoint_bomb");
      
      	for (;;)
      	{
      		wait (.5);
      		foreach (player in level.players)
      		{
      			distEnter = distance(player.origin, startOrigin);
      			if (distEnter < 75 && player isOnGround() && player useButtonPressed())
      			{
      				player setOrigin(flagExit.origin);
      				continue;
      			}
      			
      			distExit = distance(player.origin, endOrigin);
      			if (distExit < 75 && player isOnGround() && player useButtonPressed())
      			{
      				player setOrigin(flagEnter.origin);
      				continue;
      			}
      		}
      	}
      }
      
      createTeleportFlag(startOrigin, endOrigin)
      {
      	level endon("game_ended");
      	
      	flagEnter = spawn("script_model", startOrigin);
          flagEnter setModel(getTeamFlagModel("allieschar"));
      	
          flagExit = spawn("script_model", endOrigin);
          flagExit setModel(getTeamFlagModel("axischar"));
      	
      	curObjID = maps\mp\gametypes\_gameobjects::getNextObjID();
      	objective_add(curObjID, "active");
      	objective_position(curObjID, startOrigin);
      	objective_icon(curObjID, "compass_waypoint_bomb");
      
      	for (;;)
      	{
      		wait (.25);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, startOrigin);
      			if (dist < 75)
      			{
      				player setOrigin(endOrigin);
      			}
      		}
      	}
      }
      
      createElevator(start, Z, angle)
      {
      	floors = [];
      	
      	origin = spawn("script_origin", start + (0, 0, 45));
      	
      	floor = spawn("script_model", start);
          floor setModel("com_plasticcase_enemy");
      	floor solid();
      	floor SetContents(1);
          floor CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      	floor.angles = angle;
      	
      	floor linkTo(origin);
      	
      	for (i = 0; i < 4; i++)
      	{
      		offset = (0, 0, 0);
      		
      		if (i == 0)
      			offset = (28, 30, 0);
      		else if (i == 1)
      			offset = (-28, 30, 0);
      		else if (i == 2)
      			offset = (28, -30, 0);
      		else if (i == 3)
      			offset = (-28, -30, 0);
      		
              floor = spawn("script_model", start + offset);
              floor setModel("com_plasticcase_enemy");
              floor CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
      		floor.angles = angle;
      		floors[i] = floor;
      		floor linkTo(origin);
      	}
      	
      	for (;;)
      	{
      		wait (10);
      		origin moveZ(Z, 5);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, origin.origin);
      			if (dist < 125)
      			{
      				player playerLinkTo(origin);
      				player playerLinkedOffsetEnable();
      			}
      		}
      		
      		wait (5);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, origin.origin);
      			if (dist < 125)
      			{
      				player setOrigin(player.origin + (0, 0, 10));
      				player unLink();
      			}
      		}
      		
      		wait (10);
      		origin moveZ(-1 * Z, 5);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, origin.origin);
      			if (dist < 125)
      			{
      				player playerLinkTo(origin);
      				player playerLinkedOffsetEnable();
      			}
      		}
      		
      		wait (5);
      		foreach (player in level.players)
      		{
      			dist = distance(player.origin, origin.origin);
      			if (dist < 125)
      			{
      				player setOrigin(player.origin + (0, 0, 10));
      				player unLink();
      			}
      		}
      	}
      }
      
      getTeamFlagModel(teamChar)
      {
      	return tableLookup("mp/factionTable.csv", 0, getMapCustom(teamChar), 10);
      }
      

      You can test script now on maps: Resistance(jump zones, tree lunge), Rust (center map), Dome(flags teleporter)

      CreateRamp(topOrigin, bottomOrigin, isInvisible);
      CreateFloor(originA, originB, isInvisible);
      CreateWall(originA, originB, isInvisible);
      
      Origins - is vector type
      [X, Y, Z]
      
      isInvisible - is bool type, false - visible, true - hide
      

      Screenshots from servers
      1.png 2.png 4.png 3.png

      Video
      Youtube Video

      posted in MW3 Modding Releases & Resources
    • [Suggestion/Request] MW3 Spec-Ops Support (Survival, Missions and CHAOS)

      @Migter12 wait GSC supporting, and porting won't keep you waiting long

      posted in MW3 Modding Support & Discussion
    • [Release] Hight jump zone

      @TTV_WIZEQC
      I try make it, but

      posted in MW3 Modding Releases & Resources
    • About map changing

      well, yes, we need to find the brushmodel of care package, but because of broken get/set fields it will be difficult, but I was able to code the hardness of the red barrels, but for some reason their hardness is not completely copied to the model

      posted in MW3 Modding Support & Discussion
    • About map changing

      if it were possible, then MapEdit would have appeared on the servers long ago

      posted in MW3 Modding Support & Discussion
    • ChaiScript Question,

      @Meet-Your-Maker

      player.meleeButtonPressed() == 1
      player.adsButtonPressed() == 1
      player.fragButtonPressed() == 1
      player.secondaryOffhandButtonPressed() == 1
      player.useButtonPressed() == 1
      

      as far as I know, then these functions check for pressing at a given time, and for checking you need to use a timer

      setInterval(fun[player]() { 
      			if (player.useButtonPressed() == 1)
                              { /* magic */ }
      		}, 10);
      

      I think I understood the question correctly and was able to answer it 😊

      posted in MW3 Modding Support & Discussion
    • [Preview] Retarded Insane Bots

      Try to add waypoints 🙂

      If bots cannot see each other, then they will move along these points to find someone

      posted in MW3 Modding Releases & Resources