View Full Version : EverQuest in Unity Engine project
Ensane
08-15-2012, 12:27 PM
Hey guys,
I'm an experienced unity programmer and a old school fan of everquest (rallos zek/sullon zek)
I been reading about a few attempts to make a eq client... One guy building his own in C++ and another using unity...
What i want to do is see how much interest/support i could get and id be willing to lead this project and build a new client using Unity.
Why I think unity would be good as it will allow us to compile a client for Mac/Windows/Linux/Web/Android/IPhone how cool would that be? and we wouldnt have to spend alot of time writing a new engine and spend the time just building EverQuest to work with the already sophisticated emulator servers.
This will allow for alot of things, improved graphics options, a true classic theme, as well as improving the code all together to make EQ less hackable, and we can go custom route with it and make a new game based on eq only more modernized. Options are endless but, we all know the eq client now is holding things back.
Please feel free to reply here on your thoughts and message me on skype: bruinp8n
rhyotte
08-15-2012, 04:21 PM
A couple of reasons I want to see this project take of:
- 1) *LINUX* !! ...did I mention LINUX? Sick of windows.
- 2) The client Chase / legality issue in obtaining / server-different-clients-issues are a pita. One client to wrestle with would make life on all sides so much easier.
I really hope this takes off.
Ensane
08-15-2012, 04:48 PM
Well im all about developing/managing it, but, only if i can get additional support.
Caryatis
08-15-2012, 07:28 PM
Its a pretty safe bet we will never have a non-Sony client, for quite a few reasons but really the only one that matters is the mountain of work is to accomplish something like that.
Also a problem is that nobody has extracted useable animation information from EQ models(or whatever killed Tyen's browser thing, I never really paid attention) and its just not feasible to reanimate every model in Everquest.
If you want to get momentum on this project, you can't wait for others. Start proving your concept and create a plan, its going to be very hard to convince the people with the skills to help unless they can see a way through. Don't worry about the easy stuff either, everybody knows you could reproduce the inventory or compass in Unity without issue but get a pipeline for extracting and importing assets or something like that and you might get something going.
Ensane
08-15-2012, 08:47 PM
Yea I totally agree, however, before I can really commit myself to a new project I'd have to have a few good men to start with.
I been trying to contact both pixel & tyen... if i can get them both on-board then that should be enough motivation for me to get started.
Tyen05
06-02-2013, 07:48 PM
nobody has extracted useable animation information from EQ models(or whatever killed Tyen's browser thing, I never really paid attention) and its just not feasible to reanimate every model in Everquest.
Problem Solved
http://www.eqemulator.org/forums/showthread.php?t=36726
Shin Noir
06-10-2013, 04:37 PM
I don't like being a naysayer, but I'm not sure it's worth the investment time is the largest challenge. It would definitely be a faster production to develop EQ with modern tools compared to development of original EQ, but it would need a lot of time and dedication between many experienced developers (who likely work full time engineering cool stuff for cool amounts of money) to get the ball really rolling.
But if you can make it happen, more power to you.
I think a smarter use of time is developing the PEQ/EQemu source, as it is in a very playable state with great contributions but always available for more development and refinement.
Imagine if we could do edits to the EQ client executable? Things like custom handshakes for network traffic, SSL encryption, improving range of valid numbers to display on client (beyond caps), etc.. the last I checked EQEMU intentionally avoids the client executable to try to stay as legal as possible, but even still, this is what I'd like to see to allow emu servers more capability.
Ensane
11-14-2013, 04:56 AM
Something that could happen tho if we had our own client is we could eventually re-create our own game that captures the eq nostalgia... We got alot of the server end coding done for it with this project... Could improve it and end up with our own community built game in the end if we did get a client going.
knowom
11-14-2013, 05:20 PM
Something that could happen tho if we had our own client is we could eventually re-create our own game that captures the eq nostalgia... We got alot of the server end coding done for it with this project... Could improve it and end up with our own community built game in the end if we did get a client going. That's pretty much what every MMO company has done basically just they've kept it all closed source and proprietary.
Tyen05
11-16-2013, 09:43 PM
Entire titanium assets will be up for download soonish.
Assets are ezpz to put into unity and we are mainly focusing on the initial connection between eqemu and unity
rhyotte
11-17-2013, 06:44 PM
This is sounding very promising...!
Tyen05
11-18-2013, 09:20 PM
Thanks bro.
rhyotte
11-20-2013, 01:04 AM
I am going to install OpenSuse 13.1 tomorrow and kick the tires so to speak. Their Open Build Service looks very promising. Point being... this Unity // open client is something I would be only too happy to try to contribute to. I am not a coder, but I will see what I can do for packaging up OpenSuse 13.1 builds etc...
I would also be willing to put work into a User Interface basic "mod" if such a thing would be of interest.
One of the things about OpenSuse 13.1 that is of interest to me is that this will be supported for 3 years :)
Gary
Tyen05
11-20-2013, 10:06 PM
Not sure what the correlation between Unity & OpenSuse is, but if you want to contribute jump into the source I provided on eqbrowser.com and mess around a bit.
Any work connecting Unity to Eqemu source is appreciated.
The GUI we will be using is a plugin called NGUI that I have yet to purchase.
I currently have eqbrowser on a crowdfunding platform so I can raise funds to purchase a few pieces of software/plugins.
Shin Noir
11-21-2013, 12:59 AM
I own NGUI, but it goes against it's copyright to release it on an open source project...
If you close the source to only people you give permission to, I could contribute my copy of NGUI.
Shin Noir
11-21-2013, 03:38 AM
I took a few minutes playing around with the eqbrowser, seeing how stuff is being done. Since sounds and animations are interesting, wrote a quick mouse raycaster thingie and now you can click stuff.
@ensane I would love to help with the EQEMU/browser support, I just know I don't have enough time due to RL projects.
Here's that demo. (I forked the project and pushed any changes I did)
http://gigaplox.com/eq/web.html
Tyen05
11-21-2013, 05:30 AM
Any help on networking is valuable. I plan on purchasing NGUI way later.
Lol at your build. The NPCs were a good touch, and lol @ dark elf doing a human monk animation with keypress 6. Some hilarious wiggle arms.
Tyen05
12-02-2013, 07:23 PM
Update:
New assets incoming soon, this includes another pass of the NPCs as there are more heads and textures that need to be added.
As shown in Shin's build there were some textures missing, so that's going to be fixed.
More info on this round of Assets soon.
Tyen05
12-08-2013, 11:43 AM
ECOMMONS example - textures, texture maps, zone model, object models, object Locations via XML
Models in .x format - I use http://mofo.pns.to/wibs/#5 to import .x into 3ds max
http://eqbrowser.com/misc/ecommons.rar
http://oi42.tinypic.com/2lj5eog.jpg
sereal
12-12-2013, 05:39 PM
A lot of the work could be mitigated by using an already established opensource client.
One example would be "Ryzom" http://www.ryzomcore.org/ One of the interesting things they did was release ALL of their games assets under the CC license.
Worldforge is another one... http://www.worldforge.org/
I mean don't reinvent the wheel guys.
I'll also say that I think there are some issues with unity and linux. The main one that comes to mind (I could be wrong) is that development can't be done on linux you can only target binaries for linux.
Tyen05
12-12-2013, 07:02 PM
-Importing EQ assets and having the client communicate with an Eqemu server has to happen regardless of what we use.
-We are using EQ assets only.
-Both of those clients look like they don't run in a browser.
-Id rather use a platform that is becoming the standard for game development which has employees and updates.
-I don't believe the phrase "reinventing the wheel" is applicable when saying "Move from Unity to some other platform."
sereal
12-13-2013, 02:57 PM
-Importing EQ assets and having the client communicate with an Eqemu server has to happen regardless of what we use.
-We are using EQ assets only.
Agreed. Though there are advantages in regards to having alternate free to distribute and modify assets. Someone else might be more qualified to discuss the legality of distributing the EQ client assets (and effectively running it in the browser is doing that)
-Both of those clients look like they don't run in a browser.
Unity browser extension does not run in linux (as far as I can tell). The advantage of the browser is portability and what you're proposing is not portable. Technology like http://threejs.org/ is far more portable.
-Id rather use a platform that is becoming the standard for game development which has employees and updates.
That's arguable. Unity has a indie following for sure. Ryzom has employees and if you bothered to look at the technology at all you would see a very active reop https://bitbucket.org/ryzom/ryzomcore/commits/all
-I don't believe the phrase "reinventing the wheel" is applicable when saying "Move from Unity to some other platform."
Of course it is applicable. You are doing the work other platforms have already done. It's not like i'm says to use say a techX engine.
Going with unity means you exclude certain developers. Specifically any linux developers.
Regardless it's not my project. I can understand why someone familiar with unity might want to stick with it instead of learning something new. Maybe I misinterpreted the reasons behind the project.
I had mostly assumed this was to allow the EQ client to be run on platforms other than ms windows.
Ensane
12-13-2013, 03:28 PM
Actually Unity does compile to Linux now and unity is far more powerful then Ryzom and will save alot more time with a better pipeline for importing and using are from eq too being able to code and test systems.
Anyways, im working with the EQ browser project now as well and im working on a UI system to load EQ's ui .xml data and recreate EQ's ui within Unity.
We are also working on getting a simple connection to authenticate to and from eqemu and unity.
There should be alot of progress made in the comming weeks, as this develops we may need more help. Right now it would be kind of EQEmu to release us a few of there source files so this process can speed up =P
sereal
12-13-2013, 03:49 PM
Actually Unity does compile to Linux now and unity is far more powerful then Ryzom and will save alot more time with a better pipeline for importing and using are from eq too being able to code and test systems.
Unity will compile. The web browser thing does not (a quick google showed that apparently they plan on releasing a plugin for linux, but the requirement for a plugin is broken one)
I haven't actually looked too deep into Ryzom so I can't really say one way or the other. Unity is certainly more flexible as a general purpose engine.
Anyways, im working with the EQ browser project now as well and im working on a UI system to load EQ's ui .xml data and recreate EQ's ui within Unity.
We are also working on getting a simple connection to authenticate to and from eqemu and unity.
There should be alot of progress made in the comming weeks, as this develops we may need more help. Right now it would be kind of EQEmu to release us a few of there source files so this process can speed up =P
What files? EQEmu code is completely available. https://github.com/EQEmu/Server
If you mean the loginserver crypto stuff - that should be released to the public. I still have never received a clear answer to why it hasn't been. That's another discussion though.
sereal
12-13-2013, 03:51 PM
on a side note, I take it this isn't the correct git anymore? https://github.com/eqbrowser/EQBrowser only one commit from 6 months ago.
rhyotte
12-13-2013, 08:15 PM
That is a bummer...
Tyen05
12-13-2013, 11:12 PM
I haven't actually looked too deep into Ryzom so I can't really say one way or the other.
Ryzom is a joke compared to Unity. This is a Unity thread.
Someone else might be more qualified to discuss the legality of distributing the EQ client assets
I don't care
Unity has a indie following for sure
Unity has received over $17 million in Venture Capital and has more corporate partnerships than any game development platform on the market.
You are doing the work other platforms have already done
Ryzom has not successfully connected to Eqemu nor does it have EQ's assets nor does it run in a browser. Therefore what you said is false.
I had mostly assumed this was to allow the EQ client to be run on platforms other than ms windows.
Our domain is eqBROWSER, therefore it is safe to assume it will be for the BROWSER.
only one commit from 6 months ago.
That is the correct RELEASE git.
You are most likely not going to see a public repository of non-stable or questionable source linked on Eqbrowser.com. When a big milestone is reached, the git is updated, which contains big plays.
rhyotte
12-14-2013, 12:27 AM
Running linux here... no browser plugin. Hopefully they get the linux plugin soonish.
Tyen05
12-27-2013, 04:46 AM
Update-
Basic Summary:
Besides the regular asset/mechanics grind, we can send and receive packets from Unity to an Eqemu server, but we have to do a handshake for each packet (which is our current networking issue).
Advanced Summary:
We are halfway/half-assed through setting up the EQ packet protocol checksum.
The packets are the easy part, but the protocol acknowledgement system is still unimplemented (OP_Ack) which is our current "hangup".
I've included the Prototype's Source below if you want to check it out.
http://eqbrowser.com/misc/EQLoginClient.zip
public enum EQProtocolOpCodes
{
OP_SessionRequest = 0x01,
OP_SessionResponse = 0x02,
OP_Combined = 0x03,
OP_SessionDisconnect = 0x05,
OP_KeepAlive = 0x06,
OP_SessionStatRequest = 0x07,
OP_SessionStatResponse= 0x08,
OP_Packet = 0x09,
OP_Fragment = 0x0d,
OP_OutOfOrderAck = 0x11,
OP_Ack = 0x15,
OP_AppCombined = 0x19,
OP_OutOfSession = 0x1d
}
drakelord
12-30-2013, 02:13 PM
When you say hangup, do you mean you just haven't done it yet or are you having an active problem with it?
Edit: And the handshake issue, are you having a problem where you have to re-establish the tcp connection for every packet or something? That would be horrendous.
Tyen05
12-30-2013, 04:10 PM
When you say hangup, do you mean you just haven't done it yet or are you having an active problem with it?
Both
Edit: And the handshake issue, are you having a problem where you have to re-establish the tcp connection for every packet or something?
The handshake issue was that we had to re-authenticate every time a packet was sent.
Those problems are now solved and we have the packet sequence pretty much done (sending / receiving).
The networking will be released open-source just like everything else.
We basically took Derision's EQExtractor code (https://github.com/EQEmu/Server/tree/master/utils/EQExtractor2/EQExtractor2) and tweaked it for a networking scenario instead of a packet collection scenario. Uses naez's class for sending and derision's constructor to recieve the proto packet
naezbutt
12-30-2013, 04:53 PM
My sending class was just a quick prototype of a UDP client (read: it's pretty shit). It will likely need read/write threads and processing in the main thread in a design pattern that is seen a lot in the server code, so that network I/O will not lag each frame. Actual packet managers will probably need to inherit from this generic UDP client base class so that it can be reused for communications with the loginserver, worldserver and zoneserver (with a different virtual function for each, handling packet opcodes). It's got some utilities in it though that can translate C# structs into a raw byte buffer compatible with C, the Crypto API .dll symbol imports are working (though we still need embed it as a resource or something so it can be loaded by the web client), and I'm told Secrets has the CRC16/32 checksums working now too. Secrets is working on tying the infrastructure together.
It's still kind of a clusterfuck right now but once we get through to the breakthrough point of this network backend and can reliably commmunicate with the server, we should be able to rapidly make progress on a ton of features like tracking movement, attacking, commands like /who and /con etc, adding spawns/other players, and some of the more basic spells like heal and nuke.
drakelord
12-31-2013, 10:07 AM
I'm looking forward to this project simply because it'll make porting custom content easier. EQEmu is such a robust server solution in it's current form. It'd be nice to see it used for more diverse situations.
Tyen05
02-11-2014, 12:45 AM
Update:
Secrets has generously offered to create an open-source way for developers to create custom clients to connect to an Eqemu server.
I don't believe many will understand how legendary this will be for actual custom client control, but this is a big deal. Secrets will be going down in EQ history as the person that allows any developer to have complete client customization for EQ.
Naez has started with Unity Gameplay Mechanics in relation to the 450 op_codes on the Eqemu server.
For example, you feign death in the game, and the server knows your feign death.
Tyen/Salty is continuing asset implementation into the Unity Engine, starting with Ecommonlands.
Ecommons object XML (rotation, scale, location) into Unity. (this) (http://support.microsoft.com/kb/308333)
Requiem is "thrashing" the server code and also making it more customizable in-game by putting "things" in the database.
Example; having a database editor in-game with additional options such as waypoints and spawns to customize your server.
Secrets
02-11-2014, 07:52 AM
Let me make it clear Salty: As long as you are wanting to attack Project 1999 and EQEmulator servers, you are considered too mentally unstable to assist in any projects.
If anything is done by myself, it will be open sourced so you could benefit from it. I am not 'working' for you, I am working for everyone.
image
02-11-2014, 11:23 AM
http://2.bp.blogspot.com/-UUBBVvfBUcM/T1t8Zi673mI/AAAAAAAAA0c/uEdZ-PA4IpI/s1600/homer-simpson-bush-gif.gif
Tyen05
02-11-2014, 12:15 PM
If anything is done by myself, it will be open sourced so you could benefit from it. I am not 'working' for you, I am working for everyone.
Exactly how I stated it in my post, and I appreciate your continued contribution towards Open-Source EQ development.
Tyen05
02-12-2014, 05:30 PM
you are considered too mentally unstable to assist in any projects.
I'll bite.
You may feel I'm "unstable" because I like to demonstrate server-related problems, but the EQEMU code-base is becoming more stable due to what the EQBrowser team found and the information I have provided EQEMU developers. Everyone who has played any Emu server knows things don't get done unless you generate attention.
I have yet to see any asset extraction tool (besides the one we created) that is able to do Models, Animations, Textures, Mats, & XML rot/scale/loc all at once.
I am assisting & contributing openly in custom client development, and have made huge strides, are you?
demonstar55
02-12-2014, 05:40 PM
How to correctly report crash bugs with opcodes: Make a post with which opcodes can be used and how. If you want to provide a proof of concept crash plugin, send the source to one of the devs. If you want to include a tiny snippet, I personally have no problem, but some of the other devs might not.
How not to report crash bugs: Provide a compiled plugin in a public forum without source and not mention which opcodes cause problems.
Note: I like open disclosure on these things, but making it extremely easy for anyone to just grab the plugin and cause havoc is the wrong way to go about it. Calling devs names is also not a good thing. The thing is, more of the problems you've guys found were fixed because of the attacks you performed on servers, not you reporting them responsibly.
Tyen05
02-12-2014, 05:48 PM
Make a post with which opcodes can be used and how. If you want to provide a proof of concept crash plugin, send the source to one of the devs. If you want to include a tiny snippet, I personally have no problem, but some of the other devs might not.
I have done what you described, yet the information is hidden from the public, as is anything that could make the project more stable for anyone starting a server.
It's basically the main problem with EQEMU "open-source development."
You want to gather anyone who has the time and expertise, yet keep it hidden from anyone who could contribute.
It's like a frat or sorority. Only the "cool" kids run the stable code, while everyone else is left in the dark.
Tyen05
02-12-2014, 05:53 PM
I'm a dickhead because garnering attention is the only way to get things done around here. I'm ok with being the bad guy.
If anything is done by myself, it will be open sourced so you could benefit from it. I am not 'working' for you, I am working for everyone.
This is the real story, and what is going to jump-start custom client development.
I don't care who likes or dislikes me, but THIS is important for the development community.
demonstar55
02-12-2014, 06:00 PM
If you're talking about the post you made yesterday, that would fall under doing it wrong.
Repeatedly crashing clients on P99 is also doing it wrong.
How you should of reported it since you seem to be completely incapable of understanding:
The opcodes OP_Emote and OP_GMSearchCorpse can be forged with MQ2 sending a non null-terminated payload that causes zone and client crashes.
That provides enough details so a dev can fix it, it also gives one details to build a plugin to cause problems for servers, but that's okay, we need to fix those things. The dev looking at the problem shouldn't have to open up your plugin in IDA to see what you're doing to cause crashes :P
Tyen05
02-12-2014, 06:03 PM
It's deeper than that. Every instance of strlen() is sploitable.
Also in terms of r99/p99, Rogean and I don't exactly have open lines of communication.
He makes it to where I can't communicate with him, so I have to show him.
Calling devs names is also not a good thing
Have not and will not.
demonstar55
02-12-2014, 06:11 PM
Have not and will not.
You called me names :P
Tyen05
02-12-2014, 06:13 PM
You called me names :P
I would only call you a pal for contributing posts in my thread, whether in agreement or disagreement.
Tyen05
02-12-2014, 08:10 PM
Update:
Found how to crash anyone running macroquest by overflowing it in multiple ways.
Will release it on the forum at some point.
An crude example, guild id of 0 will crash MQ. Ofcourse you can turn off mq captions to bypass but this is an example
Tyen05
02-16-2014, 04:37 PM
A lot of times when I post in here I use my posts as references so I can come back to it. So if it seems like I'm talking to myself, it's probably the case.
So anyway, we are pushing forward with custom client development whether Secrets decides she wants to be productive or not. Here is our current Prototype source (it's shit, but keeping things open to the community as always) http://eqbrowser.com/misc/EQLoginClient.zip
From my understanding, to properly send and receive an opcode and related packet we have to emulate TCP in UDP... i.e. 3 way Ack(nowledgement of packet) handshake.
Some data, like chat message packets, is sent encrypted but we have that part done.
We need the ack system, the tcp in udp bullshit, and we need the library to be 3 threads.
1 main thread, the packet processing consumer thread which we have written on our own.
What we need is a producer thread for incoming packets, and a consumer thread for outgoing packets, so there will be 2 shared "volatile" mutex'd stacks (incoming and outgoing packets)
It gets even more complicated since there needs to be 2 stacks for incoming and outgoing (aka 4 mutex'd stacks) because some packets don't need the Ack system like movement packets, and other physics based packets.
brokentechnology
02-16-2014, 08:28 PM
"whether Secrets decides she wants to be productive or not."
Sorry, really irrelevant, but Secrets is a girl? If so, badass. Glad to see a female coder / dev :P (I think KLS is to right, or no?)
(I think KLS is to right, or no?)
Only if you believe Cavedude misinformation.
brokentechnology
02-17-2014, 11:55 AM
Only if you believe Cavedude misinformation.
Sadly cavedude has yet to fail me....Maybe I should look into his information source more.
Lord of Steel
02-17-2014, 02:09 PM
Update:
Found how to crash anyone running macroquest by overflowing it in multiple ways.
Will release it on the forum at some point.
An crude example, guild id of 0 will crash MQ. Ofcourse you can turn off mq captions to bypass but this is an example
very nice!
Please share =)
cavedude
02-17-2014, 05:26 PM
As far as I am aware, KLS is a man. She told me this herself.
Tyen05
02-17-2014, 11:29 PM
Unity3d Plugin, a bitcoin-miner that integrates within your game. Users generate bitcoins for you while playing.
You have to email them for early access contact@icoplay.com
http://icoplay.com/icominer-faq/
Trying to follow along here. I've been lurking since whenever this account was created. It really seems like Tyen has the right idea about handling the EQEmu client with Unity, in browser and all of that. Whether users know it yet or not, I think this is going to be the end-all Classic/Titanium/Whatever client killer.
Are secrets' c# skills the last big thing that's needed to push forward?
Tyen05
02-28-2014, 07:59 PM
Thanks pal,
I made a page to update on the most recent roadblock in development.
http://eqbrowser.com/help/
First post is explaining what needs to be done with: unity-client to Eqemu-server. All the source is available.
Null is putting the prototype into the Unity project. There is a sentence in there about eqemuauthcrypto, we are probably going to change encryption to SSL. C++ DLLs are not allowed in Unity3d Webplayer. They are allowed for Desktop, so the new unity project will have that included so the project can still connect to an eqemu server pre-ssl. The encryption methods on the server will change depending on the client connecting to it.
Also if you are a unity guy, and are interested in a job @ pantheon, send your resume and cover letter to jobs@pantheonrotf.com
Tyen05
03-19-2014, 12:58 AM
Huge news for Unity.
Mozilla and Unity are announcing new deployment tools bringing Unity-authored games to the Web without the need for plugins, made possible thanks to Mozilla-pioneered technologies including WebGL, a Web graphics library and asm.js, a supercharged subset of JavaScript. Unity’s WebGL add-on will be made available with the release of Unity 5.0 later this year.
https://blog.mozilla.org/blog/2014/03/18/mozilla-and-unity-deliver-award-winning-game-engine-to-the-web/
rhyotte
03-19-2014, 02:27 AM
Seen that earlier today. Good news indeed!
Tyen05
03-20-2014, 06:50 PM
Mormons approve of EQBrowser
http://i.imgur.com/8s2fECV.png
Tyen05
03-24-2014, 12:33 PM
Null added our C# networking prototype to a fresh Unity project so we can try and build the networking part of the client. It's separate from the main build so the focus can be on point.
It's still shit, but it's a start.
https://github.com/eqbrowser/Network-Proto-Unity-to-Eqemu
Tyen05
04-17-2014, 05:56 AM
My asset extractor pal made a video.
http://youtu.be/d6IZIoXocQA
Tutorial zone in Unity
Tyen05
04-21-2014, 09:09 PM
This will create a menu item in Unity to make XML import happen for objects.
You have to make a prefab resource called "Dummy" in "Objects" directory (this must be located in a Resource directory). The rotations are in radians and not degrees. You may see multiplyers like "pos *= 0.3f", this is for scaling.
In case your scene is rotated you should rotate it, OR modify the script to replace coordinates or rotation parts. Depends on your project, really.
Unity XML Object Importer: http://eqbrowser.com/misc/EQObjectImporter.cs
This is an example of the XML: https://github.com/eqbrowser/Ecommons-Objects/blob/master/ECOMMONS%20-%20ECOMMONS.xml
Tyen05
05-12-2014, 06:17 PM
Points of interrest:
- modells are in blender files and not fbx
- there are some good shaders you may like for transparency (ambient light is not handled, so works only at daylight)
- to run the project you need account for photon networking - free licence is good enough
- the modell (human male and a skeleton) is rigged for use with fbx animations. so if you take animation from other locomotion modell, that will work with this.
http://eqbrowser.com/images/tutorial.png
Awesome! So nice to see the updates.
Tyen05
05-13-2014, 07:45 PM
Video of me poopsing the build, lol.
http://youtu.be/AOvH2fYhzM8
Terrible video of the first multiplayer test, terrible camera angle, super bad.
http://youtu.be/iH6odVs04PM
rhyotte
05-13-2014, 07:53 PM
Still cool to see progress.
Tyen05
05-14-2014, 04:19 AM
I put my "test" builds @ http://eqbrowser.com/trash/
It currently has multiplayer, but there is a lot of bugs you are going to find.
Right now the camera is stationary, if you get lost you can click the button on the top left that says "Safe Point" and it will warp you back to the camera.
Load multiple tabs if you want to see the multiplayer in action.
Tyen05
05-14-2014, 07:39 PM
Everyone now spawns with their own camera, praise.
There will be the same 3 angles as EQ:F9/EQB:V1 at some point.
There is a bunch of stuff in v1 that isn't in v2 that I'll be swapping over. Jump for example.
Characters take wide turns on v2 and there is no animation for walking backward. You'll notice tons of weird bugs like that in the meantime, like no swimming.
http://eqbrowser.com/trash is the most recent test builds, all are multiplayer. Load up a few tabs and check yourself out.
Tyen05
05-15-2014, 04:17 AM
lol
http://i.imgur.com/fqmYPIV.png
Tyen05
05-17-2014, 11:40 AM
New build live.
Check it out @ http://eqbrowser.com/play
rhyotte
05-17-2014, 03:06 PM
At a glance, it seems that Linux is still unsupported.
...Boo!
Good to hear of progress though!
Tyen05
05-17-2014, 06:40 PM
http://i.imgur.com/gFn7Uh9.jpg
Tyen05
05-20-2014, 08:02 PM
Logging packets
Image:
http://i.imgur.com/TwelpQh.png
Tyen05
05-21-2014, 05:20 AM
https://web.archive.org/web/20120111213919/http://trac.assembla.com/swgemu/wiki/Packets/Encryption
https://web.archive.org/web/20130301211321/http://trac.assembla.com/swgemu/wiki/Packets
all of this is supposedly the exact same as eq.
Tyen05
07-27-2014, 11:46 PM
> .net client framework for Eqemu
https://github.com/eqbrowser/unity-eqemu-client-framework
> README
.NET 3.5
No pinvokes
No use of Marshalling
100% managed eqemuauthcrypto implementation
- I had to override the default behavior of the DESCryptoServiceProvider. It has an internal check that is performed to
detect weak keys (aka, keys with terrible parity). By default, .NET won't let you use a crappy key (which is what the
emu uses prior to being patched). Put another way, I had to make DES even shittier to work with the emu!
- On this, more for information than anything else. I believe VI/Sony set the key to all 0s for dev and testing, and
then would patch in the encryption key whenever they pushed out patches. This wouldn't make it any more secure as
a hardcoded encryption key is totally worthless, but I think that was what they were doing.
ICSharpCodeSharpZipLib is being used for compression/decompression. As far as I know, it does not pinvoke so it should
be OK. You posted a link detailing a change that had to be made to work with Mono. I didn't make that change because I
don't have mono installed, so you'll have to do that part. Looked simple enough.
The current implementation uses asynchronous receives and sychronous sending. Receives currently have a single buffer, but this can be easily
expanded to multiple if the client starts dropping UDP packets. Sending is done synchronously on a separate thread to avoid impacting the UI
thread.
Receive operations are automatically assigned threads from the thread pool.
When a packet is received it goes through processing. This is where the CRC, decompression, fragment reconstruction, splitting
of opcombined packets, etc. is handled. The end result is either a packet that is handled by the core server code (e.g. an ACK)
or is transformed into an ApplicationPacket that is placed in an inbound queue. The application (e.g. the loginclient) will then
read from this queue, process the application packet, and do whatever it needs to do.
The application layer (e.g. the loginclient) has a thread that is responsible for reading inbound packets. This will prevent it from
locking the UI thread.
In my very awful test client I have a LoginClient and an EmuClient. This was a simple implementation of the steps for contacting the
Login Server and completing the login sequence. I am automatically selecting the first Emu server because it was simpler for testing
purposes. You'll want to use the event to populate the UI.
The current code to handle translation of hostname to IP is slow. IMO, this could do with a test to say, "Is this an IP already? If so, we're done"
instead of always trying to translate. Anyway, when the udp client shell test app starts, it'll take a bit before the menu displays.
The transition from Login Server to Emu is done as a manual step in the test client, again, because it was simpler. In practice, this handoff
is automatic (duh) and follows the steps I implemented (disconnect from login server, connect to emu, send sessionrequest, get sessionresponse,
send login)
- I haven't implemented the login packet due to time constraints, but the easiest way would be to look at the emu to see what the packet
should look like and what data is in it. My guess is you'll have to provide the 10 byte Session ID that is generated by the login server
and your login server player ID at a minimum.
- I may get to this part, but I'm not sure yet. If it has been implemented you'll know if I did or not. =P
I loaded all of the Titanium OpCodes already and wrote a couple of the struct types for the initial packets.
As a general rule, try to avoid creating new reference types unless you actually need them. The primary reason is to avoid periodic
bursts of lag due to GC. You can actually see this happening if you use windbg and sos. You can dump the heap and see how many types
are sitting on the heap, waiting for GC, etc. This doesn't mean you have to use object pools everywhere, just keep it in mind. If
performance becomes an issue, it'll be one area to examine (with windbg and sos.dll)
I haven't implemented opappcombined packets yet because I don't have any examples of them to work with. The emu looks like it can
receive them, but it doesn't appear to send them, so it shouldn't be a big deal for now. When I work out how to make them, I can
add that to the code.
I don't have a full grasp on the set session stats packets yet. I have a very minimal implementation so far (the first packet you send)
which should be OK for now. I did see that they get exchanged periodically, but I haven't analyzed them yet to learn how to set the
values correctly. I'll update them when I work that part out.
I implemented the OP_KeepAlive timer, so you shouldn't have to deal with that.
To send packets, just send an applicationpacket. The UDP client will do all of the necessary compression, fragmenting, opcombined,
sequencing, ACKing, etc. I tried to make it as fire and forget as possible.
Contributed by Daerath.
daerath
07-29-2014, 07:21 AM
Happy to help. I'm going to make some additional updates in the coming weeks as I work through a few ideas.
Tyen05
08-04-2014, 07:05 PM
I started the server I'm using to connect to Unity, it's on the list as VZTZ, at the very bottom.
Tyen05
08-09-2014, 07:36 AM
Char creation, North Qeynos, South Qeynos, and Surefall Glade are in Unity Webplayer now.
linked due to size of image.
http://i.imgur.com/16w4Yqq.png
Tyen05
08-21-2014, 05:39 AM
Tossing a link to a "meh" build since I haven't updated in awhile. As you can see, each zone needs to be touched up.
http://eqbrowser.com/play/
Also updated the help page if anyone is interested in getting the network side of things in shape. I'm pretty much worthless when it comes to the initial zone/world network connection. Dying to start grinding on opcodes (implementing gameplay in unity) and really need a pal to help out on this initial network bottleneck.
http://eqbrowser.com/help/
Tyen05
08-27-2014, 11:09 PM
http://eqbrowser.com/play/
http://i.imgur.com/nKgoTB3.png
zeldik
08-31-2014, 11:45 AM
Cool to see this happening keep up the good work
Shin Noir
08-31-2014, 01:45 PM
As a general follow up, I see you're doing networking support for EQ Browser, yet your current web builds don't seem to leverage it at all. Have you managed to connect the web browser with all the networking code you're prepping? Or, not possible? I know Unity Web is pretty limiting about DLL additions
Tyen05
08-31-2014, 06:03 PM
As a general follow up, I see you're doing networking support for EQ Browser, yet your current web builds don't seem to leverage it at all. Have you managed to connect the web browser with all the networking code you're prepping? Or, not possible? I know Unity Web is pretty limiting about DLL additions
Right now the network framework (https://github.com/eqbrowser/unity-eqemu-client-framework) doesn't connect to a world & zone server so I haven't put it in the Unity build yet.
There are things that are very specific to Unity Webplayer in the framework to make sure it will work in Webplayer; for example: .NET 3.5 only, No pinvokes, No use of Marshalling, and 100% managed eqemuauthcrypto implementation (no eqemuauthcrypto DLL.)
Daerath is hanging out in irc.eqemulator.net #eqemucoders now so he is getting some good help to make the world/zone connection goin.
Us Unity pals are working on C# scripts that makes it available to switch head shapes depending on helmet type. Not a trivial thing in Unity, but got good progress. Also making some basic (low level) C# scripts that make it available to change equipment texture, etc. Character select will be dropping in as well next build, with the same type of camera controls as the Titanium client (also in v1 of eqbrowser build).
Tyen05
08-31-2014, 06:04 PM
I also released an Android App up on http://eqbrowser.com, trying to figure out what kind of Touch Character Controller type deal would work the best and not be annoying as hell.
Tyen05
09-18-2014, 05:51 PM
http://eqbrowser.com/images/sony.png
Tyen05
11-06-2014, 02:10 AM
WebGL
http://i.imgur.com/pjnoQC1.png
Nearing zone explorer potential?
Tyen05
11-11-2014, 06:38 PM
What do you mean by zone explorer potential?
You can run around in the zone and the project source has extracted assets.
Tyen05
11-13-2014, 09:07 PM
Going to be moving away from Unity Webplayer and switch to Unity WebGL via Unity 5.
Below are relevant articles about WebGL & .net. The Unity to Eqemu networking framework is in .net.
Visual Studio Tools for Unity (UnityVS) (http://unityvs.com/news/2014/11/12/visual-studio-tools-for-unity-2-0-preview/)
Microsoft acquires SyntaxTree, creator of UnityVS plugin for Visual Studio (http://blogs.msdn.com/b/somasegar/archive/2014/06/30/microsoft-acquires-syntaxtree-creator-of-unityvs-plugin-for-visual-studio.aspx)
THE FUTURE OF WEB PUBLISHING IN UNITY – AN UPDATE (http://blogs.unity3d.com/2014/10/28/the-future-of-web-publishing-in-unity-an-update/)
THE FUTURE OF SCRIPTING IN UNITY (http://blogs.unity3d.com/2014/05/20/the-future-of-scripting-in-unity/)
Visual Studio Community 2013 (FREE) (http://www.visualstudio.com/news/vs2013-community-vs)
Unity3d to Eqemu networking framework (https://github.com/eqbrowser/unity-eqemu-client-framework)
Microsoft Takes .NET Open Source And Cross-Platform (http://techcrunch.com/2014/11/12/microsoft-takes-net-open-source-and-cross-platform/)
Tyen05
01-15-2015, 11:19 AM
Unity Client is now connected to an Eqemu server.
http://i.imgur.com/Le6KOe4.png
Tyen05
01-22-2015, 08:10 AM
Initial Spawn
http://i.imgur.com/x0sem9o.jpg
C# Script
http://pastebin.com/vXUpPU9d
Tyen05
01-26-2015, 04:48 AM
Spawning the right models now.
http://i.imgur.com/8xUi0v1.png
Gotta work on recreating this whole "model snapping" thing that the EQ client does though, my XYZ is correct.
http://i.imgur.com/V1UGXg6.png
Tyen05
01-30-2015, 08:55 PM
http://i.imgur.com/28OBCdZ.png
Tyen05
01-31-2015, 05:02 AM
woof elf flying kick, lol
http://i.imgur.com/nXPIh51.png
Tyen05
02-05-2015, 07:36 AM
Texture changing script.
http://wiki.eqemulator.org/i?M=Pastebin&Paste=i6gTTn0D
http://i.imgur.com/0uAdcGW.png
Tyen05
02-05-2015, 07:49 AM
Ogre female plate on the wood elf looks badass
http://i.imgur.com/VtEFnWt.png
Tyen05
02-09-2015, 05:14 AM
playing with aggrozone
http://i.imgur.com/UgIx9MX.jpg
This is my favourite thread :)
Tyen05
02-19-2015, 06:56 AM
Thanks pal.
http://i.imgur.com/r5XlT2z.png
http://i.imgur.com/PL6xg5V.png
Tyen05
02-26-2015, 04:08 AM
dickin around
http://i.imgur.com/UgyfQRE.png
Maze_EQ
02-26-2015, 05:22 AM
My jimmies are tingling at this project.
Good work buddy!
https://github.com/eqbrowser/unity-eqemu-client-framework is 404'ing now?
Tyen05
03-17-2015, 09:53 PM
Ya, that stuff isn't used.
Serverside implementation is:
https://github.com/EQBrowserServer/Server/tree/web_interface
Client package is:
http://eqbrowser.com/build/v4.unitypackage
Yeah- it's just that I wanted a sneaky look at that code as it was since I have another thing I'm working on which would benefit from it.
Tyen05
03-18-2015, 07:48 PM
Here ya go.
http://eqbrowser.com/misc/EQClient.rar
Daerath made it, he hangs out in #eqemucoders if you have any questions about it.
Tyen05
05-01-2015, 07:33 PM
WebGL build live @ http://eqbrowser.com/play
Source avail on request.
Tyen05
05-18-2015, 02:06 AM
http://i.imgur.com/sIw5Osv.png
Tyen05
05-20-2015, 04:17 AM
Secrets did some shit for me around march, posting here so I have everything in same place.
https://github.com/EQBrowserServer/Server/tree/web_interface
TBD
-the world login stuff isnt in
-zone isn't set up to accept connections
-needs the requests parameterized into raw data instead of Json
http://i.imgur.com/dgrtpMF.png
Tyen05
05-31-2015, 07:54 AM
Building the char select UI
http://wiki.eqemulator.org/i?M=Pastebin&Paste=BBdXIt6b
WebGL build Live @ http://eqbrowser.com/play
Tyen05
05-31-2015, 01:37 PM
http://i.imgur.com/0xnDdQF.png
rhyotte
05-31-2015, 04:01 PM
Very cool. I really enjoy updates to this project.
Keep a strain on it!
Gary
Wisteso
06-02-2015, 07:14 AM
Will you be putting the client on GitHub? I was able to find https://github.com/eqbrowser and https://github.com/EQBrowserServer but no project for the client.
I'd really like to check this out and maybe contribute some code. I'm pretty proficient with Unity and C#.
Tyen05
06-02-2015, 05:02 PM
http://eqbrowser.com/build/v6.unitypackage
That is the most recent build, i update it often.
v1, v2, v3 and v4 are other versions that are pretty different if you want to check those out too.
Tyen05
06-02-2015, 05:03 PM
Double post
Tyen05
06-03-2015, 03:27 AM
UI stuff
http://i.imgur.com/xqRRRix.png
http://i.imgur.com/GUaYzb5.png
http://i.imgur.com/sEnhgQR.jpg
Tyen05
06-04-2015, 08:25 AM
http://i.imgur.com/IzndnwS.jpg
N0ctrnl
06-04-2015, 01:18 PM
Man, that's looking awesome. :)
Shendare
06-04-2015, 01:37 PM
Very awesome!
Are you reading window and sprite configurations from the EQ/ui/default xml files, or is this all hard-coded? (Just curious!)
Shin Noir
06-04-2015, 02:58 PM
Fun times.
Tyen05
06-04-2015, 04:09 PM
Are you reading window and sprite configurations from the EQ/ui/default xml files
No. .
Tyen05
06-11-2015, 06:15 AM
Check out my poorly written Animator script.
http://pastebin.com/iaaWFRZp
New Build live tho. Did a bunch of optimizations, loads a million times faster.
deaderella
06-22-2015, 04:19 PM
Hey guys, is there any place I can download the character model files & textures, so that I can do custom animations?
thanks!
Tyen05
07-27-2015, 07:14 AM
http://wiki.eqemulator.org/p?unity3d
rhyotte
07-27-2015, 11:51 AM
Cool! I am using wine under Fedora 22 and Chrome browser, I was unable to walk around. Really liked the new sky!
planesofpower
10-21-2015, 05:55 AM
hey tyen05, i'm having some real trouble exporting the player models animations
everything else works fine in unity but i am stuck at the SPH files it generates for animations
did you write a convert for these or find some other way?
Tyen05
04-16-2016, 05:44 PM
http://unityeq.com/play
Quick register, login, char select, char create, char delete, quit.
View javascript console for server/client packet logs.
Stop @ OP_ZoneServerInfo, currently doesn't transition into zone yet, still have to implement OP_ZoneEntry.
http://i.imgur.com/qYYVmYw.png
This is where the magic happens: https://github.com/UnityEQ/UnityEQClient/blob/master/Assets/Scripts/HandleWorldMessages.cs#L66
I believe the next step is below via this struct: https://github.com/UnityEQ/UnityEQServer/blob/master/common/eq_packet_structs.h#L357
public void DoZoneEntry()
{
byte[] ZoneEntryRequest = new byte[68];
Int32 pos = 0;
curZoneId = 54;
WriteInt32 (0, ref ZoneEntryRequest, ref pos);
WriteFixedLengthString(ourPlayerName, ref ZoneEntryRequest, ref pos, 64);
GenerateAndSendWorldPacket (ZoneEntryRequest.Length, 541, curZoneId, curInstanceId, ZoneEntryRequest);
}
Anyway, still fiddling with this and that's where I'm at.
Steaming server desktop @ http://twitch.tv/eqbrowser
Tyen05
04-18-2016, 03:17 AM
figured it out, client now active in zone.
http://i.imgur.com/WzqNClg.png
Secrets
04-18-2016, 12:44 PM
figured it out, client now active in zone.
http://i.imgur.com/WzqNClg.png
You'll have to send a packet upon receiving OP_PlayerProfile, so you can get to the CompleteConnect step. I think we use the first OP_ClientUpdate. Can't remember it's been a bit.
Zaela_S
04-18-2016, 02:52 PM
You'll have to send a packet upon receiving OP_PlayerProfile, so you can get to the CompleteConnect step. I think we use the first OP_ClientUpdate. Can't remember it's been a bit.
My code has the process as
Server: OP_Weather
-> Client: OP_ReqNewZone (no data)
Server: OP_NewZone
-> Client: OP_ReqClientSpawn (no data)
Server: OP_SendExpZonein with a length of zero (?!)
-> Client: OP_ClientReady (no data)
At that point you're in the zone as far as the server is concerned.
I can't remember if that covers all the expansions, since there is some variation in how things go... pretty sure I've used that to masquerade as Titanium to Underfoot, at least.
Tyen05
04-18-2016, 07:58 PM
below~~~~~~~~~~~~~~~~~~
Tyen05
04-19-2016, 04:20 AM
OP_ZoneUnavailable woes
World Log:
http://i.imgur.com/dZWqjC4.png
Zoneserver Logs: http://pastebin.com/WZiKCrx0
[04-19-2016 :: 10:20:20] [Zone Server] Time Broadcast Packet: EQTime [10:26 am]
[04-19-2016 :: 10:20:21] [Zone Server] Got 0x5007 from world:
[04-19-2016 :: 10:20:21] [Packet :: Client -> Server] [OP_ZoneEntry - 0x021d] [Size: 70]
[04-19-2016 :: 10:20:21] [Packet :: Server -> Client] [OP_PlayerProfile - 0x016d] [Size: 19588]
[04-19-2016 :: 10:20:21] [Packet :: Server -> Client] [OP_ZoneEntry - 0x021d] [Size: 746]
[04-19-2016 :: 10:20:21] [Packet :: Server -> Client] [OP_ZoneSpawns - 0x0223] [Size: 74402]
[04-19-2016 :: 10:20:21] [Packet :: Server -> Client] [OP_ZoneSpawns - 0x0223] [Size: 74402]
[04-19-2016 :: 10:20:21] [Packet :: Server -> Client] [OP_ZoneSpawns - 0x0223] [Size: 74402]
[04-19-2016 :: 10:20:21] [Packet :: Server -> Client] [OP_ZoneSpawns - 0x0223] [Size: 36458]
[04-19-2016 :: 10:20:21] [Packet :: Server -> Client] [OP_TimeOfDay - 0x01e9] [Size: 10]
[04-19-2016 :: 10:20:21] [Packet :: Server -> Client] [OP_TributeUpdate - 0x0201] [Size: 50]
[04-19-2016 :: 10:20:21] [Packet :: Server -> Client] [OP_TributeTimer - 0x01ff] [Size: 6]
[04-19-2016 :: 10:20:21] [Packet :: Server -> Client] [OP_CharInventory - 0x0048] [Size: 66]
[04-19-2016 :: 10:20:21] [Packet :: Server -> Client] [OP_Weather - 0x020c] [Size: 14]
[04-19-2016 :: 10:21:00] [Zone Server] Got 0x5007 from world:
[04-19-2016 :: 10:21:00] [Packet :: Client -> Server] [OP_ReqNewZone - 0x0193] [Size: 2]
[04-19-2016 :: 10:21:00] [Packet :: Server -> Client] [OP_NewZone - 0x0152] [Size: 710]
[04-19-2016 :: 10:21:02] [Zone Server] Got 0x5007 from world:
[04-19-2016 :: 10:21:02] [Packet :: Client -> Server] [OP_ReqClientSpawn - 0x0192] [Size: 2]
[04-19-2016 :: 10:21:02] [Packet :: Server -> Client] [OP_SpawnDoor - 0x01d2] [Size: 8162]
[04-19-2016 :: 10:21:02] [Packet :: Server -> Client] [OP_GroundSpawn - 0x00c4] [Size: 94]
[04-19-2016 :: 10:21:02] [Packet :: Server -> Client] [OP_SendZonepoints - 0x01b2] [Size: 174]
[04-19-2016 :: 10:21:02] [Packet :: Server -> Client] [OP_SendAAStats - 0x01a5] [Size: 2]
[04-19-2016 :: 10:21:02] [Packet :: Server -> Client] [OP_ZoneServerReady - 0x0222] [Size: 2]
[04-19-2016 :: 10:21:02] [Packet :: Server -> Client] [OP_SendExpZonein - 0x01a8] [Size: 2]
[04-19-2016 :: 10:21:02] [Packet :: Server -> Client] [OP_WorldObjectsSent - 0x0215] [Size: 2]
[04-19-2016 :: 10:21:12] [Zone Server] Got 0x5007 from world:
[04-19-2016 :: 10:21:12] [Packet :: Client -> Server] [OP_ClientReady - 0x0055] [Size: 2]
[04-19-2016 :: 10:21:12] [Packet :: Server -> Client] [OP_WearChange - 0x020b] [Size: 21]
[04-19-2016 :: 10:21:12] [Packet :: Server -> Client] [OP_SpawnAppearance - 0x01d1] [Size: 10]
[04-19-2016 :: 10:21:12] [Packet :: Server -> Client] [OP_Weather - 0x020c] [Size: 10]
[04-19-2016 :: 10:21:12] [Packet :: Server -> Client] [OP_HPUpdate - 0x00f2] [Size: 12]
[04-19-2016 :: 10:21:12] [Packet :: Server -> Client] [OP_ManaChange - 0x012d] [Size: 18]
[04-19-2016 :: 10:21:12] [Packet :: Server -> Client] [OP_EmuKeepAlive - 0x0226] [Size: 2]
[04-19-2016 :: 10:21:12] [Packet :: Server -> Client] [OP_HPUpdate - 0x00f2] [Size: 12]
[04-19-2016 :: 10:21:12] [Packet :: Server -> Client] [OP_Stamina - 0x01d7] [Size: 10]
[04-19-2016 :: 10:21:12] [Zone Server] Got 0x0155 from world:
[04-19-2016 :: 10:21:12] [Packet :: Server -> Client] [OP_ClientUpdate - 0x0057] [Size: 40]
[04-19-2016 :: 10:21:12] [Packet :: Server -> Client] [OP_ClientUpdate - 0x0057] [Size: 40]
[04-19-2016 :: 10:21:13] [Packet :: Server -> Client] [OP_ClientUpdate - 0x0057] [Size: 40]
[04-19-2016 :: 10:21:13] [Packet :: Server -> Client] [OP_ClientUpdate - 0x0057] [Size: 40]
[04-19-2016 :: 10:21:13] [Packet :: Server -> Client] [OP_BeginCast - 0x0037] [Size: 10]
[04-19-2016 :: 10:21:13] [Packet :: Server -> Client] [OP_ClientUpdate - 0x0057] [Size: 40]
[04-19-2016 :: 10:21:13] [Packet :: Server -> Client] [OP_ClientUpdate - 0x0057] [Size: 40]
[04-19-2016 :: 10:21:13] [Packet :: Server -> Client] [OP_ClientUpdate - 0x0057] [Size: 40]
[04-19-2016 :: 10:21:13] [Packet :: Server -> Client] [OP_ClientUpdate - 0x0057] [Size: 40]
[04-19-2016 :: 10:21:14] [Packet :: Server -> Client] [OP_ClientUpdate - 0x0057] [Size: 40]
[04-19-2016 :: 10:21:14] [Packet :: Server -> Client] [OP_HPUpdate - 0x00f2] [Size: 12]
[04-19-2016 :: 10:21:14] [Zone Server] Got 0x5007 from world:
[04-19-2016 :: 10:21:14] [Zone Server] Got 0x5007 from world:
[04-19-2016 :: 10:21:14] [Zone Server] Got 0x5007 from world:
[04-19-2016 :: 10:21:14] [Zone Server] Got 0x5007 from world:
[04-19-2016 :: 10:21:14] [Zone Server] Got 0x5007 from world:
[04-19-2016 :: 10:21:14] [Zone Server] Got 0x5007 from world:
[04-19-2016 :: 10:21:14] [Zone Server] Got 0x5007 from world:
[04-19-2016 :: 10:21:14] [Zone Server] Got 0x5007 from world:
[04-19-2016 :: 10:21:14] [Packet :: Client -> Server] [OP_ClientUpdate - 0x0057] [Size: 40]
[04-19-2016 :: 10:21:14] [Packet :: Client -> Server] [OP_ClientUpdate - 0x0057] [Size: 40]
[04-19-2016 :: 10:21:14] [Packet :: Client -> Server] [OP_ClientUpdate - 0x0057] [Size: 40]
[04-19-2016 :: 10:21:14] [Packet :: Client -> Server] [OP_ClientUpdate - 0x0057] [Size: 40]
[04-19-2016 :: 10:21:14] [Packet :: Client -> Server] [OP_ClientUpdate - 0x0057] [Size: 40]
[04-19-2016 :: 10:21:14] [Packet :: Client -> Server] [OP_ClientUpdate - 0x0057] [Size: 40]
[04-19-2016 :: 10:21:14] [Packet :: Client -> Server] [OP_ClientUpdate - 0x0057] [Size: 40]
[04-19-2016 :: 10:21:14] [Packet :: Client -> Server] [OP_ClientUpdate - 0x0057] [Size: 40]
Tyen05
04-19-2016, 07:16 PM
Comparing with Titanium logs to get a better feel of the flow, and see if I'm missing anything that could be causing OP_ZoneUnavailable in web_interface server
UnityEQ Packets: http://pastebin.com/WZiKCrx0
[04-19-2016 :: 10:20:21] [Packet :: Client -> Server] [OP_ZoneEntry - 0x021d] [Size: 70]
[04-19-2016 :: 10:21:00] [Packet :: Client -> Server] [OP_ReqNewZone - 0x0193] [Size: 2]
[04-19-2016 :: 10:21:02] [Packet :: Client -> Server] [OP_ReqClientSpawn - 0x0192] [Size: 2]
[04-19-2016 :: 10:21:12] [Packet :: Client -> Server] [OP_ClientReady - 0x0055] [Size: 2]
[04-19-2016 :: 10:21:14] [Packet :: Client -> Server] [OP_ClientUpdate - 0x0057] [Size: 40]
Titanium packets: http://pastebin.com/feQij6bz
[04-20-2016 :: 01:20:55] [Packet :: Client -> Server] [OP_AckPacket - 0x0007] [Size: 6]
[04-20-2016 :: 01:20:55] [Packet :: Client -> Server] [OP_ZoneEntry - 0x0221] [Size: 70]
[04-20-2016 :: 01:20:57] [Packet :: Client -> Server] [OP_AckPacket - 0x0007] [Size: 6]
[04-20-2016 :: 01:21:03] [Packet :: Client -> Server] [OP_ReqNewZone - 0x0195] [Size: 2]
[04-20-2016 :: 01:21:03] [Packet :: Client -> Server] [OP_SendAATable - 0x01a8] [Size: 2]
[04-20-2016 :: 01:21:03] [Packet :: Client -> Server] [OP_UpdateAA - 0x0205] [Size: 2]
[04-20-2016 :: 01:21:07] [Packet :: Client -> Server] [OP_SendTributes - 0x01b3] [Size: 6]
[04-20-2016 :: 01:21:07] [Packet :: Client -> Server] [OP_SendGuildTributes - 0x01ac] [Size: 6]
[04-20-2016 :: 01:21:07] [Packet :: Client -> Server] [OP_SpawnAppearance - 0x01d3] [Size: 10]
[04-20-2016 :: 01:21:07] [Packet :: Client -> Server] [OP_SpawnAppearance - 0x01d3] [Size: 10]
[04-20-2016 :: 01:21:07] [Packet :: Client -> Server] [OP_AckPacket - 0x0007] [Size: 6]
[04-20-2016 :: 01:21:07] [Packet :: Client -> Server] [OP_ReqClientSpawn - 0x0194] [Size: 2]
[04-20-2016 :: 01:21:08] [Packet :: Client -> Server] [OP_SendExpZonein - 0x01aa] [Size: 2]
[04-20-2016 :: 01:21:09] [Packet :: Client -> Server] [OP_SetServerFilter - 0x01c0] [Size: 118]
[04-20-2016 :: 01:21:09] [Packet :: Client -> Server] [OP_ClientReady - 0x0055] [Size: 2]
[04-20-2016 :: 01:21:09] [Packet :: Client -> Server] [OP_PlayerStateAdd - 0x0170] [Size: 10]
[04-20-2016 :: 01:21:09] [Packet :: Client -> Server] [OP_WeaponEquip1 - 0x020c] [Size: 14]
[04-20-2016 :: 01:21:09] [Packet :: Client -> Server Unhandled] [OpCode OP_WeaponEquip1 (0x6c5e) Size=12]
[04-20-2016 :: 01:21:09] [Packet :: Client -> Server] [OP_WearChange - 0x020d] [Size: 29]
[04-20-2016 :: 01:21:09] [Packet :: Client -> Server] [OP_ClientUpdate - 0x0057] [Size: 39]
[04-20-2016 :: 01:21:10] [Packet :: Client -> Server] [OP_FloatListThing - 0x00a6] [Size: 105]
Zaela_S
04-20-2016, 02:09 PM
If you're talking to the zone at all, it's clearly available...
Are you just not disconnecting from world? I send world a session disconnect before starting a session with the zone. I think world keeps its zone bootup timeout timer for the client running until they destroy themselves by disconnecting.
Tyen05
04-20-2016, 05:54 PM
Yep, you were dead on.
OP_WorldComplete made it all better, thanks~
Zone doesn't shut down on me anymore.
Tyen05
04-22-2016, 05:56 PM
OP_ChannelMessage (Client->Server), work in progress.
Main Bottleneck is at the very bottom.
//TODO: Reading ChannelMessage string is suppose to be variable sized and not a 64 FixedLengthString.
Client->Server Packet logs
[04-22-2016 :: 15:07:44] [Packet :: Client -> Server] [OP_ChannelMessage - 0x0045] [Size: 286]
[04-22-2016 :: 15:07:44] [Packet :: Client -> Server (Dump)] [OP_ChannelMessage - 0x0045] [Size: 286]
0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
16: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
32: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
48: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
64: 4A 6F 6E 64 73 00 00 00 - 00 00 00 00 00 00 00 00 | Jonds...........
80: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
96: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
112: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
128: 00 00 00 00 05 00 00 00 - 00 00 00 00 46 46 46 46 | ............FFFF
144: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
160: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
176: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
192: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
208: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
224: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
240: 46 46 46 46 78 00 00 00 - 00 00 00 00 00 00 00 00 | FFFFx...........
256: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
272: 00 00 00 00 00 00 00 00 - 00 00 00 00 | ............
[04-22-2016 :: 15:07:44] [Zone Server] Client::ChannelMessageReceived() Channel:5 message:'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFx'
Server->Client Packet logs
[04-22-2016 :: 15:07:44] [Packet :: Server -> Client] [OP_ChannelMessage - 0x0045] [Size: 248]
[04-22-2016 :: 15:07:44] [Packet :: Server -> Client (Dump)] [OP_ChannelMessage - 0x0045] [Size: 248]
0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
16: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
32: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
48: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
64: 4A 6F 6E 64 73 00 00 00 - 00 00 00 00 00 00 00 00 | Jonds...........
80: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
96: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
112: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
128: 00 00 00 00 05 00 00 00 - 64 00 00 00 46 46 46 46 | ........d...FFFF
144: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
160: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
176: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
192: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
208: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
224: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
240: 46 46 46 46 78 00 | FFFFx.
Client Send Chat message
public void DoChannelMessage()
{
// /*000*/ char targetname[64]; // Tell recipient
// /*064*/ char sender[64]; // The senders name (len might be wrong)
// /*128*/ uint32 language; // Language
// /*132*/ uint32 chan_num; // Channel
// /*144*/ uint32 skill_in_language; // The players skill in this language? might be wrong
// /*148*/ char message[0]; // Variable length message
string TestMessage = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFx";
int TestMessageLength = TestMessage.Length * 2;
int RequestSize = 74 + TestMessageLength;
byte[] ChannelMessageRequest = new byte[RequestSize];
int position = 0;
WriteFixedLengthString("", ref ChannelMessageRequest, ref position, 64);
WriteFixedLengthString("Jonds", ref ChannelMessageRequest, ref position, 64);
WriteInt32(0, ref ChannelMessageRequest, ref position);
WriteInt32(5, ref ChannelMessageRequest, ref position);
WriteInt32(0, ref ChannelMessageRequest, ref position);
WriteFixedLengthString(TestMessage, ref ChannelMessageRequest, ref position, TestMessageLength);
GenerateAndSendWorldPacket (ChannelMessageRequest.Length, 69 /* OP_ChannelMessage */, curZoneId, curInstanceId, ChannelMessageRequest);
}
Client Read Chat message
public void HandleWorldMessage_ChannelMessage(byte[] data, int datasize)
{
// /*000*/ char targetname[64]; // Tell recipient
// /*064*/ char sender[64]; // The senders name (len might be wrong)
// /*128*/ uint32 language; // Language
// /*132*/ uint32 chan_num; // Channel
// /*144*/ uint32 skill_in_language; // The players skill in this language? might be wrong
// /*148*/ char message[0]; // Variable length message
int position = 0;
string ChannelTargetName = ReadFixedLengthString(data, ref position, 64);
string ChannelSender = ReadFixedLengthString(data, ref position, 64);
Int32 ChannelLanguage = ReadInt32(data, ref position);
Int32 ChannelNumber = ReadInt32(data, ref position);
Int32 ChannelSkill = ReadInt32(data, ref position);
//TODO: ChannelMessage is suppose to be variable sized and not a 64 FixedLengthString
string ChannelMessage = ReadFixedLengthString(data, ref position, 64);
}
Fixed Length String reference
public string ReadFixedLengthString(byte[] data, ref Int32 position, Int32 count)
{
string retval = System.Text.Encoding.Default.GetString(data, position, count);
position += count;
return retval;
}
Tyen05
04-30-2016, 05:10 AM
Easy fix, this advice solved it.
[05:37] <image> I would just subtract the rest of the packet
lines in green
public void HandleWorldMessage_ChannelMessage(byte[] data, int datasize)
{
int position = 0;
string ChannelTargetName = ReadFixedLengthString(data, ref position, 64);
string ChannelSender = ReadFixedLengthString(data, ref position, 64);
Int32 ChannelLanguage = ReadInt32(data, ref position);
Int32 ChannelNumber = ReadInt32(data, ref position);
Int32 ChannelSkill = ReadInt32(data, ref position);
Int32 ChannelVarLength = datasize - position;
string ChannelMessage = ReadFixedLengthString(data, ref position, ChannelVarLength);
}
Tyen05
05-02-2016, 05:16 AM
Revamping inputs with system below, working on chat stuffs, and also spawns.
https://youtu.be/KVbxemkOWew
Tyen05
05-04-2016, 04:41 AM
http://i.imgur.com/o6m4eQd.png
Tyen05
05-07-2016, 04:44 PM
https://youtu.be/K08vVFTWMzI
rhyotte
05-09-2016, 11:27 AM
Cool. One day at a time!
Tyen05
05-10-2016, 05:31 AM
chat: https://youtu.be/Byi1lWNQJco
Tyen05
05-15-2016, 06:05 PM
Changed how spawns work. Instead of creating (instantiating) mobs as they pop (runtime), i instantiate prefabs to an object pool on start and then activate/deactivate individual prefabs from the pool as i need.
This increases performance by a huge margin. Right now the pool is global but the pools will eventually be zone specific at some point. I tossed in beetle prefab only just for testing purposes.
http://youtu.be/KnS1MeQ9VkA
Tyen05
05-16-2016, 08:15 PM
PunchQuest. Stuff below for my reference
478-OP_TargetMouse
ClientTarget_Struct {
/*000*/ uint32 new_target; // Target ID
};
43-op_autoattack
44-op_autoattack2
109-op_damage
struct CombatDamage_Struct
{
/* 00 */ uint16 target;
/* 02 */ uint16 source;
/* 04 */ uint8 type; //slashing, etc. 231 (0xE7) for spells
/* 05 */ uint16 spellid;
/* 07 */ uint32 damage;
/* 11 */ float force;
/* 15 */ float meleepush_xy; // see above notes in Action_Struct
/* 19 */ float meleepush_z;
/* 23 */ uint32 special; // 2 = Rampage, 1 = Wild Rampage
};
8-op_action
// this is what causes the caster to animate and the target to
// get the particle effects around them when a spell is cast
// also causes a buff icon
struct Action_Struct
{
/* 00 */ uint16 target; // id of target
/* 02 */ uint16 source; // id of caster
/* 04 */ uint16 level; // level of caster
/* 06 */ uint16 instrument_mod;
/* 08 */ uint32 bard_focus_id;
// some kind of sequence that's the same in both actions
// as well as the combat damage, to tie em together?
/* 14 */ uint32 sequence;
/* 22 */ uint8 type; // 231 (0xE7) for spells
/* 27 */ uint16 spell; // spell id being cast
/* 31 */
};
Tyen05
05-17-2016, 06:02 PM
Targeting in https://youtu.be/ePc4FeqV-VU
Tyen05
05-18-2016, 02:33 PM
hardcoded x,y,z,h to the /loc infront of priest of discord in nqeynos, but my packet doesnt seem right
Client:
public void DoClientUpdate()
{
GameObject us = EqemuConnectObject;
float x = -us.transform.position.x;
float y = us.transform.position.z;
float z = us.transform.position.y;
float h = us.transform.rotation.y;
byte[] PositionUpdateRequest = new byte[38];
Int32 position = 0;
WriteInt16((short)OurEntityID, ref PositionUpdateRequest, ref position);
WriteInt32(BitConverter.ToInt32(BitConverter.GetBy tes(x), 0), ref PositionUpdateRequest, ref position);
WriteInt32(BitConverter.ToInt32(BitConverter.GetBy tes(y), 0), ref PositionUpdateRequest, ref position);
WriteInt32(BitConverter.ToInt32(BitConverter.GetBy tes(z), 0), ref PositionUpdateRequest, ref position);
WriteInt32(0, ref PositionUpdateRequest, ref position);
WriteInt32(0, ref PositionUpdateRequest, ref position);
WriteInt32(0, ref PositionUpdateRequest, ref position);
WriteInt32(0, ref PositionUpdateRequest, ref position);
WriteInt32(0, ref PositionUpdateRequest, ref position);
WriteInt32(122, ref PositionUpdateRequest, ref position);
GenerateAndSendWorldPacket (PositionUpdateRequest.Length, 87 /* OP_ClientUpdate */, 2, curInstanceId, PositionUpdateRequest);
}
Server:
struct PlayerPositionUpdateClient_Struct
{
/*0000*/ uint16 spawn_id;
/*0004*/ float x_pos; // x coord
/*0004*/ float y_pos; // y coord
/*0004*/ float z_pos; // z coord
/*0008*/ float delta_x; // Change in z
/*0012*/ float delta_y; // Change in x
/*0016*/ float delta_z; // Change in y
/*0016*/ float delta_heading; // Change in y
/*0020*/ int32 animationspeed; // animation
/*0032*/ float rotation; // Directional heading
/*0036*/
};
UnityPacket:
[05-18-2016 :: 15:15:22] [Packet :: Client -> Server (Dump)] [OP_ClientUpdate - 0x0057] [Size: 40]
0: EB 00 EA 00 00 00 0B 00 - 00 00 02 00 00 00 00 00 | ................
16: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
32: 00 7A 00 00 00 00 | .z....
TitaniumPacket:
[05-18-2016 :: 02:37:22] [Packet :: Client -> Server] [OP_ClientUpdate - 0x0057] [Size: 38]
[05-18-2016 :: 02:37:22] [Packet :: Client -> Server (Dump)] [OP_ClientUpdate - 0x0057] [Size: 38]
0: E9 00 2F 36 00 00 30 41 - 00 00 00 00 00 00 00 00 | ../6..0A........
16: 00 00 00 00 00 00 20 00 - 00 00 6A 43 64 10 08 40 | ...... ...jCd..@
32: D0 03 00 00
Tyen05
05-18-2016, 06:49 PM
solved. Died to priest of discord. Pras
[05-18-2016 :: 15:44:47] [Packet :: Client -> Server (Dump)] [OP_ClientUpdate - 0x0057] [Size: 40]
0: ED 00 00 00 6A 43 00 00 - 30 41 00 00 00 40 00 00 | ....jC..0A...@..
16: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
32: 00 00 00 00 F4 42 | .....B
[05-18-2016 :: 15:44:52] [Zone Server] Got 0x5007 from world:
[05-18-2016 :: 15:44:52] [Packet :: Client -> Server] [OP_TargetMouse - 0x01de] [Size: 6]
[05-18-2016 :: 15:44:52] [Packet :: Client -> Server (Dump)] [OP_TargetMouse - 0x01de] [Size: 6]
0: 56 00 00 00 | V...
[05-18-2016 :: 15:44:52] [Packet :: Server -> Client] [OP_TargetHoTT - 0x01dd] [Size: 6]
[05-18-2016 :: 15:44:52] [Packet :: Server -> Client (Dump)] [OP_TargetHoTT - 0x01dd] [Size: 6]
0: 00 00 00 00 | ....
[05-18-2016 :: 15:44:54] [Zone Server] Got 0x5007 from world:
[05-18-2016 :: 15:44:54] [Packet :: Client -> Server] [OP_AutoAttack - 0x002b] [Size: 6]
[05-18-2016 :: 15:44:54] [Packet :: Client -> Server (Dump)] [OP_AutoAttack - 0x002b] [Size: 6]
0: 01 00 00 00 | ....
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client] [OP_Animation - 0x0021] [Size: 6]
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client (Dump)] [OP_Animation - 0x0021] [Size: 6]
0: ED 00 0A 05 | ....
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client] [OP_Damage - 0x006d] [Size: 29]
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client (Dump)] [OP_Damage - 0x006d] [Size: 29]
0: 56 00 ED 00 01 FF FF 00 - 00 00 00 00 00 00 00 00 | V...............
16: 00 74 43 00 00 00 00 00 - 00 00 00 | .tC........
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client] [OP_CancelTrade - 0x0042] [Size: 10]
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client (Dump)] [OP_CancelTrade - 0x0042] [Size: 10]
0: ED 00 00 00 07 00 00 00 | ........
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client] [OP_PreLogoutReply - 0x0178] [Size: 2]
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client (Dump)] [OP_PreLogoutReply - 0x0178] [Size: 2]
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client] [OP_BecomeCorpse - 0x0034] [Size: 18]
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client (Dump)] [OP_BecomeCorpse - 0x0034] [Size: 18]
0: ED 00 00 00 00 00 30 41 - 00 00 6A 43 00 00 00 40 | ......0A..jC...@
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client] [OP_Death - 0x006e] [Size: 34]
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client (Dump)] [OP_Death - 0x006e] [Size: 34]
0: ED 00 00 00 56 00 00 00 - ED 00 00 00 02 00 00 00 | ....V...........
16: FF FF FF FF 1C 00 00 00 - 59 01 00 00 00 00 00 00 | ........Y.......
[05-18-2016 :: 15:44:55] [Packet :: Server -> Client] [OP_ZonePlayerToBind - 0x0220] [Size: 35]
[05-18-2016 :: 15:44:55] [Packet :: Server -> Client (Dump)] [OP_ZonePlayerToBind - 0x0220] [Size: 35]
0: 02 00 00 00 00 00 FF C3 - 00 00 64 42 00 00 F8 41 | ..........dB...A
16: 00 00 00 00 4E 6F 72 74 - 68 20 51 65 79 6E 6F 73 | ....North Qeynos
32: 00 | .
Tyen05
05-21-2016, 04:56 PM
http://i.imgur.com/1xd9cvw.png
http://i.imgur.com/Fl5EljG.jpg
Tyen05
05-22-2016, 04:32 AM
Rotation good now, mob pathing is not very good at all (https://github.com/UnityEQ/UnityEQClient/blob/master/Assets/Scripts/NPCController.cs#L55). Had a tough rotation problem, posting mafs incase someone else needs to do the same type of mafs.
In Eqemu:
Rotation is counter clockwise.
A full rotation is 255 (not 360).
//calculate server->client heading for client
float h = Mathf.Lerp(360,0,[heading-from-op_zonespawns]/255f);
//calculate client->server heading for server
float h = Mathf.Lerp(255,0,[player-current-heading]/360f);
Xanathol
05-22-2016, 02:02 PM
Just wanted to say this is phenomenal. I wish I had time to work on something like this. Huge hats off!
Tyen05
05-23-2016, 06:29 PM
http://i.imgur.com/TzGJyjk.png
Tyen05
05-25-2016, 05:05 AM
#randompic
http://i.imgur.com/IkYmi4s.png
Tyen05
05-25-2016, 10:59 AM
#randomvideo
https://youtu.be/jU-hIdCQrLU
Tyen05
06-08-2016, 04:19 AM
If you fall underneath world, it'll toss you to safe spot. Also tossed some more pathing stuff for debug purposes. Bunch of other stuff not listed, but this was kinda neat.
My step distance (currently set to 1) is wrong. So the wandering speed/steps in between the two points is not correct.
https://youtu.be/WpsF61JyttM
Vector3 targetPosition = new Vector3 (movetoX,movetoY,movetoZ);
Vector3 deltaF = new Vector3 (deltaX,deltaY,deltaZ);
if (deltaF.magnitude != 0)
{
//step = delta time x speed. The server is calculating the speed which is represented as the magnitude of vector x y z. Translate the game object by those deltas multiplied by delta time
float step = deltaF.magnitude * Time.deltaTime;
transform.position = Vector3.MoveTowards(this.gameObject.transform.posi tion, targetPosition, 1);
Debug.DrawRay (this.gameObject.transform.position, (targetPosition - this.gameObject.transform.position), Color.green);
}
Tyen05
06-11-2016, 05:53 AM
#randomvideo
https://youtu.be/oPopiiMK-t4
askyn
06-11-2016, 02:32 PM
This is looking really good so far .. congrats on all of your work !
Tyen05
06-12-2016, 06:36 AM
target bar stuff, death, experience, inventory stats
https://youtu.be/1asd_Brufm8
steve
06-14-2016, 09:59 PM
Thank you for continuing to share! Very interesting project.
Tyen05
06-18-2016, 06:57 AM
I post a bunch of videos to youtube at: https://www.youtube.com/channel/UCvRu_T21AlMeWxrP2JXvdFg
Ran into incomplete itempackets, weird. Server logs below.
Flow:
OP_LootRequest
OP_MoneyOnCorpse
OP_ItemPacket
OP_EndLootRequest
OP_LootComplete
UnityServer: https://github.com/UnityEQ/UnityEQServer/blob/master/common/patches/titanium.cpp#L732
TitaniumServer: https://github.com/EQEmu/Server/blob/master/common/patches/titanium.cpp#L740
Unity Client:
[06-18-2016 :: 03:46:52] [Packet :: Client -> Server] [OP_LootRequest - 0x012c] [Size: 6]
[06-18-2016 :: 03:46:52] [Packet :: Client -> Server (Dump)] [OP_LootRequest - 0x012c] [Size: 6]
0: BB 00 00 00 | ....
[06-18-2016 :: 03:46:53] [Packet :: Server -> Client] [OP_MoneyOnCorpse - 0x0147] [Size: 22]
[06-18-2016 :: 03:46:53] [Packet :: Server -> Client (Dump)] [OP_MoneyOnCorpse - 0x0147] [Size: 22]
0: 01 42 EF 00 00 00 00 00 - 00 00 00 00 05 00 00 00 | .B..............
16: 00 00 00 00 | ....
[06-18-2016 :: 03:46:53] [Packet :: Server -> Client] [OP_ItemPacket - 0x0101] [Size: 15]
[06-18-2016 :: 03:46:53] [Packet :: Server -> Client (Dump)] [OP_ItemPacket - 0x0101] [Size: 15]
0: 66 00 00 00 16 00 00 00 - E0 55 62 0E 00 | f........Ub..
[06-18-2016 :: 03:46:53] [Packet :: Server -> Client] [OP_ItemPacket - 0x0101] [Size: 15]
[06-18-2016 :: 03:46:53] [Packet :: Server -> Client (Dump)] [OP_ItemPacket - 0x0101] [Size: 15]
0: 66 00 00 00 17 00 00 00 - 68 51 62 0E 00 | f.......hQb..
[06-18-2016 :: 03:46:53] [Packet :: Server -> Client] [OP_LootRequest - 0x012c] [Size: 6]
[06-18-2016 :: 03:46:53] [Packet :: Server -> Client (Dump)] [OP_LootRequest - 0x012c] [Size: 6]
0: BB 00 00 00 | ....
[06-18-2016 :: 03:47:00] [Packet :: Client -> Server] [OP_EndLootRequest - 0x0094] [Size: 6]
[06-18-2016 :: 03:47:00] [Packet :: Client -> Server (Dump)] [OP_EndLootRequest - 0x0094] [Size: 6]
0: BB 00 00 00 | ....
[06-18-2016 :: 03:47:00] [Packet :: Server -> Client] [OP_LootComplete - 0x012a] [Size: 2]
[06-18-2016 :: 03:47:00] [Packet :: Server -> Client (Dump)] [OP_LootComplete - 0x012a] [Size: 2]
Titanium Client:
[06-18-2016 :: 03:31:40] [Packet :: Client -> Server] [OP_LootRequest - 0x012e] [Size: 6]
[06-18-2016 :: 03:31:40] [Packet :: Client -> Server (Dump)] [OP_LootRequest - 0x012e] [Size: 6]
0: CC 00 00 00 | ....
[06-18-2016 :: 03:31:40] [Packet :: Server -> Client] [OP_MoneyOnCorpse - 0x0149] [Size: 22]
[06-18-2016 :: 03:31:40] [Packet :: Server -> Client (Dump)] [OP_MoneyOnCorpse - 0x0149] [Size: 22]
0: 01 42 EF 00 00 00 00 00 - 00 00 00 00 02 00 00 00 | .B..............
16: 01 00 00 00 | ....
[06-18-2016 :: 03:31:40] [Packet :: Server -> Client] [OP_ItemPacket - 0x0103] [Size: 428]
[06-18-2016 :: 03:31:40] [Packet :: Server -> Client (Dump)] [OP_ItemPacket - 0x0103] [Size: 428]
0: 66 00 00 00 30 7C 30 7C - 32 32 7C 30 7C 31 7C 30 | f...0|0|22|0|1|0
16: 7C 31 34 7C 30 7C 31 7C - 30 7C 30 7C 22 30 7C 52 | |14|0|1|0|0|"0|R
32: 75 73 74 79 20 44 61 67 - 67 65 72 7C 52 75 73 74 | usty Dagger|Rust
48: 79 20 44 61 67 67 65 72 - 7C 49 54 31 30 36 35 30 | y Dagger|IT10650
64: 7C 37 30 30 37 7C 32 35 - 7C 31 7C 31 7C 31 7C 32 | |7007|25|1|1|1|2
80: 34 35 37 36 7C 33 30 7C - 35 39 32 7C 30 7C 30 7C | 4576|30|592|0|0|
96: 30 7C 31 7C 30 7C 30 7C - 30 7C 30 7C 30 7C 30 7C | 0|1|0|0|0|0|0|0|
112: 30 7C 30 7C 30 7C 30 7C - 30 7C 30 7C 30 7C 30 7C | 0|0|0|0|0|0|0|0|
128: 30 7C 30 7C 30 7C 30 7C - 2D 31 7C 30 7C 30 7C 30 | 0|0|0|0|-1|0|0|0
144: 7C 30 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 32 34 7C | |0|0|0|0|0|0|24|
160: 30 7C 30 7C 30 7C 30 7C - 30 7C 33 7C 2D 31 36 37 | 0|0|0|0|0|3|-167
176: 37 37 32 31 36 7C 33 32 - 31 35 33 7C 36 35 35 33 | 77216|32153|6553
192: 35 7C 30 7C 30 7C 32 7C - 30 7C 31 2E 30 30 30 30 | 5|0|0|2|0|1.0000
208: 30 30 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 30 | 00|0|0|0|0|0|0|0
224: 7C 30 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 30 | |0|0|0|0|0|0|0|0
240: 7C 30 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 7C | |0|0|0|0|0|0|0||
256: 30 7C 34 7C 31 7C 32 30 - 7C 31 7C 30 7C 31 7C 30 | 0|4|1|20|1|0|1|0
272: 7C 31 7C 30 7C 31 7C 30 - 7C 30 7C 30 7C 30 7C 30 | |1|0|1|0|0|0|0|0
288: 7C 30 7C 30 7C 30 7C 30 - 7C 7C 30 7C 30 7C 30 7C | |0|0|0|0||0|0|0|
304: 30 7C 30 7C 30 7C 30 7C - 30 7C 30 7C 30 7C 30 7C | 0|0|0|0|0|0|0|0|
320: 30 7C 30 7C 30 7C 30 7C - 30 7C 30 7C 30 7C 30 7C | 0|0|0|0|0|0|0|0|
336: 30 7C 30 7C 30 7C 30 7C - 30 7C 30 7C 30 7C 30 7C | 0|0|0|0|0|0|0|0|
352: 30 7C 31 7C 30 7C 30 7C - 2D 31 7C 30 7C 30 7C 30 | 0|1|0|0|-1|0|0|0
368: 7C 30 7C 2D 31 7C 30 7C - 30 7C 30 7C 30 7C 2D 31 | |0|-1|0|0|0|0|-1
384: 7C 30 7C 30 7C 30 7C 30 - 7C 2D 31 7C 30 7C 30 7C | |0|0|0|0|-1|0|0|
400: 30 7C 30 7C 2D 31 7C 30 - 7C 30 7C 30 7C 30 22 7C | 0|0|-1|0|0|0|0"|
416: 7C 7C 7C 7C 7C 7C 7C 7C - 7C 00 | |||||||||.
[06-18-2016 :: 03:31:40] [Packet :: Server -> Client] [OP_ItemPacket - 0x0103] [Size: 421]
[06-18-2016 :: 03:31:40] [Packet :: Server -> Client (Dump)] [OP_ItemPacket - 0x0103] [Size: 421]
0: 66 00 00 00 31 7C 30 7C - 32 33 7C 30 7C 31 7C 30 | f...1|0|23|0|1|0
16: 7C 31 35 7C 30 7C 30 7C - 30 7C 30 7C 22 30 7C 42 | |15|0|0|0|0|"0|B
32: 6F 6E 65 20 43 68 69 70 - 73 7C 42 6F 6E 65 20 43 | one Chips|Bone C
48: 68 69 70 73 7C 49 54 31 - 31 30 35 38 7C 31 33 30 | hips|IT11058|130
64: 37 33 7C 31 7C 31 7C 31 - 7C 31 7C 30 7C 31 35 7C | 73|1|1|1|1|0|15|
80: 38 30 34 7C 30 7C 30 7C - 30 7C 31 7C 30 7C 30 7C | 804|0|0|0|1|0|0|
96: 30 7C 30 7C 30 7C 30 7C - 30 7C 30 7C 30 7C 30 7C | 0|0|0|0|0|0|0|0|
112: 30 7C 30 7C 30 7C 30 7C - 30 7C 30 7C 30 7C 30 7C | 0|0|0|0|0|0|0|0|
128: 2D 31 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 30 | -1|0|0|0|0|0|0|0
144: 7C 30 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 30 | |0|0|0|0|0|0|0|0
160: 7C 30 7C 2D 31 36 37 37 - 37 32 31 36 7C 36 35 35 | |0|-16777216|655
176: 33 35 7C 36 35 35 33 35 - 7C 30 7C 30 7C 31 37 7C | 35|65535|0|0|17|
192: 30 7C 31 2E 30 30 30 30 - 30 30 7C 30 7C 30 7C 30 | 0|1.000000|0|0|0
208: 7C 30 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 30 | |0|0|0|0|0|0|0|0
224: 7C 30 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 30 | |0|0|0|0|0|0|0|0
240: 7C 30 7C 30 7C 30 7C 7C - 30 7C 30 7C 31 7C 30 7C | |0|0|0||0|0|1|0|
256: 31 7C 30 7C 31 7C 30 7C - 31 7C 30 7C 31 7C 30 7C | 1|0|1|0|1|0|1|0|
272: 30 7C 30 7C 30 7C 30 7C - 30 7C 30 7C 30 7C 30 7C | 0|0|0|0|0|0|0|0|
288: 7C 30 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 30 | |0|0|0|0|0|0|0|0
304: 7C 30 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 30 | |0|0|0|0|0|0|0|0
320: 7C 30 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 30 | |0|0|0|0|0|0|0|0
336: 7C 30 7C 30 7C 30 7C 30 - 7C 31 30 30 7C 30 7C 31 | |0|0|0|0|100|0|1
352: 7C 2D 31 7C 30 7C 30 7C - 30 7C 30 7C 2D 31 7C 30 | |-1|0|0|0|0|-1|0
368: 7C 30 7C 30 7C 30 7C 2D - 31 7C 30 7C 30 7C 30 7C | |0|0|0|-1|0|0|0|
384: 30 7C 2D 31 7C 30 7C 30 - 7C 30 7C 30 7C 2D 31 7C | 0|-1|0|0|0|0|-1|
400: 30 7C 30 7C 30 7C 30 22 - 7C 7C 7C 7C 7C 7C 7C 7C | 0|0|0|0"||||||||
416: 7C 7C 00 | ||.
[06-18-2016 :: 03:31:40] [Packet :: Server -> Client] [OP_ItemPacket - 0x0103] [Size: 421]
[06-18-2016 :: 03:31:40] [Packet :: Server -> Client (Dump)] [OP_ItemPacket - 0x0103] [Size: 421]
0: 66 00 00 00 31 7C 30 7C - 32 34 7C 30 7C 31 7C 30 | f...1|0|24|0|1|0
16: 7C 31 36 7C 30 7C 30 7C - 30 7C 30 7C 22 30 7C 42 | |16|0|0|0|0|"0|B
32: 6F 6E 65 20 43 68 69 70 - 73 7C 42 6F 6E 65 20 43 | one Chips|Bone C
48: 68 69 70 73 7C 49 54 31 - 31 30 35 38 7C 31 33 30 | hips|IT11058|130
64: 37 33 7C 31 7C 31 7C 31 - 7C 31 7C 30 7C 31 35 7C | 73|1|1|1|1|0|15|
80: 38 30 34 7C 30 7C 30 7C - 30 7C 31 7C 30 7C 30 7C | 804|0|0|0|1|0|0|
96: 30 7C 30 7C 30 7C 30 7C - 30 7C 30 7C 30 7C 30 7C | 0|0|0|0|0|0|0|0|
112: 30 7C 30 7C 30 7C 30 7C - 30 7C 30 7C 30 7C 30 7C | 0|0|0|0|0|0|0|0|
128: 2D 31 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 30 | -1|0|0|0|0|0|0|0
144: 7C 30 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 30 | |0|0|0|0|0|0|0|0
160: 7C 30 7C 2D 31 36 37 37 - 37 32 31 36 7C 36 35 35 | |0|-16777216|655
176: 33 35 7C 36 35 35 33 35 - 7C 30 7C 30 7C 31 37 7C | 35|65535|0|0|17|
192: 30 7C 31 2E 30 30 30 30 - 30 30 7C 30 7C 30 7C 30 | 0|1.000000|0|0|0
208: 7C 30 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 30 | |0|0|0|0|0|0|0|0
224: 7C 30 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 30 | |0|0|0|0|0|0|0|0
240: 7C 30 7C 30 7C 30 7C 7C - 30 7C 30 7C 31 7C 30 7C | |0|0|0||0|0|1|0|
256: 31 7C 30 7C 31 7C 30 7C - 31 7C 30 7C 31 7C 30 7C | 1|0|1|0|1|0|1|0|
272: 30 7C 30 7C 30 7C 30 7C - 30 7C 30 7C 30 7C 30 7C | 0|0|0|0|0|0|0|0|
288: 7C 30 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 30 | |0|0|0|0|0|0|0|0
304: 7C 30 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 30 | |0|0|0|0|0|0|0|0
320: 7C 30 7C 30 7C 30 7C 30 - 7C 30 7C 30 7C 30 7C 30 | |0|0|0|0|0|0|0|0
336: 7C 30 7C 30 7C 30 7C 30 - 7C 31 30 30 7C 30 7C 31 | |0|0|0|0|100|0|1
352: 7C 2D 31 7C 30 7C 30 7C - 30 7C 30 7C 2D 31 7C 30 | |-1|0|0|0|0|-1|0
368: 7C 30 7C 30 7C 30 7C 2D - 31 7C 30 7C 30 7C 30 7C | |0|0|0|-1|0|0|0|
384: 30 7C 2D 31 7C 30 7C 30 - 7C 30 7C 30 7C 2D 31 7C | 0|-1|0|0|0|0|-1|
400: 30 7C 30 7C 30 7C 30 22 - 7C 7C 7C 7C 7C 7C 7C 7C | 0|0|0|0"||||||||
416: 7C 7C 00 | ||.
[06-18-2016 :: 03:31:40] [Packet :: Server -> Client] [OP_LootRequest - 0x012e] [Size: 6]
[06-18-2016 :: 03:31:40] [Packet :: Server -> Client (Dump)] [OP_LootRequest - 0x012e] [Size: 6]
0: CC 00 00 00 | ....
[06-18-2016 :: 03:31:43] [Packet :: Client -> Server] [OP_EndLootRequest - 0x0094] [Size: 6]
[06-18-2016 :: 03:31:43] [Packet :: Client -> Server (Dump)] [OP_EndLootRequest - 0x0094] [Size: 6]
0: CC 00 00 00 | ....
[06-18-2016 :: 03:31:43] [Packet :: Server -> Client] [OP_LootComplete - 0x012c] [Size: 2]
[06-18-2016 :: 03:31:43] [Packet :: Server -> Client (Dump)] [OP_LootComplete - 0x012c] [Size: 2]
[
Tyen05
06-22-2016, 04:49 PM
solved: https://github.com/UnityEQ/UnityEQServer/commit/ff73653c75396e6e0b7ed3b10f870b4a93064875
working on looting: https://youtu.be/dkwiJ87Ftk8
fzzzty
06-22-2016, 09:34 PM
This is awesome. I saw this a long time ago, and it's great that you're still working on it. Having a client that doesn't crash all the time would be wonderful. What server/net code are you developing against? I assume whatever the latest eqemu uses?
Tyen05
06-23-2016, 05:51 AM
http://i.imgur.com/YxRvWkX.jpg
http://i.imgur.com/nS4LXc0.png
Tyen05
06-23-2016, 12:38 PM
pvp happened
https://youtu.be/TxKjJilrtkU
Tyen05
06-26-2016, 06:57 AM
Inventory, equip next
http://i.imgur.com/EjFEMbI.jpg
Tyen05
06-26-2016, 07:13 PM
Slots done, time for op_moveitem
http://i.imgur.com/OryBaW5.jpg
Tyen05
06-27-2016, 06:31 AM
moveitem, first pass
https://youtu.be/f2hjaJlJ6Zc
Tyen05
06-27-2016, 08:26 PM
moveitem, second pass
https://youtu.be/V1M0RJUs4Rw
Tyen05
06-28-2016, 05:12 AM
moveitem, third pass
https://youtu.be/986EFhB0O9g
Tyen05
06-29-2016, 06:30 AM
draggable windows
https://youtu.be/ShEI1PasP_g
Tyen05
06-30-2016, 05:52 AM
something for increasing FPS.
Need to change a list to a dictionary so instead of the array going "Element 0, element 1, etc" i can change the element name to spawnId in objectpool.cs (https://github.com/UnityEQ/UnityEQClient/blob/master/Assets/Scripts/ObjectPool.cs#L127)
Using "Where" or "Find" hurts performance. I'm trying to find a way to just define a gameobject without having to search for it first. I use this a lot in handleworldmessages.cs (https://github.com/UnityEQ/UnityEQClient/blob/master/Assets/Scripts/HandleWorldMessages.cs#L840). Biggest thing is op_clientupdate uses this 100% of the time, and it is sent from the server to the client every 30milliseconds.
in a script other than objectpool.cs, i use the below line to define a gameobject thats in a list array:
GameObject temp = ObjectPool.instance.spawnlist.Where(obj => obj.name == spawn_id.ToString()).SingleOrDefault();
Id like to do something like below in a dict array, cutting out the search using the spawnId as the element# in the array, so I don't have to search by name:
GameObject temp = ObjectPool.instance.spawndict[spawn_id];
In the pc editor, it's np @ 60 fps. in firefox it's 30fps. In chrome, it's like 17-23 fps. (from what i've noticed). Pretty sure this is causing it.
http://i.imgur.com/cEEapHw.png
Tyen05
06-30-2016, 07:07 PM
The "where" wasnt killing my fps, but changed it to below and kept the spawnlist array a list instead of switching to a dictionary:
GameObject temp = ObjectPool.instance.spawnlist.FirstOrDefault(obj => obj.name == spawn_id.ToString());
This line in npccontroller.cs (https://github.com/UnityEQ/UnityEQClient/blob/master/Assets/Scripts/NPCController.cs#L63) was taking FPS down by half.
grounded = ((controller.Move(moveDirection * Time.deltaTime)) & CollisionFlags.Below) != 0;
Charles082986
07-01-2016, 01:33 AM
https://docs.unity3d.com/ScriptReference/CharacterController.Move.html
https://docs.unity3d.com/ScriptReference/CharacterController-isGrounded.html
This says that CharacterController already has a property called "isGrounded" which checks if the characterController was touching the ground during the last move.
You might separate the .Move command onto a different line as the bitwise operator function.
Also, do you have a range limit set for what objects are rendered? Game clients have an adjustable clip plane (I think that's what it was called in EQ) that only renders terrain and game objects out to a certain distance. It might help if you're only rendering what's in the immediate area instead of every NPC in Qeynos. It's late, so I could be horribly wrong, but since I don't see a good way around having to call the .Move command, the only thing I can guess at is minimizing its usage.
Tyen05
07-02-2016, 05:06 AM
doing real good on fps now with a bunch of changes.
Clip plane is set to 1200, thats the value in the DB in zone table. Anything past that, the client doesn't render by default. I just added to the NPC script for gameobjects not to render when the camera isnt looking at it. I did this with NPCs only, for now.
Vector3 screenPoint = Camera.main.WorldToViewportPoint(transform.positio n);
bool onScreen = screenPoint.z > 0 && screenPoint.x > 0 && screenPoint.x < 1 && screenPoint.y > 0 && screenPoint.y < 1;
if(onScreen == true & screenBool != true){transform.GetChild(0).gameObject.SetActive(t rue);screenBool = true;}
if(onScreen == false & screenBool != false){transform.GetChild(0).gameObject.SetActive( false);screenBool = false;}
cool video:
https://youtu.be/FSQ7I1EcA08
Tyen05
07-02-2016, 06:54 PM
That technique seems to only raise fps by a little bit, trying out another method.
Unity's built in Occlusion Culling: https://docs.unity3d.com/Manual/OcclusionCulling.html
fzzzty
07-04-2016, 08:14 PM
The "where" wasnt killing my fps, but changed it to below and kept the spawnlist array a list instead of switching to a dictionary:
GameObject temp = ObjectPool.instance.spawnlist.FirstOrDefault(obj => obj.name == spawn_id.ToString());
Forgive me if you know this already, but FirstOrDefault will return null if it doesn't find anything, so you might have to handle that (probably the same path as if the Where returned no entries). Where passes through the whole list even if it finds something, of course, so this should be faster if you're guaranteed to have the thing in the lsit. Alternatively, First will throw if it finds nothing. ToLookup might be useful in some situations in case you haven't heard of it. No offense if you already know all this. :)
Charles082986
07-04-2016, 08:50 PM
FirstOrDefault only returns null if the default is null. The default value can be configured so it works quicker than .FirstOrDefault(obj => obj.name == spawn_id.ToString()) ?? new GameObject();
Tyen05
07-05-2016, 04:18 PM
Messing with Analytics and eventually back to bag/equip slots.
Google Analytics Plugin for Unity - API Reference (https://developers.google.com/analytics/devguides/collection/unity/v4/reference)
Tyen05
07-06-2016, 05:58 AM
Analytics
https://www.twitch.tv/eqbrowser/v/76522914
https://youtu.be/WyVL92ftkTI
Tyen05
07-06-2016, 06:11 PM
http://i.imgur.com/7P7HGAY.png
http://i.imgur.com/TpZf77j.png
http://i.imgur.com/mkSkkJX.png
Tyen05
07-16-2016, 06:07 PM
Making EQgo.
GPS Mapping w/ Unity3d:
https://www.assetstore.unity3d.com/en/#!/content/13153
Custom Maps:
https://www.mapbox.com/studio/
Real life places data:
https://mapzen.com/documentation/search/search/
Images:
(chart: GPS,Unity,Mobile) http://i.imgur.com/XkRcLHW.jpg
(unity editor: froglok wandering the streets) http://i.imgur.com/RbuAfc6.png
(unity editor: map data to unity gameobjects) http://i.imgur.com/LHx950P.png
(mapbox studio: rough customization) http://i.imgur.com/iM8bmFr.png
Tyen05
08-23-2016, 01:40 AM
ios:
https://youtu.be/7vYDNdo1-vU
android:
http://i.imgur.com/vrhQpDa.jpg
Tyen05
08-23-2016, 02:32 PM
https://rererolled.org/attachments/4vtcgw1-jpg.3743/
Tyen05
08-26-2016, 07:09 PM
Not going to be as active in this thread. Posting live updates to Eqemu Discord channel #websockets
Websockets is the Eqemu Server branch that I use with the Unity Client.
https://discord.gg/fuVAvtu
MarcusD
09-04-2016, 01:42 PM
IMO if you are putting in the effort of making a Unity game you may as well make it with modern graphics and make a new game that will attract new players. What you have to realize is that EQ was made with Unreal engine 1 using the best graphics they could at the time. If you want to follow in the tradition of EQ you would make a new game using new graphics using the philosophy of survival mmorpg. Lets create the future with what we learned from EQ, not stuck recreating the past. The only real classic killer would be a new mmo that recaptures the spirit of EQ. People will play the titanium client (or an earlier client if someone gets it working) if they want to relive EQ. Period.
Phantons
09-08-2016, 12:18 AM
IMO if you are putting in the effort of making a Unity game you may as well make it with modern graphics and make a new game that will attract new players. What you have to realize is that EQ was made with Unreal engine 1 using the best graphics they could at the time. If you want to follow in the tradition of EQ you would make a new game using new graphics using the philosophy of survival mmorpg. Lets create the future with what we learned from EQ, not stuck recreating the past. The only real classic killer would be a new mmo that recaptures the spirit of EQ. People will play the titanium client (or an earlier client if someone gets it working) if they want to relive EQ. Period.
EQEmulator is a hobby kind of website. We run servers because we're passionate about the game. Same reason we play these servers. Lots of people here also play live EQ, whether it's actively or maybe a couple weeks a year. This Unity project is a part of that. Tyen is simply making the game in Unity. It's not to do something new. You have to realize how hard it is to obtain that experience we truly had back in the P99 days (P99 did a good job). Part of what keeps some players, though, from all the other servers is the difficulty of obtaining a working client. It would be easy for someone like me to obtain a working client, but that doesn't mean it's easy for someone else who doesn't know where to even search. This Unity would basically be an easy-to-use player that could even be run out of the browser. It's an awesome thing. It's going to be a tremendous amount of work that Tyen may or may not even have a grasp on yet, but nonetheless, it's a project of passion. Also, the idea of playing this on our phones (though incredibly difficult due to screen-size and lack of accessibility to controls) is awesome. Something such as Unity would enable that.
Tyen clearly has the ability to make a new game if that was what he wished. Maybe he is, maybe he isn't. That won't rid his passion for Everquest that this project clearly shows he has.
Tyen05
09-28-2016, 03:08 PM
Leapdroid is a real nice android emulator.
https://youtu.be/ZCc9u5Q98NY
This is the UI with everything open so far.
https://www.firesofheaven.org/attachments/maghqc5-jpg.79977/
WebGL & Android client playing together on same server
https://youtu.be/6M5-HykBJhk
Tyen05
12-19-2016, 03:46 AM
https://firesofheaven.org/attachments/knopenx-png.107640/
daerath
12-23-2016, 07:04 AM
IMO if you are putting in the effort of making a Unity game you may as well make it with modern graphics and make a new game that will attract new players. What you have to realize is that EQ was made with Unreal engine 1 using the best graphics they could at the time. If you want to follow in the tradition of EQ you would make a new game using new graphics using the philosophy of survival mmorpg. Lets create the future with what we learned from EQ, not stuck recreating the past. The only real classic killer would be a new mmo that recaptures the spirit of EQ. People will play the titanium client (or an earlier client if someone gets it working) if they want to relive EQ. Period.
Everquest does not use the Unreal 1 engine. It uses an in house engine.
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.