Advertisement
Guest User

quatrololololol

a guest
Feb 21st, 2013
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --------------------------------------------------
  2. -- UT+Quake Sounds Script by Unreal Software    --
  3. -- 22.02.2009 - www.UnrealSoftware.de           --
  4. -- Adds UT and Quake Sounds to your Server      --
  5. --------------------------------------------------
  6.  
  7. if sample==nil then sample={} end
  8. sample.ut={}
  9.  
  10. -----------------------
  11. -- INITIAL SETUP     --
  12. -----------------------
  13. function initArray(m)
  14.      local array = {}
  15.      for i = 1, m do
  16.           array[i]=0
  17.      end
  18.      return array
  19. end
  20. sample.ut.timer=initArray(32)                    -- time of last kill, for each player
  21. sample.ut.level=initArray(32)                    -- current kill level (killstreak), for each player
  22. sample.ut.fblood=0                                   -- first blood already shed? 0=no/1=yes
  23.  
  24. -----------------------
  25. -- KILL SOUNDS+MSGS  --
  26. -----------------------
  27. addhook("kill","sample.ut.kill")
  28. function sample.ut.kill(killer,victim,weapon)
  29.      sample.ut.level[victim]=0  
  30.      level=sample.ut.level[killer]
  31.      level=level+1
  32.      sample.ut.level[killer]=level
  33.           if (level==4) then
  34.                parse("sv_sound \"e5/ultrakill.wav\"")
  35.                msg (player(killer,"name").." ©000000255made an ULTRAKILL!@C")
  36.           elseif (level==5) then
  37.                parse("sv_sound \"e5/dominating.wav\"")
  38.                msg (player(killer,"name").." ©000000255is DOMINATING the other team!@C")
  39.           elseif (level==10) then
  40.                parse("sv_sound \"e5/headhunter.wav\"")
  41.                msg (player(killer,"name").." ©000000255killed 10 in a row!!@C")
  42.           elseif (level==20) then
  43.                parse("sv_sound \"e5/megakill.wav\"")
  44.                msg (player(killer,"name").." ©000000255continues his streak with 20 kills in a row!!@C")
  45.           elseif (level==50) then
  46.                parse("sv_sound \"e5/ownage.wav\"")
  47.                msg (player(killer,"name").." ©000000255just can't die... 50 kill streak!!!@C")
  48.           elseif (level==100) then
  49.                parse("sv_sound \"e5/unstoppable.wav\"")
  50.                msg (player(killer,"name").." ©000000255100 kills in a row... UNSTOPPABLE!@C")
  51.           elseif (level==200) then
  52.                parse("sv_sound \"e5/godlike.wav\"")
  53.                msg (player(killer,"name").." ©0002555000has demonstrated legendary skill with 200 killing streak!@C")
  54.           end
  55. end
  56.  
  57. -----------------------------------------------
  58. ---Lua Lag Compensation version 2.2 by FlooD---
  59. -----------------------------------------------
  60. --[[       latest version always at
  61. raw.github.com/FloooD/C_lag_comp/master/llc.lua
  62. ---------------------------------------------]]
  63.  
  64. math.randomseed(os.time())
  65.  
  66. ping = {}
  67. mode = {{}, {}, {}}
  68. buf = {{}, {}}
  69. disabled = {}
  70. no_lc={}
  71. for _, v in ipairs({0, 47, 48, 49, 51, 72, 73, 75, 76, 77, 86, 87, 88, 89, 253, 254, 255}) do
  72.     disabled[v] = true
  73. end
  74.  
  75. armor = {}
  76. for i, v in ipairs({25, 50, 75, 50, 95}) do
  77.     armor[200 + i] = 1 - (v / 100)
  78. end
  79.  
  80. function lc_reset(id)
  81.     mode[1][id] = 0
  82.     mode[2][id] = 0
  83.     mode[3][id] = 0
  84.     buf[1][id] = {}
  85.     buf[2][id] = {}
  86.     ping[id] = nil
  87. end
  88. addhook("die", "lc_reset")
  89.  
  90. function lc_clear(id)
  91.     lc_reset(id)
  92.     no_lc[id] = false
  93. end
  94.  
  95. for i = 1, 32 do
  96.     lc_clear(i)
  97. end
  98. addhook("leave", "lc_clear")
  99.  
  100. function updateping(id)
  101.     local actualping = player(id, "ping")
  102.     if not actualping then return end
  103.     local lastping = ping[id]
  104.     if not lastping then lastping = 0 end
  105.     if actualping - lastping <= 30 or lastping == 0 then
  106.         ping[id] = actualping
  107.     else
  108.         ping[id] = 0.7 * lastping + 0.3 * actualping
  109.     end
  110. end
  111. addhook("spawn", "updateping")
  112.  
  113. function lc_second()
  114.     for i in pairs(ping) do
  115.         updateping(i)
  116.     end
  117. end
  118. addhook("second", "lc_second")
  119.  
  120. MAX_FRAMES = 15
  121. function updatebuf()
  122.     for i in pairs(ping) do
  123.         for j = MAX_FRAMES, 1, -1 do
  124.             buf[1][i][j], buf[2][i][j] = buf[1][i][j-1], buf[2][i][j-1]
  125.         end
  126.         buf[1][i][0], buf[2][i][0] = player(i, "x"), player(i, "y")
  127.     end
  128. end
  129. addhook("always", "updatebuf")
  130.  
  131. addhook("hit", "lc_hit", 1000)
  132. function lc_hit(v, id, wpn)
  133.     return (disabled[wpn] or id == 0 or no_lc[id]) and 0 or 1
  134. end
  135.  
  136. addhook("attack", "lc_attack")
  137. function lc_attack(id)
  138.     local wpn = player(id, "weapon")   
  139.     if disabled[wpn] or no_lc[id] then return end
  140.     local rot = player(id, "rot")
  141.     local dmg = itemtype(wpn, "dmg") * game("mp_damagefactor")
  142.     if (wpn == 2 and mode[1][id] == 1) or (wpn == 39 and mode[2][id] == 1) then
  143.         dmg = math.floor(dmg * 0.64 + 0.5)
  144.         simulate_attack(id, wpn, dmg, rot - 6 + 12 * math.random())
  145.         simulate_attack(id, wpn, dmg, rot + 6 + 8 * math.random())
  146.         simulate_attack(id, wpn, dmg, rot - 6 - 8 * math.random())
  147.         return
  148.     elseif wpn == 10 or wpn == 11 then
  149.         for i = 1, 5 do
  150.             simulate_attack(id, wpn, dmg, rot - 20 + 40 * math.random())
  151.         end
  152.         return
  153.     end
  154.     if mode[3][id] == 1 then
  155.         dmg = itemtype(wpn, "dmg_z1") * game("mp_damagefactor")
  156.     elseif mode[3][id] == 2 then
  157.         dmg = itemtype(wpn, "dmg_z2") * game("mp_damagefactor")
  158.     end
  159.     rot = rot + itemtype(wpn, "dispersion") * (2 * math.random() - 1)
  160.     simulate_attack(id, wpn, dmg, rot)
  161. end
  162.  
  163. addhook("attack2", "lc_attack2")
  164. function lc_attack2(id, m)
  165.     local wpn = player(id, "weapon")
  166.     if wpn == 50 or wpn == 69 then
  167.         if no_lc[id] then return end
  168.         simulate_attack(id, wpn, itemtype(wpn, "dmg_z1") * game("mp_damagefactor"))
  169.     elseif wpn == 2 then
  170.         mode[1][id] = m
  171.     elseif wpn == 39 then
  172.         mode[2][id] = m
  173.     elseif wpn ~= 32 and wpn >= 31 and wpn <= 37 then
  174.         mode[3][id] = m
  175.     end
  176. end
  177.  
  178. addhook("reload", "unzoom")
  179. addhook("select", "unzoom")
  180. function unzoom(id)
  181.     mode[3][id] = 0
  182. end
  183.  
  184. addhook("drop", "lc_drop")
  185. function lc_drop(id, iid, wpn)
  186.     mode[3][id] = 0
  187.     if wpn == 2 then
  188.         mode[1][id] = 0
  189.     elseif wpn == 39 then
  190.         mode[2][id] = 0
  191.     end
  192. end
  193.  
  194. addhook("collect", "lc_collect")
  195. function lc_collect(id, iid, wpn, ain, a, m)
  196.     if wpn == 2 then
  197.         mode[1][id] = m
  198.     elseif wpn == 39 then
  199.         mode[2][id] = m
  200.     end
  201. end
  202.  
  203. function simulate_attack(id, wpn, dmg, rot)
  204.     if not wpn then wpn = player(id, "weapon") end
  205.     if not dmg then dmg = itemtype(wpn, "dmg") * game("mp_damagefactor") end
  206.     if not rot then rot = player(id, "rot") end
  207.     local range = itemtype(wpn, "range")
  208.     local start_x = player(id, "x")
  209.     local start_y = player(id, "y")
  210.     local end_x = (3 * range) * math.sin(math.rad(rot))
  211.     local end_y = -(3 * range) * math.cos(math.rad(rot))
  212.     local tile_x = math.floor(start_x / 32)
  213.     local tile_y = math.floor(start_y / 32)
  214.     local inc_x, inc_y
  215.     if rot < 0 then
  216.         inc_x = -1
  217.     elseif rot > 0 and rot ~= 180 then
  218.         inc_x = 1
  219.     end
  220.     if math.abs(rot) > 90 then
  221.         inc_y = 1
  222.     elseif math.abs(rot) < 90 then
  223.         inc_y = -1
  224.     end
  225.     while not tile(tile_x, tile_y, "wall") do
  226.         local temp_x, temp_y = tile_x, tile_y
  227.         if inc_x and intersect(end_x, end_y, topixel(temp_x + inc_x) - start_x, topixel(temp_y) - start_y, 16) then
  228.             tile_x = temp_x + inc_x
  229.         end
  230.         if inc_y and intersect(end_x, end_y, topixel(temp_x) - start_x, topixel(temp_y + inc_y) - start_y, 16) then
  231.             tile_y = temp_y + inc_y
  232.         end
  233.         if tile_x == temp_x and tile_y == temp_y then
  234.             break
  235.         end
  236.     end
  237.     if tile(tile_x, tile_y, "wall") then
  238.         end_x, end_y = intersect(end_x, end_y, topixel(tile_x) - start_x, topixel(tile_y) - start_y, 16)
  239.     end
  240.     local frames = math.floor(0.5 + ping[id] / 20)
  241.     if frames > MAX_FRAMES then frames = MAX_FRAMES end
  242.     local victims = {}
  243.     if game("sv_friendlyfire") == "0" and game("sv_gamemode") ~= "1" then
  244.         for i in pairs(ping) do
  245.             if player(i, "team") ~= player(id, "team") then
  246.                 victims[i] = true
  247.             end
  248.         end
  249.     else
  250.         for i in pairs(ping) do
  251.             victims[i] = true
  252.         end
  253.         victims[id] = nil
  254.     end
  255.     for i in pairs(victims) do
  256.         if intersect(end_x, end_y, buf[1][i][frames] - start_x, buf[2][i][frames] - start_y, 12) then
  257.             parse("sv_sound2 "..id.." player/hit"..math.ceil(3 * math.random())..".wav")
  258.             parse("sv_sound2 "..i.." player/hit"..math.ceil(3 * math.random())..".wav")
  259.             local newhealth
  260.             local newarmor = player(i, "armor")
  261.             if newarmor <= 200 then
  262.                 newarmor = newarmor - dmg
  263.                 if newarmor < 0 then
  264.                     newarmor = 0
  265.                 end
  266.                 newhealth = player(i, "health") - (dmg - math.floor(game("mp_kevlar") * (player(i, "armor") - newarmor)))
  267.                 parse("setarmor "..i.." "..newarmor)
  268.             else
  269.                 newhealth = player(i, "health") - math.floor((dmg * (armor[newarmor] or 1)))
  270.             end
  271.             if newhealth > 0 then
  272.                 parse("sethealth "..i.." "..newhealth)
  273.             else
  274.                 parse("customkill "..id.." \""..itemtype(wpn, "name").."\" "..i)
  275.                 if wpn == 50 then
  276.                     parse("sv_sound \"e5/Ninja.wav\"");
  277.                     msg (player(id, "name").." ©000000255 NINJA style!!@C")
  278.                 end
  279.             end
  280.         end
  281.     end
  282. end
  283.  
  284. function topixel(tile)
  285.     return (tile * 32) + 16
  286. end
  287.  
  288. function intersect(ex, ey, bx, by, bl)
  289.     if not (bx and by) then return end
  290.     local cx, cy = (math.abs(bx) <= bl), (math.abs(by) <= bl)
  291.     if cx and cy then
  292.         if math.abs(ex - bx) <= bl and math.abs(ey - by) <= bl then
  293.             return ex, ey
  294.         end
  295.         bl = -bl
  296.     end
  297.     local ox = (ex >= 0) and bx - bl or bx + bl
  298.     local oy = (ey >= 0) and by - bl or by + bl
  299.     local flip
  300.     if (ex == 0 or (cx ~= cy or ((math.abs(ey * ox) >= math.abs(ex * oy)) == (bl < 0)))) and ((not cy) or cx) then
  301.         if ey == 0 then return end
  302.         ex, ey, bx, by, ox, oy = ey, ex, by, bx, oy, ox
  303.         flip = true
  304.     end
  305.     if (ox * ex) >= 0 and math.abs(ox) <= math.abs(ex) then
  306.         oy = ox * ey / ex
  307.         if math.abs(oy - by) <= math.abs(bl) then
  308.             if flip then return oy, ox end
  309.             return ox, oy
  310.         end
  311.     end
  312. end
  313.  
  314. addhook("serveraction", "lc_serveraction")
  315. function lc_serveraction(id, action)
  316.     if action == 1 then
  317.         msg2(id, "Lua Lag Compensation 2.2")
  318.         msg2(id, "Your current ping: "..player(id, "ping"))
  319.         msg2(id, "Current LC is "..(no_lc[id] and "off" or "on").." for yourself.")
  320.     elseif action == 2 then
  321.         no_lc[id] = not no_lc[id]
  322.         msg2(id, "LC toggled "..(no_lc[id] and "off" or "on").." for yourself.")
  323.         msg2(id, "Press the same button to toggle again.")
  324.     end
  325. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement