Posts: 33
Threads: 7
Joined: Mar 2012
Reputation:
3
Hi itsmods, I just had a quick question maybe someone could help me out..
Im working on a patch for PC and am trying to add something that will give players a gold desert eagle on their classes.
Quote:self setplayerdata( "customClasses", 1, "weaponSetups", 1, "weapon", "deserteaglegold" );
self setplayerdata( "customClasses", 2, "weaponSetups", 1, "weapon", "deserteaglegold" );
self setplayerdata( "customClasses", 3, "weaponSetups", 1, "weapon", "deserteaglegold" );
self setplayerdata( "customClasses", 4, "weaponSetups", 1, "weapon", "deserteaglegold" );
self setplayerdata( "customClasses", 5, "weaponSetups", 1, "weapon", "deserteaglegold" );
self setplayerdata( "customClasses", 6, "weaponSetups", 1, "weapon", "deserteaglegold" );
self setplayerdata( "customClasses", 7, "weaponSetups", 1, "weapon", "deserteaglegold" );
self setplayerdata( "customClasses", 8, "weaponSetups", 1, "weapon", "deserteaglegold" );
self setplayerdata( "customClasses", 9, "weaponSetups", 1, "weapon", "deserteaglegold" );
self setplayerdata( "customClasses", 10, "weaponSetups", 1, "weapon", "deserteaglegold" );
This is what I have, but instead of giving a desert eagle it gives a usp 45? Although in the create a class menu it clearly shows "Gold Desert Eagle"....
Where have I gone wrong? help please =D
Posts: 592
Threads: 67
Joined: Apr 2012
Reputation:
17
01-27-2013, 12:43
(This post was last modified: 01-27-2013, 12:48 by RaZ.)
(01-27-2013, 01:44)camxxcore Wrote: Hi itsmods, I just had a quick question maybe someone could help me out..
Im working on a patch for PC and am trying to add something that will give players a gold desert eagle on their classes.
Where have I gone wrong? help please =D
You are trying to modify the player's classes instead of replacing them.
Code: onPlayerSpawned()
{
self endon( "disconnect" );
for( ; ; )
{
self waittill( "spawned_player" );
//self takeallweapons(); //uncomment this line if you want to remove every weapon and just add a gold deagle
self giveweapon("deserteaglegold_mp",0,false);
self givemaxammo("deserteaglegold_mp");
wait (0.5);
self switchtoweapon("deserteaglegold_mp",0,false);
}
}
This will give everyone a 3rd wepon (gold deagle now), but if you want to make a gold deagle only mod, you should uncomment the "//self takeallweapons();" command.
Posts: 3,535
Threads: 420
Joined: Dec 2010
Reputation:
106
There is a function in _class.gsc with handgun names, try to add the deserteaglegold_mp there. I dont know if it will work
Posts: 592
Threads: 67
Joined: Apr 2012
Reputation:
17
01-27-2013, 13:24
(This post was last modified: 01-27-2013, 13:25 by RaZ.)
(01-27-2013, 13:11)Yamato Wrote: There is a function in _class.gsc with handgun names, try to add the deserteaglegold_mp there. I dont know if it will work
Yes ,it is working. (but only on servers with modified class.gsc)
In _class.gsc line 922 -> 1058:
Code: isValidPrimary( refString )
{
switch ( refString )
{
case "riotshield":
case "ak47":
case "m16":
case "m4":
case "fn2000":
case "deserteaglegold":
case "masada":
case "famas":
case "fal":
case "scar":
case "tavor":
case "mp5k":
case "uzi":
case "p90":
case "kriss":
case "ump45":
case "barrett":
case "wa2000":
case "m21":
case "cheytac":
case "rpd":
case "sa80":
case "mg4":
case "m240":
case "aug":
return true;
default:
assertMsg( "Replacing invalid primary weapon: " + refString );
return false;
}
}
isValidSecondary( refString )
{
switch ( refString )
{
case "beretta":
case "usp":
case "deserteagle":
case "coltanaconda":
case "deserteaglegold":
case "glock":
case "beretta393":
case "pp2000":
case "tmp":
case "m79":
case "rpg":
case "at4":
case "stinger":
case "javelin":
case "ranger":
case "model1887":
case "striker":
case "aa12":
case "m1014":
case "spas12":
case "onemanarmy":
return true;
default:
assertMsg( "Replacing invalid secondary weapon: " + refString );
return false;
}
}
Full modified _class.gsc:
PHP Code: #include common_scripts\utility; // check if below includes are removable #include maps\mp\_utility; #include maps\mp\gametypes\_hud_util;
init() { level.classMap["class0"] = 0; level.classMap["class1"] = 1; level.classMap["class2"] = 2; level.classMap["class3"] = 3; level.classMap["class4"] = 4; level.classMap["class5"] = 5; level.classMap["class6"] = 6; level.classMap["class7"] = 7; level.classMap["class8"] = 8; level.classMap["class9"] = 9; level.classMap["class10"] = 10; level.classMap["class11"] = 11; level.classMap["class12"] = 12; level.classMap["class13"] = 13; level.classMap["class14"] = 14; level.classMap["custom1"] = 0; level.classMap["custom2"] = 1; level.classMap["custom3"] = 2; level.classMap["custom4"] = 3; level.classMap["custom5"] = 4; level.classMap["custom6"] = 5; level.classMap["custom7"] = 6; level.classMap["custom8"] = 7; level.classMap["custom9"] = 8; level.classMap["custom10"] = 9; level.classMap["copycat"] = -1; /# // classes testclients may choose from. level.botClasses = []; level.botClasses[0] = "class0"; level.botClasses[1] = "class0"; level.botClasses[2] = "class0"; level.botClasses[3] = "class0"; level.botClasses[4] = "class0"; #/ level.defaultClass = "CLASS_ASSAULT"; level.classTableName = "mp/classTable.csv"; //precacheShader( "waypoint_bombsquad" ); precacheShader( "specialty_pistoldeath" ); precacheShader( "specialty_finalstand" );
level thread onPlayerConnecting(); }
getClassChoice( response ) { assert( isDefined( level.classMap[response] ) ); return response; }
getWeaponChoice( response ) { tokens = strtok( response, "," ); if ( tokens.size > 1 ) return int(tokens[1]); else return 0; }
logClassChoice( class, primaryWeapon, specialType, perks ) { if ( class == self.lastClass ) return;
self logstring( "choseclass: " + class + " weapon: " + primaryWeapon + " special: " + specialType ); for( i=0; i<perks.size; i++ ) self logstring( "perk" + i + ": " + perks[i] ); self.lastClass = class; }
cac_getWeapon( classIndex, weaponIndex ) { return self getPlayerData( "customClasses", classIndex, "weaponSetups", weaponIndex, "weapon" ); }
cac_getWeaponAttachment( classIndex, weaponIndex ) { return self getPlayerData( "customClasses", classIndex, "weaponSetups", weaponIndex, "attachment", 0 ); }
cac_getWeaponAttachmentTwo( classIndex, weaponIndex ) { return self getPlayerData( "customClasses", classIndex, "weaponSetups", weaponIndex, "attachment", 1 ); }
cac_getWeaponCamo( classIndex, weaponIndex ) { return self getPlayerData( "customClasses", classIndex, "weaponSetups", weaponIndex, "camo" ); }
cac_getPerk( classIndex, perkIndex ) { return self getPlayerData( "customClasses", classIndex, "perks", perkIndex ); }
cac_getKillstreak( classIndex, streakIndex ) { return self getPlayerData( "killstreaks", streakIndex ); }
cac_getDeathstreak( classIndex ) { return self getPlayerData( "customClasses", classIndex, "perks", 4 ); }
cac_getOffhand( classIndex ) { return self getPlayerData( "customClasses", classIndex, "specialGrenade" ); }
table_getWeapon( tableName, classIndex, weaponIndex ) { if ( weaponIndex == 0 ) return tableLookup( tableName, 0, "loadoutPrimary", classIndex + 1 ); else return tableLookup( tableName, 0, "loadoutSecondary", classIndex + 1 ); }
table_getWeaponAttachment( tableName, classIndex, weaponIndex, attachmentIndex ) { tempName = "none"; if ( weaponIndex == 0 ) { if ( !isDefined( attachmentIndex ) || attachmentIndex == 0 ) tempName = tableLookup( tableName, 0, "loadoutPrimaryAttachment", classIndex + 1 ); else tempName = tableLookup( tableName, 0, "loadoutPrimaryAttachment2", classIndex + 1 ); } else { if ( !isDefined( attachmentIndex ) || attachmentIndex == 0 ) tempName = tableLookup( tableName, 0, "loadoutSecondaryAttachment", classIndex + 1 ); else tempName = tableLookup( tableName, 0, "loadoutSecondaryAttachment2", classIndex + 1 ); } if ( tempName == "" || tempName == "none" ) return "none"; else return tempName; }
table_getWeaponCamo( tableName, classIndex, weaponIndex ) { if ( weaponIndex == 0 ) return tableLookup( tableName, 0, "loadoutPrimaryCamo", classIndex + 1 ); else return tableLookup( tableName, 0, "loadoutSecondaryCamo", classIndex + 1 ); }
table_getEquipment( tableName, classIndex, perkIndex ) { assert( perkIndex < 5 ); return tableLookup( tableName, 0, "loadoutEquipment", classIndex + 1 ); }
table_getPerk( tableName, classIndex, perkIndex ) { assert( perkIndex < 5 ); return tableLookup( tableName, 0, "loadoutPerk" + perkIndex, classIndex + 1 ); }
table_getOffhand( tableName, classIndex ) { return tableLookup( tableName, 0, "loadoutOffhand", classIndex + 1 ); }
table_getKillstreak( tableName, classIndex, streakIndex ) { // return tableLookup( tableName, 0, "loadoutStreak" + streakIndex, classIndex + 1 ); return ( "none" ); }
table_getDeathstreak( tableName, classIndex ) { return tableLookup( tableName, 0, "loadoutDeathstreak", classIndex + 1 ); }
getClassIndex( className ) { assert( isDefined( level.classMap[className] ) ); return level.classMap[className]; }
/* getPerk( perkIndex ) { if( isSubstr( self.pers["class"], "CLASS_CUSTOM" ) ) return cac_getPerk( self.class_num, perkIndex ); else return table_getPerk( level.classTableName, self.class_num, perkIndex ); }
getWeaponCamo( weaponIndex ) { if( isSubstr( self.pers["class"], "CLASS_CUSTOM" ) ) return cac_getWeaponCamo( self.class_num, weaponIndex ); else return table_getWeaponCamo( level.classTableName, self.class_num, weaponIndex ); } */
cloneLoadout() { clonedLoadout = []; class = self.curClass; if ( class == "copycat" ) return ( undefined ); if( isSubstr( class, "custom" ) ) { class_num = getClassIndex( class );
loadoutPrimaryAttachment2 = "none"; loadoutSecondaryAttachment2 = "none";
loadoutPrimary = cac_getWeapon( class_num, 0 ); loadoutPrimaryAttachment = cac_getWeaponAttachment( class_num, 0 ); loadoutPrimaryAttachment2 = cac_getWeaponAttachmentTwo( class_num, 0 ); loadoutPrimaryCamo = cac_getWeaponCamo( class_num, 0 ); loadoutSecondaryCamo = cac_getWeaponCamo( class_num, 1 ); loadoutSecondary = cac_getWeapon( class_num, 1 ); loadoutSecondaryAttachment = cac_getWeaponAttachment( class_num, 1 ); loadoutSecondaryAttachment2 = cac_getWeaponAttachmentTwo( class_num, 1 ); loadoutSecondaryCamo = cac_getWeaponCamo( class_num, 1 ); loadoutEquipment = cac_getPerk( class_num, 0 ); loadoutPerk1 = cac_getPerk( class_num, 1 ); loadoutPerk2 = cac_getPerk( class_num, 2 ); loadoutPerk3 = cac_getPerk( class_num, 3 ); loadoutOffhand = cac_getOffhand( class_num ); loadoutDeathStreak = cac_getDeathstreak( class_num ); } else { class_num = getClassIndex( class ); loadoutPrimary = table_getWeapon( level.classTableName, class_num, 0 ); loadoutPrimaryAttachment = table_getWeaponAttachment( level.classTableName, class_num, 0 , 0); loadoutPrimaryAttachment2 = table_getWeaponAttachment( level.classTableName, class_num, 0, 1 ); loadoutPrimaryCamo = table_getWeaponCamo( level.classTableName, class_num, 0 ); loadoutSecondary = table_getWeapon( level.classTableName, class_num, 1 ); loadoutSecondaryAttachment = table_getWeaponAttachment( level.classTableName, class_num, 1 , 0); loadoutSecondaryAttachment2 = table_getWeaponAttachment( level.classTableName, class_num, 1, 1 );; loadoutSecondaryCamo = table_getWeaponCamo( level.classTableName, class_num, 1 ); loadoutEquipment = table_getEquipment( level.classTableName, class_num, 0 ); loadoutPerk1 = table_getPerk( level.classTableName, class_num, 1 ); loadoutPerk2 = table_getPerk( level.classTableName, class_num, 2 ); loadoutPerk3 = table_getPerk( level.classTableName, class_num, 3 ); loadoutOffhand = table_getOffhand( level.classTableName, class_num ); loadoutDeathstreak = table_getDeathstreak( level.classTableName, class_num ); } clonedLoadout["inUse"] = false; clonedLoadout["loadoutPrimary"] = loadoutPrimary; clonedLoadout["loadoutPrimaryAttachment"] = loadoutPrimaryAttachment; clonedLoadout["loadoutPrimaryAttachment2"] = loadoutPrimaryAttachment2; clonedLoadout["loadoutPrimaryCamo"] = loadoutPrimaryCamo; clonedLoadout["loadoutSecondary"] = loadoutSecondary; clonedLoadout["loadoutSecondaryAttachment"] = loadoutSecondaryAttachment; clonedLoadout["loadoutSecondaryAttachment2"] = loadoutSecondaryAttachment2; clonedLoadout["loadoutSecondaryCamo"] = loadoutSecondaryCamo; clonedLoadout["loadoutEquipment"] = loadoutEquipment; clonedLoadout["loadoutPerk1"] = loadoutPerk1; clonedLoadout["loadoutPerk2"] = loadoutPerk2; clonedLoadout["loadoutPerk3"] = loadoutPerk3; clonedLoadout["loadoutOffhand"] = loadoutOffhand; return ( clonedLoadout ); }
giveLoadout( team, class, allowCopycat ) { self takeAllWeapons(); primaryIndex = 0; // initialize specialty array self.specialty = [];
if ( !isDefined( allowCopycat ) ) allowCopycat = true;
primaryWeapon = undefined;
if ( isDefined( self.pers["copyCatLoadout"] ) && self.pers["copyCatLoadout"]["inUse"] && allowCopycat ) { self maps\mp\gametypes\_class::setClass( "copycat" ); self.class_num = getClassIndex( "copycat" );
clonedLoadout = self.pers["copyCatLoadout"];
loadoutPrimary = clonedLoadout["loadoutPrimary"]; loadoutPrimaryAttachment = clonedLoadout["loadoutPrimaryAttachment"]; loadoutPrimaryAttachment2 = clonedLoadout["loadoutPrimaryAttachment2"] ; loadoutPrimaryCamo = clonedLoadout["loadoutPrimaryCamo"]; loadoutSecondary = clonedLoadout["loadoutSecondary"]; loadoutSecondaryAttachment = clonedLoadout["loadoutSecondaryAttachment"]; loadoutSecondaryAttachment2 = clonedLoadout["loadoutSecondaryAttachment2"]; loadoutSecondaryCamo = clonedLoadout["loadoutSecondaryCamo"]; loadoutEquipment = clonedLoadout["loadoutEquipment"]; loadoutPerk1 = clonedLoadout["loadoutPerk1"]; loadoutPerk2 = clonedLoadout["loadoutPerk2"]; loadoutPerk3 = clonedLoadout["loadoutPerk3"]; loadoutOffhand = clonedLoadout["loadoutOffhand"]; loadoutDeathStreak = "specialty_copycat"; } else if ( isSubstr( class, "custom" ) ) { class_num = getClassIndex( class ); self.class_num = class_num;
loadoutPrimary = cac_getWeapon( class_num, 0 ); loadoutPrimaryAttachment = cac_getWeaponAttachment( class_num, 0 ); loadoutPrimaryAttachment2 = cac_getWeaponAttachmentTwo( class_num, 0 ); loadoutPrimaryCamo = cac_getWeaponCamo( class_num, 0 ); loadoutSecondaryCamo = cac_getWeaponCamo( class_num, 1 ); loadoutSecondary = cac_getWeapon( class_num, 1 ); loadoutSecondaryAttachment = cac_getWeaponAttachment( class_num, 1 ); loadoutSecondaryAttachment2 = cac_getWeaponAttachmentTwo( class_num, 1 ); loadoutSecondaryCamo = cac_getWeaponCamo( class_num, 1 ); loadoutEquipment = cac_getPerk( class_num, 0 ); loadoutPerk1 = cac_getPerk( class_num, 1 ); loadoutPerk2 = cac_getPerk( class_num, 2 ); loadoutPerk3 = cac_getPerk( class_num, 3 ); loadoutOffhand = cac_getOffhand( class_num ); loadoutDeathStreak = cac_getDeathstreak( class_num ); } else { class_num = getClassIndex( class ); self.class_num = class_num; loadoutPrimary = table_getWeapon( level.classTableName, class_num, 0 ); loadoutPrimaryAttachment = table_getWeaponAttachment( level.classTableName, class_num, 0 , 0); loadoutPrimaryAttachment2 = table_getWeaponAttachment( level.classTableName, class_num, 0, 1 ); loadoutPrimaryCamo = table_getWeaponCamo( level.classTableName, class_num, 0 ); loadoutSecondaryCamo = table_getWeaponCamo( level.classTableName, class_num, 1 ); loadoutSecondary = table_getWeapon( level.classTableName, class_num, 1 ); loadoutSecondaryAttachment = table_getWeaponAttachment( level.classTableName, class_num, 1 , 0); loadoutSecondaryAttachment2 = table_getWeaponAttachment( level.classTableName, class_num, 1, 1 );; loadoutSecondaryCamo = table_getWeaponCamo( level.classTableName, class_num, 1 ); loadoutEquipment = table_getEquipment( level.classTableName, class_num, 0 ); loadoutPerk1 = table_getPerk( level.classTableName, class_num, 1 ); loadoutPerk2 = table_getPerk( level.classTableName, class_num, 2 ); loadoutPerk3 = table_getPerk( level.classTableName, class_num, 3 ); loadoutOffhand = table_getOffhand( level.classTableName, class_num ); loadoutDeathstreak = table_getDeathstreak( level.classTableName, class_num ); }
if ( !(isDefined( self.pers["copyCatLoadout"] ) && self.pers["copyCatLoadout"]["inUse"] && allowCopycat) ) { isCustomClass = isSubstr( class, "custom" ); if ( !isValidPrimary( loadoutPrimary ) || (isCustomClass && !self isItemUnlocked( loadoutPrimary )) ) loadoutPrimary = table_getWeapon( level.classTableName, 10, 0 ); if ( !isValidAttachment( loadoutPrimaryAttachment ) || (isCustomClass && !self isItemUnlocked( loadoutPrimary + " " + loadoutPrimaryAttachment )) ) loadoutPrimaryAttachment = table_getWeaponAttachment( level.classTableName, 10, 0 , 0); if ( !isValidAttachment( loadoutPrimaryAttachment2 ) || (isCustomClass && !self isItemUnlocked( loadoutPrimary + " " + loadoutPrimaryAttachment2 )) ) loadoutPrimaryAttachment2 = table_getWeaponAttachment( level.classTableName, 10, 0, 1 ); if ( !isValidCamo( loadoutPrimaryCamo ) || (isCustomClass && !self isItemUnlocked( loadoutPrimary + " " + loadoutPrimaryCamo )) ) loadoutPrimaryCamo = table_getWeaponCamo( level.classTableName, 10, 0 ); if ( !isValidSecondary( loadoutSecondary ) || (isCustomClass && !self isItemUnlocked( loadoutSecondary )) ) loadoutSecondary = table_getWeapon( level.classTableName, 10, 1 ); if ( !isValidAttachment( loadoutSecondaryAttachment ) || (isCustomClass && !self isItemUnlocked( loadoutSecondary + " " + loadoutSecondaryAttachment )) ) loadoutSecondaryAttachment = table_getWeaponAttachment( level.classTableName, 10, 1 , 0); if ( !isValidAttachment( loadoutSecondaryAttachment2 ) || (isCustomClass && !self isItemUnlocked( loadoutSecondary + " " + loadoutSecondaryAttachment2 )) ) loadoutSecondaryAttachment2 = table_getWeaponAttachment( level.classTableName, 10, 1, 1 );; if ( !isValidCamo( loadoutSecondaryCamo ) || (isCustomClass && !self isItemUnlocked( loadoutSecondary + " " + loadoutSecondaryCamo )) ) loadoutSecondaryCamo = table_getWeaponCamo( level.classTableName, 10, 1 ); if ( !isValidEquipment( loadoutEquipment ) || (isCustomClass && !self isItemUnlocked( loadoutEquipment )) ) loadoutEquipment = table_getEquipment( level.classTableName, 10, 0 ); if ( !isValidPerk1( loadoutPerk1 ) || (isCustomClass && !self isItemUnlocked( loadoutPerk1 )) ) loadoutPerk1 = table_getPerk( level.classTableName, 10, 1 ); if ( !isValidPerk2( loadoutPerk2 ) || (isCustomClass && !self isItemUnlocked( loadoutPerk2 )) ) loadoutPerk2 = table_getPerk( level.classTableName, 10, 2 ); if ( !isValidPerk3( loadoutPerk3 ) || (isCustomClass && !self isItemUnlocked( loadoutPerk3 )) ) loadoutPerk3 = table_getPerk( level.classTableName, 10, 3 ); if ( !isValidOffhand( loadoutOffhand ) ) loadoutOffhand = table_getOffhand( level.classTableName, 10 ); if ( !isValidDeathstreak( loadoutDeathstreak ) || (isCustomClass && !self isItemUnlocked( loadoutDeathstreak )) ) loadoutDeathstreak = table_getDeathstreak( level.classTableName, 10 ); }
if ( loadoutPerk1 != "specialty_bling" ) { loadoutPrimaryAttachment2 = "none"; loadoutSecondaryAttachment2 = "none"; } if ( loadoutPerk1 != "specialty_onemanarmy" && loadoutSecondary == "onemanarmy" ) loadoutSecondary = table_getWeapon( level.classTableName, 10, 1 );
loadoutSecondaryCamo = "none";
if ( level.killstreakRewards ) { loadoutKillstreak1 = self getPlayerData( "killstreaks", 0 ); loadoutKillstreak2 = self getPlayerData( "killstreaks", 1 ); loadoutKillstreak3 = self getPlayerData( "killstreaks", 2 ); } else { loadoutKillstreak1 = "none"; loadoutKillstreak2 = "none"; loadoutKillstreak3 = "none"; } secondaryName = buildWeaponName( loadoutSecondary, loadoutSecondaryAttachment, loadoutSecondaryAttachment2 ); self _giveWeapon( secondaryName, int(tableLookup( "mp/camoTable.csv", 1, loadoutSecondaryCamo, 0 ) ) );
self.loadoutPrimaryCamo = int(tableLookup( "mp/camoTable.csv", 1, loadoutPrimaryCamo, 0 )); self.loadoutPrimary = loadoutPrimary; self.loadoutSecondary = loadoutSecondary; self.loadoutSecondaryCamo = int(tableLookup( "mp/camoTable.csv", 1, loadoutSecondaryCamo, 0 )); self SetOffhandPrimaryClass( "other" ); // Action Slots self _SetActionSlot( 1, "" ); //self _SetActionSlot( 1, "nightvision" ); self _SetActionSlot( 3, "altMode" ); self _SetActionSlot( 4, "" );
// Perks self _clearPerks(); self _detachAll(); // these special case giving pistol death have to come before // perk loadout to ensure player perk icons arent overwritten if ( level.dieHardMode ) self maps\mp\perks\_perks::givePerk( "specialty_pistoldeath" ); // only give the deathstreak for the initial spawn for this life. if ( loadoutDeathStreak != "specialty_null" && getTime() == self.spawnTime ) { deathVal = int( tableLookup( "mp/perkTable.csv", 1, loadoutDeathStreak, 6 ) ); if ( self getPerkUpgrade( loadoutPerk1 ) == "specialty_rollover" || self getPerkUpgrade( loadoutPerk2 ) == "specialty_rollover" || self getPerkUpgrade( loadoutPerk3 ) == "specialty_rollover" ) deathVal -= 1; if ( self.pers["cur_death_streak"] == deathVal ) { self thread maps\mp\perks\_perks::givePerk( loadoutDeathStreak ); self thread maps\mp\gametypes\_hud_message::splashNotify( loadoutDeathStreak ); } else if ( self.pers["cur_death_streak"] > deathVal ) { self thread maps\mp\perks\_perks::givePerk( loadoutDeathStreak ); } }
self loadoutAllPerks( loadoutEquipment, loadoutPerk1, loadoutPerk2, loadoutPerk3 ); self setKillstreaks( loadoutKillstreak1, loadoutKillstreak2, loadoutKillstreak3 ); if ( self hasPerk( "specialty_extraammo", true ) && getWeaponClass( secondaryName ) != "weapon_projectile" ) self giveMaxAmmo( secondaryName );
// Primary Weapon primaryName = buildWeaponName( loadoutPrimary, loadoutPrimaryAttachment, loadoutPrimaryAttachment2 ); self _giveWeapon( primaryName, self.loadoutPrimaryCamo ); // fix changing from a riotshield class to a riotshield class during grace period not giving a shield if ( primaryName == "riotshield_mp" && level.inGracePeriod ) self notify ( "weapon_change", "riotshield_mp" );
if ( self hasPerk( "specialty_extraammo", true ) ) self giveMaxAmmo( primaryName );
self setSpawnWeapon( primaryName ); primaryTokens = strtok( primaryName, "_" ); self.pers["primaryWeapon"] = primaryTokens[0]; // Primary Offhand was given by givePerk (it's your perk1) // Secondary Offhand offhandSecondaryWeapon = loadoutOffhand + "_mp"; if ( loadoutOffhand == "flash_grenade" ) self SetOffhandSecondaryClass( "flash" ); else self SetOffhandSecondaryClass( "smoke" ); self giveWeapon( offhandSecondaryWeapon ); if( loadOutOffhand == "smoke_grenade" ) self setWeaponAmmoClip( offhandSecondaryWeapon, 1 ); else if( loadOutOffhand == "flash_grenade" ) self setWeaponAmmoClip( offhandSecondaryWeapon, 2 ); else if( loadOutOffhand == "concussion_grenade" ) self setWeaponAmmoClip( offhandSecondaryWeapon, 2 ); else self setWeaponAmmoClip( offhandSecondaryWeapon, 1 ); primaryWeapon = primaryName; self.primaryWeapon = primaryWeapon; self.secondaryWeapon = secondaryName;
self maps\mp\gametypes\_teams::playerModelForWeapon( self.pers["primaryWeapon"], getBaseWeaponName( secondaryName ) ); self.isSniper = (weaponClass( self.primaryWeapon ) == "sniper"); self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
// cac specialties that require loop threads self maps\mp\perks\_perks::cac_selector(); self notify ( "changed_kit" ); self notify ( "giveLoadout" ); }
_detachAll() { if ( isDefined( self.hasRiotShield ) && self.hasRiotShield ) { if ( self.hasRiotShieldEquipped ) { self DetachShieldModel( "weapon_riot_shield_mp", "tag_weapon_left" ); self.hasRiotShieldEquipped = false; } else { self DetachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" ); } self.hasRiotShield = false; } self detachAll(); }
isPerkUpgraded( perkName ) { perkUpgrade = tablelookup( "mp/perktable.csv", 1, perkName, 8 ); if ( perkUpgrade == "" || perkUpgrade == "specialty_null" ) return false; if ( !self isItemUnlocked( perkUpgrade ) ) return false; return true; }
getPerkUpgrade( perkName ) { perkUpgrade = tablelookup( "mp/perktable.csv", 1, perkName, 8 ); if ( perkUpgrade == "" || perkUpgrade == "specialty_null" ) return "specialty_null"; if ( !self isItemUnlocked( perkUpgrade ) ) return "specialty_null"; return ( perkUpgrade ); }
loadoutAllPerks( loadoutEquipment, loadoutPerk1, loadoutPerk2, loadoutPerk3 ) { loadoutEquipment = maps\mp\perks\_perks::validatePerk( 1, loadoutEquipment ); loadoutPerk1 = maps\mp\perks\_perks::validatePerk( 1, loadoutPerk1 ); loadoutPerk2 = maps\mp\perks\_perks::validatePerk( 2, loadoutPerk2 ); loadoutPerk3 = maps\mp\perks\_perks::validatePerk( 3, loadoutPerk3 );
self maps\mp\perks\_perks::givePerk( loadoutEquipment ); self maps\mp\perks\_perks::givePerk( loadoutPerk1 ); self maps\mp\perks\_perks::givePerk( loadoutPerk2 ); self maps\mp\perks\_perks::givePerk( loadoutPerk3 ); perkUpgrd[0] = tablelookup( "mp/perktable.csv", 1, loadoutPerk1, 8 ); perkUpgrd[1] = tablelookup( "mp/perktable.csv", 1, loadoutPerk2, 8 ); perkUpgrd[2] = tablelookup( "mp/perktable.csv", 1, loadoutPerk3, 8 ); foreach( upgrade in perkUpgrd ) { if ( upgrade == "" || upgrade == "specialty_null" ) continue; if ( self isItemUnlocked( upgrade ) ) self maps\mp\perks\_perks::givePerk( upgrade ); }
}
trackRiotShield() { self endon ( "death" ); self endon ( "disconnect" );
self.hasRiotShield = self hasWeapon( "riotshield_mp" ); self.hasRiotShieldEquipped = (self.currentWeaponAtSpawn == "riotshield_mp"); // note this function must play nice with _detachAll(). if ( self.hasRiotShield ) { if ( self.hasRiotShieldEquipped ) { self AttachShieldModel( "weapon_riot_shield_mp", "tag_weapon_left" ); } else { self AttachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" ); } } for ( ;; ) { self waittill ( "weapon_change", newWeapon ); if ( newWeapon == "riotshield_mp" ) { // defensive check in case we somehow get an extra "weapon_change" if ( self.hasRiotShieldEquipped ) continue; if ( self.hasRiotShield ) self MoveShieldModel( "weapon_riot_shield_mp", "tag_shield_back", "tag_weapon_left" ); else self AttachShieldModel( "weapon_riot_shield_mp", "tag_weapon_left" ); self.hasRiotShield = true; self.hasRiotShieldEquipped = true; } else if ( (self IsMantling()) && (newWeapon == "none") ) { // Do nothing, we want to keep that weapon on their arm. } else if ( self.hasRiotShieldEquipped ) { assert( self.hasRiotShield ); self.hasRiotShield = self hasWeapon( "riotshield_mp" ); if ( self.hasRiotShield ) self MoveShieldModel( "weapon_riot_shield_mp", "tag_weapon_left", "tag_shield_back" ); else self DetachShieldModel( "weapon_riot_shield_mp", "tag_weapon_left" ); self.hasRiotShieldEquipped = false; } else if ( self.hasRiotShield ) { if ( !self hasWeapon( "riotshield_mp" ) ) { // we probably just lost all of our weapons (maybe switched classes) self DetachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" ); self.hasRiotShield = false; } } } }
tryAttach( placement ) // deprecated; hopefully we won't need to bring this defensive function back { if ( !isDefined( placement ) || placement != "back" ) tag = "tag_weapon_left"; else tag = "tag_shield_back"; attachSize = self getAttachSize(); for ( i = 0; i < attachSize; i++ ) { attachedTag = self getAttachTagName( i ); if ( attachedTag == tag && self getAttachModelName( i ) == "weapon_riot_shield_mp" ) { return; } } self AttachShieldModel( "weapon_riot_shield_mp", tag ); }
tryDetach( placement ) // deprecated; hopefully we won't need to bring this defensive function back { if ( !isDefined( placement ) || placement != "back" ) tag = "tag_weapon_left"; else tag = "tag_shield_back"; attachSize = self getAttachSize(); for ( i = 0; i < attachSize; i++ ) { attachedModel = self getAttachModelName( i ); if ( attachedModel == "weapon_riot_shield_mp" ) { self DetachShieldModel( attachedModel, tag); return; } } return; }
buildWeaponName( baseName, attachment1, attachment2 ) { if ( !isDefined( level.letterToNumber ) ) level.letterToNumber = makeLettersToNumbers();
// disable bling when perks are disabled if ( getDvarInt ( "scr_game_perks" ) == 0 ) { attachment2 = "none";
if ( baseName == "onemanarmy" ) return ( "beretta_mp" ); }
weaponName = baseName; attachments = [];
if ( attachment1 != "none" && attachment2 != "none" ) { if ( level.letterToNumber[attachment1[0]] < level.letterToNumber[attachment2[0]] ) { attachments[0] = attachment1; attachments[1] = attachment2; } else if ( level.letterToNumber[attachment1[0]] == level.letterToNumber[attachment2[0]] ) { if ( level.letterToNumber[attachment1[1]] < level.letterToNumber[attachment2[1]] ) { attachments[0] = attachment1; attachments[1] = attachment2; } else { attachments[0] = attachment2; attachments[1] = attachment1; } } else { attachments[0] = attachment2; attachments[1] = attachment1; } } else if ( attachment1 != "none" ) { attachments[0] = attachment1; } else if ( attachment2 != "none" ) { attachments[0] = attachment2; } foreach ( attachment in attachments ) { weaponName += "_" + attachment; }
if ( !isValidWeapon( weaponName + "_mp" ) ) return ( baseName + "_mp" ); else return ( weaponName + "_mp" ); }
makeLettersToNumbers() { array = []; array["a"] = 0; array["b"] = 1; array["c"] = 2; array["d"] = 3; array["e"] = 4; array["f"] = 5; array["g"] = 6; array["h"] = 7; array["i"] = 8; array["j"] = 9; array["k"] = 10; array["l"] = 11; array["m"] = 12; array["n"] = 13; array["o"] = 14; array["p"] = 15; array["q"] = 16; array["r"] = 17; array["s"] = 18; array["t"] = 19; array["u"] = 20; array["v"] = 21; array["w"] = 22; array["x"] = 23; array["y"] = 24; array["z"] = 25; return array; }
setKillstreaks( streak1, streak2, streak3 ) { self.killStreaks = [];
if ( self _hasPerk( "specialty_hardline" ) ) modifier = -1; else modifier = 0; /*if ( streak1 == "none" && streak2 == "none" && streak3 == "none" ) { streak1 = "uav"; streak2 = "precision_airstrike"; streak3 = "helicopter"; }*/
killStreaks = [];
if ( streak1 != "none" ) { //if ( !level.splitScreen ) streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak1, 4 ) ); //else // streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak1, 5 ) ); killStreaks[streakVal + modifier] = streak1; }
if ( streak2 != "none" ) { //if ( !level.splitScreen ) streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak2, 4 ) ); //else // streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak2, 5 ) ); killStreaks[streakVal + modifier] = streak2; }
if ( streak3 != "none" ) { //if ( !level.splitScreen ) streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak3, 4 ) ); //else // streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak3, 5 ) ); killStreaks[streakVal + modifier] = streak3; }
// foreach doesn't loop through numbers arrays in number order; it loops through the elements in the order // they were added. We'll use this to fix it for now. maxVal = 0; foreach ( streakVal, streakName in killStreaks ) { if ( streakVal > maxVal ) maxVal = streakVal; }
for ( streakIndex = 0; streakIndex <= maxVal; streakIndex++ ) { if ( !isDefined( killStreaks[streakIndex] ) ) continue; streakName = killStreaks[streakIndex]; self.killStreaks[ streakIndex ] = killStreaks[ streakIndex ]; } // end lameness
// defcon rollover maxRollOvers = 10; newKillstreaks = self.killstreaks; for ( rollOver = 1; rollOver <= maxRollOvers; rollOver++ ) { foreach ( streakVal, streakName in self.killstreaks ) { newKillstreaks[ streakVal + (maxVal*rollOver) ] = streakName + "-rollover" + rollOver; } } self.killstreaks = newKillstreaks; }
replenishLoadout() // used by ammo hardpoint. { team = self.pers["team"]; class = self.pers["class"];
weaponsList = self GetWeaponsListAll(); for( idx = 0; idx < weaponsList.size; idx++ ) { weapon = weaponsList[idx];
self giveMaxAmmo( weapon ); self SetWeaponAmmoClip( weapon, 9999 );
if ( weapon == "claymore_mp" || weapon == "claymore_detonator_mp" ) self setWeaponAmmoStock( weapon, 2 ); } if ( self getAmmoCount( level.classGrenades[class]["primary"]["type"] ) < level.classGrenades[class]["primary"]["count"] ) self SetWeaponAmmoClip( level.classGrenades[class]["primary"]["type"], level.classGrenades[class]["primary"]["count"] );
if ( self getAmmoCount( level.classGrenades[class]["secondary"]["type"] ) < level.classGrenades[class]["secondary"]["count"] ) self SetWeaponAmmoClip( level.classGrenades[class]["secondary"]["type"], level.classGrenades[class]["secondary"]["count"] ); }
onPlayerConnecting() { for(;;) { level waittill( "connected", player );
if ( !isDefined( player.pers["class"] ) ) { player.pers["class"] = ""; } player.class = player.pers["class"]; player.lastClass = ""; player.detectExplosives = false; player.bombSquadIcons = []; player.bombSquadIds = []; } }
fadeAway( waitDelay, fadeDelay ) { wait waitDelay; self fadeOverTime( fadeDelay ); self.alpha = 0; }
setClass( newClass ) { self.curClass = newClass; }
getPerkForClass( perkSlot, className ) { class_num = getClassIndex( className );
if( isSubstr( className, "custom" ) ) return cac_getPerk( class_num, perkSlot ); else return table_getPerk( level.classTableName, class_num, perkSlot ); }
classHasPerk( className, perkName ) { return( getPerkForClass( 0, className ) == perkName || getPerkForClass( 1, className ) == perkName || getPerkForClass( 2, className ) == perkName ); }
isValidPrimary( refString ) { switch ( refString ) { case "riotshield": case "ak47": case "m16": case "m4": case "fn2000": case "deserteaglegold": case "masada": case "famas": case "fal": case "scar": case "tavor": case "mp5k": case "uzi": case "p90": case "kriss": case "ump45": case "barrett": case "wa2000": case "m21": case "cheytac": case "rpd": case "sa80": case "mg4": case "m240": case "aug": return true; default: assertMsg( "Replacing invalid primary weapon: " + refString ); return false; } }
isValidSecondary( refString ) { switch ( refString ) { case "beretta": case "usp": case "deserteagle": case "coltanaconda": case "deserteaglegold": case "glock": case "beretta393": case "pp2000": case "tmp": case "m79": case "rpg": case "at4": case "stinger": case "javelin": case "ranger": case "model1887": case "striker": case "aa12": case "m1014": case "spas12": case "onemanarmy": return true; default: assertMsg( "Replacing invalid secondary weapon: " + refString ); return false; } }
isValidAttachment( refString ) { switch ( refString ) { case "none": case "acog": case "reflex": case "silencer": case "grip": case "gl": case "akimbo": case "thermal": case "shotgun": case "heartbeat": case "fmj": case "rof": case "xmags": case "eotech": case "tactical": return true; default: assertMsg( "Replacing invalid equipment weapon: " + refString ); return false; } }
isValidCamo( refString ) { switch ( refString ) { case "none": case "woodland": case "desert": case "arctic": case "digital": case "red_urban": case "red_tiger": case "blue_tiger": case "orange_fall": return true; default: assertMsg( "Replacing invalid camo: " + refString ); return false; } }
isValidEquipment( refString ) { switch ( refString ) { case "frag_grenade_mp": case "semtex_mp": case "throwingknife_mp": case "specialty_tacticalinsertion": case "specialty_blastshield": case "claymore_mp": case "c4_mp": return true; default: assertMsg( "Replacing invalid equipment: " + refString ); return false; } }
isValidOffhand( refString ) { switch ( refString ) { case "flash_grenade": case "concussion_grenade": case "smoke_grenade": return true; default: assertMsg( "Replacing invalid offhand: " + refString ); return false; } }
isValidPerk1( refString ) { switch ( refString ) { case "specialty_marathon": case "specialty_fastreload": case "specialty_scavenger": case "specialty_bling": case "specialty_onemanarmy": return true; default: assertMsg( "Replacing invalid perk1: " + refString ); return false; } }
isValidPerk2( refString ) { switch ( refString ) { case "specialty_bulletdamage": case "specialty_lightweight": case "specialty_hardline": case "specialty_coldblooded": case "specialty_explosivedamage": return true; default: assertMsg( "Replacing invalid perk2: " + refString ); return false; } }
isValidPerk3( refString ) { switch ( refString ) { case "specialty_extendedmelee": case "specialty_bulletaccuracy": case "specialty_localjammer": case "specialty_heartbreaker": case "specialty_detectexplosive": case "specialty_pistoldeath": return true; default: assertMsg( "Replacing invalid perk3: " + refString ); return false; } }
isValidDeathStreak( refString ) { switch ( refString ) { case "specialty_copycat": case "specialty_combathigh": case "specialty_grenadepulldeath": case "specialty_finalstand": return true; default: assertMsg( "Replacing invalid death streak: " + refString ); return false; } }
isValidWeapon( refString ) { if ( !isDefined( level.weaponRefs ) ) { level.weaponRefs = [];
foreach ( weaponRef in level.weaponList ) level.weaponRefs[ weaponRef ] = true; }
if ( isDefined( level.weaponRefs[ refString ] ) ) return true;
assertMsg( "Replacing invalid weapon/attachment combo: " + refString ); return false; }
Posts: 30
Threads: 3
Joined: May 2011
Reputation:
4
01-27-2013, 15:54
(This post was last modified: 01-27-2013, 15:54 by banz.)
(01-27-2013, 13:11)Yamato Wrote: There is a function in _class.gsc with handgun names, try to add the deserteaglegold_mp there. I dont know if it will work
Yep, IW added those weapon check functions with some patch to prevent users from modifying their classes with a class editior to get weird overpowered classes.
Posts: 33
Threads: 7
Joined: Mar 2012
Reputation:
3
Can't thank you guys enough for the help, I got it all working fine now. Didn't realize there were any weapon checks like that.
|