Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
04.10.2004, 02:54
Karigos



Hallo,

ich habe nochmal eine Frage...

Und zwar habe ich das Problem, dass ich gerne in meinem Mod Serverseitig prüfen möchte, ob Spieler X Spieler Y sieht... das habe ich versucht indem ich vom Origin von Spieler X + absmax/2 bis zum Origin von Spieler 2 +absmax/2 ein traceline gemacht habe... ich habe aber das gefühl, dass so kein entity treffer in meinem Trace Result ausgegeben wird...

Könnt ihr mir helfen hin zu bekommen, das ich ein TraceLine entwerfen kann, was jeden Spieler auf dem Server abfragt ob ich ihn sehen kann ? Danke Euch !

--

zum Seitenanfang zum Seitenende Profil || Suche
001
04.10.2004, 07:00
Onkel Dittmeyer



FIND_CLIENT_IN_PVS(edict) als Iterator durchgehen bis wieder NULL zurückgegeben wird. Dürfte die schnellste Methode sein.

--

zum Seitenanfang zum Seitenende Profil || Suche
002
04.10.2004, 08:53
Karigos



Danke dir ! Aber wie genau muss ich das den benutzen ? Hab mir das gerade mal angesehen aber so recht verstehen tuhe ich es nicht. Und leider finde ich auch kein Projekt, der die Funktion benutzt !

Währe dir sehr dankbahr für ein kleines Beispiel!

DANKE SOWEIT SCHON !

--

zum Seitenanfang zum Seitenende Profil || Suche
003
04.10.2004, 09:53
TheTinySteini



Wo bei das Potentially Visible Set potentiell ungenau ist =p Sonst würden ja auch Wallhacks und Co nicht funktionieren/funktioniert haben... Also wenn wirklich sichergestellt sein soll, dass man den Spieler sieht, und er nicht nur in der Nähe ist, dann Traceline (und eventuell viewangles/FOV mit einbeziehen, wenn jemand hinter/neben einem nicht als sichtbar gelten soll, was oft Sinn macht...). Entity Treffer musst du ja nicht abfragen... trace einfach wirklich genau von deiner Position zu der errechneten Position des anderen Spielers. Wenn dann tr.fraction < 1.0f, war was im Weg.

--

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

zum Seitenanfang zum Seitenende Profil || Suche
004
05.10.2004, 06:47
Karigos



Ja so hatte ich das auch gemacht... der nachteil daran ist, das ich als Spieler den Kopf des gegners sehe und ihm ein Headshot verpassen kann wobei mein mod aber die andere Person noch lange nicht gesehen hat....

Als Lösung müste ich von meinem Kopf zu seinem, von meinem kopf zu seinem bauch, zu seinen füssen, von meinem bauch zu seinem kopf, zu seinem bauch und seinen füssen und so weiter tracen... und das würde wahnsinng ressourcen fressen...

Deswegen will ich jetz mal FIND_CLIENT_IN_PVS(edict) ausprobieren,
weiss leider nur noch nicht, wie ich es richtig verwende !

Danke euch jetz schonmal ! Hoffe mir kann noch jemand FIND_CLIENT_IN_PVS(edict) erklären !

--

zum Seitenanfang zum Seitenende Profil || Suche
005
11.10.2004, 04:21
Karigos



Keiner eine Idee ?

--

zum Seitenanfang zum Seitenende Profil || Suche
006
11.10.2004, 21:49
Bufferoverflow



Quellcode:edict_t *pent = UTIL_EntitiesInPVS( pLevelList[i].pentLandmark );
// Build a list of valid entities in this linked list (we're going to use pent->v.chain again)
while ( !FNullEnt( pent ) )
{
    CBaseEntity *pEntity = CBaseEntity::Instance(pent);
    if ( pEntity )
    {
        // Tu was....
    }
    pent = pent->v.chain;
}

--

zum Seitenanfang zum Seitenende Profil || Suche
007
19.10.2004, 17:48
Karigos



Hallo !

Danke für das Beispiel !

Nun hätte ich nur noch 2 - 3 Fragen dazu :)

1. Was muss an UTIL_EntitiesInPVS übergebenwerden und ist es identisch zu g_engfuncs.pfnFindClientInPVS ?
2. Woher bekommt das While das jeweils nächste sichtbahre Ent ? Wird es im v.chain so durchgelingt, dass wenn ich 10 Spieler habe, der erste sichtbahre Spieler das Ent in v.chain enthält, der von Spieler 1 auch gesehen werden kann, oder ist es dann der nächste sichtbahre Spieler von der position von Spieler 2 aus ? Ich hoffe doch von Spieler 1 aus oder ?

VIELEN DANK SOWEIT FÜR EURE ERSTKLASSIGE HILFE !!!!!

--

zum Seitenanfang zum Seitenende Profil || Suche
008
20.10.2004, 13:23
oxff



edict_t.v.chain ist eine simple Implementation einer Linked List.

--

mwcollect - mein Projekt | oxlog - mein blog | happyhardcore.com Stream - gute Musik

zum Seitenanfang zum Seitenende Profil || Suche
009
20.10.2004, 13:39
Karigos



Jo das mein ich doch *g*
Hab trotzdem noch 2 Fragen :)

1. Was muss an UTIL_EntitiesInPVS übergebenwerden und ist es identisch zu g_engfuncs.pfnFindClientInPVS ?
2. Was muss ich an diese Funktion übergeben ?

Danke dir 0xFF !

--

zum Seitenanfang zum Seitenende Profil || Suche
010
20.10.2004, 14:50
oxff



Es muss ein edict_t * übergeben werden, der ein Entity repräsentiert, in dessen Umgebung gesucht werden soll. Wenn du einfach eine Bestimmte Position durch einen Vektor oder ähnliches beschrieben betrachten willst, so musst du ein 'nutzloses Entity' (z.B. ein info_null) an der Stelle erstellen (sinnvollerweise löschst du es anschliessend auch).

edit: Nur zur Ergänzung, ein PVS-Check ist hier nicht das, was du wohl genau suchst (höchstens als Vor-Optimierung). Auch ein Traceline reicht hier nicht aus, wobei das wohl noch wesentlich näher an dem liegt, was du Suchst. Du müsstest entweder über irgendwelche Draw-Buffer gehen (schwierig auf dem Server, du müsstest tatsächlich einen software Renderer implementieren, der 'nach /dev/null rendert') oder dich mit ein wenig Ungenauigkeit zufrieden geben.

--

mwcollect - mein Projekt | oxlog - mein blog | happyhardcore.com Stream - gute Musik


Dieser Beitrag wurde am 20.10.2004 um 15:01 von 0xFF bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
011
20.10.2004, 15:39
Karigos



Hallo,

ein wenig ungenauigkeit ist ok ! Das kann man ja evtl später noch nacharbeiten ! Ich müste es nur ausprobieren ob es meinem Zweck entspricht ! Vielen Dank soweit nochmal !

--

zum Seitenanfang zum Seitenende Profil || Suche
012
25.10.2004, 02:04
Karigos



Und nu bin ich wieder da mit meinem Problem... und zwar mein Code:

Quellcode:edict_t *pent = g_engfuncs.pfnEntitiesInPVS( host );

while ( !FNullEnt( pent ) )
{
SERVER_COMMAND( UTIL_VarArgs( "say %s sieht %s\n", STRING( host->v.netname ), STRING( pent->v.netname ) ) );

pent = pent->v.chain;
}
Das Problem daran ist, dass er mir einfach JEDEN spieler ausgibt... obwohl ich diese Spieler garnicht sehen kann, weil z.b. eine Wand dazwischen ist.

Mache ich etwas falsch ?

DANKE !

--

zum Seitenanfang zum Seitenende Profil || Suche
013
25.10.2004, 16:03
oxff



Das hängt von deiner Map ab und liegt in der Natur vom PVS. Im PVS sind auch alle Spieler, die du mittels eine Wallhack sehen können würdest. (Wir haben dich ja gewarnt!)

--

mwcollect - mein Projekt | oxlog - mein blog | happyhardcore.com Stream - gute Musik

zum Seitenanfang zum Seitenende Profil || Suche
014
25.10.2004, 16:17
Karigos



Also müsste ich nun wenn ich einen Spieler im PVS ermittel, noch überprüfen per TraceLine z.b. ob ich den Spieler wirklich sehen kann ?

--

zum Seitenanfang zum Seitenende Profil || Suche
015
25.10.2004, 17:13
oxff



Nein, das hat hier nie einer behauptet! NIEMALS! ... Natürlich. -.-

[edit] Eventuell liest du den Thread nochmal ganz durch. [/edit]

--

mwcollect - mein Projekt | oxlog - mein blog | happyhardcore.com Stream - gute Musik


Dieser Beitrag wurde am 25.10.2004 um 17:14 von 0xFF bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche