![]() |
SuccessStory - Printable Version +- Playnite Forums (https://playnite.link/forum) +-- Forum: Extension Database (https://playnite.link/forum/forum-3.html) +--- Forum: Generic Extensions (https://playnite.link/forum/forum-6.html) +--- Thread: SuccessStory (/thread-275.html) |
SuccessStory - Lacro59 - 05-15-2020 Informations The plugin gets localised (if exist) achievements or add manualy achievements. With this plugin you can:
If the theme support function, you can:
![]() ![]() ![]() ![]() Localization The plugin is localized. It's possible to translate the extension on crowdin Custom theme integration Addition in a custom theme Warnings
More information on Wiki Lastest release Changelog v2.2
RE: SuccessStory - Kingsmob - 05-15-2020 (05-15-2020, 02:19 PM)Hi there. I hope I don\t come across as foolish but how do I install this? I assumed I just drop it in the Extensions folder but when I restarted Playnite it wasn't in the extension list. Should I be doing something else? Any help you can give would me much appreciated.Lacro59 Wrote: hi, RE: SuccessStory - darklinkpower - 05-16-2020 Great extension! Some issues I found: 1. When sorting by last session, it uses the day instead of year>month>date>time ![]() 2. This error happens when checking a game that doesn't have achievements. Also "infomations" is a typo, it should be written as "Information". And I was wondering if the "GameIcon" column could be changed to just "Icon" since it cuts because it's too long. ![]() 3. The "Total Achievements" term is wrong, since it currently counts the Locked Achievements, not total. And an idea: I think it would be great if there was a search box to quickly find the game you want since it can be difficult searching manually if the list is long. I also don't know if it would be possible in the future to sort by percentage of achievements unlocked and by number of achievements unlocked. RE: SuccessStory - Lacro59 - 05-16-2020 (05-15-2020, 09:58 PM)Kingsmob Wrote: Hi there. I hope I don\'t come across as foolish but how do I install this? I assumed I just drop it in the Extensions folder but when I restarted Playnite it wasn The next release is a Playnite package. A drag on Playnite for install it. (05-16-2020, 02:26 AM)darklinkpower Wrote: Great extension! I work to resolve bugs and optimize user experience with the new release. There is still work. Thanks for the come-back and suggestion. RE: SuccessStory - Lacro59 - 05-20-2020 A new version is available. RE: SuccessStory - darklinkpower - 05-20-2020 Nice update, it's working great. Some issues I found: 1. Info and description text overlap unlocked date text when text is too long ![]() 2. Typo. Should be "Information" ![]() 3. Sorting by "Source" doesn't sort properly. ![]() 4. Bar is not totally filled even when game has 100% achievements for some reason ![]() 5. Origin games: locked achievements are not greyed out ![]() Some recommendations: 1. I think the UI would look better if the elements were aligned like this ![]() 2. I think having percentages would be great, either as shown here or as a column ![]() 3. I think having a counter for "Locked achievements" would be useful ![]() RE: SuccessStory - sheepbeep - 05-21-2020 My take on this (really excellent (on paper)) plugin: provide a loading bar, display what game the extension is processing. It just crashed (after 476 games, I have about 8000 in the library) and there were several duplicate lines on: The error pops up about three times in quick sucession, but then continues. 2020-05-21 20:52:05.6776|ERROR:Failed to parse.System.NullReferenceException: Object reference not set to an instance of an object. at SuccessStory.Models.AchievementsDatabase.Add(Game GameAdded) in J:\Lacro59\playnite-successstory-plugin\Database\AchivementsDatabase.cs:line 246 2020-05-21 20:52:20.7958|ERROR:Failed to parse.System.NullReferenceException: Object reference not set to an instance of an object. at SuccessStory.Models.AchievementsDatabase.Add(Game GameAdded) in J:\Lacro59\playnite-successstory-plugin\Database\AchivementsDatabase.cs:line 260 2020-05-21 20:52:22.1795|ERROR:Failed to parse.System.NullReferenceException: Object reference not set to an instance of an object. at SuccessStory.Models.AchievementsDatabase.Add(Game GameAdded) in J:\Lacro59\playnite-successstory-plugin\Database\AchivementsDatabase.cs:line 336 2020-05-21 20:52:35.5029|ERROR:Failed to parse.System.NullReferenceException: Object reference not set to an instance of an object. at SuccessStory.Models.AchievementsDatabase.Add(Game GameAdded) in J:\Lacro59\playnite-successstory-plugin\Database\AchivementsDatabase.cs:line 246 2020-05-21 20:52:39.9949|ERROR:Failed to parse.System.NullReferenceException: Object reference not set to an instance of an object. at SuccessStory.Models.AchievementsDatabase.Add(Game GameAdded) in J:\Lacro59\playnite-successstory-plugin\Database\AchivementsDatabase.cs:line 260 2020-05-21 20:52:41.0296|ERROR:Failed to parse.System.NullReferenceException: Object reference not set to an instance of an object. at SuccessStory.Models.AchievementsDatabase.Add(Game GameAdded) in J:\Lacro59\playnite-successstory-plugin\Database\AchivementsDatabase.cs:line 336 2020-05-21 20:53:55.6471|ERROR:Failed to parse.System.NullReferenceException: Object reference not set to an instance of an object. at SuccessStory.Models.AchievementsDatabase.Add(Game GameAdded) in J:\Lacro59\playnite-successstory-plugin\Database\AchivementsDatabase.cs:line 246 I am using the most current build of Playnite. Edit: it seems that this extensions crashes after about every 450 games or so, was the second crash at game 890 (first on about 450). Oh, and do I have to expect the whole loading time to read my 8000 games on every start of Playnite, how does this extension detect changes? Another suggestion: You should not write any achievement data if the game does not support one. Example is Diner Mania {"Name":"Diner Mania","HaveAchivements":false,"Total":0,"Unlocked":0,"Locked":0,"Progression":0,"Achievements":[]} Although this seems to be miniscule, if you use one file for each game, this will become really annoying if you wanna backup the installation and it wastes directory entries and at least one allocation unit on the disk. As suspected, your extension eats up the all the system memory it can get. 2020-05-21 21:13:57.7732|ERROR:Unhandled exception occured.System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown. at CefSharp.OffScreen.BitmapBuffer.ResizeBuffer(Int32 width, Int32 height) in C:\projects\cefsharp\CefSharp.OffScreen\BitmapBuffer.cs:line 69 at CefSharp.OffScreen.BitmapBuffer.UpdateBuffer(Int32 width, Int32 height, IntPtr buffer, Rect dirtyRect) in C:\projects\cefsharp\CefSharp.OffScreen\BitmapBuffer.cs:line 91 at CefSharp.OffScreen.DefaultRenderHandler.OnPaint(PaintElementType type, Rect dirtyRect, IntPtr buffer, Int32 width, Int32 height) in C:\projects\cefsharp\CefSharp.OffScreen\DefaultRenderHandler.cs:line 161 at CefSharp.OffScreen.ChromiumWebBrowser.CefSharp.Internals.IRenderWebBrowser.OnPaint(PaintElementType type, Rect dirtyRect, IntPtr buffer, Int32 width, Int32 height) in C:\projects\cefsharp\CefSharp.OffScreen\ChromiumWebBrowser.cs:line 694 at CefSharp.Internals.RenderClientAdapter.OnPaint(RenderClientAdapter* , scoped_refptr<CefBrowser>* browser, cef_paint_element_type_t type, vector<CefRect\,std::allocator<CefRect> >* dirtyRects, Void* buffer, Int32 width, Int32 height) in c:\projects\cefsharp\cefsharp.core\internals\renderclientadapter.h:line 161 You shouldn't just stick all achievements all into memory, Playnite crashed after the process has taken about 1 GB of RAM. I'd suggest to use a sqlite database or something similar to store the data and query then the needed stuff. Just reading everything into variables may work if you have up to a couple hundred games (~ 450, when the first errors cropped up), but after that it is prudent to store it somewhere else, like in a sqlite or similar. Bonus points is that you won't need the whole pile of JSON files and there is much less I/O then too. RE: SuccessStory - Lacro59 - 05-22-2020 sheepbeep Wrote:provide a loading bar, display what game the extension is processing.Added in my tasklist. sheepbeep Wrote:It just crashed (after 476 games, I have about 8000 in the library)I analysed this. The problem comes to the web component who always isn't disposed. sheepbeep Wrote:Oh, and do I have to expect the whole loading time to read my 8000 games on every start of Playnite, how does this extension detect changes?The plugin loads data from the web one time. Even if the application crashes many time, the database builds. sheepbeep Wrote:Another suggestion: You should not write any achievement data if the game does not support one.The plugin loads only supported store. But, some games hasn't achievements. sheepbeep Wrote:You shouldn't just stick all achievements all into memory, Playnite crashed after the process has taken about 1 GB of RAM.The plugin's database is only load for view data. The out of memory error comes to too web component no disposed. For informations the component load is : "CefSharp.BrowserSubprocess.exe". RE: SuccessStory - darklinkpower - 05-22-2020 It seems that Playnite memory usage keeps increasing everytime you reopen the extension. It was originally using 80mb and it increased to 317mb after opening it 4 times ![]() RE: SuccessStory - LuigiVs - 05-24-2020 My Steam games aren't showing and I keep getting this error message: [attachment=159] RE: SuccessStory - ErikDestler - 05-25-2020 I am also getting that error. I can't do anything in Playnite... RE: SuccessStory - De Mask - 05-25-2020 Hey, how can i delete the plugin? RE: SuccessStory - Lacro59 - 05-25-2020 (05-25-2020, 09:15 AM)De Mask Wrote: Hey, how can i delete the plugin? Depending to your installation type, delete "SuccessStory" folder. RE: SuccessStory - Lacro59 - 05-26-2020 A new version is published. Some big problems are solved but some persist. RE: SuccessStory - sheepbeep - 05-29-2020 Hello, there are still several problems: Update of achievements still dumbly walks through ALL games Solution: should ask if only walk through most recent games (eg played last day / week / year / all [current]) Error discussion ![]() Problem source point: https://github.com/Lacro59/playnite-successstory-plugin/blob/df61ed0cedc5716c5fe6f121bf7a35df64fc1b7c/Clients/SteamAchievements.cs#L60 On this position onwards you make a SteamAPI request and assume that the response is always a JSON object with the data if it is not empty (""). This assumption is simply NOT true (see below). The try() .. catch() block only catches server errors, but in this case you should just retry after a short while. Another thing is that you do not process HTTP 429, where in that case you have to wait for 5 Minutes for the next request, because you have made too many requests in a certain period. This automatically resolves itself after these 5 minutes. You should factor this in your code. So, now to the API request itself: http://api.steampowered.com/ISteamUserStats/GetPlayerAchievements/v0001/?appid=716050&key=xxx&steamid=yyy This yields {"playerstats":{"error":"Requested app has no stats","success":false}} First, make SURE that you only do https requests, not http; the latter are unsafe and can be modified in-transit. Second, you have an invalid response if the response is either empty (this is covered) OR (this is important) the JSON variable playerstats.success == false. In this case you should parse the "player.stats" message and act accordingly. In this case, this game has no stats and achievements and the extensions should be aware of that (and not dumping this into the database blindly). THIS IS ALSO THE REASON FOR THIS POPUP ;D Now, a valid request (Shadow Warrior 2, abbreviated): http://api.steampowered.com/ISteamUserStats/GetPlayerAchievements/v0001/?appid=324800&key=xxx&steamid=yyy {"playerstats":{"steamID":"xxxxx","gameName":"Shadow Warrior 2","achievements":[{"apiname":"ALL","achieved":0,"unlocktime":0},{"apiname":"GAME_FINISHED_0","achieved":1,"unlocktime":1589667921}, .... {"apiname":"COUNT_orb_found_2","achieved":0,"unlocktime":0}],"success":true}} Currently, your code just assumes if the response is non-empty, it is ok to jump into the JSON data. Don't do that (and fix it). After that, opening PLAYNITE -> Extensions -> Success Story yields this error message (likely a continuation of the first error). ![]() 2020-05-29 14:26:02.5389|ERROR:Failed to execute extension function.System.IO.FileFormatException: The image decoder cannot decode the image. The image might be corrupted. ---> System.Runtime.InteropServices.COMException: The image is unrecognized. (Exception from HRESULT: 0x88982F60) As I am not really versed with C#, but I guess this is caused by invalid / nonexisting URL data where the extension tries to access a key not present (likely an URL). Feature request Automatically scan games played last day / week / year / all (configurable) Suggestion: Use https://github.com/SteamRE/SteamKit for Steam API requests, not only for this extension but for your other extensions if you access the Steam API. RE: SuccessStory - Lacro59 - 05-30-2020 Thanks for the long feedback. My english is too bad for answer correctly. I will work to improve this. RE: SuccessStory - Alowen - 06-04-2020 Heya, just a stupid question perhaps. I am pretty new to playnite, realy like the direction it is going. This extension looks like something essential for what i want in my launcher.. but I seem to be overlooking the basics in how to access it. I have installed the folder, in my settings it is enables.. but what now? How do i actually open it? It's pretty confusing for me still. RE: SuccessStory - sheepbeep - 06-04-2020 If it is installed (and does not bug out), you can access it in the playnite menu (the controller icon). select "extensions" and "success story" there. Yes, I agree, that should be integrated into Playnite directly ![]() RE: SuccessStory - Lacro59 - 06-09-2020 A new version is available. RE: SuccessStory - Kaede Monthmore - 06-10-2020 Any plans for Retroarchievements? Because i think if put RA system is very complex and how is possible recognize every single game entry and know if it is "archievementable" or not. About extension: is possible to use the integration directly, without button presses? If not, is possible change the button appearance, like the others? |