How To Add Winamp To Your Hack!
Credits:DAG and OGC Team
Note: I did not make this code i'm just posting it so you can add it as GeneraL said.
add this correctly and you should get 0 errors
First off you need to make a winamp.cpp and .h
paste this in your winamp.cpp
Code:
#include <windows.h>
#include "Winamp.h"
#include "cvar.h"
#include "client.h"
#include "console.h"
#include "interpreter.h"
#include <assert.h>
#define WA_GETTRACKLENGTH 105
#define maxbars 20
char bars[maxbars+5];
//================================================================================
Winamp winamp;
//================================================================================
Winamp::Winamp(void)
{
hwnd=0;
crossfade=1.0f;
paused=0;
playing=1;
}
//================================================================================
void Winamp::setfracvol(void)
{
float f = crossfade;
f = f*f;
int wvol = cvar.wa_vol1 + (DWORD)(f*(cvar.wa_vol2-cvar.wa_vol1));
assert(hwnd);
PostMessage(hwnd,WM_USER,wvol,122); // setvolume
float hlvol = cvar.hl_vol1 + (cvar.hl_vol2-cvar.hl_vol1)*(1.0f-f);
char buf[64]; sprintf(buf,"volume %f",hlvol);
gEngfuncs.pfnClientCmd(buf);
}
//================================================================================
void Winamp::fadein(void)
{
if(crossfade==1.0 || !playing) return;
if(paused) command("pause");//unpause
crossfade += cvar.wa_fadeinspeed;
if(crossfade>1.0f) crossfade = 1.0f;
setfracvol();
}
//================================================================================
void Winamp::fadeout(void)
{
if(crossfade==0.0f)
{
if(!paused)
{
if(!cvar.wa_vol1)
{
command("pause");// pause
command("back" );
}
}
return;
}
crossfade -= cvar.wa_fadeoutspeed;
if(crossfade<0) crossfade = 0;
setfracvol();
}
//================================================================================
void Winamp::frame(void)
{
if(searchForWindowEventCounter.get()) { searchWindow(); }
if(hwnd)
{
int n = fadeEventCounter.get();
if(cvar.wa_autovolume)
{
for(int i=0;i<n;i++)
{
if(cvar.alive_method==1)
{
fadein();
}
else
{
fadeout();
}
}
}
if(titleUpdateEventCounter.get()&&playing) { updateTitle(); }
}
else
{
title.erase();
}
}
//================================================================================
void Winamp::searchWindow()
{
HWND old = hwnd;
hwnd = FindWindow("Winamp v1.x",NULL);
if(old!=hwnd)
{
if(hwnd)
{
if(!old) { gConsole.echo("-]| Winamp Controls Found |[-"); }
else { gConsole.echo("-]| Found Another Winamp Instance |[-"); }
}
else { gConsole.echo("WinAmp window lost." ); }
}
}
//================================================================================
void Winamp::updateTitle()
{
assert(hwnd);
char this_title[2048],*p;
int success = GetWindowText(hwnd,this_title,sizeof(this_title));
if(!success) { title.erase(); return; }
p = this_title+strlen(this_title);//-8;
while (p >= this_title)
{
if (!strnicmp(p,"- Winamp",8)) break;
p--;
}
if (p >= this_title) p--;
while (p>=this_title && *p==' ') p--;
*++p=0;
char* pos = this_title;
while(*pos){ if(*pos<' '||*pos>127){ *pos='-';} ++pos;}
if(title!=this_title && winamp.title.size()) // did the title change?
{
char say[1200];
char* formatA = "#say -|[: Winamp :][: Listening To: %s :]|-"; // has hours say to HL
sprintf(say,formatA,this_title);
if (cvar.wa_saytitle)
{
cmd.exec(say); // send to HL
}
}
title = this_title;
}
//================================================================================
void Winamp::command(const string& subcommand, const string& arg1, const string& arg2, const string& arg3)
{
// hwnd independent:
if(0) {}
else if (subcommand=="1") { cvar.wa_active=1; }
else if (subcommand=="0") { cvar.wa_active=0; }
if(!cvar.wa_active) { gConsole.echo("type \"winamp 1\" first!"); return; }
if(!hwnd) { gConsole.echo("-]| Winamp Needs To Be Running! |[-"); return; }
// hwnd dependent:
#define CHECK_COMMAND(name,number) } else if(subcommand==name) { PostMessage(hwnd,WM_COMMAND,number,0);
if(0){
CHECK_COMMAND("play" ,40045) paused=false; playing=true;
CHECK_COMMAND("pause" ,40046) if(playing) paused=!paused;
CHECK_COMMAND("stop" ,40047) paused=false; playing=false;title.erase();
CHECK_COMMAND("forward",40148)
CHECK_COMMAND("back" ,40144)
CHECK_COMMAND("next" ,40048)
CHECK_COMMAND("prev" ,40044)
CHECK_COMMAND("close" ,40001)
}
long trackpos = PostMessage(hwnd, WM_USER, 0, WA_GETTRACKLENGTH);
long tracklen = PostMessage(hwnd, WM_USER, 1, WA_GETTRACKLENGTH);
if(tracklen){
memset(bars,'=',maxbars+6);
bars[0] = '[';
bars[maxbars+1] = ']';
memset(bars+maxbars+2,0,3);
for(int i = 1; i <= (((trackpos/1000.0f)/tracklen)*maxbars); i++)
bars = '+';
}else{
memset(bars,'x',maxbars+6);
bars[0] = '[';
bars[maxbars+1] = ']';
memset(bars+maxbars+2,0,3);
}
if(0) {}
else if(subcommand=="repeat" ) { PostMessage(hwnd,WM_USER,atoi(arg1.c_str()),253); }
else if(subcommand=="shuffle") { PostMessage(hwnd,WM_USER,atoi(arg1.c_str()),252); }
else if(subcommand=="volume" ) { PostMessage(hwnd,WM_USER,atoi(arg1.c_str()),122); }
}
and add this to winamp.h
Code:
#pragma once
#include <string>
using namespace std;
#include "timehandling.h"
//================================================================================
class Winamp
{
public:
void updateTitle();
void play ();
void frame();
bool playing;
void command(const string& subcommand, const string& arg1="", const string& arg2="", const string& arg3="");
string title;
protected:
HWND hwnd;
// volume stuff
float crossfade; // 0..1
void searchWindow();
void fadein();
void fadeout();
void setfracvol();
void pause();
bool paused;
EventCounter<0.1> fadeEventCounter; // fade one tick up/down every 0.1 seconds
EventCounter<10> searchForWindowEventCounter; // search for winamp window every 10 seconds
EventCounter<2> titleUpdateEventCounter; // update title every 2 seconds
public:
Winamp();
};
extern Winamp winamp;
now in your client.cpp
add this to ur includes
Code:
#include "winamp.h"
find your hudDrawInfoTexts and add this to any part of it.
Code:
if (cvar.wa_title && winamp.title.size())
{
int wa_y = displayCenterY*2-180-54;
ColorEntry* clr=colorList.get(8);
DrawHudString(5,wa_y,0,0,255, winamp.title.c_str() );
}
next in int HUD_Redraw
under
hudDrawInfoTexts();
Code:
if (cvar.wa_active) { winamp.frame (); }
add this any where in client
//===================================================================================
void func_wa_say()
{
char tmp[128];
sprintf(tmp,"say -|[: Winamp :][: Listening To: %s :]|-",winamp.title.c_str());
gEngfuncs.pfnClientCmd(tmp);
}
//===================================================================================
void func_play(){ sndPlaySound(getOgcDirFile(cmd.argC(1)).c_str(), SND_ASYNC); }
//========================================================================================
void func_turn()
{
double degrees = cmd.argF(1);
mainViewAngles[1] += degrees;
if( mainViewAngles[1]>360.0 ) mainViewAngles[1] -= 360.0;
gEngfuncs.SetViewAngles(mainViewAngles);
}
void func_winamp() { winamp.command(cmd.argS(1),cmd.argS(2),cmd.argS(3),cmd.argS(4)); }
void func_user() { gConsole.echo("User: DAG"); }
//===================================================================================
void func_entinfo()
{
int index = cmd.argI(1);
Con_Echo("info:" );
Con_Echo("name=%s pvs=%d alive=%d team=%d", vPlayers[index].entinfo.name, vPlayers[index].getPVS(), vPlayers[index].getAlive(),vPlayers[index].team);
Con_Echo("solid: %d me: alive=%d team=%d",vPlayers[index].getEnt()->curstate.solid,me.alive,me.team);
}
//===================================================================================
next under Init_Command_Interpreter
Add commands
Code:
REGISTER_COMMAND(user )
REGISTER_COMMAND(winamp )
REGISTER_COMMAND(play )
REGISTER_COMMAND(turn )
REGISTER_COMMAND(wa_say )
in your cvar.cpp add
Code:
REGISTER_CVAR_FLOAT( hl_vol1 ,0.2)
REGISTER_CVAR_FLOAT( hl_vol2 ,0.7)
REGISTER_CVAR_FLOAT( wa_fadeinspeed ,0.0)
REGISTER_CVAR_FLOAT( wa_fadeoutspeed ,0.0)
REGISTER_CVAR_FLOAT( wa_vol1 ,0.0)
REGISTER_CVAR_FLOAT( wa_vol2 ,1.0)
REGISTER_CVAR_INT( wa_active ,1)
REGISTER_CVAR_INT( wa_title ,1)
REGISTER_CVAR_INT( wa_saytitle ,0)
REGISTER_CVAR_INT( wa_autovolume ,0)
now in your cvar.h add
Code:
float hl_vol1;
float hl_vol2;
float wa_fadeinspeed;
float wa_fadeoutspeed;
float wa_vol1;
float wa_vol2;
int wa_active;
int wa_title;
int wa_saytitle;
int wa_autovolume;
Now Finally
add this to your menu
" " " Winamp " {
" " "> Play" "winamp play"
" " "[] Stop" "winamp stop"
" " "|| Pause" "winamp pause"
" " ">> Fast Forward" "winamp forward"
" " "<< Rewind" "winamp back"
" " "|> Next" "winamp next"
" " "<| Previous" "winamp prev"
" " "|X| Close" "winamp close"
" " "Draw Title" "wa_title change"
" " "Say Title Now" "wa_say"
" " "Say Title On Next" "wa_saytitle 1"
" " "Volume" {
" " "Volume: Automatic" "wa_autovolume 1;"
" " "Volume: ********" "wa_autovolume 0;winamp volume 255;"
" " "Volume: *******" "wa_autovolume 0;winamp volume 224;"
" " "Volume: ******" "wa_autovolume 0;winamp volume 192;"
" " "Volume: *****" "wa_autovolume 0;winamp volume 160;"
" " "Volume: ****" "wa_autovolume 0;winamp volume 128;"
" " "Volume: ***" "wa_autovolume 0;winamp volume 96;"
" " "Volume: **" "wa_autovolume 0;winamp volume 64;"
" " "Volume: *" "wa_autovolume 0;winamp volume 32;"
}