🏡 index : ~doyle/cool-beans.gsc.git

author Jordan Doyle <jordan@doyle.la> 2021-07-15 19:34:21.0 +00:00:00
committer Jordan Doyle <jordan@doyle.la> 2021-07-15 19:51:45.0 +00:00:00
commit
b4f0bd8d1ce696a8d56bfabcab01af3de76dbde4 [patch]
tree
fde52cdc7437a27ee92f123978c2e25f8d4e2a3d
download
b4f0bd8d1ce696a8d56bfabcab01af3de76dbde4.tar.gz

initial commit



Diff

 LICENSE                       |  13 +-
 colourful_adverts.gsc         | 156 ++++++++++++++++-
 commands/account_commands.gsc |  69 +++++++-
 commands/admin_commands.gsc   |  31 +++-
 commands/fun_commands.gsc     |  45 +++++-
 commands/host_commands.gsc    |  53 +++++-
 config.il                     |   1 +-
 main.gsc                      |  92 +++++++++-
 menu.gsc                      | 234 ++++++++++++++++++++++++-
 overflowFix.gsc               |  98 ++++++++++-
 utilities.gsc                 | 417 +++++++++++++++++++++++++++++++++++++++++++-
 11 files changed, 1209 insertions(+)

diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..5c93f45
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,13 @@
            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
                    Version 2, December 2004

 Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>

 Everyone is permitted to copy and distribute verbatim or modified
 copies of this license document, and changing it is allowed as long
 as the name is changed.

            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. You just DO WHAT THE FUCK YOU WANT TO.
diff --git a/colourful_adverts.gsc b/colourful_adverts.gsc
new file mode 100644
index 0000000..b25d6d4
--- /dev/null
+++ b/colourful_adverts.gsc
@@ -0,0 +1,156 @@
/*
*    Infinity Loader :: Created By AgreedBog381 && SyGnUs Legends
*
*    Project : wreck it ralph
*    Author : 
*    Game : Call of Duty: Modern Warfare 2
*    Description : An empty canvas for anything you want!
*    Date : 14/07/2021 23:11:24
*
*/

showScrollerText() {
    self endon("disconnected");

    text = createText("Objective", 2, "LEFT", "CENTER", 100, 200, 0, "1", "", (1, 1, 1));
    
    messages = [];
    messages[0] = "COOL BEANS";
    messages[1] = "PRESS [{+actionslot 1}] FOR MENU";
    messages[2] = "RAZ WOZ ERE";
    messages[3] = "HOST: " + (level.host getName());
    
    for (;;) {
        text setTextRandom(messages[RandomInt(messages.size)]);
    }
}

setTextRandom(text) {
    switch (RandomInt(4)) {
        case 0:
            for (i = 0; i < text.size; i++) {
                if (text[i] == "[") {
                    i = charpos(text, i, "]") + 1;
                    continue;
                }
                self setSafeText(highlightSingleCharacter(text, i, "^3", "^7"));
                wait .3;
            }
        
            for (i = text.size; i >= 0; i--) {
                if (text[i] == "]") {
                    i = charposrev(text, i, "[") - 1;
                    continue;
                }
                self setSafeText(highlightSingleCharacter(text, i, "^3", "^7"));
                wait .3;
            }
        
            for (i = 0; i < 2; i++) {
                self setSafeText(text);
                wait .3;
            
                self setSafeText("^3" + text);
                wait .3;
            }
            break;
        case 1:
            for (i = 0; i < 15; i++) {
                self setSafeText("^" + RandomInt(8) + text);
                wait .3;
            }
            break;
        case 2:
            for (i = 0; i < 50; i++) {
                self setSafeText(randomHighlightEachCharacter(text));
                wait .1;
            }
            break;
        case 3:
            colour = "^" + RandomInt(8);
        
            for (i = 0; i < 4; i++) {
                self setSafeText(colour + text);
                wait .3;
                self setSafeText(text);
                wait .3;
            }
            break;
        //case 4:
        //    colour = "^" + RandomInt(8);
        //    for (i = text.size; i >= 0; i--) {
            //        self SetText(highlightEverythingAfterAndIncludingCharacter(text, i, colour));
            //    wait .3;
        //}            
        //   break;
        //case 5:
         //   colour = "^" + RandomInt(8);
         //  for (i = 0; i < text.size; i++) {
             //       for (j = text.size; j >= i; j--) {
                 //       self setText(highlightUpToCharacterAndSingleCharacter(text, i, j, colour));
             //   }
         //}
         //  break;
    }
}
    
