// #autoload // #name = RedLoadoutChanger // #version = 0.2 // #date = July 29, 2002 // #author = |RedFox| // #warrior = |RedFox| // #email = rooievos@lycos.nl // #web = http://wep28-1.wep.tudelft.nl // #description = Fixes some issues if(!isObject(RedLoadoutChanger)) { new ScriptObject(RedLoadoutChanger) { class = RedLoadoutChanger; version = "0.2"; }; } package RedLoadoutChanger { function loadFavorite( %index, %echo ) { parent::loadFavorite( %index, !$pref::RedLoadoutChanger::Mute ); RedLoadoutChanger.currentFavorite = $pref::Favorite[%index]; // Work out the pack we're carrying, need to know the armour so we know // which field to check. There might be a better way of doin this :). %armour = getField($pref::Favorite[%index], 1); switch$ (%armour) { case "Scout": %pack = getField($pref::Favorite[%index], 9); case "Assault": %pack = getField($pref::Favorite[%index], 11); case "Juggernaut": %pack = getField($pref::Favorite[%index], 13); } RedFavouritePopup.Text[1].setText($pref::FavNames[%index]); RedFavouritePopup.Text[2].setText(%pack); if ($pref::RedLoadoutChanger::Popup) { if (RedFavouritePopup.schedule != 0) cancel(RedFavouritePopup.schedule); RedFavouritePopup.setVisible(true); RedFavouritePopup.schedule = schedule(5000, 0, eval, "RedFavouritePopup.setVisible(false);"); } } function addQuickPackFavorite( %pack, %item ) { if(%item $= "") %item = "Pack"; %packFailMsg = "You cannot use that equipment with your selected loadout."; if ( !isObject($Hud['inventoryScreen'].staticData[1, 1]) || $Hud['inventoryScreen'].staticData[1, 1].getValue() $= "" ) { %currentFav = RedLoadoutChanger.currentFavorite; for ( %i = 0; %i < getFieldCount( %currentFav ); %i++ ) { %type = getField( %currentFav, %i ); %equipment = getField( %currentFav, %i++ ); %invalidPack = checkPackValidity(%pack, %equipment, %item ); if(%invalidPack) { addMessageHudLine( %packFailMsg ); return; } if ( %type $= %item ) %favList = %favList @ %type TAB %pack @ "\t"; else %favList = %favList @ %type TAB %equipment @ "\t"; } } else { %armor = $Hud['inventoryScreen'].data[0, 1].getValue(); %invalidPack = checkPackValidity(%pack, %armor, %item ); if(%invalidPack) { addMessageHudLine( %packFailMsg ); return; } %favList = $Hud['inventoryScreen'].data[0, 1].type TAB %armor; for ( %i = 1; %i < $Hud['inventoryScreen'].count; %i++ ) { %type = $Hud['inventoryScreen'].data[%i, 1].type; %equipment = $Hud['inventoryScreen'].data[%i, 1].getValue(); if(%type $= %item) %equipment = %pack; %invalidPack = checkPackValidity(%pack, %equipment, %item ); if(%invalidPack) { addMessageHudLine( %packFailMsg ); return; } %favList = %favList TAB %type TAB %equipment; } } if(!$pref::RedLoadoutChanger::Mute) addMessageHudLine( "Inventory updated to " @ %pack @ "." ); RedFavouritePopup.Text[2].setText(%pack); RedLoadoutChanger.currentFavorite = %favList; commandToServer( 'setClientFav', RedLoadoutChanger.currentFavorite ); if(isObject(cdcmGrenHud)) cdcmGrenHud.QuickChange(%pack, %item); } function nextPackFavorite(%val) { if(%val) { %currentFav = RedLoadoutChanger.currentFavorite; for(%i = 0; %i < getFieldCount( %currentFav ); %i++ ) { if(getField( %currentFav, %i ) $= "Pack") %currentPack = getField( %currentFav, %i++ ); } for(%i = 0; !($InvPack[%i] $= %currentPack); %i++) { %currentPackNumber = %i + 1; } %packSelected = false; for(%ii = %currentPackNumber == 16 ? 0 : %currentPackNumber + 1; !(%packSelected); %ii = %ii == 16 ? 0 : %ii + 1) { %packCompatible = true; for ( %i = 0; (%i < getFieldCount( %currentFav ) && %packCompatible); %i++ ) { %type = getField( %currentFav, %i ); %equipment = getField( %currentFav, %i++ ); %invalidPack = checkPackValidity($InvPack[%ii], %equipment, "Pack"); if(%invalidPack) %packCompatible = false; } if(%packCompatible) { addQuickPackFavorite( $InvPack[%ii], "Pack" ); %packSeleted = true; return; } } } } function prevPackFavorite(%val) { if(%val) { %currentFav = RedLoadoutChanger.currentFavorite; for(%i = 0; %i < getFieldCount( %currentFav ); %i++ ) { if(getField( %currentFav, %i ) $= "Pack") %currentPack = getField( %currentFav, %i++ ); } for(%i = 0; !($InvPack[%i] $= %currentPack); %i++) { %currentPackNumber = %i + 1; } %packSelected = false; for(%ii = %currentPackNumber == 0 ? 16 : %currentPackNumber - 1; !(%packSelected); %ii = %ii == 0 ? 16 : %ii - 1) { %packCompatible = true; for ( %i = 0; (%i < getFieldCount( %currentFav ) && %packCompatible); %i++ ) { %type = getField( %currentFav, %i ); %equipment = getField( %currentFav, %i++ ); %invalidPack = checkPackValidity($InvPack[%ii], %equipment, "Pack"); if(%invalidPack) %packCompatible = false; } if(%packCompatible) { addQuickPackFavorite( $InvPack[%ii], "Pack" ); %packSeleted = true; return; } } } } function nextGrenFavorite(%val) { if(%val) { %currentFav = RedLoadoutChanger.currentFavorite; for(%i = 0; %i < getFieldCount( %currentFav ); %i++ ) { if(getField( %currentFav, %i ) $= "Grenade") %currentGrenade = getField( %currentFav, %i++ ); } for(%i = 0; !($InvGrenade[%i] $= %currentGrenade); %i++) { %currentGrenadeNumber = %i + 1; } %grenadeSelected = false; for(%ii = %currentGrenadeNumber == 4 ? 0 : %currentGrenadeNumber + 1; !(%grenadeSelected); %ii = %ii == 4 ? 0 : %ii + 1) { %grenadeCompatible = true; for ( %i = 0; (%i < getFieldCount( %currentFav ) && %grenadeCompatible); %i++ ) { %type = getField( %currentFav, %i ); %equipment = getField( %currentFav, %i++ ); %invalidGrenade = checkPackValidity($InvGrenade[%ii], %equipment, "Grenade"); if(%invalidGrenade) %grenadeCompatible = false; } if(%grenadeCompatible) { addQuickPackFavorite( $InvGrenade[%ii], "Grenade" ); %grenadeSeleted = true; return; } } } } function prevGrenFavorite(%val) { if(%val) { %currentFav = RedLoadoutChanger.currentFavorite; for(%i = 0; %i < getFieldCount( %currentFav ); %i++ ) { if(getField( %currentFav, %i ) $= "Grenade") %currentGrenade = getField( %currentFav, %i++ ); } for(%i = 0; !($InvGrenade[%i] $= %currentGrenade); %i++) { %currentGrenadeNumber = %i + 1; } %grenadeSelected = false; for(%ii = %currentGrenadeNumber == 0 ? 4 : %currentGrenadeNumber - 1; !(%grenadeSelected); %ii = %ii == 0 ? 4 : %ii - 1) { %grenadeCompatible = true; for ( %i = 0; (%i < getFieldCount( %currentFav ) && %grenadeCompatible); %i++ ) { %type = getField( %currentFav, %i ); %equipment = getField( %currentFav, %i++ ); %invalidGrenade = checkPackValidity($InvGrenade[%ii], %equipment, "Grenade"); if(%invalidGrenade) %grenadeCompatible = false; } if(%grenadeCompatible) { addQuickPackFavorite( $InvGrenade[%ii], "Grenade" ); %grenadeSeleted = true; return; } } } } function DispatchLaunchMode() { if ($pref::RedLoadoutChanger::Popup $= "") { deleteVariables("$pref::RedLoadoutChanger::*"); $pref::RedLoadoutChanger::Popup = 0; $pref::RedLoadoutChanger::Mute = 1; } parent::DispatchLaunchMode(); } function OptionsDlg::onWake(%this) { if(!RedLoadoutChanger.bind) { $RemapName[$RemapCount] = "RedNextPack"; $RemapCmd[$RemapCount] = "nextPackFavorite"; $RemapCount++; $RemapName[$RemapCount] = "RedPrevPack"; $RemapCmd[$RemapCount] = "prevPackFavorite"; $RemapCount++; $RemapName[$RemapCount] = "RedNextGren"; $RemapCmd[$RemapCount] = "nextGrenFavorite"; $RemapCount++; $RemapName[$RemapCount] = "RedPrevGren"; $RemapCmd[$RemapCount] = "prevGrenFavorite"; $RemapCount++; RedLoadoutChanger.bind = true; } parent::onWake(%this); } function clientCmdTogglePlayHuds(%val) { parent::clientCmdTogglePlayHuds(%val); if (!$pref::RedLoadoutChanger::Popup) RedFavouritePopup.setVisible(%val); } function ClientCmdDisplayHuds() { parent::ClientCmdDisplayHuds(); if ($pref::RedLoadoutChanger::Popup) return; switch$ ($HudMode) { case "Pilot": RedFavouritePopup.setVisible(true); case "Passenger": RedFavouritePopup.setVisible(true); // Er what's an "object"? case "Object": RedFavouritePopup.setVisible(false); case "Observer": RedFavouritePopup.setVisible(true); case "PickTeam": RedFavouritePopup.setVisible(false); default: RedFavouritePopup.setVisible(true); } } function LoadingGui::onWake(%this) { if (!$RedFavouriteCreate) { RedFavouriteCreate(); if (isObject(HudMover)) hudmover::addhud(RedFavouritePopup, "RedLoadoutChanger HUD"); $RedFavouriteCreate = true; } parent::onWake(%this); } function RedFavouriteCreate() { RedFavouriteDestroy(); %x = getWord(hudClusterBack.position, 0)-26; %y = getWord(hudClusterBack.position, 1)+40; new HudScoreCtrl(RedFavouritePopup) { profile = "HudScoreProfile"; horizSizing = "left"; vertSizing = "bottom"; position = %x SPC %y; extent = "126 32"; minExtent = "8 8"; visible = 1; }; RedFavouritePopup.enableHorzSeparator(); RedFavouritePopup.Text[1] = new GuiTextCtrl() { profile = "GuiTextObjGreenCenterProfile"; horizSizing = "center"; vertSizing = "bottom"; position = "3 3"; extent = "122 16"; visible = "1"; }; RedFavouritePopup.Text[2] = new GuiTextCtrl() { profile = "GuiTextObjHudCenterProfile"; horizSizing = "center"; vertSizing = "bottom"; position = "3 19"; extent = "122 16"; visible = "1"; }; RedFavouritePopup.add(RedFavouritePopup.Text[1]); RedFavouritePopup.add(RedFavouritePopup.Text[2]); playgui.add(RedFavouritePopup); } function RedFavouriteDestroy() { if (isObject(RedFavouritePopup)) { playGui.remove(RedFavouritePopup); RedFavouritePopup.delete(); } } }; activatePackage(RedLoadoutChanger);