The DukeSoft Forum
September 09, 2010, 10:48:59 *
Welkom, Gast. Alsjeblieft inloggen of registreren.
De activerings e-mail gemist?

Login met gebruikersnaam, wachtwoord en sessielengte
Nieuws: Doom 2D - Knee deep in the Dead is klaar!
 
   Startpagina   Help Inloggen Registreren  
Pagina's: [1]   Omlaag
  E-mail dit topic  |  Print  
Auteur Topic: c++ server 39dll  (gelezen 1028 keer)
Aragon
Heldaftig lid
*****

Karma: +9/-76
Offline Offline

Berichten: 564


Working on 3D online shooter


WWW
« Gepost op: September 30, 2009, 05:18:20 »

Voor een online game ben ik enig tijd bezig met een server in c++, maar ik ben bang dat het mij niet gaat lukken.
Heeft iemand een example of kan mij vertellen hoe ik de movement en het aanmaken van een speler goed kan doen, want mijn probeersels zijn niks....

Amin edit:
For the 39DLL C++ Server, check out this webpage: http://www.programmerslounge.nl/index.php?topic=42.0
« Laatste verandering: Augustus 27, 2010, 05:37:43 door BlackHawk » Gelogd

Ik zeg hoi, wat zeg jij?
BlackHawk
Administrator
Heldaftig lid
*****

Karma: +21/-12
Offline Offline

Berichten: 854


Do deh orc dance. Yeh =D


WWW
« Antwoord #1 Gepost op: September 30, 2009, 05:35:54 »

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:

Code:
#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! 
Gelogd

Aragon
Heldaftig lid
*****

Karma: +9/-76
Offline Offline

Berichten: 564


Working on 3D online shooter


WWW
« Antwoord #2 Gepost op: Oktober 09, 2009, 09:27:23 »

Robbo, maak een example pls
Gelogd

Ik zeg hoi, wat zeg jij?
BlackHawk
Administrator
Heldaftig lid
*****

Karma: +21/-12
Offline Offline

Berichten: 854


Do deh orc dance. Yeh =D


WWW
« Antwoord #3 Gepost op: Oktober 10, 2009, 01:09:13 »

c++ example voor 39dll server?
aight.
Ik zal dr aan werken
Gelogd

Aragon
Heldaftig lid
*****

Karma: +9/-76
Offline Offline

Berichten: 564


Working on 3D online shooter


WWW
« Antwoord #4 Gepost op: Oktober 10, 2009, 08:32:49 »

toprob
Gelogd

Ik zeg hoi, wat zeg jij?
Maker-Bart
Noob
*

Karma: +0/-0
Offline Offline

Berichten: 2


« Antwoord #5 Gepost op: Februari 27, 2010, 01:02:33 »

Is die example al ergens released? Ik zou hem graag willen gebruiken
Gelogd
BlackHawk
Administrator
Heldaftig lid
*****

Karma: +21/-12
Offline Offline

Berichten: 854


Do deh orc dance. Yeh =D


WWW
« Antwoord #6 Gepost op: Februari 28, 2010, 02:06:47 »

Euhm ja hij moet ergens op THE INTERWEBS te vinden zijn maar ik heb m zo 123 niet.. Dit is trouwens een stukje code zonder alle include files dus veel heb je er niet aan >.<
 
Gelogd

Maker-Bart
Noob
*

Karma: +0/-0
Offline Offline

Berichten: 2


« Antwoord #7 Gepost op: Februari 28, 2010, 05:13:19 »

Nee dat weet ik, ik heb inmiddels 39dll.h
Gelogd
BlackHawk
Administrator
Heldaftig lid
*****

Karma: +21/-12
Offline Offline

Berichten: 854


Do deh orc dance. Yeh =D


WWW
« Antwoord #8 Gepost op: Maart 09, 2010, 04:47:09 »

ja dan heb je het meeste al, maar er moeten er nog een hoop bij komen hoor 
Gelogd

Semmy
Noob
*

Karma: +0/-0
Offline Offline

Berichten: 2


« Antwoord #9 Gepost op: April 20, 2010, 10:56:26 »

Al weer een jaar oud... als je er nog niet mee gestopt bent... wanneer komt die example uit? =p
Gelogd
BlackHawk
Administrator
Heldaftig lid
*****

Karma: +21/-12
Offline Offline

Berichten: 854


Do deh orc dance. Yeh =D


WWW
« Antwoord #10 Gepost op: April 21, 2010, 09:51:27 »

Nou, de laatste tijd heb ik heel erg weinig tijd.. Zit met stage enzo.
Maarja, zomervakantie, tijd daarna, dan heb ik weer tijd om aan games te werken denk ik
Gelogd

BlackHawk
Administrator
Heldaftig lid
*****

Karma: +21/-12
Offline Offline

Berichten: 854


Do deh orc dance. Yeh =D


WWW
« Antwoord #11 Gepost op: Mei 26, 2010, 12:01:22 »

http://www.programmerslounge.nl/index.php?topic=42


ziedaar!
Gelogd

Semmy
Noob
*

Karma: +0/-0
Offline Offline

Berichten: 2


« Antwoord #12 Gepost op: Juni 13, 2010, 12:38:26 »

Super!
Maar heb je al zomervakantie dan? 
Gelogd
Pagina's: [1]   Omhoog
  E-mail dit topic  |  Print  
 
Ga naar:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.4 | SMF © 2006, Simple Machines LLC Valid XHTML 1.0! Valid CSS!
Pagina opgebouwd in 0.106 seconden met 19 queries.