LF a badass to help SCRIPT inside <<<

I came across party cast bar addon which basically puts a cast bar next to the party frames to track what spells they are casting. very usefull in arena. the problem is i cannot get it to work.
can anyone help me deycper the code below and see if its possible to write a script to do just that.
Difficulty = hardmode

–[[
PartyCastingBars
Adds party member casting bars to their unit frames.

By: AnduinLothar


$Id: PartyCastingBars.lua 4157 2006-10-13 20:12:04Z geowar $
$Rev: 4157 $
$LastChangedBy: geowar $
$Date: 2006-10-13 13:12:04 -0700 (Fri, 13 Oct 2006) $

]]–


– Globals

PartyCastingBars = {};

PartyCastingBars.ColorResetting = {};
PartyCastingBars.ColorResetting[“FRIENDLY”] = {};
PartyCastingBars.ColorResetting[“HOSTILE”] = {};

PartyCastingBars.Bars = {};

PartyCastingBars.DefaultColors = {
[“FRIENDLY”] = {
[“CAST”] = { --Light Blue
r=0.0;
g=0.7;
b=1.0;
};
[“CHANNEL”] = { --Green
r=0.0;
g=1.0;
b=0.0;
};
[“SUCCESS”] = { --Green
r=0.0;
g=1.0;
b=0.0;
};
[“FAILURE”] = { --Red
r=1.0;
g=0.0;
b=0.0;
};
};
[“HOSTILE”] = {
[“CAST”] = { --Orange
r=1.0;
g=0.5;
b=0.1;
};
[“CHANNEL”] = { --Orange
r=1.0;
g=0.6;
b=0.2;
};
[“SUCCESS”] = { --Green
r=0.0;
g=1.0;
b=0.0;
};
[“FAILURE”] = { --Red
r=1.0;
g=0.0;
b=0.0;
};
};
};

PartyCastingBars.TIME_LEFT = “(%.1fs)”;
PartyCastingBars.SPELL_AND_TARGET = “%s - %s”;
PartyCastingBars.COMM_FORMAT = “%s,%s,%s”; – spellname, targetname, hostile/friendly


– Configuration Functions

PartyCastingBars_Colors = {
[“FRIENDLY”] = {
[“CAST”] = { --Yellow
r=1.0;
g=0.7;
b=0.0;
};
[“CHANNEL”] = { --Green
r=0.0;
g=1.0;
b=0.0;
};
[“SUCCESS”] = { --Green
r=0.0;
g=1.0;
b=0.0;
};
[“FAILURE”] = { --Red
r=1.0;
g=0.0;
b=0.0;
};
};
[“HOSTILE”] = {
[“CAST”] = { --Orange
r=1.0;
g=0.5;
b=0.1;
};
[“CHANNEL”] = { --Orange
r=1.0;
g=0.6;
b=0.2;
};
[“SUCCESS”] = {
r=0.0;
g=1.0;
b=0.0;
};
[“FAILURE”] = {
r=1.0;
g=0.0;
b=0.0;
};
};
};

– colorToString(Table{r,g,b,a}) From SeaString
local function colorToString(color)
if (not color) then
return “FFFFFFFF”;
end
return string.format("%.2X%.2X%.2X%.2X",
(color.a or color.opacity or 1) * 255,
(color.r or 0) * 255,
(color.g or 0) * 255,
(color.b or 0) * 255
);
end

local function setBarColor()
local r,g,b = ColorPickerFrame:GetColorRGB()
local reaction = ColorPickerFrame.extraInfo.reaction
local typeString = ColorPickerFrame.extraInfo.typeString
local info = PartyCastingBars_Colors[reaction][typeString]
info.r=r; info.g=g; info.b=b
if (not ColorPickerFrame:IsShown()) then
DEFAULT_CHAT_FRAME:AddMessage(PCB_COLOR_SET:format(reaction, typeString, colorToString(info), r, g, b) )
end
end

local function cancelBarColorChange()
local color = ColorPickerFrame.previousValues
local reaction = ColorPickerFrame.extraInfo.reaction
local typeString = ColorPickerFrame.extraInfo.typeString
local info = PartyCastingBars_Colors[reaction][typeString]
info.r=color.r; info.g=color.g; info.b=color.b
if (not ColorPickerFrame:IsShown()) then
DEFAULT_CHAT_FRAME:AddMessage(PCB_COLOR_SET:format(reaction, typeString, colorToString(info), info.r, info.g, info.b) )
end
end

function PartyCastingBars.ResetBarColor(reaction, typeString)
local default = PartyCastingBars.DefaultColors[reaction][typeString]
local info = PartyCastingBars_Colors[reaction][typeString]
info.r=default.r; info.g=default.g; info.b=default.b
DEFAULT_CHAT_FRAME:AddMessage(PCB_COLOR_SET:format(reaction, typeString, colorToString(info), info.r, info.g, info.b) )
end

for reaction, info in pairs(PartyCastingBars_Colors) do
for typeString, typeInfo in pairs(info) do
typeInfo.extraInfo = {typeString=typeString, reaction=reaction}
end
end

function PartyCastingBars.OpenColorPicker(info)
ColorPickerFrame.hasOpacity = nil;
ColorPickerFrame.opacityFunc = nil;
ColorPickerFrame.opacity = 1;
ColorPickerFrame.previousValues = {r = info.r+0, g = info.g+0, b = info.b+0, opacity = 1};
ColorPickerFrame.func = setBarColor;
ColorPickerFrame.cancelFunc = cancelBarColorChange;
ColorPickerFrame.extraInfo = info.extraInfo;
– This must come last, since it triggers a call to ColorPickerFrame.func()
–ColorPickerFrame:SetColorRGB(info.r, info.g, info.b);
ShowUIPanel(ColorPickerFrame);
ColorPickerFrame:SetColorRGB(info.r, info.g, info.b);
end


– Party Member Caching

PartyCastingBars.PartyMembers = {}
PartyCastingBars.HostilityCache = {}

function PartyCastingBars.CachePartyMembers()
PartyCastingBars.PartyMembers = {}
for i=1, 4 do
local unit = “party”…i
if (UnitExists(unit)) then
local name = UnitName(unit)
PartyCastingBars.PartyMembers[name] = i
PartyCastingBars.HostilityCache[name] = UnitCanAttack(“player”, unit)
end
end
if (UnitInRaid(“player”)) then
for i=1, 40 do
local unit = “raid”…i
if (UnitExists(unit)) then
local name = UnitName(unit)
PartyCastingBars.HostilityCache[name] = UnitCanAttack(“player”, unit)
end
end
end
end


– Color Management

function PartyCastingBars.GetColorArgs(database)
return database.r, database.g, database.b
end


– Events

function PartyCastingBars.EventFrameOnLoad(frame)
frame:RegisterEvent(“VARIABLES_LOADED”)
frame:RegisterEvent(“PLAYER_ENTERING_WORLD”)
frame:RegisterEvent(“PARTY_MEMBERS_CHANGED”)
frame:RegisterEvent(“PLAYER_TARGET_CHANGED”)
frame:RegisterEvent(“UNIT_SPELLCAST_SENT”)
frame:RegisterEvent(“CHAT_MSG_ADDON”)
end

function PartyCastingBars.EventFrameOnEvent(event, newarg1, newarg2, newarg3, newarg4)
if ( event == “VARIABLES_LOADED” ) then
PartyCastingBars.RegisterConfig()

elseif ( event == "PLAYER_ENTERING_WORLD" ) then
	PartyCastingBars.CachePartyMembers()
	
elseif ( event == "PARTY_MEMBERS_CHANGED" ) then
	PartyCastingBars.CachePartyMembers()
	
elseif ( event == "PLAYER_TARGET_CHANGED" ) then
	if (UnitExists("target")) then
		PartyCastingBars.HostilityCache[UnitName("target")] = UnitCanAttack("player", "target")
	end
	
elseif ( event == "UNIT_SPELLCAST_SENT" ) then
	-- "player", spell, rank, target
	if (newarg2 and newarg4) then
		if (PartyCastingBars.HostilityCache[newarg4]) then
			ChatThrottleLib:SendAddonMessage("ALERT", "PartyCastingBars", format(PartyCastingBars.COMM_FORMAT, newarg2, newarg4, "hostile"), "PARTY");
		else
			ChatThrottleLib:SendAddonMessage("ALERT", "PartyCastingBars", format(PartyCastingBars.COMM_FORMAT, newarg2, newarg4, "friendly"), "PARTY");
		end
	end
	
elseif ( event == "CHAT_MSG_ADDON" ) then
	-- prefix, msg, method, sender
	if (newarg1 == "PartyCastingBars") then
		local partyNum = PartyCastingBars.PartyMembers[newarg4]
		if (partyNum) then
			local _, _, spellName, targetName, relationship = strfind(newarg2, "^(.+),(.+),(.+)$")
			if (spellName and targetName and relationship) then
				local frame = getglobal("PartyMemberFrame"..partyNum.."CastingBarFrame")
				frame.targetName = targetName
				frame.hostileCast = (relationship == "hostile")
				PartyCastingBars.OnEvent(frame, "UNIT_SPELLCAST_TARGET_CHANGED", "party"..partyNum, spellName)
			end
		end
	end
	
end

end


– Bar Scripts

function PartyCastingBars.OnLoad(bar)
– Modified from CastingBarFrame_OnLoad
bar:RegisterEvent(“UNIT_SPELLCAST_START”);
bar:RegisterEvent(“UNIT_SPELLCAST_STOP”);
bar:RegisterEvent(“UNIT_SPELLCAST_FAILED”);
bar:RegisterEvent(“UNIT_SPELLCAST_INTERRUPTED”);
bar:RegisterEvent(“UNIT_SPELLCAST_DELAYED”);
bar:RegisterEvent(“UNIT_SPELLCAST_CHANNEL_START”);
bar:RegisterEvent(“UNIT_SPELLCAST_CHANNEL_UPDATE”);
bar:RegisterEvent(“UNIT_SPELLCAST_CHANNEL_STOP”);
–bar:RegisterEvent(“PLAYER_ENTERING_WORLD”);

bar:RegisterForDrag("LeftButton");

bar.partyFrame = bar:GetParent();
bar.unit = bar:GetParent().unit or bar:GetParent():GetAttribute("unit");
bar.showTradeSkills = true;
bar.casting = nil;
bar.channeling = nil;
bar.holdTime = 0;
bar.showCastbar = true;

local barIcon = getglobal(bar:GetName().."Icon");
barIcon:Hide();

bar:SetScale(0.75)
local text = getglobal(bar:GetName().."Text")
text:ClearAllPoints()
text:SetPoint("CENTER", bar, "CENTER", 0, 0)
bar.barText = text

local border = getglobal(bar:GetName().."Border")
border:SetTexture("Interface\\Tooltips\\UI-StatusBar-Border")
border:SetWidth(202)
border:SetHeight(18)
border:ClearAllPoints()
border:SetPoint("CENTER", bar, "CENTER", 0, 0)
bar.border = border

local flash = getglobal(bar:GetName().."Flash")
flash:SetTexture("Interface\\AddOns\\PartyCastingBars\\Skin\\ArcaneBarFlash")
flash:SetWidth(292)
flash:SetHeight(34)
flash:ClearAllPoints()
flash:SetPoint("CENTER", bar, "CENTER", 0, 0)
bar.barFlash = flash

