Advertisement
Alakazard12

game

Aug 1st, 2013
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.55 KB | None | 0 0
  1. -- Don't change anything!!!!!!!
  2.  
  3. local Shop = {
  4. ["Items"] = {
  5. {{276, 1}, 10000, "1", "^BDiamond Sword"};
  6. {{268, 1}, 150, "3", "^6Wooden Sword"};
  7. {{272, 1}, 1000, "4", "^7Stone Sword"};
  8. {{267, 1}, 5000, "5", "^8Iron Sword"};
  9. {{298, 1}, 300, "6", "^6Leather Helmet"};
  10. {{299, 1}, 300, "7", "^6Leather Chestplate"};
  11. {{300, 1}, 300, "8", "^6Leather Leggings"};
  12. {{301, 1}, 300, "9", "^6Leather Boots"};
  13. {{306, 1}, 500, "10", "^8Iron Helmet"};
  14. {{307, 1}, 500, "11", "^8Iron Chestplate"};
  15. {{308, 1}, 500, "12", "^8Iron Leggings"};
  16. {{309, 1}, 500, "13", "^8Iron Boots"};
  17. {{310, 1}, 6000, "14", "^bDiamond Helmet"};
  18. {{311, 1}, 6000, "15", "^bDiamond Chestplate"};
  19. {{312, 1}, 6000, "16", "^bDiamond Leggings"};
  20. {{313, 1}, 6000, "17", "^bDiamond Boots"};
  21. };
  22. ["Effects"] = {
  23. {{"Speed", 9999, 1}, 350, "2", "^bSpeed I"};
  24. };
  25. }
  26.  
  27. local Maps = {
  28. ["Prex"] = {
  29. ZombiePosition = {2047, 11, 1513};
  30. PlayerPosition = {2047, 4, 1513};
  31.  
  32. ZombieItems = {
  33. {268, 1};
  34. {298, 1};
  35. {299, 1};
  36. {300, 1};
  37. {301, 1};
  38. };
  39. PlayerItems = {
  40. {261, 1};
  41. {262, 64};
  42. {262, 64};
  43. };
  44. };
  45.  
  46. ["Psy Town"] = {
  47. ZombiePosition = {2131, 4, 1480};
  48. PlayerPosition = {2117, 8, 1500};
  49.  
  50. ZombieItems = {
  51. {268, 1};
  52. {298, 1};
  53. {299, 1};
  54. {300, 1};
  55. {301, 1};
  56. };
  57. PlayerItems = {
  58. {261, 1};
  59. {262, 64};
  60. {262, 64};
  61. }
  62. }
  63. }
  64.  
  65. local PlayerItems = {}
  66. local PlayerEffects = {}
  67.  
  68. local Points = {}
  69. local AMI = peripheral.wrap("right")
  70. os.loadAPI("/textutils")
  71. local CMD = peripheral.wrap("left")
  72. local World = AMI.getWorld(AMI.getPeripheralWorldID())
  73. math.randomseed(os.clock() * os.time())
  74.  
  75. if fs.exists("/shop") then
  76. local ShopF = fs.open("/shop", "r")
  77. Shop = textutils.unserialize(ShopF.readAll())
  78. ShopF.close()
  79. else
  80. local ShopF = fs.open("/shop", "w")
  81. local ToWrite = "{\n [\"Items\"] = {"
  82. for _,Item in pairs(Shop["Items"]) do
  83. ToWrite = ToWrite .. "\n {{" .. Item[1][1] .. ", " .. Item[1][2] .. "}, " .. Item[2] .. ", \"" .. Item[3] .. "\", \"" .. Item[4] .. "\"};"
  84. end
  85.  
  86. ToWrite = ToWrite .. "\n };\n [\"Effects\"] = {"
  87.  
  88. for _,Effect in pairs(Shop["Effects"]) do
  89. ToWrite = ToWrite .. "\n {{" .. Effect[1][1] .. ", " .. Effect[1][2] .. "}, " .. Effect[2] .. ", \"" .. Effect[3] .. "\", \"" .. Effect[4] .. "\"};"
  90. end
  91.  
  92. ToWrite = ToWrite .. "\n };\n"
  93.  
  94. ToWrite = ToWrite .. "}"
  95.  
  96. ShopF.write(ToWrite)
  97. ShopF.close()
  98. end
  99.  
  100. if fs.exists("/maps") then
  101. local MapsF = fs.open("/maps", "r")
  102. Maps = textutils.unserialize(MapsF.readAll())
  103. MapsF.close()
  104. else
  105. local MapsF = fs.open("/maps", "w")
  106. local ToWrite = "{"
  107.  
  108. for _,Map in pairs(Maps) do
  109. ToWrite = ToWrite .. "\n [\"" .. _ .. "\"] = {\n ZombiePosition = {" .. Map.ZombiePosition[1] .. ", " .. Map.ZombiePosition[2] .. ", " .. Map.ZombiePosition[3] .. "};\n PlayerPosition = {" .. Map.PlayerPosition[1] .. ", " .. Map.PlayerPosition[2] .. ", " .. Map.PlayerPosition[3] .. "};\n\n ZombieItems = {"
  110. for _,Item in pairs(Map.ZombieItems) do
  111. ToWrite = ToWrite .. "\n {" .. Item[1] .. ", " .. Item[2] .. "};"
  112. end
  113. ToWrite = ToWrite .. "\n };\n PlayerItems = {"
  114. for _,Item in pairs(Map.PlayerItems) do
  115. ToWrite = ToWrite .. "\n {" .. Item[1] .. ", " .. Item[2] .. "};"
  116. end
  117. ToWrite = ToWrite .. "\n };"
  118.  
  119. ToWrite = ToWrite .. "\n };"
  120. end
  121. ToWrite = ToWrite .. "}"
  122. MapsF.write(ToWrite)
  123. MapsF.close()
  124. end
  125.  
  126. if fs.exists("/points") then
  127. local File = fs.open("/points", "r")
  128. Points = textutils.unserialize(File.readAll())
  129. File.close()
  130. end
  131.  
  132. if fs.exists("/playerEffects") then
  133. local File = fs.open("/playeritems", "r")
  134. PlayerItems = textutils.unserialize(File.readAll())
  135. File.close()
  136. end
  137.  
  138. if fs.exists("/playereffects") then
  139. local File = fs.open("/playereffects", "r")
  140. PlayerEffects = textutils.unserialize(File.readAll())
  141. File.close()
  142. end
  143.  
  144. local function SavePoints()
  145. local File = fs.open("/points", "w")
  146. File.write(textutils.serialize(Points))
  147. File.close()
  148. end
  149.  
  150. local function SavePlayerItems()
  151. local File = fs.open("/playeritems", "w")
  152. File.write(textutils.serialize(PlayerItems))
  153. File.close()
  154. end
  155.  
  156. local function SavePlayerEffects()
  157. local File = fs.open("/playereffects", "w")
  158. File.write(textutils.serialize(PlayerEffects))
  159. File.close()
  160. end
  161.  
  162. local function GTable(Table, Prefix, Suffix)
  163. Prefix = Prefix or ""
  164. Suffix = Suffix or ""
  165. local New = ""
  166.  
  167. for _,String in pairs(Table) do
  168. if _ == 1 then
  169. New = Prefix .. String .. Suffix
  170. elseif _ == #Table then
  171. New = New .. " and " .. Prefix .. String .. Suffix
  172. else
  173. New = New .. ", " .. Prefix .. String .. Suffix
  174. end
  175. end
  176.  
  177. return New
  178. end
  179.  
  180. local function AddPoints(Player, Count)
  181. if not Points[Player] then
  182. Points[Player] = Count
  183. else
  184. Points[Player] = Points[Player] + Count
  185. end
  186. SavePoints()
  187. end
  188.  
  189. local function GetPlayerNames()
  190. return AMI.getPlayerUsernames()
  191. end
  192.  
  193. local function GetPlayers()
  194. local Players = {}
  195. for _,Name in pairs(GetPlayerNames()) do
  196. table.insert(Players, AMI.getPlayerByName(Name))
  197. end
  198.  
  199. return Players
  200. end
  201.  
  202. local function Broadcast(Message, Header)
  203. if Header then
  204. Message = "^r[^4^lZombieGame^r] " .. Message
  205. end
  206.  
  207. Message = Message:gsub("%^", string.char(0xc2) .. string.char(0xa7))
  208.  
  209. for _,Player in pairs(GetPlayers()) do
  210. Player.sendChat(Message)
  211. end
  212. end
  213.  
  214. local function SendMessage(Player, Message, Header)
  215. if Header then
  216. Message = "^r[^4^lZombieGame^r] " .. Message
  217. end
  218.  
  219. Message = Message:gsub("%^", string.char(0xc2) .. string.char(0xa7))
  220.  
  221. AMI.getPlayerByName(Player).sendChat(Message)
  222. end
  223.  
  224. local function RunCommand(Command)
  225. CMD.setCommand(Command)
  226. CMD.runCommand()
  227. end
  228.  
  229. local function GameThread()
  230. while true do
  231. --[[Broadcast("Starting game in 1 minute.", true)
  232. sleep(50)
  233. Broadcast("Starting game in 10 seconds.", true)
  234. sleep(5)]]
  235. Broadcast("Starting game in 5 seconds.", true)
  236. sleep(5)
  237.  
  238. Broadcast("Starting game.", true)
  239.  
  240. local Players = GetPlayers()
  241. local Zombies = {}
  242. local FZombies = {}
  243. local ZombieCount = 1
  244.  
  245. local OZombie = Players[math.random(1, #Players)]
  246. Broadcast("^c" .. OZombie.getUsername() .. "^r is the zombie.", true)
  247. Zombies[OZombie.getUsername()] = true
  248.  
  249. RunCommand("clear @a")
  250.  
  251. local MapCount = 0
  252. for _,__ in pairs(Maps) do
  253. MapCount = MapCount + 1
  254. end
  255. local MapN = math.random(1, MapCount)
  256. local Map
  257. local MOn = 0
  258. local MapName
  259. for _,MapO in pairs(Maps) do
  260. MOn = MOn + 1
  261. if MOn == MapN then
  262. Map = MapO
  263. MapName = _
  264. end
  265. end
  266. Broadcast(MapName .. " is the map.", true)
  267.  
  268. for _,Player in pairs(Players) do
  269. RunCommand("gamemode 0 " .. Player.getUsername())
  270. if not Zombies[Player.getUsername()] then
  271. for _,Item in pairs(Map.PlayerItems) do
  272. RunCommand("give " .. Player.getUsername() .. " " .. Item[1] .. " " .. Item[2])
  273. end
  274. Player.asEntity().setPosition(unpack(Map.PlayerPosition))
  275. -- Player.setHealth(0)
  276. RunCommand("spawnpoint " .. Player.getUsername() .. " " .. Map.PlayerPosition[1] .. " " .. Map.PlayerPosition[2] .. " " .. Map.PlayerPosition[3])
  277. else
  278. for _,Item in pairs(Map.ZombieItems) do
  279. RunCommand("give " .. Player.getUsername() .. " " .. Item[1] .. " " .. Item[2])
  280. end
  281. Player.asEntity().setPosition(unpack(Map.ZombiePosition))
  282. RunCommand("spawnpoint " .. Player.getUsername() .. " " .. Map.ZombiePosition[1] .. " " .. Map.ZombiePosition[2] .. " " .. Map.ZombiePosition[3])
  283. end
  284.  
  285. if PlayerItems[Player.getUsername()] then
  286. for _,Item in pairs(PlayerItems[Player.getUsername()]) do
  287. RunCommand("give " .. Player.getUsername() .. " " .. Item[1] .. " " .. Item[2])
  288. end
  289. end
  290. if PlayerEffects[Player.getUsername()] then
  291. for _,Effect in pairs(PlayerEffects[Player.getUsername()]) do
  292. RunCommand("effect " .. Player.getUsername() .. " " .. Effect[1] .. " " .. Effect[2] .. " " .. Effect[3])
  293. end
  294. end
  295. end
  296.  
  297. local Timer1 = os.startTimer(180)
  298. local Timer2 = os.startTimer(230)
  299. local Timer3 = os.startTimer(235)
  300. local Timer4 = os.startTimer(240)
  301.  
  302. Broadcast("4 minutes left!", true)
  303.  
  304. local function PlayerDead(P1)
  305. if not Zombies[P1] then
  306. Zombies[P1] = true
  307. RunCommand("clear " .. P1)
  308. Broadcast("^2" .. P1 .. "^r has been infected!", true)
  309. World.playSound("ambient.weather.thunder", Map.ZombiePosition[1], Map.ZombiePosition[2], Map.ZombiePosition[3], 100, 1)
  310. ZombieCount = ZombieCount + 1
  311. FZombies[P1] = true
  312.  
  313. if #Players == ZombieCount then
  314. RunCommand("spawnpoint @a 2088 4 1545")
  315. RunCommand("tp @a 2088 4 1545")
  316. RunCommand("clear @a")
  317. for _,Player in pairs(GetPlayerNames()) do
  318. if PlayerEffects[Player] then
  319. for _,Effect in pairs(PlayerEffects[Player]) do
  320. RunCommand("effect " .. Player .. " " .. Effect[1] .. " 0")
  321. end
  322. end
  323. end
  324. Broadcast("^cZombies^r win!", true)
  325. AddPoints(OZombie.getUsername(), 30)
  326. Broadcast("^c" .. OZombie.getUsername() .. "^r has been awarded 30 points!", true)
  327. return true
  328. end
  329. end
  330. end
  331.  
  332. while true do
  333. local Event, P1 = os.pullEvent()
  334. if Event == "chat_death" then
  335. local Ret = PlayerDead(P1)
  336. if Ret == true then
  337. break
  338. end
  339. elseif Event == "player_respawn" then
  340. if not Zombies[P1] then
  341. local Ret = PlayerDead(P1)
  342. if Ret == true then
  343. break
  344. end
  345. end
  346. -- AMI.getPlayerByName(P1).asEntity().setPosition(unpack(Map.ZombiePosition))
  347.  
  348. if FZombies[P1] == true then
  349. FZombies[P1] = nil
  350. RunCommand("clear " .. P1)
  351. for _,Item in pairs(Map.ZombieItems) do
  352. RunCommand("give " .. P1 .. " " .. Item[1] .. " " .. Item[2])
  353. end
  354. if PlayerItems[P1] then
  355. for _,Item in pairs(PlayerItems[P1]) do
  356. RunCommand("give " .. P1 .. " " .. Item[1] .. " " .. Item[2])
  357. end
  358. end
  359. end
  360.  
  361. if PlayerEffects[P1] then
  362. for _,Effect in pairs(PlayerEffects[P1]) do
  363. RunCommand("effect " .. P1 .. " " .. Effect[1] .. " " .. Effect[2] .. " " .. Effect[3])
  364. end
  365. end
  366. -- World.setBlock(Map.ZombiePosition[1], Map.ZombiePosition[2], Map.ZombiePosition[3], 1, 0)
  367. -- sleep(0.5)
  368. -- World.setBlock(Map.ZombiePosition[1], Map.ZombiePosition[2], Map.ZombiePosition[3], 0, 0)
  369. elseif Event == "timer" then
  370. if P1 == Timer1 then
  371. Broadcast("1 minute left!", true)
  372. elseif P1 == Timer2 then
  373. Broadcast("10 seconds left!", true)
  374. elseif P1 == Timer3 then
  375. Broadcast("5 seconds left!", true)
  376. elseif P1 == Timer4 then
  377. RunCommand("spawnpoint @a 2088 4 1545")
  378. RunCommand("tp @a 2088 4 1545")
  379. RunCommand("clear @a")
  380. for _,Player in pairs(GetPlayerNames()) do
  381. if PlayerEffects[Player] then
  382. for _,Effect in pairs(PlayerEffects[Player]) do
  383. RunCommand("effect " .. Player .. " " .. Effect[1] .. " 0")
  384. end
  385. end
  386. end
  387. Broadcast("^2Survivors^r win!", true)
  388. local Survivors = {}
  389. for _,Player in pairs(Players) do
  390. if not Zombies[Player.getUsername()] then
  391. AddPoints(Player.getUsername(), 50)
  392. table.insert(Survivors, Player.getUsername())
  393. end
  394. end
  395.  
  396. Broadcast(GTable(Survivors, "^2", "^r") .. " have been awarded 50 points!", true)
  397. break
  398. end
  399. end
  400. end
  401. end
  402. end
  403.  
  404. local function GetPlayer(Name)
  405. local List = {}
  406. for _,Player in pairs(GetPlayerNames()) do
  407. if Player:lower():sub(1, #Name) == Name:lower() then
  408. table.insert(List, AMI.getPlayerByName(Player))
  409. end
  410. end
  411. return List
  412. end
  413.  
  414. local function LobbyThread()
  415. while true do
  416. local Event, P1, P2 = os.pullEvent()
  417. if Event == "chat_message" then
  418. local Args = {}
  419. for Arg in P2:gmatch("([^ ]+)") do
  420. table.insert(Args, Arg)
  421. end
  422. if Args[1] == "/buy" then
  423. Args[3] = Args[2]
  424. Args[1] = "/shop"
  425. Args[2] = "buy"
  426. end
  427. if Args[1] == "/shop" then
  428. if not Args[2] then
  429. SendMessage(P1, "Usage: /shop <list;buy>", true)
  430. else
  431. if Args[2] == "list" then
  432. if not Args[3] then
  433. SendMessage(P1, "Usage: /shop list <items;effects>", true)
  434. else
  435. if Args[3] == "items" then
  436. SendMessage(P1, "Listing shop items", true)
  437. for _,Item in pairs(Shop["Items"]) do
  438. SendMessage(P1, Item[3] .. ": " .. Item[4] .. "^r: Price: " .. Item[2])
  439. end
  440. elseif Args[3] == "effects" then
  441. SendMessage(P1, "Listing shop effects", true)
  442. for _,Effect in pairs(Shop["Effects"]) do
  443. SendMessage(P1, Effect[3] .. ": " .. Effect[4] .. "^r: Price: " .. Effect[2])
  444. end
  445. end
  446. end
  447. elseif Args[2] == "buy" then
  448. if not Args[3] then
  449. SendMessage(P1, "Usage: /shop buy <shopid>")
  450. else
  451. local Item
  452. local IsItem = false
  453. local ItemName
  454. for _,TItem in pairs(Shop["Items"]) do
  455. if TItem[3] == Args[3] then
  456. Item = TItem
  457. ItemName = TItem[4]
  458. IsItem = true
  459. end
  460. end
  461. for _,TEffect in pairs(Shop["Effects"]) do
  462. if TEffect[3] == Args[3] then
  463. Item = TEffect
  464. ItemName = TEffect[4]
  465. end
  466. end
  467. if Item then
  468. if not PlayerItems[P1] then
  469. PlayerItems[P1] = {}
  470. end
  471. if not PlayerEffects[P1] then
  472. PlayerEffects[P1] = {}
  473. end
  474. if (Points[P1] or 0) >= Item[2] then
  475. Points[P1] = Points[P1] - Item[2]
  476. SavePoints()
  477. if IsItem == true then
  478. table.insert(PlayerItems[P1], Item[1])
  479. SavePlayerItems()
  480. else
  481. table.insert(PlayerEffects[P1], Item[1])
  482. SavePlayerEffects()
  483. end
  484. SendMessage(P1, "Bought " .. ItemName .. "^r for " .. Item[2] .. " points", true)
  485. if IsItem == true then
  486. RunCommand("give " .. P1 .. " " .. Item[1][1] .. " " .. Item[1][2])
  487. else
  488. RunCommand("effect " .. P1 .. " " .. Item[1][1] .. " " .. Item[1][2] .. " " .. Item[1][3])
  489. end
  490. else
  491. SendMessage(P1, "You need " .. ((Points[P1] or 0) - Item[2]) * -1 .. " more points for that", true)
  492. end
  493. else
  494. SendMessage(P1, "Item not found", true)
  495. end
  496. end
  497. end
  498. end
  499. elseif Args[1] == "/points" then
  500. if not Args[2] then
  501. SendMessage(P1, "You have " .. (Points[P1] or 0) .. " points", true)
  502. else
  503. local Players = GetPlayer(Args[2])
  504. if #Players == 0 then
  505. SendMessage(P1, Args[2] .. " has " .. (Points[Args[2]] or 0) .. " points" , true)
  506. else
  507. for _,Player in pairs(Players) do
  508. SendMessage(P1, Player.getUsername() .. " has " .. (Points[Player.getUsername()] or 0) .. " points", true)
  509. end
  510. end
  511. end
  512. end
  513. end
  514. end
  515. end
  516.  
  517. local function AdminThread()
  518.  
  519. end
  520.  
  521. parallel.waitForAll(LobbyThread, GameThread, AdminThread)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement