amxmodx/dlls/dod2/dodx/usermsg.cpp

217 lines
5.2 KiB
C++
Raw Normal View History

2004-07-01 21:57:12 +04:00
/*
* DoDX
* Copyright (c) 2004 Lukasz Wlasinski
*
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* In addition, as a special exception, the author gives permission to
* link the code of this program with the Half-Life Game Engine ("HL
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
* L.L.C ("Valve"). You must obey the GNU General Public License in all
* respects for all of the code used other than the HL Engine and MODs
* from Valve. If you modify this file, you may extend this exception
* to your version of the file, but you are not obligated to do so. If
* you do not wish to do so, delete this exception statement from your
* version.
*
*/
#include "amxxmodule.h"
#include "dodx.h"
void Client_ResetHUD_End(void* mValue){
mPlayer->clearStats = gpGlobals->time + 0.25f;
}
void Client_RoundState(void* mValue){
if ( mPlayer ) return;
int result = *(int*)mValue;
if ( result == 1 ){
for (int i=1;i<=gpGlobals->maxClients;i++){
CPlayer *pPlayer = GET_PLAYER_POINTER_I(i);
if (pPlayer->ingame) {
2004-09-08 22:09:01 +04:00
pPlayer->clearRound = gpGlobals->time + 0.25f;
2004-07-01 21:57:12 +04:00
}
}
}
}
void Client_TeamScore(void* mValue){
static int index;
switch(mState++){
case 0:
index = *(int*)mValue;
break;
case 1:
switch (index){
case 1:
AlliesScore = *(int*)mValue;
break;
case 2:
AxisScore = *(int*)mValue;
break;
}
break;
}
}
void Client_ObjScore(void* mValue){
static CPlayer *pPlayer;
2004-09-08 22:09:01 +04:00
static int score;
2004-07-01 21:57:12 +04:00
switch(mState++){
case 0:
pPlayer = GET_PLAYER_POINTER_I(*(int*)mValue);
break;
case 1:
2004-09-08 22:09:01 +04:00
score = *(int*)mValue;
if ( (pPlayer->lastScore = score - pPlayer->savedScore) && isModuleActive() ){
pPlayer->updateScore(pPlayer->current,pPlayer->lastScore);
pPlayer->sendScore = gpGlobals->time + 0.25f;
2004-07-01 21:57:12 +04:00
}
2004-09-08 22:09:01 +04:00
pPlayer->savedScore = score;
2004-07-01 21:57:12 +04:00
break;
}
}
void Client_CurWeapon(void* mValue){
static int iState;
static int iId;
switch (mState++){
case 0:
iState = *(int*)mValue;
break;
case 1:
if (!iState) break;
iId = *(int*)mValue;
break;
case 2:
if ( !iState || !isModuleActive() )
break;
int iClip = *(int*)mValue;
2004-07-30 19:20:40 +04:00
mPlayer->current = iId;
2004-07-01 21:57:12 +04:00
if ( weaponData[iId].needcheck ){
iId = get_weaponid(mPlayer);
mPlayer->current = iId;
2004-07-01 21:57:12 +04:00
}
2004-07-30 19:20:40 +04:00
2004-07-01 21:57:12 +04:00
if (iClip > -1) {
2004-07-28 21:06:01 +04:00
if ( mPlayer->current == 17 ){
2004-07-01 21:57:12 +04:00
if ( iClip+2 == mPlayer->weapons[iId].clip)
mPlayer->saveShot(iId);
}
else {
if ( iClip+1 == mPlayer->weapons[iId].clip)
mPlayer->saveShot(iId);
}
}
mPlayer->weapons[iId].clip = iClip;
}
}
/*
Nie ma damage event ...
*/
void Client_Health_End(void* mValue){
if ( !isModuleActive() )
return;
edict_t *enemy = mPlayer->pEdict->v.dmg_inflictor;
int damage = (int)mPlayer->pEdict->v.dmg_take;
2004-07-06 01:24:31 +04:00
if ( !mPlayer || !damage || !enemy )
2004-07-01 21:57:12 +04:00
return;
int weapon = 0;
int aim = 0;
mPlayer->pEdict->v.dmg_take = 0.0;
2004-07-06 01:24:31 +04:00
2004-07-01 21:57:12 +04:00
CPlayer* pAttacker = NULL;
if ( enemy->v.flags & (FL_CLIENT | FL_FAKECLIENT) ){
pAttacker = GET_PLAYER_POINTER(enemy);
weapon = pAttacker->current;
if ( weaponData[weapon].needcheck )
weapon = get_weaponid(pAttacker);
aim = pAttacker->aiming;
if ( weaponData[weapon].melee )
pAttacker->saveShot(weapon);
}
else
g_grenades.find( enemy , &pAttacker , weapon );
int TA = 0;
2004-07-06 01:24:31 +04:00
if ( !pAttacker ){
pAttacker = mPlayer;
}
2004-07-15 03:57:21 +04:00
if ( pAttacker->index != mPlayer->index ){
2004-07-06 01:24:31 +04:00
pAttacker->saveHit( mPlayer , weapon , damage, aim );
if ( mPlayer->pEdict->v.team == pAttacker->pEdict->v.team )
TA = 1;
}
2004-07-01 21:57:12 +04:00
#ifdef FORWARD_OLD_SYSTEM
2004-07-01 21:57:12 +04:00
g_damage_info.exec( pAttacker->index, mPlayer->index, damage, weapon, aim, TA );
#else
MF_ExecuteForward( iFDamage,pAttacker->index, mPlayer->index, damage, weapon, aim, TA );
#endif
2004-07-21 15:51:18 +04:00
if ( !mPlayer->IsAlive() ){
pAttacker->saveKill(mPlayer,weapon,( aim == 1 ) ? 1:0 ,TA);
#ifdef FORWARD_OLD_SYSTEM
2004-07-21 15:51:18 +04:00
g_death_info.exec( pAttacker->index, mPlayer->index, weapon, aim, TA );
#else
MF_ExecuteForward( iFDeath,pAttacker->index, mPlayer->index, weapon, aim, TA );
#endif
2004-07-21 15:51:18 +04:00
}
2004-07-01 21:57:12 +04:00
}
2004-07-30 19:20:40 +04:00
void Client_AmmoX(void* mValue){
static int iAmmo;
switch (mState++){
case 0:
iAmmo = *(int*)mValue;
break;
case 1:
if (!mPlayer ) break;
for(int i = 1; i < MAX_WEAPONS ; ++i)
if (iAmmo == weaponData[i].ammoSlot)
mPlayer->weapons[i].ammo = *(int*)mValue;
}
}
void Client_AmmoShort(void* mValue){
static int iAmmo;
switch (mState++){
case 0:
iAmmo = *(int*)mValue;
break;
case 1:
if (!mPlayer ) break;
for(int i = 1; i < MAX_WEAPONS ; ++i)
if (iAmmo == weaponData[i].ammoSlot)
mPlayer->weapons[i].ammo = *(int*)mValue;
}
}