Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
08.12.2002, 20:39
DavidR.



Es hilft alles nichts, ich wollte eigentlich einen Trigger erstellen, der eine Message zu einem Client sendet (oder vielleicht auch zu allen, das ist momentan nicht so wichtig):

Quellcode:
    char Mp3[2];
    sprintf(Mp3, "%d", m_iMp3);

    edict_t *pClient;
    pClient = g_engfuncs.pfnPEntityOfEntIndex( 1 );
    MESSAGE_BEGIN( MSG_ONE, gmsgPlayMP3, NULL, pClient );
        WRITE_STRING( (char *)Mp3 );
    MESSAGE_END();

    SetUse( StopMp3 );
    SetThink( NULL );

*weiter oben noch* (das tut aber nichts zur Sache):
Quellcode:
    extern int gmsgPlayMP3;
    int m_iMp3;

So sieht er bis jetzt aus, der Befehl...
Also m_iMp3 soll von WC/Hammer aus belegbar sein:
Quellcode:
void CTriggerMp3::KeyValue( KeyValueData *pkvd )
{
    if (FStrEq(pkvd->szKeyName, "Mp3"))
    {
        m_iMp3 = atof(pkvd->szValue);
        pkvd->fHandled = TRUE;
    }
    else
        CBaseEntity::KeyValue( pkvd );
}

So.
Aber wenn ich im Spiel jetzt über den Trigger laufe (d.h. der trigger wird von einem trigger_once getriggert), dann wird immer "0" als Mp3 angegeben...
Liegt das vielleicht daran, dass der Code mit dem (erst später - beim Laden der map) definiertem m_iMp3 noch nichts anfangen kann?
Oder hab ich einfach nur Schrott gebaut?

Es wäre echt.. hilfreich, wenn ihr mir helft :-)
Ich hocke an dem Sch... schon ziemlich lange dran, hab auch gegooglet und die Forumsuche benutzt, hab auch was gefunden:
Inter zu Char

Nur hat mir das nicht weitergeholfen...
Also wenn ich den int befehl m_iMp3 direkt als Message angeben, also so:
Quellcode:
    MESSAGE_BEGIN( MSG_ONE, gmsgPlayMP3, NULL, pClient );
        WRITE_STRING( m_iMp3 );
    MESSAGE_END();

Dann kommt diese Fehlernachricht:

Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

Und danach hab ich auch gesucht... und auch gefunden (das unten ist schon umgesetzt):
Quellcode:
    char Mp3[2];
    m_iMp3 = reinterpret_cast <int> (( char *) Mp3 );

Aber das hat genausowenig funktioniert (liegt wohl daran, dass ich was falsch geschrieben hab - das <int> kann irgendwie nicht stimmen) - aber es gibt ja nirgends Beispiele, selbst in VC++ kann ich kein Beispiel aufrufen!

Ja... ich hoffe ihr könnt mir helfen!
Ich hab auchnoch ganz anderes Zeug probiert:
Quellcode:
    char *szName = READ_STRING();
    char play[64];
    sprintf( play, "playmp3 %d.mp3\n", szName );
    SERVER_COMMAND( play );

funzt nicht, oder das:
Quellcode:
    double d = 1e20;
    m_iMp3 = static_cast<int>(2*d);

Das wäre genau das Gegenteil von dem, was ich will!
Man kann auch nicht direkt von WC/Hammer aus ein Char rauslesen lassen, dort erhalte ich dann auch nen Fehler:

Blabla Nicht möglich Blabla (stand eindeutig da, dass es nicht geht)

*seufz*
Kann doch nicht so schwer sein, oder?
Ein kleines Beispiel würde ja schon genügen!

Achja, nochwas:

sprintf( play, "playmp3 %d.mp3\n", szName );

Was genau bringen dei " %d " oder " %s ", oder vielleicht auch " %i ", ich verstehe das nicht ganz, entspricht " %d " dem "szName"?
K.A.

Götter erhört mich!

:-)

MfG DavidR.

--

--< Spirit of Half-life

zum Seitenanfang zum Seitenende Profil || Suche
001
08.12.2002, 21:11
Tron



deltree -y c:\spiele\halflife\sdk

lern c++

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
002
08.12.2002, 21:43
Rockefeller



Kauf dir n Buch. Da stehen alle solche Grundlagen schön ausführlich erklärt.

PS: bei "atof" steht das f für float. Also nimm besser atoi.

--

zum Seitenanfang zum Seitenende Profil || Suche
003
08.12.2002, 21:50
DavidR.



Was meinst du, was ich vorhab?

Sorry, aber ich finde einfach nichts, keine Bücher und keine Online Hilfe - deshalb frage ich doch hier!

:-(

Außerdem - ich hab ja selber auch noch nie jemanden geholfen, oder?

:-((

Achja, mein sdk liegt auf C:\sdk
;-)

Aber nochmal:
Bitte helft (hilf) mir!
Ich denke nicht, dass das obrige Problem selbstverständlich ist!
Ich mein, warum hätte ich dann schon eine eigene Mod?
Meine Mod ist in ca. 3 1/2 Monaten entstanden und bis jetzt hatte ich auch nie Probleme gehabt - und wenn man jetzt einmal fragt wird man sofort von der Community ausgeschlossen?!

*seufz*

Edit: Das ging jetzt mehr an Tron

Edit2:
Steht atoi dann für int?
Das Prob. ist ja, dass ich "char *" braucht...
Edit3:
Mir fehlt "schlich und einfach" die Brücke zwischen "int" und "char *"
Edit4:
Trotzdem Danke @Rockefeller!
Edit5:
Hm... sag(t) mal, könnt ihr mir vielleicht nen Buch empfehlen? Wäre eine Überlegung wert!
Vielleicht gibts sowas ja auch in Online Shops... dort wo ich wohne (nähe Freiburg/Emmendingen) kriegt man sowas nicht - jedenfalls weiß ich nicht wo...
Das wäre ein prima Weihnachtsgeschenke für meinen Bruder (der nicht codet ;-) )!

--

--< Spirit of Half-life


Dieser Beitrag wurde am 08.12.2002 um 22:12 von DavidR. bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
004
08.12.2002, 22:16
Killing Me Softly



Zitat:
DavidR. postete
Quellcode:
    char Mp3[2];
    sprintf(Mp3, "%d", m_iMp3);

    edict_t *pClient;
    pClient = g_engfuncs.pfnPEntityOfEntIndex( 1 );
    MESSAGE_BEGIN( MSG_ONE, gmsgPlayMP3, NULL, pClient );
        WRITE_STRING( (char *)Mp3 );
    MESSAGE_END();

    SetUse( StopMp3 );
    SetThink( NULL );

Das passt schon so einigermaßen, auch wenn ich persönlich in diesem Falle ein WRITE_BYTE() bzw. WRITE_SHORT() nehmen würde und mir damit das Gefriemel ersparen könnte.
Bevor du irgendwelche wilden Konstruktionen aufstellst, würde ich erstmal prüfen, ob in "void CTriggerMp3::KeyValue()" der Wert überhaupt gesetzt wird soll heißen stimmt der Key (Groß-/Kleinschreibung)? Ist das Entity in der Map richtig gesetzt? u.s.w. Initialisier m_iMp3 mal mit nem anderen Wert (z.B. '1')und schau, was beim Client ankommt.

--

Der Horizont vieler Menschen ist ein Kreis mit Radius Null - und das nennen sie ihren Standpunkt.

zum Seitenanfang zum Seitenende Profil || Suche
005
08.12.2002, 23:45
DavidR.



Verdammt mein Text ist weg, jetzt nochmal in Kürze:

Danke!

Ist es von Bedeutung, ob ma nun CBaseEntitie, CBaseTrigger oder CPointEntitie nimmt?

Kann mir einer nen C++ Buch empfehlen?

Und Soll ich, wenn alles fertig ist und alles funzt nen Tut über das alles schreiben?

MfG DavidR.

PS: Schon so spät!

Das war jetzt sehr gekürzt, aber es kommt alles rüber, danke nochmal!

PPS: Einfach nur Fragen stellen ist nicht gut.

--

--< Spirit of Half-life


Dieser Beitrag wurde am 08.12.2002 um 23:46 von DavidR. bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
09.12.2002, 00:23
Killing Me Softly



Ist es von Bedeutung, ob ma nun CBaseEntitie, CBaseTrigger oder CPointEntitie nimmt?
[ironie] Nein, ist vollkommen egal. Die verschiedenen Klassen machen die Programmierer nur, um euch Anfänger in den Wahnsinn zu treiben. [/ironie]

Kann mir einer nen C++ Buch empfehlen?
Eine Buchempfehlung hab ich nicht parat. Aber die Tutorials auf http://www.c-plusplus.de sollen recht gut sein.

Und soll ich, wenn alles fertig ist und alles funzt nen Tut über das alles schreiben?
Lass mal gut sein.

--

Der Horizont vieler Menschen ist ein Kreis mit Radius Null - und das nennen sie ihren Standpunkt.


Dieser Beitrag wurde am 09.12.2002 um 00:24 von Killing Me Softly bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
007
09.12.2002, 01:19
LePrau



Mensch helft ihm sonst kommt die Gamestar-Mod garnicht voran. Außer Konzeptern (3 Stück) und ihm als Coder haben sie noch nix! ...

-hrhr-

Sry, das musste ich mal erwähnen >:D

--

voice - Ruhe in Frieden

zum Seitenanfang zum Seitenende Profil || Suche
008
09.12.2002, 15:42
[RMen]OneStone



Naja, die Dümmsten Bauern haben die dicksten Kartoffeln. - Sinn dieser Sache? - Keine!

Also, du solltest dann auch entsprechend atoi nehmen und WRITE_SHORT((unsigned short) m_iMp3).

Achja, nochwas: Vergiss es.

Wieder mal Spam...

*blubb*

(Wer meckert ist der dritte der nach dem zweiten kommen tuen wird machen darf [Infos für ihn sind ja wohl drin {genug}]) - !

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
009
09.12.2002, 15:47
DavidR.



Oh, sorry, ich hab gestern vergessen noch zu erwähnen, dass der Code FUNKTIONIERT (nur groß, um es anzudeuten)!
Mich hat der Gedanke schon 20 Minuten nach dem Runterfahren gequält - bis jetzt! :-)

