From a0896c63d7a02d1b90572d591a16a79b4274feac Mon Sep 17 00:00:00 2001 From: Alex Sweet Date: Tue, 10 Apr 2018 23:46:11 -0700 Subject: Smelting Gives Experience (#4094) * Smelting Exp Smelting now gives experience * Furnace.txt update Exp rewards are entered in furnace.txt, Reward calculation is now done is the furnaceentity class * furnace.txt update Changed alignment tabs to spaces Included documentation of exp in recipe * Updated StringToFloat changed strtod to strtof * Explicit Float to Int * Reworked Smelting Rewards * No C casts -Adds new function to the api -Sets reward counter to 0 in furnace constructor * Style and exp lock removed -Fixed style mistakes accoring to PR notes -XP isn't locked to a single player anymore * No Smelter API -Removed SetLastSmelter and GetLastSmelter -Fixed comments -Fixed log reward amounts --- src/FurnaceRecipe.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'src/FurnaceRecipe.cpp') diff --git a/src/FurnaceRecipe.cpp b/src/FurnaceRecipe.cpp index a2199cd33..a4647b7a0 100644 --- a/src/FurnaceRecipe.cpp +++ b/src/FurnaceRecipe.cpp @@ -161,6 +161,7 @@ void cFurnaceRecipe::AddRecipeFromLine(const AString & a_Line, unsigned int a_Li Line.erase(std::remove_if(Line.begin(), Line.end(), isspace), Line.end()); int CookTime = 200; + float Reward = 0; std::unique_ptr InputItem = cpp14::make_unique(); std::unique_ptr OutputItem = cpp14::make_unique(); @@ -189,18 +190,27 @@ void cFurnaceRecipe::AddRecipeFromLine(const AString & a_Line, unsigned int a_Li return; } } - - if (!ParseItem(Sides[1], *OutputItem)) + const AStringVector & OutputSplit = StringSplit(Sides[1], "$"); + if (!ParseItem(OutputSplit[0], *OutputItem)) { - LOGWARNING("furnace.txt: line %d: Cannot parse output item \"%s\".", a_LineNum, Sides[1].c_str()); + LOGWARNING("furnace.txt: line %d: Cannot parse output item \"%s\".", a_LineNum, OutputSplit[0].c_str()); LOGINFO("Offending line: \"%s\"", a_Line.c_str()); return; } - + if (OutputSplit.size() > 1) + { + if (!StringToFloat(OutputSplit[1], Reward)) + { + LOGWARNING("furnace.txt: line %d: Cannot parse reward \"%s\".", a_LineNum, OutputSplit[1].c_str()); + LOGINFO("Offending line: \"%s\"", a_Line.c_str()); + return; + } + } cRecipe Recipe; Recipe.In = InputItem.release(); Recipe.Out = OutputItem.release(); Recipe.CookTime = CookTime; + Recipe.Reward = Reward; m_pState->Recipes.push_back(Recipe); } -- cgit v1.2.3