Public feed #887223

Untitled

public lua v1 · immutable
Raw Edit
·published 2008-02-01 04:50 UTC
rendered paste body
--If the Arena has yet to be created put anything in here that should happen when it is created.if (g_arena == nil) then	g_arena = nil	g_player = nil	g_bGameRunning = false	g_bGameRestarting = false	g_cHumanKills = 0	g_cZombieKills = 0	g_cZombies = 0	g_cHumans = 0	g_cCompletedTurrets = 0	g_cCompletedWalls = 0	g_vHumanSilverVendor = nil	g_vZombieClassVendor = nil	g_vZombieSilverVendor = nil	g_qFortSlots = {['wall1'] = nil, ['wall2'] = nil, ['wall3'] = nil, ['wall4'] = nil, ['turret1'] = nil, ['turret2'] = nil, ['powergenerator'] = nil}	g_qFortQuests = {['turrets'] = false, ['powergenerator'] = false, ['walls'] = false}	g_oPlayers = { }	g_goPlayers = { }	g_tBlankPlayer = {['Silver'] = 0, ['Achievments'] = {'none'}, ['Zombie Kills'] = 0, ['Human Kills'] = 0}	dofile('TSF.lua')end--Create our arena.function Arena_OnCreate(arena)	g_arena = arena	math.randomseed(os.time())endfunction Player_OnJoin(plyr)	plyr:message('%Welcome to Zombie Mod v0.1')	--load players	if (g_goPlayers[plyr.m_name] == nil) then		g_goPlayers[plyr.m_name] = {['Zombie Kills'] = 0}	end	if (g_bGameRunning == false and g_arena:numPlaying() >= 2) then		startGame()	end	if (g_bGameRunning == false) then		plyr:message('*(Current Game Status: None)')	elseif (g_bGameRunning == true) then		plyr:message('*(Current Game Status: Running)')		plyr:message('*Zombies = ' .. g_cZombies .. ', Humans ' .. g_cHumans)	else		g_arena:message('Fatal Error, Player on join')	endendfunction Msg_OnCommand(plyr, command, payload, recipient, msg_type) -- player, string, string, string, integer		if (plyr:getPermissionLevel() == 3) then		if (command == '?reloadscript') then			plyr:message('Reloading Script')			dofile('zombiemod.lua')			plyr:message('Script Reloaded')			return		elseif (command == '?reloadtsf') then			plyr:message('Reloading TSF')			dofile('TSF.lua')			plyr:message('TSF Reloaded')			return		elseif (command == '?whereami') then			plyr:message('Gathering information on your location.')			local coords = plyr:coords()			plyr:message('X= ' .. coords.x .. ' Y= ' .. coords.y .. ' Rotation= ' .. coords.rotation)			plyr:message('You are in '..location(coords.x, coords.y))			return		elseif (command == "?place") then			plyr:message('Placing '..payload..' at current location')			local TSF = io.open('place.txt', "a+")			local coords = plyr:coords()			TSF:write(''..payload..' '..coords.x..', '..coords.y)			TSF:close()			return		elseif (command == '?turretbuild') then			local player = g_arena:getPlayer(''..payload..'')			if (player ~= nil) then				player:inventory_modify('Gun Barrel', 1)				player:inventory_modify('Box of Shells', 2)				player:inventory_modify('Power Cord', 1)			else				plyr:message('invalid player')			end			return		elseif (command == '?wallbuild') then			local player = g_arena:getPlayer(''..payload..'')			if (player ~= nil) then				player:inventory_modify('Concrete Slab', 3)				player:inventory_modify('Concrete Holder', 2)			else				plyr:message('invalid player')			end			return		elseif (command == '?powerbuild') then			local player = g_arena:getPlayer(''..payload..'')			if (player ~= nil) then				player:inventory_modify('Power Cord', 2)				player:inventory_modify('Broken Generator', 1)				player:inventory_modify('Jug of Gas', 1)			else				plyr:message('invalid player')			end			return		end	endendfunction location(x, y)	--1300 x 1300 blocks...	local letter	local number		local alphabet = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}	local numbers = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16'}	letter = alphabet[math.ceil(x / 1300)]	number = numbers[math.ceil(y / 1300)]		local coords = ''..letter..''..number..''	return coordsendfunction Player_OnUnspec(plyr)	if (g_bGameRunning == true) then		if (g_cHumans <= 5) then			plyr:inventory_modify('Human', 1)			plyr:unspec('Humans', 'Test')			g_cHumans = g_cHumans + 1		else			plyr:inventory_modify('Zombie', 1)			plyr:unspec('Zombies', 'Test')			g_cZombies = g_cZombies + 1		end	elseif (g_bGameRunning == false) then		plyr:inventory_modify('Human', 1)		plyr:unspec('Humans', 'Test')		g_cHumans = g_cHumans + 1	else		g_arena:message('Fatal Error no game found')	end		if (g_bGameRunning == false and g_bGameRestarting == false) then		g_arena:message('New Game Starting in 1 Minute')		g_bGameRestarting = true		event_create(startGame, 60000, g_arena)		event_create(checkTeams, -60000, g_arena)	end	return falseendfunction Vehicle_OnProduce(vehicle, plyr, menuitem)	local vid = vehicle:vehicletypeid()	g_arena:message('using vid ' ..vid)	if (vid == 403) then		if (plyr:getTeam().m_name == 'Zombie') then			if (menuitem == 0) then				plyr:message('$This is the Zombie Class Trainer, as the zombies grown in numbers more and more classes will be unlocked.')				plyr:message('$The following classes are listed by <zombie name> - <how many zombies there need to be to unlock>.')				plyr:message('')				plyr:message('$---------Zombie----------Health----------Speed------------------------Special Abilities(if any)----------')				plyr:message('@----Normal Zombie---------150-------------50-------------------------------Stun--------------------------')				plyr:message('!----Spider Zombie---------50--------------50-------------------------------Hard to Hit-------------------')				plyr:message('@----Fast Zombie-----------100-------------65-------------------------------Leap--------------------------')				plyr:message('!----Exploding Zombie------200-------------45-------------------------------Explode on Death--------------')				plyr:message('@----Hybrid-Zombie---------100-------------55-------------------------------Can Use Basic Human Weapons---')			elseif (menuitem == 1) then				if (g_cZombies >= 0) then					plyr:inventory_modify('Zombie', 1)					plyr:message('You are now a Zombie')				else					g_arena:message('Not Enough Zombies')				end			elseif (menuitem == 2) then				if (g_cZombies >= 5) then					plyr:inventory_modfiy('Spider Zombie', 1)					plyr:message('You are now a Spider Zombie')				else					g_arena:message('Not Enough Zombies')				end			elseif (menuitem == 3) then				if (g_cZombies >= 10) then					plyr:inventory_modify('Fast Zombie', 1)					plyr:message('You are now a Fast Zombie')				else					g_arena:message('Not Enough Zombies')				end			elseif (menuitem == 4) then				if (g_cZombies >= 15) then					plyr:inventory_modify('Exploding Zombie', 1)					plyr:message('You are now a Exploding Zombie')				else					g_arena:message('Not Enough Zombies')				end			elseif (menuitem == 5) then				if (g_cZombies >= 20) then					plyr:inventory_modify('Hybrid-Zombie', 1)					plyr:message('You are a Hybrid Zombie')				else					g_arena:message('Not Enough Zombies')				end			end		else			g_arena:message('You are not a Zombie')		end	elseif (vid == 405 or vid == 406 or vid == 400 or vid == 401 or vid == 402 or vid == 404 or vid == 407) then		fortQuests(vid, plyr, menuitem)	end	return falseendfunction startGame()	g_arena:message('%Starting a new game')	g_bGameRunning = true	if (vendorSpawn() == false) then		g_arena:message('Error in VendorSpawn')		return false	end	if (spawnFort() == false) then		g_arena:message('Error in Spawn Fort')		return false	end	if (foodSpawn() == false) then		g_arena:message('Error in FoodSpawn')		return false	end	if (chooseZombie() == false) then		g_arena:message('Error in choosing Zombie')		return false	end	for i=1, g_arena:numPlayers() do		local player = g_arena:getPlayer(i)		if (player ~= nil) then			player:changeTeam('Humans', 'test')			player:warp(5030, 4781, 10)		end	end	return falseendfunction vendorSpawn()	--g_vHumanSilverVendor = g_arena:vehicle_create()	g_vZombieClassVendor = g_arena:vehicle_create(403, 4843, 4981, 237)	g_vZombieClassVendor:setFrequency(-1)	--g_vZombieSilverVendor = g_arena:vehicle_create()endfunction spawnFort()	--This is where we spawn the for parts.	g_qFortSlots['turret1'] = g_arena:vehicle_create(406, 3756, 4684, 179)	g_qFortSlots['turret1']:setFrequency(-1)	g_qFortSlots['turret2'] = g_arena:vehicle_create(405, 5024, 3398, 179)	g_qFortSlots['turret2']:setFrequency(-1)	g_qFortSlots['wall1'] = g_arena:vehicle_create(400, 4572, 4766, 179)	g_qFortSlots['wall1']:setFrequency(-1)	g_qFortSlots['wall2'] = g_arena:vehicle_create(401, 4608, 4686, 179)	g_qFortSlots['wall2']:setFrequency(-1)	g_qFortSlots['wall3'] = g_arena:vehicle_create(402, 4956, 4294, 179)	g_qFortSlots['wall3']:setFrequency(-1)	g_qFortSlots['wall4'] = g_arena:vehicle_create(404, 5044, 4294, 179)	g_qFortSlots['wall4']:setFrequency(-1)	g_qFortSlots['powergenerator'] = g_arena:vehicle_create(407, 5212, 4948, 179)	g_qFortSlots['powergenerator']:setFrequency(-1)	return trueendfunction foodSpawn()	--This is going to be where we spawn the food	local arena = g_arena	arena:item_create("Food", 10, 727, 4745)	arena:item_create("Food", 10, 1011, 3729)	arena:item_create("Food", 10, 2083, 3845)	arena:item_create("Food", 10, 2635, 3865)	arena:item_create("Food", 10, 4487, 4901)	arena:item_create("Food", 10, 4651, 4405)	arena:item_create("Food", 10, 4555, 4061)	arena:item_create("Food", 10, 5207, 3873)	arena:item_create("Food", 10, 4719, 3229)	arena:item_create("Food", 10, 4863, 2105)	arena:item_create("Food", 10, 4463, 1777)	arena:item_create("Food", 10, 5059, 1673)	arena:item_create("Food", 10, 4735, 833)	arena:item_create("Food", 10, 2335, 1573)	arena:item_create("Food", 10, 2143, 3173)	arena:item_create("Food", 10, 2863, 2309)	arena:item_create("Food", 10, 2527, 3253)	arena:item_create("Food", 10, 2541, 4509)	arena:item_create("Food", 10, 3325, 4433)	arena:item_create("Food", 10, 3449, 3993)	arena:item_create("Food", 10, 3257, 3365)	arena:item_create("Food", 10, 3837, 3093)	arena:item_create("Food", 10, 3529, 2401)	arena:item_create("Food", 10, 3237, 2057)	arena:item_create("Food", 10, 3565, 1549)	arena:item_create("Food", 10, 3065, 1973)	arena:item_create("Food", 10, 2541, 1897)	arena:item_create("Food", 10, 2493, 2825)	arena:item_create("Food", 10, 2909, 2697)	arena:item_create("Food", 10, 3341, 4928)	arena:item_create("Food", 10, 4209, 4324)	arena:item_create("Food", 10, 4617, 3720)	arena:item_create("Food", 10, 4465, 2864)	arena:item_create("Food", 10, 5181, 2860)	arena:item_create("Food", 10, 5049, 2068)	arena:item_create("Food", 10, 4765, 1424)	arena:item_create("Food", 10, 1153, 3332)	arena:item_create("Food", 10, 2041, 4512)	arena:item_create("Food", 10, 2549, 4880)	arena:item_create("Food", 10, 2289, 4880)	return trueendfunction fortQuests(vid, plyr, menuitem)	--This is where we manage fort quests	if (plyr:getTeam().m_name == 'Zombie') then		return	end	if (vid == 400 or vid == 401 or vid == 402 or vid == 404) then		if (g_qFortQuests['turrets'] == true) then			if (menuitem == 0) then				plyr:message('This looks like a good place to build a wall however you will need 3 Concrete Slabs, and 2 Concrete Holders')			elseif (menuitem == 1) then				local slabs = plyr:inventory_find('Concrete Slab')				local holders = plyr:inventory_find('Concrete Holder')				if (slabs >= 3 and holders >= 2) then					plyr:inventory_modify('Concrete Slab', -3)					plyr:inventory_modify('Concrete Holder', -2)					g_cCompletedWalls = g_cCompletedWalls + 1					if (vid == 400) then						local c = g_qFortSlots['wall1']:coords()						g_qFortSlots['wall1']:destroy()						g_qFortSlots['wall1'] = g_arena:vehicle_create(408, c.x, c.y, c.rotation)					elseif (vid == 401) then						local c = g_qFortSlots['wall2']:coords()						g_qFortSlots['wall2']:destroy()						g_qFortSlots['wall2'] = g_arena:vehicle_create(409, c.x, c.y, c.rotation)					elseif (vid == 402) then						local c = g_qFortSlots['wall3']:coords()						g_qFortSlots['wall3']:destroy()						g_qFortSlots['wall3'] = g_arena:vehicle_create(410, c.x, c.y, c.rotation)					elseif (vid == 404) then						local c = g_qFortSlots['wall4']:coords()						g_qFortSlots['wall4']:destroy()						g_qFortSlots['wall4'] = g_arena:vehicle_create(411, c.x, c.y, c.rotation)					end				else					plyr:message('You do not have enough materials to construct this.')				end			end		else			plyr:message('You should probably worry about some turrets first.')		end	end		if (vid == 406 or vid == 405) then		if (menuitem == 0) then			plyr:message('This is a good place to build a turret, but you will need 1 Gun Barrel, 2 Box of Shells and 1 Power Cord')		elseif (menuitem == 1) then			local barrels = plyr:inventory_find('Gun Barrel')			local shells = plyr:inventory_find('Box of Shells')			local cords = plyr:inventory_find('Power Cord')			if (barrels >= 1 and shells >= 2 and cords >= 1) then				plyr:inventory_modify('Gun Barrel', -1)				plyr:inventory_modify('Box of Shells', -2)				plyr:inventory_modify('Power Cord', -1)				g_cCompletedTurrets = g_cCompletedTurrets + 1				if (vid == 406) then					local c = g_qFortSlots['turret1']:coords()					g_qFortSlots['turret1']:destroy()					g_qFortSlots['turret1'] = g_arena:vehicle_create(412, c.x, c.y, c.rotation)				elseif (vid == 405) then					local c = g_qFortSlots['turret2']:coords()					g_qFortSlots['turret2']:destroy()					g_qFortSlots['turret2'] = g_arena:vehicle_create(413, c.x, c.y, c.rotation)				end			else				plyr:message('You do not have enough materials to construct this.')			end		end	end		if (vid == 407) then		if (g_qFortQuests['walls'] == true) then			if (menuitem == 0) then				plyr:message('You could build a good Generator here, but you will need 1 Jug of Gas, 1 Broken Generator, and 2 Power Cords')			elseif (menuitem == 1) then				local gas = plyr:inventory_find('Jug of Gas')				local cords = plyr:inventory_find('Power Cord')				local generator = plyr:inventory_find('Broken Generator')				if (gas >= 1 and cords >= 2 and generator >= 1) then					plyr:inventory_modify('Jug of Gas', -1)					plyr:inventory_modify('Power Cord', -2)					plyr:inventory_modify('Broken Generator', -1)					g_arena:message('Humans Win, new game in 1 minute.')					g_bGameRunning = false					g_bGameRestarting = true					event_create(startGame, 60000, g_arena)					local c = g_qFortSlots['powergenerator']:coords()					g_qFortSlots['powergenerator']:destroy()					g_qFortSlots['powergenerator'] = g_arena:vehicle_create(414, c.x, c.y, c.rotation)				else					plyr:message('You do not have eaough materials to construct this.')				end			end		else			plyr:message('You should probably worry about some walls first.')		end	end			--Now lets check to see if any quests were finished	if (g_cCompletedWalls == 4) then		g_qFortQuests['walls'] = true	elseif (g_cCompletedTurrets == 2) then		g_qFortQuests['turrets'] = true	endendfunction chooseZombie()	local number = math.random(1, g_arena:numPlaying())	player = g_arena:getPlayer(number)	if (player:spectator() == false and player ~= nil) then		player:changeTeam('Zombie', 'test')		player:inventory_modify('Zombie', 1)		g_cHumans = g_cHumans - 1		g_cZombies = g_cZombies + 1		player:warp(1, 1, 0)	else		chooseZombie()	end	return trueendfunction checkTeams()	local zombie = team_fromName(g_arena, 'Zombie')	local human = team_fromName(g_arena, 'Humans')	if (zombie:numPlaying() == 0) then		chooseZombie()	else		g_cZombies = zombie:numPlaying()	end		if (human:numPlaying() == 0) then		g_bGameRunning = false		g_bGameRestarting = true		g_arena:message('Zombies Win')		event_create(startGame, 60000, g_arena)	else		g_cHumans = human:numPlaying()	end	return falseendfunction Player_OnDeath(killer, victim)	g_arena:message(victim..' was turned by '..killer)	checkTeams()end