Ah, das mooi

Ik was bezig met MoW2 server in CPP te doen, en dat werkt erg lekker. Er zijn nog wel rare foutjes.. Dat als ik als spelernaam Blackhawk doe, en ik chat een keer (dat ik in de server zie:
Blackhawk: Hallo) maar als ik dan weer leave staat er
Blackhawk: Hallo left.Erg apart en ik weet niet hoe het komt

misschien iets met strings ofzo..
Verder leest hij ook wat waardes uit een ini-reader.. Was ik ook mee aan t kloten

Ik heb de 39dll in C++ gedaan via Code::Blocks.. Zolang je maar een MinGW compiler hebt moet dit lukken:
#include <iostream>
#include "39dll.h"
#include "player.h"
#include "IniWriter.h"
#include "IniReader.h"
using namespace std;
Player Players[255];
int maxplayers=32;
int main()
{
cout<<"************************* Men of War 2.0 Game Server ***********************"<<endl
<<"************************* Server Version 1.0 ***********************"<<endl
<<"************************* By Rob Quist ***********************"<<endl
<<"************************* AKA BlackHawkRobbo ***********************"<<endl
<<""<<endl
<<"-------------------------------------------------------------------------------"<<endl;
//Load the settings from ini file
//cout<<"Loading settings from settings.ini..."<<endl;
CIniReader iniReader(".\\settings.ini");
char *name = iniReader.ReadString("server", "servername", "Men of War 2.0 Server");
string gamename = name;
delete name;
int serverport = iniReader.ReadInteger("server", "port", 12564);
char* tmp = iniReader.ReadString("server", "ip", "127.0.0.1");
string serverip=tmp;
delete tmp;
int gamekind = iniReader.ReadInteger("game", "kind", 1); //1=DM 2=TDM
int map = iniReader.ReadInteger("game", "map", 1); //1=Bloodgulch
int maxtime = iniReader.ReadInteger("game", "maxtime", 0); //in minutes, 0=unlimited
int maxkills = iniReader.ReadInteger("game", "maxkills", 25); //0=unlimited
cout<<"************************ SETTINGS LOADED: *************************"<<endl
<<""<<endl
<<" Game Name: "<<gamename<<endl
<<" Server IP: "<<serverip<<endl
<<" Server Port: "<<serverport<<endl
<<""<<endl
<<"*******************************************************************************"<<endl
<<""<<endl
<<" Game Kind: "<<gamekind<<endl
<<" Map: "<<map<<endl
<<" Max Time: "<<maxtime<<endl
<<" Max Kills: "<<maxkills<<endl
<<""<<endl
<<"-------------------------------------------------------------------------------"<<endl<<endl;
// Fix up list (Default ID)
for(int i=0; i<=255; i++) {
Players[i].InUse = false;
}
dllInit();
double listen = tcplisten(serverport, 2, 1);
if (listen <= 0)
{
cout << "Failed to listen on port 12564!" << endl;
dllFree();
return 0;
}
cout << "Server listening on port 12564" << endl;
int test=0;
while(true)
{
Sleep(5); // Pause for a bit, without this your CPU would max out (1ms)
// Accept New Players
double NewClient = tcpaccept(listen, 1);
if(NewClient > 0)
{
int full=32;
for(int i=0; i<=maxplayers; i++)
{
if(!Players[i].InUse)
{
Players[i].InUse = true;
Players[i].Sock = NewClient;
clearbuffer(0);
writebyte(0, 0);
writebyte(i, 0);
sendmessage(Players[i].Sock, "", 0, 0);
cout << tcpip(NewClient) << " is connecting..." << endl;
break;
}
else {
full+=1;
}
if (full==maxplayers) {
clearbuffer(0);
writebyte(2, 0);
writebyte(i, 0);
sendmessage(Players[i].Sock, "", 0, 0);
cout << tcpip(NewClient) << "Sending server is full..." << endl;
}
}
}
// INCOMING SERVER MESSAGES (Messages Sent To Server, generally login/register)
double Size = receivemessage(listen, 0, 0);
if(Size > 0)
{
switch((int)readbyte(0))
{
default:
break;
}
}
// INCOMING CLIENT MESSAGES (Messages Sent From Client)
for(int i=0; i<=255;i++)
{
if(Players[i].InUse)
{
double Size = receivemessage(Players[i].Sock, 0, 0); // Messages coming from clients
if(Size > 0)
{
int mid = (int)readbyte(0);
switch(mid)
{
case 1: //Receiving data from joined user.
{
int i=readbyte(0);
int id=i;
Players[id].name = readstring(0);
clearbuffer(0);
writebyte(3,0);
writebyte(i,0);
writestring(Players[id].name,0);
for(int i=0; i<=maxplayers; i++) {
if(i!=id) {
if(Players[i].InUse) {
sendmessage(Players[i].Sock, "", 0, 0);
}
}
}
for(int i=0; i<=maxplayers; i++) {
if(i!=id) {
if(Players[i].InUse) {
clearbuffer(0);
writebyte(3,0);
writebyte(i,0);
writestring(Players[i].name,0);
sendmessage(Players[id].Sock, "", 0, 0);
}
}
}
cout << Players[i].name << " joined." << endl;
break;
}
case 2: //Sending user data.
{
int id=readbyte(0);
Players[id].x=readint(0);
Players[id].y=readint(0);
Players[id].direction=readint(0);
clearbuffer(0);
writebyte(5,0);
writebyte(id,0);
writeint(Players[id].x,0);
writeint(Players[id].y,0);
writeint(Players[id].direction,0);
for(int i=0; i<=maxplayers; i++) {
if(i!=id) {
if(Players[i].InUse) {
sendmessage(Players[i].Sock, "", 0, 0);
}
}
}
break;
}
default:
{
break;
}
}
}
}
}
}
closesock(listen);
dllFree();
return 0;
}
hij werkt niet helemaal lekker.. maar dat moet m zijn. (Heb een paar onderdelen eruit gehaald zodat de broncode van de MoW server niet uitlekt

je moet maar ff kijken naar die cases, dat is eigenlijk zoals het bij de GM server ook zit

Hopelijk heb je hier wat aan. Groetjes!
