Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
13.02.2010, 17:29
the_Crow



Ich arbeite daran ein Inventarsystem, wie man es aus Rollenspielen kennt, in eine Multiplayer Mod einzubauen.

Dazu hab ich eine Server-Klasse geschrieben, mit der man das Inventar verwalten kann. Man kann Gegenstände hinzufügen und entfernen und abfragen ob der Spieler einen bestimmten Gegenstand besitzt.

In einer entsprechenden Client-Klasse kann man das ganze Inventar abfragen (momentan nur über die Konsole, später mit VGUI Menü) und wieder einzelne Gegenstände abfragen.

Die Server-Klasse wird an die Klasse CSDKPlayer vererbert, damit jeder Spieler sein eigenes Inventar hat.
Mit der Client-Klasse passiert das gleiche, aber eben client-seitig (Klasse: C_SDKPlayer)

Das Inventar selbst besteht aus einem struct mit Variablen für Namen, Anzahl usw.

Über die Klasse CBaseEntity wird ein weiters struct an alle Entities vererbt. In diesem struct werden Dinge wie Name (welcher im Inventar angezeigt wird) oder Globalname (z.B item_healthkit) angegeben. Diese Werte werden ins struct des Inventars übertragen, wenn man den Gegenstand aufhebt.

Bisher funktioniert alles einwandfrei. Doch jetzt möchte ich das Inventar-struct vom Server an den Client übertragen, damit jeder seine eigenes Inventar abrufen kann.
Das Problem ist aber, dass ich das struct nicht übertragen kann. Ich hab bis jetzt keinen Weg gefunden (weder in Tutorials noch durch ausprobieren).

Ich hab es wie folgt versucht:
Quellcode:sdk_player.h (Server)
CNetworkArray( SInventory, m_Inventory, MAX_ITEMS );

sdk_player.cpp (Server)
SendPropArray3( SENDINFO_ARRAY3(m_Inventory), SendPropInt( SENDINFO_ARRAY(m_Inventory) ) ),

c_sdk_player.h (Client)
SInventory    m_Inventory[MAX_ITEMS];

c_sdk_player.cpp (Client)
RecvPropArray3( RECVINFO_ARRAY(m_Inventory), RecvPropInt( RECVINFO_ARRAY(m_Inventory) ) ),
SInventory ist das struct für das Inventar.
Quellcode:struct SInventory
{
    const char *name;
    const char *entity;
    int        count;    // How much do we have?
    bool    dropable;        // Is this item dropable?
};
Wenn ich es so mache, dann stürzt das Spiel, mit einer Fehlermeldung wegen ungültigem read Vorgang, ab, noch bevor des Spieler spawnt. Entweder passt an dem Array m_Inventory etwas nicht oder an dem Weg wie ich es übertrage.
Ich bin jedenfalls ratlos und komme einfach nicht mehr weiter.

Ich hab auch schon daran gedacht, statt einen struct eine eigene Klasse zu verwenden, aber ich glaube, dass das nur umständlicher wäre.

Wenn es hilfreich sein sollte, kann ich auch den ganze Code posten.

--

www.the-crow.at - meine persönliche Website | TibiaGerman | Twitter | Wiaschtlsiada

zum Seitenanfang zum Seitenende Profil || Suche
001
22.04.2010, 16:50
Alien soldier



Kann man die Projektdaten nicht einfach so
in das Client-Verzeichnis einfügen?

--

zum Seitenanfang zum Seitenende Profil || Suche