Advertisement
ITheFallenI

Overflow Fix Example by Exelo

Nov 2nd, 2014
1,900
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.48 KB | None | 0 0
  1. #include maps\mp\_utility;
  2. #include common_scripts\utility;
  3. #include maps\mp\gametypes\_hud_util;
  4. #include maps\mp\gametypes\_hud_message;
  5.  
  6. init()
  7. {
  8.     level thread onPlayerConnect();
  9. }
  10.  
  11. onPlayerConnect()
  12. {
  13.     for(;;)
  14.     {
  15.         level waittill("connected", player);
  16.         player thread onPlayerSpawned();
  17.     }
  18. }
  19.  
  20. onPlayerSpawned()
  21. {
  22.     self endon("disconnect");
  23.     level endon("game_ended");
  24.     isFirstSpawn = true;
  25.     for(;;)
  26.     {
  27.         self waittill("spawned_player");
  28.         if(isFirstSpawn)
  29.         {
  30.             initOverFlowFix();
  31.             isFirstSpawn = false;
  32.         }
  33.        
  34.         // Will appear each time when the player spawn, that's just an exemple.
  35.         self iprintln("Black Ops 2 - ^2Overflow Fixing");
  36.         self thread example();
  37.     }
  38. }
  39.  
  40. createText(font, fontscale, align, relative, x, y, sort, text)
  41. {
  42.   textElem = CreateFontString( font, fontscale );
  43.   textElem setPoint( align, relative, x, y );
  44.   textElem.sort = sort;
  45.   textElem.hideWhenInMenu = true;
  46.   textElem.type = "text";
  47.  
  48.   addTextTableEntry(textElem, getStringId(text));
  49.   textElem setSafeText(self, text);
  50.  
  51.  return textElem;
  52. }
  53.  
  54. example()
  55. {
  56.     self endon("disconnect");
  57.     level endon("game_ended");
  58.    
  59.     self.StringSpawned = false;
  60.     count = 0;
  61.    
  62.     for(;;)
  63.     {
  64.         if(self meleebuttonpressed() && !self.StringSpawned)
  65.         {
  66.             self.stringMenu = createText("default", 1.4, "CENTER", "CENTER", 0, 0, 1, "Overflow Fix By TheFallen");
  67.             self.StringSpawned = true;
  68.             self iprintln("spawned text");
  69.             wait 0.25;
  70.         }
  71.         if(self meleebuttonpressed() && self.StringSpawned)
  72.         {
  73.             self.stringMenu setSafeText(self, "New Text " + count);
  74.             self iprintln("changed text");
  75.             count++;
  76.         }
  77.         if(self fragbuttonpressed() && self.StringSpawned == true)
  78.         {
  79.             self.StringMenu clear(self);
  80.             self iprintln("destroyed text");
  81.             self.StringSpawned = false;
  82.             count = 0;
  83.         }
  84.         wait 0.05;
  85.     }
  86. }
  87.  
  88. /*
  89.  * Text Table Structure:
  90.  *
  91.  * id = id of text element
  92.  * element = text element
  93.  * stringId = id of string text element uses
  94.  *
  95.  **************************************************
  96.  *
  97.  * String Table Structure:
  98.  *
  99.  * id = id of string
  100.  * string = string value
  101.  *
  102.  */
  103.  
  104. initOverFlowFix()
  105. {
  106.     // tables
  107.     self.stringTable = [];
  108.     self.stringTableEntryCount = 0;
  109.     self.textTable = [];
  110.     self.textTableEntryCount = 0;
  111.    
  112.     if(isDefined(level.anchorText) == false)
  113.     {
  114.         level.anchorText = createServerFontString("default",1.5);
  115.         level.anchorText setText("anchor");
  116.         level.anchorText.alpha = 0;
  117.        
  118.         level.stringCount = 0;
  119.         level thread monitorOverflow();
  120.     }
  121. }
  122.  
  123. // strings cache serverside -- all string entries are shared by every player
  124. monitorOverflow()
  125. {
  126.     level endon("disconnect");
  127.  
  128.     for(;;)
  129.     {
  130.         if(level.stringCount >= 60)
  131.         {
  132.             level.anchorText clearAllTextAfterHudElem();
  133.             level.stringCount = 0;
  134.            
  135.             foreach(player in level.players)
  136.             {
  137.                 player purgeTextTable();
  138.                 player purgeStringTable();
  139.                 player recreateText();
  140.             }
  141.         }
  142.        
  143.         wait 0.05;
  144.     }
  145. }
  146.  
  147. setSafeText(player, text)
  148. {
  149.     stringId = player getStringId(text);
  150.    
  151.     // if the string doesn't exist add it and get its id
  152.     if(stringId == -1)
  153.     {
  154.         player addStringTableEntry(text);
  155.         stringId = player getStringId(text);
  156.     }
  157.    
  158.     // update the entry for this text element
  159.     player editTextTableEntry(self.textTableIndex, stringId);
  160.  
  161.     self setText(text);
  162. }
  163.  
  164. recreateText()
  165. {
  166.     foreach(entry in self.textTable)
  167.         entry.element setSafeText(self, lookUpStringById(entry.stringId));
  168. }
  169.  
  170. addStringTableEntry(string)
  171. {
  172.     // create new entry
  173.     entry = spawnStruct();
  174.     entry.id = self.stringTableEntryCount;
  175.     entry.string = string;
  176.    
  177.     self.stringTable[self.stringTable.size] = entry; // add new entry
  178.     self.stringTableEntryCount++;
  179.     level.stringCount++;
  180. }
  181.  
  182. lookUpStringById(id)
  183. {
  184.     string = "";
  185.  
  186.     foreach(entry in self.stringTable)
  187.     {
  188.         if(entry.id == id)
  189.         {
  190.             string = entry.string;
  191.             break;
  192.         }
  193.     }
  194.  
  195.     return string;
  196. }
  197.  
  198. getStringId(string)
  199. {
  200.     id = -1;
  201.    
  202.     foreach(entry in self.stringTable)
  203.     {
  204.         if(entry.string == string)
  205.         {
  206.             id = entry.id;
  207.             break;
  208.         }
  209.     }
  210.  
  211.     return id;
  212. }
  213.  
  214. getStringTableEntry(id)
  215. {
  216.     stringTableEntry = -1;
  217.    
  218.     foreach(entry in self.stringTable)
  219.     {
  220.         if(entry.id == id)
  221.         {
  222.             stringTableEntry = entry;
  223.             break;
  224.         }
  225.     }
  226.  
  227.     return stringTableEntry;
  228. }
  229.  
  230. purgeStringTable()
  231. {
  232.     stringTable = [];
  233.  
  234.     // store all used strings
  235.     foreach(entry in self.textTable)
  236.         stringTable[stringTable.size] = getStringTableEntry(entry.stringId);
  237.  
  238.     self.stringTable = stringTable; // empty array
  239. }
  240.  
  241. purgeTextTable()
  242. {
  243.     textTable = [];
  244.    
  245.     foreach(entry in self.textTable)
  246.     {
  247.         if(entry.id != -1)
  248.             textTable[textTable.size] = entry;
  249.     }
  250.  
  251.     self.textTable = textTable;
  252. }
  253.  
  254. addTextTableEntry(element, stringId)
  255. {
  256.     entry = spawnStruct();
  257.     entry.id = self.textTableEntryCount;
  258.     entry.element = element;
  259.     entry.stringId = stringId;
  260.    
  261.     element.textTableIndex = entry.id;
  262.  
  263.     self.textTable[self.textTable.size] = entry;
  264.     self.textTableEntryCount++;
  265. }
  266.  
  267. editTextTableEntry(id, stringId)
  268. {
  269.     foreach(entry in self.textTable)
  270.     {
  271.         if(entry.id == id)
  272.         {
  273.             entry.stringId = stringId;
  274.             break;
  275.         }
  276.     }
  277. }
  278.  
  279. deleteTextTableEntry(id)
  280. {
  281.     foreach(entry in self.textTable)
  282.     {
  283.         if(entry.id == id)
  284.         {
  285.             entry.id = -1;
  286.             entry.stringId = -1;
  287.         }
  288.     }
  289. }
  290.  
  291. clear(player)
  292. {
  293.     if(self.type == "text")
  294.         player deleteTextTableEntry(self.textTableIndex);
  295.        
  296.     self destroy();
  297. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement