acemulator / ace Goto Github PK
View Code? Open in Web Editor NEWAsheron's Call server emulator.
Home Page: https://emulator.ac
License: GNU Affero General Public License v3.0
Asheron's Call server emulator.
Home Page: https://emulator.ac
License: GNU Affero General Public License v3.0
for reuse in other components such as:
Per Rawaho. This needs looking into.
Currently the only way to log into the world with a different character is to restart the client.
We need some sort of low priority thread to run and periodically perform routine maintenance tasks such as removing characters marked for deletion.
We need a client launcher. Perhaps we use a modified thwarglauncher.
https://thwarglauncher.codeplex.com/
For decal to work:
"for emu, you should make a launcher that injects OR a shim client that loads the client and injects"
"just stuff inject.dll in the process space early enough and it will do its thing"
Chat window(s), character info / inventory panel, etc.
Logging this as people are constantly asking for stuff that can be done.
We'll need an ACE admin to enable it for ACE, but somebody can get it working in their personal fork first. I found this project as a tool for running StyleCop from within Travis.
https://github.com/Nylle/StyleCop.Console
Unit tests will require switching to NUnit as well.
Continue reworking network pipe to support message buffering and flushing from Session.Update to send as a multifragment packet.
When more than one person is logged on to the server, the second person never comes out of portal space until they move. This may be an incorrect setting of contact. Also under the same use case - if 2 clients are logged in, from the perspective of each client - the other jumps and briefly does the falling animation with every movement. In looking at live world pcaps, it looks like almost all movements have the contact flag set to true. It looks to be that way in ours. I am putting this here so it is documented - if anyone has time to look for this great - if not, I will try to see if I can debug it.
Rewrite packet and fragment handling to delay and allow for combining outgoing fragments.
All the other things that go in the property buckets. Read from client on char create (or not, as the augments should all be unset), save to the DB, and load them up on login.
Use Cases:
Other necessary changes:
Design thoughts:
Jyrus pointed out a problem with portals in town network.
To comfirm, I loaded into ACE and issued teleloc command /teleloc 00070145 70.10 -83.07 0.10 1.00 0.00 0.00 -0.01
to arrive in Town Network and found portals to be majorly flawed.
PCAPs filled will exceptions.
Attaching files of retail pcap, plus export scripts, plus pcap from ace
output.zip
Per Rawaho
Proposed fix:
ALTER TABLE weenie_palette_changes DROP PRIMARY KEY, ADD PRIMARY KEY(weenieClassId, subPaletteId, offset, length);
ALTER TABLE weenie_texture_map_changes DROP PRIMARY KEY, ADD PRIMARY KEY(weenieClassId, index, oldId);
I think the weenie_palette_changes table needs a different primary index. Currently it is weenieClassId + subPaletteId.
Here is the palette data for Narg.
subPaletteId,offset,length
67116992,192,64
67109565,256,64
67114248,576,160
67114248,1088,192
67114248,320,192
67114248,928,160
67114248,0,192
67114248,768,96
67114248,928,96
67110336,2000,48
subPaletteId 67114248 appears 7 times, twice it has the same offset of 928
The same problem exists for weenie_texture_map_changes. Currently it is weenieClassId + index.
Here is the texture data for the Aluvian Mid-Stakes Gamesmaster
index,oldId,newId
16,83886232,83890685
16,83886668,83890262
16,83886837,83890287
16,83886684,83890353
9,83887070,83886781
9,83887062,83886686
0,83889072,83889072
0,83889342,83889342
5,83887064,83886241
1,83887064,83886241
3,83889344,83887054
7,83889344,83887054
4,83887068,83887054
8,83887068,83887054
index 16 apears 4 times
Clients that disconnect do not always get removed from world and sessions.
The server should have a way to track which DB migrations it has applied, and automatically apply missing ones in the correct order.
@Mag-nus suggested a naming convention of YYYY_MM_DD_tablename.sql
. This would work, but would make dealing with pull requests and merges annoying, if multiple came in one day.
I would suggest a naming scheme more along the lines of $patchNumber + '_' + $YYYY_MM_DD + '_' + $descriptiveFeatureName
, for example 01_2017_02_03_add_monster_information.sql
and not limiting them to any particular tables.
Picking the second naming system will make dealing with pull requests easier and help developers understand what updates are for. Additionally, the leading number provides a good way of tracking our schema revision.
Session.Player.Teleport always ends up with 1 0 0 0 for the Quaternion regardless of what the actual position sent in to it specified.
This is a recent change that was not present previously.
Should we be "internalizing" the connections to the mysql servers? Even with strong username/passwords is there as technical reason why we need to expose the sql server externally to the internet?
intermittently? on logout? by command? something
Right now it's using salted SHA256, which works for now but isn't suitable for real password storage, taking into considerations things like password reuse across services and the fact that inexperienced server admins will likely be operating poorly configured ACEmulator servers.
To minimize the damage of leaking any password hashes from the DB, the supported standard for password storage on .NET is PBKDF2.
I am already working on converting password storage to use PBKDF2 on my branch.
https://dusted.codes/sha-256-is-not-a-secure-password-hashing-algorithm
As each of us is working on different parts at different times, it would be useful to have a document like our read me or change log where we could put tests and expected results for our areas. That way prior to submitting a PR you could run through the test to make sure your change did not break the world.
Quick example: Test item pickup and drop
I am working on this at the moment. Can it be assigned to me?
Logs should go in a separate window from the main ACE >>
command prompt so admins aren't frustrated with information stomping commands as they're being typed.
Might as well add a Config.json
option to log them to the filesystem and set verbosity at the same time.
I have not had a chance to look into it, but either on the save or the load, we are not saving or loading the character rotation (facing direction) correctly. You log out facing one way, you log back in in the same spot rotated 90 degrees.
Envisioning how this server will eventually be run and/or deployed, I suspect that most would like the opportunity to have the server run as a Windows service. This will allow automated starting of ACE at Windows startup. This will require a separate monitoring application to monitor any "console" output. I offer this only from a sysadmin point of view who has an aversion to having to interactively start applications which others use. I'm not sure what architectural changes will be required, but thought it would be worth mentioning early in the development process.
Likely not able to add yet until multiplayer support added:
placeholder issue for what i'm working on, really
Deleting a character's position of PositionType=1 causes server to crash when character is loaded.
Background for this:
I used @spacejump command which put me in an endless portal (command should probably be removed or fixed). I figured I'd just delete that character's current position and it would default back to fallback position but it did not work. Probably needs some logic built in the load-in if no current position is in the db to reset to a safe location, either lifestone if set and failing that probably holtburg drop (or race specific starter town drop).
cc: @fantoms
Create stubs for each @ command in-game with expected usage and output comments.
This should help prevent commands not working the way they did originally
StackOverflow had something working in chat, perhaps submit a pull request.
currently the client loses objects if teleported within same landblock
We need a core design, and then to work on population.
Login == account
retail "AC account" == subscription (under the hood, as Turbine did it)
subscription == a set of characters on worlds
Old/retail paradigm: 1 login for every subscription
New paradigm: 1 master login, select a subscription
This will entail building a set of REST services and a new launcher with Thwargle.
Additional work needed in Network code.
Please assign to me.
Spend unused xp on skills/stats, save to database.
It's needed for a lot of things
Even a basic packet broadcast will need it
Need to add a column for access rights so to allow accounts to be able to create characters with IsAdmin or IsEnvoy bools set.
Some portals/lifestones are not appearing until right on top of them or past them.
Repo:
@telepoi candeth keep
run straight to tree
note the very late appearance of some of the objects.. if you turn around and run back toward the entrance, one of the portals blinks and resets as well.
Make an enum for the following positions types:
Notes / Requirements
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.