AdminMod.de
https://www.adminmod.de/

bet. bubblemod
https://www.adminmod.de/viewtopic.php?t=9582
Seite 1 von 1

Autor:  Ghost [ 23.09.2005, 19:12 ]
Betreff des Beitrags:  bet. bubblemod

sorry ... ich weiss jetzt echt nicht ob ich das hier posten kann aber ich suche nun schon seit monaten nach einer lösung.

folgendes........

auf meinem server (HLDM) werden double kills angezeigt ... nun möchte ich diese anzeige mit einem sound verbinden.

im source habe ich folgenden eintrag gefunden

in der client.cpp
Code:
void StartFrame( void )
{

	if ( g_pGameRules )
		g_pGameRules->Think();

	// BMOD Begin - Multikills
	CBasePlayer *client = NULL;
	while ( ((client = (CBasePlayer*)UTIL_FindEntityByClassname( client, "player" )) != NULL) 
		&& ( client->IsPlayer() ) 
		)
	{
		if (client->m_iKillsThisFrame > 1 && ( client->m_bIsConnected ) )
		{
			UTIL_LogPrintf( "// \"%s<%i><%s><%s>\" multi-killed %d players.\n",
				STRING( client->pev->netname ),
				GETPLAYERUSERID( client->edict() ),
				GETPLAYERAUTHID( client->edict() ),
				g_engfuncs.pfnInfoKeyValue( g_engfuncs.pfnGetInfoKeyBuffer( client->edict() ), "model" ),
				client->m_iKillsThisFrame
				);

			UTIL_ClientPrintAll( HUD_PRINTTALK, UTIL_VarArgs( "<SERVER> %s got a %d-fer!!\n",
				STRING( client->pev->netname ),
				client->m_iKillsThisFrame
				) );
		}
		client->m_iKillsThisFrame = 0;
	}
	// BMOD End - Multikills

nun möchte ich es so das wenn einer ein zweier kill hat z.b doublekill.wav abgespielt wird und bei einem 3er kill kommt monsterkill.wav.


kann mir jemand den code so anpassen ???


BBIITTÖÖÖÖÖÖÖ *liebguck*

Dateianhänge:
client.cpp [53.62 KiB]
252-mal heruntergeladen

Autor:  [WING] Black Knight [ 23.09.2005, 19:30 ]
Betreff des Beitrags: 

Ich verschieb das mal nach "Server". Hat ja ansich nichts mit Admin Mod zu tun.

Wegen Deines Problems kann ich Dir nicht weiterhelfen, da ich weder mit C++ noch mit der HLSDK vertraut bin.

Autor:  Ghost [ 24.09.2005, 17:52 ]
Betreff des Beitrags: 

keiner da der ahnung davon hat ??? :cry:

Autor:  Rinde [ 25.09.2005, 17:03 ]
Betreff des Beitrags: 

mal sehen.
eiface.h definiert
Code:
void		(*pfnEmitSound)				(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch);
enginecallback.h definiert das makro
Code:
#define EMIT_SOUND_DYN2 (*g_engfuncs.pfnEmitSound)
nützlich sind auch folgende definitionen aus const.h
Code:
// channels
#define CHAN_AUTO			0
#define CHAN_WEAPON			1
#define	CHAN_VOICE			2
#define CHAN_ITEM			3
#define	CHAN_BODY			4
#define CHAN_STREAM			5			// allocate stream channel from the static or dynamic area
#define CHAN_STATIC			6			// allocate channel from the static area 
#define CHAN_NETWORKVOICE_BASE	7		// voice data coming across the network
#define CHAN_NETWORKVOICE_END	500		// network voice data reserves slots (CHAN_NETWORKVOICE_BASE through CHAN_NETWORKVOICE_END).

// attenuation values
#define ATTN_NONE		0
#define	ATTN_NORM		(float)0.8
#define ATTN_IDLE		(float)2
#define ATTN_STATIC		(float)1.25 

// pitch values
#define	PITCH_NORM		100			// non-pitch shifted
#define PITCH_LOW		95			// other values are possible - 0-255, where 255 is very high
#define PITCH_HIGH		120

// volume values
#define VOL_NORM		1.0
ausgehend davon bauen wir uns als erstes eine playsound-funktion:
Code:
inline void UTIL_Playsound(edict_t* pPlayerEdict, const char* sound) {
    EMIT_SOUND_DYN2(pPlayerEdict, CHAN_VOICE, sound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
}
weiterhin brauchen wir eine funktion, die zu jedem spieler den edict-pointer findet:
Code:
edict_t* UTIL_EntityByIndex( int playerIndex ){
	edict_t* pPlayerEdict = NULL;

	if ( playerIndex > 0 && playerIndex <= gpGlobals->maxClients ) {
		pPlayerEdict = INDEXENT( playerIndex );
		if ( !pPlayerEdict || pPlayerEdict->free ) {
			pPlayerEdict = NULL;
		}
	}
	return pPlayerEdict;
}
zuletzt noch:
Code:
void UTIL_PlaysoundAll(const char* sound) {
    edict_t* pPlayerEdict;
    int i;
    for(i = 1; i <= gpGlobals->maxClients; i++) {
        if((pPlayerEdict = UTIL_EntityByIndex(i)) != NULL) {
            UTIL_Playsound(pPlayerEdict, sound);
        }
    }
}
jetzt haben wir eine funktion, die den sound bei allen clients abspielt. nun müssen wir noch entscheiden, wann welcher sound abgespielt werden soll. ich nutze hierzu ein array, bei denen die anzahl der kills als index verwendet wird:
Code:
const char* killsounds[] = {
  NULL,
  NULL,
  "misc/doublekill.wav",
  "misc/multikill.wav",
  "misc/megakill.wav",
  "misc/ultrakill.wav",
  "misc/monsterkill.wav",
  "misc/loudacriskill.wav",
  "misc/holyshit.wav"
};
nun kann man in die StartFrame-Funktion eintragen:
Code:
UTIL_PlaysoundAll(killsounds[min(8, client->m_iKillsThisFrame)]);
weiterhin müssen alle sounds, die verwendet werden sollen, auf den clients "precached" werden.
das geschieht in der Funktion Spawn, die wahrscheinlich von bubblemod schon implementiert ist, und nur erweitert werden muss:
Code:
int Spawn( edict_t*) {
   [...]

   for(int i = 2; i <= 8; i++) {
      PRECACHE_SOUND(killsounds[i]);
   }

   [...]
}
das sollte eigentlich alles sein

Autor:  Ghost [ 25.09.2005, 17:11 ]
Betreff des Beitrags: 

aahhmmmmm cool ....danke dir

aber ich kann damit überhaupt nichts anfangen :cry:

was muss ich jetzt wie und wo rein koppieren damit ich bei einem 2-fer den sound doublekill.wav und bei nem 3-fer den sound monsterkill.wav höhre.


sorry aber ich habe da keine ahnung von :oops:

Autor:  Ghost [ 26.09.2005, 23:10 ]
Betreff des Beitrags: 

hat denn niemand lust das einem n00b zu erklähren ???? :cry: :cry:

Autor:  Ghost [ 22.10.2005, 00:48 ]
Betreff des Beitrags: 

ok ... ich versuchs nochmal :?


kann mir BITTE BITTE jemand das so schreiben das ich n00b das verstehe ?? oder mir die entsprechenden sachen umschreiben und neu compilieren ???


würde mich echt riesig freuen :lol:

Seite 1 von 1 Alle Zeiten sind UTC+01:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/