All pastes #739356 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-10-17 02:32 UTC
rendered paste body
AddCSLuaFile( 'cl_init.lua' )
AddCSLuaFile( 'cl_deathnotice.lua' )

include( 'shared.lua' )
include( 'player.lua' )
include( 'npc.lua' )

GM.PlayerSpawnTime = {}

/*---------------------------------------------------------
   Name: gamemode:Initialize( )
   Desc: Called immediately after starting the gamemode 
---------------------------------------------------------*/
function GM:Initialize( )

end

function GM:PlayerInitialSpawn(ply) 

local playe = player.GetByID(1)
ply:ChatPrint("Welcome to " .. tostring(playe:GetName()) .. "'s Mage Wars Server!")
local plays = player.GetAll()
for k, found in pairs(plays) do
	found:ChatPrint(tostring(ply:GetName()) .. " has joined the battle!")
end

ply:SetNWString("MClass", "BasicMage")
ply:SetNWInt("MLevel", 1)
ply:SetNWInt("MExp", 0)
ply:SetNWInt("MInt", 1)
ply:SetNWInt("MSpir", 1)
ply:SetNWInt("MStam", 1)
ply.Classified = false
end

function GM:PlayerLoadout( pl )
	
	pl:GiveAmmo( 256,	"Pistol", 		true )
	
	pl:SetHealth(100)
	pl:SetArmor(100)
	
	pl:Give("weapon_basemage")
	
	
	// Set the player's speed
	self.BaseClass:SetPlayerSpeed( pl, 300, 500 )

	local cl_defaultweapon = pl:GetInfo( "cl_defaultweapon" )

	if ( pl:HasWeapon( cl_defaultweapon )  ) then
		pl:SelectWeapon( cl_defaultweapon ) 
	end

	
end

/*---------------------------------------------------------
   Name: gamemode:InitPostEntity( )
   Desc: Called as soon as all map entities have been spawned
---------------------------------------------------------*/
function GM:InitPostEntity( )	
end


/*---------------------------------------------------------
   Name: gamemode:Think( )
   Desc: Called every frame
---------------------------------------------------------*/
function GM:Think( )
end

/*---------------------------------------------------------
   Name: gamemode:EntityKeyValue( ent, key, value )
   Desc: Called when an entity has a keyvalue set
	      Returning a string it will override the value
---------------------------------------------------------*/
function GM:EntityKeyValue( ent, key, value )
end


/*---------------------------------------------------------
   Name: gamemode:ShutDown( )
   Desc: Called when the Lua system is about to shut down
---------------------------------------------------------*/
function GM:ShutDown( )
end

//////// PLAYER FUNCTIONS ////////
local Meta = FindMetaTable("Player")

function Meta:SetLevel(amt)
	self.Level = amt
	self:SetNWInt("MLevel", amt)
end

function Meta:SetClass(class)
	self.Class = class
	self:SetNWString("MClass", class)
end

function Meta:GetMageClass()
	if SERVER then
		return self:GetTable( ).Class
	else
		return self:GetNWString("MClass")
	end
end

function Meta:GetLevel( )
	if SERVER then
		return self:GetTable( ).Level
	else
		return self:GetNWInt( "MLevel", 1 )
	end
end

function Meta:SetStam(amt)
	self.Stam = amt
	self:SetNWInt("MStam", amt)
end

function Meta:GetStam( )
	if SERVER then
		return self:GetTable( ).Stam
	else
		return self:GetNWInt( "MStam", 1 )
	end
end

function Meta:GetSpir( )
	if SERVER then
		return self:GetTable( ).Spirit
	else
		return self:GetNWInt( "MSpir", 1 )
	end
end

function Meta:SetSpir(amt)
	self.Spir = amt
	self:SetNWInt("MSpir", amt)
end

function Meta:GetIntel( )
	if SERVER then
		return self:GetTable( ).Intel
	else
		return self:GetNWInt( "MInt", 1 )
	end
end

function Meta:SetIntel(amt)
	self.Intel = amt
	self:SetNWInt("MInt", amt)
end

function Meta:EXPLVL(target)
	local targetExp = 150 + math.floor( ( ( self:GetLevel( ) + 1 )  ^ 2 ) / 2 )
	local curExp = self:GetNWInt("MExp")
	local addExp = 50 + math.floor( ( target:GetLevel() + 5 ) * 2 )
	if curExp + addExp >= targetExp then
		self:SetLevel(self:GetLevel() + 1)
	else
		curExp = curExp + addExp
	end
end