Ich hab mal m_iMp3 auf "2" gestellt, es wurde dann auch tatsächlich die Datei "2.mp3" abgespielt!
So dann:

m_iMp3 = 2;
char Mp3[2];
usw.

...

Das heißt, dass ich jetzt nurnoch die Übertragung zwischen WC/Hammer "richtig" machen muss - falls das geht... was aber zu bezweifeln ist, ich muss erst nochmal ein Paar Tests laufen lassen, um zu testen, ob der Code:

char Mp3[2];
sprintf(Mp3, "%d", m_iMp3);
edict_t *pClient;
pClient = g_engfuncs.pfnPEntityOfEntIndex( 1 );
MESSAGE_BEGIN( MSG_ONE, gmsgPlayMP3, NULL, pClient );
WRITE_STRING( (char *)Mp3 );
MESSAGE_END();

Einfach nur "zu früh dran ist".

Hm.. trotzdem thx (außer @LePrau *g*)!
Es ist ja nicht so, dass das das absolute supermegageiles-Spiel-Konzept ist (bezieht sich jetzt auf die Gamestar-Mod -> GS Mod ) - wie ich schon erwähnt hab, ich mache es einfach, um ein wenig praktische Erfahrung (en) zu erhalten!

Die Praxis ist entscheidend, nicht die Theorie!

Obwohl ich auch eher ein "Theoretiker" bin :-)
Aber ohne Theorie geht natürlich auch kaum was - ohne Theorie wären alle Erfolge Zufälle!
Naja, ich wollte jetzt eigentlich noch erwähnen, dass das Leben weder zufällig noch vorrausbestimmt ist - wäre beides möglich - obwohl man auch wieder bedenken "sollte", dass wir auch nur von anderen Wesen erschaffen worden sein könnten (Wir coder, mapper usw. erschaffen ja auch eigene Welten, die "Realität" "könnte" deshalb auch nix weiteres als ein sehr komplexes Programm sein)...

Aber das nur nebenbei ;-)

Und nein, ich nehme keine Drogen und bin auch nicht vom Computer abhängig! :-)
Ist ja "nur" Theorie!

*Harem*

Gut!
Ich melde mich später nochmal, ich wollte das nur unbedingt - und so früh wie möglich - loswerden!

Danke!

--

--< Spirit of Half-life

zum Seitenanfang zum Seitenende Profil || Suche
010
10.12.2002, 14:01
DavidR.



Huä?
Ich hab das m_iMp3 jetzt wieder gelöscht, und hab auch gleich an was anderem weitergecodet...
Dabei hab ich garnicht bemerkt, DAS ES FUNZT!

Ich kann nun endlich mp3s per trigger aufrufen lassen!

Hach :-)

Naja, die Dümmsten Bauern haben die dicksten Kartoffeln. - Sinn dieser Sache? - Keine!

Jaja, ich bin aber leider nicht dumm! ;-)

Ok, THX nochmal, der Fehler war wohl doch das mit atof, ich hab jetzt atoi und es funzt... ohne Rockefeller wär ich jetzt noch da wo ich vorher war (bei einem richtigem Code mit falschen Eingaben)

Nochmal der Code, damit´s auch alle wissen:

char Mp3[2]; (sollte man noch höher stellen, ich brauchs erstmal nicht)
sprintf(Mp3, "%d", m_iMp3);

edict_t *pClient;
pClient = g_engfuncs.pfnPEntityOfEntIndex( 1 );

MESSAGE_BEGIN( MSG_ONE, gmsgPlayMP3, NULL, pClient );
WRITE_STRING( (char *)Mp3 );
MESSAGE_END();

Bei m_iMp3 muss dem Tutorial nach (also wenn man´s genauso gebaut hat) nur der Name der mp3 stehen, keine Pfade!

OK, also dann code ich mal weiter (Nebel muss ich noch triggerbar machen)!

MfG DavidR.

--

--< Spirit of Half-life

zum Seitenanfang zum Seitenende Profil || Suche
011
10.12.2002, 14:07
K-Putt



Zitat:

Zitatantwort || Editieren || Löschen || IP

Kann ich nur empfehlen.

--

Rambo Engineer @ Drippy's 2fort - finest TFC 1.5 || Bild Upload || The world's most advanced open source database

zum Seitenanfang zum Seitenende Profil || Suche
012
10.12.2002, 14:46
DavidR.



Nach einem Tag kann man nichtmehr editieren!

Das musste jetzt einfach sein!

--

--< Spirit of Half-life


Dieser Beitrag wurde am 10.12.2002 um 15:03 von DavidR. bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
013
03.01.2003, 22:38
DavidR.



Ich habe rausgefunden, wie man _direkt_ Chars (also Strings) aus Wc/Hammer auslesen kann:

Quellcode:class CTriggerMp3 : public CBaseEntity
{
***
    virtual int        Save( CSave &save );
    virtual int        Restore( CRestore &restore );
    static    TYPEDESCRIPTION m_SaveData[];

[Kommentar]
Das obere sowieso, aber ich dachte es hilf ein paar Noobs :-)
[/Kommentar]

    [b]int m_iMp3;[/b]
};

Quellcode:void CTriggerMp3::KeyValue( KeyValueData *pkvd )
{
    if (FStrEq(pkvd->szKeyName, "mp3"))
    {
        [b]m_iMp3 = ALLOC_STRING(pkvd->szValue);[/b]
        pkvd->fHandled = TRUE;
    }
    else
        CBaseEntity::KeyValue( pkvd );
}

Quellcode:TYPEDESCRIPTION CTriggerMp3::m_SaveData[] =
{
    [b]DEFINE_FIELD( CTriggerMp3, m_iMp3, FIELD_STRING),[/b]
};
IMPLEMENT_SAVERESTORE( CTriggerMp3, CBaseEntity );

Es muss nicht unbedingt FIELD_STRING sein, bei mir hats auch mit FLOAT funktioniert (ist das vielleicht nur ne Info).
Und jetzt der "berühmte" Satz:

So wars mal:
Quellcode:char Mp3[4];
sprintf(Mp3, "%d", m_iMp3);

edict_t *pClient;
pClient = g_engfuncs.pfnPEntityOfEntIndex( 1 );
MESSAGE_BEGIN( MSG_ONE, gmsgPlayMP3, NULL, pClient );
WRITE_STRING( (char *)Mp3 );
MESSAGE_END();

Und so siehts nun aus:

Quellcode:    edict_t *pClient;
    pClient = g_engfuncs.pfnPEntityOfEntIndex( 1 );
    MESSAGE_BEGIN( MSG_ONE, gmsgPlayMP3, NULL, pClient );
        WRITE_STRING( [b](char *)STRING(m_iMp3)[/b] );
    MESSAGE_END();

Das funktioniert bestens, man kann alle möglichen Zeichen, inklusive Leerzeichen verwenden!
Man kann damit z.b. auch diese Datei

",-_+#'!§$%&(()=`´.mp3"

abspielen, es funzt! :-)
Hach, ist das schön!

EDIT:
Ist das normal, dass ich 4mal auf Edit klicken muss, um hier ohne Verbindungsfehler reinzukommen? O_o

--

--< Spirit of Half-life


Dieser Beitrag wurde am 03.01.2003 um 22:45 von DavidR. bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
014
03.01.2003, 22:49
Gott



schön , forensuche ?

--

millirem und bequerel , kleine kinder sterben schnell

Arsch für alles bei War in Europe
www.warineuropemod.com

zum Seitenanfang zum Seitenende Profil || Suche
015
04.01.2003, 01:24
DavidR.



Na hör mal @Gott!
Such mal in der Forumsuche nach ALLOC_STRING - und? was stellst du fest?
Richtig, es gibt keinen Thread zu diesem Thema!

Man kann hier wirklich nichtmehr schreiben, ohne irgendwo angemozt zu werden, dabei habe ich doch nur das bereits geschriebene VERBESSERT!
Ist sowas verboten, oder was soll das?

Manche werden wohl nicht verstehen, warum ich so ausraste, guckt einfach mal auf K-Putts Post weiter oben - ich hätte es schon editiert, wenn ich könnte!

Verdammt, ich will Thewall.de doch RETTEN und nicht durch Spam-Threads den Abgrund runterstürzen!

Um das zu beweisen schaue ich extra nochmal nach allen möglichen Threads, die ich beantworten kann

Punkt

--

--< Spirit of Half-life

zum Seitenanfang zum Seitenende Profil || Suche
016
04.01.2003, 12:05
Rockefeller



Zitat:
DavidR. postete
Quellcode:TYPEDESCRIPTION CTriggerMp3::m_SaveData[] =
{
    [b]DEFINE_FIELD( CTriggerMp3, m_iMp3, FIELD_STRING),[/b]
};
IMPLEMENT_SAVERESTORE( CTriggerMp3, CBaseEntity );

Braucht man übrigens nur für SinglePlayer, da es im MP kein Save/Restore gibt.

--

zum Seitenanfang zum Seitenende Profil || Suche
017
04.01.2003, 13:24
Exec



weist ja nich was er alles macht ... ;)
speicherbares mp-game wäre doch mal was neues inner hl-szene :)
(so wie in sesam1/2)

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche