All pastes #2108302 Raw Edit

Mine

public text v1 · immutable
#2108302 ·published 2012-01-31 22:13 UTC
rendered paste body
///////////////////////////////
// © 2009-2010 Pulsar Effect //
//    All rights reserved    //
///////////////////////////////
// This material may not be  //
//   reproduced, displayed,  //
//  modified or distributed  //
// without the express prior //
// written permission of the //
//   the copyright holder.   //
///////////////////////////////


local NPC = {};

NPC.Name = "Druggy";
NPC.ID = 16;

NPC.Model = Model("models/players/PERP2/m_9_02.mdl");
NPC.Invisible = false; // Used for ATM Machines, Casino Tables, etc.

NPC.Location = Vector( -10857.0312, -9273.7529, 72.0313); 
NPC.Angles = Angle(0, 180, 0);
NPC.ShowChatBubble = "Normal";

NPC.Sequence = 4;

// This is always local player.
function NPC.OnTalk ( )
	if LocalPlayer():Team() == TEAM_CITIZEN then
		GAMEMODE.DialogPanel:SetDialog("< Glances Around >\n\nHey, what can I get for ya?");
		
		GAMEMODE.DialogPanel:AddDialog("I got some product to sell...", NPC.BuyStuff);
		GAMEMODE.DialogPanel:AddDialog("Got anything good?", NPC.SellStuff);
	else
		GAMEMODE.DialogPanel:SetDialog("Hello.");
		
		GAMEMODE.DialogPanel:AddDialog("Err... Hello.", LEAVE_DIALOG);
	end
	
	GAMEMODE.DialogPanel:Show();
end

function NPC.BuyStuff ( )
	local ID = GetGlobalInt('perp_druggy_buy', 0);
	
	if (ID == 1 || ID == 2 || ID == 3) then
		GAMEMODE.DialogPanel:SetDialog("Yah, I got some spare cash. What are you trying to sell?");
		
		GAMEMODE.DialogPanel:AddDialog("I made some meth the other day and I need to sell it.", NPC.BuyStuff_Meth);
		GAMEMODE.DialogPanel:AddDialog("I have a lot of weed that needs a buyer.", NPC.BuyStuff_Weed);
		GAMEMODE.DialogPanel:AddDialog("I got some magical delights that needs to proper home.", NPC.BuyStuff_Shrooms);
		GAMEMODE.DialogPanel:AddDialog("Nevermind.", LEAVE_DIALOG);
	else
		GAMEMODE.DialogPanel:SetDialog("Naw, I don't have enough cash at the moment, sorry. Come back by later and we can work out a deal.");
		
		GAMEMODE.DialogPanel:AddDialog("Alright, I'll stop by later.", LEAVE_DIALOG);
	end
end

function NPC.BuyStuff_Meth ( )
	local ID = GetGlobalInt('perp_druggy_buy', 0);
		
	if (ID == 2) then
		GAMEMODE.DialogPanel:SetDialog("Yah, I'll buy some of that. " .. DollarSign() .. ITEM_DATABASE[10].Cost .. " each.");
		
		GAMEMODE.DialogPanel:AddDialog("Sounds reasonable.", NPC.BuyStuff_Meth_Confirm);
		GAMEMODE.DialogPanel:AddDialog("Are you joking?", LEAVE_DIALOG);
	else
		GAMEMODE.DialogPanel:SetDialog("Sorry man, I have plenty of that shit. Not enough demand around here. Come back later.");
		
		GAMEMODE.DialogPanel:AddDialog("Fine, I'll be back.", LEAVE_DIALOG);
	end
end

function NPC.BuyStuff_Meth_Confirm ( )
	RunConsoleCommand("perp_sd_m");
	
	local totalEarned = ITEM_DATABASE[10].Cost * LocalPlayer():GetItemCount(10);
	
	LocalPlayer():GiveCash(totalEarned);
	
	for k, v in pairs(GAMEMODE.PlayerItems) do
		if (v.ID == 10) then
			GAMEMODE.PlayerItems[k] = nil;
			GAMEMODE.InventoryBlocks_Linear[k]:GrabItem();
		end
	end
	
	GAMEMODE.DialogPanel:SetDialog("Thanks, man. Here's your " .. DollarSign() .. totalEarned .. ".");
	GAMEMODE.DialogPanel:AddDialog("Thanks!", LEAVE_DIALOG);
end

function NPC.BuyStuff_Weed ( )
	local ID = GetGlobalInt('perp_druggy_buy', 0);
		
	if (ID == 1) then
		GAMEMODE.DialogPanel:SetDialog("Yah, I'll buy some of that. " .. DollarSign() .. ITEM_DATABASE[13].Cost .. " each.");
		
		GAMEMODE.DialogPanel:AddDialog("Sounds reasonable.", NPC.BuyStuff_Weed_Confirm);
		GAMEMODE.DialogPanel:AddDialog("Are you joking?", LEAVE_DIALOG);
	else
		GAMEMODE.DialogPanel:SetDialog("Sorry man, I have plenty of that shit. Not enough demand around here. Come back later.");
		
		GAMEMODE.DialogPanel:AddDialog("Fine, I'll be back.", LEAVE_DIALOG);
	end
end

function NPC.BuyStuff_Weed_Confirm ( )
	RunConsoleCommand("perp_sd_w");
	
	local totalEarned = ITEM_DATABASE[13].Cost * LocalPlayer():GetItemCount(13);
	
	LocalPlayer():GiveCash(totalEarned);
	
	for k, v in pairs(GAMEMODE.PlayerItems) do
		if (v.ID == 13) then
			GAMEMODE.PlayerItems[k] = nil;
			GAMEMODE.InventoryBlocks_Linear[k]:GrabItem();
		end
	end
	
	GAMEMODE.DialogPanel:SetDialog("Thanks, man. Here's your " .. DollarSign() .. totalEarned .. ".");
	GAMEMODE.DialogPanel:AddDialog("Thanks!", LEAVE_DIALOG);
end

function NPC.BuyStuff_Shrooms ( )
	local ID = GetGlobalInt('perp_druggy_buy', 0);
		
	if (ID == 3) then
		GAMEMODE.DialogPanel:SetDialog("Oh Shi- you got the magical juju food? " .. DollarSign() .. (ITEM_DATABASE[83].Cost-100) .. " each.");
		
		GAMEMODE.DialogPanel:AddDialog("Sounds reasonable.", NPC.BuyStuff_Shrooms_Confirm);
		GAMEMODE.DialogPanel:AddDialog("Are you joking?", LEAVE_DIALOG);
	else
		GAMEMODE.DialogPanel:SetDialog("Sorry man, I have plenty of that shit. Not enough demand around here. Come back later.");
		
		GAMEMODE.DialogPanel:AddDialog("Fine, I'll be back.", LEAVE_DIALOG);
	end
end

function NPC.BuyStuff_Shrooms_Confirm ( )
	RunConsoleCommand("perp_sd_s");
	
	local totalEarned = (ITEM_DATABASE[83].Cost-100) * LocalPlayer():GetItemCount(83);
	
	LocalPlayer():GiveCash(totalEarned);
	
	for k, v in pairs(GAMEMODE.PlayerItems) do
		if (v.ID == 83) then
			GAMEMODE.PlayerItems[k] = nil;
			GAMEMODE.InventoryBlocks_Linear[k]:GrabItem();
		end
	end
	
	GAMEMODE.DialogPanel:SetDialog("Thanks, man. Here's your " .. DollarSign() .. totalEarned .. ".");
	GAMEMODE.DialogPanel:AddDialog("Thanks!", LEAVE_DIALOG);
end

function NPC.SellStuff ( )
	local ID = GetGlobalInt('perp_druggy_sell', 0);
	
	if (ID == 1) then
		GAMEMODE.DialogPanel:SetDialog("Yah man, I got some seeds. You interested? " .. DollarSign() .. ITEM_DATABASE[14].Cost .. " each.");
		
		GAMEMODE.DialogPanel:AddDialog("Yah, I'll take some.", NPC.SellStuff_Weed);
		GAMEMODE.DialogPanel:AddDialog("Naw man, sorry.", LEAVE_DIALOG);
	elseif (ID == 2) then
		GAMEMODE.DialogPanel:SetDialog("Yeah dude, I got some shroomies. Want? " .. DollarSign() .. ITEM_DATABASE[83].Cost .. "each.");
		
		GAMEMODE.DialogPanel:AddDialog("Gimme some of that shi'.", NPC.SellStuff_Shrooms);
		GAMEMODE.DialogPanel:AddDialog("Psh, too damn expensive!", LEAVE_DIALOG);
	else
		GAMEMODE.DialogPanel:SetDialog("Sorry, I got nothing today. The people around here are druggies, I tell ya.");
		
		GAMEMODE.DialogPanel:AddDialog("You and your conspiracy theories...", LEAVE_DIALOG);
		GAMEMODE.DialogPanel:AddDialog("Damnit, alright. I'll stop by later.", LEAVE_DIALOG);
	end
end