function Meta:ClassSelection()
	if CLIENT then
		ShowVGUI()
	end
	self:SetClass(self.Class)
	self:ClassLoadOut(self.Class)
end
//////////////////////////////////

if CLIENT then
	local MainPanel
	local Wi = surface.ScreenWidth()
	local He = surface.ScreenHeight()
	local CenterPosX = Wi / 2.5
	local CenterPosY = He
	function MageSelect()
		if LocalPlayer().Classified then return end
		MainPanel = vgui.Create("Panel")
		MainPanel:SetPos( CenterPosX / 1.68, CenterPosY / 3.5 )
		MainPanel:SetSize(Wi / 2, He / 8)
		MainPanel:SetName("ClassPanel")
		MainPanel:SetKeyboardInputEnabled(true)
		MainPanel:SetVisible(false)
	
		MainPanel.Button = {}
	
		local deltaLen = ((Wi / 2.65) / 6)
		for i = 1, 4 do
			local BoxPos = ( deltaLen * i )
			MainPanel.Button[i] = vgui.Create("SelectClassButton", MainPanel)
			MainPanel.Button[i]:SetName("Button." .. i )
			MainPanel.Button[i]:SetPos(BoxPos, 3)
			MainPanel.Button[i]:SetSize(Wi / 20, He / 30)
		end
		
		if MainPanel.ButtonPanels[4] then
			MainPanel.Button[1]:SetText("Fire Mage")
			MainPanel.Button[1]:SetName("Fire Mage")
			MainPanel.Button[2]:SetText("Ice Mage")
			MainPanel.Button[2]:SetName("Ice Mage")
			MainPanel.Button[3]:SetText("Lightning Mage")
			MainPanel.Button[3]:SetName("Lightning Mage")
			MainPanel.Button[4]:SetText("Holy Mage")
			MainPanel.Button[4]:SetName("Holy Mage")
		end
	
	end
	hook.Add("Initialize", "MageVGUI", MageSelect)
	vgui.Register("MageWarsSelection", MainPanel)
	
	local Class = {}
	function Class:DoClick()
		LocalPlayer():SetNWString("MClass", self:GetName())
		LocalPlayer().Class = self:GetName()
		LocalPlayer().Classified = true
		MainPanel:SetVisible(!MainPanel:SetVisible())
	end

	vgui.Register("SelectClassButton",Class,"Button")
	
	function ShowVGUI()
		MainPanel:SetVisible(!MainPanel:SetVisible())
	end
	
end

/*---------------------------------------------------------
   Name: gamemode:DoPlayerDeath( )
   Desc: Carries out actions when the player dies 		 
---------------------------------------------------------*/
function GM:DoPlayerDeath( ply, attacker, dmginfo )

	ply:CreateRagdoll()
	
	ply:AddDeaths( 1 )
	
	if ( attacker:IsValid() && attacker:IsPlayer() ) then
	
		if ( attacker == ply ) then
			attacker:AddFrags( -1 )
		else
			attacker:AddFrags( 1 )
			attacker:EXPLVL()
			if attacker.Classified == false then
				if attacker:GetLevel() == 10 then
					attacker:ClassSelection()
				end
			end
		end
		
	end
	
end


/*---------------------------------------------------------
   Name: gamemode:EntityTakeDamage( entity, inflictor, attacker, amount )
   Desc: The entity has received damage	 
---------------------------------------------------------*/
function GM:EntityTakeDamage( ent, inflictor, attacker, amount )

end


function GM:PlayerDeath( ply, weapon, attacker )
self.BaseClass:PlayerDeath( ply, weapon, attacker )

end

function GM:OnNPCKilled( victim, killer, weapon )

self.BaseClass:OnNPCKilled( victim, killer, weapon )
end

function GM:ScalePlayerDamage( ply, hitgroup, dmginfo )

	if ( hitgroup == HITGROUP_HEAD ) then
		dmginfo:ScaleDamage( 3 )
	elseif( hitgroup == HITGROUP_CHEST ) then
		dmginfo:ScaleDamage( 1.5 )
	elseif( hitgroup == HITGROUP_LEFTARM or hitgroup == HITGROUP_RIGHTARM ) then
		dmginfo:ScaleDamage( 0.5 )
	elseif( hitgroup == HITGROUP_LEFTLEG or hitgroup == HITGROUP_RIGHTLEG ) then
		dmginfo:ScaleDamage( 0.3 )
	end

end

// Set the ServerName every 2 seconds in case it changes..
local function HostnameThink()

	SetGlobalString( "ServerName", GetConVarString( "hostname" ) )

end

timer.Create( "HostnameThink", 2, 0, HostnameThink )