lotrointerface.com
Search Downloads


Go Back   LoTROInterface > LotRO Stand-Alone Plugins > Crafting

Category: CraftingRecipe Tracker v2
Interface Information
Download
How do I install this? (FAQ)
Name: Recipe Tracker v2   Popular!
Author:
Date: 02-03-2021 09:40 AM
Size: 39.56 Kb
Version: 2.0.4
Rate File: 5 out of 5 with 4 votes  
Pictures
Click to enlarge 

Views: 0
Size: 298.03 Kb
Dimensions: 701 x 497
RecipeTracker V2 Interface
 
Description
Scarlim is the original author of this plugin. Unfortunately, he has not updated since 2013, nor has he made it possible for others to submit updates on the original ([url="https://www.lotrointerface.com/downloads/info780-RecipeTracker.html"]RecipeTracker/URL]) page.

Due to the API, tier names after Eastemnet were not being displayed. This has now been fixed.

If you still have the original Recipe Tracker installed, please uninstall it prior to installing this update. Conflicts will arise if both are running.

--------------------------------------------------------------------------------------
RecipeTracker will automatically track all of your known recipes on each of your characters on a server. It allows any characters crafting list to be viewed instantly, without needing to log out and in again. It also includes a quick recipe search which will tell instantly which characters can use that recipe that just dropped, and which characters already know it.

Features:
Tracks/views all known recipes on all alts
Tracks crafting proficiency/mastery status and experience for all alts
Minimized plugin icon (disable from options if you don't want it)
Recipe quick search - just drag a recipe to the quickslot and instantly see which character already know it, and which characters need it. Or search by simply typing part of the recipe name.
Shows ingredients required for a recipe, even for recipes known only by alts.

Commands:
/recipetracker options
/recipetracker show
/recipetracker hide
/recipetracker toggle

Limitations:
There's a bug in the LUA API which means that when you learn a new recipe it won't show up in the list. You'll have to log out and then log in again in order for the new recipe to appear in the characters list.
Only the known recipes can be tracked, there is no way to see a list of the unknown recipes, as the LUA API doesn't show this information yet.
The quickslot search is a bit primitive since it is based only on the recipe name. Let me know if it fails on any recipes and I'll patch it. Also there's no way in the API to tell for what profession a recipe is intended, so the list of characters just says 'All characters' when an unknown recipe is found.

Changelist:

2.0 - 20/11/20
  • Corrected a limitation of the API to correctly display crafting tier 9-13 names (Westemnet - Minas Ithil)
2.0.1 - 21/11/20
  • Added RecipeTrackerv2.plugincompendium
2.0.2 - 03/02/21
  • Applied corrections to the German translation w/ thanks to Dyri
2.0.3 - 03/02/21
  • Applied corrections to the French translation w/ thanks to homeopatix
2.0.4 - 03/02/21
  • Corrected a Tier typo from "Minas Ithal' to the correct 'Minas Ithil'. Thank you to Dandee for spotting that.
Archive List (Old Versions)
File Name
Version
Size
Author
Date
2.0.1
37.26 Kb
Bowcosid
11-21-2020 09:55 AM
File Statistics
User Rating:
5 out of 5 with 4 votes
Downloads: 34507
Views: 87267
Favorites: 24
Uploaded By:
 
Last Modified: N/A

View Pictures. Download Now! Post A Comment


Post A Reply
Author Comments Comment Options
Unread 09-12-2024, 08:08 AM  
Drono
The Undying
Interface Author - Click to view interfaces

Forum posts: 47
File comments: 110
Uploads: 1
Re: Re: Re: Re: Re: Failure with fourth profession

Quote:
Originally Posted by Dandee
Is there anyone who can say something along the lines of, "open the file named <name>.lua, select everything and delete it, and then copy&paste the code I put below and save"?
some of the generated +- lines in the original comment does not make sense to me, but i made similar changes and uploaded here https://github.com/Dromo/RecipeTracker

Quote:
Originally Posted by Largo
However, the mod still has other problems, like CTDs when using the command line to try to open the option window.
Also fixed this issue there.
Drono is offline Report comment to moderator   Reply With Quote Reply With Quote
Unread 09-02-2024, 07:13 PM  
Largo
The Wary
 
Largo's Avatar

Forum posts: 0
File comments: 6
Uploads: 0
Re: Re: Re: Re: Re: Failure with fourth profession

Quote:
Tried this, spent 15-20 minutes trying to do everything that was listed, and the addon is all forked up now. I know too little of lua to have any idea what the hell I'm doing.

Is there anyone who can say something along the lines of, "open the file named <name>.lua, select everything and delete it, and then copy&paste the code I put below and save"?
It seems that grammar software mangled the code Nyaku posted. If you compare what Nyaku says should be removed to what is actually in the files, lines like
Code:
table.insert(RecipeList, recipeData)
got changed to
Code:
table. Insert(RecipeList, recipeData)
That space after the dot completely changes what the code does. I went through and removed all the spaces after the dots and I did get it to work. However, the mod still has other problems, like CTDs when using the command line to try to open the option window. I spent a few hours trying to chase that down, since it indicates something in the code is very wrong, but there are no comments in the code and it is very fragmented and spaghetti-like. It might just need a re-write at this point.
Largo is offline Report comment to moderator   Reply With Quote Reply With Quote
Unread 08-15-2024, 07:49 AM  
Dandee
The Wary
 
Dandee's Avatar

Forum posts: 0
File comments: 23
Uploads: 0
Re: Re: Re: Re: Failure with fourth profession

Quote:
If you want to make the changes manually, here's basically how it works:
Tried this, spent 15-20 minutes trying to do everything that was listed, and the addon is all forked up now. I know too little of lua to have any idea what the hell I'm doing.

Is there anyone who can say something along the lines of, "open the file named <name>.lua, select everything and delete it, and then copy&paste the code I put below and save"?
Dandee is offline Report comment to moderator   Reply With Quote Reply With Quote
Unread 08-10-2024, 09:38 AM  
jbusnengo
The Wary

Forum posts: 0
File comments: 28
Uploads: 0
Re: Re: Re: Failure with fourth profession

Quote:
How or where we add this code? It's as simple to create a new random named lua file with this code?
No. It's not a new file. It's telling you what changes to make to existing files. I'm sure there's a tool that can do it for you automatically, but I'm not familiar with it.

If you want to make the changes manually, here's basically how it works:
  • The lines beginning "+++" show you what file the following changes should be made to.
  • The lines beginning "@@" show you where in that file the changes should be made. The numbers before the comma are line numbers. I'm not sure what the numbers after the commas are.
  • The first couple of lines after that, that have a space in the first column, are lines that don't need to change, to help you find the relevant part of the file.
  • Lines with a "-" in the first column should be deleted.
  • Lines with a "+" in the first column should be inserted.
jbusnengo is offline Report comment to moderator   Reply With Quote Reply With Quote
Unread 08-08-2024, 08:48 AM  
Nyaku
The Wary

Forum posts: 0
File comments: 3
Uploads: 0
Question Re: Re: Failure with fourth profession

The following patch file updates 2.0.4 to work with update 41 by incorporating the changes suggested by @Nyry, removing vocation checks, and adding the optional fourth profession slot.

Code:
--- Globals.lua	Wed Feb  3 07:27:39 2021
+++ Globals.lua	Wed Jul 31 15:17:30 2024
@@ -65,6 +65,8 @@
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Doomfold] = "Unheilskluft";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Ironfold] = "Eisenbruch";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.MinasIthil] = "Minis Ithil";
+		Strings.TierNames[Turbine.Gameplay.CraftTier.Gundabad] = "Gundabad";
+		Strings.TierNames[Turbine.Gameplay.CraftTier.Umbar] = "Umbar";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Tailor] = "Schneider";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Woodworker] = "Drechsler";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Farmer] = "Bauer";
@@ -129,6 +131,8 @@
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Doomfold] = "Folde du Destin";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Ironfold] = "Crevasse de fer";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.MinasIthil] = "Minas Ithil";
+		Strings.TierNames[Turbine.Gameplay.CraftTier.Gundabad] = "Gundabad";
+		Strings.TierNames[Turbine.Gameplay.CraftTier.Umbar] = "Umbar";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Tailor] = "Tailleur";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Woodworker] = "Menuisier";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Farmer] = "Fermier";
@@ -168,6 +172,8 @@
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Doomfold] = "Doomfold";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Ironfold] = "Ironfold";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.MinasIthil] = "Minas Ithil";
+		Strings.TierNames[Turbine.Gameplay.CraftTier.Gundabad] = "Gundabad";
+		Strings.TierNames[Turbine.Gameplay.CraftTier.Umbar] = "Umbar";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Tailor] = "Tailor";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Woodworker] = "Woodworker";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Farmer] = "Farmer";
--- Main.lua	Wed Feb  3 07:10:01 2021
+++ Main.lua	Wed Jul 31 15:15:17 2024
@@ -31,6 +31,8 @@
 Turbine.Gameplay.CraftTier.Doomfold = 11;
 Turbine.Gameplay.CraftTier.Ironfold = 12;
 Turbine.Gameplay.CraftTier.MinasIthil = 13;
+Turbine.Gameplay.CraftTier.Gundabad = 14;
+Turbine.Gameplay.CraftTier.Umbar = 15;
 
 
 
--- MainWindow.lua	Wed Feb  3 07:10:01 2021
+++ MainWindow.lua	Fri Aug  2 13:44:29 2024
@@ -100,8 +100,8 @@
 	end
 
 	MainWindow.professionButtons = {};
-	MainWindow.professionButtonIndices = { 0, 0, 0 };
-	for i = 1, 3 do
+	MainWindow.professionButtonIndices = { 0, 0, 0, 0 };
+	for i = 1, 4 do
 		local professionButton = Turbine.UI.Lotro.Button();
 		professionButton:SetParent(MainWindow);
 		professionButton:SetPosition(10+(i-1)*(professionButtonWidth+10), professionButtonTop);
@@ -436,19 +436,16 @@
 function UpdateCharacter()
 	local character = CharacterList[CurrentCharacter];
 
-	if character. Vocation then
-		local buttonIndex = 1;
-		for profession, professionData in pairs(character. Professions) do
-			MainWindow.professionButtons[buttonIndex]:SetVisible(true);
-			MainWindow.professionButtons[buttonIndex]:SetText(GetProfessionName(profession));
-			MainWindow.professionButtonIndices[buttonIndex] = profession;
-			buttonIndex = buttonIndex + 1;
-		end
-	else
-		for i = 1, 3 do
-			MainWindow.professionButtons[i]:SetVisible(false);
-		end
-		MainWindow.professionButtonIndices = { 0, 0, 0 }
+	for i = 1, 4 do
+		MainWindow.professionButtons[i]:SetVisible(false);
+	end
+	MainWindow.professionButtonIndices = { 0, 0, 0, 0 }
+	local buttonIndex = 1;
+	for profession, professionData in pairs(character. Professions) do
+		MainWindow.professionButtons[buttonIndex]:SetVisible(true);
+		MainWindow.professionButtons[buttonIndex]:SetText(GetProfessionName(profession));
+		MainWindow.professionButtonIndices[buttonIndex] = profession;
+		buttonIndex = buttonIndex + 1;
 	end
 
 	MainWindow.refreshIcon:SetVisible(CurrentCharacter == LocalPlayerCharacter);
@@ -459,7 +456,7 @@
 
 function SetCurrentProfession(profession)
 	-- Update profession button status
-	for i = 1, 3 do
+	for i = 1, 4 do
 		if i == profession then
 			MainWindow.professionButtons[i]:SetEnabled(false);
 		else
--- Recipes.lua	Wed Feb  3 07:10:01 2021
+++ Recipes.lua	Fri Aug  2 13:44:32 2024
@@ -41,91 +41,87 @@
 	local character = CharacterList[LocalPlayerCharacter];
 
 	local playerAttr = player:GetAttributes();
-	character.vocation = playerAttr:GetVocation();
-	character. Professions = nil;
 
-	if character. Vocation then
-		character. Professions = {};
+	character. Professions = {};
 
-		for k,v in pairs(Turbine.Gameplay.Profession) do
-			local professionInfo = playerAttr:GetProfessionInfo(v);
+	for k,v in pairs(Turbine.Gameplay.Profession) do
+		local professionInfo = playerAttr:GetProfessionInfo(v);
 
-			if professionInfo then
-				local professionData = {};
-			
-				professionData.proficiencyLevel = professionInfo:GetProficiencyLevel();
-				professionData.masteryLevel = professionInfo:GetMasteryLevel();
-
-				professionData.proficiencyExp = professionInfo:GetProficiencyExperience();
-				professionData.proficiencyExpTarget = professionInfo:GetProficiencyExperienceTarget();
-				professionData.masteryExp = professionInfo:GetMasteryExperience();
-				professionData.masteryExpTarget = professionInfo:GetMasteryExperienceTarget();
-
-				professionData.recipes = {};
-				for i = 1, professionInfo:GetRecipeCount() do
-					local recipe = professionInfo:GetRecipe(i);
-					local recipeName = recipe:GetName();
-					local recipeIndex = RecipeHash[recipeName];
-					local recipeData = nil;
-					if recipeIndex then
-						recipeData = RecipeList[recipeIndex];
+		if professionInfo then
+			local professionData = {};
+		
+			professionData.proficiencyLevel = professionInfo:GetProficiencyLevel();
+			professionData.masteryLevel = professionInfo:GetMasteryLevel();
+
+			professionData.proficiencyExp = professionInfo:GetProficiencyExperience();
+			professionData.proficiencyExpTarget = professionInfo:GetProficiencyExperienceTarget();
+			professionData.masteryExp = professionInfo:GetMasteryExperience();
+			professionData.masteryExpTarget = professionInfo:GetMasteryExperienceTarget();
+
+			professionData.recipes = {};
+			for i = 1, professionInfo:GetRecipeCount() do
+				local recipe = professionInfo:GetRecipe(i);
+				local recipeName = recipe:GetName();
+				local recipeIndex = RecipeHash[recipeName];
+				local recipeData = nil;
+				if recipeIndex then
+					recipeData = RecipeList[recipeIndex];
+				else
+					recipeData = {};
+					table. Insert(RecipeList, recipeData);
+					recipeIndex = #RecipeList;
+					RecipeHash[recipeName] = recipeIndex;
+				end
+
+				recipeData.name = recipeName;
+				recipeData.category = recipe:GetCategoryName();
+				recipeData.tier = recipe:GetTier();
+
+				local itemInfo = recipe:GetResultItemInfo();
+				if includeItemInfo then
+					recipeData.resultItemInfo = itemInfo;
+				else
+					recipeData.resultItemInfo = nil;
+				end
+				recipeData.resultIcon = itemInfo:GetIconImageID();
+				recipeData.resultIconBack = itemInfo:GetBackgroundImageID();
+
+				recipeData.ingredients = {};
+
+				for j = 1, recipe:GetIngredientCount() do
+					local ingredient = recipe:GetIngredient(j);
+					local ingredientInfo = ingredient:GetItemInfo();
+					local ingredientName = ingredientInfo:GetName();
+
+					local ingredientIndex = IngredientHash[ingredientName];
+					local ingredientData = nil;
+					if ingredientIndex then
+						ingredientData = IngredientList[ingredientIndex];
 					else
-						recipeData = {};
-						table. Insert(RecipeList, recipeData);
-						recipeIndex = #RecipeList;
-						RecipeHash[recipeName] = recipeIndex;
+						ingredientData = {};
+						table. Insert(IngredientList, ingredientData);
+						ingredientIndex = #IngredientList;
+						IngredientHash[ingredientName] = ingredientIndex;
 					end
 
-					recipeData.name = recipeName;
-					recipeData.category = recipe:GetCategoryName();
-					recipeData.tier = recipe:GetTier();
-
-					local itemInfo = recipe:GetResultItemInfo();
+					ingredientData.name = ingredientName;
 					if includeItemInfo then
-						recipeData.resultItemInfo = itemInfo;
+						ingredientData.itemInfo = ingredientInfo;
 					else
-						recipeData.resultItemInfo = nil;
+						ingredientData.itemInfo = nil;
 					end
-					recipeData.resultIcon = itemInfo:GetIconImageID();
-					recipeData.resultIconBack = itemInfo:GetBackgroundImageID();
-
-					recipeData.ingredients = {};
-
-					for j = 1, recipe:GetIngredientCount() do
-						local ingredient = recipe:GetIngredient(j);
-						local ingredientInfo = ingredient:GetItemInfo();
-						local ingredientName = ingredientInfo:GetName();
-
-						local ingredientIndex = IngredientHash[ingredientName];
-						local ingredientData = nil;
-						if ingredientIndex then
-							ingredientData = IngredientList[ingredientIndex];
-						else
-							ingredientData = {};
-							table. Insert(IngredientList, ingredientData);
-							ingredientIndex = #IngredientList;
-							IngredientHash[ingredientName] = ingredientIndex;
-						end
-
-						ingredientData.name = ingredientName;
-						if includeItemInfo then
-							ingredientData.itemInfo = ingredientInfo;
-						else
-							ingredientData.itemInfo = nil;
-						end
-						ingredientData.icon = ingredientInfo:GetIconImageID();
-						ingredientData.iconBack = ingredientInfo:GetBackgroundImageID();
+					ingredientData.icon = ingredientInfo:GetIconImageID();
+					ingredientData.iconBack = ingredientInfo:GetBackgroundImageID();
 
-						local quantity = ingredient:GetRequiredQuantity();
+					local quantity = ingredient:GetRequiredQuantity();
 
-						recipeData.ingredients[ingredientIndex] = quantity;
-					end
-
-					professionData.recipes[recipeIndex] = true;
+					recipeData.ingredients[ingredientIndex] = quantity;
 				end
 
-				character. Professions[v] = professionData;
+				professionData.recipes[recipeIndex] = true;
 			end
+
+			character. Professions[v] = professionData;
 		end
 	end
 
@@ -137,15 +133,6 @@
 
 function GetProfessionName(profession)
 	return Strings.ProfessionNames[profession];
-end
-
-function GetVocationName(vocation)
-	for k, v in pairs(Turbine.Gameplay.Vocation) do
-		if v == vocation then
-			return k;
-		end
-	end
-	return "Invalid vocation";
 end
 
 function CreateRecipeTree(recipes)
How or where we add this code? It's as simple to create a new random named lua file with this code?
Nyaku is offline Report comment to moderator   Reply With Quote Reply With Quote
Unread 08-07-2024, 08:49 PM  
jbusnengo
The Wary

Forum posts: 0
File comments: 28
Uploads: 0
Re: Re: Failure with fourth profession

Quote:
The following patch file updates 2.0.4 to work with update 41 by incorporating the changes suggested by @Nyry, removing vocation checks, and adding the optional fourth profession slot.
It's not exactly pretty, but if you also want the four buttons to fit into the same space that the three buttons originally did, you can change two lines of MainWindow.lua:

On line 10, change
Code:
local professionButtonWidth = 100;
to
Code:
local professionButtonWidth = 79;
and on line 107, change
Code:
professionButton:SetPosition(10+(i-1)*(professionButtonWidth+10), professionButtonTop);
to
Code:
professionButton:SetPosition(10+(i-1)*(professionButtonWidth+1), professionButtonTop);
I'm sure if someone wanted to mess further with the code, they could come up with something that looks better.
jbusnengo is offline Report comment to moderator   Reply With Quote Reply With Quote
Unread 08-01-2024, 01:25 PM  
bsmorgan
The Undefeated

Forum posts: 7
File comments: 72
Uploads: 0
Re: Failure with fourth profession

The following patch file updates 2.0.4 to work with update 41 by incorporating the changes suggested by @Nyry, removing vocation checks, and adding the optional fourth profession slot.

Code:
--- Globals.lua	Wed Feb  3 07:27:39 2021
+++ Globals.lua	Wed Jul 31 15:17:30 2024
@@ -65,6 +65,8 @@
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Doomfold] = "Unheilskluft";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Ironfold] = "Eisenbruch";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.MinasIthil] = "Minis Ithil";
+		Strings.TierNames[Turbine.Gameplay.CraftTier.Gundabad] = "Gundabad";
+		Strings.TierNames[Turbine.Gameplay.CraftTier.Umbar] = "Umbar";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Tailor] = "Schneider";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Woodworker] = "Drechsler";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Farmer] = "Bauer";
@@ -129,6 +131,8 @@
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Doomfold] = "Folde du Destin";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Ironfold] = "Crevasse de fer";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.MinasIthil] = "Minas Ithil";
+		Strings.TierNames[Turbine.Gameplay.CraftTier.Gundabad] = "Gundabad";
+		Strings.TierNames[Turbine.Gameplay.CraftTier.Umbar] = "Umbar";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Tailor] = "Tailleur";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Woodworker] = "Menuisier";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Farmer] = "Fermier";
@@ -168,6 +172,8 @@
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Doomfold] = "Doomfold";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Ironfold] = "Ironfold";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.MinasIthil] = "Minas Ithil";
+		Strings.TierNames[Turbine.Gameplay.CraftTier.Gundabad] = "Gundabad";
+		Strings.TierNames[Turbine.Gameplay.CraftTier.Umbar] = "Umbar";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Tailor] = "Tailor";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Woodworker] = "Woodworker";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Farmer] = "Farmer";
--- Main.lua	Wed Feb  3 07:10:01 2021
+++ Main.lua	Wed Jul 31 15:15:17 2024
@@ -31,6 +31,8 @@
 Turbine.Gameplay.CraftTier.Doomfold = 11;
 Turbine.Gameplay.CraftTier.Ironfold = 12;
 Turbine.Gameplay.CraftTier.MinasIthil = 13;
+Turbine.Gameplay.CraftTier.Gundabad = 14;
+Turbine.Gameplay.CraftTier.Umbar = 15;
 
 
 
--- MainWindow.lua	Wed Feb  3 07:10:01 2021
+++ MainWindow.lua	Fri Aug  2 13:44:29 2024
@@ -100,8 +100,8 @@
 	end
 
 	MainWindow.professionButtons = {};
-	MainWindow.professionButtonIndices = { 0, 0, 0 };
-	for i = 1, 3 do
+	MainWindow.professionButtonIndices = { 0, 0, 0, 0 };
+	for i = 1, 4 do
 		local professionButton = Turbine.UI.Lotro.Button();
 		professionButton:SetParent(MainWindow);
 		professionButton:SetPosition(10+(i-1)*(professionButtonWidth+10), professionButtonTop);
@@ -436,19 +436,16 @@
 function UpdateCharacter()
 	local character = CharacterList[CurrentCharacter];
 
-	if character. Vocation then
-		local buttonIndex = 1;
-		for profession, professionData in pairs(character. Professions) do
-			MainWindow.professionButtons[buttonIndex]:SetVisible(true);
-			MainWindow.professionButtons[buttonIndex]:SetText(GetProfessionName(profession));
-			MainWindow.professionButtonIndices[buttonIndex] = profession;
-			buttonIndex = buttonIndex + 1;
-		end
-	else
-		for i = 1, 3 do
-			MainWindow.professionButtons[i]:SetVisible(false);
-		end
-		MainWindow.professionButtonIndices = { 0, 0, 0 }
+	for i = 1, 4 do
+		MainWindow.professionButtons[i]:SetVisible(false);
+	end
+	MainWindow.professionButtonIndices = { 0, 0, 0, 0 }
+	local buttonIndex = 1;
+	for profession, professionData in pairs(character. Professions) do
+		MainWindow.professionButtons[buttonIndex]:SetVisible(true);
+		MainWindow.professionButtons[buttonIndex]:SetText(GetProfessionName(profession));
+		MainWindow.professionButtonIndices[buttonIndex] = profession;
+		buttonIndex = buttonIndex + 1;
 	end
 
 	MainWindow.refreshIcon:SetVisible(CurrentCharacter == LocalPlayerCharacter);
@@ -459,7 +456,7 @@
 
 function SetCurrentProfession(profession)
 	-- Update profession button status
-	for i = 1, 3 do
+	for i = 1, 4 do
 		if i == profession then
 			MainWindow.professionButtons[i]:SetEnabled(false);
 		else
--- Recipes.lua	Wed Feb  3 07:10:01 2021
+++ Recipes.lua	Fri Aug  2 13:44:32 2024
@@ -41,91 +41,87 @@
 	local character = CharacterList[LocalPlayerCharacter];
 
 	local playerAttr = player:GetAttributes();
-	character.vocation = playerAttr:GetVocation();
-	character. Professions = nil;
 
-	if character. Vocation then
-		character. Professions = {};
+	character. Professions = {};
 
-		for k,v in pairs(Turbine.Gameplay.Profession) do
-			local professionInfo = playerAttr:GetProfessionInfo(v);
+	for k,v in pairs(Turbine.Gameplay.Profession) do
+		local professionInfo = playerAttr:GetProfessionInfo(v);
 
-			if professionInfo then
-				local professionData = {};
-			
-				professionData.proficiencyLevel = professionInfo:GetProficiencyLevel();
-				professionData.masteryLevel = professionInfo:GetMasteryLevel();
-
-				professionData.proficiencyExp = professionInfo:GetProficiencyExperience();
-				professionData.proficiencyExpTarget = professionInfo:GetProficiencyExperienceTarget();
-				professionData.masteryExp = professionInfo:GetMasteryExperience();
-				professionData.masteryExpTarget = professionInfo:GetMasteryExperienceTarget();
-
-				professionData.recipes = {};
-				for i = 1, professionInfo:GetRecipeCount() do
-					local recipe = professionInfo:GetRecipe(i);
-					local recipeName = recipe:GetName();
-					local recipeIndex = RecipeHash[recipeName];
-					local recipeData = nil;
-					if recipeIndex then
-						recipeData = RecipeList[recipeIndex];
+		if professionInfo then
+			local professionData = {};
+		
+			professionData.proficiencyLevel = professionInfo:GetProficiencyLevel();
+			professionData.masteryLevel = professionInfo:GetMasteryLevel();
+
+			professionData.proficiencyExp = professionInfo:GetProficiencyExperience();
+			professionData.proficiencyExpTarget = professionInfo:GetProficiencyExperienceTarget();
+			professionData.masteryExp = professionInfo:GetMasteryExperience();
+			professionData.masteryExpTarget = professionInfo:GetMasteryExperienceTarget();
+
+			professionData.recipes = {};
+			for i = 1, professionInfo:GetRecipeCount() do
+				local recipe = professionInfo:GetRecipe(i);
+				local recipeName = recipe:GetName();
+				local recipeIndex = RecipeHash[recipeName];
+				local recipeData = nil;
+				if recipeIndex then
+					recipeData = RecipeList[recipeIndex];
+				else
+					recipeData = {};
+					table. Insert(RecipeList, recipeData);
+					recipeIndex = #RecipeList;
+					RecipeHash[recipeName] = recipeIndex;
+				end
+
+				recipeData.name = recipeName;
+				recipeData.category = recipe:GetCategoryName();
+				recipeData.tier = recipe:GetTier();
+
+				local itemInfo = recipe:GetResultItemInfo();
+				if includeItemInfo then
+					recipeData.resultItemInfo = itemInfo;
+				else
+					recipeData.resultItemInfo = nil;
+				end
+				recipeData.resultIcon = itemInfo:GetIconImageID();
+				recipeData.resultIconBack = itemInfo:GetBackgroundImageID();
+
+				recipeData.ingredients = {};
+
+				for j = 1, recipe:GetIngredientCount() do
+					local ingredient = recipe:GetIngredient(j);
+					local ingredientInfo = ingredient:GetItemInfo();
+					local ingredientName = ingredientInfo:GetName();
+
+					local ingredientIndex = IngredientHash[ingredientName];
+					local ingredientData = nil;
+					if ingredientIndex then
+						ingredientData = IngredientList[ingredientIndex];
 					else
-						recipeData = {};
-						table. Insert(RecipeList, recipeData);
-						recipeIndex = #RecipeList;
-						RecipeHash[recipeName] = recipeIndex;
+						ingredientData = {};
+						table. Insert(IngredientList, ingredientData);
+						ingredientIndex = #IngredientList;
+						IngredientHash[ingredientName] = ingredientIndex;
 					end
 
-					recipeData.name = recipeName;
-					recipeData.category = recipe:GetCategoryName();
-					recipeData.tier = recipe:GetTier();
-
-					local itemInfo = recipe:GetResultItemInfo();
+					ingredientData.name = ingredientName;
 					if includeItemInfo then
-						recipeData.resultItemInfo = itemInfo;
+						ingredientData.itemInfo = ingredientInfo;
 					else
-						recipeData.resultItemInfo = nil;
+						ingredientData.itemInfo = nil;
 					end
-					recipeData.resultIcon = itemInfo:GetIconImageID();
-					recipeData.resultIconBack = itemInfo:GetBackgroundImageID();
-
-					recipeData.ingredients = {};
-
-					for j = 1, recipe:GetIngredientCount() do
-						local ingredient = recipe:GetIngredient(j);
-						local ingredientInfo = ingredient:GetItemInfo();
-						local ingredientName = ingredientInfo:GetName();
-
-						local ingredientIndex = IngredientHash[ingredientName];
-						local ingredientData = nil;
-						if ingredientIndex then
-							ingredientData = IngredientList[ingredientIndex];
-						else
-							ingredientData = {};
-							table. Insert(IngredientList, ingredientData);
-							ingredientIndex = #IngredientList;
-							IngredientHash[ingredientName] = ingredientIndex;
-						end
-
-						ingredientData.name = ingredientName;
-						if includeItemInfo then
-							ingredientData.itemInfo = ingredientInfo;
-						else
-							ingredientData.itemInfo = nil;
-						end
-						ingredientData.icon = ingredientInfo:GetIconImageID();
-						ingredientData.iconBack = ingredientInfo:GetBackgroundImageID();
+					ingredientData.icon = ingredientInfo:GetIconImageID();
+					ingredientData.iconBack = ingredientInfo:GetBackgroundImageID();
 
-						local quantity = ingredient:GetRequiredQuantity();
+					local quantity = ingredient:GetRequiredQuantity();
 
-						recipeData.ingredients[ingredientIndex] = quantity;
-					end
-
-					professionData.recipes[recipeIndex] = true;
+					recipeData.ingredients[ingredientIndex] = quantity;
 				end
 
-				character. Professions[v] = professionData;
+				professionData.recipes[recipeIndex] = true;
 			end
+
+			character. Professions[v] = professionData;
 		end
 	end
 
@@ -137,15 +133,6 @@
 
 function GetProfessionName(profession)
 	return Strings.ProfessionNames[profession];
-end
-
-function GetVocationName(vocation)
-	for k, v in pairs(Turbine.Gameplay.Vocation) do
-		if v == vocation then
-			return k;
-		end
-	end
-	return "Invalid vocation";
 end
 
 function CreateRecipeTree(recipes)

Last edited by bsmorgan : 08-02-2024 at 03:08 PM.
bsmorgan is offline Report comment to moderator   Reply With Quote Reply With Quote
Unread 08-01-2024, 12:55 PM  
bsmorgan
The Undefeated

Forum posts: 7
File comments: 72
Uploads: 0
Failure with fourth profession

Update 41 adds the ability to purchase a fourth profession. After doing this on one character, I get the following error:

[08/01 11:26:41 AM] ...Online\Plugins\Bowcosid\RecipeTracker\MainWindo w.lua:442: attempt to index field '?' (a nil value)

Hopefully, changing some "3"s to "4"s will fix this but I'm not sure which ones to change
bsmorgan is offline Report comment to moderator   Reply With Quote Reply With Quote
Unread 07-03-2024, 04:07 PM  
Nyry
The Wary

Forum posts: 0
File comments: 8
Uploads: 0
Quote:
As of today, Recipe Tracker doesn't load anymore and produces the following line upon login:

...gs Online\Plugins\Bowcosid\RecipeTracker\Recipes.lua: 15: attempt to index field '?' (a nil value)


Seeing how the original author hasn't logged to this website in 2,5 years, I worry the addon is abandoned. Is there anyone who knows lua fu and who'd be willing to pick up this project?
I don't know squat about LUA, but I took a look at the files to see if I could discern the logic, and it's actually easy to update it by yourself :

- go to the folder where you the plugins files are located, it should be in ...\The Lord of the Rings Online\Plugins\Bowcosid\RecipeTracker
- locate the files called Globals.lua and Main.lua and open them in a text editor (I use Notepad++, it's free and the interface makes everything look better than just using the basic notepadd with your OS)

In the file 'Main.lua', you should find a block of text starting by 'Turbine.Gameplay.CraftTier.Apprentice = 1;' with every crafting tier listed. Just add the following line right under the last line that should be talking about Gundabad :
Turbine.Gameplay.CraftTier.Umbar = 15;
And don't forget to save your changes.

Then, on the file 'Globals.lua', find a line that says 'Strings.TierNames[Turbine.Gameplay.CraftTier.Gundabad] = "Gundabad";' and add the following line right under it :
Strings.TierNames[Turbine.Gameplay.CraftTier.Umbar] = "Umbar";

Since the plugin contains the three languages that the game can run, French, German and English, there are three lines saying 'Strings.TierNames[Turbine.Gameplay.CraftTier.Gundabad] = "Gundabad";', so you'll need to find all three, and add Strings.TierNames[Turbine.Gameplay.CraftTier.Umbar] = "Umbar"; under each of them.

Then don't forget to save your changes.

If you did everything correctly, then the plugin should fetch the Umbari recipes and display them the next time you start LOTRO.
Nyry is offline Report comment to moderator   Reply With Quote Reply With Quote
Unread 01-27-2024, 12:42 PM  
Dandee
The Wary
 
Dandee's Avatar

Forum posts: 0
File comments: 23
Uploads: 0
As of today, Recipe Tracker doesn't load anymore and produces the following line upon login:

...gs Online\Plugins\Bowcosid\RecipeTracker\Recipes.lua: 15: attempt to index field '?' (a nil value)


Seeing how the original author hasn't logged to this website in 2,5 years, I worry the addon is abandoned. Is there anyone who knows lua fu and who'd be willing to pick up this project?
Dandee is offline Report comment to moderator   Reply With Quote Reply With Quote
Unread 01-05-2024, 10:39 PM  
Kedivia
The Wary

Forum posts: 0
File comments: 2
Uploads: 0
Delete Character's Information

I too was looking for a way to delete some old names from before I transferred servers. I tried to use the /recipetracker options command, and it boots me out of the game completely.
Kedivia is offline Report comment to moderator   Reply With Quote Reply With Quote
Unread 10-15-2022, 02:04 PM  
smokeylemur
The Wary

Forum posts: 0
File comments: 1
Uploads: 0
Delete Character's Information

Is there a way to delete character's information from the plugin? I've used name changes and have deleted alts but the old names still appear in the plugin. Is there a way for you to add this functionality or something I can change in the plugins' files?
smokeylemur is offline Report comment to moderator   Reply With Quote Reply With Quote
Unread 06-22-2022, 03:10 PM  
bsmorgan
The Undefeated

Forum posts: 7
File comments: 72
Uploads: 0
Update for Gundabad Tier

I believe there are a couple of one line additions in Main.lua and Globals.lua needed to support the Gundabad Tier.

Code:
--- C:/Users/Brad/Downloads/Bowcosid/RecipeTracker/Main.lua	Wed Feb  3 07:10:01 2021
+++ C:/Users/Brad/Documents/The Lord of the Rings Online/Plugins/Bowcosid/RecipeTracker/Main.lua	Wed Jun 22 14:13:07 2022
@@ -31,6 +31,7 @@
 Turbine.Gameplay.CraftTier.Doomfold = 11;
 Turbine.Gameplay.CraftTier.Ironfold = 12;
 Turbine.Gameplay.CraftTier.MinasIthil = 13;
+Turbine.Gameplay.CraftTier.Gundabad = 14;
 
 
 
--- C:/Users/Brad/Downloads/Bowcosid/RecipeTracker/Globals.lua	Wed Feb  3 07:27:39 2021
+++ C:/Users/Brad/Documents/The Lord of the Rings Online/Plugins/Bowcosid/RecipeTracker/Globals.lua	Wed Jun 22 14:12:32 2022
@@ -65,6 +65,7 @@
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Doomfold] = "Unheilskluft";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Ironfold] = "Eisenbruch";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.MinasIthil] = "Minis Ithil";
+		Strings.TierNames[Turbine.Gameplay.CraftTier.Gundabad] = "Gundabad";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Tailor] = "Schneider";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Woodworker] = "Drechsler";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Farmer] = "Bauer";
@@ -129,6 +130,7 @@
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Doomfold] = "Folde du Destin";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Ironfold] = "Crevasse de fer";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.MinasIthil] = "Minas Ithil";
+		Strings.TierNames[Turbine.Gameplay.CraftTier.Gundabad] = "Gundabad";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Tailor] = "Tailleur";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Woodworker] = "Menuisier";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Farmer] = "Fermier";
@@ -168,6 +170,7 @@
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Doomfold] = "Doomfold";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.Ironfold] = "Ironfold";
 		Strings.TierNames[Turbine.Gameplay.CraftTier.MinasIthil] = "Minas Ithil";
+		Strings.TierNames[Turbine.Gameplay.CraftTier.Gundabad] = "Gundabad";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Tailor] = "Tailor";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Woodworker] = "Woodworker";
 		Strings.ProfessionNames[Turbine.Gameplay.Profession.Farmer] = "Farmer";

Last edited by bsmorgan : 06-22-2022 at 03:16 PM.
bsmorgan is offline Report comment to moderator   Reply With Quote Reply With Quote
Unread 06-21-2022, 11:31 PM  
LittleMagica
The Wary

Forum posts: 1
File comments: 13
Uploads: 0
Aah this error is from the client...

Ill get it too and havent know why the Plugin isnt working for me.
Woult really love if it can fixed and used it with the 64bit
LittleMagica is offline Report comment to moderator   Reply With Quote Reply With Quote
Unread 04-21-2022, 11:31 AM  
Yalo
The Wary

Forum posts: 0
File comments: 1
Uploads: 0
64 bit client

Dear Bowcosid,

First thank you for this great tool. Since the 32 bit client is going to expire now, I noticed that I still used this client. Switching to the 64 bit client resulted in the following error message for Recipe Tracker:
...\Plugins\Bowcosid\RecipeTracker\Slider.lua:57: attempt to compare string with number
To be sure I returned to 32 bit, and Recipe Tracker worked; back to 64 bit, the error re-appeared. Did I do anything wrong or is this something you must fix? Is there any further information I should give you?

Thank you in advance for your help.
Yalo is offline Report comment to moderator   Reply With Quote Reply With Quote
Post A Reply

 
Category Jump:
Search this Category:
 

All times are GMT -5. The time now is 01:10 AM.


Our Network
EQInterface | EQ2Interface | Minion | WoWInterface | ESOUI | LoTROInterface | MMOUI | Swtorui