diff --git a/Minecraft.Client/AchievementScreen.cpp b/Minecraft.Client/AchievementScreen.cpp index db13c136..6bc446fe 100644 --- a/Minecraft.Client/AchievementScreen.cpp +++ b/Minecraft.Client/AchievementScreen.cpp @@ -152,7 +152,7 @@ void AchievementScreen::renderLabels() // font.draw(xScrollP + ", " + yScrollP, xo + 5, yo + 5 + BIGMAP_HEIGHT + 18, 0x404040); // font.drawWordWrap("Ride a pig off a cliff.", xo + 5, yo + 5 + BIGMAP_HEIGHT + 16, BIGMAP_WIDTH, 0x404040); - + } void AchievementScreen::renderBg(int xm, int ym, float a) diff --git a/Minecraft.Client/CMakeLists.txt b/Minecraft.Client/CMakeLists.txt index 89ca1879..e96bb50f 100644 --- a/Minecraft.Client/CMakeLists.txt +++ b/Minecraft.Client/CMakeLists.txt @@ -23,7 +23,7 @@ set(MINECRAFT_CLIENT_SOURCES ${SOURCES_COMMON} ) -add_executable(Minecraft.Client ${MINECRAFT_CLIENT_SOURCES}) +add_executable(Minecraft.Client ${MINECRAFT_CLIENT_SOURCES} "Common/UI/UIScene_AchievementsMenu.cpp" "Common/UI/UIScene_AchievementsMenu.h" "Common/UI/UIControl_AchievementsList.cpp" "Common/UI/UIControl_AchievementsList.h") # Only define executable on windows if(PLATFORM_NAME STREQUAL "Windows64") diff --git a/Minecraft.Client/Common/Console_Awards_enum.h b/Minecraft.Client/Common/Console_Awards_enum.h index 9597c717..9bca7a9e 100644 --- a/Minecraft.Client/Common/Console_Awards_enum.h +++ b/Minecraft.Client/Common/Console_Awards_enum.h @@ -23,18 +23,18 @@ enum eAward eAward_DispenseWithThis, eAward_InToTheNether, - eAward_mine100Blocks, - eAward_kill10Creepers, + //eAward_mine100Blocks, + //eAward_kill10Creepers, eAward_eatPorkChop, eAward_play100Days, eAward_arrowKillCreeper, - eAward_socialPost, + //eAward_socialPost, #ifndef _XBOX // 4J Stu - Does not map to any Xbox achievements eAward_snipeSkeleton, eAward_diamonds, - eAward_portal, + //eAward_portal, eAward_ghast, eAward_blazeRod, eAward_potion, @@ -45,7 +45,6 @@ enum eAward eAward_bookcase, #endif -#ifdef _EXTENDED_ACHIEVEMENTS eAward_adventuringTime, eAward_repopulation, //eAward_porkChop, @@ -66,7 +65,6 @@ enum eAward eAward_ironMan, eAward_zombieDoctor, eAward_lionTamer, -#endif eAward_Max, }; diff --git a/Minecraft.Client/Common/Consoles_App.cpp b/Minecraft.Client/Common/Consoles_App.cpp index 5116dbeb..367ab20e 100644 --- a/Minecraft.Client/Common/Consoles_App.cpp +++ b/Minecraft.Client/Common/Consoles_App.cpp @@ -839,6 +839,11 @@ void CMinecraftApp::InitGameSettings() memset(pProfileSettings,0,sizeof(C_4JProfile::PROFILESETTINGS)); SetDefaultOptions(pProfileSettings,i); Win64_LoadSettings(GameSettingsA[i]); + app.DebugPrintf("Loaded language: %d\n", GameSettingsA[i]->ucLanguage); + app.SetMinecraftLanguage(i, GameSettingsA[i]->ucLanguage); +app.SetMinecraftLocale(i, GameSettingsA[i]->ucLocale); + +app.loadStringTable(); ApplyGameSettingsChanged(i); #elif defined __PS3__ || defined __ORBIS__ || defined _DURANGO || defined __PSVITA__ C4JStorage::PROFILESETTINGS *pProfileSettings=StorageManager.GetDashboardProfileSettings(i); @@ -855,6 +860,7 @@ int CMinecraftApp::SetDefaultOptions(C4JStorage::PROFILESETTINGS *pSettings,cons int CMinecraftApp::SetDefaultOptions(C_4JProfile::PROFILESETTINGS *pSettings,const int iPad) #endif { + app.DebugPrintf("SetDefaultOptions language BEFORE: %d\n", GameSettingsA[iPad]->ucLanguage); SetGameSettings(iPad,eGameSetting_MusicVolume,DEFAULT_VOLUME_LEVEL); SetGameSettings(iPad,eGameSetting_SoundFXVolume,DEFAULT_VOLUME_LEVEL); SetGameSettings(iPad,eGameSetting_RenderDistance,16); @@ -939,6 +945,7 @@ int CMinecraftApp::SetDefaultOptions(C_4JProfile::PROFILESETTINGS *pSettings,con if (!app.GetGameStarted()) { GameSettingsA[iPad]->ucLanguage = MINECRAFT_LANGUAGE_DEFAULT; // use the system language + app.DebugPrintf("SetDefaultOptions language AFTER: %d\n", GameSettingsA[iPad]->ucLanguage); GameSettingsA[iPad]->ucLocale = MINECRAFT_LANGUAGE_DEFAULT; // use the system locale } @@ -6469,7 +6476,7 @@ int CMinecraftApp::GetHTMLFontSize(EHTMLFontSize size) return s_iHTMLFontSizesA[size]; } -wstring CMinecraftApp::FormatHTMLString(int iPad, const wstring &desc, int shadowColour /*= 0xFFFFFFFF*/) +wstring CMinecraftApp::FormatHTMLString(int iPad, const wstring &desc, int shadowColour /*= 0xFFFFFFFF*/, bool override) { wstring text(desc); @@ -6552,7 +6559,7 @@ wstring CMinecraftApp::FormatHTMLString(int iPad, const wstring &desc, int shado text = replaceAll(text, L"{*CONTROLLER_VK_A*}", GetVKReplacement(VK_PAD_A) ); text = replaceAll(text, L"{*CONTROLLER_VK_B*}", GetVKReplacement(VK_PAD_B) ); text = replaceAll(text, L"{*CONTROLLER_VK_X*}", GetVKReplacement(VK_PAD_X) ); - text = replaceAll(text, L"{*CONTROLLER_VK_Y*}", GetVKReplacement(VK_PAD_Y) ); + text = replaceAll(text, L"{*CONTROLLER_VK_Y*}", GetVKReplacement(VK_PAD_Y, override) ); text = replaceAll(text, L"{*CONTROLLER_VK_LB*}", GetVKReplacement(VK_PAD_LSHOULDER) ); text = replaceAll(text, L"{*CONTROLLER_VK_RB*}", GetVKReplacement(VK_PAD_RSHOULDER) ); text = replaceAll(text, L"{*CONTROLLER_VK_LS*}", GetVKReplacement(VK_PAD_LTHUMB_UP) ); @@ -6790,7 +6797,7 @@ wstring CMinecraftApp::GetActionReplacement(int iPad, unsigned char ucAction) #endif } -wstring CMinecraftApp::GetVKReplacement(unsigned int uiVKey) +wstring CMinecraftApp::GetVKReplacement(unsigned int uiVKey, bool override) { #ifdef _XBOX switch(uiVKey) @@ -6908,7 +6915,7 @@ wstring CMinecraftApp::GetVKReplacement(unsigned int uiVKey) int size = 30; #elif defined _WIN64 int size = 45; - if(ui.getScreenHeight() < 1080) size = 30; + if(ui.getScreenHeight() < 1080 || override == true) size = 30; #else int size = 45; #endif diff --git a/Minecraft.Client/Common/Consoles_App.h b/Minecraft.Client/Common/Consoles_App.h index 6401c839..f34553c7 100644 --- a/Minecraft.Client/Common/Consoles_App.h +++ b/Minecraft.Client/Common/Consoles_App.h @@ -97,7 +97,7 @@ public: */ static const int GAME_DEFINED_PROFILE_DATA_BYTES = 2*972; // per user #else - static const int GAME_DEFINED_PROFILE_DATA_BYTES = 972; // per user + static const int GAME_DEFINED_PROFILE_DATA_BYTES = 2*972; // per user #endif unsigned int uiGameDefinedDataChangedBitmask; @@ -564,11 +564,11 @@ public: int GetHTMLColour(eMinecraftColour colour); int GetHTMLColor(eMinecraftColour colour) { return GetHTMLColour(colour); } int GetHTMLFontSize(EHTMLFontSize size); - wstring FormatHTMLString(int iPad, const wstring& desc, int shadowColour = 0xFFFFFFFF); + wstring FormatHTMLString(int iPad, const wstring& desc, int shadowColour = 0xFFFFFFFF, bool override = false); wstring EscapeHTMLString(const wstring &desc); wstring FormatChatMessage(const wstring& desc, bool applyStyling = true); wstring GetActionReplacement(int iPad, unsigned char ucAction); - wstring GetVKReplacement(unsigned int uiVKey); + wstring GetVKReplacement(unsigned int uiVKey, bool override = false); wstring GetIconReplacement(unsigned int uiIcon); float getAppTime() { return m_Time.fAppTime; } diff --git a/Minecraft.Client/Common/Media/AchievementsMenu1080.swf b/Minecraft.Client/Common/Media/AchievementsMenu1080.swf new file mode 100644 index 00000000..c88c1c63 Binary files /dev/null and b/Minecraft.Client/Common/Media/AchievementsMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/AchievementsMenu720.swf b/Minecraft.Client/Common/Media/AchievementsMenu720.swf new file mode 100644 index 00000000..c88c1c63 Binary files /dev/null and b/Minecraft.Client/Common/Media/AchievementsMenu720.swf differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64.arc b/Minecraft.Client/Common/Media/MediaWindows64.arc index e762a3a8..defe2d0c 100644 Binary files a/Minecraft.Client/Common/Media/MediaWindows64.arc and b/Minecraft.Client/Common/Media/MediaWindows64.arc differ diff --git a/Minecraft.Client/Common/Media/PressStartToPlay1080.swf b/Minecraft.Client/Common/Media/PressStartToPlay1080.swf index 87de331d..846f8f61 100644 Binary files a/Minecraft.Client/Common/Media/PressStartToPlay1080.swf and b/Minecraft.Client/Common/Media/PressStartToPlay1080.swf differ diff --git a/Minecraft.Client/Common/Media/PressStartToPlay720.swf b/Minecraft.Client/Common/Media/PressStartToPlay720.swf index 2554a31d..846f8f61 100644 Binary files a/Minecraft.Client/Common/Media/PressStartToPlay720.swf and b/Minecraft.Client/Common/Media/PressStartToPlay720.swf differ diff --git a/Minecraft.Client/Common/Media/skinGraphics.swf b/Minecraft.Client/Common/Media/skinGraphics.swf index f0482ec7..b2cc9f88 100644 Binary files a/Minecraft.Client/Common/Media/skinGraphics.swf and b/Minecraft.Client/Common/Media/skinGraphics.swf differ diff --git a/Minecraft.Client/Common/Media/skinInGameLC.swf b/Minecraft.Client/Common/Media/skinInGameLC.swf new file mode 100644 index 00000000..d49f1440 Binary files /dev/null and b/Minecraft.Client/Common/Media/skinInGameLC.swf differ diff --git a/Minecraft.Client/Common/Media/skinLC.swf b/Minecraft.Client/Common/Media/skinLC.swf new file mode 100644 index 00000000..e647d7f6 Binary files /dev/null and b/Minecraft.Client/Common/Media/skinLC.swf differ diff --git a/Minecraft.Client/Common/Network/PlatformNetworkManagerStub.cpp b/Minecraft.Client/Common/Network/PlatformNetworkManagerStub.cpp index 673bf9f7..b5b9d9e0 100644 --- a/Minecraft.Client/Common/Network/PlatformNetworkManagerStub.cpp +++ b/Minecraft.Client/Common/Network/PlatformNetworkManagerStub.cpp @@ -868,7 +868,10 @@ void CPlatformNetworkManagerStub::SearchForGames() info->sessionId = static_cast(inet_addr(lanSessions[i].hostIP)) | static_cast(lanSessions[i].hostPort) << 32; - friendsSessions[0].push_back(info); + //Fix null crash? I think its here... + if (info) { + friendsSessions[0].push_back(info); + } } m_searchResultsCount[0] = static_cast(friendsSessions[0].size()); diff --git a/Minecraft.Client/Common/UI/UIComponent_PressStartToPlay.cpp b/Minecraft.Client/Common/UI/UIComponent_PressStartToPlay.cpp index f15a4ab2..9580789f 100644 --- a/Minecraft.Client/Common/UI/UIComponent_PressStartToPlay.cpp +++ b/Minecraft.Client/Common/UI/UIComponent_PressStartToPlay.cpp @@ -70,12 +70,61 @@ void UIComponent_PressStartToPlay::handleReload() m_controlPressStartPanel.setVisible(showPressStart); } +void UIComponent_PressStartToPlay::ShowAchievementToast(string achievementName, string achievementDescription, string achT) +{ + /*IggyStringUTF8 stringVal; + stringVal.string = (char*)label.c_str(); + stringVal.length = static_cast(label.length()); + value[0].type = IGGY_DATATYPE_string_UTF8; + value[0].string8 = stringVal;*/ + + IggyDataValue result; + IggyDataValue value[3]; + + IggyStringUTF8 stringVal1; + value[0].type = IGGY_DATATYPE_string_UTF8; + stringVal1.string = (char*)achievementName.c_str(); + stringVal1.length = static_cast(achievementName.length()); + value[0].string8 = stringVal1; + + IggyStringUTF8 stringVal2; + stringVal2.string = (char*)achievementDescription.c_str(); + stringVal2.length = static_cast(achievementDescription.length()); + value[1].type = IGGY_DATATYPE_string_UTF8; + value[1].string8 = stringVal2; + + IggyStringUTF8 stringVal3; + stringVal3.string = (char*)achT.c_str(); + stringVal3.length = static_cast(achT.length()+3); + value[2].type = IGGY_DATATYPE_string_UTF8; + value[2].string8 = stringVal3; + + IggyResult out = IggyPlayerCallMethodRS(getMovie(), &result, IggyPlayerRootPath(getMovie()), m_funcShowAchToast, 3, value); + + addTimer(1, 5000); + + +} + +void UIComponent_PressStartToPlay::HideAchievementToast() +{ + IggyDataValue result; + IggyResult out = IggyPlayerCallMethodRS(getMovie(), &result, IggyPlayerRootPath(getMovie()), m_funcHideAchToast, 0, nullptr); + + Minecraft::GetInstance()->achID = 0; +} + void UIComponent_PressStartToPlay::handleTimerComplete(int id) { m_controlPressStartPanel.setVisible(false); for(unsigned int i = 0; i < XUSER_MAX_COUNT; ++i) { m_showingPressStart[i] = false; + if (id == 1) { + HideAchievementToast(); + killTimer(id); + ui.toastOn = false; + } } ui.ClearPressStart(); } diff --git a/Minecraft.Client/Common/UI/UIComponent_PressStartToPlay.h b/Minecraft.Client/Common/UI/UIComponent_PressStartToPlay.h index a29b6016..fb6c955c 100644 --- a/Minecraft.Client/Common/UI/UIComponent_PressStartToPlay.h +++ b/Minecraft.Client/Common/UI/UIComponent_PressStartToPlay.h @@ -1,6 +1,7 @@ #pragma once #include "UIScene.h" +#include "UIControl_Label.h" class UIComponent_PressStartToPlay : public UIScene { @@ -15,7 +16,7 @@ private: protected: UIControl_Label m_labelTrialTimer, m_labelPressStart, m_playerDisplayName; UIControl m_controlSaveIcon, m_controlPressStartPanel; - IggyName m_funcShowController; + IggyName m_funcShowController, m_funcShowAchToast, m_funcHideAchToast; UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene) UI_MAP_ELEMENT(m_labelTrialTimer, "TrialTimer") UI_MAP_ELEMENT(m_controlSaveIcon, "SaveIcon") @@ -26,6 +27,8 @@ protected: UI_END_MAP_CHILD_ELEMENTS() UI_MAP_NAME(m_funcShowController, L"ShowController"); + UI_MAP_NAME(m_funcShowAchToast, L"ShowAchievementToast"); + UI_MAP_NAME(m_funcHideAchToast, L"HideAchievementToast"); UI_END_MAP_ELEMENTS_AND_NAMES() public: @@ -47,6 +50,9 @@ public: // Returns true if lower scenes in this scenes layer, or in any layer below this scenes layers should be hidden virtual bool hidesLowerScenes() { return false; } + void ShowAchievementToast(string achievementName, string achievementDescription, string achT = ""); + void HideAchievementToast(); + virtual void handleReload(); virtual void handleTimerComplete(int id); diff --git a/Minecraft.Client/Common/UI/UIControl.h b/Minecraft.Client/Common/UI/UIControl.h index 8445af0f..513e9065 100644 --- a/Minecraft.Client/Common/UI/UIControl.h +++ b/Minecraft.Client/Common/UI/UIControl.h @@ -31,6 +31,7 @@ public: eTexturePackList, eBitmapIcon, eTouchControl, + eAchievementList, }; protected: eUIControlType m_eControlType; @@ -63,7 +64,7 @@ public: UIControl(); virtual bool setupControl(UIScene *scene, IggyValuePath *parent, const string &controlName); - void UpdateControl(); + virtual void UpdateControl(); void setHidden(bool bHidden) {m_bHidden=bHidden;} bool getHidden(void) {return m_bHidden;} diff --git a/Minecraft.Client/Common/UI/UIControl_AchievementsList.cpp b/Minecraft.Client/Common/UI/UIControl_AchievementsList.cpp new file mode 100644 index 00000000..ce0e12ab --- /dev/null +++ b/Minecraft.Client/Common/UI/UIControl_AchievementsList.cpp @@ -0,0 +1,104 @@ +#include "UIControl_AchievementsList.h" +#include "stdafx.h" +#include "UI.h" +#include "../../../Minecraft.World/JavaMath.h" + +UIControl_AchievementsList::UIControl_AchievementsList() +{ + +} + +void UIControl_AchievementsList::init(int id) +{ + m_id = id; + + IggyDataValue result; + IggyDataValue value[1]; + value[0].type = IGGY_DATATYPE_number; + value[0].number = id; + IggyResult out = IggyPlayerCallMethodRS(m_parentScene->getMovie(), &result, getIggyValuePath(), m_initFunc, 1, value); + + //Hardcoded from SWF since it techinically won't ever change, and getting the x and y just doesnt work through the intended way + m_x = 221; + m_y = 204; +} + +void UIControl_AchievementsList::setCurrentSelection(int iSelection) +{ + IggyDataValue result; + IggyDataValue value[1]; + + value[0].type = IGGY_DATATYPE_number; + value[0].number = iSelection; + IggyResult out = IggyPlayerCallMethodRS(m_parentScene->getMovie(), &result, getIggyValuePath(), m_funcHighlightItem, 1, value); +} + +bool UIControl_AchievementsList::setupControl(UIScene* scene, IggyValuePath* parent, const string& controlName) +{ + UIControl::setControlType(UIControl::eAchievementList); + bool success = UIControl_Base::setupControl(scene, parent, controlName); + + //Label specific initialisers + m_funcAddNewItem = registerFastName(L"addNewItem"); + m_funcHighlightItem = registerFastName(L"HighlightItem"); + m_funcSetTouchFocus = registerFastName(L"SetTouchFocus"); + m_funcEnableButton = registerFastName(L"EnableButton"); + + return success; +} + +void UIControl_AchievementsList::UpdateControl() +{ + F64 fwidth, fheight; + IggyValueGetF64RS(getIggyValuePath(), m_nameWidth, nullptr, &fwidth); + IggyValueGetF64RS(getIggyValuePath(), m_nameHeight, nullptr, &fheight); + m_width = static_cast(Math::round(fwidth)); + m_height = static_cast(Math::round(fheight)); +} + +void UIControl_AchievementsList::SetTouchFocus(S32 iX, S32 iY, bool bRepeat) +{ + IggyDataValue result; + IggyDataValue value[3]; + + value[0].type = IGGY_DATATYPE_number; + value[0].number = iX; + value[1].type = IGGY_DATATYPE_number; + value[1].number = iY; + value[2].type = IGGY_DATATYPE_boolean; + value[2].boolval = bRepeat; + + IggyResult out = IggyPlayerCallMethodRS(m_parentScene->getMovie(), &result, getIggyValuePath(), m_funcSetTouchFocus, 3, value); +} + +void UIControl_AchievementsList::addnewItem(int id, wstring textureName) +{ + IggyDataValue result; + IggyDataValue value[2]; + value[0].type = IGGY_DATATYPE_number; + value[0].number = id; + value[1].type = IGGY_DATATYPE_string_UTF16; + IggyStringUTF16 stringVal; + stringVal.string = (IggyUTF16*)textureName.c_str(); + stringVal.length = textureName.length(); + value[1].string16 = stringVal; + IggyResult out = IggyPlayerCallMethodRS(m_parentScene->getMovie(), &result, getIggyValuePath(), m_funcAddNewItem, 2, value); + + ++m_itemCount; +} + +void UIControl_AchievementsList::EnableButton(int id, bool bEnable) { + IggyDataValue result; + IggyDataValue value[2]; + value[0].type = IGGY_DATATYPE_number; + value[0].number = id; + value[1].type = IGGY_DATATYPE_boolean; + value[1].boolval = bEnable; + + IggyResult out = IggyPlayerCallMethodRS(m_parentScene->getMovie(), &result, getIggyValuePath(), m_funcEnableButton, 2, value); +} + +void UIControl_AchievementsList::updateChildFocus(int iChild) +{ + m_iCurrentSelection = iChild; +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIControl_AchievementsList.h b/Minecraft.Client/Common/UI/UIControl_AchievementsList.h new file mode 100644 index 00000000..4115ca5e --- /dev/null +++ b/Minecraft.Client/Common/UI/UIControl_AchievementsList.h @@ -0,0 +1,22 @@ +#pragma once +#include "UIControl_Base.h" + +class UIControl_AchievementsList : public UIControl_Base +{ +private: + IggyName m_funcAddNewItem, m_funcHighlightItem, m_funcSetTouchFocus, m_funcEnableButton; + +public: + UIControl_AchievementsList(); + void init(int id); + int m_itemCount; + int m_iCurrentSelection = 0; + void SetTouchFocus(S32 iX, S32 iY, bool bRepeat); + void UpdateControl(); + void EnableButton(int id, bool bEnable); + void updateChildFocus(int iChild); + void setCurrentSelection(int iSelection); + virtual bool setupControl(UIScene* scene, IggyValuePath* parent, const string& controlName); + void UIControl_AchievementsList::addnewItem(int id, wstring textureName); + //virtual void ReInit(); +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIController.cpp b/Minecraft.Client/Common/UI/UIController.cpp index 96e0ba2f..d36d7042 100644 --- a/Minecraft.Client/Common/UI/UIController.cpp +++ b/Minecraft.Client/Common/UI/UIController.cpp @@ -5,6 +5,8 @@ #include "UIScene.h" #include "UIControl_Slider.h" #include "UIControl_TexturePackList.h" +#include "UIControl_AchievementsList.h" +#include "UIScene_AchievementsMenu.h" #include "../../../Minecraft.World/StringHelpers.h" #include "../../LocalPlayer.h" #include "../../DLCTexturePack.h" @@ -581,6 +583,11 @@ void UIController::loadSkins() m_iggyLibraries[eLibrary_Tooltips] = loadSkin(L"skinHDTooltips.swf", L"skinHDTooltips.swf"); m_iggyLibraries[eLibrary_Default] = loadSkin(L"skinHD.swf", L"skinHD.swf"); + //Load skins specifcally edited for use on achievements, if we + //used these as skin.swf and skinInGame.swf it breaks some other things + m_iggyLibraries[eLibrary_LCDefault] = loadSkin(L"skinLC.swf", L"skinLC.swf"); + m_iggyLibraries[eLibrary_LCInGame] = loadSkin(L"skinInGameLC.swf", L"skinInGameLC.swf"); + #elif defined _DURANGO m_iggyLibraries[eLibrary_Platform] = loadSkin(L"skinHDDurango.swf", L"platformskinHD.swf"); @@ -924,7 +931,7 @@ void UIController::tickInput() UIControl::eUIControlType type = ctrl->getControlType(); if (type != UIControl::eButton && type != UIControl::eTextInput && type != UIControl::eCheckBox && type != UIControl::eSlider && - type != UIControl::eButtonList && type != UIControl::eTexturePackList) + type != UIControl::eButtonList && type != UIControl::eTexturePackList && type != UIControl::eAchievementList) continue; // If the scene has an active panel (e.g. tab menus), @@ -958,6 +965,18 @@ void UIController::tickInput() hitCtrl = NULL; break; // ButtonList takes priority } + if (type == UIControl::eAchievementList) + { + auto t = (UIScene_AchievementsMenu*)pScene; + static_cast(ctrl)->SetTouchFocus( + static_cast(sceneMouseX - cx), static_cast(sceneMouseY - cy), false); + /*static_cast(ctrl)->SetTouchFocus( + static_cast(t->aX), static_cast(t->aY), false);*/ + hitControlId = -1; + hitArea = INT_MAX; + hitCtrl = NULL; + break; + } if (type == UIControl::eTexturePackList) { // TexturePackList expects coords relative to its origin. @@ -1830,6 +1849,10 @@ GDrawTexture * RADLINK UIController::TextureSubstitutionCreateCallback ( void * Textures *t = Minecraft::GetInstance()->textures; int id = t->getTexture(&image,C4JRender::TEXTURE_FORMAT_RxGyBzAw,false); + std::string result(texture_name, texture_name + wcslen(texture_name)); + + bool isSub = result.find("sub") != std::string::npos; + // 4J Stu - All our flash controls that allow replacing textures use a special 64x64 symbol // Force this size here so that our images don't get scaled wildly #if (defined __ORBIS__ || defined _DURANGO ) @@ -1843,11 +1866,15 @@ GDrawTexture * RADLINK UIController::TextureSubstitutionCreateCallback ( void * #if defined _WINDOWS64 // Only set the size to 96x96 for 1080p on Windows UIScene *scene = uiController->GetTopScene(0); - if (scene->getSceneResolution() == UIScene::eSceneResolution_1080) - { - *width = 96; - *height = 96; + //Fix for icon size changing on Achievements + if (scene) { + if (scene->getSceneResolution() == UIScene::eSceneResolution_1080 && (scene->getSceneType() != eUIScene_PauseMenu && scene->getSceneType() != eUIScene_MainMenu && scene->getSceneType() != eUIScene_AchievementsMenu) && isSub == false) + { + *width = 96; + *height = 96; + } } + #endif *destroy_callback_data = (void *)id; @@ -2933,6 +2960,16 @@ void UIController::HidePressStart() if(m_groups[static_cast(eUIGroup_Fullscreen)]->getPressStartToPlay()) m_groups[static_cast(eUIGroup_Fullscreen)]->getPressStartToPlay()->showPressStart(0, false); } +void UIController::ShowAchievementToast(string achievementName, string achievementDescription, byteArray b, string achT) +{ + if (m_groups[static_cast(eUIGroup_Fullscreen)]->getPressStartToPlay()) { + m_groups[static_cast(eUIGroup_Fullscreen)]->getPressStartToPlay()->registerSubstitutionTexture(convStringToWstring(achT) + L"sub", b.data, b.length); + m_groups[static_cast(eUIGroup_Fullscreen)]->getPressStartToPlay()->ShowAchievementToast(achievementName, achievementDescription, achT + "sub"); + } + toastOn = true; +} + + void UIController::ClearPressStart() { m_iPressStartQuadrantsMask = 0; diff --git a/Minecraft.Client/Common/UI/UIController.h b/Minecraft.Client/Common/UI/UIController.h index 08a5ba08..0f391db3 100644 --- a/Minecraft.Client/Common/UI/UIController.h +++ b/Minecraft.Client/Common/UI/UIController.h @@ -18,6 +18,8 @@ class UIController : public IUIController public: static int64_t iggyAllocCount; + bool toastOn = false; + // MGH - added to prevent crash loading Iggy movies while the skins were being reloaded static CRITICAL_SECTION ms_reloadSkinCS; static bool ms_bReloadSkinCSInitialised; @@ -100,6 +102,8 @@ private: eLibrary_HUD, eLibrary_Tooltips, eLibrary_Default, + eLibrary_LCDefault, + eLibrary_LCInGame, #if defined(_WINDOWS64) // Non-HD skin libraries needed by 720p/480p scene SWFs. @@ -199,6 +203,8 @@ protected: UIGroup *m_groups[eUIGroup_COUNT]; public: + auto& getGroups() { return m_groups; } + void showComponent(int iPad, EUIScene scene, EUILayer layer, EUIGroup group, bool show) { m_groups[group]->showComponent(iPad, scene, layer, show); @@ -379,6 +385,7 @@ public: virtual bool PressStartPlaying(unsigned int iPad); virtual void ShowPressStart(unsigned int iPad); virtual void HidePressStart(); + void ShowAchievementToast(string achievementName, string achievementDescription, byteArray b, string achT = ""); void ClearPressStart(); virtual C4JStorage::EMessageResult RequestAlertMessage(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad=XUSER_INDEX_ANY, int( *Func)(LPVOID,int,const C4JStorage::EMessageResult)=nullptr,LPVOID lpParam=nullptr, WCHAR *pwchFormatString=nullptr); diff --git a/Minecraft.Client/Common/UI/UIEnums.h b/Minecraft.Client/Common/UI/UIEnums.h index 45aff87d..65608339 100644 --- a/Minecraft.Client/Common/UI/UIEnums.h +++ b/Minecraft.Client/Common/UI/UIEnums.h @@ -98,6 +98,7 @@ enum EUIScene eUIScene_BeaconMenu, eUIScene_HorseMenu, eUIScene_FireworksMenu, + eUIScene_AchievementsMenu, #ifdef _XBOX // eUIScene_TransferToXboxOne, diff --git a/Minecraft.Client/Common/UI/UILayer.cpp b/Minecraft.Client/Common/UI/UILayer.cpp index e1c388f5..a77b0e2b 100644 --- a/Minecraft.Client/Common/UI/UILayer.cpp +++ b/Minecraft.Client/Common/UI/UILayer.cpp @@ -2,6 +2,7 @@ #include "UI.h" #include "UILayer.h" #include "UIScene.h" +#include "UIScene_AchievementsMenu.h" UILayer::UILayer(UIGroup *parent) { @@ -266,6 +267,9 @@ bool UILayer::NavigateToScene(int iPad, EUIScene scene, void *initData) case eUIScene_HelpAndOptionsMenu: newScene = new UIScene_HelpAndOptionsMenu(iPad, initData, this); break; + case eUIScene_AchievementsMenu: + newScene = new UIScene_AchievementsMenu(iPad, initData, this); + break; case eUIScene_SettingsMenu: newScene = new UIScene_SettingsMenu(iPad, initData, this); break; diff --git a/Minecraft.Client/Common/UI/UIScene.cpp b/Minecraft.Client/Common/UI/UIScene.cpp index 2c9718de..3f7e7b0f 100644 --- a/Minecraft.Client/Common/UI/UIScene.cpp +++ b/Minecraft.Client/Common/UI/UIScene.cpp @@ -757,7 +757,7 @@ void UIScene::setVisible(bool visible) void UIScene::customDraw(IggyCustomDrawCallbackRegion *region) { - app.DebugPrintf("Handling custom draw for scene with no override!\n"); + //app.DebugPrintf("Handling custom draw for scene with no override!\n"); } void UIScene::customDrawSlotControl(IggyCustomDrawCallbackRegion *region, int iPad, shared_ptr item, float fAlpha, bool isFoil, bool bDecorations) diff --git a/Minecraft.Client/Common/UI/UIScene_AchievementsMenu.cpp b/Minecraft.Client/Common/UI/UIScene_AchievementsMenu.cpp new file mode 100644 index 00000000..7a48a12d --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_AchievementsMenu.cpp @@ -0,0 +1,240 @@ +#include "UIScene_AchievementsMenu.h" +#include "UI.h" +#include "UILayer.h" +#include "../Minecraft.World/HtmlString.h" +#include "../Minecraft.World/Achievements.h" +#include "../Minecraft.World/Achievement.h" +#include "UISplitScreenHelpers.h" +#include "StatsCounter.h" +#include "MultiPlayerLocalPlayer.h" +#include "Windows64/KeyboardMouseInput.h" +extern HWND g_hWnd; +UIScene_AchievementsMenu::UIScene_AchievementsMenu(int iPad, void* _initData, UILayer* parentLayer) : UIScene(iPad, parentLayer) +{ + // Setup all the Iggy references we need for this scene + initialiseMovie(); + + /*RECT rc; + GetClientRect(g_hWnd, &rc); + POINT center; + center.x = rc.left; + center.y = rc.top; + ClientToScreen(g_hWnd, ¢er); + SetCursorPos(center.x, center.y);*/ + m_labelAchievements.init(app.GetString(IDS_ACHIEVEMENTS)); + //m_labelDesc.init(L""); + m_labelName.init(L""); + m_achievementsList.init(0); + for (int i = 0; i < Achievements::achievements->size(); i++) { //Achievements::achievements->size() + std::wstring path; + if (app.hasArchiveFile(L"Graphics\\TexturePackIcon.png")) + { + std::wstring iconStr(Achievements::achievements->at(i)->iconInt.begin(), + Achievements::achievements->at(i)->iconInt.end()); + path = L"Graphics\\Achievements\\TROP" + + (iconStr.empty() ? L"000" : iconStr) + + L".png"; + byteArray ba = app.getArchiveFile(path); + registerSubstitutionTexture(path, ba.data, ba.length); + } + std::string result = "Graphics\\Achievements\\" "TROP" + Achievements::achievements->at(i)->iconInt + ".png"; //media\\ + + m_achievementsList.addnewItem(i+1, path); + int newPad = 0; + if (Minecraft::GetInstance()->player != nullptr) { + newPad = Minecraft::GetInstance()->player->GetXboxPad(); + } + + if (Minecraft::GetInstance()->stats[newPad]->hasTaken(Achievements::achievements->at(i))) + { + m_achievementsList.EnableButton(i, true); + } + else { + m_achievementsList.EnableButton(i, false); + } + } + m_funcSetDesc = registerFastName(L"SetAchievementDescription"); + m_achievementsList.setCurrentSelection(Minecraft::GetInstance()->achID + 1); + m_achievementsList.m_iCurrentSelection = Minecraft::GetInstance()->achID + 1; +} +void UIScene_AchievementsMenu::handleDestroy() +{ + m_parentLayer->showComponent(m_iPad, eUIComponent_MenuBackground, false); +} +void UIScene_AchievementsMenu::SetAchievementDescription(wstring desc) { + wstring desc2 = L""; + if (desc != L"") { + HtmlString test = HtmlString(desc, eHTMLColor_White); + vector* lines = new vector(); + lines->push_back(test); + desc2 = HtmlString::Compose(lines); + } + IggyDataValue result; + IggyDataValue value[1]; + IggyStringUTF16 stringVal1; + value[0].type = IGGY_DATATYPE_string_UTF16; + stringVal1.string = (IggyUTF16*)desc2.c_str(); + stringVal1.length = desc2.length(); + value[0].string16 = stringVal1; + IggyResult out = IggyPlayerCallMethodRS(getMovie(), &result, IggyPlayerRootPath(getMovie()), m_funcSetDesc, 1, value); +} +wstring UIScene_AchievementsMenu::getMoviePath() +{ + if (app.GetLocalPlayerCount() > 1) + { + return L"AchievementsMenu"; + } + else + { + return L"AchievementsMenu"; + } +} +void UIScene_AchievementsMenu::updateComponents() +{ + bool bNotInGame = (Minecraft::GetInstance()->level == nullptr); + if (!bNotInGame) + { + m_parentLayer->showComponent(m_iPad, eUIComponent_MenuBackground, true); + } + m_parentLayer->showComponent(m_iPad, eUIComponent_Logo, false); +} +void UIScene_AchievementsMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool& handled) +{ + ui.AnimateKeyPress(m_iPad, key, repeat, pressed, released); + switch (key) + { + case ACTION_MENU_CANCEL: + ui.NavigateBack(iPad); + break; + case ACTION_MENU_Y: + if (pressed) { + showDescription = !showDescription; + if (showDescription) { + SetAchievementDescription(app.GetString(Achievements::achievements->at(m_achievementsList.m_iCurrentSelection - 1)->descID)); + } + else { + SetAchievementDescription(L""); + } + } + sendInputToMovie(key, repeat, pressed, released); + handled = true; + break; + case ACTION_MENU_UP: + if (pressed) { + if (m_achievementsList.m_iCurrentSelection > 10) { + m_achievementsList.m_iCurrentSelection -= 10; + } + } + sendInputToMovie(key, repeat, pressed, released); + handled = true; + break; + case ACTION_MENU_DOWN: + if (pressed) { + if (m_achievementsList.m_iCurrentSelection < Achievements::achievements->size() - 10) { + m_achievementsList.m_iCurrentSelection += 10; + } + } + sendInputToMovie(key, repeat, pressed, released); + handled = true; + break; + case ACTION_MENU_LEFT: + if (pressed) { + if (m_achievementsList.m_iCurrentSelection > 1) { + m_achievementsList.m_iCurrentSelection -= 1; + } + } + sendInputToMovie(key, repeat, pressed, released); + handled = true; + break; + case ACTION_MENU_RIGHT: + if (pressed) { + if (m_achievementsList.m_iCurrentSelection < Achievements::achievements->size()) { + m_achievementsList.m_iCurrentSelection += 1; + } + } + sendInputToMovie(key, repeat, pressed, released); + handled = true; + break; + } + //m_achievementsList.updateChildFocus(static_cast(childId)); +}; +void UIScene_AchievementsMenu::getMouseToSWFScale(float& scaleX, float& scaleY) +{ + extern HWND g_hWnd; + RECT rc; + GetClientRect(g_hWnd, &rc); + int winW = rc.right - rc.left; + int winH = rc.bottom - rc.top; + if (winW <= 0 || winH <= 0) { scaleX = 1.0f; scaleY = 1.0f; return; } + S32 renderW, renderH; + C4JRender::eViewportType vp = GetParentLayer()->getViewport(); + ui.getRenderDimensions(vp, renderW, renderH); + if (vp != C4JRender::VIEWPORT_TYPE_FULLSCREEN) + Fit16x9(renderW, renderH); + float screenW = (float)ui.getScreenWidth(); + float screenH = (float)ui.getScreenHeight(); + scaleX = static_cast(m_movieWidth) * screenW / (static_cast(renderW) * static_cast(winW)); + scaleY = static_cast(m_movieHeight) * screenH / (static_cast(renderH) * static_cast(winH)); +} +void UIScene_AchievementsMenu::tick() +{ + UIScene::tick(); + //ShowCursor(FALSE); + //m_cursorPath1.setVisible(g_KBMInput.IsKBMActive()); + //g_KBMInput.SetMouseGrabbed(false); + + if (m_achievementsList.m_iCurrentSelection != selection && m_achievementsList.m_iCurrentSelection != 0) { + m_achievementsList.setCurrentSelection(m_achievementsList.m_iCurrentSelection - 1); + m_labelName.setLabel(app.GetString(Achievements::achievements->at(m_achievementsList.m_iCurrentSelection - 1)->nameID)); + if (showDescription) { + SetAchievementDescription(app.GetString(Achievements::achievements->at(m_achievementsList.m_iCurrentSelection - 1)->descID)); + } + else { + SetAchievementDescription(L""); + } + } + // Apply mouse delta + /*int deltaX = g_KBMInput.GetMouseDeltaX(); + int deltaY = g_KBMInput.GetMouseDeltaY(); + if (deltaX != 0 || deltaY != 0) + { + float scaleX, scaleY; + getMouseToSWFScale(scaleX, scaleY); + m_pointerPos.x += static_cast(deltaX) * scaleX / 2; + m_pointerPos.y += static_cast(deltaY) * scaleY / 2; + if (m_pointerPos.x < 0.0f) m_pointerPos.x = 0.0f; + if (m_pointerPos.x > static_cast(m_movieWidth)) m_pointerPos.x = static_cast(m_movieWidth); + if (m_pointerPos.y < 0.0f) m_pointerPos.y = 0.0f; + if (m_pointerPos.y > static_cast(m_movieHeight)) m_pointerPos.y = static_cast(m_movieHeight); + } + IggyEvent mouseEvent; + S32 width, height; + m_parentLayer->getRenderDimensions(width, height); + S32 x = static_cast(m_pointerPos.x * (static_cast(width) / static_cast(m_movieWidth))); + aX = x; + S32 y = static_cast(m_pointerPos.y * (static_cast(height) / static_cast(m_movieHeight))); + aY = y; + IggyMakeEventMouseMove(&mouseEvent, x, y); + IggyEventResult result; + IggyPlayerDispatchEventRS(getMovie(), &mouseEvent, &result);*/ + selection = m_achievementsList.m_iCurrentSelection; +} +void UIScene_AchievementsMenu::updateTooltips() +{ + ui.SetTooltips(m_iPad, -1, IDS_TOOLTIPS_CANCEL, -1, IDS_TOOLTIPS_SHOW_DESCRIPTION); +} +void UIScene_AchievementsMenu::handleFocusChange(F64 controlId, F64 childId) +{ + switch (static_cast(controlId)) + { + case 0: + m_achievementsList.updateChildFocus(static_cast(childId)); + //m_achievementsList.setCurrentSelection(static_cast(childId)); + //m_labelName.setLabel(app.GetString(Achievements::achievements->at(static_cast(childId) - 1)->nameID)); + //SetAchievementDescription(app.GetString(Achievements::achievements->at(static_cast(childId) - 1)->descID)); + + //m_labelName.setLabel(app.GetString(IDS_ACHIEVEMENTS); + break; + }; + updateTooltips(); +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_AchievementsMenu.h b/Minecraft.Client/Common/UI/UIScene_AchievementsMenu.h new file mode 100644 index 00000000..aef7f458 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_AchievementsMenu.h @@ -0,0 +1,63 @@ +#pragma once +#include +#include "Common/UI/UIScene.h" +#include "Common/UI/UIControl_Button.h" +#include "Common/UI/UIControl_Cursor.h" +#include "UIControl_AchievementsList.h" +#include "Common/UI/UIControl_Label.h" +class UIScene_AchievementsMenu : public UIScene +{ +private: + enum EControls + { + eControl_AchievementsLabel, + eControl_AchievementsName, + eControl_AchievementsDesc, + eControl_AchievementsListContainer + }; + UIControl m_controlMainPanel; + UIControl_Label m_labelAchievements, m_labelName, m_labelDesc; + UIControl_Cursor m_cursorPath1; + vector m_AchButton; + UIControl_AchievementsList m_achievementsList; + IggyName m_funcSetDesc; + + UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene) + UI_MAP_ELEMENT(m_labelAchievements, "AcheivementsLabel") + UI_MAP_ELEMENT(m_labelName, "AchievementName") + UI_MAP_ELEMENT(m_labelDesc, "AchievementDescription") + //UI_MAP_ELEMENT(m_achievementsList, "AchievementsList") + UI_MAP_ELEMENT(m_controlMainPanel, "AchievementsListContainer") + UI_MAP_NAME(m_funcSetDesc, L"SetAchievementDescription") + UI_BEGIN_MAP_CHILD_ELEMENTS(m_controlMainPanel) + UI_MAP_ELEMENT(m_achievementsList, "AchievementsList") + UI_END_MAP_CHILD_ELEMENTS() + UI_END_MAP_ELEMENTS_AND_NAMES() + bool showDescription = false; + +public: + struct SceneMousePos + { + F32 x; + F32 y; + }; + int deltaX; + int deltaY; + int aX; + int aY; + UIVec2D m_pointerPos; + void getMouseToSWFScale(float& scaleX, float& scaleY); + UIScene_AchievementsMenu(int iPad, void* initData, UILayer* parentLayer); + SceneMousePos GetSceneMousePosition(UIScene* pScene, int rawMouseX, int rawMouseY); + virtual void handleDestroy(); + int selection = 0; + void SetAchievementDescription(wstring desc); + virtual void tick(); + virtual EUIScene getSceneType() { return eUIScene_AchievementsMenu; } + virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool& handled); + virtual void handleFocusChange(F64 controlId, F64 childId); + virtual void updateComponents(); + virtual void updateTooltips(); +protected: + virtual wstring getMoviePath(); +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_MainMenu.cpp b/Minecraft.Client/Common/UI/UIScene_MainMenu.cpp index 1af1b27b..bb9631f5 100644 --- a/Minecraft.Client/Common/UI/UIScene_MainMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_MainMenu.cpp @@ -2021,6 +2021,7 @@ void UIScene_MainMenu::RunAchievements(int iPad) XShowAchievementsUI( iPad ); } #endif + ui.NavigateToScene(iPad, eUIScene_AchievementsMenu); } void UIScene_MainMenu::RunHelpAndOptions(int iPad) diff --git a/Minecraft.Client/Common/UI/UIScene_PauseMenu.cpp b/Minecraft.Client/Common/UI/UIScene_PauseMenu.cpp index 7d75aa2f..580fc127 100644 --- a/Minecraft.Client/Common/UI/UIScene_PauseMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_PauseMenu.cpp @@ -619,11 +619,11 @@ void UIScene_PauseMenu::handlePress(F64 controlId, F64 childId) Windows::Xbox::ApplicationModel::Help::Show(user); } break; -#elif TO_BE_IMPLEMENTED +#endif case BUTTON_PAUSE_ACHIEVEMENTS: // guests can't look at achievements - if(ProfileManager.IsGuest(pNotifyPressData->UserIndex)) + /*if(ProfileManager.IsGuest(pNotifyPressData->UserIndex)) { UINT uiIDA[1]; uiIDA[0]=IDS_OK; @@ -633,8 +633,9 @@ void UIScene_PauseMenu::handlePress(F64 controlId, F64 childId) { XShowAchievementsUI( pNotifyPressData->UserIndex ); } + }*/ + ui.NavigateToScene(m_iPad, eUIScene_AchievementsMenu); break; -#endif case BUTTON_PAUSE_HELPANDOPTIONS: ui.NavigateToScene(m_iPad,eUIScene_HelpAndOptionsMenu); @@ -992,6 +993,7 @@ int UIScene_PauseMenu::UnlockFullSaveReturned(void *pParam,int iPad,C4JStorage:: ProfileManager.DisplayFullVersionPurchase(false,pMinecraft->player->GetXboxPad(),eSen_UpsellID_Full_Version_Of_Game); } } + pMinecraft->forceStatsSave(pMinecraft->player->GetXboxPad()); } else { diff --git a/Minecraft.Client/LocalPlayer.cpp b/Minecraft.Client/LocalPlayer.cpp index f1e5a17b..6f0268dc 100644 --- a/Minecraft.Client/LocalPlayer.cpp +++ b/Minecraft.Client/LocalPlayer.cpp @@ -12,6 +12,7 @@ #include "FurnaceScreen.h" #include "TrapScreen.h" +#include "../Minecraft.Client/Common/UI/UIScene.h" #include "MultiPlayerLocalPlayer.h" #include "CreativeMode.h" #include "GameRenderer.h" @@ -783,6 +784,16 @@ void LocalPlayer::displayClientMessage(int messageId) minecraft->gui->displayClientMessage(messageId, GetXboxPad()); } + // Helper to convert LPCWSTR -> std::string (UTF-8) +static std::string WideToUtf8(LPCWSTR wide) +{ + if (!wide) return {}; + int size = WideCharToMultiByte(CP_UTF8, 0, wide, -1, nullptr, 0, nullptr, nullptr); + std::string result(size - 1, '\0'); + WideCharToMultiByte(CP_UTF8, 0, wide, -1, result.data(), size, nullptr, nullptr); + return result; +} + void LocalPlayer::awardStat(Stat *stat, byteArray param) { #ifdef _DURANGO @@ -805,6 +816,28 @@ void LocalPlayer::awardStat(Stat *stat, byteArray param) if (stat->isAchievement()) { Achievement *ach = static_cast(stat); + /*ui.ShowAchievementToast( + WideToUtf8(app.GetString(ach->nameID)), + WideToUtf8(app.GetString(IDS_ACHIEVEMENT_VIEW)) + );*/ + std::wstring iconStr(ach->iconInt.begin(), + ach->iconInt.end()); + wstring path = L"Graphics\\Achievements\\TROP" + + (iconStr.empty() ? L"000" : iconStr) + + L".png"; + byteArray ba = app.getArchiveFile(path); + //auto t = ui.GetTopScene(0); + //t->registerSubstitutionTexture(path, ba.data, ba.length); + if (!minecraft->stats[m_iPad]->hasTaken(ach)) + { + ui.ShowAchievementToast( + WideToUtf8(app.GetString(ach->nameID)), + WideToUtf8(app.FormatHTMLString(0, app.GetString(IDS_ACHIEVEMENT_VIEW), 0xFFFFFFFF, true).c_str()), ba, + WideToUtf8(path.c_str()) + ); + minecraft->achID = ach->getAchievementID(); + } + //app.FormatHTMLString(0, app.GetString(IDS_ACHIEVEMENT_VIEW)); // 4J-PB - changed to attempt to award everytime - the award may need a storage device, so needs a primary player, and the player may not have been a primary player when they first 'got' the award // so let the award manager figure it out //if (!minecraft->stats[m_iPad]->hasTaken(ach)) @@ -941,7 +974,6 @@ void LocalPlayer::awardStat(Stat *stat, byteArray param) } #endif -#ifdef _EXTENDED_ACHIEVEMENTS // AWARD : Porkchop, cook and eat a porkchop. { @@ -1101,7 +1133,6 @@ void LocalPlayer::awardStat(Stat *stat, byteArray param) } #endif } -#endif } bool LocalPlayer::isSolidBlock(int x, int y, int z) diff --git a/Minecraft.Client/LocalPlayer.h b/Minecraft.Client/LocalPlayer.h index de832c85..e834ffd4 100644 --- a/Minecraft.Client/LocalPlayer.h +++ b/Minecraft.Client/LocalPlayer.h @@ -53,6 +53,7 @@ public: int m_iScreenSection; // assuming 4player splitscreen for now, or -1 for single player uint64_t ullButtonsPressed; // Stores the button presses, since the inputmanager can be ticked faster than the minecraft + uint64_t ullButtonsDown; // Stores the button presses, since the inputmanager can be ticked faster than the minecraft // player tick, and a button press and release combo can be missed in the minecraft::tick uint64_t ullDpad_last; @@ -62,7 +63,7 @@ public: // 4J-PB - moved these in from the minecraft structure, since they are per player things for splitscreen //int ticks; int missTime; - int lastClickTick[2]; + int lastClickTick[3]; bool isRaining ; int m_iThirdPersonView; diff --git a/Minecraft.Client/Minecraft.cpp b/Minecraft.Client/Minecraft.cpp index cd13ddb7..5ee49a7b 100644 --- a/Minecraft.Client/Minecraft.cpp +++ b/Minecraft.Client/Minecraft.cpp @@ -71,11 +71,14 @@ #endif #include "Common/UI/IUIScene_CreativeMenu.h" #include "Common/UI/UIFontData.h" +#include "Common/UI/UIComponent_PressStartToPlay.h" #include "DLCTexturePack.h" #ifdef __ORBIS__ #include "Orbis/Network/PsPlusUpsellWrapper_Orbis.h" #endif +// Leaderboards inclusion for the ticker thing +#include "Common/Leaderboards/LeaderboardManager.h" // #define DISABLE_SPU_CODE // 4J Turning this on will change the graph at the bottom of the debug overlay to show the number of packets of each type added per fram @@ -1438,6 +1441,7 @@ void Minecraft::run_middle() if(InputManager.ButtonPressed(i, MINECRAFT_ACTION_USE)) localplayers[i]->ullButtonsPressed|=1LL<ullButtonsPressed|=1LL<ullButtonsDown|=1LL<ullButtonsPressed|=1LL<ullButtonsPressed|=1LL<tick(iPad); + if (iPad == ProfileManager.GetPrimaryPad()) + LeaderboardManager::Instance()->Tick(); // Tick the opacity timer (to display the interface at default opacity for a certain time if the user has been navigating it) app.TickOpacityTimer(iPad); @@ -3621,16 +3627,17 @@ void Minecraft::tick(bool bFirst, bool bUpdateTextures) #else bool useHeld = InputManager.ButtonDown(iPad, MINECRAFT_ACTION_USE); #endif + bool achHeld; if( player->isUsingItem() ) { if(!useHeld) gameMode->releaseUsingItem(player); } - else if( gameMode->isInputAllowed(MINECRAFT_ACTION_USE) ) + else if (gameMode->isInputAllowed(MINECRAFT_ACTION_USE)) { if( player->abilities.instabuild ) { // 4J - attempt to handle click in special creative mode fashion if possible (used for placing blocks at regular intervals) - bool didClick = player->creativeModeHandleMouseClick(1, useHeld ); + bool didClick = player->creativeModeHandleMouseClick(1, useHeld); // If this handler has put us in lastClick_oldRepeat mode then it is because we aren't placing blocks - behave largely as the code used to if( player->lastClickState == LocalPlayer::lastClick_oldRepeat ) { @@ -3678,6 +3685,64 @@ void Minecraft::tick(bool bFirst, bool bUpdateTextures) player->lastClickTick[1] = 0; } } + achHeld = InputManager.ButtonDown(iPad, MINECRAFT_ACTION_INVENTORY) || + (iPad == 0 && g_KBMInput.IsKBMActive() && + g_KBMInput.IsKeyDown(KeyboardMouseInput::KEY_INVENTORY)); + if (ui.toastOn) { + if (achHeld) { + // Record when the hold started + if (player->lastClickTick[2] == 0) { + player->lastClickTick[2] = ticks; + } + // Check if held for 1 second + bool heldLongEnough = (ticks - player->lastClickTick[2]) >= (timer->ticksPerSecond); + if (heldLongEnough) { + ui.PlayUISFX(eSFX_Press); + ui.NavigateToScene(iPad, eUIScene_AchievementsMenu); + ui.getGroups()[static_cast(eUIGroup_Fullscreen)]->getPressStartToPlay()->handleTimerComplete(1); + } + } + else { + // If let go during period, open inventory + if (player->lastClickTick[2] != 0) { + shared_ptr player = Minecraft::GetInstance()->player; + if (!player->isRiding()) + { + ui.PlayUISFX(eSFX_Press); + } + if (gameMode->isServerControlledInventory()) + { + player->sendOpenInventory(); + } + else + { + app.LoadInventoryMenu(iPad, player); + } + } + // Reset when button is released + player->lastClickTick[2] = 0; + } + } + else { + //Just open inventory if the toast is not open + if ((player->ullButtonsPressed & (1LL << MINECRAFT_ACTION_INVENTORY)) && gameMode->isInputAllowed(MINECRAFT_ACTION_INVENTORY)) + { + shared_ptr player = Minecraft::GetInstance()->player; + if (!player->isRiding()) + { + ui.PlayUISFX(eSFX_Press); + } + if (gameMode->isServerControlledInventory()) + { + player->sendOpenInventory(); + } + else + { + app.LoadInventoryMenu(iPad, player); + } + } + player->lastClickTick[2] = 0; + } } if(app.DebugSettingsOn()) @@ -3750,19 +3815,33 @@ void Minecraft::tick(bool bFirst, bool bUpdateTextures) if((player->ullButtonsPressed&(1LL<isInputAllowed(MINECRAFT_ACTION_INVENTORY)) { - shared_ptr player = Minecraft::GetInstance()->player; - if (!player->isRiding()) - { - ui.PlayUISFX(eSFX_Press); + if (achHeld) { + + //ui.PlayUISFX(eSFX_Press); + //ui.NavigateToScene(iPad, eUIScene_AchievementsMenu); } + else { + /*shared_ptr player = Minecraft::GetInstance()->player; + if (!player->isRiding()) + { + ui.PlayUISFX(eSFX_Press); + } - if(gameMode->isServerControlledInventory()) + if(gameMode->isServerControlledInventory()) { player->sendOpenInventory(); } else { app.LoadInventoryMenu(iPad,player); + if (gameMode->isServerControlledInventory()) + { + player->sendOpenInventory(); + } + else + { + app.LoadInventoryMenu(iPad, player); + }*/ } } diff --git a/Minecraft.Client/Minecraft.h b/Minecraft.Client/Minecraft.h index 1d215f3b..6e805b33 100644 --- a/Minecraft.Client/Minecraft.h +++ b/Minecraft.Client/Minecraft.h @@ -91,7 +91,8 @@ public: Level *oldLevel; // 4J Stu added to keep a handle on an old level so we can delete it //HANDLE m_hPlayerRespawned; // 4J Added so we can wait in menus until it is done (for async in multiplayer) public: - + bool inventoryWasHeld = false; + int achID = 0; MultiPlayerLevel *level; LevelRenderer *levelRenderer; shared_ptr player; diff --git a/Minecraft.Client/StatsCounter.cpp b/Minecraft.Client/StatsCounter.cpp index 608e069c..a438b07b 100644 --- a/Minecraft.Client/StatsCounter.cpp +++ b/Minecraft.Client/StatsCounter.cpp @@ -211,6 +211,7 @@ void StatsCounter::save(int player, bool force) //Check we're going to have enough room to store all possible stats unsigned int uiTotalStatsSize = (Stats::all->size() * 4 * sizeof(unsigned short)) - (Achievements::achievements->size() * 3 * sizeof(unsigned short)) + (LARGE_STATS_COUNT*4*(sizeof(unsigned int)-sizeof(unsigned short))); + //Do change this back and fix it. assert( uiTotalStatsSize <= (CConsoleMinecraftApp::GAME_DEFINED_PROFILE_DATA_BYTES-sizeof(GAME_SETTINGS)) ); //Retrieve the data pointer from the profile diff --git a/Minecraft.Client/StatsCounter.h b/Minecraft.Client/StatsCounter.h index e292ccf2..91296c82 100644 --- a/Minecraft.Client/StatsCounter.h +++ b/Minecraft.Client/StatsCounter.h @@ -89,9 +89,9 @@ public: #ifdef _DEBUG void WipeLeaderboards(); #endif + bool isLargeStat(Stat* stat); private: - bool isLargeStat(Stat* stat); void dumpStatsToTTY(); #ifdef _XBOX diff --git a/Minecraft.Client/Windows64/Leaderboards/WindowsLeaderboardManager.cpp b/Minecraft.Client/Windows64/Leaderboards/WindowsLeaderboardManager.cpp index d3a47ea8..a1767c30 100644 --- a/Minecraft.Client/Windows64/Leaderboards/WindowsLeaderboardManager.cpp +++ b/Minecraft.Client/Windows64/Leaderboards/WindowsLeaderboardManager.cpp @@ -4,6 +4,7 @@ #include #include +#include #include "../Network/json.hpp" using json = nlohmann::json; @@ -168,6 +169,31 @@ bool WindowsLeaderboardManager::WriteStats(unsigned int viewCount, ViewIn views) return false; // Since WriteStats is useless we just do this, exact same thing is done in DurangoLeaderboardManager } +// ByteBukkit: Tick function +void WindowsLeaderboardManager::Tick() +{ + if (++m_tickCount < 1000) + return; + + m_tickCount = 0; + + std::thread([this]() + { + static const EStatsType types[] = { + eStatsType_Travelling, + eStatsType_Mining, + eStatsType_Farming, + eStatsType_Kills, + }; + + for (EStatsType t : types) + { + for (int diff = 0; diff <= 3; ++diff) + SendStats(t, diff); + } + }).detach(); +} + bool WindowsLeaderboardManager::SendStats(EStatsType type, int diff) { if (!Windows64Launcher::IsInOfflineMode || Windows64Minecraft::IsOfflineMode) diff --git a/Minecraft.Client/Windows64/Leaderboards/WindowsLeaderboardManager.h b/Minecraft.Client/Windows64/Leaderboards/WindowsLeaderboardManager.h index 8c2f59ef..3c6e0fd6 100644 --- a/Minecraft.Client/Windows64/Leaderboards/WindowsLeaderboardManager.h +++ b/Minecraft.Client/Windows64/Leaderboards/WindowsLeaderboardManager.h @@ -4,7 +4,7 @@ class WindowsLeaderboardManager : public LeaderboardManager { public: - virtual void Tick() override {} + virtual void Tick() override; virtual bool OpenSession() override { return true; } virtual void CloseSession() override {} virtual void DeleteSession() override {} @@ -39,6 +39,7 @@ public: virtual bool isIdle() override { return true; } private: + int m_tickCount = 0; bool ReadNetworkStats( LeaderboardReadListener* callback, int difficulty, diff --git a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp index 59357856..94373600 100644 --- a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp +++ b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp @@ -1574,7 +1574,7 @@ void StartGame(Win64LaunchOptions launchOptions, int nCmdShow) { if (!g_KBMInput.IsMouseGrabbed()) { - if (!g_KBMInput.IsKBMActive()) + if (!g_KBMInput.IsKBMActive() && ui.FindScene(eUIScene_AchievementsMenu) == nullptr) g_KBMInput.SetCursorHiddenForUI(true); else if (!g_KBMInput.IsScreenCursorHidden()) g_KBMInput.SetCursorHiddenForUI(false); diff --git a/Minecraft.Client/Windows64Media/loc/AdditionalStrings.xml b/Minecraft.Client/Windows64Media/loc/AdditionalStrings.xml index 9834da86..4f1940e7 100644 --- a/Minecraft.Client/Windows64Media/loc/AdditionalStrings.xml +++ b/Minecraft.Client/Windows64Media/loc/AdditionalStrings.xml @@ -8,7 +8,7 @@ - Minecraft: PlayStation®3 Edition + Minecraft: Legacy Console Edition @@ -32,23 +32,23 @@ - Online service is disabled on your Sony Entertainment Network account due to chat restrictions. + Online service is disabled on your LCE Online account due to chat restrictions. - Online service is disabled on your Sony Entertainment Network account due to parental control settings. + Online service is disabled on your LCE Online account due to parental control settings. Online Service - - You have been signed out from the "PSN". Online features of the game will not be available until you sign back into the "PSN". + + You have been signed out from the "LCEN". Online features of the game will not be available until you sign back into the "LCEN". - - You have been signed out from the "PSN". Online features of the game will not be available until you sign back into the "PSN". Exiting to Main Menu. + + You have been signed out from the "LCEN". Online features of the game will not be available until you sign back into the "LCEN". Exiting to Main Menu. @@ -104,7 +104,7 @@ - Online service is disabled on your Sony Entertainment Network account due to parental control settings for one of your local players. + Online service is disabled on your LCE Online account due to parental control settings for one of your local players. Online features are disabled due to a game update being available. diff --git a/Minecraft.Client/Windows64Media/loc/de-DE/AdditionalStrings.xml b/Minecraft.Client/Windows64Media/loc/de-DE/AdditionalStrings.xml index 7d25adf9..35fb07f3 100644 --- a/Minecraft.Client/Windows64Media/loc/de-DE/AdditionalStrings.xml +++ b/Minecraft.Client/Windows64Media/loc/de-DE/AdditionalStrings.xml @@ -7,7 +7,7 @@ Ausblenden - Minecraft: PlayStation®3 Edition + Minecraft: Legacy Console Edition Optionen @@ -25,19 +25,19 @@ Ein Netzwerkfehler ist aufgetreten. Zurück zum Hauptmenü. - Online-Dienste sind aufgrund von Chat-Beschränkungen deines Sony Entertainment Network-Kontos deaktiviert. + Online-Dienste sind aufgrund von Chat-Beschränkungen deines LCE Online-Kontos deaktiviert. - Online-Dienste sind aufgrund von Kindersicherungseinstellungen deines Sony Entertainment Network-Kontos deaktiviert. + Online-Dienste sind aufgrund von Kindersicherungseinstellungen deines LCE Online-Kontos deaktiviert. Online-Dienste - - Du wurdest von "PSN" abgemeldet. Die Online-Funktionen des Spiels stehen nicht zur Verfügung, bis du dich wieder bei "PSN" angemeldet hast. + + Du wurdest von "LCEN" abgemeldet. Die Online-Funktionen des Spiels stehen nicht zur Verfügung, bis du dich wieder bei "LCEN" angemeldet hast. - - Du wurdest von "PSN" abgemeldet. Die Online-Funktionen des Spiels stehen nicht zur Verfügung, bis du dich wieder bei "PSN" angemeldet hast. Zurück zum Hauptmenü. + + Du wurdest von "LCEN" abgemeldet. Die Online-Funktionen des Spiels stehen nicht zur Verfügung, bis du dich wieder bei "LCEN" angemeldet hast. Zurück zum Hauptmenü. Benutzer als Spieler %d auswählen (oder abbrechen, um als Gast zu spielen). @@ -73,7 +73,7 @@ Die Verbindung zu deinem Controller wurde getrennt. Bitte schließe den Controller an. - Online-Dienste sind für dein Sony Entertainment Network-Konto aufgrund von Kindersicherungseinstellungen für einen deiner lokalen Spieler deaktiviert. + Online-Dienste sind für dein LCE Online-Konto aufgrund von Kindersicherungseinstellungen für einen deiner lokalen Spieler deaktiviert. Für diesen Titel sind momentan keine herunterladbaren Inhalte im Angebot. diff --git a/Minecraft.Client/Windows64Media/loc/de-DE/stringsGeneric.xml b/Minecraft.Client/Windows64Media/loc/de-DE/stringsGeneric.xml index 42ee80f9..9bdbe267 100644 --- a/Minecraft.Client/Windows64Media/loc/de-DE/stringsGeneric.xml +++ b/Minecraft.Client/Windows64Media/loc/de-DE/stringsGeneric.xml @@ -5834,4 +5834,359 @@ Alle Endertruhen in einer Welt sind miteinander verbunden. Gegenstände, die in Seed für den Weltengenerator finden + + Inventur + + + Öffne dein Inventar. + + + + Dreimal auf Holz geklopft + + + Schlage gegen einen Baum, bis ein Holzblock herausspringt. + + + + Fortgeschrittenes Handwerk + + + Stell aus vier Holzbrettern eine Werkbank her. + + + + Glück Auf! + + + Stell aus Holz und Stöcken eine Spitzhacke her. + + + + Heiße Angelegenheit + + + Stell aus acht Bruchstein-Blöcken einen Ofen her. + + + + Schmiedekunst + + + Schmilz einen Eisenbarren. + + + + Fang an zu ackern! + + + Stell aus Holz und Stöcken eine Hacke her. + + + + Bäcker + + + Backe ein Brot aus Weizen. + + + + Die Lüge + + + Backe einen Kuchen aus Weizen, Zucker, Milch und Eiern! + + + + Technischer Fortschritt + + + Stell eine bessere Spitzhacke her. + + + + Köstlicher Fisch + + + Fange und brate einen Fisch! + + + + Bahn frei! + + + Reise in einer Lore von deinem Ausgangspunkt aus mindestens 500 m immer in eine Richtung. + + + + Zu den Waffen! + + + Stell aus Holz und Stöcken ein Schwert her. + + + + Monsterjäger + + + Greif ein Monster an und töte es. + + + + Kuhschubser + + + Gewinne Leder. + + + + Wenn Schweine fliegen + + + Reite ein Schwein mit einem Sattel, und füg ihm dann während des Reitens Schaden durch Fallen zu. + + + + Alphawolf + + + Freunde dich mit fünf Wölfen an. + + + + Bestens ausgerüstet + + + Stell ein Exemplar von jedem Werkzeug her (1 Spitzhacke, 1 Spaten, 1 Axt und 1 Hacke.). + + + + Feuer frei + + + Baue einen Spender. + + + + In den Nether + + + Stell ein Netherportal her. + + + + Schweinefleisch + + + Koche und iss ein Stück Schweinefleisch. + + + + Wie die Zeit vergeht + + + Spiele 100 Tage lang. + + + + Bogenschütze + + + Töte einen Creeper mit Pfeilen. + + + + Scharfschützenduell + + + Töte ein Skelett mit einem Pfeil aus über 50 Meter Entfernung. + + + + DIAMANTEN! + + + Beschaffe mithilfe deiner Eisenwerkzeuge Diamanten. + + + + Zurück zum Absender + + + Zerstöre einen Ghast mit einem Feuerball. + + + + Spiel mit dem Feuer + + + Erleichtere eine Lohe um ihre Rute. + + + + Alchemie + + + Braue einen Trank. + + + + Das Ende? + + + Betritt ein Endportal. + + + + Das Ende. + + + Töte den Enderdrachen. + + + + Zauberer + + + Baue einen Zaubertisch. + + + + Meister des Kampfes + + + Verursache mit einem Schlag neun Herzen Schaden. + + + + Bibliothekar + + + Baue Bücherregale, um deinen Zaubertisch zu verbessern. + + + + Abenteurerzeit + + + Entdecke 17 der 40 verschiedenen Biome. + + + + Nachzucht + + + Züchte zwei Kühe mit Weizen. + + + + Diamanten für dich! + + + Mit Diamanten nach einem anderen Spieler geworfen. + + + + Der Feilscher + + + 30 Smaragde abgebaut oder gekauft. + + + + Topfbepflanzer + + + Stell einen Blumentopf her und platziere ihn. + + + + Schilderwald + + + Ein Schild hergestellt und platziert. + + + + Starker Magen + + + Halte den Hungertod mit verrottetem Fleisch auf. + + + + Scher dich zum Schaf + + + Eine Schere verwendet, um Wolle von einem Schaf zu erhalten. + + + + Regenbogensammlung + + + Sammle Wolle in allen 16 Farben. + + + + Cool bleiben + + + Schwimme in Lava, während du den Feuerwiderstand-Effekt hast. + + + + Bruchsteinreich + + + Baue 1.728 Bruchsteine ab und lege sie in eine Truhe. + + + + Erneuerbare Energie + + + Verkohle Baumstämme mit Holzkohle, um mehr Holzkohle herzustellen. + + + + Musik in meinen Ohren + + + Spiele eine Schallplatte in einem Plattenspieler ab. + + + + Leibwächter + + + Erschaffe einen Eisengolem. + + + + Eisenmann + + + Trage eine komplette Eisenrüstung. + + + + Zombie-Doktor + + + Heile einen Zombie-Dorfbewohner. + + + + Löwenbändiger + + + Zähme einen Ozelot. + + + Minecraft verlassen + + + Sprachen + \ No newline at end of file diff --git a/Minecraft.Client/Windows64Media/loc/de-DE/stringsLanguages.xml b/Minecraft.Client/Windows64Media/loc/de-DE/stringsLanguages.xml new file mode 100644 index 00000000..f316aaf5 --- /dev/null +++ b/Minecraft.Client/Windows64Media/loc/de-DE/stringsLanguages.xml @@ -0,0 +1,40 @@ + + + Systemsprache + Englisch + + Deutsch + + Spanisch + Spanisch (Spanien) + Spanisch (Lateinamerika) + + Französisch + + Italienisch + + Portugiesisch + Portugiesisch (Portugal) + Portugiesisch (Brasilien) + + Japanisch + + Koreanisch + + Chinesisch (Traditionell) + Chinesisch (Vereinfacht) + + Dänisch + Finnisch + + Niederländisch + + Polnisch + Russisch + Schwedisch + Norwegisch + + Griechisch + + Türkisch + \ No newline at end of file diff --git a/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml b/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml index b5e58a9b..b3593f5e 100644 --- a/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml +++ b/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml @@ -8814,4 +8814,106 @@ All Ender Chests in a world are linked. Items placed into an Ender Chest are acc Exit Minecraft + + Taking Inventory + Open your inventory. + Getting Wood + Punch a tree until a block of wood pops out. + Benchmarking + Craft a Workbench with four blocks of Wooden Planks. + Time to Mine! + Use Planks and Sticks to make a Pickaxe. + Hot Topic + Construct a Furnace out of eight Cobblestone blocks. + Acquire Hardware + Smelt an Iron Ingot. + Time to Farm! + Make a Hoe. + Bake Bread + Turn Wheat into Bread. + The Lie + Bake a Cake using: Wheat, Sugar, Milk and Eggs. + Getting an Upgrade + Construct a better pickaxe. + Delicious Fish + Catch and cook Fish! + On A Rail + Travel by Minecart to a point at least 500m in a single direction from where you started. + Time to Strike! + Use Planks and Sticks to make a Sword. + Monster Hunter + Attack and destroy a monster. + Cow Tipper + Harvest some leather. + When Pigs Fly + Use a Saddle to ride a Pig, and then have the Pig get hurt from fall damage while riding it. + Leader of the Pack + Befriend five Wolves. + MOAR Tools + Construct one type of each tool. + Dispense With This + Construct a dispenser. + Into The Nether + Construct a Nether Portal. + Pork Chop + Cook and eat a Pork Chop. + Passing the Time + Play for 100 days. + Archer + Kill a Creeper with Arrows. + Sniper Duel + Kill a Skeleton with an Arrow from more than 50 meters. + DIAMONDS! + Acquire diamonds with your iron tools. + Return to Sender + Destroy a Ghast with a Fireball. + Into Fire + Relieve a Blaze of its rod. + Local Brewery + Brew a potion. + The End? + Enter an End Portal. + The End. + Kill the Enderdragon. + Enchanter + Construct an Enchantment Table. + Overkill + Deal nine hearts of damage in a single hit. + Librarian + Build some Bookshelves to improve your Enchantment Table. + Adventuring Time + Discover all biomes. + Repopulation + Breed two Cows with Wheat. + Diamonds to you! + Throw diamonds to another player. + The Haggler + Mine or purchase 30 Emeralds. + Pot Planter + Craft and place a Flower pot. + It's a Sign! + Craft and place a sign. + Iron Belly + Stop starvation using rotten flesh. + Have a Shearful Day + Use Shears to obtain Wool from a Sheep. + Rainbow Collection + Gather all 16 colors of Wool. + Stayin' Frosty + Swim in Lava while having the Fire Resistance effect. + Chestful of Cobblestone + Mine 1,728 Cobblestone and place it in a Chest. + Renewable Energy + Smelt Wood Trunks using Charcoal to make more Charcoal. + Music to my Ears + Play a Music Disc in a Jukebox. + Body Guard + Create an Iron Golem. + Iron Man + Wear a full suit of Iron Armor. + Zombie Doctor + Cure a Zombie Villager. + Lion Tamer + Tame an ocelot. + Hold {*CONTROLLER_VK_Y*} to view \ No newline at end of file diff --git a/Minecraft.Client/Windows64Media/strings.h b/Minecraft.Client/Windows64Media/strings.h index 19a50eee..57611efc 100644 --- a/Minecraft.Client/Windows64Media/strings.h +++ b/Minecraft.Client/Windows64Media/strings.h @@ -1,7 +1,7 @@ #pragma once // Auto-generated by StringTable builder — do not edit manually. // Source language: en-US -// Total strings: 2287 +// Total strings: 2388 #define IDS_NULL 0 #define IDS_OK 1 @@ -67,8 +67,8 @@ #define IDS_CHAT_RESTRICTION_UGC 61 #define IDS_CONTENT_RESTRICTION 62 #define IDS_ONLINE_SERVICE_TITLE 63 -#define IDS_ERROR_PSN_SIGN_OUT 64 -#define IDS_ERROR_PSN_SIGN_OUT_EXIT 65 +#define IDS_ERROR_LCEN_SIGN_OUT 64 +#define IDS_ERROR_LCEN_SIGN_OUT_EXIT 65 #define IDS_PLAYER_LIST_TITLE 66 #define IDS_DLC_PRICE_FREE 67 #define IDS_CORRUPT_OPTIONS 68 @@ -2166,127 +2166,228 @@ #define IDS_CONNECTION_FAILED_NO_SD_SPLITSCREEN 2160 #define IDS_TOOLTIPS_CURE 2161 #define IDS_WINDOWS_EXIT 2162 -#define IDS_LANG_SYSTEM 2163 -#define IDS_LANG_ENGLISH 2164 -#define IDS_LANG_GERMAN 2165 -#define IDS_LANG_SPANISH 2166 -#define IDS_LANG_SPANISH_SPAIN 2167 -#define IDS_LANG_SPANISH_LATIN_AMERICA 2168 -#define IDS_LANG_FRENCH 2169 -#define IDS_LANG_ITALIAN 2170 -#define IDS_LANG_PORTUGUESE 2171 -#define IDS_LANG_PORTUGUESE_PORTUGAL 2172 -#define IDS_LANG_PORTUGUESE_BRAZIL 2173 -#define IDS_LANG_JAPANESE 2174 -#define IDS_LANG_KOREAN 2175 -#define IDS_LANG_CHINESE_TRADITIONAL 2176 -#define IDS_LANG_CHINESE_SIMPLIFIED 2177 -#define IDS_LANG_DANISH 2178 -#define IDS_LANG_FINISH 2179 -#define IDS_LANG_DUTCH 2180 -#define IDS_LANG_POLISH 2181 -#define IDS_LANG_RUSSIAN 2182 -#define IDS_LANG_SWEDISH 2183 -#define IDS_LANG_NORWEGIAN 2184 -#define IDS_LANG_GREEK 2185 -#define IDS_LANG_TURKISH 2186 -#define IDS_LEADERBOARD_KILLS_EASY 2187 -#define IDS_LEADERBOARD_KILLS_NORMAL 2188 -#define IDS_LEADERBOARD_KILLS_HARD 2189 -#define IDS_LEADERBOARD_MINING_BLOCKS_PEACEFUL 2190 -#define IDS_LEADERBOARD_MINING_BLOCKS_EASY 2191 -#define IDS_LEADERBOARD_MINING_BLOCKS_NORMAL 2192 -#define IDS_LEADERBOARD_MINING_BLOCKS_HARD 2193 -#define IDS_LEADERBOARD_FARMING_PEACEFUL 2194 -#define IDS_LEADERBOARD_FARMING_EASY 2195 -#define IDS_LEADERBOARD_FARMING_NORMAL 2196 -#define IDS_LEADERBOARD_FARMING_HARD 2197 -#define IDS_LEADERBOARD_TRAVELLING_PEACEFUL 2198 -#define IDS_LEADERBOARD_TRAVELLING_EASY 2199 -#define IDS_LEADERBOARD_TRAVELLING_NORMAL 2200 -#define IDS_LEADERBOARD_TRAVELLING_HARD 2201 -#define IDS_TIPS_GAMETIP_0 2202 -#define IDS_TIPS_GAMETIP_1 2203 -#define IDS_TIPS_GAMETIP_48 2204 -#define IDS_TIPS_GAMETIP_44 2205 -#define IDS_TIPS_GAMETIP_45 2206 -#define IDS_TIPS_TRIVIA_4 2207 -#define IDS_TIPS_TRIVIA_17 2208 -#define IDS_HOW_TO_PLAY_MULTIPLAYER 2209 -#define IDS_HOW_TO_PLAY_SOCIALMEDIA 2210 -#define IDS_HOW_TO_PLAY_CREATIVE 2211 -#define IDS_TUTORIAL_TASK_FLY 2212 -#define IDS_TOOLTIPS_SELECTDEVICE 2213 -#define IDS_TOOLTIPS_CHANGEDEVICE 2214 -#define IDS_TOOLTIPS_VIEW_GAMERCARD 2215 -#define IDS_TOOLTIPS_VIEW_GAMERPROFILE 2216 -#define IDS_TOOLTIPS_INVITE_PARTY 2217 -#define IDS_CONFIRM_START_CREATIVE 2218 -#define IDS_CONFIRM_START_SAVEDINCREATIVE 2219 -#define IDS_CONFIRM_START_SAVEDINCREATIVE_CONTINUE 2220 -#define IDS_CONFIRM_START_HOST_PRIVILEGES 2221 -#define IDS_CONNECTION_LOST_LIVE 2222 -#define IDS_CONNECTION_LOST_LIVE_NO_EXIT 2223 -#define IDS_AWARD_AVATAR1 2224 -#define IDS_AWARD_AVATAR2 2225 -#define IDS_AWARD_AVATAR3 2226 -#define IDS_AWARD_THEME 2227 -#define IDS_UNLOCK_ACHIEVEMENT_TEXT 2228 -#define IDS_UNLOCK_AVATAR_TEXT 2229 -#define IDS_UNLOCK_GAMERPIC_TEXT 2230 -#define IDS_UNLOCK_THEME_TEXT 2231 -#define IDS_UNLOCK_ACCEPT_INVITE 2232 -#define IDS_UNLOCK_GUEST_TEXT 2233 -#define IDS_LEADERBOARD_GAMERTAG 2234 -#define IDS_GROUPNAME_POTIONS_480 2235 -#define IDS_RETURNEDTOTITLESCREEN_TEXT 2236 -#define IDS_TRIALOVER_TEXT 2237 -#define IDS_FATAL_ERROR_TEXT 2238 -#define IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT 2239 -#define IDS_NO_MULTIPLAYER_PRIVILEGE_HOST_TEXT 2240 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_SINGLE_LOCAL 2241 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_ALL_LOCAL 2242 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_REMOTE 2243 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE 2244 -#define IDS_SAVE_ICON_MESSAGE 2245 -#define IDS_GAMEOPTION_HOST_PRIVILEGES 2246 -#define IDS_CHECKBOX_DISPLAY_SPLITSCREENGAMERTAGS 2247 -#define IDS_ACHIEVEMENTS 2248 -#define IDS_LABEL_GAMERTAGS 2249 -#define IDS_IN_GAME_GAMERTAGS 2250 -#define IDS_SOCIAL_DEFAULT_DESCRIPTION 2251 -#define IDS_TITLE_UPDATE_NAME 2252 -#define IDS_PLATFORM_NAME 2253 -#define IDS_BACK_BUTTON 2254 -#define IDS_HOST_OPTION_DISABLES_ACHIEVEMENTS 2255 -#define IDS_KICK_PLAYER_DESCRIPTION 2256 -#define IDS_USING_TRIAL_TEXUREPACK_WARNING 2257 -#define IDS_WORLD_SIZE_TITLE_SMALL 2258 -#define IDS_WORLD_SIZE_TITLE_MEDIUM 2259 -#define IDS_WORLD_SIZE_TITLE_LARGE 2260 -#define IDS_WORLD_SIZE_TITLE_CLASSIC 2261 -#define IDS_WORLD_SIZE 2262 -#define IDS_GAMEOPTION_WORLD_SIZE 2263 -#define IDS_DISABLE_SAVING 2264 -#define IDS_GAMEOPTION_DISABLE_SAVING 2265 -#define IDS_RICHPRESENCE_GAMESTATE 2266 -#define IDS_RICHPRESENCE_IDLE 2267 -#define IDS_RICHPRESENCE_MENUS 2268 -#define IDS_RICHPRESENCE_MULTIPLAYER 2269 -#define IDS_RICHPRESENCE_MULTIPLAYEROFFLINE 2270 -#define IDS_RICHPRESENCE_MULTIPLAYER_1P 2271 -#define IDS_RICHPRESENCE_MULTIPLAYER_1POFFLINE 2272 -#define IDS_RICHPRESENCESTATE_BLANK 2273 -#define IDS_RICHPRESENCESTATE_RIDING_PIG 2274 -#define IDS_RICHPRESENCESTATE_RIDING_MINECART 2275 -#define IDS_RICHPRESENCESTATE_BOATING 2276 -#define IDS_RICHPRESENCESTATE_FISHING 2277 -#define IDS_RICHPRESENCESTATE_CRAFTING 2278 -#define IDS_RICHPRESENCESTATE_FORGING 2279 -#define IDS_RICHPRESENCESTATE_NETHER 2280 -#define IDS_RICHPRESENCESTATE_CD 2281 -#define IDS_RICHPRESENCESTATE_MAP 2282 -#define IDS_RICHPRESENCESTATE_ENCHANTING 2283 -#define IDS_RICHPRESENCESTATE_BREWING 2284 -#define IDS_RICHPRESENCESTATE_ANVIL 2285 -#define IDS_RICHPRESENCESTATE_TRADING 2286 +#define IDS_ACHIEVE_NAME_TAKING_INVENTORY 2163 +#define IDS_ACHIEVE_DESC_TAKING_INVENTORY 2164 +#define IDS_ACHIEVE_NAME_GETTING_WOOD 2165 +#define IDS_ACHIEVE_DESC_GETTING_WOOD 2166 +#define IDS_ACHIEVE_NAME_BENCHMARKING 2167 +#define IDS_ACHIEVE_DESC_BENCHMARKING 2168 +#define IDS_ACHIEVE_NAME_TIME_TO_MINE 2169 +#define IDS_ACHIEVE_DESC_TIME_TO_MINE 2170 +#define IDS_ACHIEVE_NAME_HOT_TOPIC 2171 +#define IDS_ACHIEVE_DESC_HOT_TOPIC 2172 +#define IDS_ACHIEVE_NAME_ACQUIRE_HARDWARE 2173 +#define IDS_ACHIEVE_DESC_ACQUIRE_HARDWARE 2174 +#define IDS_ACHIEVE_NAME_TIME_TO_FARM 2175 +#define IDS_ACHIEVE_DESC_TIME_TO_FARM 2176 +#define IDS_ACHIEVE_NAME_BAKE_BREAD 2177 +#define IDS_ACHIEVE_DESC_BAKE_BREAD 2178 +#define IDS_ACHIEVE_NAME_THE_LIE 2179 +#define IDS_ACHIEVE_DESC_THE_LIE 2180 +#define IDS_ACHIEVE_NAME_GETTING_AN_UPGRADE 2181 +#define IDS_ACHIEVE_DESC_GETTING_AN_UPGRADE 2182 +#define IDS_ACHIEVE_NAME_DELICIOUS_FISH 2183 +#define IDS_ACHIEVE_DESC_DELICIOUS_FISH 2184 +#define IDS_ACHIEVE_NAME_ON_A_RAIL 2185 +#define IDS_ACHIEVE_DESC_ON_A_RAIL 2186 +#define IDS_ACHIEVE_NAME_TIME_TO_STRIKE 2187 +#define IDS_ACHIEVE_DESC_TIME_TO_STRIKE 2188 +#define IDS_ACHIEVE_NAME_MONSTER_HUNTER 2189 +#define IDS_ACHIEVE_DESC_MONSTER_HUNTER 2190 +#define IDS_ACHIEVE_NAME_COW_TIPPER 2191 +#define IDS_ACHIEVE_DESC_COW_TIPPER 2192 +#define IDS_ACHIEVE_NAME_WHEN_PIGS_FLY 2193 +#define IDS_ACHIEVE_DESC_WHEN_PIGS_FLY 2194 +#define IDS_ACHIEVE_NAME_LEADER_OF_THE_PACK 2195 +#define IDS_ACHIEVE_DESC_LEADER_OF_THE_PACK 2196 +#define IDS_ACHIEVE_NAME_MOAR_TOOLS 2197 +#define IDS_ACHIEVE_DESC_MOAR_TOOLS 2198 +#define IDS_ACHIEVE_NAME_DISPENSE_WITH_THIS 2199 +#define IDS_ACHIEVE_DESC_DISPENSE_WITH_THIS 2200 +#define IDS_ACHIEVE_NAME_INTO_THE_NETHER 2201 +#define IDS_ACHIEVE_DESC_INTO_THE_NETHER 2202 +#define IDS_ACHIEVE_NAME_EAT_PORKCHOP 2203 +#define IDS_ACHIEVE_DESC_EAT_PORKCHOP 2204 +#define IDS_ACHIEVE_NAME_PLAY_100_DAYS 2205 +#define IDS_ACHIEVE_DESC_PLAY_100_DAYS 2206 +#define IDS_ACHIEVE_NAME_ARROW_KILL_CREEPER 2207 +#define IDS_ACHIEVE_DESC_ARROW_KILL_CREEPER 2208 +#define IDS_ACHIEVE_NAME_SNIPESKELETON 2209 +#define IDS_ACHIEVE_DESC_SNIPESKELETON 2210 +#define IDS_ACHIEVE_NAME_DIAMONDS 2211 +#define IDS_ACHIEVE_DESC_DIAMONDS 2212 +#define IDS_ACHIEVE_NAME_GHAST 2213 +#define IDS_ACHIEVE_DESC_GHAST 2214 +#define IDS_ACHIEVE_NAME_BLAZEROD 2215 +#define IDS_ACHIEVE_DESC_BLAZEROD 2216 +#define IDS_ACHIEVE_NAME_POTION 2217 +#define IDS_ACHIEVE_DESC_POTION 2218 +#define IDS_ACHIEVE_NAME_THE_END 2219 +#define IDS_ACHIEVE_DESC_THE_END 2220 +#define IDS_ACHIEVE_NAME_WINGAME 2221 +#define IDS_ACHIEVE_DESC_WINGAME 2222 +#define IDS_ACHIEVE_NAME_ENCHANTMENTS 2223 +#define IDS_ACHIEVE_DESC_ENCHANTMENTS 2224 +#define IDS_ACHIEVE_NAME_OVERKILL 2225 +#define IDS_ACHIEVE_DESC_OVERKILL 2226 +#define IDS_ACHIEVE_NAME_BOOKCASE 2227 +#define IDS_ACHIEVE_DESC_BOOKCASE 2228 +#define IDS_ACHIEVE_NAME_ADVENTURING_TIME 2229 +#define IDS_ACHIEVE_DESC_ADVENTURING_TIME 2230 +#define IDS_ACHIEVE_NAME_REPOPULATION 2231 +#define IDS_ACHIEVE_DESC_REPOPULATION 2232 +#define IDS_ACHIEVE_NAME_DIAMONDS_TO_YOU 2233 +#define IDS_ACHIEVE_DESC_DIAMONDS_TO_YOU 2234 +#define IDS_ACHIEVE_NAME_THE_HAGGLER 2235 +#define IDS_ACHIEVE_DESC_THE_HAGGLER 2236 +#define IDS_ACHIEVE_NAME_POT_PLANTER 2237 +#define IDS_ACHIEVE_DESC_POT_PLANTER 2238 +#define IDS_ACHIEVE_NAME_ITS_A_SIGN 2239 +#define IDS_ACHIEVE_DESC_ITS_A_SIGN 2240 +#define IDS_ACHIEVE_NAME_IRON_BELLY 2241 +#define IDS_ACHIEVE_DESC_IRON_BELLY 2242 +#define IDS_ACHIEVE_NAME_HAVE_A_SHEARFUL_DAY 2243 +#define IDS_ACHIEVE_DESC_HAVE_A_SHEARFUL_DAY 2244 +#define IDS_ACHIEVE_NAME_RAINBOW_COLLECTION 2245 +#define IDS_ACHIEVE_DESC_RAINBOW_COLLECTION 2246 +#define IDS_ACHIEVE_NAME_STAYING_FROSTY 2247 +#define IDS_ACHIEVE_DESC_STAYING_FROSTY 2248 +#define IDS_ACHIEVE_NAME_CHESTFUL_OF_COBBLESTONE 2249 +#define IDS_ACHIEVE_DESC_CHESTFUL_OF_COBBLESTONE 2250 +#define IDS_ACHIEVE_NAME_RENEWABLE_ENERGY 2251 +#define IDS_ACHIEVE_DESC_RENEWABLE_ENERGY 2252 +#define IDS_ACHIEVE_NAME_MUSIC_TO_MY_EARS 2253 +#define IDS_ACHIEVE_DESC_MUSIC_TO_MY_EARS 2254 +#define IDS_ACHIEVE_NAME_BODYGUARD 2255 +#define IDS_ACHIEVE_DESC_BODYGUARD 2256 +#define IDS_ACHIEVE_NAME_IRON_MAN 2257 +#define IDS_ACHIEVE_DESC_IRON_MAN 2258 +#define IDS_ACHIEVE_NAME_ZOMBIE_DOCTOR 2259 +#define IDS_ACHIEVE_DESC_ZOMBIE_DOCTOR 2260 +#define IDS_ACHIEVE_NAME_LION_TAMER 2261 +#define IDS_ACHIEVE_DESC_LION_TAMER 2262 +#define IDS_ACHIEVEMENT_VIEW 2263 +#define IDS_LANG_SYSTEM 2264 +#define IDS_LANG_ENGLISH 2265 +#define IDS_LANG_GERMAN 2266 +#define IDS_LANG_SPANISH 2267 +#define IDS_LANG_SPANISH_SPAIN 2268 +#define IDS_LANG_SPANISH_LATIN_AMERICA 2269 +#define IDS_LANG_FRENCH 2270 +#define IDS_LANG_ITALIAN 2271 +#define IDS_LANG_PORTUGUESE 2272 +#define IDS_LANG_PORTUGUESE_PORTUGAL 2273 +#define IDS_LANG_PORTUGUESE_BRAZIL 2274 +#define IDS_LANG_JAPANESE 2275 +#define IDS_LANG_KOREAN 2276 +#define IDS_LANG_CHINESE_TRADITIONAL 2277 +#define IDS_LANG_CHINESE_SIMPLIFIED 2278 +#define IDS_LANG_DANISH 2279 +#define IDS_LANG_FINISH 2280 +#define IDS_LANG_DUTCH 2281 +#define IDS_LANG_POLISH 2282 +#define IDS_LANG_RUSSIAN 2283 +#define IDS_LANG_SWEDISH 2284 +#define IDS_LANG_NORWEGIAN 2285 +#define IDS_LANG_GREEK 2286 +#define IDS_LANG_TURKISH 2287 +#define IDS_LEADERBOARD_KILLS_EASY 2288 +#define IDS_LEADERBOARD_KILLS_NORMAL 2289 +#define IDS_LEADERBOARD_KILLS_HARD 2290 +#define IDS_LEADERBOARD_MINING_BLOCKS_PEACEFUL 2291 +#define IDS_LEADERBOARD_MINING_BLOCKS_EASY 2292 +#define IDS_LEADERBOARD_MINING_BLOCKS_NORMAL 2293 +#define IDS_LEADERBOARD_MINING_BLOCKS_HARD 2294 +#define IDS_LEADERBOARD_FARMING_PEACEFUL 2295 +#define IDS_LEADERBOARD_FARMING_EASY 2296 +#define IDS_LEADERBOARD_FARMING_NORMAL 2297 +#define IDS_LEADERBOARD_FARMING_HARD 2298 +#define IDS_LEADERBOARD_TRAVELLING_PEACEFUL 2299 +#define IDS_LEADERBOARD_TRAVELLING_EASY 2300 +#define IDS_LEADERBOARD_TRAVELLING_NORMAL 2301 +#define IDS_LEADERBOARD_TRAVELLING_HARD 2302 +#define IDS_TIPS_GAMETIP_0 2303 +#define IDS_TIPS_GAMETIP_1 2304 +#define IDS_TIPS_GAMETIP_48 2305 +#define IDS_TIPS_GAMETIP_44 2306 +#define IDS_TIPS_GAMETIP_45 2307 +#define IDS_TIPS_TRIVIA_4 2308 +#define IDS_TIPS_TRIVIA_17 2309 +#define IDS_HOW_TO_PLAY_MULTIPLAYER 2310 +#define IDS_HOW_TO_PLAY_SOCIALMEDIA 2311 +#define IDS_HOW_TO_PLAY_CREATIVE 2312 +#define IDS_TUTORIAL_TASK_FLY 2313 +#define IDS_TOOLTIPS_SELECTDEVICE 2314 +#define IDS_TOOLTIPS_CHANGEDEVICE 2315 +#define IDS_TOOLTIPS_VIEW_GAMERCARD 2316 +#define IDS_TOOLTIPS_VIEW_GAMERPROFILE 2317 +#define IDS_TOOLTIPS_INVITE_PARTY 2318 +#define IDS_CONFIRM_START_CREATIVE 2319 +#define IDS_CONFIRM_START_SAVEDINCREATIVE 2320 +#define IDS_CONFIRM_START_SAVEDINCREATIVE_CONTINUE 2321 +#define IDS_CONFIRM_START_HOST_PRIVILEGES 2322 +#define IDS_CONNECTION_LOST_LIVE 2323 +#define IDS_CONNECTION_LOST_LIVE_NO_EXIT 2324 +#define IDS_AWARD_AVATAR1 2325 +#define IDS_AWARD_AVATAR2 2326 +#define IDS_AWARD_AVATAR3 2327 +#define IDS_AWARD_THEME 2328 +#define IDS_UNLOCK_ACHIEVEMENT_TEXT 2329 +#define IDS_UNLOCK_AVATAR_TEXT 2330 +#define IDS_UNLOCK_GAMERPIC_TEXT 2331 +#define IDS_UNLOCK_THEME_TEXT 2332 +#define IDS_UNLOCK_ACCEPT_INVITE 2333 +#define IDS_UNLOCK_GUEST_TEXT 2334 +#define IDS_LEADERBOARD_GAMERTAG 2335 +#define IDS_GROUPNAME_POTIONS_480 2336 +#define IDS_RETURNEDTOTITLESCREEN_TEXT 2337 +#define IDS_TRIALOVER_TEXT 2338 +#define IDS_FATAL_ERROR_TEXT 2339 +#define IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT 2340 +#define IDS_NO_MULTIPLAYER_PRIVILEGE_HOST_TEXT 2341 +#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_SINGLE_LOCAL 2342 +#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_ALL_LOCAL 2343 +#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_REMOTE 2344 +#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE 2345 +#define IDS_SAVE_ICON_MESSAGE 2346 +#define IDS_GAMEOPTION_HOST_PRIVILEGES 2347 +#define IDS_CHECKBOX_DISPLAY_SPLITSCREENGAMERTAGS 2348 +#define IDS_ACHIEVEMENTS 2349 +#define IDS_LABEL_GAMERTAGS 2350 +#define IDS_IN_GAME_GAMERTAGS 2351 +#define IDS_SOCIAL_DEFAULT_DESCRIPTION 2352 +#define IDS_TITLE_UPDATE_NAME 2353 +#define IDS_PLATFORM_NAME 2354 +#define IDS_BACK_BUTTON 2355 +#define IDS_HOST_OPTION_DISABLES_ACHIEVEMENTS 2356 +#define IDS_KICK_PLAYER_DESCRIPTION 2357 +#define IDS_USING_TRIAL_TEXUREPACK_WARNING 2358 +#define IDS_WORLD_SIZE_TITLE_SMALL 2359 +#define IDS_WORLD_SIZE_TITLE_MEDIUM 2360 +#define IDS_WORLD_SIZE_TITLE_LARGE 2361 +#define IDS_WORLD_SIZE_TITLE_CLASSIC 2362 +#define IDS_WORLD_SIZE 2363 +#define IDS_GAMEOPTION_WORLD_SIZE 2364 +#define IDS_DISABLE_SAVING 2365 +#define IDS_GAMEOPTION_DISABLE_SAVING 2366 +#define IDS_RICHPRESENCE_GAMESTATE 2367 +#define IDS_RICHPRESENCE_IDLE 2368 +#define IDS_RICHPRESENCE_MENUS 2369 +#define IDS_RICHPRESENCE_MULTIPLAYER 2370 +#define IDS_RICHPRESENCE_MULTIPLAYEROFFLINE 2371 +#define IDS_RICHPRESENCE_MULTIPLAYER_1P 2372 +#define IDS_RICHPRESENCE_MULTIPLAYER_1POFFLINE 2373 +#define IDS_RICHPRESENCESTATE_BLANK 2374 +#define IDS_RICHPRESENCESTATE_RIDING_PIG 2375 +#define IDS_RICHPRESENCESTATE_RIDING_MINECART 2376 +#define IDS_RICHPRESENCESTATE_BOATING 2377 +#define IDS_RICHPRESENCESTATE_FISHING 2378 +#define IDS_RICHPRESENCESTATE_CRAFTING 2379 +#define IDS_RICHPRESENCESTATE_FORGING 2380 +#define IDS_RICHPRESENCESTATE_NETHER 2381 +#define IDS_RICHPRESENCESTATE_CD 2382 +#define IDS_RICHPRESENCESTATE_MAP 2383 +#define IDS_RICHPRESENCESTATE_ENCHANTING 2384 +#define IDS_RICHPRESENCESTATE_BREWING 2385 +#define IDS_RICHPRESENCESTATE_ANVIL 2386 +#define IDS_RICHPRESENCESTATE_TRADING 2387 diff --git a/Minecraft.World/Achievement.cpp b/Minecraft.World/Achievement.cpp index e449f776..8dd498ac 100644 --- a/Minecraft.World/Achievement.cpp +++ b/Minecraft.World/Achievement.cpp @@ -8,26 +8,34 @@ void Achievement::_init() { isGoldenVar = false; - if (x < Achievements::xMin) Achievements::xMin = x; if (y < Achievements::yMin) Achievements::yMin = y; if (x > Achievements::xMax) Achievements::xMax = x; if (y > Achievements::yMax) Achievements::yMax = y; } -Achievement::Achievement(int id, const wstring& name, int x, int y, Item *icon, Achievement *reqs) +Achievement::Achievement(int id, const wstring& name, int x, int y, Item *icon, Achievement *reqs, string iconI, int nameID1, int descID1) : Stat( Achievements::ACHIEVEMENT_OFFSET + id, I18n::get(wstring(L"achievement.").append(name)) ), desc( I18n::get(wstring(L"achievement.").append(name).append(L".desc"))), icon( new ItemInstance(icon) ), x(x), y(y), reqs(reqs) { + iconInt = iconI; + nameID = nameID1; + descID = descID1; } -Achievement::Achievement(int id, const wstring& name, int x, int y, Tile *icon, Achievement *reqs) +Achievement::Achievement(int id, const wstring& name, int x, int y, Tile *icon, Achievement *reqs, string iconI, int nameID1, int descID1) : Stat( Achievements::ACHIEVEMENT_OFFSET + id, I18n::get(wstring(L"achievement.").append(name)) ), desc( I18n::get(wstring(L"achievement.").append(name).append(L".desc"))), icon( new ItemInstance(icon) ), x(x), y(y), reqs(reqs) { + iconInt = iconI; + nameID = nameID1; + descID = descID1; } -Achievement::Achievement(int id, const wstring& name, int x, int y, shared_ptr icon, Achievement *reqs) +Achievement::Achievement(int id, const wstring& name, int x, int y, shared_ptr icon, Achievement *reqs, string iconI, int nameID1, int descID1) : Stat( Achievements::ACHIEVEMENT_OFFSET + id, I18n::get(wstring(L"achievement.").append(name)) ), desc( I18n::get(wstring(L"achievement.").append(name).append(L".desc"))), icon(icon), x(x), y(y), reqs(reqs) { + iconInt = iconI; + nameID = nameID1; + descID = descID1; } Achievement *Achievement::setAwardLocallyOnly() @@ -45,9 +53,7 @@ Achievement *Achievement::setGolden() Achievement *Achievement::postConstruct() { Stat::postConstruct(); - Achievements::achievements->push_back(this); - return this; } @@ -79,4 +85,4 @@ bool Achievement::isGolden() int Achievement::getAchievementID() { return id - Achievements::ACHIEVEMENT_OFFSET; -} +} \ No newline at end of file diff --git a/Minecraft.World/Achievement.h b/Minecraft.World/Achievement.h index 08ec5df9..04ede7c7 100644 --- a/Minecraft.World/Achievement.h +++ b/Minecraft.World/Achievement.h @@ -10,6 +10,9 @@ class Achievement : public Stat public: const int x, y; Achievement *reqs; + string iconInt; + int nameID; + int descID; private: const wstring desc; @@ -23,9 +26,9 @@ private: void _init(); public: - Achievement(int id, const wstring& name, int x, int y, Item *icon, Achievement *reqs); - Achievement(int id, const wstring& name, int x, int y, Tile *icon, Achievement *reqs); - Achievement(int id, const wstring& name, int x, int y, shared_ptr icon, Achievement *reqs); + Achievement(int id, const wstring& name, int x, int y, Item* icon, Achievement* reqs, string iconI = "", int nameID = 0, int descID = 0); + Achievement(int id, const wstring& name, int x, int y, Tile* icon, Achievement* reqs, string iconI = "", int nameID = 0, int descID = 0); + Achievement(int id, const wstring& name, int x, int y, shared_ptr icon, Achievement* reqs, string iconI = "", int nameID = 0, int descID = 0); Achievement *setAwardLocallyOnly(); Achievement *setGolden(); diff --git a/Minecraft.World/Achievements.cpp b/Minecraft.World/Achievements.cpp index 1b00acc0..b62dd1fb 100644 --- a/Minecraft.World/Achievements.cpp +++ b/Minecraft.World/Achievements.cpp @@ -53,14 +53,14 @@ Achievement *Achievements::dispenseWithThis = nullptr; Achievement *Achievements::InToTheNether = nullptr; // 4J : WESTY : Added other awards. -Achievement *Achievements::socialPost = nullptr; +//Achievement *Achievements::socialPost = nullptr; Achievement *Achievements::eatPorkChop = nullptr; Achievement *Achievements::play100Days = nullptr; Achievement *Achievements::arrowKillCreeper = nullptr; -Achievement *Achievements::mine100Blocks = nullptr; -Achievement *Achievements::kill10Creepers = nullptr; +//Achievement *Achievements::mine100Blocks = nullptr; +//Achievement *Achievements::kill10Creepers = nullptr; + -#ifdef _EXTENDED_ACHIEVEMENTS Achievement *Achievements::overkill = nullptr; // Restored old achivements. Achievement *Achievements::bookcase = nullptr; // Restored old achivements. @@ -85,46 +85,46 @@ Achievement *Achievements::bodyGuard = nullptr; Achievement *Achievements::ironMan = nullptr; Achievement *Achievements::zombieDoctor = nullptr; Achievement *Achievements::lionTamer = nullptr; -#endif + void Achievements::staticCtor() { - Achievements::openInventory = (new Achievement(eAward_TakingInventory, L"openInventory", 0, 0, Item::book, nullptr))->setAwardLocallyOnly()->postConstruct(); - Achievements::mineWood = (new Achievement(eAward_GettingWood, L"mineWood", 2, 1, Tile::treeTrunk, (Achievement *) openInventory))->postConstruct(); - Achievements::buildWorkbench = (new Achievement(eAward_Benchmarking, L"buildWorkBench", 4, -1, Tile::workBench, (Achievement *) mineWood))->postConstruct(); - Achievements::buildPickaxe = (new Achievement(eAward_TimeToMine, L"buildPickaxe", 4, 2, Item::pickAxe_wood, (Achievement *) buildWorkbench))->postConstruct(); - Achievements::buildFurnace = (new Achievement(eAward_HotTopic, L"buildFurnace", 3, 4, Tile::furnace_lit, (Achievement *) buildPickaxe))->postConstruct(); - Achievements::acquireIron = (new Achievement(eAward_AquireHardware, L"acquireIron", 1, 4, Item::ironIngot, (Achievement *) buildFurnace))->postConstruct(); - Achievements::buildHoe = (new Achievement(eAward_TimeToFarm, L"buildHoe", 2, -3, Item::hoe_wood, (Achievement *) buildWorkbench))->postConstruct(); - Achievements::makeBread = (new Achievement(eAward_BakeBread, L"makeBread", -1, -3, Item::bread, (Achievement *) buildHoe))->postConstruct(); - Achievements::bakeCake = (new Achievement(eAward_TheLie, L"bakeCake", 0, -5, Item::cake, (Achievement *) buildHoe))->postConstruct(); - Achievements::buildBetterPickaxe = (new Achievement(eAward_GettingAnUpgrade, L"buildBetterPickaxe", 6, 2, Item::pickAxe_stone, (Achievement *) buildPickaxe))->postConstruct(); - Achievements::cookFish = (new Achievement(eAward_DeliciousFish, L"cookFish", 2, 6, Item::fish_cooked, (Achievement *) buildFurnace))->postConstruct(); - Achievements::onARail = (new Achievement(eAward_OnARail, L"onARail", 2, 3, Tile::rail, (Achievement *) acquireIron))->setGolden()->postConstruct(); - Achievements::buildSword = (new Achievement(eAward_TimeToStrike, L"buildSword", 6, -1, Item::sword_wood, (Achievement *) buildWorkbench))->postConstruct(); - Achievements::killEnemy = (new Achievement(eAward_MonsterHunter, L"killEnemy", 8, -1, Item::bone, (Achievement *) buildSword))->postConstruct(); - Achievements::killCow = (new Achievement(eAward_CowTipper, L"killCow", 7, -3, Item::leather, (Achievement *) buildSword))->postConstruct(); - Achievements::flyPig = (new Achievement(eAward_WhenPigsFly, L"flyPig", 8, -4, Item::saddle, (Achievement *) killCow))->setGolden()->postConstruct(); + Achievements::openInventory = (new Achievement(eAward_TakingInventory, L"openInventory", 0, 0, Item::book, nullptr, "001", IDS_ACHIEVE_NAME_TAKING_INVENTORY, IDS_ACHIEVE_DESC_TAKING_INVENTORY))->setAwardLocallyOnly()->postConstruct(); + Achievements::mineWood = (new Achievement(eAward_GettingWood, L"mineWood", 2, 1, Tile::treeTrunk, (Achievement *) openInventory, "002", IDS_ACHIEVE_NAME_GETTING_WOOD, IDS_ACHIEVE_DESC_GETTING_WOOD))->postConstruct(); + Achievements::buildWorkbench = (new Achievement(eAward_Benchmarking, L"buildWorkBench", 4, -1, Tile::workBench, (Achievement *) mineWood, "003", IDS_ACHIEVE_NAME_BENCHMARKING, IDS_ACHIEVE_DESC_BENCHMARKING))->postConstruct(); + Achievements::buildPickaxe = (new Achievement(eAward_TimeToMine, L"buildPickaxe", 4, 2, Item::pickAxe_wood, (Achievement *) buildWorkbench, "004", IDS_ACHIEVE_NAME_TIME_TO_MINE, IDS_ACHIEVE_DESC_TIME_TO_MINE))->postConstruct(); + Achievements::buildFurnace = (new Achievement(eAward_HotTopic, L"buildFurnace", 3, 4, Tile::furnace_lit, (Achievement *) buildPickaxe, "005", IDS_ACHIEVE_NAME_HOT_TOPIC, IDS_ACHIEVE_DESC_HOT_TOPIC))->postConstruct(); + Achievements::acquireIron = (new Achievement(eAward_AquireHardware, L"acquireIron", 1, 4, Item::ironIngot, (Achievement *) buildFurnace, "006", IDS_ACHIEVE_NAME_ACQUIRE_HARDWARE, IDS_ACHIEVE_DESC_ACQUIRE_HARDWARE))->postConstruct(); + Achievements::buildHoe = (new Achievement(eAward_TimeToFarm, L"buildHoe", 2, -3, Item::hoe_wood, (Achievement *) buildWorkbench, "007", IDS_ACHIEVE_NAME_TIME_TO_FARM, IDS_ACHIEVE_DESC_TIME_TO_FARM))->postConstruct(); + Achievements::makeBread = (new Achievement(eAward_BakeBread, L"makeBread", -1, -3, Item::bread, (Achievement *) buildHoe, "008", IDS_ACHIEVE_NAME_BAKE_BREAD, IDS_ACHIEVE_DESC_BAKE_BREAD))->postConstruct(); + Achievements::bakeCake = (new Achievement(eAward_TheLie, L"bakeCake", 0, -5, Item::cake, (Achievement *) buildHoe, "009", IDS_ACHIEVE_NAME_THE_LIE, IDS_ACHIEVE_DESC_THE_LIE))->postConstruct(); + Achievements::buildBetterPickaxe = (new Achievement(eAward_GettingAnUpgrade, L"buildBetterPickaxe", 6, 2, Item::pickAxe_stone, (Achievement *) buildPickaxe, "010", IDS_ACHIEVE_NAME_GETTING_AN_UPGRADE, IDS_ACHIEVE_DESC_GETTING_AN_UPGRADE))->postConstruct(); + Achievements::cookFish = (new Achievement(eAward_DeliciousFish, L"cookFish", 2, 6, Item::fish_cooked, (Achievement *) buildFurnace, "011", IDS_ACHIEVE_NAME_DELICIOUS_FISH, IDS_ACHIEVE_DESC_DELICIOUS_FISH))->postConstruct(); + Achievements::onARail = (new Achievement(eAward_OnARail, L"onARail", 2, 3, Tile::rail, (Achievement *) acquireIron, "012", IDS_ACHIEVE_NAME_ON_A_RAIL, IDS_ACHIEVE_DESC_ON_A_RAIL))->setGolden()->postConstruct(); + Achievements::buildSword = (new Achievement(eAward_TimeToStrike, L"buildSword", 6, -1, Item::sword_wood, (Achievement *) buildWorkbench, "013", IDS_ACHIEVE_NAME_TIME_TO_STRIKE, IDS_ACHIEVE_DESC_TIME_TO_STRIKE))->postConstruct(); + Achievements::killEnemy = (new Achievement(eAward_MonsterHunter, L"killEnemy", 8, -1, Item::bone, (Achievement *) buildSword, "014", IDS_ACHIEVE_NAME_MONSTER_HUNTER, IDS_ACHIEVE_DESC_MONSTER_HUNTER))->postConstruct(); + Achievements::killCow = (new Achievement(eAward_CowTipper, L"killCow", 7, -3, Item::leather, (Achievement *) buildSword, "015", IDS_ACHIEVE_NAME_COW_TIPPER, IDS_ACHIEVE_DESC_COW_TIPPER))->postConstruct(); + Achievements::flyPig = (new Achievement(eAward_WhenPigsFly, L"flyPig", 8, -4, Item::saddle, (Achievement *) killCow, "016", IDS_ACHIEVE_NAME_WHEN_PIGS_FLY, IDS_ACHIEVE_DESC_WHEN_PIGS_FLY))->setGolden()->postConstruct(); // 4J Stu - The order of these achievemnts is very important, as they map directly to data stored in the profile data. New achievements should be added at the end. // 4J : WESTY : Added new achievements. Note, params "x", "y", "icon" and "requires" are ignored on xbox. - Achievements::leaderOfThePack = (new Achievement(eAward_LeaderOfThePack, L"leaderOfThePack", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->setAwardLocallyOnly()->postConstruct(); - Achievements::MOARTools = (new Achievement(eAward_MOARTools, L"MOARTools", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->setAwardLocallyOnly()->postConstruct(); - Achievements::dispenseWithThis = (new Achievement(eAward_DispenseWithThis, L"dispenseWithThis", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->postConstruct(); - Achievements::InToTheNether = (new Achievement(eAward_InToTheNether, L"InToTheNether", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->postConstruct(); - + Achievements::leaderOfThePack = (new Achievement(eAward_LeaderOfThePack, L"leaderOfThePack", 0, 0, Tile::treeTrunk, (Achievement *) buildSword, "017", IDS_ACHIEVE_NAME_LEADER_OF_THE_PACK, IDS_ACHIEVE_DESC_LEADER_OF_THE_PACK))->setAwardLocallyOnly()->postConstruct(); + Achievements::MOARTools = (new Achievement(eAward_MOARTools, L"MOARTools", 0, 0, Tile::treeTrunk, (Achievement *) buildSword, "018", IDS_ACHIEVE_NAME_MOAR_TOOLS, IDS_ACHIEVE_DESC_MOAR_TOOLS))->setAwardLocallyOnly()->postConstruct(); + Achievements::dispenseWithThis = (new Achievement(eAward_DispenseWithThis, L"dispenseWithThis", 0, 0, Tile::treeTrunk, (Achievement *) buildSword, "019", IDS_ACHIEVE_NAME_DISPENSE_WITH_THIS, IDS_ACHIEVE_DESC_DISPENSE_WITH_THIS))->postConstruct(); + Achievements::InToTheNether = (new Achievement(eAward_InToTheNether, L"InToTheNether", 0, 0, Tile::treeTrunk, (Achievement *) buildSword, "020", IDS_ACHIEVE_NAME_INTO_THE_NETHER, IDS_ACHIEVE_DESC_INTO_THE_NETHER))->postConstruct(); // 4J : WESTY : Added other awards. - Achievements::mine100Blocks = (new Achievement(eAward_mine100Blocks, L"mine100Blocks", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->setAwardLocallyOnly()->postConstruct(); - Achievements::kill10Creepers = (new Achievement(eAward_kill10Creepers, L"kill10Creepers", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->setAwardLocallyOnly()->postConstruct(); + + //Achievements::mine100Blocks = (new Achievement(eAward_mine100Blocks, L"mine100Blocks", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->setAwardLocallyOnly()->postConstruct(); + //Achievements::kill10Creepers = (new Achievement(eAward_kill10Creepers, L"kill10Creepers", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->setAwardLocallyOnly()->postConstruct(); #ifdef _EXTENDED_ACHIEVEMENTS Achievements::eatPorkChop = (new Achievement(eAward_eatPorkChop, L"eatPorkChop", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->setAwardLocallyOnly()->postConstruct(); #else - Achievements::eatPorkChop = (new Achievement(eAward_eatPorkChop, L"eatPorkChop", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->postConstruct(); + Achievements::eatPorkChop = (new Achievement(eAward_eatPorkChop, L"eatPorkChop", 0, 0, Tile::treeTrunk, (Achievement *) buildSword, "034", IDS_ACHIEVE_NAME_EAT_PORKCHOP, IDS_ACHIEVE_DESC_EAT_PORKCHOP))->postConstruct(); #endif - Achievements::play100Days = (new Achievement(eAward_play100Days, L"play100Days", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->setAwardLocallyOnly()->postConstruct(); - Achievements::arrowKillCreeper = (new Achievement(eAward_arrowKillCreeper, L"arrowKillCreeper", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->postConstruct(); - Achievements::socialPost = (new Achievement(eAward_socialPost, L"socialPost", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->postConstruct(); + Achievements::play100Days = (new Achievement(eAward_play100Days, L"play100Days", 0, 0, Tile::treeTrunk, (Achievement *) buildSword, "035", IDS_ACHIEVE_NAME_PLAY_100_DAYS, IDS_ACHIEVE_DESC_PLAY_100_DAYS))->setAwardLocallyOnly()->postConstruct(); + Achievements::arrowKillCreeper = (new Achievement(eAward_arrowKillCreeper, L"arrowKillCreeper", 0, 0, Tile::treeTrunk, (Achievement *) buildSword, "036", IDS_ACHIEVE_NAME_ARROW_KILL_CREEPER, IDS_ACHIEVE_DESC_ARROW_KILL_CREEPER))->postConstruct(); + //Achievements::socialPost = (new Achievement(eAward_socialPost, L"socialPost", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->postConstruct(); #ifndef _XBOX // WARNING: NO NEW ACHIEVMENTS CAN BE ADDED HERE @@ -133,46 +133,43 @@ void Achievements::staticCtor() // 4J Stu - All new Java achievements removed to stop them using the profile data // 4J Stu - This achievment added in 1.8.2, but does not map to any Xbox achievements - Achievements::snipeSkeleton = (new Achievement(eAward_snipeSkeleton, L"snipeSkeleton", 7, 0, Item::bow, (Achievement *) killEnemy))->setGolden()->postConstruct(); + Achievements::snipeSkeleton = (new Achievement(eAward_snipeSkeleton, L"snipeSkeleton", 7, 0, Item::bow, (Achievement *) killEnemy, "021", IDS_ACHIEVE_NAME_SNIPESKELETON, IDS_ACHIEVE_DESC_SNIPESKELETON))->setGolden()->postConstruct(); // 4J Stu - These added in 1.0.1, but do not map to any Xbox achievements - Achievements::diamonds = (new Achievement(eAward_diamonds, L"diamonds", -1, 5, Item::diamond, (Achievement *) acquireIron) )->postConstruct(); + Achievements::diamonds = (new Achievement(eAward_diamonds, L"diamonds", -1, 5, Item::diamond, (Achievement *) acquireIron, "022", IDS_ACHIEVE_NAME_DIAMONDS, IDS_ACHIEVE_DESC_DIAMONDS) )->postConstruct(); //Achievements::portal = (new Achievement(eAward_portal, L"portal", -1, 7, Tile::obsidian, (Achievement *)diamonds) )->postConstruct(); - Achievements::ghast = (new Achievement(eAward_ghast, L"ghast", -4, 8, Item::ghastTear, (Achievement *)ghast) )->setGolden()->postConstruct(); - Achievements::blazeRod = (new Achievement(eAward_blazeRod, L"blazeRod", 0, 9, Item::blazeRod, (Achievement *)blazeRod) )->postConstruct(); - Achievements::potion = (new Achievement(eAward_potion, L"potion", 2, 8, Item::potion, (Achievement *)potion) )->postConstruct(); - Achievements::theEnd = (new Achievement(eAward_theEnd, L"theEnd", 3, 10, Item::eyeOfEnder, (Achievement *)theEnd) )->setGolden()->postConstruct(); - Achievements::winGame = (new Achievement(eAward_winGame, L"theEnd2", 4, 13, Tile::dragonEgg, (Achievement *)winGame) )->setGolden()->postConstruct(); - Achievements::enchantments = (new Achievement(eAward_enchantments, L"enchantments", -4, 4, Tile::enchantTable, (Achievement *)enchantments) )->postConstruct(); + Achievements::ghast = (new Achievement(eAward_ghast, L"ghast", -4, 8, Item::ghastTear, (Achievement *)ghast, "023", IDS_ACHIEVE_NAME_GHAST, IDS_ACHIEVE_DESC_GHAST) )->setGolden()->postConstruct(); + Achievements::blazeRod = (new Achievement(eAward_blazeRod, L"blazeRod", 0, 9, Item::blazeRod, (Achievement *)blazeRod, "024", IDS_ACHIEVE_NAME_BLAZEROD, IDS_ACHIEVE_DESC_BLAZEROD) )->postConstruct(); + Achievements::potion = (new Achievement(eAward_potion, L"potion", 2, 8, Item::potion, (Achievement *)potion, "025", IDS_ACHIEVE_NAME_POTION, IDS_ACHIEVE_DESC_POTION) )->postConstruct(); + Achievements::theEnd = (new Achievement(eAward_theEnd, L"theEnd", 3, 10, Item::eyeOfEnder, (Achievement *)theEnd, "026", IDS_ACHIEVE_NAME_THE_END, IDS_ACHIEVE_DESC_THE_END) )->setGolden()->postConstruct(); + Achievements::winGame = (new Achievement(eAward_winGame, L"theEnd2", 4, 13, Tile::dragonEgg, (Achievement *)winGame, "027", IDS_ACHIEVE_NAME_WINGAME, IDS_ACHIEVE_DESC_WINGAME) )->setGolden()->postConstruct(); + Achievements::enchantments = (new Achievement(eAward_enchantments, L"enchantments", -4, 4, Tile::enchantTable, (Achievement *)enchantments, "028", IDS_ACHIEVE_NAME_ENCHANTMENTS, IDS_ACHIEVE_DESC_ENCHANTMENTS) )->postConstruct(); // Achievements::overkill = (new Achievement(eAward_overkill, L"overkill", -4, 1, Item::sword_diamond, (Achievement *)enchantments) )->setGolden()->postConstruct(); // Achievements::bookcase = (new Achievement(eAward_bookcase, L"bookcase", -3, 6, Tile::bookshelf, (Achievement *)enchantments) )->postConstruct(); #endif -#ifdef _EXTENDED_ACHIEVEMENTS - Achievements::overkill = (new Achievement(eAward_overkill, L"overkill", -4,1, Item::sword_diamond, (Achievement *)enchantments) )->setGolden()->postConstruct(); - Achievements::bookcase = (new Achievement(eAward_bookcase, L"bookcase", -3,6, Tile::bookshelf, (Achievement *)enchantments) )->postConstruct(); - - Achievements::adventuringTime = (new Achievement(eAward_adventuringTime, L"adventuringTime", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->setAwardLocallyOnly()->postConstruct(); - Achievements::repopulation = (new Achievement(eAward_repopulation, L"repopulation", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct(); + Achievements::overkill = (new Achievement(eAward_overkill, L"overkill", -4,1, Item::sword_diamond, (Achievement *)enchantments, "029", IDS_ACHIEVE_NAME_OVERKILL, IDS_ACHIEVE_DESC_OVERKILL) )->setGolden()->postConstruct(); + Achievements::bookcase = (new Achievement(eAward_bookcase, L"bookcase", -3,6, Tile::bookshelf, (Achievement *)enchantments, "030", IDS_ACHIEVE_NAME_BOOKCASE, IDS_ACHIEVE_DESC_BOOKCASE) )->postConstruct(); + Achievements::adventuringTime = (new Achievement(eAward_adventuringTime, L"adventuringTime", 0,0, Tile::bookshelf, (Achievement*) nullptr, "031", IDS_ACHIEVE_NAME_ADVENTURING_TIME, IDS_ACHIEVE_DESC_ADVENTURING_TIME) )->setAwardLocallyOnly()->postConstruct(); + Achievements::repopulation = (new Achievement(eAward_repopulation, L"repopulation", 7,-5, Tile::bookshelf, (Achievement*) nullptr, "032", IDS_ACHIEVE_NAME_REPOPULATION, IDS_ACHIEVE_DESC_REPOPULATION) )->postConstruct(); //Achievements::porkChoop // // // // // // - Achievements::diamondsToYou = (new Achievement(eAward_diamondsToYou, L"diamondsToYou", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct(); + Achievements::diamondsToYou = (new Achievement(eAward_diamondsToYou, L"diamondsToYou", 0,0, Tile::bookshelf, (Achievement*) nullptr, "033", IDS_ACHIEVE_NAME_DIAMONDS_TO_YOU, IDS_ACHIEVE_DESC_DIAMONDS_TO_YOU) )->postConstruct(); //Achievements::passingTheTime = (new Achievement(eAward_play100Days, L"passingTheTime", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct(); //Achievements::archer = (new Achievement(eAward_arrowKillCreeper, L"archer", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct(); - Achievements::theHaggler = (new Achievement(eAward_theHaggler, L"theHaggler", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->setAwardLocallyOnly()->postConstruct(); - Achievements::potPlanter = (new Achievement(eAward_potPlanter, L"potPlanter", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->setAwardLocallyOnly()->postConstruct(); - Achievements::itsASign = (new Achievement(eAward_itsASign, L"itsASign", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->setAwardLocallyOnly()->postConstruct(); - Achievements::ironBelly = (new Achievement(eAward_ironBelly, L"ironBelly", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct(); - Achievements::haveAShearfulDay = (new Achievement(eAward_haveAShearfulDay, L"haveAShearfulDay", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct(); - Achievements::rainbowCollection = (new Achievement(eAward_rainbowCollection, L"rainbowCollection", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->setAwardLocallyOnly()->postConstruct(); - Achievements::stayinFrosty = (new Achievement(eAward_stayinFrosty, L"stayingFrosty", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct(); - Achievements::chestfulOfCobblestone = (new Achievement(eAward_chestfulOfCobblestone, L"chestfulOfCobblestone", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->setAwardLocallyOnly()->postConstruct(); - Achievements::renewableEnergy = (new Achievement(eAward_renewableEnergy, L"renewableEnergy", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct(); - Achievements::musicToMyEars = (new Achievement(eAward_musicToMyEars, L"musicToMyEars", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct(); - Achievements::bodyGuard = (new Achievement(eAward_bodyGuard, L"bodyGuard", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct(); - Achievements::ironMan = (new Achievement(eAward_ironMan, L"ironMan", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct(); - Achievements::zombieDoctor = (new Achievement(eAward_zombieDoctor, L"zombieDoctor", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct(); - Achievements::lionTamer = (new Achievement(eAward_lionTamer, L"lionTamer", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct(); -#endif + Achievements::theHaggler = (new Achievement(eAward_theHaggler, L"theHaggler", 0,0, Tile::bookshelf, (Achievement*) nullptr, "037", IDS_ACHIEVE_NAME_THE_HAGGLER, IDS_ACHIEVE_DESC_THE_HAGGLER) )->setAwardLocallyOnly()->postConstruct(); + Achievements::potPlanter = (new Achievement(eAward_potPlanter, L"potPlanter", 0,0, Tile::bookshelf, (Achievement*) nullptr, "038", IDS_ACHIEVE_NAME_POT_PLANTER, IDS_ACHIEVE_DESC_POT_PLANTER) )->setAwardLocallyOnly()->postConstruct(); + Achievements::itsASign = (new Achievement(eAward_itsASign, L"itsASign", 0,0, Tile::bookshelf, (Achievement*) nullptr, "039", IDS_ACHIEVE_NAME_ITS_A_SIGN, IDS_ACHIEVE_DESC_ITS_A_SIGN) )->setAwardLocallyOnly()->postConstruct(); + Achievements::ironBelly = (new Achievement(eAward_ironBelly, L"ironBelly", 0,0, Tile::bookshelf, (Achievement*) nullptr, "040", IDS_ACHIEVE_NAME_IRON_BELLY, IDS_ACHIEVE_DESC_IRON_BELLY) )->postConstruct(); + Achievements::haveAShearfulDay = (new Achievement(eAward_haveAShearfulDay, L"haveAShearfulDay", 0,0, Tile::bookshelf, (Achievement*) nullptr, "041", IDS_ACHIEVE_NAME_HAVE_A_SHEARFUL_DAY, IDS_ACHIEVE_DESC_HAVE_A_SHEARFUL_DAY) )->postConstruct(); + Achievements::rainbowCollection = (new Achievement(eAward_rainbowCollection, L"rainbowCollection", 0,0, Tile::bookshelf, (Achievement*) nullptr, "042", IDS_ACHIEVE_NAME_RAINBOW_COLLECTION, IDS_ACHIEVE_DESC_RAINBOW_COLLECTION) )->setAwardLocallyOnly()->postConstruct(); + Achievements::stayinFrosty = (new Achievement(eAward_stayinFrosty, L"stayingFrosty", 0,0, Tile::bookshelf, (Achievement*) nullptr, "043", IDS_ACHIEVE_NAME_STAYING_FROSTY, IDS_ACHIEVE_DESC_STAYING_FROSTY) )->postConstruct(); + Achievements::chestfulOfCobblestone = (new Achievement(eAward_chestfulOfCobblestone, L"chestfulOfCobblestone", 0,0, Tile::bookshelf, (Achievement*) nullptr, "044", IDS_ACHIEVE_NAME_CHESTFUL_OF_COBBLESTONE, IDS_ACHIEVE_DESC_CHESTFUL_OF_COBBLESTONE) )->setAwardLocallyOnly()->postConstruct(); + Achievements::renewableEnergy = (new Achievement(eAward_renewableEnergy, L"renewableEnergy", 0,0, Tile::bookshelf, (Achievement*) nullptr, "045", IDS_ACHIEVE_NAME_RENEWABLE_ENERGY, IDS_ACHIEVE_DESC_RENEWABLE_ENERGY) )->postConstruct(); + Achievements::musicToMyEars = (new Achievement(eAward_musicToMyEars, L"musicToMyEars", 0,0, Tile::bookshelf, (Achievement*) nullptr, "046", IDS_ACHIEVE_NAME_MUSIC_TO_MY_EARS, IDS_ACHIEVE_DESC_MUSIC_TO_MY_EARS) )->postConstruct(); + Achievements::bodyGuard = (new Achievement(eAward_bodyGuard, L"bodyGuard", 0,0, Tile::bookshelf, (Achievement*) nullptr, "047", IDS_ACHIEVE_NAME_BODYGUARD, IDS_ACHIEVE_DESC_BODYGUARD) )->postConstruct(); + Achievements::ironMan = (new Achievement(eAward_ironMan, L"ironMan", 0,0, Tile::bookshelf, (Achievement*) nullptr, "048", IDS_ACHIEVE_NAME_IRON_MAN, IDS_ACHIEVE_DESC_IRON_MAN) )->postConstruct(); + Achievements::zombieDoctor = (new Achievement(eAward_zombieDoctor, L"zombieDoctor", 0,0, Tile::bookshelf, (Achievement*) nullptr, "049", IDS_ACHIEVE_NAME_ZOMBIE_DOCTOR, IDS_ACHIEVE_DESC_ZOMBIE_DOCTOR) )->postConstruct(); + Achievements::lionTamer = (new Achievement(eAward_lionTamer, L"lionTamer", 0,0, Tile::bookshelf, (Achievement*) nullptr, "050", IDS_ACHIEVE_NAME_LION_TAMER, IDS_ACHIEVE_DESC_LION_TAMER) )->postConstruct(); } diff --git a/Minecraft.World/Achievements.h b/Minecraft.World/Achievements.h index 177c0679..658b5284 100644 --- a/Minecraft.World/Achievements.h +++ b/Minecraft.World/Achievements.h @@ -1,25 +1,19 @@ #pragma once using namespace std; - class Achievement; class Achievements { friend class Achievement; - protected: static const int ACHIEVEMENT_OFFSET; - // maximum position of achievements (min and max) public: static const int ACHIEVEMENT_WIDTH_POSITION = 12; static const int ACHIEVEMENT_HEIGHT_POSITION = 12; - static int xMin, yMin, xMax, yMax; - static vector *achievements; - static Achievement *openInventory; static Achievement *mineWood; static Achievement *buildWorkbench; @@ -36,7 +30,6 @@ public: static Achievement *killEnemy; static Achievement *killCow; static Achievement *flyPig; - // 4J-JEV: Present on the PS3. static Achievement *snipeSkeleton; static Achievement *diamonds; @@ -47,29 +40,26 @@ public: static Achievement *theEnd; static Achievement *winGame; static Achievement *enchantments; - // 4J : WESTY : Added new acheivements. static Achievement *leaderOfThePack; static Achievement *MOARTools; static Achievement *dispenseWithThis; static Achievement *InToTheNether; - // 4J : WESTY : Added other awards. - static Achievement *socialPost; + //static Achievement *socialPost; static Achievement *eatPorkChop; static Achievement *play100Days; static Achievement *arrowKillCreeper; - static Achievement *mine100Blocks; - static Achievement *kill10Creepers; + //static Achievement *mine100Blocks; + //static Achievement *kill10Creepers; -#ifdef _EXTENDED_ACHIEVEMENTS static Achievement *overkill; // Old achievements; static Achievement *bookcase; // Old achievements; static Achievement *adventuringTime; static Achievement *repopulation; static Achievement *diamondsToYou; - static Achievement *passingTheTime; - static Achievement *archer; + //static Achievement *passingTheTime; + //static Achievement *archer; static Achievement *theHaggler; static Achievement *potPlanter; static Achievement *itsASign; @@ -84,9 +74,7 @@ public: static Achievement *ironMan; static Achievement *zombieDoctor; static Achievement *lionTamer; -#endif static void staticCtor(); - static void init(); -}; +}; \ No newline at end of file diff --git a/Minecraft.World/CommonStats.cpp b/Minecraft.World/CommonStats.cpp index 5ad0e35b..9010f94c 100644 --- a/Minecraft.World/CommonStats.cpp +++ b/Minecraft.World/CommonStats.cpp @@ -81,7 +81,8 @@ Stat* CommonStats::get_blocksPlaced(int blockId) #if (defined _EXTENDED_ACHIEVEMENTS) && (!defined _XBOX_ONE) return Stats::blocksPlaced[blockId]; #else - return nullptr; + return Stats::blocksPlaced[blockId]; + //return nullptr; #endif } @@ -95,7 +96,7 @@ Stat *CommonStats::get_itemsCollected(int itemId, int itemAux) #if (defined _EXTENDED_ACHIEVEMENTS) && (!defined _XBOX_ONE) if (itemId == Tile::wool_Id) return Stats::rainbowCollection[itemAux]; #endif - + if (itemId == Tile::wool_Id) return Stats::rainbowCollection[itemAux]; if (itemId != Item::emerald_Id) return Stats::itemsCollected[itemId]; else return nullptr; } @@ -111,7 +112,8 @@ Stat *CommonStats::get_itemsUsed(int itemId) if (itemId == Item::porkChop_cooked_Id) return Stats::blocksPlaced[itemId]; #endif - return nullptr; + if (itemId == Item::porkChop_cooked_Id) return Stats::blocksPlaced[itemId]; + //return nullptr; } Stat *CommonStats::get_itemsBought(int itemId) @@ -133,7 +135,8 @@ Stat *CommonStats::get_enteredBiome(int biomeId) #if (defined _EXTENDED_ACHIEVEMENTS) && (!defined _XBOX_ONE) return Stats::biomesVisisted[biomeId]; #else - return nullptr; + return Stats::biomesVisisted[biomeId]; + //return nullptr; #endif } @@ -161,17 +164,17 @@ Stat *CommonStats::get_achievement(eAward achievementId) case eAward_MOARTools: return (Stat *) Achievements::MOARTools; case eAward_DispenseWithThis: return (Stat *) Achievements::dispenseWithThis; case eAward_InToTheNether: return (Stat *) Achievements::InToTheNether; - case eAward_mine100Blocks: return (Stat *) Achievements::mine100Blocks; - case eAward_kill10Creepers: return (Stat *) Achievements::kill10Creepers; + //case eAward_mine100Blocks: return (Stat *) Achievements::mine100Blocks; + //case eAward_kill10Creepers: return (Stat *) Achievements::kill10Creepers; case eAward_eatPorkChop: return (Stat *) Achievements::eatPorkChop; case eAward_play100Days: return (Stat *) Achievements::play100Days; case eAward_arrowKillCreeper: return (Stat *) Achievements::arrowKillCreeper; - case eAward_socialPost: return (Stat *) Achievements::socialPost; + //case eAward_socialPost: return (Stat *) Achievements::socialPost; #ifndef _XBOX case eAward_snipeSkeleton: return (Stat *) Achievements::snipeSkeleton; case eAward_diamonds: return (Stat *) Achievements::diamonds; - case eAward_portal: return (Stat *) nullptr; // TODO + //case eAward_portal: return (Stat *) nullptr; // TODO case eAward_ghast: return (Stat *) Achievements::ghast; case eAward_blazeRod: return (Stat *) Achievements::blazeRod; case eAward_potion: return (Stat *) Achievements::potion; @@ -180,7 +183,6 @@ Stat *CommonStats::get_achievement(eAward achievementId) case eAward_enchantments: return (Stat *) Achievements::enchantments; #endif -#ifdef _EXTENDED_ACHIEVEMENTS case eAward_overkill: return (Stat *) Achievements::overkill; // Restored old ach. case eAward_bookcase: return (Stat *) Achievements::bookcase; // Restored old ach. @@ -203,7 +205,7 @@ Stat *CommonStats::get_achievement(eAward achievementId) case eAward_ironMan: return (Stat *) Achievements::ironMan; case eAward_zombieDoctor: return (Stat *) Achievements::zombieDoctor; case eAward_lionTamer: return (Stat *) Achievements::lionTamer; -#endif + default: return (Stat *) nullptr; } diff --git a/Minecraft.World/ContainerMenu.cpp b/Minecraft.World/ContainerMenu.cpp index 463ad5d1..240aebb5 100644 --- a/Minecraft.World/ContainerMenu.cpp +++ b/Minecraft.World/ContainerMenu.cpp @@ -94,7 +94,6 @@ shared_ptr ContainerMenu::clicked(int slotIndex, int buttonNum, in { shared_ptr out = AbstractContainerMenu::clicked(slotIndex, buttonNum, clickType, player, looped); -#ifdef _EXTENDED_ACHIEVEMENTS shared_ptr localPlayer = dynamic_pointer_cast(player); if (localPlayer != nullptr) // 4J-JEV: For "Chestful o'Cobblestone" achievement. @@ -119,7 +118,6 @@ shared_ptr ContainerMenu::clicked(int slotIndex, int buttonNum, in localPlayer->awardStat(GenericStats::chestfulOfCobblestone(),GenericStats::param_chestfulOfCobblestone(cobblecount)); } } -#endif return out; } diff --git a/Minecraft.World/DirectoryLevelStorage.cpp b/Minecraft.World/DirectoryLevelStorage.cpp index dd5180d7..142f7359 100644 --- a/Minecraft.World/DirectoryLevelStorage.cpp +++ b/Minecraft.World/DirectoryLevelStorage.cpp @@ -11,6 +11,7 @@ #include "LevelData.h" #include "DirectoryLevelStorage.h" #include "ConsoleSaveFileIO.h" +#include "../Minecraft.Client/Minecraft.h" const wstring DirectoryLevelStorage::sc_szPlayerDir(L"players/"); @@ -391,6 +392,7 @@ void DirectoryLevelStorage::save(shared_ptr player) if( playerXuid != INVALID_XUID && !player->isGuest() ) #endif { + Minecraft::GetInstance()->forceStatsSave(player->getPlayerIndex()); CompoundTag *tag = new CompoundTag(); player->saveWithoutId(tag); #if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) diff --git a/Minecraft.World/FurnaceMenu.cpp b/Minecraft.World/FurnaceMenu.cpp index 2bc2d2bd..9d70f4a5 100644 --- a/Minecraft.World/FurnaceMenu.cpp +++ b/Minecraft.World/FurnaceMenu.cpp @@ -100,10 +100,8 @@ shared_ptr FurnaceMenu::quickMoveStack(shared_ptr player, slot->onQuickCraft(stack, clicked); // 4J-JEV, hook for Durango achievement 'Renewable Energy'. -#ifdef _EXTENDED_ACHIEVEMENTS if ( charcoalUsed && stack->getItem()->id == Item::coal_Id && stack->getAuxValue() == CoalItem::CHAR_COAL) player->awardStat(GenericStats::renewableEnergy(),GenericStats::param_renewableEnergy()); -#endif } else if (slotIndex == FUEL_SLOT || slotIndex == INGREDIENT_SLOT) { @@ -164,13 +162,13 @@ shared_ptr FurnaceMenu::clicked(int slotIndex, int buttonNum, int shared_ptr out = AbstractContainerMenu::clicked(slotIndex, buttonNum, clickType, player, looped); -#ifdef _EXTENDED_ACHIEVEMENTS + if ( charcoalUsed && (out!=nullptr) && (buttonNum==0 || buttonNum==1) && clickType==CLICK_PICKUP && out->getItem()->id == Item::coal_Id && out->getAuxValue() == CoalItem::CHAR_COAL ) { player->awardStat(GenericStats::renewableEnergy(),GenericStats::param_renewableEnergy()); } -#endif + return out; } diff --git a/Minecraft.World/FurnaceResultSlot.cpp b/Minecraft.World/FurnaceResultSlot.cpp index 48f2f8fb..84e0b747 100644 --- a/Minecraft.World/FurnaceResultSlot.cpp +++ b/Minecraft.World/FurnaceResultSlot.cpp @@ -88,6 +88,7 @@ void FurnaceResultSlot::checkTakeAchievements(shared_ptr carried) #else if (carried->id == Item::ironIngot_Id) player->awardStat(GenericStats::acquireIron(), GenericStats::param_acquireIron()); if (carried->id == Item::fish_cooked_Id) player->awardStat(GenericStats::cookFish(), GenericStats::param_cookFish()); + //if (carried->id == Item::porkChop_cooked_Id) GenericStats::itemsCrafted(Item::porkChop_cooked_Id); #endif removeCount = 0; diff --git a/Minecraft.World/GenericStats.cpp b/Minecraft.World/GenericStats.cpp index d97c182a..9bcf81e9 100644 --- a/Minecraft.World/GenericStats.cpp +++ b/Minecraft.World/GenericStats.cpp @@ -358,7 +358,7 @@ Stat* GenericStats::overkill() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement( eAward_overkill ); #else - return nullptr; + return instance->get_achievement(eAward_overkill); #endif } @@ -367,7 +367,7 @@ Stat* GenericStats::bookcase() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement( eAward_bookcase ); #else - return nullptr; + return instance->get_achievement(eAward_bookcase); #endif } @@ -391,10 +391,10 @@ Stat* GenericStats::InToTheNether() return instance->get_achievement( eAward_InToTheNether ); } -Stat* GenericStats::socialPost() -{ - return instance->get_achievement( eAward_socialPost ); -} +//Stat* GenericStats::socialPost() +//{ +// return instance->get_achievement( eAward_socialPost ); +//} Stat* GenericStats::eatPorkChop() { @@ -411,22 +411,22 @@ Stat* GenericStats::arrowKillCreeper() return instance->get_achievement( eAward_arrowKillCreeper ); } -Stat* GenericStats::mine100Blocks() -{ - return instance->get_achievement( eAward_mine100Blocks ); -} +//Stat* GenericStats::mine100Blocks() +//{ +// return instance->get_achievement( eAward_mine100Blocks ); +//} -Stat* GenericStats::kill10Creepers() -{ - return instance->get_achievement( eAward_kill10Creepers ); -} +//Stat* GenericStats::kill10Creepers() +//{ +// return instance->get_achievement( eAward_kill10Creepers ); +//} Stat* GenericStats::adventuringTime() { #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_adventuringTime); #else - return nullptr; + return instance->get_achievement(eAward_adventuringTime); #endif } @@ -435,7 +435,7 @@ Stat* GenericStats::repopulation() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_repopulation); #else - return nullptr; + return instance->get_achievement(eAward_repopulation); #endif } @@ -444,7 +444,7 @@ Stat* GenericStats::porkChop() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_eatPorkChop); #else - return nullptr; + return instance->get_achievement(eAward_eatPorkChop); #endif } @@ -453,7 +453,7 @@ Stat* GenericStats::diamondsToYou() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_diamondsToYou); #else - return nullptr; + return instance->get_achievement(eAward_diamondsToYou); #endif } @@ -462,7 +462,7 @@ Stat* GenericStats::passingTheTime() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_play100Days); #else - return nullptr; + return instance->get_achievement(eAward_play100Days); #endif } @@ -471,7 +471,7 @@ Stat* GenericStats::archer() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_arrowKillCreeper); #else - return nullptr; + return instance->get_achievement(eAward_arrowKillCreeper); #endif } @@ -480,7 +480,7 @@ Stat* GenericStats::theHaggler() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_theHaggler); #else - return nullptr; + return instance->get_achievement(eAward_theHaggler); #endif } @@ -489,7 +489,7 @@ Stat* GenericStats::potPlanter() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_potPlanter); #else - return nullptr; + return instance->get_achievement(eAward_potPlanter); #endif } @@ -498,7 +498,7 @@ Stat* GenericStats::itsASign() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_itsASign); #else - return nullptr; + return instance->get_achievement(eAward_itsASign); #endif } @@ -507,7 +507,7 @@ Stat* GenericStats::ironBelly() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_ironBelly); #else - return nullptr; + return instance->get_achievement(eAward_ironBelly); #endif } @@ -516,7 +516,7 @@ Stat* GenericStats::haveAShearfulDay() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_haveAShearfulDay); #else - return nullptr; + return instance->get_achievement(eAward_haveAShearfulDay); #endif } @@ -525,7 +525,7 @@ Stat* GenericStats::rainbowCollection() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_rainbowCollection); #else - return nullptr; + return instance->get_achievement(eAward_rainbowCollection); #endif } @@ -534,7 +534,7 @@ Stat* GenericStats::stayinFrosty() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_stayinFrosty); #else - return nullptr; + return instance->get_achievement(eAward_stayinFrosty); #endif } @@ -543,7 +543,7 @@ Stat* GenericStats::chestfulOfCobblestone() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_chestfulOfCobblestone); #else - return nullptr; + return instance->get_achievement(eAward_chestfulOfCobblestone); #endif } @@ -552,7 +552,7 @@ Stat* GenericStats::renewableEnergy() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_renewableEnergy); #else - return nullptr; + return instance->get_achievement(eAward_renewableEnergy); #endif } @@ -561,7 +561,7 @@ Stat* GenericStats::musicToMyEars() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_musicToMyEars); #else - return nullptr; + return instance->get_achievement(eAward_musicToMyEars); #endif } @@ -570,7 +570,7 @@ Stat* GenericStats::bodyGuard() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_bodyGuard); #else - return nullptr; + return instance->get_achievement(eAward_bodyGuard); #endif } @@ -579,7 +579,7 @@ Stat* GenericStats::ironMan() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_ironMan); #else - return nullptr; + return instance->get_achievement(eAward_ironMan); #endif } @@ -588,7 +588,7 @@ Stat* GenericStats::zombieDoctor() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_zombieDoctor); #else - return nullptr; + return instance->get_achievement(eAward_zombieDoctor); #endif } @@ -597,7 +597,7 @@ Stat* GenericStats::lionTamer() #ifdef _EXTENDED_ACHIEVEMENTS return instance->get_achievement(eAward_lionTamer); #else - return nullptr; + return instance->get_achievement(eAward_lionTamer); #endif } @@ -1057,7 +1057,7 @@ byteArray GenericStats::param_bookcase() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_bookcase); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_bookcase); #endif } @@ -1081,10 +1081,10 @@ byteArray GenericStats::param_InToTheNether() return instance->getParam_achievement(eAward_InToTheNether); } -byteArray GenericStats::param_socialPost() -{ - return instance->getParam_achievement(eAward_socialPost); -} +//byteArray GenericStats::param_socialPost() +//{ +// return instance->getParam_achievement(eAward_socialPost); +//} byteArray GenericStats::param_eatPorkChop() { @@ -1101,22 +1101,22 @@ byteArray GenericStats::param_arrowKillCreeper() return instance->getParam_achievement(eAward_arrowKillCreeper); } -byteArray GenericStats::param_mine100Blocks() -{ - return instance->getParam_achievement(eAward_mine100Blocks); -} - -byteArray GenericStats::param_kill10Creepers() -{ - return instance->getParam_achievement(eAward_kill10Creepers); -} +//byteArray GenericStats::param_mine100Blocks() +//{ +// return instance->getParam_achievement(eAward_mine100Blocks); +//} +// +//byteArray GenericStats::param_kill10Creepers() +//{ +// return instance->getParam_achievement(eAward_kill10Creepers); +//} byteArray GenericStats::param_adventuringTime() { #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_adventuringTime); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_adventuringTime); #endif } @@ -1125,7 +1125,7 @@ byteArray GenericStats::param_repopulation() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_repopulation); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_repopulation); #endif } @@ -1134,7 +1134,7 @@ byteArray GenericStats::param_porkChop() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_eatPorkChop); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_eatPorkChop); #endif } @@ -1143,7 +1143,7 @@ byteArray GenericStats::param_diamondsToYou() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_diamondsToYou); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_diamondsToYou); #endif } @@ -1152,7 +1152,7 @@ byteArray GenericStats::param_passingTheTime() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_play100Days); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_play100Days); #endif } @@ -1161,7 +1161,7 @@ byteArray GenericStats::param_archer() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_arrowKillCreeper); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_arrowKillCreeper); #endif } @@ -1170,7 +1170,7 @@ byteArray GenericStats::param_theHaggler() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_theHaggler); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_theHaggler); #endif } @@ -1179,7 +1179,7 @@ byteArray GenericStats::param_potPlanter() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_potPlanter); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_potPlanter); #endif } @@ -1188,7 +1188,7 @@ byteArray GenericStats::param_itsASign() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_itsASign); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_itsASign); #endif } @@ -1197,7 +1197,7 @@ byteArray GenericStats::param_ironBelly() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_ironBelly); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_ironBelly); #endif } @@ -1206,7 +1206,7 @@ byteArray GenericStats::param_haveAShearfulDay() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_haveAShearfulDay); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_haveAShearfulDay); #endif } @@ -1215,7 +1215,7 @@ byteArray GenericStats::param_rainbowCollection() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_rainbowCollection); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_rainbowCollection); #endif } @@ -1224,7 +1224,7 @@ byteArray GenericStats::param_stayinFrosty() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_stayinFrosty); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_stayinFrosty); #endif } @@ -1238,7 +1238,7 @@ byteArray GenericStats::param_renewableEnergy() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_renewableEnergy); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_renewableEnergy); #endif } @@ -1252,7 +1252,7 @@ byteArray GenericStats::param_bodyGuard() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_bodyGuard); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_bodyGuard); #endif } @@ -1261,7 +1261,7 @@ byteArray GenericStats::param_ironMan() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_ironMan); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_ironMan); #endif } @@ -1270,7 +1270,7 @@ byteArray GenericStats::param_zombieDoctor() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_zombieDoctor); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_zombieDoctor); #endif } @@ -1279,6 +1279,6 @@ byteArray GenericStats::param_lionTamer() #ifdef _EXTENDED_ACHIEVEMENTS return instance->getParam_achievement(eAward_lionTamer); #else - return instance->getParam_noArgs(); + return instance->getParam_achievement(eAward_lionTamer); #endif -} +} \ No newline at end of file diff --git a/Minecraft.World/InventoryMenu.cpp b/Minecraft.World/InventoryMenu.cpp index 9c6c661f..d96dab94 100644 --- a/Minecraft.World/InventoryMenu.cpp +++ b/Minecraft.World/InventoryMenu.cpp @@ -235,7 +235,6 @@ shared_ptr InventoryMenu::clicked(int slotIndex, int buttonNum, in { shared_ptr out = AbstractContainerMenu::clicked(slotIndex, buttonNum, clickType, player, looped); -#ifdef _EXTENDED_ACHIEVEMENTS static int ironItems[4] = {Item::helmet_iron_Id,Item::chestplate_iron_Id,Item::leggings_iron_Id,Item::boots_iron_Id}; for (int i = ARMOR_SLOT_START; i < ARMOR_SLOT_END; i++) { @@ -246,7 +245,7 @@ shared_ptr InventoryMenu::clicked(int slotIndex, int buttonNum, in } } player->awardStat(GenericStats::ironMan(),GenericStats::param_ironMan()); -#endif + return out; } diff --git a/Minecraft.World/ItemEntity.cpp b/Minecraft.World/ItemEntity.cpp index 5dc1db6e..24f7ebd4 100644 --- a/Minecraft.World/ItemEntity.cpp +++ b/Minecraft.World/ItemEntity.cpp @@ -242,7 +242,7 @@ void ItemEntity::playerTouch(shared_ptr player) { player->awardStat(GenericStats::diamonds(), GenericStats::param_diamonds()); -#ifdef _EXTENDED_ACHIEVEMENTS + if ( getItem()->getItem()->id ) { shared_ptr pThrower = level->getPlayerByName(getThrower()); @@ -251,7 +251,6 @@ void ItemEntity::playerTouch(shared_ptr player) pThrower->awardStat(GenericStats::diamondsToYou(), GenericStats::param_diamondsToYou()); } } -#endif } if (item->id == Item::blazeRod_Id) player->awardStat(GenericStats::blazeRod(), GenericStats::param_blazeRod()); diff --git a/Minecraft.World/Player.cpp b/Minecraft.World/Player.cpp index 2dd01898..ad6eb39f 100644 --- a/Minecraft.World/Player.cpp +++ b/Minecraft.World/Player.cpp @@ -2483,10 +2483,10 @@ void Player::startUsingItem(shared_ptr instance, int duration) awardStat(GenericStats::itemsUsed(instance->getItem()->id), GenericStats::param_itemsUsed(dynamic_pointer_cast(shared_from_this()),instance)); -#if (!defined _DURANGO) && (defined _EXTENDED_ACHIEVEMENTS) + if ( (instance->getItem()->id == Item::rotten_flesh_Id) && (getFoodData()->getFoodLevel() == 0) ) awardStat(GenericStats::ironBelly(), GenericStats::param_ironBelly()); -#endif + } bool Player::mayDestroyBlockAt(int x, int y, int z) diff --git a/Minecraft.World/Stats.cpp b/Minecraft.World/Stats.cpp index bd1247d7..ea19d134 100644 --- a/Minecraft.World/Stats.cpp +++ b/Minecraft.World/Stats.cpp @@ -23,9 +23,8 @@ vector *Stats::blocksMinedStats = new vector; vector *Stats::itemsCollectedStats = new vector; vector *Stats::itemsCraftedStats = new vector; -#if (defined _EXTENDED_ACHIEVEMENTS) && (!defined _DURANGO) vector *Stats::blocksPlacedStats = new vector; -#endif + Stat *Stats::walkOneM = nullptr; Stat *Stats::swimOneM = nullptr; @@ -56,11 +55,11 @@ StatArray Stats::blocksMined; StatArray Stats::itemsCollected; StatArray Stats::itemsCrafted; -#if (defined _EXTENDED_ACHIEVEMENTS) && (!defined _DURANGO) + StatArray Stats::blocksPlaced; StatArray Stats::rainbowCollection; StatArray Stats::biomesVisisted; -#endif + Stat *Stats::killsEnderdragon = nullptr; // The number of times this player has dealt the killing blow to the Enderdragon Stat *Stats::completeTheEnd = nullptr; // The number of times this player has been present when the Enderdragon has died @@ -473,7 +472,7 @@ void Stats::buildAdditionalStats() Stats::completeTheEnd = (new GeneralStat(offset++, L"stat.completeTheEnd"))->postConstruct(); -#if (defined _EXTENDED_ACHIEVEMENTS) && (!defined _DURANGO) + { ItemStat *itemStat = new ItemStat(offset++, L"craftItem.flowerPot", Item::flowerPot_Id); itemsCraftedStats->push_back(itemStat); @@ -547,7 +546,6 @@ void Stats::buildAdditionalStats() blocksPlaced[itemStat->getItemId()] = itemStat; itemStat->postConstruct(); } -#endif } diff --git a/Minecraft.World/Stats.h b/Minecraft.World/Stats.h index efbeb1ea..7039808d 100644 --- a/Minecraft.World/Stats.h +++ b/Minecraft.World/Stats.h @@ -25,9 +25,9 @@ public: static vector *itemsCollectedStats; static vector *itemsCraftedStats; -#if (defined _EXTENDED_ACHIEVEMENTS) && (!defined _DURANGO) + static vector *blocksPlacedStats; -#endif + static Stat *walkOneM; static Stat *swimOneM; @@ -60,18 +60,18 @@ public: static StatArray itemsCollected; static StatArray itemsCrafted; -#if (defined _EXTENDED_ACHIEVEMENTS) && (!defined _DURANGO) + static StatArray blocksPlaced; -#endif + // Added TU9 static Stat *killsEnderdragon; // The number of times this player has dealt the killing blow to the Enderdragon static Stat *completeTheEnd; // The number of times this player has been present when the Enderdragon has died -#if (defined _EXTENDED_ACHIEVEMENTS) && (!defined _DURANGO) + static StatArray biomesVisisted; static StatArray rainbowCollection; -#endif + static void staticCtor();