function NPC.SellStuff_Weed ( )
	GAMEMODE.DialogPanel:SetDialog("How many do you need?");
		
	GAMEMODE.DialogPanel:AddDialog("One ( " .. DollarSign() .. ITEM_DATABASE[14].Cost * 1 .. " )", function ( ) NPC.SellStuff_Weed_Confirm(1); end);
	GAMEMODE.DialogPanel:AddDialog("Two ( " .. DollarSign() .. ITEM_DATABASE[14].Cost * 2 .. " )", function ( ) NPC.SellStuff_Weed_Confirm(2); end);
	GAMEMODE.DialogPanel:AddDialog("Three ( " .. DollarSign() .. ITEM_DATABASE[14].Cost * 3 .. " )", function ( ) NPC.SellStuff_Weed_Confirm(3); end);
	GAMEMODE.DialogPanel:AddDialog("Four ( " .. DollarSign() .. ITEM_DATABASE[14].Cost * 4 .. " )", function ( ) NPC.SellStuff_Weed_Confirm(4); end);
	GAMEMODE.DialogPanel:AddDialog("Five ( " .. DollarSign() .. ITEM_DATABASE[14].Cost * 5 .. " )", function ( ) NPC.SellStuff_Weed_Confirm(5); end);
	GAMEMODE.DialogPanel:AddDialog("Ten ( " .. DollarSign() .. ITEM_DATABASE[14].Cost * 10 .. " )", function ( ) NPC.SellStuff_Weed_Confirm(10); end);
	GAMEMODE.DialogPanel:AddDialog("Twenty ( " .. DollarSign() .. ITEM_DATABASE[14].Cost * 20 .. " )", function ( ) NPC.SellStuff_Weed_Confirm(20); end);
	GAMEMODE.DialogPanel:AddDialog("Fifty ( " .. DollarSign() .. ITEM_DATABASE[14].Cost * 50 .. " )", function ( ) NPC.SellStuff_Weed_Confirm(50); end);
	GAMEMODE.DialogPanel:AddDialog("Nevermind", LEAVE_DIALOG);
end

function NPC.SellStuff_Weed_Confirm ( num )
	local totalCost = num * ITEM_DATABASE[14].Cost;
	
	GAMEMODE.DialogPanel:SetDialog("That'll be " .. DollarSign() .. totalCost .. ".");
	
	if (LocalPlayer():GetCash() < totalCost) then
		GAMEMODE.DialogPanel:AddDialog("Ahh, I can't afford that.", LEAVE_DIALOG);	
	elseif (!LocalPlayer():CanHoldItem(14, num)) then
		GAMEMODE.DialogPanel:AddDialog("Nevermind, I don't think I can hold that many.", LEAVE_DIALOG);
	else
		GAMEMODE.DialogPanel:AddDialog("Thanks!", LEAVE_DIALOG);
		
		LocalPlayer():TakeCash(totalCost);
		LocalPlayer():GiveItem(14, num);
		
		RunConsoleCommand('perp_bd_w', num);
	end
end

function NPC.SellStuff_Shrooms ( )
	GAMEMODE.DialogPanel:SetDialog("How many do you need?");
		
	GAMEMODE.DialogPanel:AddDialog("One ( " .. DollarSign() .. ITEM_DATABASE[83].Cost * 1 .. " )", function ( ) NPC.SellStuff_Shrooms_Confirm(1); end);
	GAMEMODE.DialogPanel:AddDialog("Two ( " .. DollarSign() .. ITEM_DATABASE[83].Cost * 2 .. " )", function ( ) NPC.SellStuff_Shrooms_Confirm(2); end);
	GAMEMODE.DialogPanel:AddDialog("Three ( " .. DollarSign() .. ITEM_DATABASE[83].Cost * 3 .. " )", function ( ) NPC.SellStuff_Shrooms_Confirm(3); end);
	GAMEMODE.DialogPanel:AddDialog("Four ( " .. DollarSign() .. ITEM_DATABASE[83].Cost * 4 .. " )", function ( ) NPC.SellStuff_Shrooms_Confirm(4); end);
	GAMEMODE.DialogPanel:AddDialog("Five ( " .. DollarSign() .. ITEM_DATABASE[83].Cost * 5 .. " )", function ( ) NPC.SellStuff_Shrooms_Confirm(5); end);
	GAMEMODE.DialogPanel:AddDialog("Ten ( " .. DollarSign() .. ITEM_DATABASE[83].Cost * 10 .. " )", function ( ) NPC.SellStuff_Shrooms_Confirm(10); end);
	GAMEMODE.DialogPanel:AddDialog("Twenty ( " .. DollarSign() .. ITEM_DATABASE[83].Cost * 20 .. " )", function ( ) NPC.SellStuff_Shrooms_Confirm(20); end);
	GAMEMODE.DialogPanel:AddDialog("Nevermind", LEAVE_DIALOG);
end

function NPC.SellStuff_Shrooms_Confirm ( num )
	local totalCost = num * ITEM_DATABASE[83].Cost;
	
	GAMEMODE.DialogPanel:SetDialog("That'll be " .. DollarSign() .. totalCost .. ".");
	
	if (LocalPlayer():GetCash() < totalCost) then
		GAMEMODE.DialogPanel:AddDialog("Ahh, I can't afford that.", LEAVE_DIALOG);	
	elseif (!LocalPlayer():CanHoldItem(83, num)) then
		GAMEMODE.DialogPanel:AddDialog("Nevermind, I don't think I can hold that many.", LEAVE_DIALOG);
	else
		GAMEMODE.DialogPanel:AddDialog("Thanks!", LEAVE_DIALOG);
		
		LocalPlayer():TakeCash(totalCost);
		LocalPlayer():GiveItem(83, num);
		
		RunConsoleCommand('perp_bd_s', num);
	end
end

if SERVER then
	// Sell -> 1 = Pot, 2 = Shrooms
	// Buy -> 1 = Pot, 2 = Meth, 3 = Shrooms
	function GAMEMODE.RandomizeDruggyValues ( )
		SetGlobalInt('perp_druggy_sell', math.random(0, 3))
		SetGlobalInt('perp_druggy_buy', math.random(0, 4))
	end
	timer.Create('perp_druggy', 600, 0, GAMEMODE.RandomizeDruggyValues);
	GAMEMODE.RandomizeDruggyValues();
	
	local function buyWeed ( Player, CMD, Args )
		if (!Args[1]) then return; end
		if (!Player:NearNPC(16)) then return; end
		
		local toBuy = tonumber(Args[1]);
		local totalCost = toBuy * ITEM_DATABASE[14].Cost;
		
		if (toBuy <= 0) then return; end
		if (Player:GetCash() < totalCost) then return; end
		if (GetGlobalInt('perp_druggy_sell', 0) != 1) then return; end
		if (!Player:CanHoldItem(14, toBuy)) then return; end
		
		Player:TakeCash(totalCost, true);
		Player:GiveItem(14, toBuy);
		Player:Save();
	end
	concommand.Add("perp_bd_w", buyWeed);
	
	local function buyShrooms ( Player, CMD, Args )
		if (!Args[1]) then return; end
		if (!Player:NearNPC(16)) then return; end
		
		local toBuy = tonumber(Args[1]);
		local totalCost = toBuy * (ITEM_DATABASE[83].Cost);
		
		if (toBuy <= 0) then return; end
		if (Player:GetCash() < totalCost) then return; end
		if (GetGlobalInt('perp_druggy_sell', 0) != 2) then return; end
		if (!Player:CanHoldItem(83, toBuy)) then return; end
		
		Player:TakeCash(totalCost, true);
		Player:GiveItem(83, toBuy);
		Player:Save()
	end
	concommand.Add("perp_bd_s", buyShrooms)
		
	
	local function sellWeed ( Player )
		if (GetGlobalInt('perp_druggy_buy', 0) != 1) then return; end
		if (!Player:NearNPC(16)) then return; end
	
		local num = Player:GetItemCount(13);
		
		if (num == 0) then return; end
		
		for k, v in pairs(Player.PlayerItems) do
			if (v.ID == 13) then
				Player.PlayerItems[k] = nil;
			end
		end
		
		Player:GiveCash(num * ITEM_DATABASE[13].Cost, true);
		
		Player:Save();
	end
	concommand.Add("perp_sd_w", sellWeed);
	
	local function sellShrooms( Player )
		if (GetGlobalInt('perp_druggy_buy', 0) != 3) then return; end
		if (!Player:NearNPC(16)) then return; end
	
		local num = Player:GetItemCount(83);
		
		if (num == 0) then return; end
		
		for k, v in pairs(Player.PlayerItems) do
			if (v.ID == 83) then
				Player.PlayerItems[k] = nil;
			end
		end
		
		Player:GiveCash((num * (ITEM_DATABASE[83].Cost-100)), true);
		
		Player:Save();
	end
	concommand.Add("perp_sd_s", sellShrooms);
	
	local function sellMeth ( Player )
		if (GetGlobalInt('perp_druggy_buy', 0) != 2) then return; end
		if (!Player:NearNPC(16)) then return; end
	
		local num = Player:GetItemCount(10);
		
		if (num == 0) then return; end
		
		for k, v in pairs(Player.PlayerItems) do
			if (v.ID == 10) then
				Player.PlayerItems[k] = nil;
			end
		end
		
		Player:GiveCash(num * ITEM_DATABASE[10].Cost, true);
		
		Player:Save();
	end
	concommand.Add("perp_sd_m", sellMeth);
end

GAMEMODE:LoadNPC(NPC);