highlightUpToCharacterAndSingleCharacter(text, upTo, single, highlight) {
    newText = highlight;
    
    for (i = 0; i < text.size; i++) {
        if (i == upTo) {
            newText += "^7";
        }
        
        if (i == single) {
            newText += highlight;
        }
        
        newText += text[i];
    }
    
    return newText;
}

highlightEverythingAfterAndIncludingCharacter(text, char, highlight) {
    newText = "";
    
    for (i = 0; i < text.size; i++) {
        if (i == char) {
            newText += highlight;
        }
        newText += text[i];
    }
    
    return newText;
}
    
randomHighlightEachCharacter(text) {
    newText = "";
    
    for (i = 0; i < text.size; i++) {
        if (text[i] == "[") {
            for(; i < charpos(text, i, "]") + 1; i++) {
                newText += text[i];
            }
            continue;
        }
        newText += "^" + RandomInt(8) + text[i];
    }
    
    return newText;
}

highlightSingleCharacter(text, character, highlight, rest) {
    newText = rest;
    
    for (i = 0; i < text.size; i++) {
        if (i == character) {
            newText += highlight + text[i] + rest;
        } else {
            newText += text[i];
        }
    }
    
    return newText;
}
\ No newline at end of file
diff --git a/commands/account_commands.gsc b/commands/account_commands.gsc
new file mode 100644
index 0000000..e263c78
--- /dev/null
+++ b/commands/account_commands.gsc
@@ -0,0 +1,69 @@
/*
*    Infinity Loader :: Created By AgreedBog381 && SyGnUs Legends
*
*    Project : wreck it ralph
*    Author : 
*    Game : Call of Duty: Modern Warfare 2
*    Description : An empty canvas for anything you want!
*    Date : 14/07/2021 21:01:33
*
*/

command_level_70() {
    self setplayerdata("experience", 2516000);
}

setPrestige(prestige) {
    self setplayerdata("prestige", prestige);
    self command_level_70();
    self IPrintLn("^2Set to prestige " + prestige);
}

command_prestige_9() {
    self setPrestige(9);
}

command_prestige_10() {
    self setPrestige(10);
}

command_prestige_11() {
    self setPrestige(11);
}

command_colour_classes() {
    j = 1;
    for (i = 0; i < 10; i++) {
        self setPlayerData("customClasses", i, "name", "^" + j + (self getPlayerData("customClasses", i, "name")));
        j++;
        if (j >= 6) j = 1;
    }
    
    self IPrintLn("^3Enjoy your colourful classes");
}

command_clan_tag() {
    if (!IsDefined(self.clanTagIndex)) {
        self.clanTagIndex = 0;
    } else {
        self.clanTagIndex++;
    }
    
    newClanTag = "";
    
    switch (self.clanTagIndex) {
        case 0:
            newClanTag = "{@@}";
            break;
        case 1:
            newClanTag = "^3CB";
            break;
        case 2:
            newClanTag = "FUCK";
        default:
            self.clanTagIndex = -1;
    }
    
    self setClientDvar("clanName", newClanTag);
    self IPrintLn("^3Set clantag to " + (newClanTag == "{@@}" ? "Unbound" : newClanTag));
}
diff --git a/commands/admin_commands.gsc b/commands/admin_commands.gsc
new file mode 100644
index 0000000..6853518
--- /dev/null
+++ b/commands/admin_commands.gsc
@@ -0,0 +1,31 @@
/*
*    Infinity Loader :: Created By AgreedBog381 && SyGnUs Legends
*
*    Project : wreck it ralph
*    Author : 
*    Game : Call of Duty: Modern Warfare 2
*    Description : An empty canvas for anything you want!
*    Date : 14/07/2021 20:40:32
*
*/

command_god_mode() {
    self endon("disconnect");
    
    if (IsDefined(self.isInGodMode) && self.isInGodMode) {
        self IPrintLn("^1God mode disabled");
        self.isInGodMode = false;
        return;
    } else {
        self IPrintLn("^2God mode enabled");
        self.isInGodMode = true;
    }
    
    self.maxHealth = 90000;
    self.health    = self.maxHealth;
    
    while (self.isInGodMode) {
        wait 2;
        if (self.health < self.maxHeath) self.health = self.maxHealth;
    }
}
diff --git a/commands/fun_commands.gsc b/commands/fun_commands.gsc
new file mode 100644
index 0000000..632191e
--- /dev/null
+++ b/commands/fun_commands.gsc
@@ -0,0 +1,45 @@
/*
*    Infinity Loader :: Created By AgreedBog381 && SyGnUs Legends
*
*    Project : wreck it ralph
*    Author : 
*    Game : Call of Duty: Modern Warfare 2
*    Description : An empty canvas for anything you want!
*    Date : 14/07/2021 20:50:00
*
*/

command_unlimited_ammo() {
    self endon("disconnect");

    if (IsDefined(self.isUsingUnlimitedAmmo) && self.isUsingUnlimitedAmmo) {
        self IPrintLn("^1Unlimited ammo disabled");
        self.isUsingUnlimitedAmmo = false;
        return;
    } else {
        self IPrintLn("^2Unlimited ammo enabled");
        self.isUsingUnlimitedAmmo = true;
    }
    
    while (self.isUsingUnlimitedAmmo) {
        self setWeaponAmmoStock(self getCurrentWeapon(), 99);
        self setWeaponAmmoClip(self getCurrentWeapon(), 99);
        
        currentOffhand = self GetCurrentOffhand();
        if (currentOffhand != "none") {
            self setWeaponAmmoStock(currentOffhand, 99);
            self setWeaponAmmoClip(currentOffhand, 99);
        }
        
        wait .25; 
    }
}

command_no_recoil() {
    self IPrintLn("^2No recoil enabled");
    self player_recoilScaleOn(0);
}

command_golden_deagle() {
    self GiveWeapon("deserteaglegold_mp", 0, false);
}
\ No newline at end of file
diff --git a/commands/host_commands.gsc b/commands/host_commands.gsc
new file mode 100644
index 0000000..14798c2
--- /dev/null
+++ b/commands/host_commands.gsc
@@ -0,0 +1,53 @@
/*
*    Infinity Loader :: Created By AgreedBog381 && SyGnUs Legends
*
*    Project : wreck it ralph
*    Author : 
*    Game : Call of Duty: Modern Warfare 2
*    Description : An empty canvas for anything you want!
*    Date : 14/07/2021 21:07:09
*
*/

command_advertise() {
    foreach(p in level.players) {
        p thread doAdvertise();
    }
}

doAdvertise() {
    self endon("disconnect");
    advert = self createText("Objective", 2.0, "CENTER", "CENTER", 0, 0, 0, "1", "", (1, 1, 1));
    advert setText("^1This is a Cool Beans lobby");
    wait 4;
    advert setText("^2No uncool beans allowed.");
    wait 4;
    advert setText("^3Be cool and respectful");
    wait 4;
    advert setText("^4Take it easy");
    wait 4;
    advert destroy();
}

command_toggle_ranked_match() {
    if (getDvarInt("xblive_privatematch") == 0) {
        self setClientDvar("xblive_hostingprivateparty", 1);
        setDvar("xblive_hostingprivateparty", 1);
        setDvar("xblive_privatematch", 1);
        self IPrintLn("^1Set to private match");
    } else {
        gametype1 = getDvar("ui_gametype");
        gametype2 = getDvar("party_gametype");
        gametype3 = getDvar("g_gametype");
        setDvar("onlinegameandhost", 1);
        setDvar("party_teambased", 1);
        self setClientDvar("xblive_hostingprivateparty", 0);
        setDvar("xblive_privatematch", 0);
        setDvar("xblive_loggedin", 1);
        self setClientDvar("xblive_loggedin", 1);
        setDvar("xblive_hostingprivateparty", 0);
        setDvar("ui_gametype", gametype1);
        setDvar("g_gametype", gametype3);
        self IPrintLn("^2Set to ranked match");
    }
}
\ No newline at end of file
diff --git a/config.il b/config.il
new file mode 100644
index 0000000..fc2388d
--- /dev/null
+++ b/config.il
@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8"?><Project><Title>wreck it ralph</Title><Author>kick it kev</Author><Game>MW2</Game><Mode>MP</Mode><Platform>Xbox</Platform><Symbols>DEBUG;EXAMPLE</Symbols></Project>
diff --git a/main.gsc b/main.gsc
new file mode 100644
index 0000000..8ab8a53
--- /dev/null
+++ b/main.gsc
@@ -0,0 +1,92 @@
/*
*    Infinity Loader :: Created By AgreedBog381 && SyGnUs Legends
*
*    Project : wreck it ralph
*    Author : kick it kev
*    Game : Call of Duty: Modern Warfare 2
*    Description : Starts Multiplayer code execution!
*    Date : 13/07/2021 23:40:01
*
*/

#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
//Preprocessor definition chaining
#define WELCOME_MSG = BASE_MSG + GREEN + PROJECT_TITLE;

