ethanmoffat / endlessclient Goto Github PK
View Code? Open in Web Editor NEWAn open source client for Endless Online written in C#
License: MIT License
An open source client for Endless Online written in C#
License: MIT License
Killing an NPC client tells me "You gained 0 exp" but clearly gained 7. Am sure it's something I'm overlooking, maybe Ethan will solve it easier than I.
Currently you can add multiple friends with the same name. For example, you can add lets say "Jimmy" as many times as you like (1, 5, 10000000), but once you 'close/re open' the list, it only shows the first original addition. I wouldn't say this is an important thing to be fixed, but nonetheless less glitchy is better :P
Screenshot: http://puu.sh/huQT4/2b542fe21b.jpg
Implement Chest interaction with map chests. Handle all packets and remove old code.
ToDo list for chests:
ChestDialog
to use new XNAControls. Change ChestDialog to derive from ListDialogShow
method should be deprecated in favor of using build in ShowDialog/ShowDialogAsync methods from XNAControlsInstance
method should be deprecated in favor of using provider/repository interfaces for the dialogWhenever i open the client i get
"There was an error initializing the sound manager"
Open credits while login menu is up.
http://puu.sh/hs2Ud/4653ef95e9.jpg
Not much of an issue, just figured I'd share.
There is currently a memory leak in unmanaged code that is visible once the game is loaded and the map is being rendered. I suspect it has to do with the map being rendered.
It is possible that PELoaderLib causes the leakage. More investigation is required.
C# 6 has some nice language features that aren't present in the current source because it is limited to .Net 4.5 features.
public int Property => 42;
public int Property { get; }
$"I am a string with a {someInt} interpolated int!
Solution needs the following:
Code Feature
It would be nice to convert constants in code (such as font names and colors) into global constants in the 'Constants' class so that the code becomes more maintainable.
This is a high-effort, low-value, low-priority refactoring job. Need to investigate also whether or not ReSharper has a built-in function for this.
This project doesn't have one. Is this intended?
This isn't a bug, as it looks as if you just haven't added it quite yet. (Unless you've added it in a more recent commit that I missed)
But, @Announcements don't come up when used. Also +Admin chat isn't implemented yet I suppose? I'll be compiling your next commit and finding as many bugs as I can.
Also, when around NPCs, it seems the game crashes. I've AFK'd for hours in the first map, as soon as I walked out the room it crashed. Although, it could have something to do with the size of the map? I'm completely unsure of the cause, but it seems as if it's NPCs causing said crash.
Not sure why, but the alpha doesn't seem to be applied gradually to the NPCs, they just disappear when they die.
if you try to equip an opposite gender's armor the gfx id loads for that gender's gear but doesn't equip the item
Here's a puush.
http://puu.sh/hr9dx/c73f25154f.jpg It even registers while wearing armor already
Do not publish a release with GFX, etc.
Those are copyrighted files.
Also, try putting a new Icon for the modified client.
When starting the release version of the .exe. the program spits and error
stating: "Error setting up dependencies for the game"
EDIT
after addng the folders, the game "stopped working" after trying to log in
It's been a while since I've worked on this, so I think it might be a good chance to refactor the code before beginning more feature addition. Here's a working todo list of some pretty general big changes that should occur.
The project ReadMe could use some updating, since development of new code is well under way.
It should be paralleled with the introduction of a Wiki explaining some of the design concepts and API usages of more complicated areas.
Just AFK on a map with NPCs (and left-over item drops.. not sure if this could also be an issue) you're likely to crash.
I actually can't even login on my character when I log out on this one map on my server! (Has 16 Biters, and random golds, small potions left on the ground from players training here)
Currently, a new chat bubble is created every time one should be displayed. However, it would be a lot better if each 'actor' on the map had their own chat bubble that was enabled appropriately when the 'actor' speaks.
Also getting a lot of bugs related to chat bubbles, in that they are generating a lot of NullReference/ObjectDisposed exceptions. What is happening is Dispose() is being called while the bubble is in a call to "Draw", which makes no sense and might be related to the way it is designed.
I started encountering sprites/textures that seem to be cycling like animations, and the glitch I had encountered before on the same maps(Map 12, and the castle interior).
At first I thought it could have been some of the changes I've made to the code(experimenting with features I've always been curious about having in EO, which DID include modifying the way certain things are rendered). But after trying the unmodified code I experienced the same issue. After a few tries the map loaded without throwing any exceptions, and that's where things got trippy.
But on a side note, after spending a few days getting a feel for it, this is absolutely amazing. The code is smooth and consistent, easy to manage and expand. You have talent.
Hat + hair render incorrectly for many hats. When this rendering behavior was first implemented, tested with very few cases, and it worked for those. More testing revealed this is still buggy.. Need to research into the behavior for different hats as I suspect that the rendering behavior was hard-coded in the original client.
An additional bonus would be to find a better way to mask the hair when needed using a method other than GetData/SetData.
Two problems:
Any chance to use MonoGame (http://www.monogame.net/ [XNA port in Mono]) instead of native XNA?
It will make possible the client to run on Linux/Mac using Mono, and also, mobile devices.
Implement HP, TP, SP, and TNL status bars in UI. Remove old code.
ToDo list for Status Bars:
EndlessClient.Hud.StatusBars
directory)HudControlsFactory.CreateHud()
. Add them to the return collection with their associated HudControlIdentifier
Support item inventory management. Remove old code and item handling.
This is going to be a larger project since the old code for items touches a lot of different areas. Potential ToDo list for items:
When a dialog is set to 'Ignored' (such is the case for EOPaperdollDialog and EOChestDialog) and is the top-most dialog, typing text in the main chat text box works ok. However, hitting enter or backspace does not work as expected (nothing happens). Suspect this is because these keypresses are being absorbed by the dialog and not passed to the text box, which is updated after the enter keypress is absorbed.
Need to find a way to pass the enter keypress event back to windows if it isn't handled by the dialog. This may be entirely within XNAControls and not require changes in EndlessClient.
Hello,
I noticed that when you try to spam (right click) remove friends, it will then glitch out the friends list. It seems that it fixes itself, but maybe add a check to prevent removing multiple friends quickly? I haven't peeked at the code much because I'm installing VS atm. I figured I would let you know anyways. I'll post more as I find issues.
Screenshot: http://puu.sh/huQrP/adaae83b4e.jpg
Currently, the mechanics for disconnecting from the game rarely work when not initiated by the player. If the game throws an error and requires a disconnect, usually this results in a crash. Sometimes two dialog boxes display at the same time as well.
This just started as of late, I decided to retry adding my music engine and bam! I can login onto any map just fine(most of the time), but no matter what server I use(including my own test server, using the normal EO maps)- It always throws this exception after I try moving to another map.
I figured it would be best to let you know instead of just ignore it and hope for the best haha.
It might also help to know that, this was not an issue I experienced when compiling a version of the code from about a week ago.
Client crashes when opening who's online, found it. :p
System.NullReferenceException: Object reference not set to an instance of an object.
at EndlessClient.World.ApplyWelcomeMessage(WelcomeMessageData data)
at EndlessClient.EOGame.<>c__DisplayClass33.b__2b(Object dlgS, CloseDialogEventArgs dlgE)
at XNAControls.XNADialog.Close(XNAButton whichButton, XNADialogResult result)
at EndlessClient.EOConnectingDialog.d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c__DisplayClass2.b__3(Object state)
The map changes due to a warp. Currently, this is done by calling EOMapRenderer::SetActiveMap. However, if the active map is in the process of drawing, there is a chance of generating an out of range exception when looking up tile specs with the array subscript operator.
This exception has only been generated in one case; however, it would be best to standardize and possibly rewrite the way that map switching is done, to make sure that the current map stops drawing, the map changes, and THEN the map starts drawing again. Providing proper synchronization for map renderer members throughout that whole process would be the enhancement.
Implement map item interaction with items that are visible on a map.
This is potentially large since mouse cursor hasn't been (re-)implemented yet. Potential ToDo list:
Item display is already being handled. Once the inventory is in place and the mouse cursor is working, this should be a relatively easy feature to implement.
Maintaining two separate project branches is getting annoying. Also, being restricted to .Net 4.0 is causing some issues.
Would like to remove dependencies on Microsoft XNA implementation to reduce maintenance effort for adding new files and to allow use of newer language features (such as async/await).
Different platforms could then use alternate project configurations instead of maintaining separate projects.
Speech bubbles do not draw in the correct order.
For instance, if someone talks and is near the edge of the screen the bubble will overlay over the hud. Or, if a dialog is open, the speech bubble will display over it.
This was reported and fix before but has since become a problem again.
When attacking, the SP counter never drops much below the max amount.
When casting a spell, the SP counter is never lowered by the cost of the spell.
Started happening after commits a353519-b0ac380, haven't been able to isolate much of the issue aside from that(for me) it happens when using the warp at map 5- x86y47, just leaving Aeven to the Malone Outlet (map 7).
Standing beside the warp for a few seconds to get across maps seems to work, and I tried using a Try-Catch statement to simply skip the issue, but it just crashes the client without an exception.
PMs are great, but why only two tabs?
We should incorporate multiple PM tabs above 2, they'll shrink at 3 pms, and any more there will be an arrow to move the pm bar left or right to other PM tabs.
@ two
[ Testuser (x)] [ Testuser (x)] [ Scr ] [ Glb ] [ Grp ] [ Sys ]
@ Three
[ Te.. (x) ] [ Te.. (x) ] [Te.. (x) ] [ Scr ] [ Glb ] [ Grp ] [ Sys ]
@ More than three
[ Te.. (x)][ Te.. (x)][Te.. (x)]<> [ Scr ] [ Glb ] [ Grp ] [ Sys ]
Ive been messing with the code myself lately, only been able to do some minor things & easily added stuff that I can look at other code to reference, but I'm still figuring out how you put this together so I can work some myself.
CPU usage spikes when rendering large outdoor maps (compared with small indoor rooms). This can definitely be improved.
CPU usage (AMD Phenom II X2 560) on map 192 (small 10x10ish room) vs map 5 (large 90x90ish outdoor map). Note the usage spike to ~35% when the map changes, gets as high as 45-50% when walking, depending on NPCs in the area. Hovers around 10% on static map even during walking. GPU usage does not exceed 6-7% (Radeon HD 6770).
A number of maps show this red pad thingy as the ground tile when it is a map edge (notice in the corners of indoor room maps especially). Need to investigate changing it so that any tile spec that is "Map Edge" does not render a ground tile beneath it at all.
Since the Utility projects were developed, the code has changed a lot. The following projects use an older coding style and have not been maintained to high standards. Most (if not all?) of them are no longer functional.
EOCLI also has not been maintained since the C++/CLI DLL was deprecated in favor of pure C# support. This project should be deleted - originally it was left around for historical purposes but there is no reason to keep it any more since it isn't referenced by the solution.
Hi,
Need to implement the PLAYERS_AGREE packet.
In order to open a sign on a map, you must click on the lower-left square on the sign.
Preferably, a user would be able to click on any area of the sign graphic (right now it is only based on that one tile spec)
File transfer success is inconsistent in debug builds. It eventually will work, but certain times the client has to be launched and logged in upwards of 4 or 5 times before the files all load correctly (sometimes the downloaded files even need to be deleted).
Not sure if release builds have this same issue since the timing is slightly different.
File transfer is done by the original client after a character is selected, and occurs immediately before showing the in-game screen. The client diffs the map and pubs and loads them if there is a change. Pub files need to be implemented prior to login because they are now used to decide how to render hair.
Saving data files does not update the rid (revision ID). This value is a 4 byte array containing the bytes of a CRC32 on the file's data. The value of rid used when computing the CRC32 should be 0x00 for all 4 bytes (with all other data unchanged). After the CRC32 is computed, rid is updated with the result and the file is saved.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.