local icon = getglobal(bar:GetName().."Icon")
icon:Show();
bar.barIcon = icon

local spark = getglobal(bar:GetName().."Spark")
flash:ClearAllPoints()
flash:SetPoint("CENTER", bar, "CENTER", 0, 0)
bar.barSpark = spark

bar.barTime = getglobal(bar:GetName().."Time")

tinsert(PartyCastingBars.Bars, bar)

end

function PartyCastingBars.GetTimeLeft(bar)
local min, max = bar:GetMinMaxValues();
local current_time;
if ( bar.channeling ) then
current_time = bar:GetValue() - min;
else
current_time = max - bar:GetValue();
end
return format(PartyCastingBars.TIME_LEFT, math.max(current_time,0));
end

function PartyCastingBars.OnEvent(bar, event, unit, spellName)
–Modified from CastingBarFrame_OnEvent to handle colors, interuptions, frame shortcuts and possible target text
–[[
if ( newevent == “PLAYER_ENTERING_WORLD” ) then
local nameChannel = UnitChannelInfo(bar.unit);
local nameSpell = UnitCastingInfo(bar.unit);
if ( nameChannel ) then
event = “UNIT_SPELLCAST_CHANNEL_START”;
unit = bar.unit;
elseif ( nameSpell ) then
event = “UNIT_SPELLCAST_START”;
unit = bar.unit;
end
end
]]

if ( unit ~= bar.unit ) then
	return;
end

local barSpark = bar.barSpark;
local barText = bar.barText;
local barFlash = bar.barFlash;
local barIcon = bar.barIcon;

if ( event == "UNIT_SPELLCAST_START" ) then
	local name, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitCastingInfo(bar.unit);
	if ( not name or (not bar.showTradeSkills and isTradeSkill)) then
		bar:Hide();
		return;
	end
	
	bar.hostileCast = bar.nextHostileCast;
	bar.targetName = bar.nextTargetName;
	
	if (bar.hostileCast) then
		bar:SetStatusBarColor(PartyCastingBars.GetColorArgs(PartyCastingBars_Colors["HOSTILE"]["CAST"]));
	else
		bar:SetStatusBarColor(PartyCastingBars.GetColorArgs(PartyCastingBars_Colors["FRIENDLY"]["CAST"]));
	end
	barSpark:Show();
	bar.startTime = startTime / 1000;
	bar.maxValue = endTime / 1000;

	-- startTime to maxValue		no endTime
	bar:SetMinMaxValues(bar.startTime, bar.maxValue);
	bar:SetValue(bar.startTime);
	if (bar.targetName) then
		barText:SetText(format(PartyCastingBars.SPELL_AND_TARGET, text, bar.targetName))
	else
		barText:SetText(text);
	end
	barIcon:SetTexture(texture);
	bar:SetAlpha(1.0);
	bar.holdTime = 0;
	bar.casting = 1;
	bar.channeling = nil;
	bar.fadeOut = nil;
	if ( bar.showCastbar ) then
		bar:Show();
	end
			
	return;

elseif ( event == "UNIT_SPELLCAST_STOP" or event == "UNIT_SPELLCAST_CHANNEL_STOP" ) then
	if ( not bar:IsVisible() ) then
		bar:Hide();
	end
	if ( bar:IsShown() ) then
		local min, max = bar:GetMinMaxValues();
		local currTimeLeft = max - bar:GetValue();
		if (currTimeLeft > 0.1 and not bar.channeling) then
			-- use interupted event handler
			event = "UNIT_SPELLCAST_INTERRUPTED";
		else
			barSpark:Hide();
			barFlash:SetAlpha(0.0);
			barFlash:Show();
			bar:SetValue(bar.maxValue);
			if ( event == "UNIT_SPELLCAST_STOP" ) then
				if (bar.casting) then
					if (bar.hostileCast) then
						bar:SetStatusBarColor(PartyCastingBars.GetColorArgs(PartyCastingBars_Colors["HOSTILE"]["SUCCESS"]));
					else
						bar:SetStatusBarColor(PartyCastingBars.GetColorArgs(PartyCastingBars_Colors["FRIENDLY"]["SUCCESS"]));
					end
				end
				bar.casting = nil;
			else
				bar.channeling = nil;
			end
			bar.flash = 1;
			bar.fadeOut = 1;
			bar.holdTime = 0;
		end
		
		bar.targetName = nil;
		bar.hostileCast = nil;
	end
end

if ( event == "UNIT_SPELLCAST_FAILED" or event == "UNIT_SPELLCAST_INTERRUPTED" ) then
	if ( bar:IsShown() and not bar.channeling ) then
		bar:SetValue(bar.maxValue);
		if (bar.hostileCast) then
			bar:SetStatusBarColor(PartyCastingBars.GetColorArgs(PartyCastingBars_Colors["HOSTILE"]["FAILURE"]));
		else
			bar:SetStatusBarColor(PartyCastingBars.GetColorArgs(PartyCastingBars_Colors["FRIENDLY"]["FAILURE"]));
		end
		barSpark:Hide();
		--[[
		if ( event == "UNIT_SPELLCAST_FAILED" ) then
			barText:SetText(FAILED);
		else
			barText:SetText(INTERRUPTED);
		end
		]]--
		bar.casting = nil;
		bar.channeling = nil;
		bar.fadeOut = 1;
		bar.holdTime = GetTime() + CASTING_BAR_HOLD_TIME;
		
		bar.targetName = nil;
		bar.hostileCast = nil;
	end
elseif ( event == "UNIT_SPELLCAST_TARGET_CHANGED" ) then
	-- Fake event, generated by chat comm
	if ( not spellName ) then
		return;
	end
	if ( bar:IsShown() ) then
		local min, max = bar:GetMinMaxValues();
		local currTimeLeft = max - bar:GetValue();
		
		local name, nameSubtext, text, texture, startTime, endTime, isTradeSkill; 
		if ( bar.casting ) then
			name, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitCastingInfo(bar.unit);
		elseif ( bar.channeling ) then
			name, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitChannelInfo(bar.unit);
		end
		
		if (spellName == name and currTimeLeft > 0.1) then
			-- Spell start event was already recieved, update the current spell
			if ( bar.casting ) then
				if (bar.hostileCast) then
					bar:SetStatusBarColor(PartyCastingBars.GetColorArgs(PartyCastingBars_Colors["HOSTILE"]["CAST"]));
				else
					bar:SetStatusBarColor(PartyCastingBars.GetColorArgs(PartyCastingBars_Colors["FRIENDLY"]["CAST"]));
				end
			elseif ( bar.channeling ) then
				if (bar.hostileCast) then
					bar:SetStatusBarColor(PartyCastingBars.GetColorArgs(PartyCastingBars_Colors["HOSTILE"]["CHANNEL"]));
				else
					bar:SetStatusBarColor(PartyCastingBars.GetColorArgs(PartyCastingBars_Colors["FRIENDLY"]["CHANNEL"]));
				end
			end
			
			if (bar.targetName) then
				barText:SetText(format(PartyCastingBars.SPELL_AND_TARGET, text, bar.targetName));
			else
				barText:SetText(text);
			end
			return;
		end
	end
	
	bar.nextHostileCast = bar.hostileCast;
	bar.nextTargetName = bar.targetName;
	
elseif ( event == "UNIT_SPELLCAST_DELAYED" ) then
	if ( bar:IsShown() ) then
		local name, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitCastingInfo(bar.unit);
		if ( not name or (not bar.showTradeSkills and isTradeSkill)) then
			-- if there is no name, there is no bar
			bar:Hide();
			return;
		end
		bar.startTime = startTime / 1000;
		bar.maxValue = endTime / 1000;
		bar:SetMinMaxValues(bar.startTime, bar.maxValue);
	end
elseif ( event == "UNIT_SPELLCAST_CHANNEL_START" ) then
	local name, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitChannelInfo(bar.unit);
	if ( not name or (not bar.showTradeSkills and isTradeSkill)) then
		-- if there is no name, there is no bar
		bar:Hide();
		return;
	end
	
	bar.hostileCast = bar.nextHostileCast;
	bar.targetName = bar.nextTargetName;

	if (bar.hostileCast) then
		bar:SetStatusBarColor(PartyCastingBars.GetColorArgs(PartyCastingBars_Colors["HOSTILE"]["CHANNEL"]));
	else
		bar:SetStatusBarColor(PartyCastingBars.GetColorArgs(PartyCastingBars_Colors["FRIENDLY"]["CHANNEL"]));
	end
	barSpark:Show();
	bar.startTime = startTime / 1000;
	bar.endTime = endTime / 1000;
	bar.duration = bar.endTime - bar.startTime;
	bar.maxValue = bar.startTime;

	-- startTime to endTime		no maxValue
	bar:SetMinMaxValues(bar.startTime, bar.endTime);
	bar:SetValue(bar.endTime);
	if (bar.targetName) then
		barText:SetText(format(PartyCastingBars.SPELL_AND_TARGET, text, bar.targetName))
	else
		barText:SetText(text);
	end
	barIcon:SetTexture(texture);
	bar:SetAlpha(1.0);
	bar.holdTime = 0;
	bar.casting = nil;
	bar.channeling = 1;
	bar.fadeOut = nil;
	if ( bar.showCastbar ) then
		bar:Show();
	end
elseif ( event == "UNIT_SPELLCAST_CHANNEL_UPDATE" ) then
	if ( bar:IsShown() ) then
		local name, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitChannelInfo(bar.unit);
		if ( not name or (not bar.showTradeSkills and isTradeSkill)) then
			-- if there is no name, there is no bar
			bar:Hide();
			return;
		end
		bar.startTime = startTime / 1000;
		bar.endTime = endTime / 1000;
		bar.maxValue = bar.startTime;
		bar:SetMinMaxValues(bar.startTime, bar.endTime);
	end
end

end

function PartyCastingBars.OnUpdate(bar)
if ( PartyCastingBars.draggable ) then
return;
end
if ( bar.casting ) then
local status = GetTime();
if ( status > bar.maxValue ) then
status = bar.maxValue;
end
if ( status == bar.maxValue ) then
bar:SetValue(bar.maxValue);
if (bar.hostileCast) then
bar:SetStatusBarColor(PartyCastingBars.GetColorArgs(PartyCastingBars_Colors[“HOSTILE”][“SUCCESS”]));
else
bar:SetStatusBarColor(PartyCastingBars.GetColorArgs(PartyCastingBars_Colors[“FRIENDLY”][“SUCCESS”]));
end
bar.barSpark:Hide();
bar.barFlash:SetAlpha(0.0);
bar.barFlash:Show();
bar.casting = nil;
bar.flash = 1;
bar.fadeOut = 1;
return;
end
bar:SetValue(status);
bar.barFlash:Hide();
local sparkPosition = ((status - bar.startTime) / (bar.maxValue - bar.startTime)) * bar:GetWidth();
if ( sparkPosition < 0 ) then
sparkPosition = 0;
end
bar.barSpark:SetPoint(“CENTER”, bar, “LEFT”, sparkPosition, 0);
bar.barTime:SetText(PartyCastingBars.GetTimeLeft(bar));
elseif ( bar.channeling ) then
local time = GetTime();
if ( time > bar.endTime ) then
time = bar.endTime;
end
if ( time == bar.endTime ) then
if (bar.hostileCast) then
bar:SetStatusBarColor(PartyCastingBars.GetColorArgs(PartyCastingBars_Colors[“HOSTILE”][“SUCCESS”]));
else
bar:SetStatusBarColor(PartyCastingBars.GetColorArgs(PartyCastingBars_Colors[“FRIENDLY”][“SUCCESS”]));
end
bar.barSpark:Hide();
bar.barFlash:SetAlpha(0.0);
bar.barFlash:Show();
bar.channeling = nil;
bar.flash = 1;
bar.fadeOut = 1;
return;
end
local barValue = bar.startTime + (bar.endTime - time);
bar:SetValue( barValue );
bar.barFlash:Hide();
local sparkPosition = ((barValue - bar.startTime) / (bar.endTime - bar.startTime)) * bar:GetWidth();
bar.barSpark:SetPoint(“CENTER”, bar, “LEFT”, sparkPosition, 0);
bar.barTime:SetText(PartyCastingBars.GetTimeLeft(bar));
elseif ( GetTime() < bar.holdTime ) then
return;
elseif ( bar.flash ) then
local alpha = bar.barFlash:GetAlpha() + CASTING_BAR_FLASH_STEP;
if ( alpha < 1 ) then
bar.barFlash:SetAlpha(alpha);
else
bar.barFlash:SetAlpha(1.0);
bar.flash = nil;
end
elseif ( bar.fadeOut ) then
local alpha = bar:GetAlpha() - CASTING_BAR_ALPHA_STEP;
if ( alpha > 0 ) then
bar:SetAlpha(alpha);
else
bar.fadeOut = nil;
bar:Hide();
end
end
end

function PartyCastingBars.OnDragStart(bar, button)
if (not PartyCastingBars.draggable) then
return;
end
bar:StartMoving();
end

function PartyCastingBars.OnDragStop(bar)
bar:StopMovingOrSizing();
end

function PartyCastingBars.OnMouseUp(bar)
bar:StopMovingOrSizing();
end

function PartyCastingBars.OnHide(bar)
bar:StopMovingOrSizing();
end


– Master Enable

function PartyCastingBars.EnableToggle(value)
if (value) then
if (PartyCastingBars_Enabled) then
–Do nothing
else
for i, barFrame in ipairs(PartyCastingBars.Bars) do
barFrame:SetScript(“OnEvent”, PartyCastingBars.OnEvent);
barFrame:SetScript(“OnUpdate”, PartyCastingBars.OnUpdate);
end
PartyCastingBars_Enabled = true;
end
else
if (PartyCastingBars_Enabled) then
for i, barFrame in ipairs(PartyCastingBars.Bars) do
barFrame:SetScript(“OnEvent”, nil);
barFrame:SetScript(“OnUpdate”, nil);
barFrame:Hide();
end
PartyCastingBars_Enabled = false;
else
–Do nothing
end
end
end


– Icon Enable

function PartyCastingBars.EnableIcons(value)
if (value) then
if (PartyCastingBars_IconsEnabled) then
–Do nothing
else
for i, barFrame in ipairs(PartyCastingBars.Bars) do
barFrame.barIcon:Show();
end
PartyCastingBars_IconsEnabled = true;
end
else
if (PartyCastingBars_IconsEnabled) then
for i, barFrame in ipairs(PartyCastingBars.Bars) do
barFrame.barIcon:Hide();
end
PartyCastingBars_IconsEnabled = false;
else
–Do nothing
end
end
end


– Bar Parenting

function PartyCastingBars.SetParents(value)
PartyCastingBars_Parented = (value);
for i, barFrame in ipairs(PartyCastingBars.Bars) do
barFrame:SetParent(value and barFrame.partyFrame or UIParent);
end
end


– Bar Scaling

function PartyCastingBars.SetScales(value)
for i, barFrame in ipairs(PartyCastingBars.Bars) do
barFrame:SetScale(value);
end
end


– Draggable Mode

function PartyCastingBars.EnableDragging(value)
PartyCastingBars.draggable = (value);
for i, barFrame in ipairs(PartyCastingBars.Bars) do
if (PartyCastingBars.draggable) then
barFrame:Show();
barFrame.barText:SetText(PCB_DRAGGABLE…" #"…i);
barFrame.barSpark:Hide();
barFrame.barTime:SetText(format(PartyCastingBars.TIME_LEFT, 15));
barFrame.barTime:Show();
barFrame.barIcon:SetTexture(“Interface\Icons\Spell_Holy_PowerWordShield”);
barFrame:SetAlpha(1);
barFrame:EnableMouse(1);
else
barFrame:Hide();
barFrame:EnableMouse();
end
end
end


– Reset Bars

function PartyCastingBars.ResetBarLocations()
for i, barFrame in ipairs(PartyCastingBars.Bars) do
barFrame:ClearAllPoints();
barFrame:SetPoint(“TOPLEFT”, barFrame.partyFrame, “TOPRIGHT”, 7, 2);
end
end


– Khaos Config

function PartyCastingBars.RegisterConfig()
--------------------------------------------------
– Configuration Functions
--------------------------------------------------

if (not PartyCastingBars_Colors) then PartyCastingBars_Colors = {} end;
if (not PartyCastingBars_Colors["FRIENDLY"]) then PartyCastingBars_Colors["FRIENDLY"] = {} end;
if (not PartyCastingBars_Colors["HOSTILE"]) then PartyCastingBars_Colors["HOSTILE"] = {} end;

if ( Khaos ) then 
	-- Khaos will save our vars, not the toc!
	PartyCastingBars_Enabled = true;
	PartyCastingBars_IconsEnabled = true;
	-- W0000!
	local optionSet = {};
	local commandSet = {};
	local configurationSet = {
		id="PartyCastingBars";
		text=PCB_SECTION_TEXT;
		helptext=PCB_SECTION_TIP;
		difficulty=1;
		options=optionSet;
		commands=commandSet;
		default=false;
		callback=PartyCastingBars.EnableToggle;
	};

	-- Register Basics
	table.insert(
		optionSet,
		{
			id="Header";
			text=PCB_HEADER_TEXT;
			helptext=PCB_HEADER_TIP;
			difficulty=1;
			type=K_HEADER;
		}
	);
	table.insert(
		optionSet,
		{
			id="ShowSpellIcon";
			text=PCB_SHOW_ICON_TEXT;
			helptext=PCB_SHOW_ICON_TIP;
			difficulty=1;
			callback=function(state)
				PartyCastingBars.EnableIcons(state.checked)
			end;
			feedback=function(state)
				if ( state.checked ) then
					return PCB_SHOWNICONFEEDBACK_NEGATIVE;
				else
					return PCB_SHOWNICONFEEDBACK_POSITIVE;
				end
			end;
			check=true;
			type=K_TEXT;
			setup= {						
			};
			default={
				checked=true;
			};
			disabled={
				disabled=false;
			};					
		}
	);
	table.insert(
		optionSet,
		{
			id="PartyMemberFrameParents";
			text=PCB_PARTYMEMBERFRAME_PARENT_TEXT;
			helptext=PCB_PARTYMEMBERFRAME_PARENT_TIP;
			difficulty=3;
			callback=function(state)
				PartyCastingBars.SetParents(state.checked)
			end;
			feedback=function(state)
				if ( state.checked ) then
					return PCB_PARTYMEMBERFRAME_PARENT_NEGATIVE;
				else
					return PCB_PARTYMEMBERFRAME_PARENT_POSITIVE;
				end
			end;
			check=true;
			type=K_TEXT;
			setup= {						
			};
			default={
				checked=true;
			};
			disabled={
				disabled=true;
			};					
		}
	);
	table.insert(
		optionSet,
		{
			id="Draggable";
			text=PCB_DRAGGABLE_TEXT;
			helptext=PCB_DRAGGABLE_TIP;
			difficulty=3;
			callback=function(state)
				PartyCastingBars.EnableDragging(state.checked)
			end;
			feedback=function(state)
				if ( state.checked ) then
					return PCB_DRAGGABLE_NEGATIVE;
				else
					return PCB_DRAGGABLE_POSITIVE;
				end
			end;
			check=true;
			type=K_TEXT;
			setup= {						
			};
			default={
				checked=false;
			};
			disabled={
				disabled=false;
			};					
		}
	);
	table.insert(
		optionSet,
		{
			id="Scale";
			text=PCB_SCALE_TEXT;
			helptext=PCB_SCALE_TIP;
			difficulty=3;
			check=true;
			type=K_SLIDER;
			callback=function(state)
				PartyCastingBars.SetScales(state.slider)
			end;
			feedback=function(state)
				if ( state.checked ) then
					return format(PCB_SCALE_POSITIVE, state.slider);
				else
					return PCB_SCALE_NEGATIVE;
				end
			end;
			setup = {
				sliderMin = .5;
				sliderMax = 2;
				sliderStep = .1;
				sliderText = PCB_SCALE;
			};
			default = {
				checked = false;
				slider = 0.7;
			};
			disabled = {
				checked = false;
				slider = 1;
			};
			dependencies = {
				Scale = {checked=true;};
			};
		}
	);
	table.insert(
		optionSet,
		{
			id="ResetLocations";
			text=PCB_RESET_TEXT;
			helptext=PCB_RESET_TIP;
			difficulty=3;
			callback=PartyCastingBars.ResetBarLocations;
			feedback=function(state)
				return PCB_LOCATIONS_RESET;
			end;
			type=K_BUTTON;
			setup = {
				buttonText=PCB_RESETTEXT;
			};
		}
	);

	-- Register for each cast type
	
	local reaction = "FRIENDLY"
	
	table.insert(
		optionSet,
		{
			id=reaction.."Header";
			text=getglobal("PCB_HEADER_"..reaction.."_TEXT");
			helptext=getglobal("PCB_HEADER_"..reaction.."_TIP");
			difficulty=3;
			type=K_HEADER;
		}
	);
	
	for i, castType in ipairs({"CAST","CHANNEL","SUCCESS","FAILURE"}) do 
		local typeString = castType;
		local niceType = Sea.string.capitalizeWords(castType);
		local colorChangeFeedback = function(state)
			return format(PCB_COLOR_CHANGED, colorToString(state.color), typeString );
		end;
		local colorResetFeedback = function(state)
			return format(PCB_COLOR_RESET, colorToString(state.color), typeString );
		end;
		table.insert(
			optionSet,
			{
				id=reaction..typeString.."ColorSetter";
				text=getglobal("PCB_"..typeString.."COLOR_"..reaction.."_SET");
				helptext=getglobal("PCB_"..typeString.."COLOR_SET_TIP");
				difficulty=3;
				callback=function(state)
					if (PartyCastingBars.ColorResetting[reaction][typeString]) then
						state.color = PartyCastingBars.DefaultColors[reaction][typeString];
						PartyCastingBars.ColorResetting[reaction][typeString] = false;
					end
					getglobal("PartyCastingBars_"..reaction)[typeString] = state.color;
				end;
				feedback=colorChangeFeedback;
				type=K_COLORPICKER;
				setup= {
					hasOpacity=false;
				};
				default={
					color=PartyCastingBars.DefaultColors[reaction][castType];
				};
				disabled={
					color=PartyCastingBars.DefaultColors[reaction][castType];
				};					
			}
		);
		table.insert(
			optionSet,
			{
				id=reaction.. typeString.."Reset";
				text=getglobal("PCB_"..typeString.."COLOR_RESET");
				helptext=getglobal("PCB_"..typeString.."COLOR_RESET_TIP");
				difficulty=3;
				callback=function(state)
					PartyCastingBars.ColorResetting[reaction][typeString] = true;
					-- The khaos config's color has to be reset too or else it will just get refreshed
					-- with its state and override any values we change here.
				end;
				feedback=colorResetFeedback;
				type=K_BUTTON;
				setup = {
					buttonText=PCB_RESETTEXT;
				};
			}
		);
	end
	
	local reaction = "HOSTILE"
	
	table.insert(
		optionSet,
		{
			id=reaction.."Header";
			text=getglobal("PCB_HEADER_"..reaction.."_TEXT");
			helptext=getglobal("PCB_HEADER_"..reaction.."_TIP");
			difficulty=3;
			type=K_HEADER;
		}
	);
		
	for i, castType in ipairs({"CAST","CHANNEL","SUCCESS","FAILURE"}) do 
		local typeString = castType;
		local colorChangeFeedback = function(state)
			return format(PCB_COLOR_CHANGED, colorToString(state.color), typeString );
		end;
		local colorResetFeedback = function(state)
			return format(PCB_COLOR_RESET, colorToString(state.color), typeString );
		end;
		table.insert(
			optionSet,
			{
				id=reaction..typeString.."ColorSetter";
				text=getglobal("PCB_"..typeString.."COLOR_"..reaction.."_SET");
				helptext=getglobal("PCB_"..typeString.."COLOR_SET_TIP");
				difficulty=3;
				callback=function(state)
					if (PartyCastingBars.ColorResetting[reaction][typeString]) then
						state.color = PartyCastingBars.DefaultColors[reaction][typeString];
						PartyCastingBars.ColorResetting[reaction][typeString] = false;
					end
					getglobal("PartyCastingBars_"..reaction)[typeString] = state.color;
				end;
				feedback=colorChangeFeedback;
				type=K_COLORPICKER;
				setup= {
					hasOpacity=false;
				};
				default={
					color=PartyCastingBars.DefaultColors[reaction][castType];
				};
				disabled={
					color=PartyCastingBars.DefaultColors[reaction][castType];
				};					
			}
		);
		table.insert(
			optionSet,
			{
				id=reaction..typeString.."Reset";
				text=getglobal("PCB_"..typeString.."COLOR_RESET");
				helptext=getglobal("PCB_"..typeString.."COLOR_RESET_TIP");
				difficulty=3;
				callback=function(state)
					PartyCastingBars.ColorResetting[reaction][typeString] = true;
					-- The khaos config's color has to be reset too or else it will just get refreshed
					-- with its state and override any values we change here.
				end;
				feedback=colorResetFeedback;
				type=K_BUTTON;
				setup = {
					buttonText=PCB_RESETTEXT;
				};
			}
		);
	end
	
	Khaos.registerOptionSet(
		"combat",
		configurationSet
	);			
else
	
	-- Command System FTW
	PartyCastingBars.EnableToggle(PartyCastingBars_Enabled);
	PartyCastingBars.EnableIcons(PartyCastingBars_IconsEnabled);
	PartyCastingBars.SetParents(PartyCastingBars_Parented);

	SlashCmdList["PARTYCASTINGBARS"] = function(msg) 
		local cmd, reaction, typeString = (" "):split(strupper(msg))
		if (cmd == "ENABLE") then
			PartyCastingBars.EnableToggle(true);
			DEFAULT_CHAT_FRAME:AddMessage(PCB_ENABLED,0,1,0);
		elseif (cmd == "DISABLE") then
			PartyCastingBars.EnableToggle(false);
			DEFAULT_CHAT_FRAME:AddMessage(PCB_DISABLED,1,0,0);
		elseif (cmd == "ICON") then
			PartyCastingBars.EnableIcons(not PartyCastingBars_IconsEnabled);
			if (PartyCastingBars_IconsEnabled) then
				DEFAULT_CHAT_FRAME:AddMessage(PCB_SHOWNICONFEEDBACK_POSITIVE,0,1,1);
			else
				DEFAULT_CHAT_FRAME:AddMessage(PCB_SHOWNICONFEEDBACK_NEGATIVE,1,1,0);
			end
		elseif (cmd == "DRAG") then
			PartyCastingBars.EnableDragging(not PartyCastingBars.draggable);
			if (PartyCastingBars.draggable) then
				DEFAULT_CHAT_FRAME:AddMessage(PCB_DRAGGABLE_POSITIVE,0,1,1);
			else
				DEFAULT_CHAT_FRAME:AddMessage(PCB_DRAGGABLE_NEGATIVE,1,1,0);
			end
		elseif (cmd == "PARENT") then
			PartyCastingBars.SetParents(not PartyCastingBars_Parented);
			if (PartyCastingBars_Parented) then
				DEFAULT_CHAT_FRAME:AddMessage(PCB_PARTYMEMBERFRAME_PARENT_POSITIVE,0,1,1);
			else
				DEFAULT_CHAT_FRAME:AddMessage(PCB_PARTYMEMBERFRAME_PARENT_NEGATIVE,1,1,0);
			end
		elseif (cmd == "SET" and reaction and typeString 
		and PartyCastingBars_Colors[reaction] 
		and PartyCastingBars_Colors[reaction][typeString]) then
		
			PartyCastingBars.OpenColorPicker(PartyCastingBars_Colors[reaction][typeString])
			
		elseif (cmd == "RESET" and reaction and typeString
		and PartyCastingBars.DefaultColors[reaction] 
		and PartyCastingBars.DefaultColors[reaction][typeString]) then
		
			PartyCastingBars.ResetBarColor(reaction, typeString)
			
		elseif (cmd == "HELP") then
			DEFAULT_CHAT_FRAME:AddMessage(PCB_HELP1);
			--DEFAULT_CHAT_FRAME:AddMessage(PCB_HELP2);
			DEFAULT_CHAT_FRAME:AddMessage("|c00995555--------|r");
			DEFAULT_CHAT_FRAME:AddMessage(PCB_HELP3);
			DEFAULT_CHAT_FRAME:AddMessage(PCB_HELP4);
			DEFAULT_CHAT_FRAME:AddMessage(PCB_HELP5);
			DEFAULT_CHAT_FRAME:AddMessage(PCB_HELP6);
			DEFAULT_CHAT_FRAME:AddMessage(PCB_HELP7);
		else
			DEFAULT_CHAT_FRAME:AddMessage(PCB_INVALID_COMMAND,.5,.5,.5);
		end
	end;
	
 	SLASH_PARTYCASTINGBARS1 = "/partycastingbars";
 	SLASH_PARTYCASTINGBARS2 = "/pcb";
 	
end

end

===================================================

I found another easier script from jax casting bar, the only thing is how do i increase the casting bar size.
local JPC = CreateFrame(“Frame”,“JPC”,UIParent)
local GetNumPartyMembers = GetNumGroupMembers
local usingRaidFrames = tonumber(GetCVar(“useCompactPartyFrames”))
local spellBars = {}
local InArena = function() return (select(2,IsInInstance()) == “arena”) end

hooksecurefunc(“CompactRaidFrameContainer_SetFlowSortFunction”, function(,)
JPC:UpdateBars()
end)
function JPC:UpdateBars()
local raidFramesOn = tonumber(GetCVar(“useCompactPartyFrames”))
for k,sp in ipairs(spellBars) do
if (GetNumPartyMembers() > k) then
sp:ClearAllPoints()
if (raidFramesOn == 1) or (UnitInRaid(“player”) and not InArena()) then
for g =1,GetNumPartyMembers(),1 do
local raidFrame = nil
if CompactRaidFrameManager_GetSetting(“KeepGroupsTogether”) then
if UnitInRaid(“player”) then
raidFrame = _G[“CompactRaidGroup1Member”…g]
else
raidFrame = _G[“CompactPartyFrameMember”…g]
end
else
raidFrame = _G[“CompactRaidFrame”…g]
end
if raidFrame and (raidFrame.unitExists and UnitIsUnit(raidFrame.unit,“party”…k)) then
sp:SetParent(raidFrame)
sp:SetPoint(“CENTER”, raidFrame, “CENTER”, 190, 0)
end
end
else
local partyFrame = _G[“PartyMemberFrame”…k]
if partyFrame and UnitIsUnit(partyFrame.unit,“party”…k) then
sp:SetParent(partyFrame)
sp:SetPoint(“CENTER”, partyFrame, “CENTER”, 180, -30)
end
end
end
end
end
function JPC:GROUP_ROSTER_UPDATE()
JPC:UpdateBars()
end
local function JPC_OnUpdate(self)
if usingRaidFrames ~= tonumber(GetCVar(“useCompactPartyFrames”)) then
usingRaidFrames = tonumber(GetCVar(“useCompactPartyFrames”))
self:UpdateBars()
end
end
local function JPC_OnLoad(self)
self:RegisterEvent(“GROUP_ROSTER_UPDATE”)
self:SetScript(“OnEvent”,function(self,event,…) if self[event] then selfevent end end)
for i=1,5 do
local spellbar = CreateFrame(“StatusBar”, “raid”…i…“SpellBar”, UIParent, “SmallCastingBarFrameTemplate”);
spellbar:SetScale(0.7)
CastingBarFrame_SetUnit(spellbar, “party”…i, true, true);
spellBars[i] = spellbar
end
JPC:UpdateBars()
self:SetScript(“OnUpdate”,JPC_OnUpdate)
end
JPC:RegisterEvent(“VARIABLES_LOADED”)
JPC:SetScript(“OnEvent”,JPC_OnLoad)
–SLASH_JaxPartyCastbars1 = “/bd”
–SLASH_JaxPartyCastbars2 = “/bigdebuffs”
–SlashCmdList.JaxPartyCastbars = function(msg)

–end

Well,
On a quick look the addon basically sets up some colors for the bars and then checks specific events and shows the corresponding effect for the spell in the specific castbar frame created for each unit (friendly and hostile). However, that addon seems pretty old (Code from 2006?) and as far as I know there are already new addons in place that will show you this without one of us trying to rewrite that addon. I am no longer playing arena but I looked on curseforge really quick and found this:
https://www.curseforge.com/wow/addons/gladiusex/screenshots

Maybe that helps you.

In terms of the lower script I would bet that if you change the value in this function

e.g. to 0.85 you should see an impact on the size. I say that because the “spellbar”-Frame is created in the line above (“local spellbar = CreateFrame(…)”) and I can see no other function which changes the size of the frames.

Look for the line in “local function JPC_OnLoad(self)”.

Thanks bro, i found the solution… the second script at the bottom i just added sp:SetScale(2) just under sp:SetPoint(“CENTER”, partyFrame, “CENTER”,180,-30)
and i edited the location based on the points works pretty good for me. :slight_smile:

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.