Skip to content
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Donate
Collapse

Plutonium

ColouRzundefined

ColouRz

@ColouRz
About
Posts
4
Topics
3
Shares
0
Groups
0
Followers
7
Following
1

Posts

Recent Best Controversial

  • [Resource] Showing my gsc mod to help beginners
    ColouRzundefined ColouRz

    Hey, I've gone through the trouble of learning some gsc. It's fun to see when things are working ingame, but it's tedious to figure out what functions exist and how they are used. So I'm going to release this mod to the public so the next person after me has more simple examples to lead them. I think my code is helpful for someone who already understands gsc keywords and basic programming and is now searching for simple code examples.

    The mod was used on Aspire ffa sniping server. You can take whatever parts you find useful and put it in your mod.

    The mod contains code that:

    • Puts a simple text on the screen which is useful for showing a discord link.
    • Displays the players' current killstreak at the bottom.
    • Calculates the time and accuracy of the FFA winner, then displays this at the end of the game. Was used for keeping track of the fastest FFA wins.
    /*
    * Author: ColouRz
    * Version: 1.2
    * Last updated: 6 October 2021
    * Game: Modern Warfare 3
    *
    * Displays the playtime and accuracy of the winner. Made for FFA.
    * Displays currently best time.
    * Displays website and discord links.
    * Displays current killstreak as a text in the bottom of each player's screen.
    *
    * Changelog:
    *
    * 1.2: Added killstreak text at bottom of screen.
    *
    * 1.1: Added accuracy of winner at end of game.
    * Fixed bug of playtimer not starting if player connected after game started.
    * Notes: Currently hardcoded for a kill limit of 100.
    * Known bugs: Hitmarkers counts as misses. If the player connected after the game started, but no one has made a kill yet, the playtimer does not start.
    *
    */
    
    #include maps\mp\gametypes\_hud_util; // For createFontString
    
    init()
    {
        level thread onplayerconnect();
    	highscore_text();
    	info_text();
    	thread winner_text();
    	level waittill("prematch_over");
    	level.callbackPlayerKilled = ::Callback_PlayerKilled;
    }
    
    onplayerconnect()
    {
        for(;;)
        {
            level waittill("connected", player);
    		player thread playtimer();
    		player thread wait_start1();
    		player thread wait_start2();
    		player thread wait_start3();
    		player thread shots_counter();
    		killstreak_text = player createFontString("Objective",1);
    		killstreak_text setPoint("CENTER","BOTTOM",0,-10);
    		player thread onplayerspawned(killstreak_text);
        }
    }
    
    onplayerspawned(killstreak_text)
    {
        self endon("disconnect");
        for(;;)
        {
            self waittill("spawned_player");
    		self thread killstreak_counter(killstreak_text);
    	}
    }
    
    wait_start1() // starts timer if spawned in before countdown
    {
    	self endon("disconnect");
    	self endon("game_ended");
    	self endon("started_playing");
    	
    	self waittill( "spawned_player");
    	level waittill("prematch_over");
    	self notify("started_playing");
    }
    
    wait_start2() // starts timer if spawned in after countdown 
    {
    	self endon("disconnect");
    	self endon("game_ended");
    	self endon("started_playing");
    	
    	level waittill( "prematch_over");
    	self waittill( "spawned_player");
    	self notify("started_playing");
    }
    
    wait_start3() // starts timer if joined server after game started
    {
    	self endon("disconnect");
    	self endon("game_ended");
    	self endon("started_playing");
    	
    	leader = maps\mp\gametypes\_gamescore::getHighestScoringPlayer();
    	if(isDefined(leader.kills) && leader.kills > 0)
    	{
    		self waittill("spawned_player");
    		self notify("started_playing");
    	}
    }
    
    playtimer()
    {
    	self endon("disconnect");
    	
    	self waittill("started_playing");
    	self.starttime = gettime();
    	
    	level waittill("game_ended");
    	self.endtime = gettime();
    	self.playtime = self.endtime - self.starttime;
    	
    	totalseconds = floor(self.playtime / 1000);
    	self.minutes = floor(totalseconds / 60);
    	self.seconds = totalseconds - self.minutes*60;
    	
    }
    
    shots_counter()
    {
    	self endon("disconnect");
    	level endon("game_ended");
    	
    	self.shots = 0;
    	while(true)
    	{
    		self waittill("weapon_fired");
    		self.shots++;
    	}
    }
    
    killstreak_counter(killstreak_text)
    {
    	self endon("death");
    	self endon("disconnect");
    	level endon("game_ended");
    	
    	killstreak_text setText("Killstreak: 0");
    	while(true)
    	{
    		self waittill("kill");
    		killstreak_text setText("Killstreak: " + self.pers["cur_kill_streak"]);
    	}
    	
    }
    
    
    winner_text()
    {
    	level waittill("game_ended");
    	wait 0.05;
    	
    	winner = maps\mp\gametypes\_gamescore::getHighestScoringPlayer();
    	killlimit = 100;
    	winner_name = level createServerFontString( "Objective", 1 );
    	winner_name setPoint( "LEFT", "LEFT", 0, 0 );
    	winner_name setText("^2WINNER: " + winner.name + " won in " + winner.minutes + " min "+winner.seconds+" sec\n"
    						+ winner.name + "'s accuracy was " + floor((killlimit / winner.shots)*1000)/10 + " percent");
    }
    
    highscore_text()
    {
    	highscore = level createServerFontString( "Objective", 0.5 );
    	highscore setPoint( "RIGHT", "RIGHT", 0, -100 );
    	highscore.hideWhenInMenu = true;
    	
    	mapname = getDvar("mapname");
    
    	if(mapname == "mp_rust")
    	{
    		highscore setText("^2FASTEST WIN RUST\nEoJz: 5:13");
    	}
    	else if(mapname == "mp_dome")
    	{
    		highscore setText("^2FASTEST WIN DOME\nEoJz: 6:24");
    	}
    	
    }
    
    info_text()
    {
    	discord = level createServerFontString( "Objective", 0.5 );
    	discord setPoint( "RIGHT", "RIGHT", 0, -110 );
    	discord setText("^5discord: link here");
    	website = level createServerFontString( "Objective", 0.5 );
    	website setPoint( "RIGHT", "RIGHT", 0, -120 );
    	website setText("^5stats: iw4madmin webfront here");
    }
    
    Callback_PlayerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration )
    {
    	attacker notify("kill");
    	self maps\mp\gametypes\_damage::Callback_PlayerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration );
    }
    
    
    debug(text)
    {
    	self iPrintLnBold(text);
    	wait 1;
    }
    
    MW3 Modding Releases & Resources

  • [Resource] Giving out Aspire bo2 sniping mod
    ColouRzundefined ColouRz

    Similar to my topic on mw3 resources, I am going to share the mod that was running on Aspire ffa sniper server on bo2.

    It contains code for:

    • Setting server dvars that change movement and scoping mechanics to make the gameplay faster.
    • Removing disallowed weapons and weapon attachments.
    • Increased movement speed when holding knife.
    • Setting sniper damage to 1000 so hitmarkers are removed, and disabling all other damage types. (bug: players will not die when falling off map such as hijacked.)
    • Info text at bottom of screen to inform player of mod functionality and rules. It flips between texts every 6 seconds and does not repeat texts on respawn.
    • Simple watermark to display discord link.

    Use it as a learning resource or take whatever parts you want and put it on your server.

    #include maps\mp\gametypes\_hud_util;
    /*
    * Aspire sniper mod bo2
    * Author: ColouRz
    * Version: 1.0
    * Date: 9 sep 2021
    */
    init()
    {
    	level.playerDamageStub = level.callbackplayerdamage;
    	level.callbackplayerdamage = ::Callback_PlayerDamageHook;
    	setup_server_dvars();
    	level thread onplayerconnect();
    	player thread onplayerspawned();
    	
    }
    
    onplayerconnect()
    {
    	for ( ;; )
    	{
    		level waittill( "connecting", player );
    		player thread onplayerspawned();
    		
    	}
    }
    
    onplayerspawned()
    {
    	level endon( "game_ended" );
        self endon( "disconnect" );
    
    	self.info_font = self createFontString( "Objective", 1 );
    	self.info_font setPoint( "BOTTOM", "BOTTOM", 0, 35 );
    	i = 0;
    	for(;;)
    	{
    		self waittill( "spawned_player" );
    		self simple_watermark();
    		self apply_weapon_restrictions();
    		self freezeControls(false);
    		self thread update();
    		self.info_font setText("");
    		if(i < 4)
    		{
    			self thread info_text(self.info_font,i);
    			i++;
    		}
    		
    	}
    }
    setup_server_dvars()
    {
    	level.killstreaksenabled = 0;
    	setdvar("sv_allowAimAssist","0");
    	setdvar("g_maxDroppedWeapons", "0");  // dont work
    	setdvar("scr_disable_weapondrop","1"); // dont work
    	setDvar( "player_breath_gasp_lerp", "0.001" );
    	setDvar( "player_breath_gasp_time", "0.001" );
    	setDvar( "player_breath_gasp_scale", "0.001" );
    	setDvar( "jump_slowdownEnable", "0");
    	setDvar( "jump_spreadAdd", "0");
    	setDvar( "jump_height", "44");
    	setDvar( "bg_viewBobMax", "0");
    	setDvar( "bg_swingSpeed", "1");
    	setDvar( "bg_weaponBobMax", "0.5");
    	setDvar( "friction", "1");
    	//setDvar( "player_sprintSpeedScale", "1.5");
    	//setDvar( "player_sprintStrafeSpeedScale", "1.5");
    	//setDvar( "player_strafeSpeedScale", "1.5");
    	setDvar("player_sprintCameraBob","0.4");
    	//setDvar("player_sprintForwardMinimum","1");
    	setDvar("player_sprintRechargePause","0");
    	//setDvar("player_sprintMinTime","0.05");
    	//setDvar( "player_sprintThreshold", "1");
    	setDvar( "player_sprintUnlimited", "1");
    	setDvar("bg_forceAnimOverrideTimerCheck", "0");
    	setDvar("bg_viewKickMax", "0");
    	setDvar("cg_drawBreathHint", "0");
    	setDvar("cg_drawHoldBreathHint", "0");
    	setDvar("cg_gun_x", "5");
    	setDvar("cg_gun_y", "-1");
    	setDvar("cg_gun_z", "-1");
    	//setDvar("cg_scoreboardMyColor", "1 0 0 0.5"); 
    	setDvar("player_adsExitDelay", "0");
    	setDvar("player_clipSizeMultiplier", "10");
    	setDvar("sv_FakeRemoteClient", "1");
    	setDvar("g_useholdspawndelay", "0");
    	setDvar("perk_mantleReduction", "5");
    	setDvar("perk_fastLadderClimbMultiplier", "3");
    	setDvar("scr_game_medalsenabled", "0");
    	setDvar("scr_gunxpscale", "0.1");
    	setDvar("scr_xpscale", "0.1");
    	setDvar("r_fog", "0");
    	setDvar("r_fog_disable", "1");
    	setDvar( "fx_enable", "0");
    	setDvar( "r_detail", "0");
    	setDvar( "r_distortion", "0");
    	setDvar( "r_dof_enable", "0");
    	setDvar( "r_drawSun", "0");
    	setDvar( "ragdoll_enable", "0");
    	setDvar( "ui_customModeName", "^4Aspire ^7Sniper ^2Arcade");
    }
    
    apply_weapon_restrictions()
    {
    	self endon( "disconnect" );
        self endon( "death" );
    	
    	self disableoffhandweapons();
    	wait 0.1; // wait for player to pull out weapon.
    	weapon = self getcurrentweapon();
    	
    	if(isSubStr(weapon, "ballista") || isSubStr(weapon, "dsr"))
    	{
    		weapon_parts = strtok(weapon,"+");
    		weapon_allowed = true;
    		for(i = 1; i < weapon_parts.size; i++)
    		{
    			if(weapon_parts[i] == "steadyaim" || weapon_parts[i] == "acog") // bo2 compilator only allows 2 conditions.
    			{
    				weapon_parts[i] = "illegal";
    				weapon_allowed = false;
    			}
    			else if(weapon_parts[i] == "silencer" || weapon_parts[i] == "is")
    			{
    				weapon_parts[i] = "illegal";
    				weapon_allowed = false;
    			}
    			else if(weapon_parts[i] == "ir" || weapon_parts[i] == "vzoom")
    			{
    				weapon_parts[i] = "illegal";
    				weapon_allowed = false;
    			}
    		}
    		
    		if(!weapon_allowed)
    		{
    			self takeweapon(weapon);
    			new_weapon = weapon_parts[0];
    			for(i = 1; i < weapon_parts.size; i++)
    			{
    				if(weapon_parts[i] != "illegal")
    					new_weapon += "+" + weapon_parts[i];
    			}
    			self giveweapon(new_weapon);
    			self switchtoweapon(new_weapon);
    		}
    	}
    	else
    	{
    		self takeweapon(weapon);
    		self giveweapon("ballista_mp+fmj+swayreduc");
    		self switchtoweapon("ballista_mp+fmj+swayreduc");
    	}
    	
    	// Secondary
    	
    	weps = self getweaponslistprimaries();
    	if(weps.size == 3)
    	{
    		self takeweapon(weps[1]);
    	}
    	weps = self getweaponslistprimaries();
    	if(weps[0] != "none" && weps[1] != "knife_held_mp")
    	{
    		self takeweapon(weps[0]);
    		self giveweapon("knife_held_mp");
    	}
    	
    }
    
    update()
    {
    	self endon( "disconnect" );
        self endon( "death" );
    	
        for(;;)
        {
            currentWeapon = self getcurrentweapon();
            if ( isSubStr(currentWeapon, "ballista") || isSubStr(currentWeapon, "dsr") )
            {
    			self setclientdvar("g_speed","200");
            }
    		else if(currentWeapon == "knife_held_mp")
    		{
    			self setclientdvar("g_speed","230");
    		}
    
    		wait 0.05;
        }
    }
    
    Callback_PlayerDamageHook( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) {
    	self endon( "disconnect" );	
    	
    	if(isSubStr(sweapon, "ballista") || isSubStr(sweapon, "dsr"))
    	{
    		idamage = 1000;
    		// calling the damage function below only if allowed weapons are used, meaning no hitmarkers, flinch or blood is given by disallowed weapons which is nice.
    		[[level.playerDamageStub]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex );
    	}
    	
    }
    
    info_text(info_font,i)
    {
    	self endon( "disconnect" );
    	self endon( "death" );
    	
    	
    	texts = [];
    	texts[0] = "Knife makes you run faster";
    	texts[1] = "Allowed = Ballista, DSR, Ballistics CPU, Mags, FMJ";
    	texts[2] = "Use a sniper with allowed attachments to avoid having to pull out your weapon each respawn";
    	texts[3] = "Mod made by Aspire ColouRz, enjoy :)";
    	
    	info_font setText("^2"+texts[i]);
    	wait 6;
    	info_font setText("");
    }
    
    simple_watermark()
    {
    	self.website = self createFontString( "Objective", 1 );
    	self.website setPoint( "TOP", "RIGHT", 10, -210 );
    	self.website setText( "^5stats: team-aspire.eu" ); 
    	self.discord = self createFontString( "Objective", 1 );
    	self.discord setPoint( "TOP", "RIGHT", 10, -220 );
    	self.discord setText( "^5discord.gg/yRvWUPC" );
    }
    
    print(txt)
    {
    	self iPrintLnBold(txt);
    	wait 1;
    }
    
    BO2 Modding Releases & Resources
  • 1 / 1
  • Login

  • Don't have an account? Register

  • Login or register to search.
  • First post
    Last post
0
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Donate