Forum > Serverside Modding

Talents

<< < (2/5) > >>

schlumpf:
Then you may need to remove an item from the first tier.

glararan:
Look i have unlocking next tier when i buy 2 talents

So let's look here is image:
[attachment=0:1ns6di4r]WoWScrnShot_042211_101648.jpg[/attachment:1ns6di4r]

Now i need Required Talent points delete...

schlumpf:
You may want to tell people how you did that.

glararan:
As you wish...so i extract from Patch-enGB2.MPQ

FrameXML >> TalentFrameBase.lua

Now editing:

--- Code: ---PLAYER_TALENTS_PER_TIER = NUMBER TO UNLOCK NEXT TIER;

--- End code ---
I have

--- Code: ---PLAYER_TALENTS_PER_TIER = 2;

--- End code ---
So need 2 talents to open next tier, but i don't know how delete Required Talent points

Maybe some in this?

--- Code: ---MAX_TALENT_GROUPS = 2;
MAX_TALENT_TABS = 4;
MAX_NUM_TALENT_TIERS = 15;
NUM_TALENT_COLUMNS = 4;
MAX_NUM_TALENTS = 40;
PLAYER_TALENTS_PER_TIER = 2;
PET_TALENTS_PER_TIER = 3;

DEFAULT_TALENT_SPEC = "spec1";
DEFAULT_TALENT_TAB = 1;

TALENT_BUTTON_SIZE = 32;
MAX_NUM_BRANCH_TEXTURES = 30;
MAX_NUM_ARROW_TEXTURES = 30;
INITIAL_TALENT_OFFSET_X = 35;
INITIAL_TALENT_OFFSET_Y = 20;

TALENT_HYBRID_ICON = "Interface\Icons\Ability_DualWieldSpecialization";

TALENT_BRANCH_TEXTURECOORDS = {
up = {
[1] = {0.12890625, 0.25390625, 0 , 0.484375},
[-1] = {0.12890625, 0.25390625, 0.515625 , 1.0}
},
down = {
[1] = {0, 0.125, 0, 0.484375},
[-1] = {0, 0.125, 0.515625, 1.0}
},
left = {
[1] = {0.2578125, 0.3828125, 0, 0.5},
[-1] = {0.2578125, 0.3828125, 0.5, 1.0}
},
right = {
[1] = {0.2578125, 0.3828125, 0, 0.5},
[-1] = {0.2578125, 0.3828125, 0.5, 1.0}
},
topright = {
[1] = {0.515625, 0.640625, 0, 0.5},
[-1] = {0.515625, 0.640625, 0.5, 1.0}
},
topleft = {
[1] = {0.640625, 0.515625, 0, 0.5},
[-1] = {0.640625, 0.515625, 0.5, 1.0}
},
bottomright = {
[1] = {0.38671875, 0.51171875, 0, 0.5},
[-1] = {0.38671875, 0.51171875, 0.5, 1.0}
},
bottomleft = {
[1] = {0.51171875, 0.38671875, 0, 0.5},
[-1] = {0.51171875, 0.38671875, 0.5, 1.0}
},
tdown = {
[1] = {0.64453125, 0.76953125, 0, 0.5},
[-1] = {0.64453125, 0.76953125, 0.5, 1.0}
},
tup = {
[1] = {0.7734375, 0.8984375, 0, 0.5},
[-1] = {0.7734375, 0.8984375, 0.5, 1.0}
},
};

TALENT_ARROW_TEXTURECOORDS = {
top = {
[1] = {0, 0.5, 0, 0.5},
[-1] = {0, 0.5, 0.5, 1.0}
},
right = {
[1] = {1.0, 0.5, 0, 0.5},
[-1] = {1.0, 0.5, 0.5, 1.0}
},
left = {
[1] = {0.5, 1.0, 0, 0.5},
[-1] = {0.5, 1.0, 0.5, 1.0}
},
};


local min = min;
local max = max;
local huge = math.huge;
local rshift = bit.rshift;


function TalentFrame_Load(TalentFrame)
TalentFrame.TALENT_BRANCH_ARRAY={};
for i=1, MAX_NUM_TALENT_TIERS do
TalentFrame.TALENT_BRANCH_ARRAY[i] = {};
for j=1, NUM_TALENT_COLUMNS do
TalentFrame.TALENT_BRANCH_ARRAY[i][j] = {id=nil, up=0, left=0, right=0, down=0, leftArrow=0, rightArrow=0, topArrow=0};
end
end
end

function TalentFrame_Update(TalentFrame)
if ( not TalentFrame ) then
return;
end

if ( TalentFrame.updateFunction ) then
TalentFrame.updateFunction();
end

local talentFrameName = TalentFrame:GetName();
local selectedTab = PanelTemplates_GetSelectedTab(TalentFrame);
local preview = GetCVarBool("previewTalents");

-- get active talent group
local isActiveTalentGroup;
if ( TalentFrame.inspect ) then
-- even though we have inspection data for more than one talent group, we're only showing one for now
isActiveTalentGroup = true;
else
isActiveTalentGroup = TalentFrame.talentGroup == GetActiveTalentGroup(TalentFrame.inspect, TalentFrame.pet);
end
-- Setup Frame
local base;
local name, icon, pointsSpent, background, previewPointsSpent = GetTalentTabInfo(selectedTab, TalentFrame.inspect, TalentFrame.pet, TalentFrame.talentGroup);
if ( name ) then
base = "Interface\TalentFrame\"..background.."-";
else
-- temporary default for classes without talents poor guys
base = "Interface\TalentFrame\MageFire-";
end
-- desaturate the background if this isn't the active talent group
local backgroundPiece = _G[talentFrameName.."BackgroundTopLeft"];
backgroundPiece:SetTexture(base.."TopLeft");
SetDesaturation(backgroundPiece, not isActiveTalentGroup);
backgroundPiece = _G[talentFrameName.."BackgroundTopRight"];
backgroundPiece:SetTexture(base.."TopRight");
SetDesaturation(backgroundPiece, not isActiveTalentGroup);
backgroundPiece = _G[talentFrameName.."BackgroundBottomLeft"];
backgroundPiece:SetTexture(base.."BottomLeft");
SetDesaturation(backgroundPiece, not isActiveTalentGroup);
backgroundPiece = _G[talentFrameName.."BackgroundBottomRight"];
backgroundPiece:SetTexture(base.."BottomRight");
SetDesaturation(backgroundPiece, not isActiveTalentGroup);

local numTalents = GetNumTalents(selectedTab, TalentFrame.inspect, TalentFrame.pet);
-- Just a reminder error if there are more talents than available buttons
if ( numTalents > MAX_NUM_TALENTS ) then
message("Too many talents in talent frame!");
end
-- get unspent talent points
local unspentPoints = TalentFrame_UpdateTalentPoints(TalentFrame);
-- compute tab points spent if any
local tabPointsSpent;
if ( TalentFrame.pointsSpent and TalentFrame.previewPointsSpent ) then
tabPointsSpent = TalentFrame.pointsSpent + TalentFrame.previewPointsSpent;
else
tabPointsSpent = 0;
end

TalentFrame_ResetBranches(TalentFrame);
local talentFrameTalentName = talentFrameName.."Talent";
local forceDesaturated, tierUnlocked;
for i=1, MAX_NUM_TALENTS do
local buttonName = talentFrameTalentName..i;
local button = _G[buttonName];
if ( i <= numTalents ) then
-- Set the button info
local name, iconTexture, tier, column, rank, maxRank, isExceptional, meetsPrereq, previewRank, meetsPreviewPrereq =
GetTalentInfo(selectedTab, i, TalentFrame.inspect, TalentFrame.pet, TalentFrame.talentGroup);
if ( name ) then
local displayRank;
if ( preview ) then
displayRank = previewRank;
else
displayRank = rank;
end

_G[buttonName.."Rank"]:SetText(displayRank);
SetTalentButtonLocation(button, tier, column);
TalentFrame.TALENT_BRANCH_ARRAY[tier][column].id = button:GetID();

-- If player has no talent points or this is the inactive talent group then show only talents with points in them
if ( (unspentPoints <= 0 or not isActiveTalentGroup) and displayRank == 0 ) then
forceDesaturated = 1;
else
forceDesaturated = nil;
end

-- is this talent's tier unlocked?
if ( ((tier - 1) * (TalentFrame.pet and PET_TALENTS_PER_TIER or PLAYER_TALENTS_PER_TIER) <= tabPointsSpent) ) then
tierUnlocked = 1;
else
tierUnlocked = nil;
end

SetItemButtonTexture(button, iconTexture);

-- Talent must meet prereqs or the player must have no points to spend
local prereqsSet =
TalentFrame_SetPrereqs(TalentFrame, tier, column, forceDesaturated, tierUnlocked, preview,
GetTalentPrereqs(selectedTab, i, TalentFrame.inspect, TalentFrame.pet, TalentFrame.talentGroup));
if ( prereqsSet and ((preview and meetsPreviewPrereq) or (not preview and meetsPrereq)) ) then
SetItemButtonDesaturated(button, nil);

if ( displayRank < maxRank ) then
-- Rank is green if not maxed out
_G[buttonName.."Slot"]:SetVertexColor(0.1, 1.0, 0.1);
_G[buttonName.."Rank"]:SetTextColor(GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
else
_G[buttonName.."Slot"]:SetVertexColor(1.0, 0.82, 0);
_G[buttonName.."Rank"]:SetTextColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
end
_G[buttonName.."RankBorder"]:Show();
_G[buttonName.."Rank"]:Show();
else
SetItemButtonDesaturated(button, 1, 0.65, 0.65, 0.65);
_G[buttonName.."Slot"]:SetVertexColor(0.5, 0.5, 0.5);
if ( rank == 0 ) then
_G[buttonName.."RankBorder"]:Hide();
_G[buttonName.."Rank"]:Hide();
else
_G[buttonName.."RankBorder"]:SetVertexColor(0.5, 0.5, 0.5);
_G[buttonName.."Rank"]:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
end
end
button:Show();
else
button:Hide();
end
else
button:Hide();
end
end

-- Draw the prereq branches
local node;
local textureIndex = 1;
local xOffset, yOffset;
local texCoords;
-- Variable that decides whether or not to ignore drawing pieces
local ignoreUp;
local tempNode;
TalentFrame_ResetBranchTextureCount(TalentFrame);
TalentFrame_ResetArrowTextureCount(TalentFrame);
for i=1, MAX_NUM_TALENT_TIERS do
for j=1, NUM_TALENT_COLUMNS do
node = TalentFrame.TALENT_BRANCH_ARRAY[i][j];

-- Setup offsets
xOffset = ((j - 1) * 63) + INITIAL_TALENT_OFFSET_X + 2;
yOffset = -((i - 1) * 63) - INITIAL_TALENT_OFFSET_Y - 2;

if ( node.id ) then
-- Has talent
if ( node.up ~= 0 ) then
if ( not ignoreUp ) then
TalentFrame_SetBranchTexture(i, j, TALENT_BRANCH_TEXTURECOORDS["up"][node.up], xOffset, yOffset + TALENT_BUTTON_SIZE, TalentFrame);
else
ignoreUp = nil;
end
end
if ( node.down ~= 0 ) then
TalentFrame_SetBranchTexture(i, j, TALENT_BRANCH_TEXTURECOORDS["down"][node.down], xOffset, yOffset - TALENT_BUTTON_SIZE + 1, TalentFrame);
end
if ( node.left ~= 0 ) then
TalentFrame_SetBranchTexture(i, j, TALENT_BRANCH_TEXTURECOORDS["left"][node.left], xOffset - TALENT_BUTTON_SIZE, yOffset, TalentFrame);
end
if ( node.right ~= 0 ) then
-- See if any connecting branches are gray and if so color them gray
tempNode = TalentFrame.TALENT_BRANCH_ARRAY[i][j+1];
if ( tempNode.left ~= 0 and tempNode.down < 0 ) then
TalentFrame_SetBranchTexture(i, j-1, TALENT_BRANCH_TEXTURECOORDS["right"][tempNode.down], xOffset + TALENT_BUTTON_SIZE, yOffset, TalentFrame);
else
TalentFrame_SetBranchTexture(i, j, TALENT_BRANCH_TEXTURECOORDS["right"][node.right], xOffset + TALENT_BUTTON_SIZE + 1, yOffset, TalentFrame);
end

end
-- Draw arrows
if ( node.rightArrow ~= 0 ) then
TalentFrame_SetArrowTexture(i, j, TALENT_ARROW_TEXTURECOORDS["right"][node.rightArrow], xOffset + TALENT_BUTTON_SIZE/2 + 5, yOffset, TalentFrame);
end
if ( node.leftArrow ~= 0 ) then
TalentFrame_SetArrowTexture(i, j, TALENT_ARROW_TEXTURECOORDS["left"][node.leftArrow], xOffset - TALENT_BUTTON_SIZE/2 - 5, yOffset, TalentFrame);
end
if ( node.topArrow ~= 0 ) then
TalentFrame_SetArrowTexture(i, j, TALENT_ARROW_TEXTURECOORDS["top"][node.topArrow], xOffset, yOffset + TALENT_BUTTON_SIZE/2 + 5, TalentFrame);
end
else
-- Doesn't have a talent
if ( node.up ~= 0 and node.left ~= 0 and node.right ~= 0 ) then
TalentFrame_SetBranchTexture(i, j, TALENT_BRANCH_TEXTURECOORDS["tup"][node.up], xOffset , yOffset, TalentFrame);
elseif ( node.down ~= 0 and node.left ~= 0 and node.right ~= 0 ) then
TalentFrame_SetBranchTexture(i, j, TALENT_BRANCH_TEXTURECOORDS["tdown"][node.down], xOffset , yOffset, TalentFrame);
elseif ( node.left ~= 0 and node.down ~= 0 ) then
TalentFrame_SetBranchTexture(i, j, TALENT_BRANCH_TEXTURECOORDS["topright"][node.left], xOffset , yOffset, TalentFrame);
TalentFrame_SetBranchTexture(i, j, TALENT_BRANCH_TEXTURECOORDS["down"][node.down], xOffset , yOffset - 32, TalentFrame);
elseif ( node.left ~= 0 and node.up ~= 0 ) then
TalentFrame_SetBranchTexture(i, j, TALENT_BRANCH_TEXTURECOORDS["bottomright"][node.left], xOffset , yOffset, TalentFrame);
elseif ( node.left ~= 0 and node.right ~= 0 ) then
TalentFrame_SetBranchTexture(i, j, TALENT_BRANCH_TEXTURECOORDS["right"][node.right], xOffset + TALENT_BUTTON_SIZE, yOffset, TalentFrame);
TalentFrame_SetBranchTexture(i, j, TALENT_BRANCH_TEXTURECOORDS["left"][node.left], xOffset + 1, yOffset, TalentFrame);
elseif ( node.right ~= 0 and node.down ~= 0 ) then
TalentFrame_SetBranchTexture(i, j, TALENT_BRANCH_TEXTURECOORDS["topleft"][node.right], xOffset , yOffset, TalentFrame);
TalentFrame_SetBranchTexture(i, j, TALENT_BRANCH_TEXTURECOORDS["down"][node.down], xOffset , yOffset - 32, TalentFrame);
elseif ( node.right ~= 0 and node.up ~= 0 ) then
TalentFrame_SetBranchTexture(i, j, TALENT_BRANCH_TEXTURECOORDS["bottomleft"][node.right], xOffset , yOffset, TalentFrame);
elseif ( node.up ~= 0 and node.down ~= 0 ) then
TalentFrame_SetBranchTexture(i, j, TALENT_BRANCH_TEXTURECOORDS["up"][node.up], xOffset , yOffset, TalentFrame);
TalentFrame_SetBranchTexture(i, j, TALENT_BRANCH_TEXTURECOORDS["down"][node.down], xOffset , yOffset - 32, TalentFrame);
ignoreUp = 1;
end
end
end
end
-- Hide any unused branch textures
for i=TalentFrame_GetBranchTextureCount(TalentFrame), MAX_NUM_BRANCH_TEXTURES do
_G[talentFrameName.."Branch"..i]:Hide();
end
-- Hide and unused arrowl textures
for i=TalentFrame_GetArrowTextureCount(TalentFrame), MAX_NUM_ARROW_TEXTURES do
_G[talentFrameName.."Arrow"..i]:Hide();
end
end

function TalentFrame_SetArrowTexture(tier, column, texCoords, xOffset, yOffset, TalentFrame)
local talentFrameName = TalentFrame:GetName();
local arrowTexture = TalentFrame_GetArrowTexture(TalentFrame);
arrowTexture:SetTexCoord(texCoords[1], texCoords[2], texCoords[3], texCoords[4]);
arrowTexture:SetPoint("TOPLEFT", talentFrameName.."ArrowFrame", "TOPLEFT", xOffset, yOffset);
end

function TalentFrame_SetBranchTexture(tier, column, texCoords, xOffset, yOffset, TalentFrame)
local talentFrameName = TalentFrame:GetName();
local branchTexture = TalentFrame_GetBranchTexture(TalentFrame);
branchTexture:SetTexCoord(texCoords[1], texCoords[2], texCoords[3], texCoords[4]);
branchTexture:SetPoint("TOPLEFT", talentFrameName.."ScrollChildFrame", "TOPLEFT", xOffset, yOffset);
end

function TalentFrame_GetArrowTexture(TalentFrame)
local talentFrameName = TalentFrame:GetName();
local arrowTexture = _G[talentFrameName.."Arrow"..TalentFrame.arrowIndex];
TalentFrame.arrowIndex = TalentFrame.arrowIndex + 1;
if ( not arrowTexture ) then
message("Not enough arrow textures");
else
arrowTexture:Show();
return arrowTexture;
end
end

function TalentFrame_GetBranchTexture(TalentFrame)
local talentFrameName = TalentFrame:GetName();
local branchTexture = _G[talentFrameName.."Branch"..TalentFrame.textureIndex];
TalentFrame.textureIndex = TalentFrame.textureIndex + 1;
if ( not branchTexture ) then
--branchTexture = CreateTexture("TalentFrameBranch"..TalentFrame.textureIndex);
message("Not enough branch textures");
else
branchTexture:Show();
return branchTexture;
end
end

function TalentFrame_ResetArrowTextureCount(TalentFrame)
TalentFrame.arrowIndex = 1;
end

function TalentFrame_ResetBranchTextureCount(TalentFrame)
TalentFrame.textureIndex = 1;
end

function TalentFrame_GetArrowTextureCount(TalentFrame)
return TalentFrame.arrowIndex;
end

function TalentFrame_GetBranchTextureCount(TalentFrame)
return TalentFrame.textureIndex;
end

function TalentFrame_SetPrereqs(TalentFrame, buttonTier, buttonColumn, forceDesaturated, tierUnlocked, preview, ...)
local requirementsMet = tierUnlocked and not forceDesaturated;
for i=1, select("#", ...), 4 do
local tier, column, isLearnable, isPreviewLearnable = select(i, ...);
if ( forceDesaturated or
(preview and not isPreviewLearnable) or
(not preview and not isLearnable) ) then
requirementsMet = nil;
end
TalentFrame_DrawLines(buttonTier, buttonColumn, tier, column, requirementsMet, TalentFrame);
end
return requirementsMet;
end


function TalentFrame_DrawLines(buttonTier, buttonColumn, tier, column, requirementsMet, TalentFrame)
if ( requirementsMet ) then
requirementsMet = 1;
else
requirementsMet = -1;
end

-- Check to see if are in the same column
if ( buttonColumn == column ) then
-- Check for blocking talents
if ( (buttonTier - tier) > 1 ) then
-- If more than one tier difference
for i=tier + 1, buttonTier - 1 do
if ( TalentFrame.TALENT_BRANCH_ARRAY[i][buttonColumn].id ) then
-- If there's an id, there's a blocker
message("Error this layout is blocked vertically "..TalentFrame.TALENT_BRANCH_ARRAY[buttonTier][i].id);
return;
end
end
end

-- Draw the lines
for i=tier, buttonTier - 1 do
TalentFrame.TALENT_BRANCH_ARRAY[i][buttonColumn].down = requirementsMet;
if ( (i + 1) <= (buttonTier - 1) ) then
TalentFrame.TALENT_BRANCH_ARRAY[i + 1][buttonColumn].up = requirementsMet;
end
end

-- Set the arrow
TalentFrame.TALENT_BRANCH_ARRAY[buttonTier][buttonColumn].topArrow = requirementsMet;
return;
end
-- Check to see if they're in the same tier
if ( buttonTier == tier ) then
local left = min(buttonColumn, column);
local right = max(buttonColumn, column);

-- See if the distance is greater than one space
if ( (right - left) > 1 ) then
-- Check for blocking talents
for i=left + 1, right - 1 do
if ( TalentFrame.TALENT_BRANCH_ARRAY[tier][i].id ) then
-- If there's an id, there's a blocker
message("there's a blocker "..tier.." "..i);
return;
end
end
end
-- If we get here then we're in the clear
for i=left, right - 1 do
TalentFrame.TALENT_BRANCH_ARRAY[tier][i].right = requirementsMet;
TalentFrame.TALENT_BRANCH_ARRAY[tier][i+1].left = requirementsMet;
end
-- Determine where the arrow goes
if ( buttonColumn < column ) then
TalentFrame.TALENT_BRANCH_ARRAY[buttonTier][buttonColumn].rightArrow = requirementsMet;
else
TalentFrame.TALENT_BRANCH_ARRAY[buttonTier][buttonColumn].leftArrow = requirementsMet;
end
return;
end
-- Now we know the prereq is diagonal from us
local left = min(buttonColumn, column);
local right = max(buttonColumn, column);
-- Don't check the location of the current button
if ( left == column ) then
left = left + 1;
else
right = right - 1;
end
-- Check for blocking talents
local blocked = nil;
for i=left, right do
if ( TalentFrame.TALENT_BRANCH_ARRAY[tier][i].id ) then
-- If there's an id, there's a blocker
blocked = 1;
end
end
left = min(buttonColumn, column);
right = max(buttonColumn, column);
if ( not blocked ) then
TalentFrame.TALENT_BRANCH_ARRAY[tier][buttonColumn].down = requirementsMet;
TalentFrame.TALENT_BRANCH_ARRAY[buttonTier][buttonColumn].up = requirementsMet;

for i=tier, buttonTier - 1 do
TalentFrame.TALENT_BRANCH_ARRAY[i][buttonColumn].down = requirementsMet;
TalentFrame.TALENT_BRANCH_ARRAY[i + 1][buttonColumn].up = requirementsMet;
end

for i=left, right - 1 do
TalentFrame.TALENT_BRANCH_ARRAY[tier][i].right = requirementsMet;
TalentFrame.TALENT_BRANCH_ARRAY[tier][i+1].left = requirementsMet;
end
-- Place the arrow
TalentFrame.TALENT_BRANCH_ARRAY[buttonTier][buttonColumn].topArrow = requirementsMet;
return;
end
-- If we're here then we were blocked trying to go vertically first so we have to go over first, then up
if ( left == buttonColumn ) then
left = left + 1;
else
right = right - 1;
end
-- Check for blocking talents
for i=left, right do
if ( TalentFrame.TALENT_BRANCH_ARRAY[buttonTier][i].id ) then
-- If there's an id, then throw an error
message("Error, this layout is undrawable "..TalentFrame.TALENT_BRANCH_ARRAY[buttonTier][i].id);
return;
end
end
-- If we're here we can draw the line
left = min(buttonColumn, column);
right = max(buttonColumn, column);
--TALENT_BRANCH_ARRAY[tier][column].down = requirementsMet;
--TALENT_BRANCH_ARRAY[buttonTier][column].up = requirementsMet;

for i=tier, buttonTier-1 do
TalentFrame.TALENT_BRANCH_ARRAY[i][column].up = requirementsMet;
TalentFrame.TALENT_BRANCH_ARRAY[i+1][column].down = requirementsMet;
end

-- Determine where the arrow goes
if ( buttonColumn < column ) then
TalentFrame.TALENT_BRANCH_ARRAY[buttonTier][buttonColumn].rightArrow =  requirementsMet;
else
TalentFrame.TALENT_BRANCH_ARRAY[buttonTier][buttonColumn].leftArrow =  requirementsMet;
end
end



-- Helper functions

function TalentFrame_UpdateTalentPoints(TalentFrame)
local talentPoints = GetUnspentTalentPoints(TalentFrame.inspect, TalentFrame.pet, TalentFrame.talentGroup);
local unspentPoints = talentPoints - GetGroupPreviewTalentPointsSpent(TalentFrame.pet, TalentFrame.talentGroup);
local talentFrameName = TalentFrame:GetName();
_G[talentFrameName.."TalentPointsText"]:SetFormattedText(UNSPENT_TALENT_POINTS, HIGHLIGHT_FONT_COLOR_CODE..unspentPoints..FONT_COLOR_CODE_CLOSE);
TalentFrame_ResetBranches(TalentFrame);
_G[talentFrameName.."ScrollFrameScrollBarScrollDownButton"]:SetScript("OnClick", _G[talentFrameName.."DownArrow_OnClick"]);
return unspentPoints;
end

function SetTalentButtonLocation(button, tier, column)
column = ((column - 1) * 63) + INITIAL_TALENT_OFFSET_X;
tier = -((tier - 1) * 63) - INITIAL_TALENT_OFFSET_Y;
button:SetPoint("TOPLEFT", button:GetParent(), "TOPLEFT", column, tier);
end

function TalentFrame_ResetBranches(TalentFrame)
for i=1, MAX_NUM_TALENT_TIERS do
for j=1, NUM_TALENT_COLUMNS do
TalentFrame.TALENT_BRANCH_ARRAY[i][j].id = nil;
TalentFrame.TALENT_BRANCH_ARRAY[i][j].up = 0;
TalentFrame.TALENT_BRANCH_ARRAY[i][j].down = 0;
TalentFrame.TALENT_BRANCH_ARRAY[i][j].left = 0;
TalentFrame.TALENT_BRANCH_ARRAY[i][j].right = 0;
TalentFrame.TALENT_BRANCH_ARRAY[i][j].rightArrow = 0;
TalentFrame.TALENT_BRANCH_ARRAY[i][j].leftArrow = 0;
TalentFrame.TALENT_BRANCH_ARRAY[i][j].topArrow = 0;
end
end
end

local sortedTabPointsSpentBuf = { };
function TalentFrame_UpdateSpecInfoCache(cache, inspect, pet, talentGroup)
-- initialize some cache info
cache.primaryTabIndex = 0;
cache.totalPointsSpent = 0;

local preview = GetCVarBool("previewTalents");

local highPointsSpent = 0;
local highPointsSpentIndex;
local lowPointsSpent = huge;
local lowPointsSpentIndex;

local numTabs = GetNumTalentTabs(inspect, pet);
cache.numTabs = numTabs;
for i = 1, MAX_TALENT_TABS do
cache[i] = cache[i] or { };
if ( i <= numTabs ) then
local name, icon, pointsSpent, background, previewPointsSpent = GetTalentTabInfo(i, inspect, pet, talentGroup);

local displayPointsSpent = pointsSpent + previewPointsSpent;

-- cache the info we care about
cache[i].name = name;
cache[i].pointsSpent = displayPointsSpent;
cache[i].icon = icon;

-- update total points
cache.totalPointsSpent = cache.totalPointsSpent + displayPointsSpent;

-- update the high and low points spent info
if ( displayPointsSpent > highPointsSpent ) then
highPointsSpent = displayPointsSpent;
highPointsSpentIndex = i;
end
if ( displayPointsSpent < lowPointsSpent ) then
lowPointsSpent = displayPointsSpent;
lowPointsSpentIndex = i;
end

-- initialize the points spent buffer element
sortedTabPointsSpentBuf[i] = 0;
-- insert the points spent into our buffer in ascending order
local insertIndex = i;
for j = 1, i, 1 do
local currPointsSpent = sortedTabPointsSpentBuf[j];
if ( currPointsSpent > displayPointsSpent ) then
insertIndex = j;
break;
end
end
for j = i, insertIndex + 1, -1 do
sortedTabPointsSpentBuf[j] = sortedTabPointsSpentBuf[j - 1];
end
sortedTabPointsSpentBuf[insertIndex] = displayPointsSpent;
else
cache[i].name = nil;
end
end

if ( highPointsSpentIndex and lowPointsSpentIndex ) then
-- now that our points spent buffer is filled, we can compute the mid points spent
local midPointsSpentIndex = rshift(numTabs, 1) + 1;
local midPointsSpent = sortedTabPointsSpentBuf[midPointsSpentIndex];
-- now let's use our crazy formula to determine which tab is the primary one
if ( 3*(midPointsSpent-lowPointsSpent) < 2*(highPointsSpent-lowPointsSpent) ) then
cache.primaryTabIndex = highPointsSpentIndex;
end
end
end



--- End code ---
Or it's need upgrade Core or DBC, but i don't know where :(( Please help

glararan:
Hmm i reworked it and now i have four collums ...see
[attachment=1:qjqujeto]WoWScrnShot_042311_142453.jpg[/attachment:qjqujeto]

I create four talent tree for Druid and Hunter + Priest but i don't know why i have this screen
[attachment=0:qjqujeto]WoWScrnShot_042311_142434.jpg[/attachment:qjqujeto]

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version