All pastes #929999 Raw Edit

Miscellany

public text v1 · immutable
·published 2008-03-06 05:31 UTC
rendered paste body
-- This holds all the functions for the player object manipulation.
go_player = { }
function createNewObject_player(name)
	if (name == '') then
		return false
	end
	
	go_player[name] = { }
	
	--account information
	go_player[name]['account'] = { }
	go_player[name]['account']['name'] = name

	--bindspot information
	go_player[name]['bindspot'] = { }
	go_player[name]['bindspot']['x'] = 1979
	go_player[name]['bindspot']['y'] = 2372

	--mark info
	go_player[name]['mark'] = { }
	go_player[name]['mark']['x'] = 0
	go_player[name]['mark']['y'] = 0
	
	--faction information
	go_player[name]['faction'] = { }
	go_player[name]['faction']['name'] = name
	go_player[name]['faction']['rank'] = 'Member'
	go_player[name]['faction']['invites'] = { }
	
	--alignment information
	go_player[name]['alignment'] = { }
	go_player[name]['alignment']['hasPicked'] = 0
	go_player[name]['alignment']['name'] = ''
	
	--skills information
	go_skills[name] = { }
	go_skills[name]['Sprint'] = 0
	go_skills[name]['Air Magic'] = 0
	go_skills[name]['Earth Magic'] = 0
	go_skills[name]['Fire Magic'] = 0
	go_skills[name]['Water Magic'] = 0
	go_skills[name]['Death Magic'] = 0
	go_skills[name]['Life Magic'] = 0
	go_skills[name]['Mining'] = 0
	go_skills[name]['Jump'] = 0

	

	return true
end

function loadObject_player(name)
	if (name == '' or importTSF(name, 'player') == false) then
		return false
	end

	go_player[name] = { }
	go_player[name] = importTSF(name, 'player')
	
	go_skills[name] = { }
	go_skills[name] = importTSF(name, 'skills')
	
	return true
end

function saveObject_player(name)
	if (name == '' or exportTSF(go_player[name], name, 'player') == false or exportTSF(go_skills[name], name, 'skills')) then
		return false
	else
		return true
	end
end


--this contains all quests and quest related functions

function handleQuests(vehicle, player, menuitem)
	
	local menu = menuitem + 1
	local vid = vehicle:vehicletypeid()

end


--includes everything with marking and recalling


function castMark(username, x, y)
	if (username == '') then
		return false
	end
	
	go_player[username]['mark']['x'] = x
	go_player[username]['mark']['y'] = y
	return true

end

function castRecall(user)
	if (user == nil) then
		return false
	end
	if (go_player[user.m_name]['mark']['x'] == 0 and go_player[user.m_name]['mark']['y'] == 0) then
		user:message('You have not yet marked a location to recall to.')
		return false
	end

	user:warp(go_player[user.m_name]['mark']['x'],	go_player[user.m_name]['mark']['y'], 0)
	return true
end


--this will hold all functions for skill related stuff.

gt_skills = { }
gt_skills['Sprint'] = {1, 2, 3, 4, 5}
gt_skills['Earth Magic'] = {6, 7, 8, 9, 10}
gt_skills['Air Magic'] = {11, 12, 13, 14, 15}
gt_skills['Fire Magic'] = {16, 17, 18, 19, 20}
gt_skills['Water Magic'] = {21, 22, 23, 24, 25}
gt_skills['Death Magic'] = {26, 27, 28, 29, 30}
gt_skills['Life Magic'] = {31, 32, 33, 34, 35}
gt_skills['Mining'] = {36, 37, 38, 39, 40}
gt_skills['Jump'] = {41, 42, 43, 44, 45}
gt_skillLevelRequired = { }
gt_skillLevelRequired['Sprint'] = 500
gt_skillLevelRequired['Earth Magic'] = 500
gt_skillLevelRequired['Air Magic'] = 500
gt_skillLevelRequired['Fire Magic'] = 500
gt_skillLevelRequired['Water Magic'] = 500
gt_skillLevelRequired['Death Magic'] = 500
gt_skillLevelRequired['Life Magic'] = 500
gt_skillLevelRequired['Mining'] = 500
gt_skillLevelRequired['Jump'] = 500
go_skills = { }

