mirror of
https://github.com/ineedbots/iw4_bot_warfare.git
synced 2025-04-22 22:05:44 +00:00
specialist
This commit is contained in:
parent
5755bb3e3f
commit
8e2c54a749
@ -75,10 +75,11 @@ init()
|
|||||||
level.killstreakHud = getDvarInt("scr_killstreakHud");
|
level.killstreakHud = getDvarInt("scr_killstreakHud");
|
||||||
level.killStreakMod = getDvarInt( "scr_killstreak_mod" );
|
level.killStreakMod = getDvarInt( "scr_killstreak_mod" );
|
||||||
|
|
||||||
level.allowSpecialist = getDvarInt( "scr_allow_specialist" );
|
level.allowSpecialist = getDvarInt( "scr_specialist" );
|
||||||
level.specialistPerk1 = getDvar("scr_specialist_perks1");
|
level.specialistPerk1 = getDvar("scr_specialist_perks1");
|
||||||
level.specialistPerk2 = getDvar("scr_specialist_perks2");
|
level.specialistPerk2 = getDvar("scr_specialist_perks2");
|
||||||
level.specialistPerk3 = getDvar("scr_specialist_perks3");
|
level.specialistPerk3 = getDvar("scr_specialist_perks3");
|
||||||
|
level.specialistData = [];
|
||||||
|
|
||||||
if (level.allowSpecialist)
|
if (level.allowSpecialist)
|
||||||
{
|
{
|
||||||
@ -186,15 +187,8 @@ onPlayerChangeKit()
|
|||||||
self waittill( "changed_kit" );
|
self waittill( "changed_kit" );
|
||||||
self giveOwnedKillstreakItem();
|
self giveOwnedKillstreakItem();
|
||||||
|
|
||||||
if (level.allowSpecialist)
|
self startSpecialist();
|
||||||
{
|
self startKSHud();
|
||||||
self startSpecialist();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (level.killstreakHud == 1)
|
|
||||||
self thread initKillstreakHud( 145 );
|
|
||||||
else if (level.killstreakHud == 2)
|
|
||||||
self thread initMW3KillstreakHud();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -567,6 +561,33 @@ killstreakEarned( streakName )
|
|||||||
rewardNotify( streakName, streakVal )
|
rewardNotify( streakName, streakVal )
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
data = level.specialistData[streakName];
|
||||||
|
|
||||||
|
if (isDefined(data))
|
||||||
|
{
|
||||||
|
perk = streakName;
|
||||||
|
name = data.name;
|
||||||
|
description = data.description;
|
||||||
|
shader = data.shader;
|
||||||
|
|
||||||
|
proPerk = tablelookup( "mp/perktable.csv", 1, perk, 8 );
|
||||||
|
hasProPerk = self isItemUnlocked(proPerk);
|
||||||
|
|
||||||
|
if (hasProPerk)
|
||||||
|
shader = data.shader_pro;
|
||||||
|
|
||||||
|
notifyData = spawnStruct();
|
||||||
|
|
||||||
|
notifyData.glowColor = getGoodColor();
|
||||||
|
notifyData.hideWhenInMenu = false;
|
||||||
|
notifyData.titleText = name;
|
||||||
|
notifyData.notifyText = description;
|
||||||
|
notifyData.iconName = shader;
|
||||||
|
notifyData.sound = "mp_bonus_start";
|
||||||
|
|
||||||
|
self maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
self maps\mp\gametypes\_hud_message::killstreakSplashNotify( streakName, streakVal );
|
self maps\mp\gametypes\_hud_message::killstreakSplashNotify( streakName, streakVal );
|
||||||
}
|
}
|
||||||
@ -614,7 +635,7 @@ giveKillstreak( streakName, isEarned, awardXp, owner )
|
|||||||
|
|
||||||
// probably obsolete unless we bring back the autoshotty
|
// probably obsolete unless we bring back the autoshotty
|
||||||
if ( isdefined( level.killstreakSetupFuncs[ streakName ] ) )
|
if ( isdefined( level.killstreakSetupFuncs[ streakName ] ) )
|
||||||
self [[ level.killstreakSetupFuncs[ streakName ] ]]();
|
self [[ level.killstreakSetupFuncs[ streakName ] ]]( streakName );
|
||||||
|
|
||||||
if ( isDefined( isEarned ) && isEarned && isDefined( awardXp ) && awardXp )
|
if ( isDefined( isEarned ) && isEarned && isDefined( awardXp ) && awardXp )
|
||||||
self notify( "received_earned_killstreak" );
|
self notify( "received_earned_killstreak" );
|
||||||
@ -678,6 +699,20 @@ getKillstreakWeapon( streakName )
|
|||||||
|
|
||||||
getKillstreakIcon( streakName )
|
getKillstreakIcon( streakName )
|
||||||
{
|
{
|
||||||
|
data = level.specialistData[streakName];
|
||||||
|
if (isDefined(data))
|
||||||
|
{
|
||||||
|
perk = streakName;
|
||||||
|
shader = data.shader;
|
||||||
|
proPerk = tablelookup( "mp/perktable.csv", 1, perk, 8 );
|
||||||
|
hasProPerk = self isItemUnlocked(proPerk);
|
||||||
|
|
||||||
|
if (hasProPerk)
|
||||||
|
shader = data.shader_pro;
|
||||||
|
|
||||||
|
return shader;
|
||||||
|
}
|
||||||
|
|
||||||
return tableLookup( KILLSTREAK_STRING_TABLE, 1, streakName, 14 );
|
return tableLookup( KILLSTREAK_STRING_TABLE, 1, streakName, 14 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -777,17 +812,17 @@ clearRideIntro( delay )
|
|||||||
|
|
||||||
destroyOnEvents(elem)
|
destroyOnEvents(elem)
|
||||||
{
|
{
|
||||||
self waittill_either("disconnect", "changed_kit");
|
self waittill_either("disconnect", "start_killstreak_hud");
|
||||||
elem destroy();
|
elem destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
initKillstreakHud(inity)
|
initKillstreakHud(inity)
|
||||||
{
|
{
|
||||||
self endon( "changed_kit" );
|
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
self notify( "start_killstreak_hud" );
|
||||||
|
self endon( "start_killstreak_hud" );
|
||||||
|
|
||||||
streakVals = GetArrayKeys(self.killStreaks);
|
streakVals = GetArrayKeys(self.killStreaks);
|
||||||
hasHardline = self _hasPerk("specialty_hardline");
|
|
||||||
|
|
||||||
self.killStreakHudElems = [];
|
self.killStreakHudElems = [];
|
||||||
|
|
||||||
@ -816,8 +851,6 @@ initKillstreakHud(inity)
|
|||||||
|
|
||||||
streakShader = getKillstreakIcon( streakName );
|
streakShader = getKillstreakIcon( streakName );
|
||||||
streakCost = streakVal;
|
streakCost = streakVal;
|
||||||
if (hasHardline)
|
|
||||||
streakCost--;
|
|
||||||
|
|
||||||
// each killstreak icon
|
// each killstreak icon
|
||||||
index = self.killStreakHudElems.size;
|
index = self.killStreakHudElems.size;
|
||||||
@ -826,7 +859,6 @@ initKillstreakHud(inity)
|
|||||||
self.killStreakHudElems[index].hideWhenInMenu = true;
|
self.killStreakHudElems[index].hideWhenInMenu = true;
|
||||||
self.killStreakHudElems[index].fontScale = 0.60;
|
self.killStreakHudElems[index].fontScale = 0.60;
|
||||||
self.killStreakHudElems[index].font = "hudbig";
|
self.killStreakHudElems[index].font = "hudbig";
|
||||||
self.killStreakHudElems[index].alpha = 1;
|
|
||||||
self.killStreakHudElems[index].glow = 1;
|
self.killStreakHudElems[index].glow = 1;
|
||||||
self.killStreakHudElems[index].glowColor = ( 0, 0, 1 );
|
self.killStreakHudElems[index].glowColor = ( 0, 0, 1 );
|
||||||
self.killStreakHudElems[index].glowAlpha = 1;
|
self.killStreakHudElems[index].glowAlpha = 1;
|
||||||
@ -865,7 +897,10 @@ initKillstreakHud(inity)
|
|||||||
isUnderAStreak = true;
|
isUnderAStreak = true;
|
||||||
self.killStreakHudElems[0] setPoint( "RIGHT", "RIGHT", -25, inity - 25 * (i - 1) );
|
self.killStreakHudElems[0] setPoint( "RIGHT", "RIGHT", -25, inity - 25 * (i - 1) );
|
||||||
self.killStreakHudElems[0] setText( streakElem.ks_cost - curStreak );
|
self.killStreakHudElems[0] setText( streakElem.ks_cost - curStreak );
|
||||||
|
streakElem.alpha = 0.5;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
streakElem.alpha = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isUnderAStreak && self.killStreakHudElems.size)
|
if (!isUnderAStreak && self.killStreakHudElems.size)
|
||||||
@ -878,11 +913,11 @@ initKillstreakHud(inity)
|
|||||||
|
|
||||||
initMW3KillstreakHud()
|
initMW3KillstreakHud()
|
||||||
{
|
{
|
||||||
self endon( "changed_kit" );
|
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
self notify( "start_killstreak_hud" );
|
||||||
|
self endon( "start_killstreak_hud" );
|
||||||
|
|
||||||
streakVals = GetArrayKeys(self.killStreaks);
|
streakVals = GetArrayKeys(self.killStreaks);
|
||||||
hasHardline = self _hasPerk("specialty_hardline");
|
|
||||||
|
|
||||||
self.killStreakHudElems = [];
|
self.killStreakHudElems = [];
|
||||||
self.killStreakShellsElems = [];
|
self.killStreakShellsElems = [];
|
||||||
@ -898,8 +933,6 @@ initMW3KillstreakHud()
|
|||||||
|
|
||||||
streakShader = getKillstreakIcon( streakName );
|
streakShader = getKillstreakIcon( streakName );
|
||||||
streakCost = streakVal;
|
streakCost = streakVal;
|
||||||
if (hasHardline)
|
|
||||||
streakCost--;
|
|
||||||
|
|
||||||
if (streakCost > highestStreak)
|
if (streakCost > highestStreak)
|
||||||
highestStreak = streakCost;
|
highestStreak = streakCost;
|
||||||
@ -986,27 +1019,30 @@ initMW3KillstreakHud()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getPerkDescription( perk )
|
getGoodColor()
|
||||||
{
|
{
|
||||||
//Intricate - Thanks to EMZ for the Black Ops variant, changed for MW2.
|
color = [];
|
||||||
//Intricate - This function gives the STRING for the PERK DESCRIPTION.
|
//Intricate - This is momo5502's code, rather interesting way too :D.
|
||||||
return tableLookUpIString( "mp/perkTable.csv", 1, perk, 4 );
|
for( i = 0; i < 3; i++ )
|
||||||
|
{
|
||||||
|
color[i] = randomint( 2 );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( color[0] == color[1] && color[1] == color[2] )
|
||||||
|
{
|
||||||
|
rand = randomint(3);
|
||||||
|
color[rand] += 1;
|
||||||
|
color[rand] %= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ( color[0], color[1], color[2] );
|
||||||
}
|
}
|
||||||
|
|
||||||
getPerkMaterial( perk )
|
getPerkMaterial( perk )
|
||||||
{
|
{
|
||||||
//Intricate - Thanks to EMZ for the Black Ops variant, changed for MW2.
|
|
||||||
//Intricate - This function gives the MATERIAL for the PERK. (Most of the time in MW2 the name of the perk = shader but other times it's not.)
|
|
||||||
return tableLookUp( "mp/perkTable.csv", 1, perk, 3 );
|
return tableLookUp( "mp/perkTable.csv", 1, perk, 3 );
|
||||||
}
|
}
|
||||||
|
|
||||||
getPerkString( perk )
|
|
||||||
{
|
|
||||||
//Intricate - Thanks to EMZ for the Black Ops variant, changed for MW2.
|
|
||||||
//Intricate - This function gives the STRING for the PERK.
|
|
||||||
return tableLookUpIString( "mp/perkTable.csv", 1, perk, 2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
initSpecialist()
|
initSpecialist()
|
||||||
{
|
{
|
||||||
PrecacheShader(getPerkMaterial(tablelookup( "mp/perktable.csv", 1, "specialty_scavenger", 8 )));
|
PrecacheShader(getPerkMaterial(tablelookup( "mp/perktable.csv", 1, "specialty_scavenger", 8 )));
|
||||||
@ -1037,6 +1073,7 @@ initSpecialist()
|
|||||||
PrecacheShader(getPerkMaterial("specialty_localjammer"));
|
PrecacheShader(getPerkMaterial("specialty_localjammer"));
|
||||||
PrecacheShader("specialty_onemanarmy");
|
PrecacheShader("specialty_onemanarmy");
|
||||||
PrecacheShader("specialty_onemanarmy_upgrade");
|
PrecacheShader("specialty_onemanarmy_upgrade");
|
||||||
|
PrecacheShader("specialty_none");
|
||||||
|
|
||||||
//Strings
|
//Strings
|
||||||
PrecacheString( &"PERKS_MARATHON" );
|
PrecacheString( &"PERKS_MARATHON" );
|
||||||
@ -1071,12 +1108,11 @@ initSpecialist()
|
|||||||
PrecacheString( &"PERKS_ABILITY_TO_SEEK_OUT_ENEMY" );
|
PrecacheString( &"PERKS_ABILITY_TO_SEEK_OUT_ENEMY" );
|
||||||
PrecacheString( &"PERKS_DESC_HEARTBREAKER" );
|
PrecacheString( &"PERKS_DESC_HEARTBREAKER" );
|
||||||
|
|
||||||
level.specialistData = [];
|
|
||||||
|
|
||||||
perks = [];
|
perks = [];
|
||||||
perks[perks.size] = strtok(level.specialistPerk1, ",");
|
perks[perks.size] = strtok(level.specialistPerk1, ",");
|
||||||
perks[perks.size] = strtok(level.specialistPerk2, ",");
|
perks[perks.size] = strtok(level.specialistPerk2, ",");
|
||||||
perks[perks.size] = strtok(level.specialistPerk3, ",");
|
perks[perks.size] = strtok(level.specialistPerk3, ",");
|
||||||
|
perks[perks.size] = strtok("specialty_none,specialty_onemanarmy", ",");
|
||||||
|
|
||||||
for (i = 0; i < perks.size; i++)
|
for (i = 0; i < perks.size; i++)
|
||||||
{
|
{
|
||||||
@ -1085,7 +1121,10 @@ initSpecialist()
|
|||||||
perk = perks[i][h];
|
perk = perks[i][h];
|
||||||
|
|
||||||
data = spawnStruct();
|
data = spawnStruct();
|
||||||
|
data.shader = getPerkMaterial(perk);
|
||||||
|
data.shader_pro = getPerkMaterial(tablelookup( "mp/perktable.csv", 1, perk, 8 ));
|
||||||
|
data.name = tableLookUpIString( "mp/perkTable.csv", 1, perk, 2 );
|
||||||
|
data.description = tableLookUpIString( "mp/perkTable.csv", 1, perk, 4 );
|
||||||
|
|
||||||
level.specialistData[perk] = data;
|
level.specialistData[perk] = data;
|
||||||
level.killstreakSetupFuncs[perk] = ::onGetPerkStreak;
|
level.killstreakSetupFuncs[perk] = ::onGetPerkStreak;
|
||||||
@ -1095,11 +1134,68 @@ initSpecialist()
|
|||||||
|
|
||||||
onGetPerkStreak(perk)
|
onGetPerkStreak(perk)
|
||||||
{
|
{
|
||||||
data = level.specialistData[perk];
|
proPerk = tablelookup( "mp/perktable.csv", 1, perk, 8 );
|
||||||
|
hasProPerk = self isItemUnlocked(proPerk);
|
||||||
|
|
||||||
|
self shuffleKillStreaksFILO( perk );
|
||||||
|
self giveOwnedKillstreakItem();
|
||||||
|
|
||||||
|
if (perk == "specialty_none")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else if (perk == "specialty_onemanarmy")
|
||||||
|
{
|
||||||
|
perks = [];
|
||||||
|
perks[perks.size] = strtok(level.specialistPerk1, ",");
|
||||||
|
perks[perks.size] = strtok(level.specialistPerk2, ",");
|
||||||
|
perks[perks.size] = strtok(level.specialistPerk3, ",");
|
||||||
|
|
||||||
|
for (i = 0; i < perks.size; i++)
|
||||||
|
{
|
||||||
|
for (h = 0; h < perks[i].size; h++)
|
||||||
|
{
|
||||||
|
perk = perks[i][h];
|
||||||
|
proPerk = tablelookup( "mp/perktable.csv", 1, perk, 8 );
|
||||||
|
|
||||||
|
self _setPerk(perk);
|
||||||
|
if ( self isItemUnlocked( proPerk ) )
|
||||||
|
self _setPerk(proPerk);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self _setPerk(perk);
|
||||||
|
if ( hasProPerk )
|
||||||
|
self _setPerk(proPerk);
|
||||||
|
}
|
||||||
|
|
||||||
|
self applySpecialistKillstreaks(); // maybe hardline changes the values
|
||||||
|
}
|
||||||
|
|
||||||
|
chooseAPerk(perks)
|
||||||
|
{
|
||||||
|
perks = strtok(perks, ",");
|
||||||
|
|
||||||
|
while (perks.size)
|
||||||
|
{
|
||||||
|
perk = random(perks);
|
||||||
|
perks = array_remove(perks, perk);
|
||||||
|
|
||||||
|
if (self _hasPerk(perk))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
return perk;
|
||||||
|
}
|
||||||
|
|
||||||
|
return "specialty_none";
|
||||||
}
|
}
|
||||||
|
|
||||||
startSpecialist()
|
startSpecialist()
|
||||||
{
|
{
|
||||||
|
if (!level.allowSpecialist)
|
||||||
|
return;
|
||||||
|
|
||||||
// only start if we have only the nuke killstreak
|
// only start if we have only the nuke killstreak
|
||||||
shouldDoSpecialist = undefined;
|
shouldDoSpecialist = undefined;
|
||||||
streakVals = GetArrayKeys(self.killStreaks);
|
streakVals = GetArrayKeys(self.killStreaks);
|
||||||
@ -1124,10 +1220,76 @@ startSpecialist()
|
|||||||
if (!isDefined(shouldDoSpecialist) || !shouldDoSpecialist)
|
if (!isDefined(shouldDoSpecialist) || !shouldDoSpecialist)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ( self _hasPerk( "specialty_hardline" ) && ( getDvarInt( "scr_classic" ) != 1 ) )
|
if (!isDefined(self.pers["specialist_perks"]))
|
||||||
|
self.pers["specialist_perks"] = [];
|
||||||
|
|
||||||
|
if (!isDefined(self.pers["specialist_perks"][self.class_num]))
|
||||||
|
{
|
||||||
|
self.pers["specialist_perks"][self.class_num] = [];
|
||||||
|
self.pers["specialist_perks"][self.class_num][0] = chooseAPerk(level.specialistPerk1);
|
||||||
|
self.pers["specialist_perks"][self.class_num][1] = chooseAPerk(level.specialistPerk2);
|
||||||
|
self.pers["specialist_perks"][self.class_num][2] = chooseAPerk(level.specialistPerk3);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.startKillStreaks = self.killStreaks;
|
||||||
|
self.startedWithHardline = (self _hasPerk( "specialty_hardline" ));
|
||||||
|
self applySpecialistKillstreaks();
|
||||||
|
|
||||||
|
// check cur_streak for perks
|
||||||
|
curStreak = self.pers["cur_kill_streak"];
|
||||||
|
streakVals = GetArrayKeys(self.killStreaks);
|
||||||
|
for (i = 0; i < streakVals.size; i++)
|
||||||
|
{
|
||||||
|
streakVal = streakVals[i];
|
||||||
|
streakName = self.killStreaks[streakVal];
|
||||||
|
|
||||||
|
if (!isSubStr(streakName, "specialty_"))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (curStreak < streakVal)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
self onGetPerkStreak(streakName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
applySpecialistKillstreaks()
|
||||||
|
{
|
||||||
|
if ( self _hasPerk( "specialty_hardline" ) )
|
||||||
modifier = -1;
|
modifier = -1;
|
||||||
else
|
else
|
||||||
modifier = 0;
|
modifier = 0;
|
||||||
|
|
||||||
|
killstreaks = [];
|
||||||
|
|
||||||
|
killstreaks[2 + modifier] = self.pers["specialist_perks"][self.class_num][0];
|
||||||
|
killstreaks[4 + modifier] = self.pers["specialist_perks"][self.class_num][1];
|
||||||
|
killstreaks[6 + modifier] = self.pers["specialist_perks"][self.class_num][2];
|
||||||
|
killstreaks[8 + modifier] = "specialty_onemanarmy";
|
||||||
|
|
||||||
|
streakVals = GetArrayKeys(self.startKillStreaks); // we assume that nuke val is above 8
|
||||||
|
|
||||||
|
for (i = 0; i < streakVals.size; i++)
|
||||||
|
{
|
||||||
|
streakVal = streakVals[i];
|
||||||
|
streakName = self.startKillStreaks[streakVal];
|
||||||
|
|
||||||
|
if (!self.startedWithHardline)
|
||||||
|
streakVal += modifier;
|
||||||
|
|
||||||
|
killstreaks[streakVal] = streakName;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.killStreaks = killstreaks;
|
||||||
|
|
||||||
|
// update the hud incase hardline changed the values
|
||||||
|
self startKSHud();
|
||||||
|
}
|
||||||
|
|
||||||
|
startKSHud()
|
||||||
|
{
|
||||||
|
if (level.killstreakHud == 1)
|
||||||
|
self thread initKillstreakHud( 145 );
|
||||||
|
else if (level.killstreakHud == 2)
|
||||||
|
self thread initMW3KillstreakHud();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user