Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include maps\mp\_utility;
- #include common_scripts\utility;
- #include maps\mp\gametypes\_hud_util;
- #include maps\mp\gametypes\_hud_message;
- init()
- {
- level thread onPlayerConnect();
- }
- onPlayerConnect()
- {
- for(;;)
- {
- level waittill("connected", player);
- player thread onPlayerSpawned();
- }
- }
- onPlayerSpawned()
- {
- self endon("disconnect");
- level endon("game_ended");
- isFirstSpawn = true;
- for(;;)
- {
- self waittill("spawned_player");
- if(isFirstSpawn)
- {
- initOverFlowFix();
- isFirstSpawn = false;
- }
- // Will appear each time when the player spawn, that's just an exemple.
- self iprintln("Black Ops 2 - ^2Overflow Fixing");
- self thread example();
- }
- }
- createText(font, fontscale, align, relative, x, y, sort, text)
- {
- textElem = CreateFontString( font, fontscale );
- textElem setPoint( align, relative, x, y );
- textElem.sort = sort;
- textElem.hideWhenInMenu = true;
- textElem.type = "text";
- addTextTableEntry(textElem, getStringId(text));
- textElem setSafeText(self, text);
- return textElem;
- }
- example()
- {
- self endon("disconnect");
- level endon("game_ended");
- self.StringSpawned = false;
- count = 0;
- for(;;)
- {
- if(self meleebuttonpressed() && !self.StringSpawned)
- {
- self.stringMenu = createText("default", 1.4, "CENTER", "CENTER", 0, 0, 1, "Overflow Fix By TheFallen");
- self.StringSpawned = true;
- self iprintln("spawned text");
- wait 0.25;
- }
- if(self meleebuttonpressed() && self.StringSpawned)
- {
- self.stringMenu setSafeText(self, "New Text " + count);
- self iprintln("changed text");
- count++;
- }
- if(self fragbuttonpressed() && self.StringSpawned == true)
- {
- self.StringMenu clear(self);
- self iprintln("destroyed text");
- self.StringSpawned = false;
- count = 0;
- }
- wait 0.05;
- }
- }
- /*
- * Text Table Structure:
- *
- * id = id of text element
- * element = text element
- * stringId = id of string text element uses
- *
- **************************************************
- *
- * String Table Structure:
- *
- * id = id of string
- * string = string value
- *
- */
- initOverFlowFix()
- {
- // tables
- self.stringTable = [];
- self.stringTableEntryCount = 0;
- self.textTable = [];
- self.textTableEntryCount = 0;
- if(isDefined(level.anchorText) == false)
- {
- level.anchorText = createServerFontString("default",1.5);
- level.anchorText setText("anchor");
- level.anchorText.alpha = 0;
- level.stringCount = 0;
- level thread monitorOverflow();
- }
- }
- // strings cache serverside -- all string entries are shared by every player
- monitorOverflow()
- {
- level endon("disconnect");
- for(;;)
- {
- if(level.stringCount >= 60)
- {
- level.anchorText clearAllTextAfterHudElem();
- level.stringCount = 0;
- foreach(player in level.players)
- {
- player purgeTextTable();
- player purgeStringTable();
- player recreateText();
- }
- }
- wait 0.05;
- }
- }
- setSafeText(player, text)
- {
- stringId = player getStringId(text);
- // if the string doesn't exist add it and get its id
- if(stringId == -1)
- {
- player addStringTableEntry(text);
- stringId = player getStringId(text);
- }
- // update the entry for this text element
- player editTextTableEntry(self.textTableIndex, stringId);
- self setText(text);
- }
- recreateText()
- {
- foreach(entry in self.textTable)
- entry.element setSafeText(self, lookUpStringById(entry.stringId));
- }
- addStringTableEntry(string)
- {
- // create new entry
- entry = spawnStruct();
- entry.id = self.stringTableEntryCount;
- entry.string = string;
- self.stringTable[self.stringTable.size] = entry; // add new entry
- self.stringTableEntryCount++;
- level.stringCount++;
- }
- lookUpStringById(id)
- {
- string = "";
- foreach(entry in self.stringTable)
- {
- if(entry.id == id)
- {
- string = entry.string;
- break;
- }
- }
- return string;
- }
- getStringId(string)
- {
- id = -1;
- foreach(entry in self.stringTable)
- {
- if(entry.string == string)
- {
- id = entry.id;
- break;
- }
- }
- return id;
- }
- getStringTableEntry(id)
- {
- stringTableEntry = -1;
- foreach(entry in self.stringTable)
- {
- if(entry.id == id)
- {
- stringTableEntry = entry;
- break;
- }
- }
- return stringTableEntry;
- }
- purgeStringTable()
- {
- stringTable = [];
- // store all used strings
- foreach(entry in self.textTable)
- stringTable[stringTable.size] = getStringTableEntry(entry.stringId);
- self.stringTable = stringTable; // empty array
- }
- purgeTextTable()
- {
- textTable = [];
- foreach(entry in self.textTable)
- {
- if(entry.id != -1)
- textTable[textTable.size] = entry;
- }
- self.textTable = textTable;
- }
- addTextTableEntry(element, stringId)
- {
- entry = spawnStruct();
- entry.id = self.textTableEntryCount;
- entry.element = element;
- entry.stringId = stringId;
- element.textTableIndex = entry.id;
- self.textTable[self.textTable.size] = entry;
- self.textTableEntryCount++;
- }
- editTextTableEntry(id, stringId)
- {
- foreach(entry in self.textTable)
- {
- if(entry.id == id)
- {
- entry.stringId = stringId;
- break;
- }
- }
- }
- deleteTextTableEntry(id)
- {
- foreach(entry in self.textTable)
- {
- if(entry.id == id)
- {
- entry.id = -1;
- entry.stringId = -1;
- }
- }
- }
- clear(player)
- {
- if(self.type == "text")
- player deleteTextTableEntry(self.textTableIndex);
- self destroy();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement