Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
21.08.2000, 22:07
xami



Wie zeichnet man unter HL eine einfache Linie, die von der Waffe (pev->origin?) ausgeht und erst weit weg, oder gar nicht aufhört? Mit UTIL_Traceline??? Ich hab auch schon bei der Tripmine nachgeschaut, da find ich zwar was, aber dat klappt nischt...

Help!

--

da schau an
Letzter Beitrag: 27.05.2001, 15:28 Uhr

zum Seitenanfang zum Seitenende Profil || Suche
001
21.08.2000, 23:33
Masterstroke



...soll es eine sichtbare oder unsichtbare Linie sein?? Unsichtbra, um Pointer auf Entitys zu bekommen geht UTIL_TraceLine, sichtbar geht das anders....

--

Masterstroke
resourcecode.de

zum Seitenanfang zum Seitenende Profil || Suche
002
22.08.2000, 14:04
xami



Oh, das hab ich wohl vergessen zu sagen. Es soll eine SICHTBARE Lineie seien.

--

da schau an
Letzter Beitrag: 27.05.2001, 15:28 Uhr

zum Seitenanfang zum Seitenende Profil || Suche
003
22.08.2000, 14:35
TheTinySteini



Da empfiehlt sich ein CBeam. Du musst erst eine unsichtbare Linie ziehen (mit Traceline), die von der Waffe aus (oder vom Spieler - fast egal) geradeaus weggeht. Du musst noch einstellen, dass die Linie nicht an Entitys stoppt, aber an Wänden. Dann erhältst du den Endpunkt dieser Linie. Und zwischen der Waffenspitze und der Linie erstellst du dann den Beam (wie etwa in der Tripmine).

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
004
22.08.2000, 21:52
xami



Ein paar Codezeilen wären nett als Beispiel. Ich weiß zwar wie's geht, aber nicht wie man das schreiben muss. (ich weiß, klingt dumm!)

Vor allem wie man den Beam erstellt.

Vielen Dank

xami

--

da schau an
Letzter Beitrag: 27.05.2001, 15:28 Uhr

zum Seitenanfang zum Seitenende Profil || Suche
005
22.08.2000, 23:06
Prefect



Auf deine Frage geh ich im Detail mal später ein.. jetzt will ich mir erst mal die Zeit nehmen (ich und Zeit?), die Sache "Linien" etwas ausführlicher darzulegen. Ich habe übrigens nichts dagegen, wenn TTT/Masterstroke das zu nem Tutorial (oder Referenz) machen würde *g*

1. Eine Linie im HUD

Für eine Linie im HUD (ähnlich wie zwischen der Lebenspunkte und Armor-Anzeige) ist die Funktion FillRGBA() auf der Clientseite zuständig. Du mußt dazu im entsprechenden HUD-Element (wie CHudHealth, CHudAmmo) in der Draw()-Funktion eine einfache Zeile einfügen:

FillRGBA(x, y, width, height, r, g, b, a);

(a ist der Alpha-Wert von 0-255, 0 ist komplett transparent)

2. Eine temporäre Linie in der Welt

D.h. eine Linie die für kurze Zeit zwei Koordinaten im eigentlich simulierten Raums verbindet (wobei die Koordinaten durchaus auch Entities sein können). Für diesen Zweck eignen sich am besten TENTs (Temporary ENTities), also eine Art Entities, die, wie der Name schon sagt, nur temporär existieren. Hier gibt's eine sehr große Auswahl an Möglichkeiten, und das Beste ist eigentlich, wenn du einfach in die common/const.h schaust und dir eine passende aussuchst. Ein Beispiel hier trotzdem, es muß/ss natürlich entsprechend angepaßt werden.

Ich verwende in dem Beispiel TE_LIGHTNING, das wie folgt in der common/const.h definiert ist:
#define TE_LIGHTNING 7 // TE_BEAMPOINTS with simplified parameters
// coord, coord, coord (start)
// coord, coord, coord (end)
// byte (life in 0.1's)
// byte (width in 0.1's)
// byte (amplitude in 0.01's)
// short (sprite model index)

Das Meiste von dem Obigen sollte leicht verständlich sein, abgesehen vielleicht vom Sprite Model Index. Um den zu kriegen erstellst du am Besten ein neue globale Variable, z.B.

int g_iYourSpriteIndex = 0;

In einer der Precache()-Funktionen (bei ner Waffe in der Precache()-Funktion der Waffe) baust du dann sowas in der Art ein:

g_iYourSpriteIndex = PRECACHE_SPRITE("sprites/spritename.spr");

Jetzt aber zum eigentlichen Code:

Vector vecStart, vecEnd;

// Hier kommt Code rein um vecStart und vecEnd irgendwelchen sinnvollen Werten zuzuweisen

MESSAGE_BEGIN(MSG_PVS, SVC_TEMPENTITY, vecStart);
WRITE_BYTE(TE_LIGHTNING);
WRITE_COORD(vecStart.x);
WRITE_COORD(vecStart.y);
WRITE_COORD(vecStart.z);
WRITE_COORD(vecEnd.x);
WRITE_COORD(vecEnd.y);
WRITE_COORD(vecEnd.z);
WRITE_BYTE(10); // der beam besteht 1 sekunde lang
WRITE_BYTE(10); // ist eine Einheit dick
WRITE_BYTE(0); // und sollte eigentlich ganz gerade sein
WRITE_SHORT(g_iYourSpriteIndex); // damit die Engine weiß, was sie für ein Sprite verwenden soll
MESSAGE_END();

So.. und was heißt das jetzt alles?

MESSAGE_BEGIN: eindeutig die Erklärung, daß jetzt eine Message (Botschaft vom Server an den Client :P) anfängt.

MSG_PVS: Bedeutet, dass die Message an alle Clients geschickt werden soll, die sich im PVS um den "Ursprung" des Event befinden. Der Ursprung des Events wird im Dritten Parameter an MESSAGE_BEGIN definiert. PVS steht für Potentially Visible Set, und ist die Ansammlung allen, was laut Engine sichtbar sein _könnte_, oder mit anderen Worten alles, was die Engine versucht darzustellen (Hallo Mapper :D).

SVC_TEMPENTITY: Der zweite Parameter gibt den Typ der Message an, in diesem Fall eine Tempentity.

Danach kommt das erste Byte der Message, bei Tempentities immer die ID der Entity.

Danach folgen die TENT-Parameter, in der gleichen Reihenfolge und Typ wie sie in const.h beschrieben wurden.

3. Eine fortdauernde Linie in der Welt

Wenn du eine Linie in der Welt haben willst, die du auch noch hinterher verändern willst (Startpunkte, etc...) ist wie TTT gesagt hat, ein CBeam höchst empfehlenswert. Leider hab ich damit quasi keine Erfahrung, und kann, wenn du's für eine Waffe verwenden willst, nur auf den äußerst abschreckenden Code der Egon verweisen...

4. Linien in der Welt auf der Clientseite

Ja, auch _das_ ist möglich. Eröffnet natürlich ganz neue Möglichkeiten... allerdings will ich hier nicht verheimlichen, dass ich nicht besonders heiß darauf bin, den Egoneffekt auf die Clientseite zu bringen... allen die sich daran versuchen kann ich nur viel Glück wünschen :)

---

Um auf dein spezifisches Problem einzugehen: Das kommt drauf an, was für eine Linie du haben willst. Sollte sie so ähnlich sein wie bei der Egon, bleibt mir wie gesagt nichts anderes übrig als auf selbige zu verweisen...

Wenn es mehr ein Effekt wie bei der Gauss sein soll, kommen eigentlich nur TENTs in Frage. Entweder ein TE_LIGHTING, oder ein TE_BEAMENTPOINT. Der Vorteil beim TE_BEAMENTPOINT ist, dass einer der Endpunkte eine Entity ist, im Fall einer Waffe wäre das netürlich der Spieler. Noch vorteilhafter ist, daß du sogar einen der Attachements als Endpunkt verwenden kannst, indem du statt den Entindex einfach nur als WRITE_SHORT(entindex()); anzugeben WRITE_SHORT((attachmentid << 12) | m_pPlayer->entindex()); verwendest. Damit kannst du verhindern, daß der Beam von der Waffe des Spielers anstatt aus dem Bauch herauskommt.
Die Egon verwendet meines Wissens diesen Trick. Du kannst den Trick natürlich auch für TE_LIGHTNING verwenden, es gibt nämlich die Funktion GetAttachment() oder so ähnlich, die die Koordinaten eines Attachmentpunkts zurückgibt (in CBaseAnimating nachschauen!).

Ich bin allerdings sehr geneigt dazu zu sagen (in Betracht der doch recht erheblichen Größe der TENTs) ein neues Event vorzuschlagen und den Beam dann auf der Clientseite zu implementieren. Das wiederum würde allerdings bedeuten, daß du den Studio Model-Code aus der animating.cpp vom Server auf den Client portieren mußt (vorausgesetzt, du willst Attachmentpoints verwenden), und dann wirds langsam aufwendig...

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
006
23.08.2000, 12:05
xami



Vielen Dank erstmal für die lange Antwort. Ich werd's gleich mal ausprobieren was Prefect geschrieben hatt. Zu den Eventfiles, die im Valveordner sehen bei mir alle gleich aus d.h. haben alle den gleichen Inhalt.

Isch des Absischt???

--

da schau an
Letzter Beitrag: 27.05.2001, 15:28 Uhr

zum Seitenanfang zum Seitenende Profil || Suche
007
23.08.2000, 19:32
TheTinySteini



Mehr oder weniger ja. Soweit ich weiß, sind die bloß Platzhalter. Es sollten wohl welche existieren, damit man die Client-Side-Effekte abspielen kann (richtig, Prefect?), aber sonst kann da auch nix drinstehen. Eigentlich sind die Event-Files dafür da, wenn jemand den riesen Aufwand auf sich nehmen will und eine Skriptsprache implementieren will. Dann könnte man ohne ein rekompilieren des Codes die Waffeneffekte ändern. Aber Achtung: Cheat-Gefahr und scheiß viel Arbeit!!!

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
008
23.08.2000, 19:35
Prefect



Genau.. Valve hatte vor ein Scriptingsystem für die .sc-Dateien zu erstellen (SCript), hat das dann aber (wohl aus Zeitgründen) nicht gemacht (steht glaub ich sogar irgendwo im Code drin). Der Inhalt hat also im Grunde gar nix zu bedeuten (bei CS steht einfach Hi! :+) oder so drin :D).

Und eigentlich gibt es auch keinen Grund dafür, denn wie TinySteini schon gesagt hat: wahnsinnig viel Arbeit, und ein idealer Ansatzpunkt für Cheater...

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
009
23.08.2000, 20:21
xami



Aber soviel ich weiß steht (anstelle des Strahlserzeugens) im Code der Gauss, dass der ein Eventfile abspielen soll, was ja aber dann sinnlos wäre. Oder irre ich mich da???

--

da schau an
Letzter Beitrag: 27.05.2001, 15:28 Uhr

zum Seitenanfang zum Seitenende Profil || Suche
010
25.08.2000, 16:44
Prefect



Ja... da wird dann wohl die Option 4) verwendet.. ein Event an den Client schicken und die eigentliche Tempentity auf dem Client erzeugen. Da kannst du dir natürlich auch ein Stück abschneiden, allerdings ist das doch einiges komplizierter.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
011
25.08.2000, 21:05
xami



Ja, aber wenn der den Strahl angeblich in der Eventfile erzeugen soll, die Eventfile jedoch nur irgendsoein Glock Zeug enthält, wo entsteht dann der Strahl?

--

da schau an
Letzter Beitrag: 27.05.2001, 15:28 Uhr

zum Seitenanfang zum Seitenende Profil || Suche
012
26.08.2000, 15:39
Prefect



Der Code um die Linie zu erzeugen steht nicht in der .sc-Datei (ich dachte wir hätten das geklärt). Schau mal in die Datei ev_hldm.cpp, da wirst du diverse Funktionen finden, wie z.B. EV_FireGlock() oder so ähnlich, in denen steht der eigentlich interessante Code.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
013
27.08.2000, 12:34
xami



ohh, ähh, nun ja, ähhh, sieht so aus als wäre ich etwas vergesslich. Tschuldigung.

--

da schau an
Letzter Beitrag: 27.05.2001, 15:28 Uhr

zum Seitenanfang zum Seitenende Profil || Suche
014
27.08.2000, 14:39
Prefect



:D

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
015
27.08.2000, 19:13
xami



Ja, ja, hack nur auf dem Newbie rum... *schnief* Doch meine Rache wird furchtbar sein!!!!! Muahahaha... Oh, wo wir gerade bei rache sind:

@DMA147: Nein, ich mach nichts "Falsches" als Rache (siehe eMail !!VORSICHT!!) =)

--

da schau an
Letzter Beitrag: 27.05.2001, 15:28 Uhr

zum Seitenanfang zum Seitenende Profil || Suche
016
27.08.2000, 19:13
xami



Ja, ja, hack nur auf dem Newbie rum... *schnief* Doch meine Rache wird furchtbar sein!!!!! Muahahaha... Oh, wo wir gerade bei rache sind:

@DMA147: Nein, ich mach nichts "Falsches" als Rache (siehe eMail !!VORSICHT!!) =)

--

da schau an
Letzter Beitrag: 27.05.2001, 15:28 Uhr

zum Seitenanfang zum Seitenende Profil || Suche
017
27.08.2000, 19:18
xami



Mist, falsche Taste! Dämliche Maus! Jetzt wird mein Zorn nur noch größer!!!! Hahahahaha!!! Stirb, du billige Logitech Maus!!!! Sieg, der Bösewicht ist tot :)

--

da schau an
Letzter Beitrag: 27.05.2001, 15:28 Uhr

zum Seitenanfang zum Seitenende Profil || Suche
018
29.08.2000, 09:55
xami



Tja, das hat unser lieber Prefect davon dass er auf mir rumgehackt hat. Jetzt muss er nach Irland, Muahahahaha.

xami

P.S. Welches ist die beste derzeit erhältliche Maus, Geld spielt keine Rolle?

--

da schau an
Letzter Beitrag: 27.05.2001, 15:28 Uhr

zum Seitenanfang zum Seitenende Profil || Suche