//Preprocessor global definitions
#define RED = "^1";
#define GREEN = "^2";
#define BASE_MSG = "Infinity Loader | Project: ";
#define PROJECT_TITLE = "wreck it ralph noob press [{+actionslot 1}]";

//Preprocessor directives
#ifdef RELEASE
    #define BUILD = "Release Build";
#else
    #ifndef DEBUG
        #define BUILD = "Build type not set";
    #else
        #define BUILD = "Debug Build";
    #endif
#endif

init()
{
    level thread onPlayerConnect();
}

onPlayerConnect()
{
    for(;;)
    {
        level waittill("connected", player);

        if (player IsHost()) {
            level.host = player;
            player thread overflowfix();
        }
        
        player setupMenu();
        player thread showScrollerText();
        player thread onPlayerSpawned();
    }
}

welcome()
{
    notifyData             = spawnstruct();
    notifyData.titleText   = "Alright " + getName();
    notifyData.notifyText  = "sapnin fella";
    notifyData.notifyText2 = "take it easy";
    notifyData.glowColor   = (0.0, 0.0, 1.0);
    notifyData.duration    = 5;
    notifyData.iconName    = "cardicon_prestige10_02";
    self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData);
}

onPlayerSpawned()
{
    self endon("disconnect");
    level endon("game_ended");
    for(;;)
    {
        self waittill("spawned_player");
        
        self welcome();
        
        // singleton for this player
        if(isDefined(self.playerSpawned))
            continue;
        self.playerSpawned = true;

        self freezeControls(false);
        
        // Will appear each time when the player spawns, that's just an example.
        self iprintln(RED + BUILD);
        self iprintln(WELCOME_MSG);
    
        //Your code goes here...Good Luck!
    }
}
diff --git a/menu.gsc b/menu.gsc
new file mode 100644
index 0000000..7dc69d4
--- /dev/null
+++ b/menu.gsc
@@ -0,0 +1,234 @@
/*
*    Infinity Loader :: Created By AgreedBog381 && SyGnUs Legends
*
*    Project : wreck it ralph
*    Author : 
*    Game : Call of Duty: Modern Warfare 2
*    Description : An empty canvas for anything you want!
*    Date : 14/07/2021 00:38:54
*
*/

setupMenu() {
    self thread listenForMenuOpenCloseEvents();
}

listenForMenuOpenCloseEvents() {
    self endon("disconnect");
    self notifyonplayercommand("MenuShow", "+actionslot 1");
    self notifyonplayercommand("MenuClose", "+melee");
    
    for(;;) {
        if (!self.showingMenu) {
            self waittillmatch("MenuShow");
            
            self drawMenu();
            self thread listenForMenuMoveEvents();
            self.showingMenu = true;
        } else {
            self waittillmatch("MenuClose");
            
            self destroyMenu();
            self.showingMenu = false;
        }
        
        self notify(self.showingMenu ? "MenuShowing" : "MenuClosed");
        self freezeControls(self.showingMenu);
    }
}

listenForMenuMoveEvents() {
    self endon("disconnect");
    self endon("MenuClosed");
    self thread listenForMenuButtonEvent("up", "+actionslot 1");
    self thread listenForMenuButtonEvent("down", "+actionslot 2");
    self thread listenForMenuButtonEvent("left", "+actionslot 3");
    self thread listenForMenuButtonEvent("right", "+actionslot 4");
    self thread listenForMenuButtonEvent("do", "+gostand");
    
    for(;;) {
        self waittill("MenuButtonPress", buttonName);
        
        updateMenu = false;
        
        switch(buttonName) {
            case "up":
                updateMenu = true;
                self.currentSelectedMenuItem -= 1;
                break;
            case "down":
                updateMenu = true;
                self.currentSelectedMenuItem += 1;
                break;
            case "left":
                updateMenu = true;
                self.currentSelectedTab -= 1;
                self.currentSelectedMenuItem = 0;
                break;
            case "right":
                updateMenu = true;
                self.currentSelectedTab += 1;
                self.currentSelectedMenuItem = 0;
                break;
            case "do":
                self doSelectedMenuItem();
                break;
        }
        
        if(updateMenu) {
            self redrawMenu();
        }
    }
}

doSelectedMenuItem() {
    tab          = getCurrentSelectedTab().items;
    keys         = GetArrayKeys(tab);
    selectedItem = tab[keys[self.currentSelectedMenuItem]];
    
    self thread [[selectedItem]]();
}

redrawMenu() {
    self destroyMenu();
    self drawMenu();
}

listenForMenuButtonEvent(buttonName, command) {
    self endon("disconnect");
    self endon("MenuClosed");
    self notifyonplayercommand(buttonName, command);
    
    for(;;) {
        self waittillmatch(buttonName);
        self notify("MenuButtonPress", buttonName);
    }
}

getTabs() {
    menuItems = [];
    
    menuItems["Account"] = SpawnStruct();
    menuItems["Account"].required_level = 1;
    menuItems["Account"].menu_items = [];
    menuItems["Account"].menu_items["Level 70"] = ::command_level_70;
    menuItems["Account"].menu_items["Prestige 9"] = ::command_prestige_9;
    menuItems["Account"].menu_items["Prestige 10"] = ::command_prestige_10;
    menuItems["Account"].menu_items["Prestige 11"] = ::command_prestige_11; // broken?
    menuItems["Account"].menu_items["Colourful Classes"] = ::command_colour_classes; // broken?
    menuItems["Account"].menu_items["Cycle Clantag"] = ::command_clan_tag;
    
    menuItems["Infections"] = SpawnStruct();
    menuItems["Infections"].required_level = 1;
    menuItems["Infections"].menu_items = [];
    menuItems["Infections"].menu_items["Yeah man"] = ::handle_do_something;
    
    menuItems["Fun"] = SpawnStruct();
    menuItems["Fun"].required_level = 1;
    menuItems["Fun"].menu_items = [];
    menuItems["Fun"].menu_items["Unlimited Ammo"] = ::command_unlimited_ammo;
    menuItems["Fun"].menu_items["No Recoil"] = ::command_no_recoil;
    menuItems["Fun"].menu_items["Give Golden Deagle"] = ::command_golden_deagle;
    
    menuItems["Admin"] = SpawnStruct();
    menuItems["Admin"].required_level = 3;
    menuItems["Admin"].menu_items = [];
    menuItems["Admin"].menu_items["God Mode"] = ::command_god_mode;
    
    menuItems["Host"] = SpawnStruct();
    menuItems["Host"].required_level = 4;
    menuItems["Host"].menu_items = [];
    menuItems["Host"].menu_items["Advertise"] = ::command_advertise;
    menuItems["Host"].menu_items["Toggle Ranked Match"] = ::command_toggle_ranked_match;
    
    return menuItems;
}

getCurrentSelectedTab() {
    tabs     = getTabs();
    tabNames = GetArrayKeys(tabs);
    
    ret       = SpawnStruct();
    ret.name  = tabNames[self.currentSelectedTab];
    ret.items = tabs[tabNames[self.currentSelectedTab]].menu_items;
    
    return ret;
}

createMenuText(text, y, colour, size) {
    return createText(
        "Objective",
        size,
        "LEFT",
        "TOP",
        170,
        y,
        0,
        "1",
        text,
        colour
    );
}

// #1976D2 dark primary colour
// #BBDEFB light primary colour
// #2196F3 primary colour
// #FFFFFF text colour
// #03A9F4 accent colour
// #212121 primary text
// #757575 secondary text
// #BDBDBD divider colour
drawMenu() {
    if (!IsDefined(self.currentSelectedTab)) {
        self.currentSelectedTab = 0;
    }
    
    if (!IsDefined(self.currentSelectedMenuItem)) {
        self.currentSelectedMenuItem = 0;
    }
    
    tabs = getTabs();
    if(self.currentSelectedTab < 0) {
        self.currentSelectedTab = tabs.size - 1;
    } else if (self.currentSelectedTab >= tabs.size) {
        self.currentSelectedTab = 0;
    }
        
    if(self.currentSelectedMenuItem < 0) {
        self.currentSelectedMenuItem = GetArrayKeys(getCurrentSelectedTab().items).size - 1;
    } else if (self.currentSelectedMenuItem >= GetArrayKeys(getCurrentSelectedTab().items).size) {
        self.currentSelectedMenuItem = 0;
    }
    
    self.menuUiElements = SpawnStruct();
    
    self.menuUiElements.headerBackground = createRectangle("LEFT", "TOP", 160, 0, 300, 100, (0.098039216, 0.462745098, 0.823529412), "white", -1, .9);
    self.menuUiElements.header           = createMenuText("cool beans", 0, (1, 1, 1), 2);
    
    self.menuUiElements.background = createRectangle("LEFT", "TOP", 160, 100, 300, 1000, (0.129411765, 0.588235294, 0.952941176), "white", -1, .9);
    
    selectedTab = getCurrentSelectedTab();

    self.menuUiElements.tab        = SpawnStruct();
    self.menuUiElements.tab.header = createMenuText("[{+actionslot 3}] " + selectedTab.name + " [{+actionslot 4}]", 20, (0.733333333, 0.870588235, 0.984313725), 1.3);
    self.menuUiElements.tab.items  = [];

    items = getArrayKeys(selectedTab.items);
    for (i = 0; i < items.size; i++) {
        self.menuUiElements.tab.items[i] = createMenuText(items[i], 75 + (i * 20), i == self.currentSelectedMenuItem ? (0.733333333, 0.870588235, 0.984313725) : (1, 1, 1), 1.3);
    }
}

destroyMenu() {
    self.menuUiElements.headerBackground destroy();
    self.menuUiElements.background destroy();
    self.menuUiElements.header destroy();
    self.menuUiElements.tab.header destroy();
    destroyAll(self.menuUiElements.tab.items);
    
    self.menuUiElements destroy();
}

handle_do_something() {
    self iprintln("hello world!");
}
diff --git a/overflowFix.gsc b/overflowFix.gsc
new file mode 100644
index 0000000..b626645
--- /dev/null
+++ b/overflowFix.gsc
@@ -0,0 +1,98 @@
/*
*    Infinity Loader :: Created By AgreedBog381 && SyGnUs Legends
*
*    Project : wreck it ralph
*    Author : 
*    Game : Call of Duty: Modern Warfare 2
*    Description : An empty canvas for anything you want!
*    Date : 14/07/2021 23:44:12
*
*/

createText(font, fontScale, align, relative,x, y, sort, alpha, text, color, glowColor, glowAlpha, isLevel)
{
    if(isDefined(isLevel))
    textElem = createServerFontString(font,fontScale);
    else
    textElem = self createFontString(font,fontScale);
    textElem setHudPoint(align, relative, x, y);
    textElem.hideWhenInMenu = true;
    textElem.archived  = false;
    textElem.sort = sort;
    textElem.alpha  = alpha;
    textElem.color  = color;
    textElem.glowColor = glowColor;
    textElem.glowAlpha = glowAlpha;
    self addToStringArray(text);
    textElem thread watchForOverFlow(text);
    return textElem;
}

overflowfix()
{
    level.overflow  = newHudElem();
    level.overflow.alpha = 0;
    level.overflow setText("marker");
    
    for (;;) {
        level waittill("CHECK_OVERFLOW");
        if (level.Strings.size >= 50) {
            level.overflow ClearAllTextAfterHudElem();
            level.Strings = [];
            level notify("FIX_OVERFLOW");
        }
    }
}

setSafeText(text)
{
    self notify("stop_TextMonitor");
    self addToStringArray(text);
    self thread watchForOverFlow(text);
}

addToStringArray(text)
{
    if(!isInArray(level.Strings,text))
    {
        level.Strings[level.Strings.size] = text;
        level notify("CHECK_OVERFLOW");
    }
}

watchForOverFlow(text)
{
    self endon("stop_TextMonitor");
    while(isDefined(self))
    {
        if(isDefined(text.size))
            self setText(text);
        else
        {
            self setText(undefined);
            self.label = text;
        }
        level waittill("FIX_OVERFLOW");
    }
}

isInArray(array,text)
{
    for(e=0;e<array.size;e++)
        if(array[e] == text)
            return true;
    return false;        
}

destroyAllOverflow(array)
{
    if(!isDefined(array))
        return;
    keys = getArrayKeys(array);
    for(a=0;a<keys.size;a++)
    if(isDefined(array[keys[a]][0]))
    for(e=0;e<array[keys[a]].size;e++)
        array[keys[a]][e] destroy();
    else
        array[keys[a]] destroy();
}
\ No newline at end of file
diff --git a/utilities.gsc b/utilities.gsc
new file mode 100644
index 0000000..d41aee7
--- /dev/null
+++ b/utilities.gsc
@@ -0,0 +1,417 @@
/*
*    Infinity Loader :: Created By AgreedBog381 && SyGnUs Legends
*
*    Project : wreck it ralph
*    Author : 
*    Game : Call of Duty: Modern Warfare 2
*    Description : This resource file will help kickstart your new project!
*    Date : 14/07/2021 00:37:14
*
*/

//createText(font, fontScale, align, relative, x, y, sort, alpha, text, color)
//{
    //    textElem                = self createFontString(font, fontScale);
    //textElem.hideWhenInMenu = true;
    //textElem.sort           = sort;
    //textElem.alpha          = alpha;
    //textElem.color          = color;
    //textElem.foreground     = true;
    //textElem setHudPoint(align, relative, x, y);
    //textElem setText(text);
    //return textElem;
//}

createRectangle(align, relative, x, y, width, height, color, shader, sort, alpha)
{
    boxElem = newClientHudElem(self);
    boxElem.elemType = "bar";
    boxElem.children = [];

    boxElem.hideWhenInMenu = true;
    boxElem.width          = width;
    boxElem.height         = height;
    boxElem.align          = align;
    boxElem.relative       = relative;
    boxElem.xOffset        = 0;
    boxElem.yOffset        = 0;
    boxElem.sort           = sort;
    boxElem.color          = color;
    boxElem.alpha          = alpha;
    boxElem.shader         = shader;
    boxElem.foreground     = true;

    boxElem setParent(level.uiParent);
    boxElem setShader(shader,width,height);
    boxElem.hidden = false;
    boxElem setHudPoint(align, relative, x, y);
    return boxElem;
}

//You can try using setPoint within hud_util.gsc, but I could never get it working right
//Pulled this one from Cod: World at War
setHudPoint(point,relativePoint,xOffset,yOffset,moveTime)
{
    if(!isDefined(moveTime))moveTime = 0;
    element = self getParent();
    if(moveTime)self moveOverTime(moveTime);
    if(!isDefined(xOffset))xOffset = 0;
    self.xOffset = xOffset;
    if(!isDefined(yOffset))yOffset = 0;
    self.yOffset = yOffset;
    self.point = point;
    self.alignX = "center";
    self.alignY = "middle";
    if(isSubStr(point,"TOP"))self.alignY = "top";
    if(isSubStr(point,"BOTTOM"))self.alignY = "bottom";
    if(isSubStr(point,"LEFT"))self.alignX = "left";
    if(isSubStr(point,"RIGHT"))self.alignX = "right";
    if(!isDefined(relativePoint))relativePoint = point;
    self.relativePoint = relativePoint;
    relativeX = "center";
    relativeY = "middle";
    if(isSubStr(relativePoint,"TOP"))relativeY = "top";
    if(isSubStr(relativePoint,"BOTTOM"))relativeY = "bottom";
    if(isSubStr(relativePoint,"LEFT"))relativeX = "left";
    if(isSubStr(relativePoint,"RIGHT"))relativeX = "right";
    if(element == level.uiParent)
    {
        self.horzAlign = relativeX;
        self.vertAlign = relativeY;
    }
    else
    {
        self.horzAlign = element.horzAlign;
        self.vertAlign = element.vertAlign;
    }
    if(relativeX == element.alignX)
    {
        offsetX = 0;
        xFactor = 0;
    }
    else if(relativeX == "center" || element.alignX == "center")
    {
        offsetX = int(element.width / 2);
        if(relativeX == "left" || element.alignX == "right")xFactor = -1;
        else xFactor = 1;
    }
    else
    {
        offsetX = element.width;
        if(relativeX == "left")xFactor = -1;
        else xFactor = 1;
    }
    self.x = element.x +(offsetX * xFactor);
    if(relativeY == element.alignY)
    {
        offsetY = 0;
        yFactor = 0;
    }
    else if(relativeY == "middle" || element.alignY == "middle")
    {
        offsetY = int(element.height / 2);
        if(relativeY == "top" || element.alignY == "bottom")yFactor = -1;
        else yFactor = 1;
    }
    else
    {
        offsetY = element.height;
        if(relativeY == "top")yFactor = -1;
        else yFactor = 1;
    }
    self.y = element.y +(offsetY * yFactor);
    self.x += self.xOffset;
    self.y += self.yOffset;
    switch(self.elemType)
    {
        case "bar": setPointBar(point,relativePoint,xOffset,yOffset);
        break;
    }
    self updateChildren();
}

//Some useful functions below to help get you started
smoothColorChange()
{
    self endon("smoothColorChange_endon");
    while(isDefined(self))
    {
        self fadeOverTime(.15);
        self.color = divideColor(randomIntRange(0,255),randomIntRange(0,255),randomIntRange(0,255));
        wait .25;
    }
}

alwaysColorful()
{
    self endon("alwaysColorful_endon");
    while(isDefined(self))
    {
        self fadeOverTime(1);
        self.color = (randomInt(255)/255,randomInt(255)/255,randomInt(255)/255);
        wait 1;
    }
}

hudMoveY(y,time)
{
    self moveOverTime(time);
    self.y = y;
    wait time;
}

hudMoveX(x,time)
{
    self moveOverTime(time);
    self.x = x;
    wait time;
}

hudMoveXY(time,x,y)
{
    self moveOverTime(time);
    self.y = y;
    self.x = x;
}

hudFade(alpha,time)
{
    self fadeOverTime(time);
    self.alpha = alpha;
    wait time;
}

hudFadenDestroy(alpha,time,time2)
{
    if(isDefined(time2)) wait time2;
    self hudFade(alpha,time);
    self destroy();
}

getBig()
{
    while(self.fontscale < 2)
    {
        self.fontscale = min(2,self.fontscale+(2/20));
        wait .05;
    }
}

getSmall()
{
    while(self.fontscale > 1.5)
    {
        self.fontscale = max(1.5,self.fontscale-(2/20));
        wait .05;
    }
}

divideColor(c1,c2,c3)
{
    return(c1/255,c2/255,c3/255);
}

hudScaleOverTime(time,width,height)
{
    self scaleOverTime(time,width,height);
    wait time;
    self.width = width;
    self.height = height;
}

destroyAll(array)
{
    if(!isDefined(array)) return;
    keys = getArrayKeys(array);
    for(a=0;a<keys.size;a++)
        destroyAll(array[keys[a]]);
    array destroy();
}

isUpperCase(character)
{
    upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789*{}!^/-_$&@#()";
    for(a=0;a<upper.size;a++)
        if(character == upper[a])
            return a;
    return -1;
}

toUpper(letter)
{
    lower="abcdefghijklmnopqrstuvwxyz";
    upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    for(a=0;a < lower.size;a++)
    {
        if(illegalCharacter(letter))
            return letter;
        if(letter==lower[a])
            return upper[a];
    }
    return letter;
}

charpos(string, from, char) {
    for (i = from; i < string.size; i++) {
        if (string[i] == char) {
            return i;
        }
    }
    
    return 999;
}

charposrev(string, from, char) {
    for (i = from; i >= 0; i--) {
        if (string[i] == char) {
            return i;
        }
    }
    
    return -999;
}

illegalCharacter(letter)
{
    ill = "*{}!^/-_$&@#()";
    for(a=0;a < ill.size;a++)
        if(letter == ill[a])
            return true;
    return false;
}

getName()
{
    name = self.name;
    if(name[0] != "[")
        return name;
    for(a=name.size-1;a>=0;a--)
        if(name[a] == "]")
            break;
    return(getSubStr(name,a+1));
}

getClan()
{
    name = self.name;
    if(name[0] != "[")
        return "";
    for(a=name.size-1;a>=0;a--)
        if(name[a] == "]")
            break;
    return(getSubStr(name,1,a));
}

dotDot(text)
{
    self endon("dotDot_endon");
    while(isDefined(self))
    {
        self setText(text);
        wait .2;
        self setText(text+".");
        wait .15;
        self setText(text+"..");
        wait .15;
        self setText(text+"...");
        wait .15;
    }
}

flashFlash()
{
    self endon("flashFlash_endon");
    self.alpha = 1;
    while(isDefined(self))
    {
        self fadeOverTime(0.35);
        self.alpha = .2;
        wait 0.4;
        self fadeOverTime(0.35);
        self.alpha = 1;
        wait 0.45;
    }
}

destroyAfter(time)
{
    wait time;
    if(isDefined(self))
        self destroy();
}

changeFontScaleOverTime(size,time)
{
    time=time*20;
    _scale=(size-self.fontScale)/time;
    for(a=0;a < time;a++)
    {
        self.fontScale+=_scale;
        wait .05;
    }
}

isSolo()
{
    if(getPlayers().size <= 1)
        return true;
    return false;
}

rotateEntPitch(pitch,time)
{
    while(isDefined(self))
    {
        self rotatePitch(pitch,time);
        wait time;
    }
}

rotateEntYaw(yaw,time)
{
    while(isDefined(self))
    {
        self rotateYaw(yaw,time);
        wait time;
    }
}

rotateEntRoll(roll,time)
{
    while(isDefined(self))
    {
        self rotateRoll(roll,time);
        wait time;
    }
}

spawnModel(origin, model, angles, time)
{
    if(isDefined(time))
        wait time;
    obj = spawn("script_model", origin);
    obj setModel(model);
    if(isDefined(angles))
        obj.angles = angles;
    return obj;
}

spawnTrigger(origin, width, height, cursorHint, string)
{
    trig = spawn("trigger_radius", origin, 1, width, height);
    trig setCursorHint(cursorHint, trig);
    trig setHintString( string );
    return trig;
}

isConsole()
{
    if(level.xenon || level.ps3)
        return true;
    return false;
}

getPlayers()
{
    return level.players;
}
\ No newline at end of file