Advertisement
HR_Shaft

Random Weapons for H3 Foundry for Phasor v2+

Jan 9th, 2015
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 19.68 KB | None | 0 0
  1. --[[ ###  Random Weapons Infinite Ammo v1 for H3 Foundry ###]]--
  2. --[[ ###    by H® Shaft for Phasor v2     ###]]--
  3.  
  4. -- gametype MUST have weapons set to generic
  5. -- Script designed specifically and only for the Halo CE map H3 Foundry: Link: http://hce.halomaps.org/index.cfm?fid=6677
  6.  
  7. team_play = false
  8. game_started = false
  9. weapons = {}
  10. mybattery = {}
  11. spiker_clip = 40
  12. brifle_clip = 36
  13. brute_clip = 48
  14. needler_clip = 20
  15. shotgun_clip = 12
  16. assault_clip = 32
  17. pistol_clip = 12
  18. rocket_clip = 2
  19. sniper_clip = 4
  20. rocket_ammo = 8
  21.  
  22. function GetRequiredVersion()
  23.     return 200
  24. end
  25.  
  26. function OnScriptLoad(process, game, persistent)
  27.     if game == true or game == "PC" then
  28.         GAME = "PC"
  29.         gametype_base = 0x671340
  30.         map_name = readstring(0x698F21)
  31.     else
  32.         GAME = "CE"
  33.         gametype_base = 0x5F5498
  34.         map_name = readstring(0x61D151)
  35.     end
  36.     for i=0,15 do
  37.         if getplayer(i) then
  38.             mybattery[i] = 0
  39.             weapons[i] = {}
  40.         end
  41.     end    
  42.     gametype = readbyte(gametype_base + 0x30)
  43.     team_play = getteamplay()  
  44. end
  45.  
  46. function OnNewGame(map)
  47.     if GAME == "PC" then
  48.         gametype_base = 0x671340
  49.         map_name = readstring(0x698F21)
  50.     elseif GAME == "CE" then
  51.         gametype_base = 0x5F5498
  52.         map_name = readstring(0x61D151)
  53.     end
  54.     for i=0,15 do
  55.         if getplayer(i) then
  56.             mybattery[i] = 0
  57.             weapons[i] = {}
  58.         end
  59.     end
  60.     game_started = true
  61.     gametype = readbyte(gametype_base + 0x30)
  62.     team_play = getteamplay()      
  63. end
  64.  
  65. function getteamplay()
  66.     if readbyte(gametype_base + 0x34) == 1 then
  67.         return true
  68.     else
  69.         return false
  70.     end
  71. end
  72.  
  73. function OnPlayerJoin(player)
  74.     if getplayer(player) then
  75.         mybattery[player] = 0
  76.         weapons[player] = nil
  77.         welcome = registertimer(9000, "Welcome", player)
  78.     end
  79. end
  80.  
  81. function Welcome(id, count, player)
  82.     if count == 1 then
  83.         if getplayer(player) then
  84.             sendconsoletext(player, "Welcome to Random Weapons for H3 Foundry!", 10, 0)
  85.             sendconsoletext(player, "Each time you spawn, you will be given a random weapon.", 10, 0)
  86.         end
  87.     end
  88.     return false   
  89. end
  90.  
  91. function OnPlayerKill(killer, victim, mode)
  92.     local response = nil
  93.     if getplayer(victim) then
  94.         weapons[victim] = nil
  95.         mybattery[victim] = 0
  96.         if mode == 0 then          
  97.             response = false
  98.         elseif mode == 1 then
  99.             response = true
  100.         elseif mode == 2 then
  101.             response = true
  102.         elseif mode == 3 then
  103.             say(getname(victim) .. " was killed by BIG HAIRY BALLS!")
  104.             response = false
  105.         elseif mode == 4 then
  106.             response = true
  107.         elseif mode == 5 then
  108.             response = true
  109.         elseif mode == 6 then
  110.             response = true
  111.         end    
  112.     end
  113.     return response
  114. end
  115.  
  116. function OnPlayerLeave(player)
  117.     if getplayer(player) then
  118.         weapons[player] = nil
  119.         mybattery[player] = nil
  120.     end
  121. end
  122.  
  123. function OnTeamChange(player, old_team, new_team, relevant)
  124.     if getplayer(player) then
  125.         weapons[player] = nil
  126.         mybattery[player] = 1
  127.     end
  128.     return nil
  129. end
  130.  
  131. function OnPlayerSpawnEnd(player, m_objectId)
  132.     if getplayer(player) then
  133.         weapons[player] = nil
  134.         mybattery[player] = 0
  135.         ChangeFFAColor(player)
  136.         local m_objectId = getplayerobjectid(player)       
  137.         if m_objectId then
  138.             gameweap = registertimer(0, "AssignGameWeapons", player)
  139.         end
  140.     end
  141. end
  142.  
  143. function ChangeFFAColor(player)
  144.     if getplayer(player) then
  145.         local m_objectId = getplayerobjectid(player)
  146.         if m_objectId then
  147.             local m_object = getobject(m_objectId)
  148.             if m_object then
  149.                 local m_player = getplayer(player)
  150.                 local color = getrandomnumber(1, 18)
  151.                 writeword(m_player + 0x60, color)
  152.             end
  153.         end
  154.     end
  155. end
  156.  
  157. function AssignGameWeapons(id, count, player)
  158.     if getplayer(player) and game_started then
  159.         local m_objectId = getplayerobjectid(player)
  160.         local m_object = getobject(m_objectId)
  161.         local clip = 0
  162.         local ammo = 9999
  163.         local battery = 0
  164.        
  165.         if m_objectId then
  166.             for i = 0,3 do
  167.                 local weapID = readdword(getobject(m_objectId), 0x2F8 + i*4)
  168.                 if weapID ~= 0xFFFFFFFF then
  169.                     destroyobject(weapID)
  170.                 end
  171.             end
  172.             if m_object then
  173.                 writebyte(m_object, 0x31E, 0)
  174.                 writebyte(m_object, 0x31F, 0)  
  175.             end        
  176.             local randomweap = getrandomnumber(1, 10)
  177.             local randomclip = getrandomnumber(1, 20)
  178.             if randomweap == 1 then
  179.                 if randomclip > 19 then
  180.                     clip = 9999
  181.                     sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
  182.                 else   
  183.                     clip = shotgun_clip
  184.                 end
  185.                 weapons[player] = "zteam\\objects\\weapons\\single\\shotgun\\h3\\shotgun"
  186.                 sendconsoletext(player, "Shotgun", 5, 0)
  187.                 sendconsoletext(player, "This Shotgun has a VERY short range - get up-close for a kill.", 8, 0)
  188.                 applycamo(player, 20)
  189.             elseif randomweap == 2 then
  190.                 if randomclip > 19 then
  191.                     clip = 9999
  192.                     sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
  193.                 else   
  194.                     clip = assault_clip
  195.                 end        
  196.                 weapons[player] = "zteam\\objects\\weapons\\single\\assault_rifle\\h3\\assault_rifle"
  197.                 sendconsoletext(player, "Assault Rifle", 5, 0)
  198.             elseif randomweap == 3 then
  199.                 if randomclip > 19 then
  200.                     clip = 9999
  201.                     sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
  202.                 else   
  203.                     clip = spiker_clip
  204.                 end
  205.                 weapons[player] = "zteam\\objects\\weapons\\single\\spike_rifle\\h3\\spike_rifle"
  206.                 sendconsoletext(player, "Spike Rifle", 5, 0)
  207.             elseif randomweap == 4 then
  208.                 if randomclip > 19 then
  209.                     clip = 9999
  210.                     sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
  211.                 else   
  212.                     clip = needler_clip
  213.                 end
  214.                 weapons[player] = "zteam\\objects\\weapons\\single\\needler\\h3\\needler"
  215.                 sendconsoletext(player, "Needler", 5, 0)
  216.             elseif randomweap == 5 then
  217.                 if randomclip > 19 then
  218.                     clip = 9999
  219.                     sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
  220.                 else   
  221.                     clip = pistol_clip
  222.                 end
  223.                 weapons[player] = "zteam\\objects\\weapons\\single\\magnum\\h3_laser\\magnum"
  224.                 sendconsoletext(player, "Magnum Pistol", 5, 0)
  225.             elseif randomweap == 6 then    
  226.                 battery = 0
  227.                 weapons[player] = "zteam\\objects\\weapons\\single\\plasma_pistol\\h3\\plasma_pistol"
  228.                 sendconsoletext(player, " Plasma Pistol", 5, 0)
  229.             elseif randomweap == 7 then
  230.                 battery = 0
  231.                 weapons[player] = "zteam\\objects\\weapons\\single\\plasma_rifle\\h3\\plasma_rifle"
  232.                 sendconsoletext(player, "Plasma Rifle", 5, 0)
  233.             elseif randomweap == 8 then
  234.                 if randomclip > 19 then
  235.                     clip = 9999
  236.                     sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
  237.                 else   
  238.                     clip = brifle_clip
  239.                 end
  240.                 weapons[player] = "zteam\\objects\\weapons\\single\\battle_rifle\\h3\\battle_rifle"
  241.                 sendconsoletext(player, "Battle Rifle", 5, 0)
  242.             elseif randomweap == 9 then
  243.                 if randomclip > 19 then
  244.                     clip = 9999
  245.                     sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
  246.                 else   
  247.                     clip = rocket_clip
  248.                 end
  249.                 weapons[player] = "zteam\\objects\\weapons\\single\\rocket_launcher\\h3\\rocket_launcher"
  250.                 sendconsoletext(player, "Rocket Launcher", 5, 0)
  251.             elseif randomweap == 10 then
  252.                 if randomclip > 19 then
  253.                     clip = 9999
  254.                     sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
  255.                 else   
  256.                     clip = sniper_clip
  257.                 end
  258.                 weapons[player] = "zteam\\objects\\weapons\\single\\sniper_rifle\\z\\sniper_rifle"
  259.                 sendconsoletext(player, "Sniper Rifle", 5, 0)
  260.             end
  261.             local m_weaponId = createobject(gettagid("weap", weapons[player]), 0, 10, false, 0, 0, 0)
  262.             assignweapon(player, m_weaponId)
  263.             local m_weapon = getobject(m_weaponId)
  264.             if randomweap == 6 or randomweap == 7 then
  265.                 if m_weapon then
  266.                     writefloat(m_weapon + 0x240, battery)
  267.                     updateammo(m_weaponId)
  268.                     infbattery = registertimer(1000, "InfBattery", {m_weapon, player})
  269.                     mybattery[player] = 1
  270.                 end
  271.             elseif randomclip <= 19 then
  272.                 if m_weapon then
  273.                     if randomweap == 9 then ammo = rocket_ammo clip = rocket_clip end -- rocket launcher
  274.                     writeword(m_weapon + 0x2B6, ammo)
  275.                     writeword(m_weapon + 0x2B8, clip)
  276.                     updateammo(m_weaponId)
  277.                 end                
  278.             else
  279.                 if m_weapon then
  280.                     if randomweap == 9 then ammo = rocket_ammo clip = rocket_clip end -- rocket launcher
  281.                     writeword(m_weapon + 0x2B6, ammo)
  282.                     writeword(m_weapon + 0x2B8, clip)
  283.                     updateammo(m_weaponId)
  284.                 end
  285.             end
  286.            
  287.             local random_nade = getrandomnumber(1, 7)
  288.             if m_object then
  289.                 writebyte(m_object, 0x31E, 0)
  290.                 writebyte(m_object, 0x31F, 0)
  291.                 if random_nade == 1 then
  292.                     writebyte(m_object, 0x31E, 2)
  293.                     writebyte(m_object, 0x31F, 2)
  294.                     sendconsoletext(player, "Grenades: 2 of each.", 5, 0)
  295.                 elseif random_nade == 2 then
  296.                     writebyte(m_object, 0x31E, 1)
  297.                     writebyte(m_object, 0x31F, 1)
  298.                     sendconsoletext(player, "Grenades: 1 of each.", 5, 0)
  299.                 elseif random_nade == 3 then   
  300.                     writebyte(m_object, 0x31E, 1)
  301.                     writebyte(m_object, 0x31F, 0)
  302.                     sendconsoletext(player, "Grenades: 1 frag.", 5, 0)
  303.                 elseif random_nade == 4 then
  304.                     writebyte(m_object, 0x31E, 0)
  305.                     writebyte(m_object, 0x31F, 1)
  306.                     sendconsoletext(player, "Grenades: 1 Plasma.", 5, 0)
  307.                 elseif random_nade == 5 then
  308.                     writebyte(m_object, 0x31E, 2)
  309.                     writebyte(m_object, 0x31F, 0)
  310.                     sendconsoletext(player, "Grenades: 2 Frags.", 5, 0)
  311.                 elseif random_nade == 6 then
  312.                     writebyte(m_object, 0x31E, 0)
  313.                     writebyte(m_object, 0x31F, 2)
  314.                     sendconsoletext(player, "Grenades: 2 Plasma.", 5, 0)
  315.                 elseif random_nade == 7 then
  316.                     writebyte(m_object, 0x31E, 0)
  317.                     writebyte(m_object, 0x31F, 0)
  318.                 end    
  319.             end
  320.             local random_camo = getrandomnumber(1, 30)
  321.             local id = resolveplayer(player)
  322.             if random_camo > 29 then
  323.                 svcmd("sv_invis " .. id)
  324.                 sendconsoletext(player, "You are Invisible!", 5, 0)
  325.             end
  326.             if gametype ~= 5 then
  327.                 local random_speed = getrandomnumber(1, 30)
  328.                 if random_speed >= 29 then
  329.                     setspeed(player, 1.5)
  330.                     sendconsoletext(player, "150% Speed!", 5, 0)
  331.                 elseif random_speed >= 1 and random_speed < 3 then 
  332.                     setspeed(player, 1.25)
  333.                     sendconsoletext(player, "125% Speed!", 5, 0)               
  334.                 end
  335.             end    
  336.         end
  337.     end
  338.     return false
  339. end
  340.  
  341. function OnWeaponReload(player, weapon)
  342.     local reload = nil
  343.         if getplayer(player) then
  344.             local m_player = getplayer(player)
  345.             local m_objectId = readdword(m_player + 0x34)
  346.             local m_object = getobject(m_objectId)
  347.             if m_object then
  348.                 local m_weaponId = readdword(m_object + 0x118)
  349.                 if m_weaponId then
  350.                     local m_weapon = getobject(m_weaponId)         
  351.                     local weapname = gettaginfo(readdword(m_weapon))
  352.                     if m_weapon then
  353.                         if weapname == "zteam\\objects\\weapons\\single\\spike_rifle\\h3\\spike_rifle" then
  354.                             writeword(getobject(weapon) + 0x2B8, brute_clip)
  355.                             updateammo(weapon)
  356.                             reload = false
  357.                         elseif weapname == "zteam\\objects\\weapons\\single\\needler\\h3\\needler" then
  358.                             writeword(getobject(weapon) + 0x2B8, needler_clip)
  359.                             updateammo(weapon)
  360.                             reload = false 
  361.                         else
  362.                             reload = true
  363.                         end
  364.                     end    
  365.                 end
  366.             end
  367.         end
  368.     return reload
  369. end
  370.  
  371. function InfBattery(id, count, arg)
  372.     local m_weapon = arg[1]
  373.     local player = arg[2]
  374.     if m_weapon and game_started then
  375.         if readfloat(m_weapon + 0x240) == 1 and mybattery[player] == 1 then
  376.             destroyplayerweaps(player)
  377.             replaceplasmaweap = registertimer(0, "ReplacePlasmaWeap", {player, m_weapon})
  378.             mybattery[player] = 0
  379.         end
  380.     end
  381.     return true
  382. end
  383.  
  384. function ReplacePlasmaWeap(id, count, arg)
  385.     local player = arg[1]
  386.     local m_weapon = arg[2]
  387.     if count == 1 then
  388.         if player and game_started then
  389.             local m_weaponId = createobject(gettagid("weap", weapons[player]), 0, 10, false, 0, 0, 0)
  390.             assignweapon(player, m_weaponId)
  391.             privatesay(player, "Battery recharged.")
  392.         end
  393.         mybattery[player] = 0
  394.     end
  395.     return false
  396. end
  397.  
  398. function getweaponobjectid(player, slot)
  399.     local m_objectId = getplayerobjectid(player)
  400.     if m_objectId then return readdword(getobject(m_objectId) + 0x2F8 + slot*4) end
  401. end
  402.  
  403. function destroyplayerweaps(player)
  404.     for i=0,3 do
  405.         local weap_id = getweaponobjectid(player, i)
  406.         if weap_id ~= 0xFFFFFFFF then destroyobject(weap_id) end
  407.     end
  408. end
  409.  
  410. function OnDamageLookup(receiving, causing, tagid)
  411.    
  412.     if receiving and causing and receiving ~= causing then
  413.         local player = objectidtoplayer(causing)
  414.         local tagname, tagtype = gettaginfo(tagid)
  415.         local brifle = string.find(tagname, "zteam\\objects\\weapons\\single\\battle_rifle\\h3\\bullet")
  416.         local melee = string.find(tagname, "melee")
  417.         local zoomout = string.find(tagname, "halo3\\hud_v2\\ui\\force_zoom_out")
  418.         local spikerd = string.find(tagname, "zteam\\objects\\weapons\\single\\spike_rifle\\h3\\spike")
  419.         local ppistol1 = string.find(tagname, "zteam\\objects\\weapons\\single\\plasma_pistol\\h3\\bolt")
  420.         local ppistol2 = string.find(tagname, "zteam\\objects\\weapons\\single\\plasma_pistol\\h3\\bolt_charged")
  421.         local plasrifle = string.find(tagname, "halo3\\weapons\\plasma_rifle\\effects\\bolt")
  422.         local needler = string.find(tagname, "zteam\\objects\\weapons\\single\\needler\\h3\\needle_impact" or
  423.         "zteam\\objects\\weapons\\single\\needler\\h3\\needle_detonation" or
  424.         "zteam\\objects\\weapons\\single\\needler\\h1\\needle_combining_explosion_shockwave" or
  425.         "zteam\\objects\\weapons\\single\\needler\\h3\\needle_combining_explosion" or "zteam\\shared\\damage_effects\\screen_effects\\darken_medium_medium")
  426.         local c_player = objectidtoplayer(causing)
  427.         local r_player = objectidtoplayer(receiving)
  428.  
  429.         --log_msg(1, "tag: " .. tagname)
  430.         if c_player and r_player then
  431.             if zoomout then return false end
  432.             if melee then odl_multiplier(9999) end 
  433.             if spikerd then odl_multiplier(1.25) end
  434.             if ppistol1 then odl_multiplier(2) end
  435.             if ppistol2 then odl_multiplier(1.6) end
  436.             if plasrifle then odl_multiplier(3) end
  437.             if brifle then odl_multiplier(1.7) end
  438.             if needler then odl_multiplier(1.25) end
  439.         end
  440.        
  441.     end
  442.  
  443.     return nil
  444. end
  445.  
  446. function OnObjectInteraction(player, objId, mapId)
  447.     local Pass = nil
  448.     local name, type = gettaginfo(mapId)
  449.     if type == "weap" then
  450.         if gametype == 1 or gametype == 3 then
  451.             if name == "zteam\\objects\\weapons\\multi_player\\skull\\h3\\skull" or name == "zteam\\objects\\weapons\\multi_player\\flag\\h3\\flag" then
  452.                 Pass = true
  453.             elseif weapons[player] ~= nil then
  454.                 if name ~= weapons[player] then
  455.                     Pass = false
  456.                 end
  457.             end
  458.         else
  459.             if weapons[player] ~= nil then
  460.                 if name ~= weapons[player] then
  461.                     Pass = false
  462.                 end
  463.             end
  464.         end
  465.     elseif type == "eqip" then
  466.         if name == "halo3\\weapons\\frag grenade\\frag grenade" or name == "halo3\\weapons\\plasma-grenade\\plasma grenade" then
  467.             Pass = false
  468.         end
  469.     end
  470.     return Pass
  471. end
  472.  
  473. function OnGameEnd(stage)
  474.     if stage == 1 then
  475.         game_started = false   
  476.         if gameweap then
  477.             gameweap = nil
  478.         end
  479.         if infbattery then
  480.             infbattery = nil
  481.         end
  482.         if replaceplasmaweap then
  483.             replaceplasmaweap = nil
  484.         end
  485.     elseif stage == 3 then
  486.         for i = 0, 15 do
  487.             if getplayer(i) then
  488.                 privatesay(i, "Thank you for playing Random Weapons for H3 Foundry!")
  489.                 privatesay(i, "by H\174 Shaft")
  490.             end
  491.         end    
  492.     end    
  493. end
  494.  
  495.  
  496. -- Start sendconsoletext overloaded by Nugget
  497. console = {}
  498. console.__index = console
  499. consoletimer = registertimer(100, "ConsoleTimer")
  500. phasor_sendconsoletext = sendconsoletext
  501.  
  502. function sendconsoletext(player, message, time, order, align, height, func)
  503.     if player then
  504.         console[player] = console[player] or {}
  505.         local temp = {}
  506.         temp.player = player
  507.         temp.id = nextid(player, order)
  508.         temp.message = message or ""
  509.         temp.time = time or 0.7
  510.         temp.remain = temp.time
  511.         temp.align = align or "left"
  512.         temp.height = height or 0
  513.         if type(func) == "function" then
  514.             temp.func = func
  515.         elseif type(func) == "string" then
  516.             temp.func = _G[func]
  517.         end
  518.         console[player][temp.id] = temp
  519.         setmetatable(console[player][temp.id], console)
  520.         return console[player][temp.id]
  521.     end
  522. end
  523.  
  524. function nextid(player, order)
  525.     if not order then
  526.         local x = 0
  527.         for k,v in pairs(console[player]) do
  528.             if k > x + 1 then
  529.                 return x + 1
  530.             end
  531.             x = x + 1
  532.         end
  533.         return x + 1
  534.     else
  535.         local original = order
  536.         while console[player][order] do
  537.             order = order + 0.001
  538.             if order == original + 0.999 then break end
  539.         end
  540.         return order
  541.     end
  542. end
  543.  
  544. function getmessage(player, order)
  545.     if console[player] then
  546.         if order then
  547.             return console[player][order]
  548.         end
  549.     end
  550. end
  551.  
  552. function getmessages(player)
  553.     return console[player]
  554. end
  555.  
  556. function getmessageblock(player, order)
  557.     local temp = {}
  558.     for k,v in opairs(console[player]) do
  559.         if k >= order and k < order + 1 then
  560.             table.insert(temp, console[player][k])
  561.         end
  562.     end
  563.     return temp
  564. end
  565.  
  566. function console:getmessage()
  567.     return self.message
  568. end
  569.  
  570. function console:append(message, reset)
  571.     if console[self.player] then
  572.         if console[self.player][self.id] then
  573.             if getplayer(self.player) then
  574.                 if reset then
  575.                     if reset == true then
  576.                         console[self.player][self.id].remain = console[self.player][self.id].time
  577.                     elseif tonumber(reset) then
  578.                         console[self.player][self.id].time = tonumber(reset)
  579.                         console[self.player][self.id].remain = tonumber(reset)
  580.                     end
  581.                 end
  582.                 console[self.player][self.id].message = message or ""
  583.                 return true
  584.             end
  585.         end
  586.     end
  587. end
  588.  
  589. function console:shift(order)
  590.     local temp = console[self.player][self.id]
  591.     console[self.player][self.id] = console[self.player][order]
  592.     console[self.player][order] = temp
  593. end
  594.  
  595. function console:pause(time)
  596.     console[self.player][self.id].pausetime = time or 5
  597. end
  598.  
  599. function console:delete()
  600.     console[self.player][self.id] = nil
  601. end
  602.  
  603. function ConsoleTimer(id, count)
  604.     for i,_ in opairs(console) do
  605.         if tonumber(i) then
  606.             if getplayer(i) then
  607.                 for k,v in opairs(console[i]) do
  608.                     if console[i][k].pausetime then
  609.                         console[i][k].pausetime = console[i][k].pausetime - 0.1
  610.                         if console[i][k].pausetime <= 0 then
  611.                             console[i][k].pausetime = nil
  612.                         end
  613.                     else
  614.                         if console[i][k].func then
  615.                             if not console[i][k].func(i) then
  616.                                 console[i][k] = nil
  617.                             end
  618.                         end
  619.                         if console[i][k] then
  620.                             console[i][k].remain = console[i][k].remain - 0.1
  621.                             if console[i][k].remain <= 0 then
  622.                                 console[i][k] = nil
  623.                             end
  624.                         end
  625.                     end
  626.                 end
  627.                 if table.len(console[i]) > 0 then
  628.                     local paused = 0
  629.                     for k,v in pairs(console[i]) do
  630.                         if console[i][k].pausetime then
  631.                             paused = paused + 1
  632.                         end
  633.                     end
  634.                     if paused < table.len(console[i]) then
  635.                         local str = ""
  636.                         for i = 0,30 do
  637.                             str = str .. " \n"
  638.                         end
  639.                         phasor_sendconsoletext(i, str)
  640.                         for k,v in opairs(console[i]) do
  641.                             if not console[i][k].pausetime then
  642.                                 if console[i][k].align == "right" or console[i][k].align == "center" then
  643.                                     phasor_sendconsoletext(i, consolecenter(string.sub(console[i][k].message, 1, 78)))
  644.                                 else
  645.                                     phasor_sendconsoletext(i, string.sub(console[i][k].message, 1, 78))
  646.                                 end
  647.                             end
  648.                         end
  649.                     end
  650.                 end
  651.             else
  652.                 console[i] = nil
  653.             end
  654.         end
  655.     end
  656.    
  657.     return true
  658. end
  659.  
  660. function consolecenter(text)
  661.     if text then
  662.         local len = string.len(text)
  663.         for i = len + 1, 78 do
  664.             text = " " .. text
  665.         end
  666.         return text
  667.     end
  668. end
  669.  
  670. function opairs(t)
  671.     local keys = {}
  672.     for k,v in pairs(t) do
  673.         table.insert(keys, k)
  674.     end    
  675.     table.sort(keys,
  676.     function(a,b)
  677.         if type(a) == "number" and type(b) == "number" then
  678.             return a < b
  679.         end
  680.         an = string.lower(tostring(a))
  681.         bn = string.lower(tostring(b))
  682.         if an ~= bn then
  683.             return an < bn
  684.         else
  685.             return tostring(a) < tostring(b)
  686.         end
  687.     end)
  688.     local count = 1
  689.     return function()
  690.         if table.unpack(keys) then
  691.             local key = keys[count]
  692.             local value = t[key]
  693.             count = count + 1
  694.             return key,value
  695.         end
  696.     end
  697. end
  698.  
  699. function table.len(t)
  700.     local count = 0
  701.     for k,v in pairs(t) do
  702.         count = count + 1
  703.     end
  704.     return count
  705. end
  706. -- Stop sendconsoletext overloaded
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement