.| 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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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: 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); 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. 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, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
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 |
|
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 |
|
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, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
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 |
|
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, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
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 |
|
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, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
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 |
|
Profil || Suche |
|
014 27.08.2000, 14:39 Prefect |
:D cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
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 |
|
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 |
|
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 |
|
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 |
|
Profil || Suche |