function checkSkill(plyr, skill)
	if (gt_skills[skill] == nil or plyr == nil) then
		return false
	end
	
	local level = 0
	for i=1, table.getn(gt_skills[skill]) do
		if (plyr:skillFind(gt_skills[skill][i]) == true) then
			level = i
		end
	end
	return level
end

function getSkillLevel(plyr)
	local level = 1
	local skills = { }
	for i=1, 45 do
		table.insert(skills, i)
	end
	
	for i=1, table.getn(skills) do
		if (plyr:skillFind(skills[i]) == true) then
			level = level + 1
		end
	end
	return level
end

function addSkills(plyr)
	
	--check for sprint.
	local sprint = checkSkill(plyr, 'Sprint')
	if (sprint > 0) then
		plyr:inventory_modify('Sprint - Level '.. sprint..'', -500)
		plyr:inventory_modify('Sprint - Level '.. sprint..'', 1)
	end
end

function levelUp(plyr, skill)
	
	local level = checkSkill(plyr, skill)
	
	if (gt_skills[skill][level + 1] == nil) then
		plyr:message('You are already the highest you can be in '..skill)
		return false
	end
	
	if (level ~= 0) then
		plyr:inventory_modify(skill..' - Level '..level..'', -1)
		--Sprint - Level 1:Training
	end
	
	plyr:inventory_modify(skill..' - Level '..(level + 1)..':Training', 1)
	if (skill == 'Sprint' or skill == 'Jump') then
		plyr:inventory_modify(skill..' - Level '..(level + 1)..'', 1)
	elseif (skill == 'Mining') then
		plyr:inventory_modify('Pickaxe - Level '..(level + 1)..'', 1)
	end
	plyr:message('You have leveled up in '..skill)
	return true

end

function checkSkillIncrease(plyr, skill, percent)
	local testing = math.randomseed(os.time())
	testing = math.random(0, 100)
	testing = math.random(0, 100)
	testing = math.random(0, 100)
	if (testing <= percent) then
		go_skills[plyr.m_name][skill] = go_skills[plyr.m_name][skill] + 1
		--plyr:message('You have just increased your skill in '..skill..'. ('..go_skills[plyr.m_name][skill]..'/'..gt_skillLevelRequired[skill]..')')
	end

end

function checkSkillLevelUp(plyr, skill)
	if (go_skills[plyr.m_name][skill] >= gt_skillLevelRequired[skill]) then
		go_skills[plyr.m_name][skill] = 0
		levelUp(plyr, skill)
	end
end

function checkSkillUsed(plyr, itemid, target)
	
	if (itemid == 5 or itemid == 6 or itemid == 7 or itemid == 8 or itemid == 9) then
		local percent = 100 - (100 * checkSkill(plyr, 'Sprint') / table.getn(gt_skills['Sprint']))
		checkSkillIncrease(plyr, 'Sprint', percent)
		checkSkillLevelUp(plyr, 'Sprint')
		return true
	end
	
	if (itemid == 65 or itemid == 66 or itemid == 67 or itemid == 68 or itemid == 69) then
		local percent = 100 - (100 * checkSkill(plyr, 'Mining') / table.getn(gt_skills['Mining']))
		checkSkillIncrease(plyr, 'Mining', percent)
		checkSkillLevelUp(plyr, 'Mining')
		checkMinerals(plyr)
		return false
	end
	
	if (itemid == 80 or itemid == 81 or itemid == 82 or itemid == 83 or itemid == 84 ) then
		local percent = 100 - (100 * checkSkill(plyr, 'Jump') / table.getn(gt_skills['Jump']))
		checkSkillIncrease(plyr, 'Jump', percent)
		checkSkillLevelUp(plyr, 'Jump')
		local pos = plyr:coords()
		g_arena:explosion_create('Jump P Level 1',pos.x,pos.y,pos.z,pos.rotation)
		return true
	end
end

function checkSkills(plyr, skill)
	plyr:message(''..skill..' - '..go_skills[plyr.m_name][skill]..'/'..gt_skillLevelRequired[skill])
end



--hold all spell stuff

