Advertisement
ITheFallenI

Overflow Fix

Nov 2nd, 2014
2,211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.23 KB | None | 0 0
  1. /*****
  2.  * Overflow fix for BO2 GSC mods.
  3.  * Created by TheFallen
  4.  *****/
  5.  
  6. onPlayerSpawned()
  7. {
  8.     self endon("disconnect");
  9.     level endon( "game_ended" );
  10.    
  11.     // YOU MUST HAVE THIS
  12.     isFirstSpawn = true;
  13.  
  14.     for(;;)
  15.     {
  16.         self waittill("spawned_player");
  17.        
  18.         // YOU MUST HAVE THIS
  19.         // only runs once when the player spawns for the first time
  20.         if(isFirstSpawn)
  21.         {
  22.             initOverFlowFix();
  23.            
  24.             isFirstSpawn = false;
  25.         }
  26.     }
  27. }
  28.  
  29. createText(font, fontscale, align, relative, x, y, sort, text)
  30. {
  31.     textElem = CreateFontString( font, fontscale );
  32.     textElem setPoint( align, relative, x, y );
  33.     textElem.sort = sort;
  34.     textElem.hideWhenInMenu = true;
  35.  
  36.     // YOU MUST HAVE THESE
  37.     textElem.type = "text";
  38.     addTextTableEntry(textElem, getStringId(text));
  39.     textElem setSafeText(self, text);
  40.    
  41.     return textElem;
  42. }
  43.  
  44. /*
  45.  * Text Table Structure:
  46.  *
  47.  * id = id of text element
  48.  * element = text element
  49.  * stringId = id of string text element uses
  50.  *
  51.  **************************************************
  52.  *
  53.  * String Table Structure:
  54.  *
  55.  * id = id of string
  56.  * string = string value
  57.  *
  58.  */
  59.  
  60. initOverFlowFix()
  61. {
  62.     // tables
  63.     self.stringTable = [];
  64.     self.stringTableEntryCount = 0;
  65.     self.textTable = [];
  66.     self.textTableEntryCount = 0;
  67.    
  68.     if(isDefined(level.anchorText) == false)
  69.     {
  70.         level.anchorText = createServerFontString("default",1.5);
  71.         level.anchorText setText("anchor");
  72.         level.anchorText.alpha = 0;
  73.        
  74.         level.stringCount = 0;
  75.     }
  76. }
  77.  
  78. clearStrings()
  79. {
  80.     level.anchorText clearAllTextAfterHudElem();
  81.     level.stringCount = 0;
  82.    
  83.     foreach(player in level.players)
  84.     {
  85.         player iprintln("cleared");
  86.         player purgeTextTable();
  87.         player purgeStringTable();
  88.         player recreateText();
  89.     }
  90. }
  91.  
  92. setSafeText(player, text)
  93. {
  94.     stringId = player getStringId(text);
  95.    
  96.     // if the string doesn't exist add it and get its id
  97.     if(stringId == -1)
  98.     {
  99.         player addStringTableEntry(text);
  100.         stringId = player getStringId(text);
  101.     }
  102.    
  103.     // update the entry for this text element
  104.     player editTextTableEntry(self.textTableIndex, stringId);
  105.    
  106.     // Check if we have used up all of our strings -- clear if true
  107.     if(level.stringCount > 50)
  108.         clearStrings();
  109.  
  110.     self setText(text);
  111. }
  112.  
  113. recreateText()
  114. {
  115.     foreach(entry in self.textTable)
  116.         entry.element setSafeText(self, lookUpStringById(entry.stringId));
  117. }
  118.  
  119. addStringTableEntry(string)
  120. {
  121.     // create new entry
  122.     entry = spawnStruct();
  123.     entry.id = self.stringTableEntryCount;
  124.     entry.string = string;
  125.    
  126.     self.stringTable[self.stringTable.size] = entry; // add new entry
  127.     self.stringTableEntryCount++;
  128.     level.stringCount++;
  129. }
  130.  
  131. lookUpStringById(id)
  132. {
  133.     string = "";
  134.  
  135.     foreach(entry in self.stringTable)
  136.     {
  137.         if(entry.id == id)
  138.         {
  139.             string = entry.string;
  140.             break;
  141.         }
  142.     }
  143.  
  144.     return string;
  145. }
  146.  
  147. getStringId(string)
  148. {
  149.     id = -1;
  150.    
  151.     foreach(entry in self.stringTable)
  152.     {
  153.         if(entry.string == string)
  154.         {
  155.             id = entry.id;
  156.             break;
  157.         }
  158.     }
  159.  
  160.     return id;
  161. }
  162.  
  163. getStringTableEntry(id)
  164. {
  165.     stringTableEntry = -1;
  166.    
  167.     foreach(entry in self.stringTable)
  168.     {
  169.         if(entry.id == id)
  170.         {
  171.             stringTableEntry = entry;
  172.             break;
  173.         }
  174.     }
  175.  
  176.     return stringTableEntry;
  177. }
  178.  
  179. purgeStringTable()
  180. {
  181.     stringTable = [];
  182.  
  183.     // store all used strings
  184.     foreach(entry in self.textTable)
  185.         stringTable[stringTable.size] = getStringTableEntry(entry.stringId);
  186.  
  187.     self.stringTable = stringTable; // empty array
  188. }
  189.  
  190. purgeTextTable()
  191. {
  192.     textTable = [];
  193.    
  194.     foreach(entry in self.textTable)
  195.     {
  196.         if(entry.id != -1)
  197.             textTable[textTable.size] = entry;
  198.     }
  199.  
  200.     self.textTable = textTable;
  201. }
  202.  
  203. addTextTableEntry(element, stringId)
  204. {
  205.     entry = spawnStruct();
  206.     entry.id = self.textTableEntryCount;
  207.     entry.element = element;
  208.     entry.stringId = stringId;
  209.    
  210.     element.textTableIndex = entry.id;
  211.  
  212.     self.textTable[self.textTable.size] = entry;
  213.     self.textTableEntryCount++;
  214. }
  215.  
  216. editTextTableEntry(id, stringId)
  217. {
  218.     foreach(entry in self.textTable)
  219.     {
  220.         if(entry.id == id)
  221.         {
  222.             entry.stringId = stringId;
  223.             break;
  224.         }
  225.     }
  226. }
  227.  
  228. deleteTextTableEntry(id)
  229. {
  230.     foreach(entry in self.textTable)
  231.     {
  232.         if(entry.id == id)
  233.         {
  234.             entry.id = -1;
  235.             entry.stringId = -1;
  236.         }
  237.     }
  238. }
  239.  
  240. clear(player)
  241. {
  242.     if(self.type == "text")
  243.         player deleteTextTableEntry(self.textTableIndex);
  244.        
  245.     self destroy();
  246. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement