Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Pikachu

Members
  • Posts

    54
  • Joined

  • Last visited

    Never

Everything posted by Pikachu

  1. Seems like something I would be interested in. I've had a website idea for a while now. The project would be an extension of my game on the web - to complement some of the ingame features. There would be a sizeable amount of backend PHP work, as well as HTML and CSS. As for the game itself, it's a Pokemon Mystery Dungeon MMO (Pokemon Mystery Universe: www.pmuniverse.net). We have a small community established already and have been working on it for several years now, so your work will be put to good use. Naturally, you'll be given full credit for what you do. PM me if you want more details!
  2. I apologize if I sound condescending; I really don't intend to do that. I think it's safe to say that the majority of the community would appreciate an updated engine. The many custom versions, and previous failed attempts at porting to another language, support that. If there were a stable engine that people wouldn't feel the need to optimize constantly, there would end up being more games than custom versions and not the other way around. Good luck! I will gladly lend my experiences and support if it's needed.
  3. > Oh jesus we're no where near that stage [Raichu!](http://www.touchofdeathforums.com/community/index.php?/user/45328-raichu/) That would come in time, this was merely meant to be a brainstorming topic and nothing more. We aren't? What exactly are we brainstorming, then? You've already jumped past that stage in this thread; you need to go back to it. The fact that we are discussing SQL in this thread before we have even defined what problem it will solve is an indication of that. What we need to do is brainstorm and identify specific sections of code that are slow, or that we want to change. Only after that can we start brainstorming solutions. Just because a relational database is used in a majority of web applications does not mean it is appropriate here. In my experience (this is from Total Eclipse mind you, so unless something major was done to slow things down, it should be applicable) data access has never been a bottleneck or slow enough to create unnecessary load times. This thread should be about defining specific problems, slow downs, and optimizations. Once done, we can really see if a rewrite is needed.
  4. I fully understand that it's just an idea, and that you aren't committing to anything. I fully agree that a rewrite would be a great thing. However, it needs to be planned and done well. Using a tool that is on the edge of death is foolish, because, it's at the edge of death. It may technically still work, but if someone is going to start on a project as massive as a MMO engine, it will need to be done with something more modern and more functionality to ensure we won't be doing rewrites every few years. I really would like to emphasize on the planning needed. You're using blanket terms right now: "Map Processing", "Rendering", "Movement", "The Tile Engine". Have you performed benchmarks and identified exactly what the bottlenecks are, and even if it would be possible to resolve them without going through a rewrite? You'll need to focus on optimizing what the engine should do. Not features, but things like resource management and security. You'll need to be far more specific with what you want to accomplish before the coding can even begin. Expand on those points you currently have, with as much detail as possible. Avoid blanket and marketing terms ("Faster, much faster"). And most importantly, aim to build an engine with maintainability in mind and how to future-proof it, to prevent major rewrites in the future.
  5. Rather than worry about which database engine to use, or what the next best feature is, try to rethink the idea of what an engine should be. Being feature-full is a good thing, however, the most important thing that an engine should be is maintainable. Maintainability does not just mean easy-to-read code, it's also a measure of how easily you can make modifications. In two years, the next best database engine will be released. It will be better than anything there is right now. How do I know this? Because software moves at an incredible rate, and it doesn't wait. If you do not design for the future, with appropriate abstractions to support all database engines (among other drivers), you will be right back at this point in two years. Most of the differences listed in the first post are game features, when the idea behind this post is to improve the engine. Focus on the architecture of the engine and how all the systems work together, rather than a few cool features, and the engine itself will grow to be amazing.
  6. I think that this should not be done. I think the main reason one is the question of, why VB6? This community has wanted to move away from using VB6 for a while now, and despite this desire, it still hasn't. Plenty of people have started porting to a different language, Java, C#, VB.NET, C++, and yet, all have failed. They either gave up after realizing how big the project was, or just didn't have enough time to finish. Both of those reasons are perfectly reasonable and understandable. No one here works on the engine all day, everyone has things to do. However, recently, people have been focusing on micro-optimizing VB6, even though the language lacks the ability to use new techniques. Things like spawning and managing multiple threads can't be done simply in VB6\. A project like this, while well-intentioned, would ultimately be another optimization for a language that can't be optimized any further. Yes, I am aware that there are parts in the networking that are redundant, but that does not warrant a full rewrite of the engine. Continuing to support a VB6 version with updates as massive as full rewrites of the engine would effectively eliminate the opportunity to move to a more modern language. Not only that, but if a VB6 rewrite is done, it would need to be ported later on when VB6 is unable to run on Windows. This may be next year, in 2 years, or in 10\. But that day is coming, and if you are given the chance to start anew, start with something that will survive. You should focus on rewriting in a more modern language. There would also need to be multiple people helping you. As an example, take Eclipse.NET. From what I understand, it is an "official" version. Right now, however, it appears to be closed-source (or maybe partially open-source). Whatever the case, it's being written by a single person. Writing an MMO engine on your own is difficult, as is porting one. However, people seem to be avoiding working as a team on a single project. The influx of custom versions only attests to that. I have not seen a single "team" working on a custom version. Part of the reason has been stated in multiple threads, many times. Working with multiple people leads to a non-standardized structure, poor readability, and in general, poorly coded features. But that is far from the truth. It is very possible, especially in this community, to have multiple developers work on a single project and still maintain the structure and clarity that can be achieved by a single developer. To create structured code, you need to have a structured process. The "hodgepodge" of tutorials is only that because there is no single coding standard. People use whatever they are more comfortable with, rather than with the style of the rest of the engine. I'll admit that this post has appeared to have started to veer away from the original topic; a rewrite in VB6 with appropriate optimizations. There is a reason why I am bringing up the topic of developers. Because, before any major change like an engine rewrite can occur which requires multiple developers - and you will not get away with doing it on your own - standards need to be established. Benchmarks and targets need to be set. Coding best practices must be documented, published, and available to all. I am not referring to the best practices set forth in general C++/C#/VB/Java programming, but rather a set of guidelines that all aspects of the engine should follow. And more importantly, the code should be available to all. Anyone should be able to work on the official engine. Whether it is to add a minimap, or pets, as long as it meets the standards set out by the community, they should be able to contribute. Everyone has a different style. Everyone has a different idea. Optimizations can be found everywhere. Challenges will need to be overcome. However, I truly believe that an engine created out of the teamwork of the entire community, rather than a small subset of pre-elected developers, will be able to flourish and grow.
  7. > woot, i loved the scripting engine xd > > to bad it was so slow though… ![:(](http://www.touchofdeathforums.com/community/public/style_emoticons//sad.png) > > edit: i could see other ways of plugins though, like seperating for example, a projectile system, compile it in a dll, so only when th dll is loaded, the system comes alive in the server etc. > > but i think that would be hard to do though ![:P](http://www.touchofdeathforums.com/community/public/style_emoticons//tongue.png) Coincidentally, this is something I've been working on for the past few days. My ultimate goal is to build an engine… out of plugins. So, something similar can certainly be made for Eclipse. Mine is made in C#, though. Java or C# would be easier if you wanted to make something like this, since they both have reflection.
  8. Pikachu

    New Developer

    I haven't been lurking here as often as I used to; what's the current version of Eclipse?
  9. I voted against porting to C++. Why? Because I do not see the major benefits that would be attained. Sure, it'll be a little bit faster, but so what? XNA and C# is pretty fast as it is, and certainly fast enough to run games that Eclipse produces. Not only that, but since both languages would essentially be using DirectX, the only difference in performance would be with .NET execution. You already have a good start on the engine, and have gotten through a good chunk of the "hard" parts that I found when I was porting the engine myself (rewriting networking, basic graphics and rendering). If people really want a C++ version, at the very least finish what you've started, then port it to C++.
  10. > Well registration is almost done. Just have to add in the networking. school got in the way, but monday I should finish. Then im also waiting for him to change from git to svn, because for some reason git hates my computer and won't work with https links lol instead of svn, try Mercurial. It's similar to git, and doesn't suffer from the problems that svn does.
  11. Quickly looking over the code, I just have a few suggestions to improve performance. 1) You seem to be calling GC.Collect() quite a few times. The .NET garbage collector has gotten rather efficient at cleaning up and manually invoking it can do more harm than good in certain situations. It's best to let it work on it's own, unless memory usage grows too much. 2) You should consider using the "using" statement. Not only does it make code cleaner, it also ensures that you do not forget to dispose objects, especially if you are using multiple disposable objects at a time. For example, in your code, you have this: ``` public void ToBinary(string File) { FileStream Fstream = new FileStream(File, FileMode.Create); BinaryWriter Writer = new BinaryWriter(Fstream); { // Write out Account Writer.Write(UserName); Writer.Write(Password); Writer.Write(Email); } Writer.Close(); Fstream.Close(); } ``` With "using", it would look like this: ``` public void ToBinary(string File) { using (FileStream Fstream = new FileStream(File, FileMode.Create)) { using (BinaryWriter Writer = new BinaryWriter(Fstream)) { // Write out Account Writer.Write(UserName); Writer.Write(Password); Writer.Write(Email); } } } ``` Does the same thing, and, as I hope you'll agree, it is much cleaner! Other than that, this project looks to be on a good start so best of luck to you and everyone else helping out!
  12. Actually, using the FilePut/FileGet functions in VB.NET is not the best way to load and save binary data. Those functions are included in the runtime to help with the transition from VB6 to .NET. You can get better performance by using some of the native .NET functions, specifically, binary/xml serialization. The following will demonstrate binary serialization, which is what you asked for. Here are the functions you would need to add to your code to use: ``` Function Serialize(ByVal data As Object) As Byte() 'If TypeOf data Is Byte() Then Return data Using memoryStream As New IO.MemoryStream Dim formatter As New BinaryFormatter formatter.Serialize(memoryStream, data) Return memoryStream.ToArray() End Using End Function Function Deserialize(Of T)(ByVal data As Byte()) As T Using memoryStream As New IO.MemoryStream(data, False) Return CType((New BinaryFormatter).Deserialize(memoryStream), T) End Using End Function ``` And to actually use those functions, here's a full example with your situation: Note the need to import System.Runtime.Serialization.Formatters.Binary! ``` Imports System.Runtime.Serialization.Formatters.Binary Imports System.Windows.Forms Module Module1 Public Player(0 To 3) As PlayerStruct _ Public Structure PlayerStruct Public PlayerName As String Public Level As Integer Public Hp As Long Public Mp As Long End Structure Function Serialize(ByVal data As Object) As Byte() 'If TypeOf data Is Byte() Then Return data Using memoryStream As New IO.MemoryStream Dim formatter As New BinaryFormatter formatter.Serialize(memoryStream, data) Return memoryStream.ToArray() End Using End Function Function Deserialize(Of T)(ByVal data As Byte()) As T Using memoryStream As New IO.MemoryStream(data, False) Return CType((New BinaryFormatter).Deserialize(memoryStream), T) End Using End Function Public Sub LoadPlayers() Dim Filename As String Dim F As Integer Dim I As Integer For I = 1 To 3 Filename = Application.StartupPath & "\Players\" & I & ".dat" If System.IO.File.Exists(Filename.Trim()) Then Dim Data As Byte() = System.IO.File.ReadAllBytes(Filename) Player(I) = Deserialize(Of PlayerStruct)(Data) End If Next I End Sub Public Sub SavePlayers() Dim Filename As String For I As Integer = 1 To 3 Filename = Application.StartupPath & "\Players\" & I & ".dat" Dim Data As Byte() = Serialize(Player(I)) System.IO.File.WriteAllBytes(Filename, Data) Next I End Sub Sub Main() For I As Integer = 1 To 3 Player(I) = New PlayerStruct() Player(I).Hp = I Player(I).Level = I + 1 Player(I).Mp = I + 2 Player(I).PlayerName = "Player " & I Next I SavePlayers() For I As Integer = 1 To 3 Player(I) = New PlayerStruct() Next I LoadPlayers() For I As Integer = 1 To 3 Console.WriteLine("Player {0} [Hp: {1}, Level: {2}, Mp: {3}, Name: {4}]", I, Player(I).Hp, Player(I).Level, Player(I).Mp, Player(I).PlayerName) Next I Console.ReadLine() End Sub End Module ``` There are also many other ways to store data in VB.NET, serialization is not the only way (nor is it the best way in certain situations, but it is easy!). You can learn more about it here: http://www.dreamincode.net/forums/topic/162122-serialization-in-vbnet/ Good luck! Raichu
  13. You don't. That would be the equivalent of scripting, which does not exist in EO.
  14. @Captain: > So far, i got this : > > ``` > Function ConvertNpcToPlayer(BlankPlayerFile As String, NpcNum As Integer) As PlayerRec > Dim OldRec As ConNpcPly > Dim NewRec As PlayerRec > Dim f As Long > Dim n As Integer > > f = FreeFile > Open BlankPlayerFile For Binary As #f > Get #f, , OldRec > Close #f > > ' General > NewRec.Name = NPC(NpcNum).Name > NewRec.Guild = OldRec.Guild > NewRec.GuildAccess = OldRec.GuildAccess > NewRec.Sex = OldRec.Sex > NewRec.Class = OldRec.Class > NewRec.Sprite = NPC(NpcNum).Sprite > NewRec.LEVEL = OldRec.LEVEL > NewRec.Exp = OldRec.Exp > NewRec.Access = OldRec.Access > NewRec.PK = OldRec.PK > > ' Vitals > NewRec.HP = OldRec.HP > NewRec.MP = OldRec.MP > NewRec.SP = OldRec.SP > > ' Stats > NewRec.STR = NPC(NpcNum).STR > NewRec.DEF = NPC(NpcNum).DEF > NewRec.Speed = NPC(NpcNum).Speed > NewRec.Magi = NPC(NpcNum).Magi > NewRec.POINTS = OldRec.POINTS > > ' Worn equipment > NewRec.ArmorSlot = OldRec.ArmorSlot > NewRec.WeaponSlot = OldRec.WeaponSlot > NewRec.HelmetSlot = OldRec.HelmetSlot > NewRec.ShieldSlot = OldRec.ShieldSlot > NewRec.LegsSlot = OldRec.LegsSlot > NewRec.RingSlot = OldRec.RingSlot > NewRec.NecklaceSlot = OldRec.NecklaceSlot > > ' Inventory > For n = 1 To MAX_INV > NewRec.Inv(n) = OldRec.Inv(n) > Next n > For n = 1 To MAX_PLAYER_SPELLS > NewRec.Spell(n) = OldRec.Spell(n) > Next n > For n = 1 To MAX_BANK > NewRec.Bank(n) = OldRec.Bank(n) > Next n > > ' Position > NewRec.Map = OldRec.Map > NewRec.X = OldRec.X > NewRec.Y = OldRec.Y > NewRec.Dir = OldRec.Dir > > NewRec.TargetNPC = OldRec.TargetNPC > > NewRec.Head = OldRec.Head > NewRec.Body = OldRec.Body > NewRec.Leg = OldRec.Leg > > NewRec.PAPERDOLL = OldRec.PAPERDOLL > > NewRec.MAXHP = NPC(NpcNum).MAXHP > NewRec.MAXMP = OldRec.MAXMP > NewRec.MAXSP = OldRec.MAXSP > > NewRec.Vflag = 128 > NewRec.Ver = 2 > NewRec.SubVer = 8 > NewRec.Rel = 0 > > ConvertNpcToPlayer = NewRec > > End Function > > ``` Not the best way to do it, since you should be able to switch characters when already logged in, and not at the character select screen…
  15. Wouldn't updating a players location based on the clients location create some security holes? Someone with the proper tools (packet editor) would be able to warp on a map by just sending a PlayerMove packet with the coordinates they want to go to. Then they can skip blocks, scripts, etc.
  16. The packet trail goes like this: 1) Player tries to move 2) Client checks if player can move | -> If player can move, send the PlayerMove packet, which contains the direction the player is trying to move to. It does not contain the new coordinates. 1) Server recieves the packet and moves the player | -> If the player is trying to out of the map bounds, check if there is a map switchover for that direction. If there is: 1) Send a RequestNewMap packet to the server. (Does not contain coordinates, just direction) 2) Set GettingMap to True 3) Server checks if player is moving out of the map bounds (using the server coordinates). If the player is: | -> 1) Switch maps Otherwise: | -> 1) *server does nothing here* Server should be sending the players X/Y coordinates to the client, as well as telling the client to set GettingMap to False
  17. You would need these variables too: Name As String Sprite As Long Behavior As Byte Range As Integer STR As Long DEF As Long Speed As Long Magi As Long Big As Long MAXHP As Long Exp As Long SpawnTime As Long PetItem As Integer Element As Long SPRITESIZE As Byte
  18. Its actually pretty easy to have the pet return to you instead of warping. ``` If GetTickCount > Pet.LastMove + petmovespeed Then If Pet.TargetX > Pet.X Then Pet.X = Pet.X - 1 End If If Pet.TargetX < Pet.X Then Pet.X = Pet.X + 1 End If If Pet.TargetY > Pet.Y Then Pet.Y = Pet.Y - 1 End If If Pet.TargetY < Pet.Y Then Pet.Y = Pet.Y + 1 End If Pet.LastMove = GetTickCount End If ```That wont check for any blocks, so you would have to add a CanPetMove(Pet, direction)
  19. Should there be one pet per player, or multiple pets per player (changeable by changing MAX_PETS variable) that are always active, or multiple pets per player, but only one active at a time?
  20. I quickly made this: ``` Type PlayerPetRec Name As String * NAME_LENGTH AttackSay As String * 100 Sprite As Long Behavior As Byte Range As Byte STR As Long DEF As Long Speed As Long Magi As Long Big As Long MAXHP As Long Exp As Long SpawnTime As Long PetHeldItem As Integer Element As Long SPRITESIZE As Byte End Type ``` Pretty sure all the data needed for the pet is there. The pet processing code would probably be something like this: (server-side in modGeneral -> Sub GameAI) ``` -normal npc processing code- For i = 1 To MAX_PLAYERS -check if player pet is attack on sight, if so mark closest unfriendly npc as target- -move pet towards npc, if no target set, do nothing as the pet will follow the player- -do the actual attacking- -hp/mp regen- Next i ```
  21. @мсичġġεт: > Yes it is a source edit and a script. > > Edit: > I foudn this this seems something to do with the npc's attacking code. > If frmMirage.chkNpcDamage.Value = 1 Then > If frmMirage.chkPlayerName.Value = 0 Then > If GetTickCount < NPCDmgTime + 2000 Then > Call DrawText(TexthDC, (Int(Len(NPCDmgDamage)) / 2) * 3 + NewX + sx, NewY - 22 - ii + sx, NPCDmgDamage, QBColor(BRIGHTRED)) > End If Npc processing code is server side in modGeneral -> Sub GameAI. The npc attack on sight/movement/respawn/health regen is all there
  22. Maybe this should be made as a script and a source edit? Like, adding Pets array to the player struct, then adding a SendPlayerPetsToMap(map, index) so you dont waste any npc slots.
  23. Pikachu

    Lag in 2.8

    The lag moving is due to the map-freezing "fix" that was added to EE2.8\. Its supposed to update your location whenever you move, but it doesn't do that fast enough so it constantly warps your character on the client… the fix needs to be removed...
  24. @symphonia117: > If its running through a router at all you need to port forward. WLAN and LAN both need port forwarding. The only way it wouldn't as far as I know is a direct connection to the modem or you place the designated ip fro a certain device in the dmz. You sure? Cause I can run a eclipse server on my LAN network without port forwarding just fine, I just use the LAN IP, not the public IP
  25. If its LAN you don't need to portforward, so it's probably a firewall blocking it. Disable your firewall or allow the server port.
×
×
  • Create New...