function castWeaken(plyr)
	local c = plyr:coords()
	local victims = { }
	g_arena:GetPlayersInArea(victims, c.x, c.y, 100)
	
	if (victims["n"] > 1) then
		for i=1, table.getn(victims) do
			if (plyr.m_name ~= victims[i].m_name) then
				victims[i]:message('You have been weakened by '..plyr.m_name)
				victims[i]:inventory_modify('Effect:Weaken(Victim)', 1)
				plyr:message('You have weakened, '..victims[i].m_name)
				break
			end
		end
	else
		plyr:message('You have weakened no one but yourself.')
		plyr:inventory_modify('Effect:Weaken(Caster)', 1)
	end
end

function castProtect(plyr)
	
	if (plyr:inventory_find('Effect:Protect') >= 1) then
		plyr:inventory_modify('Effect:Protect', -1)
	end
	
	plyr:inventory_modify('Effect:Protect', 1)
	plyr:message('You feel protected.')

end

function castStrength(plyr)
	
	if (plyr:inventory_find('Effect:Strength') >= 1) then
		plyr:inventory_modify('Effect:Strength', -1)
	end
	
	plyr:inventory_modify('Effect:Strength', 1)
	plyr:message('You feel strengthened.')

end

function checkRuneGain(plyr, runetype)
	
	local percent = 100 - (100 * checkSkill(plyr, runetype..' Magic') / table.getn(gt_skills[runetype..' Magic']))
	local testing = math.randomseed(os.time())
	testing = math.random(0, 100)
	testing = math.random(0, 100)
	testing = math.random(0, 100)
	
	if (testing <= percent) then
		plyr:inventory_modify(runetype..' Rune', 1)
	end

end

function levelUpMagic(plyr, skill)
	
	local level = checkSkill(plyr, skill)
	
	if (gt_skills[skill][level + 1] == nil) then
		plyr:message('You are already the highest you can be in '..skill)
		return false
	end
	
	plyr:inventory_modify(skill..' - Level '..(level + 1)..':Training', 1)
	
	return true

end

function runeHandIn(plyr, runetype, amount)
	
	if (plyr:inventory_find(runetype..' Rune') < amount) then
		plyr:message('You do not have that many Runes')
		return false
	end
	local differ = 0
	if (go_skills[plyr.m_name][runetype..' Magic'] + amount > gt_skillLevelRequired[runetype..' Magic']) then
		differ = (go_skills[plyr.m_name][runetype..' Magic'] + amount) - gt_skillLevelRequired[runetype..' Magic']
	end
	
	go_skills[plyr.m_name][runetype..' Magic'] = go_skills[plyr.m_name][runetype..' Magic'] + amount
	plyr:inventory_modify(runetype.. ' Rune', -amount)
	
	if (differ > 0) then
		plyr:inventory_modify(runetype..' Rune', differ)
	end
	
	checkMagicLevelUp(plyr, runetype)
end

function checkMagicLevelUp(plyr, magictype)
	if (go_skills[plyr.m_name][magictype..' Magic'] >= gt_skillLevelRequired[magictype..' Magic']) then
		go_skills[plyr.m_name][magictype..' Magic'] = 0
		levelUp(plyr, magictype..' Magic')
	end
end


function import_data(i, c)
	local output = { }
	--while (i >= 1 and i <= table.getn(g_input)) do
	if (g_input[i] ~= nil) then
		if (string.find(g_input[i], '<') ~= nil and string.find(g_input[i], '>') ~= nil and string.find(g_input[i], '/') == nil) then
			temp = string.gsub(g_input[i], '<', '')
			temp = string.gsub(temp, '>', '')
			temp = string.gsub(temp, '/', '')
			if (string.find(g_input[i + 1], '<') ~= nil and string.find(g_input[i + 1], '>') ~= nil and string.find(g_input[i + 1], '/') == nil) then
				table.insert(output[temp], import_data(i + 1, 'o'))
				table.remove(g_input, i + 1)
			elseif (string.find(g_input[i + 1], '<') == nil) then
				if (tonumber(g_input[i + 1]) ~= nil) then
					table.insert(output[temp], tonumber(g_input[i + 1]))
				else
					table.insert(output[temp], g_input[i + 1])
				end
			end
			table.remove(g_input, i)
		elseif (string.find(g_input[i], '/') ~= nil) then
			table.remove(g_input, i)
			import_data(i, 'c')
		end
	end
	if (c = 'c') then
		return
	else
		return output
	end
end


--Documentation Coming soon

g_output = { }
g_input = { }

function exportTSF(data, name, filetype)
	
	
	local TSF = io.open(''..name..'_'..filetype..'.tsf', "w")
	
	g_output = { }
	
	local exportinfo = format_data(data)
	
	for i=1, table.getn(g_output) do
		TSF:write(g_output[i])
	end
	
	TSF:close()
	
	
	return true
end

function format_data(data)

	if(data == nil) then
		return
	end
	
	if (type(data) ~= 'table') then
		table.insert(g_output,table.getn(g_output)+1, ''..data..'')
		return
	end
	for i, v in pairs(data) do
		table.insert(g_output, '<'..i..'>\n')
		if (type(v) == 'table') then
			--it is a table
			format_data(v)
		else
			table.insert(g_output,table.getn(g_output)+1, ''..v..'\n')
		end
		table.insert(g_output,table.getn(g_output)+1, '</'..i..'>\n')
	end
	
	return
end

function importTSF(name, filetype)
	
	local output = { }
	
	TSF = io.open(''..name..'_'..filetype..'.tsf', 'r')
	
	if (TSF == nil) then
		return false
	end
	
	local input = { }
	local nextline = ''
	local numlines = 0

	--reads entire file into input array, one line at a time
	while nextline ~= nil do
		nextline = TSF:read('*line')
		if (nextline == nil) then
			break
		end
		numlines = numlines + 1
		table.insert(input,nextline)
	end
	
	TSF:close()
	
	output = import_data(input)

	--table.getn kinda fails for this
	--if table.getn(output)==0 then
	--	return false
	--end
	
	return output

end

function import_data(input)
	local output = { }

	--at all times, removes one line from the input array
	while true do
		if (input[1] ~= nil) then
			--if this is a close </html> brace then move back one level in the recursion
			if (string.find(input[1], '<') ~= nil and string.find(input[1], '>') ~= nil and string.find(input[1], '/') ~= nil) then
				table.remove(input,1)
				return output
			--if this is an open <html> brace add one level to the recursion
			elseif (string.find(input[1], '<') ~= nil and string.find(input[1], '>') ~= nil) then
				local temp = string.gsub(input[1], '<', '')
				temp = string.gsub(temp, '>', '')
				table.remove(input,1)
				output[temp] = import_data(input)
			else
			--if this is just data, put it in the output (when there is output they will never add another recursion level... or another output)
				if (tonumber(input[1]) ~= nil) then
					output = tonumber(input[1])
				else
					output = input[1]
				end
				table.remove(input,1)
			end
		else
			return output	--if no more lines left this is the final output, just return
		end
	end

	return output	--redundant
end


if (g_arena == nil) then
	dofile('TSF.lua')
	dofile('playerobject.lua')
	dofile('binding.lua')
	dofile('recalling.lua')
	dofile('factionobject.lua')
	dofile('skills.lua')
	dofile('spells.lua')
	dofile('quests.lua')
	dofile('experience.lua')
	dofile('mining.lua')
	dofile('alignments.lua')
	go_player = {}
	gb_factionloaded = false
end

function Arena_OnCreate(arena)
	g_arena = arena
	math.randomseed(os.time())
end

function Player_OnJoin(plyr) -- player
	if (loadObject_player(plyr.m_name) == false) then
		plyr:message('Failed to load an existing profile attempting to create a new one.')
		if (createNewObject_player(plyr.m_name) == false) then
			plyr:message('Failed to create a new profile, please see an admin.')
		else
			plyr:message('Successfully created a new profile for '.. plyr.m_name)
		end
	else
		plyr:message(plyr.m_name .. ' successfully loaded.')
	end
	if (gb_factionloaded == false) then
		loadObject_faction()
		gb_factionloaded = true
	end
	addSkills(plyr)
	isValidFaction(plyr)
	checkFactionInvites(plyr)
end

function Player_OnLeave(plyr)
	saveObject_player(plyr.m_name)
	saveObject_faction()
