I have gone only so far on my own doing my RTS server and realize I'd do better with direct help from the many v.experienced coders here and elsewhere, so I want to put a pitch like this on freeelancer.com
I got ripped off in 2005 on rent-a-coder w/ a project with no moderation/oversight by the company, so I'll insist on project oversight, now.
Please leave me some comments on its clarity / weaknesses. - this, below
Title : Bullet-Proof RTS server & clients needed
I have been trying to create a Java RTS server on my own. I have got enough of it working for client-joining and game-readiness. (attached) I have had lots of useful advice for using TCP to make initial setup, meaning reliable TCP for server and clients to make initial contact, and learn IP addresses and the DatagramSocket ports. These all work perfectly. - attached
What I need from you . . .
A Perfect in-game server to be Blizzard, Age of Empires quality with no-crashing, a definitely un-hackable game, with the game-state on the server, instantiable on a remote machine, or, however the servers are best created, with the clients receiving unit movement updates to advance their respective game-states.
In-game communication must be UDP
- player commands from client to server,
- the server sending UDP state update increments to each client,
- with a periodic TCP full-state-correction messages to guarantee synchronization.
I keep on getting super-massive Thread entanglements as I get deeper, and I need well-experienced assistance to go on.
I'd prefer not to fumble anymore on my own creating the in-game server, and indefinitely compounding mistakes on top of each other. Whoever takes this proposal should have optimal, proven server-coding experience ready to go. I don't want to pay for someone learning on the job.[ learn the hard way what the major mistakes are for newbie heavy server coders]. Once the networking is all working, with some gameplay aspects - building placement and construction, production queues, melee and ranged combat, I'll program the game on the server.
We will need to support . . .
- 8 clients for 4 vs 4, and,-
- giant 8 FFA. Not super-heavy, but not trivial.
I am open to all suggestions and considerations.
2. A Perfect abstract in-game RTSclient class for the client, that
a) - can be customized by me for different needs / looks via inheritance of an abstract process() method for the client to implement that reacts to the current visible game-state, once it is clearly received.
This would be so that a renderer
- can update a GUI of the game and, or
-an in-house AI can inspect the visible game state
and can provide appropriate reactions, or many different rendering-style windows can be made, for game-play command consoles or others
b) I would also need….. abstract initialize() method's called from the constructor to implement to help with client creation. initializeStart() and initializeEnd() at front and back. e.g. start() could instantiate a Frame and more…end() could Display the Frame and more.
-There would be client methods, data sent to the server
- moveUnits(the specific units int, or the grouping, int toX, int toY, boolean doAttacking, boolean doPatrolling) in the RTSclient to be called on to moveUnits (via message to the server)
- and unit selection (is this best stored on client or server? probably server to minimize traffic),
- doSelection(int unitNumber), also deSelect(int unitNumber) deSelectAll()
- createGroup(int groupNumber, list of units) if best on server
- textSend, (to all, or other players, clients can also specify who the client will receive messages from, or who will be thoroughly ignored.) mass spammers should be auto-ignored. Messages could be text or a byte for allied AI's, for example.
- unitCreate(int unitType, int teamNumber, int x, int y) To create units or structures at a certain placing on the map for a certain player and team. (only for dev usage) This would be removed from the RTSclient at launch time as a hacking loophole. . . because unitAction(..) would be the build mechanism.
unit creation would be done in the server, by the server, when appropriate, if feasible (enough money, etc)
- unitAction(activityCode, actingUnit, whereX,whereY, actedOnUnit) again, only acts if it is a legal move on the server and the parameters are appropriate.
c) An Old Starcraft / Old Warcraft, (2-Dimensional) scenery rendering and pathfinding system would need to be settled on. I'd prefer this, to avoid hectic modern 3-D terrain complications. In all, a gameplay feel like Starcraft 1 / brood war would be ideal for my needs. We might have to have a big, one view, 2 miles high perspective to avoid scrolling and massive graphical burdening in a 1400*700 type window? bigger? I don't know for sure what is practical.
c) - networking so that no crucial client actions are missed. e.g. if one player attacks, we don't want to miss that command by UDP leakage. The networking must work as well over long distance as a LAN.
d) - I also need this finalized RTSclient class ported to Python, - Jython?
once the Java client is working.
- for various possibilities, scenarios,
for if it happens that Python RTSclient's become useful, desirous.
Can a Java .class plug into a Python interface .py equivalent? This would save mirroring updates from Java to Python.
How can we best handle code improvements among both languages? Is an abstract class equivalent possible in Python? - for initializeStart(), initializeEnd() and process() methods in the RTSclient? Is this totally straightforward?
Once we have a finished RTSclient.class, it will be useable in both languages, identically? That pleases me, because Python Tkinter graphics seemed to be a total flop, initially. and Java stepping in on a frame class would be super.
e) a useful terrain and map system, we'd agree on tiling or drawLining, - That can be automatically navigated by ground units. - path-finding.
f) …can demonstrate functionality, by moving a group of, say mutalisks (attached), or hydralisks, air and ground, around a map on one window, with a fog-of-war and these actions being verifiable on another window on another computer, far away.
g) I also want RTSclient's and RTSserver's at some point to be able to be initable, in code, on a remote computer for test phase. - via Web-start. In all, the game should be a Webstart'ed program.
e.g. Our in-house AI's can be ordered to start on other machines, or in the cloud, in code, to join a test game by specifying the RTSclient class file's location in our database, be it
1) a .class
2) or a .py, Jython would make this a .class?
the game's Server's location, ( I might not understand how best to do this - how do we spring up our in-house AI's? - from their .class)
Maybe FFA of 3 humans vs 5 computers - all RTSclients
h) The RTSclients must be nameable in code. e.g. "Galactic Federal army." or "The Neptune Knights." We will have a few RTSclient's, not one (being RTSclient inherited game-play variations, which I will create a few of, once the RTSclient works).
i) A demo game-Frame play-scenario, of gameplay potential, by a web-app Game-setup and by movements of small MPG transparent unit graphics on a big, about browser-window sized map-scenery-Frame. Are MPG's best for unit graphics, JPG for tiled scenery?
The RTSclient code files must exist in an online database of mine - of the various RTSclient's [and our various in-house AI’s] - for easy finding within a running program - say creating a drop-down selection of them (I have Godaddy hosting) from where we can gather these codes for instantiation / running. and selecting their names from a list.
- I suspect I'll keep making new client types. Once we have the finalized .class
A web site / Web-app where users can sign up, sign in and edit some account aspects in a panel, - text, radio-buttons, upload files to store in their account, e.g. pics. (mostly standard, default web site stuff, really) (a logged-in-user count)(also, named chat rooms create-able for logged in users) ( a game-create-room, where other users can join to prepare and commence a game, human v human, or human v one of our RTSclient AI's) I need to know how to acquire these user account aspects in my code for display within standard window components, Java and web-app, or other uses.
k) I also need to see how to, in Java or website, launch a game server and the clients, based on game setup specified in this site / app. Would it be best to do this in Webstart Java code? Would our AI's be best to run on their own remote machines? It was suggested I use Google or Amazon's cloud. How can we make it so that potentially 1,000s of AI's can exist globally! ? If someone wants to play vs an AI, the cloud spawns a new one? What is most practical coastwise? Cloud seemed very affordable, specifically for this use. It's mostly for massive data bandwidth? Bare in mind the guaranteed abuse that will occur if possible from users!
How can we have large numbers of clients simultaneously in global games, 1v1 or multi-player games?
Feel welcome to contact me for clarifications, discussion. I am in North Carolina, and a within the United States phone call would be okay. or Skype. Set up a time!