end

function Item_OnPickUp(player, itemid, item_type, amount) -- player, integer, object?, integer / returns boolean true or false, whether to allow player to pickup the item.
	
	return true
end

function Player_OnDeath(killer, victim) -- player, player
	handleExperienceGain(killer, victim)
end

function Player_OnWarpItem(user, itemid, target) -- player, integer, player / returns boolean true or false, whether to allow the warpitem to complete.
	if (itemid == 1) then
		if (bindSoul(user.m_name, user:coords().x, user:coords().y) == false) then
			user:message('Failed to Bind your soul.')
			return false
		end
		return false
	elseif (itemid == 3) then
		if (castMark(user.m_name, user:coords().x, user:coords().y) == false) then
			user:message('Failed to mark your location.')
		end
		return false
	elseif (itemid == 4) then
		if (castRecall(user) == false) then
			user:message('Failed to cast recall.')
		end
		return false
	elseif (itemid == 25) then
		castWeaken(user)
		return false
	elseif (itemid == 29) then
		--castMagicTrap(user)
		return false
	elseif (itemid == 30) then
		--castMagicTrigger(user)
		return false
	elseif (itemid == 31) then
		castProtect(user)
		return false
	elseif (itemid == 32) then
		castStrength(user)
		return false
	end
	
	
	if (checkSkillUsed(user, itemid, target) == false) then
		return false
	else
		return true
	end
	
	return true
end

function Player_OnUnspec(plyr) -- player / Returns boolean true of false, whether to allow player to unspec.
	if not (go_player == nil or go_player[plyr.m_name] == nil or go_player[plyr.m_name]['faction'] == nil or go_player[plyr.m_name]['faction']['name'] == nil) then
		plyr:unspec(go_player[plyr.m_name]['faction']['name'], 'test')
		
		if (sendToBindSpot(plyr.m_name) == false) then
			plyr:message('Failed to send you to least bound spot, please contact an Administrator.')
		end
	
	else
		return true
	end
	
	return false
end

function Player_OnRespawn(plyr) -- player / Returns boolean true or false, whether to respawn the player.
	if (resurrectToBindSpot(plyr.m_name) == false) then
		plyr:message('Failed to send you to least bound spot, please contact an Administrator.')
	end
	return false
end

function Vehicle_OnProduce(vehicle, player, menuitem) -- vehicle, player, integer / returns boolean true or false and whether to give the player the produce.
end

function Vehicle_OnDeath(vehicle, player, itemid) -- vehicle, player, integer

end

function 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('unknown.lua')
			plyr:message('Script Reloaded')
			return
		elseif (command == '?loc') then
			local c = plyr:coords()
			plyr:message('X = '.. c.x .. ' Y = '.. c.y .. ' Rotation = '..c.rotation)
			return
		elseif (command == '?save') then
			if (payload == 'player') then
				saveObject_player(plyr.m_name)
				plyr:message('Saved '..plyr.m_name)
			elseif (payload == 'faction') then
				saveObject_faction()
				plyr:message('Saved Factions')
			end
		elseif (command == '?test') then
			local c = plyr:coords()
			--g_arena:vehicle_create(10, c.x, c.y, c.rotation)
			--g_arena:explosion_create('Static Field', c.x, c.y, c.rotation, plyr)
			--runeHandIn(plyr, 'Fire', 500)
			--local mytable = { }
			--local c = plyr:coords()
			--g_arena:GetPlayersInArea(mytable, c.x, c.y, 100)
			--for i=1, table.getn(mytable) do
			--	g_arena:message(''..mytable[i].m_name..'')
			--end
			--g_arena:message(''..mytable["n"]..'')
			local skillLevel = getSkillLevel(plyr)
			g_arena:message('Your skill level is '..skillLevel)
		elseif (command == "?reloadpl") then
			plyr:message('Reloading Quests')
			dofile('quests.lua')
			plyr:message('Quests Reloaded')
		elseif (command == '?r') then
			local a=plyr:coords()
			g_arena:message(''..a.x..', '..a.y..', '..a.z..', '..a.rotation)
		end
	end
	
	if (command == '?help') then
		if (payload == 'factions') then
			plyr:message('%?createfaction <name> -- Creates a Faction with the name provided.')
			plyr:message('%?leavefaction -- Leaves current faction, if you are the owner it will disband it.')
			plyr:message('%?factionpromote <member> -- Promotes a faction Member to Officer.')
			plyr:message('%?factiondemote <member> -- Demotes a faction Member to Member.')
			plyr:message('%?factioninvite <newmember> -- Invites a person to join your faction.')
			plyr:message('%?acceptinvite <factionname> -- Accepts the invite sent by a faction.')
			plyr:message('%?listinvites -- Lists all your current invites.')
		elseif (payload == 'skills') then
			plyr:message('%?checkskill <skill> -- Displays your current progress towars levelup in the given skill.')
		elseif (payload == '') then
			plyr:message('@Use this for help ?help <topic>. Topics are')
			plyr:message('@factions')
			plyr:message('@skills')
		end
	elseif (command == '?createfaction') then
		if (createFaction(plyr, payload) == false) then
			plyr:message('Failed to create faction. Reasons may be: invalid name, already an owner, or name taken.')
		else
			plyr:message('You are now the owner of '..payload)
		end
	elseif (command == '?factioninvite') then
		if (checkRank(plyr) == 'Owner' or checkRank(plyr) == 'Officer') then
			if (inviteToFaction(go_player[plyr.m_name]['faction']['name'], payload) == false) then
				plyr:message('Could not invite '..payload..' check syntax.')
			end
		else
			plyr:message('You cannot invite people to your faction.')
		end
	elseif (command == '?acceptinvite') then
		if (checkRank(plyr) == 'Owner') then
			plyr:message('Owners cannot switch factions.')
		else
			if (acceptInvite(plyr, payload) == false) then
				plyr:message('Could not join '..payload)
			else
				plyr:message('You are now part of '..payload)
			end
		end
	elseif (command == '?listinvites') then
		if (listInvites(plyr) == false) then
			plyr:message('You have received no invites')
		end
	elseif (command == '?leavefaction') then
		if (checkRank(plyr) == 'Owner') then
			if (disbandFaction(plyr) == false) then
				plyr:message('You cannot leave your faction as you are the leader and there are other people in your faction.')
			end
		else
			if (leaveFaction(plyr) == false) then
				plyr:message('You cannot leave your faction.')
			end
		end
	elseif (command == '?factionpromote') then
		if (plyr ~= nil and g_arena:getPlayer(payload) ~= nil) then
			if (checkRank(plyr) == 'Owner' and plyr.m_name ~= payload and checkRank(g_arena:getPlayer(payload)) == 'Officer' and go_player[plyr.m_name]['faction']['name'] == go_player[payload]['faction']['name']) then
				if (promoteMember(plyr) == false) then
					plyr:message('You failed to promote '..payload..'')
				else
					plyr:message('Promoted '..payload)
				end
			else
				plyr:message('You cannot promote this person, due to insufficent status or your trying to promote yourself.')
			end
		end
	elseif (command == '?factiondemote') then
		if (plyr ~= nil and g_arena:getPlayer(payload) ~= nil) then
			if (checkRank(plyr) == 'Owner' and plyr.m_name ~= payload and checkRank(g_arena:getPlayer(payload)) == 'Member' and go_player[plyr.m_name]['faction']['name'] == go_player[payload]['faction']['name']) then
				if (demoteMember(plyr) == false) then
					plyr:message('You failed to demote '..payload..'')
				else
					plyr:message('Demoted '..payload)
				end
			else
				plyr:message('You cannot demote this person, due to insufficent status or your trying to demote yourself.')
			end
		end
	elseif (command == '?checkskill') then
		if (go_skills[plyr.m_name][payload] ~= nil) then
			checkSkills(plyr, payload)
		else
			plyr:message('Invalid Skill')
		end
	elseif (command == '?wipecharacter') then
		if (g_arena.m_name == 'Public1' and plyr:spectator() == true) then
			createNewObject_player(plyr.m_name)
		end
	end

end

function On_FlagGameEnd()
	
	g_arena:message('test')

end

function getn(awesome)
	local numb = { }
	for i, v in pairs(awesome) do
		table.insert(awesome, i)
	end
	return numb
end


--allignment stuff

function getAlignment(plyr)
	return go_player[plyr.m_name]['alignment']['name']
end

function setAlignment(plyr, alignment)
	if (alignment == 'Suns Confederacy' or alignment == 'The Syndicate' or alignment == 'Titan Coalition') then
		go_player[plyr.m_name]['alignment']['name'] = alignment
		go_player[plyr.m_name]['alignment']['hasPicked'] = 1
	else
		plyr:message('Invalid Alignment')
	end
end


--This will hold all lua regards to binds

function sendToBindSpot(name)
	if (name == '') then
		return false
	end
	
	local player = g_arena:getPlayer(name)



	if not (go_player == nil or go_player[name] == nil or go_player[name]['bindspot'] == nil or tonumber(go_player[name]['bindspot']['x']) == nil or tonumber(go_player[name]['bindspot']['y']) == nil) then

		player:warp(tonumber(go_player[name]['bindspot']['x']), tonumber(go_player[name]['bindspot']['y']), 0)
	end



	return true
end

function resurrectToBindSpot(name)
	if (name == '') then
		return false
	end
	
	local player = g_arena:getPlayer(name)



	if not (go_player == nil or go_player[name] == nil or go_player[name]['bindspot'] == nil or tonumber(go_player[name]['bindspot']['x']) == nil or tonumber(go_player[name]['bindspot']['y']) == nil) then
		player:resurrectWarp(tonumber(go_player[name]['bindspot']['x']), tonumber(go_player[name]['bindspot']['y']), 0)
		giveGod(player, tonumber(go_player[name]['bindspot']['x']), tonumber(go_player[name]['bindspot']['y']))
	end



	return true
end

function giveGod(plyr, x, y)

	local c = plyr:coords()
	
	plyr:inventory_modify('God Mode', 1)
	g_arena:explosion_create('Anti God', x, y, c.rotation)
end

function bindSoul(name, x, y)
	if (name == '') then
		return false
	end
	
	go_player[name]['bindspot']['x'] = x
	go_player[name]['bindspot']['y'] = y
	
	return true
end


-- handles all experience related functions

function handleExperienceGain(killer, victim)
	local xp = 100
	
	--lets find out how many people are in the area of the killer and are on his team.
	
	local killersInArea = getTeamInArea(killer)
	local victimsInArea = getTeamInArea(victim)
	
	xp = xp * (victimsInArea/killersInArea)
	xp = xp * (getSkillLevel(victim)/getSkillLevel(killer))
	
	killer:message('You have gained '..xp..' exp.')
	killer:modExperience(xp)

end

function getTeamInArea(person)
	
	local count = 0
	local c = person:coords()
	local playertable = { }
	g_arena:GetPlayersInArea(playertable, c.x, c.y, 100)
	
	for i=1, table.getn(playertable) do
		if (playertable[i].m_name ~= nil) then
			local plyr = playertable[i]
			if (plyr.m_team == person.m_team) then
				count = count + 1
			end
		end
	end

	return count
end


-- contains mining information

global_mines = { }
	mine1 = { }
	mine1['types'] = {'Torium', 'Roxium'}
	mine1['box'] = {1467, 565, 2112, 84}
	
function checkMinerals(plyr)
	
end


--This will contain all FAction info and functions.
go_faction = { }

function createFaction(owner, name)
	if (owner == nil or name == '' or go_faction[name] ~= nil or go_player[owner.m_name]['faction']['rank'] == 'Owner') then
		return false
	end
	
	go_faction[name] = { }
	
	--information
	go_faction[name]['owner'] = owner.m_name
	go_faction[name]['membercount'] = 1
	
	--modify the player object for faction
	go_player[owner.m_name]['faction']['name'] = name
	go_player[owner.m_name]['faction']['rank'] = 'Owner'
	
	--send them to their new faction
	owner:changeTeam(name, 'test')
	
	return true
end

function loadObject_faction()
	go_faction = importTSF('factions', 'faction')
	return true
end

function saveObject_faction()
	if (exportTSF(go_faction, 'factions', 'faction') == false) then
		return false
	end
	
	return true
end

function inviteToFaction(fname, name)
	if (name == '' or fname == '' or go_player[name] == nil) then
		return false
	end
	
	local player = g_arena:getPlayer(name)
	
	table.insert(go_player[name]['faction']['invites'], fname)
	
	if (player ~= nil) then
		player:message('You have been invited to join the '..fname..' faction. Use ?acceptinvite <factionname> to accept')
	end
	return true
end

function acceptInvite(plyr, name)
	if (name == '' or nil == plyr) then
		return false
	end
	
	--check to see if they even have an invite from the people they are trying to get one from.
	local canjoin = false
	for i=1, table.getn(go_player[plyr.m_name]['faction']['invites']) do
		if (go_player[plyr.m_name]['faction']['invites'][i] == name) then
			canjoin = true
		end
	end
	
	if (canjoin == false) then
		plyr:message('You have not received an invite from that faction.')
		plyr:message('You can check invites by using ?listinvites')
		return false
	else
		go_player[plyr.m_name]['faction']['name'] = name
		go_player[plyr.m_name]['faction']['rank'] = member
		go_player[plyr.m_name]['faction']['invites'] = { }
		go_faction[name]['membercount'] = go_faction[name]['membercount'] + 1
		plyr:changeTeam(name, 'test')
	end
	return true
end

function listInvites(plyr)
	if (plyr == nil or table.getn(go_player[plyr.m_name]['faction']['invites']) == 0) then
		return false
	end
	
	plyr:message('^You have received invites from the following factions.')
	
	for i=1, table.getn(go_player[plyr.m_name]['faction']['invites']) do
		plyr:message(go_player[plyr.m_name]['faction']['invites'])
	end
	return true
end

function disbandFaction(plyr)
	if (plyr == nil) then
		return false
	end
	
	local players = getn(go_player)
	--g_arena:message(''..players[1])
	for i=1, table.getn(players) do
		if (go_player[players[i]]['faction']['name'] == go_player[plyr.m_name]['faction']['name']) then
			go_player[players[i]]['faction']['name'] = go_player[i]['account']['name']
			go_player[players[i]]['faction']['rank'] = 'Member'
		end
	end
	
	go_faction[go_player[plyr.m_name]['faction']['name']] = nil

	go_player[plyr.m_name]['faction']['name'] = plyr.m_name
	go_player[plyr.m_name]['faction']['rank'] = 'Member'
	plyr:changeTeam(plyr.m_name, 'test')
	plyr:message('Your Faction no longer exists.')
	return true
end

function leaveFaction(plyr)
	if (plyr == nil) then
		return false
	end
	
	go_faction[go_player[plyr.m_name]['faction']['name']]['membercount'] = go_faction[go_player[plyr.m_name]['faction']['name']]['membercount'] - 1
	go_player[plyr.m_name]['faction']['name'] = plyr.m_name
	go_player[plyr.m_name]['faction']['rank'] = 'Member'
	plyr:changeTeam(plyr.m_name, 'test')
	plyr:message('You have left your old faction.')
	return true
end

function checkRank(target)
	local name = target.m_name
	if (go_player[name] == nil) then
		return 'error'
	end
	return go_player[name]['faction']['rank']
end

function isValidFaction(plyr)
	if (plyr == nil or go_player[plyr.m_name]['faction']['name'] == plyr.m_name) then
		return false
	end
	
	if (go_faction[go_player[plyr.m_name]['faction']['name']] == nil) then
		plyr:message('Your faction was disbanded.')
		plyr:changeTeam(plyr.m_name, 'test')
		go_player[plyr.m_name]['faction']['name'] = plyr.m_name
		go_player[plyr.m_name]['faction']['rank'] = 'Member'
	end
	
	return true
end

function promoteMember(name)
	go_player[name]['faction']['rank'] = 'Officer'
	local player = g_arena:getPlayer(name)
	player:message('You have been promoted.')
	return true
end

function demoteMember(name)
	go_player[name]['faction']['rank'] = 'Member'
	local player = g_arena:getPlayer(name)
	player:message('You have been demoted.')
	return true
end

function checkFactionInvites(plyr)
	if (table.getn(go_player[plyr.m_name]['faction']['invites']) > 0) then
		plyr:message('You have pending faction invites use ?list invites to view them.')
	end
end