Files
HL2Overcharged/game/server/mapadd.cpp
2025-05-21 21:20:08 +03:00

2496 lines
85 KiB
C++

#include "cbase.h"
#include "mapadd.h"
#include "filesystem.h"
#include "gameweaponmanager.h"
#include "player.h"
#include "ai_basenpc.h"
#include "basehlcombatweapon.h"
//#include "weapon_custom.h"
#include "engine/IEngineSound.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
// To enable me open gameinterface.cpp in method levelinit enable LevelInit_ParseAllEntities and dont forget do discomment instant_trig
void CC_CallLabel(const CCommand &args)
{
CMapAdd *pMapadd = GetMapAddEntity();
char szMapadd[128];
Q_snprintf(szMapadd, sizeof(szMapadd), "mapadd/%s.txt", gpGlobals->mapname);
if (!pMapadd)
{
pMapadd = CreateMapAddEntity();
pMapadd->RunLabel(szMapadd, args[1]);
}
else
{
pMapadd->RunLabel(szMapadd, args[1]);// pMapadd->RunLabel(szMapadd, "Init");//
}
}
static ConCommand mapadd_runlabel("mapadd_runlabel", CC_CallLabel, "Run a Mapadd label. Useful for testing.\n");
static CMapAdd *g_MapAddEntity = NULL;
LINK_ENTITY_TO_CLASS(mapadd, CMapAdd);
CMapAdd* GetMapAddEntity()
{
if (g_MapAddEntity != NULL/* && !g_MapAddEntity->IsMarkedForDeletion()*/)
{
/*g_MapAddEntity->SetEFlags(EFL_KILLME);
UTIL_Remove(g_MapAddEntity);*/
//delete g_MapAddEntity;
//g_MapAddEntity = NULL;
}
// if(!g_MapAddEntity)
// return CreateMapAddEntity();
return g_MapAddEntity;
}
CMapAdd* CreateMapAddEntity()
{
return dynamic_cast<CMapAdd*>((CBaseEntity*)CBaseEntity::Create("mapadd", Vector(0, 0, 0), QAngle(0, 0, 0)));
}
void CMapAdd::Precache(void)
{
g_MapAddEntity = this;
}
void CMapAdd::Destroy()
{
/*if (g_MapAddEntity)
UTIL_Remove(g_MapAddEntity);*/
//UTIL_Remove(this);
//delete this;
}
bool CMapAdd::RunLabelSun(KeyValues *keyvalues)//(const char *mapaddMap, const char *szLabel)
{
DevMsg("RunLabelSun\n");
/*if (AllocPooledString(mapaddMap) == AllocPooledString("") || !mapaddMap || !szLabel || AllocPooledString(szLabel) == AllocPooledString(""))//Update
{
DevMsg("MAPADD FAILED TO LOAD");//Update
return false;
}
KeyValues *pMapAdd2 = new KeyValues("entities");
if (pMapAdd2->LoadFromFile(filesystem, mapaddMap, "MOD"))*/
{
//DevMsg("LoadFromFile %s \n", mapaddMap);
KeyValues *pMapAddEnt = keyvalues;
if (pMapAddEnt)
{
DevMsg("pMapAddEnt->GetName() %s \n", pMapAddEnt->GetName());
//KeyValues *pMapAddEnt = pMapAdd2->FindKey("env_sun");//pMapAdd2->GetFirstTrueSubKey();
while (pMapAddEnt && !HandleSMODEntityName(pMapAddEnt->GetName()))
{
/*if (AllocPooledString(pMapAddEnt->GetName()) != AllocPooledString("event") && !HandlePlayerEntity(pMapAddEnt, false)
&& !HandleRemoveEnitity(pMapAddEnt)
&& !HandleSMODEntity(pMapAddEnt)
&& !HandleSpecialEnitity(pMapAddEnt)
&& !HandleWeaponManagerEnitity(pMapAddEnt))*///!HandleSMODEntityName(szLabel))
{
Vector SpawnVector = Vector(0, 0, 0);
QAngle SpawnAngle = QAngle(0, 0, 0);
KeyValues *pEntKeyOrig = pMapAddEnt->FindKey("origin");
KeyValues *pEntKeyAng = pMapAddEnt->FindKey("angle");
KeyValues *pEntKeyX = pMapAddEnt->FindKey("x");
KeyValues *pEntKeyY = pMapAddEnt->FindKey("y");
KeyValues *pEntKeyZ = pMapAddEnt->FindKey("z");
KeyValues *pEntKeyRoll = pMapAddEnt->FindKey("roll");
KeyValues *pEntKeyYaw = pMapAddEnt->FindKey("yaw");
KeyValues *pEntKeyPitch = pMapAddEnt->FindKey("pitch");
if (pEntKeyOrig)
{
const char *position = pMapAddEnt->GetString("origin", "0 0 0");
UTIL_StringToVector(SpawnVector.Base(), position);
}
if (pEntKeyAng)
{
float tmp[2];
const char *angle = pMapAddEnt->GetString("angle", "0 0 0");
UTIL_StringToFloatArray(tmp, 2, angle);
SpawnAngle[PITCH] = tmp[2];
SpawnAngle[YAW] = tmp[1];
SpawnAngle[ROLL] = tmp[0];
}
if (pEntKeyX && pEntKeyY && pEntKeyZ && pEntKeyRoll && pEntKeyYaw && pEntKeyPitch)
{
SpawnVector.x = pMapAddEnt->GetFloat("x", SpawnVector.x);
SpawnVector.y = pMapAddEnt->GetFloat("y", SpawnVector.y);
SpawnVector.z = pMapAddEnt->GetFloat("z", SpawnVector.z);
SpawnAngle[PITCH] = pMapAddEnt->GetFloat("pitch", SpawnAngle[PITCH]);
SpawnAngle[YAW] = pMapAddEnt->GetFloat("yaw", SpawnAngle[YAW]);
SpawnAngle[ROLL] = pMapAddEnt->GetFloat("roll", SpawnAngle[ROLL]);
}
CBaseEntity *createEnt = CBaseEntity::CreateNoSpawnInstance(pMapAddEnt->GetName(), SpawnVector, SpawnAngle);
KeyValues *pEntKeyLongRange = pMapAddEnt->FindKey("longrange");
KeyValues *pEntKeyFreeze = pMapAddEnt->FindKey("freeze");
KeyValues *pEntKeyVel = pMapAddEnt->FindKey("velocity");
KeyValues *pEntKeyValues = pMapAddEnt->FindKey("KeyValues");
KeyValues *pEntFlags = pMapAddEnt->FindKey("Flags");
if (createEnt)
{
if (pEntKeyLongRange)
createEnt->AddSpawnFlags(SF_NPC_LONG_RANGE);
if (pEntKeyValues)
{
DevMsg("KeyValue for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntKeyValuesAdd = pEntKeyValues->GetFirstValue();
while (pEntKeyValuesAdd && createEnt)
{
if (AllocPooledString(pEntKeyValuesAdd->GetName()) == AllocPooledString("model"))
{
PrecacheModel(pEntKeyValuesAdd->GetString(""));
createEnt->SetModel(pEntKeyValuesAdd->GetString(""));
}
else
{
createEnt->KeyValue(pEntKeyValuesAdd->GetName(), pEntKeyValuesAdd->GetString(""));
}
pEntKeyValuesAdd = pEntKeyValuesAdd->GetNextValue();
}
}
if (pEntFlags)
{
DevMsg("Flag for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntFlagsAdd = pEntFlags->GetFirstValue();
while (pEntFlagsAdd && createEnt)
{
createEnt->AddSpawnFlags(pEntFlagsAdd->GetInt());
pEntFlagsAdd = pEntFlagsAdd->GetNextValue();
}
}
DispatchSpawn(createEnt); //I derped
}
if (createEnt)
{
if (pEntKeyFreeze)
{
createEnt->SetMoveType(MOVETYPE_NONE);
createEnt->SetSolid(SOLID_VPHYSICS);
createEnt->VPhysicsInitStatic();
}
if (pEntKeyVel)
{
Vector VelVector = Vector(0, 0, 0);
const char *vel = pMapAddEnt->GetString("velocity", "0 0 0");
UTIL_StringToVector(VelVector.Base(), vel);
createEnt->ApplyLocalVelocityImpulse(VelVector);
}
}
//createEnt->Activate();
}
pMapAddEnt = pMapAddEnt->GetNextTrueSubKey(); //Got to keep this!
}
}
}
//pMapAdd2->deleteThis();
Destroy();
return true;
}
bool CMapAdd::RunLabel(const char *mapaddMap, const char *szLabel)
{
/*KeyValues Error: RecursiveLoadFromBuffer: got EOF instead of keyname in file mapadd/d1_town_01.txt
MapAdd, (*Init*), (*npc_zombie_torso*), (*KeyValues*),
M*/
if (AllocPooledString(mapaddMap) == AllocPooledString("") || !mapaddMap || !szLabel || AllocPooledString(szLabel) == AllocPooledString(""))//Update
{
DevMsg("MAPADD FAILED TO LOAD");//Update
return false;
}
//Failed to load!
//FileHandle_t fh = filesystem->Open(szMapadd,"r","MOD");
// Open the mapadd data file, and abort if we can't
KeyValues *pMapAdd2 = new KeyValues("entities");
if (pMapAdd2->LoadFromFile(filesystem, mapaddMap, "MOD"))
{
//KeyValues *pMapAdd2 = pMapAdd->FindKey("Init");
if (pMapAdd2)
{
KeyValues *pMapAddEnt = pMapAdd2->GetFirstTrueSubKey();
while (pMapAddEnt && !HandleSMODEntityName(pMapAddEnt->GetName()))
{
DevMsg("while pMapAddEnt %s \n", pMapAddEnt->GetName());
HandleSMODEntityName(szLabel);
if (AllocPooledString(pMapAddEnt->GetName()) == AllocPooledString("event"))
{
CBaseEntity *modEnt = NULL;
DevMsg("pEntEventValues %s \n", pMapAddEnt->GetName());
KeyValues *pEntKeyValuesAdd = pMapAddEnt->GetFirstValue();
while (pEntKeyValuesAdd)
{
DevMsg("pEntKeyValuesAdd name %s \n", pEntKeyValuesAdd->GetName());
if (AllocPooledString(pEntKeyValuesAdd->GetName()) == AllocPooledString("targetname"))
{
if (!modEnt)
modEnt = gEntList.FindEntityByName(this, pEntKeyValuesAdd->GetString(""));
if (!modEnt)
modEnt = gEntList.FindEntityByNameWithin(this, pEntKeyValuesAdd->GetString(""), this->GetAbsOrigin(), MAX_TRACE_LENGTH);
if (!modEnt)
modEnt = gEntList.FindEntityByNameNearest(pEntKeyValuesAdd->GetString(""), this->GetAbsOrigin(), MAX_TRACE_LENGTH);
if (modEnt)
DevMsg("modEnt name %s \n", modEnt->GetEntityName());
}
else if (AllocPooledString(pEntKeyValuesAdd->GetName()) == AllocPooledString("model") && modEnt)
{
DevMsg("model \n");
PrecacheModel(pEntKeyValuesAdd->GetString(""));
modEnt->SetModel(pEntKeyValuesAdd->GetString(""));
}
else
{
DevMsg("else \n");
if (modEnt)
modEnt->KeyValue(pEntKeyValuesAdd->GetName(), pEntKeyValuesAdd->GetString(""));
}
KeyValues *pEntFreeze = pMapAddEnt->FindKey("freeze");
if (pEntFreeze && modEnt)
{
modEnt->SetMoveType(MOVETYPE_NONE);
modEnt->SetSolid(SOLID_VPHYSICS);
modEnt->VPhysicsInitStatic();
}
pEntKeyValuesAdd = pEntKeyValuesAdd->GetNextValue();
}
KeyValues *pEntFlags = pMapAddEnt->FindKey("Flags");
if (pEntFlags && modEnt)
{
DevMsg("Flag for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntFlagsAdd = pEntFlags->GetFirstValue();
while (pEntFlagsAdd && modEnt)
{
modEnt->AddSpawnFlags(pEntFlagsAdd->GetInt());
pEntFlagsAdd = pEntFlagsAdd->GetNextValue();
}
}
}
else if (AllocPooledString(pMapAddEnt->GetName()) != AllocPooledString("event") && !HandlePlayerEntity(pMapAddEnt, false)
&& !HandleRemoveEnitity(pMapAddEnt)
&& !HandleSMODEntity(pMapAddEnt)
&& !HandleSpecialEnitity(pMapAddEnt)
&& !HandleWeaponManagerEnitity(pMapAddEnt))//!HandleSMODEntityName(szLabel))
{
Vector SpawnVector = Vector(0, 0, 0);
QAngle SpawnAngle = QAngle(0, 0, 0);
KeyValues *pEntKeyOrig = pMapAddEnt->FindKey("origin");
KeyValues *pEntKeyAng = pMapAddEnt->FindKey("angle");
KeyValues *pEntKeyX = pMapAddEnt->FindKey("x");
KeyValues *pEntKeyY = pMapAddEnt->FindKey("y");
KeyValues *pEntKeyZ = pMapAddEnt->FindKey("z");
KeyValues *pEntKeyRoll = pMapAddEnt->FindKey("roll");
KeyValues *pEntKeyYaw = pMapAddEnt->FindKey("yaw");
KeyValues *pEntKeyPitch = pMapAddEnt->FindKey("pitch");
if (pEntKeyOrig)
{
const char *position = pMapAddEnt->GetString("origin", "0 0 0");
UTIL_StringToVector(SpawnVector.Base(), position);
if (pEntKeyAng)
{
float tmp[2];
const char *angle = pMapAddEnt->GetString("angle", "0 0 0");
UTIL_StringToFloatArray(tmp, 2, angle);
SpawnAngle[PITCH] = tmp[0];
SpawnAngle[YAW] = tmp[1];
SpawnAngle[ROLL] = tmp[2];
}
}
if (pEntKeyX && pEntKeyY && pEntKeyZ && pEntKeyRoll && pEntKeyYaw && pEntKeyPitch)
{
SpawnVector.x = pMapAddEnt->GetFloat("x", SpawnVector.x);
SpawnVector.y = pMapAddEnt->GetFloat("y", SpawnVector.y);
SpawnVector.z = pMapAddEnt->GetFloat("z", SpawnVector.z);
SpawnAngle[PITCH] = pMapAddEnt->GetFloat("pitch", SpawnAngle[PITCH]);
SpawnAngle[YAW] = pMapAddEnt->GetFloat("yaw", SpawnAngle[YAW]);
SpawnAngle[ROLL] = pMapAddEnt->GetFloat("roll", SpawnAngle[ROLL]);
}
//CBaseEntity *createEnt = NULL;
//if (AllocPooledString(pMapAddEnt->GetName()) == AllocPooledString("instant_trig"))
//{
//CBaseEntity *createEnt = CreateEntityByName(pMapAddEnt->GetName());
//createEnt->SetLocalOrigin(SpawnVector);
//createEnt->SetLocalAngles(SpawnAngle);
//}
//else
CBaseEntity *createEnt = CBaseEntity::CreateNoSpawnInstance(pMapAddEnt->GetName(), SpawnVector, SpawnAngle);
KeyValues *pEntKeyLongRange = pMapAddEnt->FindKey("longrange");
KeyValues *pEntKeyFreeze = pMapAddEnt->FindKey("freeze");
KeyValues *pEntKeyVel = pMapAddEnt->FindKey("velocity");
KeyValues *pEntKeyValues = pMapAddEnt->FindKey("KeyValues");
KeyValues *pEntFlags = pMapAddEnt->FindKey("Flags");
if (createEnt)
{
if (pEntKeyLongRange)
createEnt->AddSpawnFlags(SF_NPC_LONG_RANGE);
if (pEntKeyValues)
{
DevMsg("KeyValue for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntKeyValuesAdd = pEntKeyValues->GetFirstValue();
while (pEntKeyValuesAdd && createEnt)
{
if (AllocPooledString(pEntKeyValuesAdd->GetName()) == AllocPooledString("model"))
{
PrecacheModel(pEntKeyValuesAdd->GetString(""));
createEnt->SetModel(pEntKeyValuesAdd->GetString(""));
}
else
{
createEnt->KeyValue(pEntKeyValuesAdd->GetName(), pEntKeyValuesAdd->GetString(""));
}
pEntKeyValuesAdd = pEntKeyValuesAdd->GetNextValue();
}
}
if (pEntFlags)
{
DevMsg("Flag for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntFlagsAdd = pEntFlags->GetFirstValue();
while (pEntFlagsAdd && createEnt)
{
createEnt->AddSpawnFlags(pEntFlagsAdd->GetInt());
pEntFlagsAdd = pEntFlagsAdd->GetNextValue();
}
}
DispatchSpawn(createEnt); //I derped
}
//DispatchSpawn(createEnt); //I derped
if (createEnt)
{
if (pEntKeyFreeze)
{
//createEnt->KeyValue("freeze", true);
/*createEnt->SetSolid(SOLID_BBOX);
createEnt->AddEFlags(EFL_USE_PARTITION_WHEN_NOT_SOLID);
createEnt->SetMoveType(MOVETYPE_PUSH);*/
createEnt->SetMoveType(MOVETYPE_NONE);
createEnt->SetSolid(SOLID_VPHYSICS);
createEnt->VPhysicsInitStatic();
}
if (pEntKeyVel)
{
Vector VelVector = Vector(0, 0, 0);
const char *vel = pMapAddEnt->GetString("velocity", "0 0 0");
UTIL_StringToVector(VelVector.Base(), vel);
//createEnt->SetAbsVelocity(VelVector);
//createEnt->ApplyAbsVelocityImpulse(VelVector);
//createEnt->ApplyLocalAngularVelocityImpulse(VelVector);
createEnt->ApplyLocalVelocityImpulse(VelVector);
}
}
}
pMapAddEnt = pMapAddEnt->GetNextTrueSubKey(); //Got to keep this!
}
//KeyValues *pMapAddEnt2 = pMapAdd2->GetFirstTrueSubKey();
//HandleRemoveEnitity(pMapAddEnt2);
}
}
pMapAdd2->deleteThis();
//if (pMapAdd->IsEmpty())
Destroy();
return true;
}
bool CMapAdd::RunTriggerLabel(const char *mapaddMap, const char *szLabel)
{
DevMsg("RunTriggerLabel \n");//Update
if (AllocPooledString(mapaddMap) == AllocPooledString("") || !mapaddMap || !szLabel || AllocPooledString(szLabel) == AllocPooledString(""))//Update
{
DevMsg("MAPADD FAILED TO LOAD");//Update
return false;
}
KeyValues *pMapAdd2 = new KeyValues(szLabel);
if (pMapAdd2->LoadFromFile(filesystem, mapaddMap, "MOD"))
{
DevMsg("pMapAdd->LoadFromFile \n");//Update
//KeyValues *pMapAdd2 = pMapAdd->FindKey("Init");
//while (pMapAdd2)//init
{
DevMsg("pMapAdd2 = pMapAdd->FindKey(Init) \n");//Update
//KeyValues *pMapAdd3 = pMapAdd2->FindKey(szLabel);
//if (pMapAdd3)
{
//DevMsg("pMapAdd3 GetName %s \n", pMapAdd3->GetName());
KeyValues *pMapAddEnt = pMapAdd2->GetFirstTrueSubKey();//pMapAdd2->FindKey(szLabel);
while (pMapAddEnt)//HandleSMODEntityName(szLabel))
{
DevMsg("while pMapAddEnt %s \n", pMapAddEnt->GetName());
HandleSMODEntityName(szLabel);
if (AllocPooledString(pMapAddEnt->GetName()) == AllocPooledString("event"))
{
CBaseEntity *modEnt = NULL;
DevMsg("event %s \n", pMapAddEnt->GetName());
KeyValues *pEntKeyValuesAdd = pMapAddEnt->GetFirstValue();
while (pEntKeyValuesAdd)
{
DevMsg("pEntKeyValuesAdd name %s \n", pEntKeyValuesAdd->GetName());
if (AllocPooledString(pEntKeyValuesAdd->GetName()) == AllocPooledString("targetname"))
{
if (!modEnt)
modEnt = gEntList.FindEntityByName(this, pEntKeyValuesAdd->GetString(""));
if (!modEnt)
modEnt = gEntList.FindEntityByNameWithin(this, pEntKeyValuesAdd->GetString(""), this->GetAbsOrigin(), MAX_TRACE_LENGTH);
if (!modEnt)
modEnt = gEntList.FindEntityByNameNearest(pEntKeyValuesAdd->GetString(""), this->GetAbsOrigin(), MAX_TRACE_LENGTH);
if (modEnt)
DevMsg("modEnt name %s \n", modEnt->GetEntityName());
}
else if (AllocPooledString(pEntKeyValuesAdd->GetName()) == AllocPooledString("model") && modEnt)
{
DevMsg("model \n");
PrecacheModel(pEntKeyValuesAdd->GetString(""));
modEnt->SetModel(pEntKeyValuesAdd->GetString(""));
}
/*else if (AllocPooledString(pEntKeyValuesAdd->GetName()) == AllocPooledString("freeze") && modEnt)
{
DevMsg("freeze \n");
modEnt->SetMoveType(MOVETYPE_NONE);
modEnt->SetSolid(SOLID_VPHYSICS);
modEnt->VPhysicsInitStatic();
}*/
else
{
DevMsg("else \n");
if (modEnt)
modEnt->KeyValue(pEntKeyValuesAdd->GetName(), pEntKeyValuesAdd->GetString(""));
}
KeyValues *pEntFreeze = pMapAddEnt->FindKey("freeze");
if (pEntFreeze && modEnt)
{
modEnt->SetMoveType(MOVETYPE_NONE);
modEnt->SetSolid(SOLID_VPHYSICS);
modEnt->VPhysicsInitStatic();
}
pEntKeyValuesAdd = pEntKeyValuesAdd->GetNextValue();
}
KeyValues *pEntFlags = pMapAddEnt->FindKey("Flags");
if (pEntFlags && modEnt)
{
DevMsg("Flag for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntFlagsAdd = pEntFlags->GetFirstValue();
while (pEntFlagsAdd && modEnt)
{
modEnt->AddSpawnFlags(pEntFlagsAdd->GetInt());
pEntFlagsAdd = pEntFlagsAdd->GetNextValue();
}
}
}
else if (AllocPooledString(pMapAddEnt->GetName()) != AllocPooledString("event") && (!HandlePlayerEntity(pMapAddEnt, false)
&& !HandleRemoveEnitity(pMapAddEnt)
&& !HandleSMODEntity(pMapAddEnt)
&& !HandleSpecialEnitity(pMapAddEnt)
&& !HandleWeaponManagerEnitity(pMapAddEnt)))//!HandleSMODEntityName(szLabel))
{
Vector SpawnVector = Vector(0, 0, 0);
QAngle SpawnAngle = QAngle(0, 0, 0);
KeyValues *pEntKeyOrig = pMapAddEnt->FindKey("origin");
KeyValues *pEntKeyAng = pMapAddEnt->FindKey("angle");
KeyValues *pEntKeyX = pMapAddEnt->FindKey("x");
KeyValues *pEntKeyY = pMapAddEnt->FindKey("y");
KeyValues *pEntKeyZ = pMapAddEnt->FindKey("z");
KeyValues *pEntKeyRoll = pMapAddEnt->FindKey("roll");
KeyValues *pEntKeyYaw = pMapAddEnt->FindKey("yaw");
KeyValues *pEntKeyPitch = pMapAddEnt->FindKey("pitch");
if (pEntKeyOrig)
{
const char *position = pMapAddEnt->GetString("origin", "0 0 0");
UTIL_StringToVector(SpawnVector.Base(), position);
if (pEntKeyAng)
{
float tmp[2];
const char *angle = pMapAddEnt->GetString("angle", "0 0 0");
UTIL_StringToFloatArray(tmp, 2, angle);
SpawnAngle[PITCH] = tmp[0];
SpawnAngle[YAW] = tmp[1];
SpawnAngle[ROLL] = tmp[2];
}
}
if (pEntKeyX && pEntKeyY && pEntKeyZ && pEntKeyRoll && pEntKeyYaw && pEntKeyPitch)
{
SpawnVector.x = pMapAddEnt->GetFloat("x", SpawnVector.x);
SpawnVector.y = pMapAddEnt->GetFloat("y", SpawnVector.y);
SpawnVector.z = pMapAddEnt->GetFloat("z", SpawnVector.z);
SpawnAngle[PITCH] = pMapAddEnt->GetFloat("pitch", SpawnAngle[PITCH]);
SpawnAngle[YAW] = pMapAddEnt->GetFloat("yaw", SpawnAngle[YAW]);
SpawnAngle[ROLL] = pMapAddEnt->GetFloat("roll", SpawnAngle[ROLL]);
}
//CBaseEntity *createEnt = NULL;
//if (AllocPooledString(pMapAddEnt->GetName()) == AllocPooledString("instant_trig"))
//{
//CBaseEntity *createEnt = CreateEntityByName(pMapAddEnt->GetName());
//createEnt->SetLocalOrigin(SpawnVector);
//createEnt->SetLocalAngles(SpawnAngle);
//}
//else
CBaseEntity *createEnt = CBaseEntity::CreateNoSpawnInstance(pMapAddEnt->GetName(), SpawnVector, SpawnAngle);
KeyValues *pEntKeyLongRange = pMapAddEnt->FindKey("longrange");
KeyValues *pEntKeyFreeze = pMapAddEnt->FindKey("freeze");
KeyValues *pEntKeyVel = pMapAddEnt->FindKey("velocity");
KeyValues *pEntKeyValues = pMapAddEnt->FindKey("KeyValues");
KeyValues *pEntFlags = pMapAddEnt->FindKey("Flags");
if (createEnt)
{
if (pEntKeyLongRange)
createEnt->AddSpawnFlags(SF_NPC_LONG_RANGE);
if (pEntKeyValues)
{
DevMsg("KeyValue for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntKeyValuesAdd = pEntKeyValues->GetFirstValue();
while (pEntKeyValuesAdd && createEnt)
{
if (AllocPooledString(pEntKeyValuesAdd->GetName()) == AllocPooledString("model"))
{
PrecacheModel(pEntKeyValuesAdd->GetString(""));
createEnt->SetModel(pEntKeyValuesAdd->GetString(""));
}
else
{
createEnt->KeyValue(pEntKeyValuesAdd->GetName(), pEntKeyValuesAdd->GetString(""));
}
pEntKeyValuesAdd = pEntKeyValuesAdd->GetNextValue();
}
}
if (pEntFlags)
{
DevMsg("Flag for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntFlagsAdd = pEntFlags->GetFirstValue();
while (pEntFlagsAdd && createEnt)
{
createEnt->AddSpawnFlags(pEntFlagsAdd->GetInt());
pEntFlagsAdd = pEntFlagsAdd->GetNextValue();
}
}
DispatchSpawn(createEnt); //I derped
}
//DispatchSpawn(createEnt); //I derped
if (createEnt)
{
if (pEntKeyFreeze)
{
//createEnt->KeyValue("freeze", true);
/*createEnt->SetSolid(SOLID_BBOX);
createEnt->AddEFlags(EFL_USE_PARTITION_WHEN_NOT_SOLID);
createEnt->SetMoveType(MOVETYPE_PUSH);*/
createEnt->SetMoveType(MOVETYPE_NONE);
createEnt->SetSolid(SOLID_VPHYSICS);
createEnt->VPhysicsInitStatic();
}
if (pEntKeyVel)
{
Vector VelVector = Vector(0, 0, 0);
const char *vel = pMapAddEnt->GetString("velocity", "0 0 0");
UTIL_StringToVector(VelVector.Base(), vel);
//createEnt->SetAbsVelocity(VelVector);
//createEnt->ApplyAbsVelocityImpulse(VelVector);
//createEnt->ApplyLocalAngularVelocityImpulse(VelVector);
createEnt->ApplyLocalVelocityImpulse(VelVector);
}
}
}
pMapAddEnt = pMapAddEnt->GetNextTrueSubKey(); //Got to keep this!
}
}
pMapAdd2 = pMapAdd2->GetNextTrueSubKey();
//KeyValues *pMapAddEnt2 = pMapAdd2->GetFirstTrueSubKey();
//HandleRemoveEnitity(pMapAddEnt2);
}
}
pMapAdd2->deleteThis();
//if (pMapAdd->IsEmpty())
Destroy();
return true;
}
bool CMapAdd::HandlePlayerEntity(KeyValues *playerEntityKV, bool initLevel)
{
if (AllocPooledString(playerEntityKV->GetName()) == AllocPooledString("player"))
{
// if(initLevel)
// {
// return true; //Just pretend we did
// }
//playerEnt->PrecacheSound();
//playerEnt->EmitAmbientSound(playerEnt->entindex(), this->GetAbsOrigin(), "");
KeyValues *pEntPlr = playerEntityKV->GetFirstValue();
DevMsg("HandlePlayerEntity - player \n");
while (pEntPlr)
{
DevMsg("HandlePlayerEntity - GetFirstValue \n");
if (AllocPooledString(pEntPlr->GetName()) == AllocPooledString("music"))
{
DevMsg("HandlePlayerEntity - AllocPooledString(music) \n");
DevMsg("music %s \n", pEntPlr->GetString());
CBasePlayer *playerEnt = UTIL_GetLocalPlayer();
if (playerEnt)
{
playerEnt->PrecacheScriptSound(pEntPlr->GetString());
playerEnt->EmitAmbientSound(playerEnt->entindex(), playerEnt->GetAbsOrigin(), pEntPlr->GetString());
}
/*enginesound->PrecacheSound(pEntPlr->GetString());
enginesound->EmitAmbientSound(pEntPlr->GetString(), VOL_NORM, PITCH_NORM);*/
//break;
//continue;
}
else if (AllocPooledString(pEntPlr->GetName()) == AllocPooledString("message"))
{
DevMsg("HandlePlayerEntity - AllocPooledString(message) \n");
DevMsg("message %s \n", pEntPlr->GetString());
UTIL_ShowMessage(pEntPlr->GetString(), UTIL_GetLocalPlayer());
/*CBaseEntity *createEnt = CBaseEntity::CreateNoSpawnInstance("mm_game_text", Vector(0,0,0), QAngle(0,0,0));
if (createEnt)
{
createEnt->KeyValue("message", pEntPlr->GetString());
DispatchSpawn(createEnt); //I derped
}*/
}
pEntPlr = pEntPlr->GetNextValue();
//enginesound->GetActiveSounds()
if (!pEntPlr)
break;
}
return true;
}
return false;
}
bool CMapAdd::HandleSMODEntity(KeyValues *smodEntity)
{
/*char szSmodEntityName[128];
Q_snprintf(szSmodEntityName, sizeof(szSmodEntityName), "%s", smodEntity->GetName());
if (Q_stristr(szSmodEntityName, "entities:"))
return true;*/
return false;
}
bool CMapAdd::HandleSMODEntityName(const char *szLabel)
{
char szSmodEntityName[128];
Q_snprintf(szSmodEntityName, sizeof(szSmodEntityName), "%s", AllocPooledString(szLabel));
DevMsg("HandleSMODEntityName pMapAddEnt %s \n", AllocPooledString(szLabel));
DevMsg("HandleSMODEntityName\n");
if (Q_stristr(szSmodEntityName, "entities:"))
{
DevMsg("HandleSMODEntityName true\n");
return true;
}
return false;
}
bool CMapAdd::HandleSpecialEnitity(KeyValues *specialEntity)
{
return false;
}
bool CMapAdd::HandleRemoveEnitity(KeyValues *mapaddValue)
{
if (AllocPooledString(mapaddValue->GetName()) == AllocPooledString("remove:sphere"))
{
//engine->ServerCommand("ent_remove env_sun\n");
Vector RemoveVector = Vector(0, 0, 0);
CBaseEntity *ppEnts[1024];//256
// CBaseEntity *ppCandidates[256];
KeyValues *pEntKeyOrig = mapaddValue->FindKey("origin");
KeyValues *pEntKeyAng = mapaddValue->FindKey("angle");
KeyValues *pEntKeyX = mapaddValue->FindKey("x");
KeyValues *pEntKeyY = mapaddValue->FindKey("y");
KeyValues *pEntKeyZ = mapaddValue->FindKey("z");
KeyValues *pEntKeyRoll = mapaddValue->FindKey("roll");
KeyValues *pEntKeyYaw = mapaddValue->FindKey("yaw");
KeyValues *pEntKeyPitch = mapaddValue->FindKey("pitch");
if (pEntKeyOrig && pEntKeyAng)
{
const char *position = mapaddValue->GetString("origin", "0 0 0");
UTIL_StringToVector(RemoveVector.Base(), position);
}
if (pEntKeyX && pEntKeyY && pEntKeyZ && pEntKeyRoll && pEntKeyYaw && pEntKeyPitch)
{
RemoveVector.x = mapaddValue->GetFloat("x", RemoveVector.x);
RemoveVector.y = mapaddValue->GetFloat("y", RemoveVector.y);
RemoveVector.z = mapaddValue->GetFloat("z", RemoveVector.z);
}
int nEntCount = UTIL_EntitiesInSphere(ppEnts, 1024, RemoveVector, mapaddValue->GetFloat("radius", 0), 0);//256
//Look through the entities it found
KeyValues *pEntKeyValues = mapaddValue->FindKey("entities");
if (pEntKeyValues)
{
//DevMsg("REMOVE ENTITY \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
KeyValues *pEntKeyValuesRemove = pEntKeyValues->GetFirstValue();
//KeyValues *pEntKeyValuesRemove = pEntKeyValues->GetFirstTrueSubKey();
while (pEntKeyValuesRemove)
{
/*DevMsg("REMOVE ENTITY \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
DevMsg("radius: %.2f \n\n\n\n\n\n", mapaddValue->GetFloat("radius"));
ppEnts[1]->SetName(AllocPooledString("env_sun"));//pEntKeyValuesRemove->GetName()
UTIL_Remove(ppEnts[1]);
cvar->FindVar("ent_remove")->SetValue("env_sun");
engine->ServerCommand("ent_remove\n");
//engine->ServerCommand("ent_remove env_sun\n");*/
int i;
for (i = 0; i < nEntCount; i++)
{
//DevMsg("nEntCount: %.2f \n\n\n\n\n\n", nEntCount);
if (ppEnts[i] == NULL)
continue;
if (AllocPooledString(pEntKeyValuesRemove->GetName()) == AllocPooledString("classname"))// || (( AllocPooledString(pEntKeyValuesRemove->GetName()) == ppEnts[i]->GetEntityName())))
{
//DevMsg("classname for %s Found!\n", pEntKeyValuesRemove->GetName());
//DevMsg("classname for %s Found!\n", ppEnts[i]->GetEntityName());
//UTIL_Remove(ppEnts[i]);
//engine->ServerCommand("ent_remove env_sun\n");
if (AllocPooledString(pEntKeyValuesRemove->GetString()) == AllocPooledString(ppEnts[i]->GetClassname()))//pEntKeyValuesRemove->GetString()
{
//DevMsg("ppEnts for %s Found!\n", pEntKeyValuesRemove->GetName());
UTIL_Remove(ppEnts[i]);
continue;
}
}
if (AllocPooledString(pEntKeyValuesRemove->GetName()) == AllocPooledString("targetname")) // || ( AllocPooledString(pEntKeyValuesRemove->GetName()) == ppEnts[i]->GetEntityName())
{
if (AllocPooledString(pEntKeyValuesRemove->GetString()) == ppEnts[i]->GetEntityName())
{
UTIL_Remove(ppEnts[i]);
continue;
}
}
}
pEntKeyValuesRemove = pEntKeyValuesRemove->GetNextValue();
}
}
return true;
}
else if (AllocPooledString(mapaddValue->GetName()) == AllocPooledString("removeentity"))
{
CBaseEntity *ppEnts[1024];//256
// CBaseEntity *ppCandidates[256];
int nEntCount = UTIL_EntitiesInSphere(ppEnts, 1024, WorldSpaceCenter(), MAX_TRACE_LENGTH, 0);//256
//Look through the entities it found
KeyValues *pEntKeyValuesRemove = mapaddValue->GetFirstValue();
while (pEntKeyValuesRemove)
{
int i;
for (i = 0; i < nEntCount; i++)
{
//DevMsg("nEntCount: %.2f \n\n\n\n\n\n", nEntCount);
if (ppEnts[i] == NULL)
continue;
if (AllocPooledString(pEntKeyValuesRemove->GetName()) == AllocPooledString("classname"))
{
if (AllocPooledString(pEntKeyValuesRemove->GetString()) == AllocPooledString(ppEnts[i]->GetClassname()))
{
UTIL_Remove(ppEnts[i]);
continue;
}
}
if (AllocPooledString(pEntKeyValuesRemove->GetName()) == AllocPooledString("targetname"))
{
if (AllocPooledString(pEntKeyValuesRemove->GetString()) == ppEnts[i]->GetEntityName())
{
UTIL_Remove(ppEnts[i]);
continue;
}
}
}
pEntKeyValuesRemove = pEntKeyValuesRemove->GetNextValue();
}
return true;
}
return false;
}
bool CMapAdd::HandleWeaponManagerEnitity(KeyValues *weaponManagerEntity)
{
if (AllocPooledString(weaponManagerEntity->GetName()) == AllocPooledString("gameweaponmanager"))
{
const char *pWeaponName = "";
int iMaxAllowed = 0;
pWeaponName = weaponManagerEntity->GetString("weaponname", pWeaponName);
iMaxAllowed = weaponManagerEntity->GetFloat("maxallowed", iMaxAllowed);
CreateWeaponManager(pWeaponName, iMaxAllowed);
return true;
}
return false;
}
void CMapAdd::InputRunLabel(inputdata_t &inputData) //Input this directly!
{
char szMapadd[128];
Q_snprintf(szMapadd, sizeof(szMapadd), "mapadd/%s.txt", gpGlobals->mapname);
this->RunLabel(szMapadd, inputData.value.String());
}
BEGIN_DATADESC(CMapAdd)
// Links our input name from Hammer to our input member function
DEFINE_INPUTFUNC(FIELD_STRING, "RunLabel", InputRunLabel),
END_DATADESC()
class CMapChange : public CBaseEntity
{
public:
DECLARE_CLASS(CMapChange, CBaseEntity);
DECLARE_DATADESC();
CMapChange(int MnEntIndex = 0);
void Spawn()
{
BaseClass::Spawn();
SetNextThink(gpGlobals->curtime);
}
void Think();
private:
float m_nTriggerArea;
bool m_bDeleteOnFire;
COutputEvent m_OnTrigger;
protected:
int m_nEntIndexM;
};
CMapChange::CMapChange(int MnEntIndex)
{
m_nEntIndexM = MnEntIndex;
m_nTriggerArea = 32.0f;
m_bDeleteOnFire = true;
}
void CMapChange::Think()
{
BaseClass::Think();
CBaseEntity *ppEnts[256];
int nEntCount = UTIL_EntitiesInSphere(ppEnts, 256, this->GetAbsOrigin(), m_nTriggerArea, 0);
int i;
for (i = 0; i < nEntCount; i++)
{
//Look through the entities it found
if (ppEnts[i] != NULL)
if (ppEnts[i]->IsPlayer())
{
Msg("mapadd_trig was triggered!\n");
m_OnTrigger.FireOutput(ppEnts[i], this);
// if(m_bDeleteOnFire)
// {
// SetNextThink( gpGlobals->curtime + 1 ); // Think again in 1 second
//UTIL_Remove(this);
char szMapadd[128];
Q_snprintf(szMapadd, sizeof(szMapadd), "mapadd/%s.txt", gpGlobals->mapname);
//KeyValues *pMapAdd = new KeyValues("AddEntity");
KeyValues *pMapAdd = new KeyValues("MapAdd");
if (pMapAdd->LoadFromFile(filesystem, szMapadd, "MOD"))
{
DevMsg("KeyValues(AddEntity)");
//KeyValues *pMapAdd2 = pMapAdd->FindKey("Init");
//if (pMapAdd2)
{
//KeyValues *pMapAddEntP = pMapAdd->FindKey("AddEntity");
KeyValues *pMapAddEntP = pMapAdd->FindKey("Init");
if (pMapAddEntP)
{
DevMsg("KeyValues(pMapAddEntP)");
KeyValues *pMapAddEntS = pMapAddEntP->FindKey("mapadd_changelevel");
if (pMapAddEntS)
{
/*DevMsg("m_nEntIndexM: %.2f \n", m_nEntIndexM);
KeyValues *pMapAddEntV = pMapAddEntS->GetFirstValue();
if (pMapAddEntV->GetInt() == m_nEntIndexM)
{*/
DevMsg("KeyValues(mapadd_trig)");
KeyValues *pMapAddEntD = pMapAddEntS->FindKey("AddEntity");
if (pMapAddEntS)
{
DevMsg("KeyValues(AddEntity)");
//KeyValues *pMapAddEnt = pMapAddEntD->GetFirstTrueSubKey();
KeyValues *pMapAddEnt = pMapAddEntD->GetFirstTrueSubKey();
while (pMapAddEntD)//if (pMapAddEnt)
{
DevMsg("KeyValues(AddEntity)");
Vector SpawnVector = Vector(0, 0, 0);
QAngle SpawnAngle = QAngle(0, 0, 0);
KeyValues *pEntKeyOrig = pMapAddEnt->FindKey("origin");
KeyValues *pEntKeyAng = pMapAddEnt->FindKey("angle");
KeyValues *pEntKeyX = pMapAddEnt->FindKey("x");
KeyValues *pEntKeyY = pMapAddEnt->FindKey("y");
KeyValues *pEntKeyZ = pMapAddEnt->FindKey("z");
KeyValues *pEntKeyRoll = pMapAddEnt->FindKey("roll");
KeyValues *pEntKeyYaw = pMapAddEnt->FindKey("yaw");
KeyValues *pEntKeyPitch = pMapAddEnt->FindKey("pitch");
if (pEntKeyOrig && pEntKeyAng)
{
const char *position = pMapAddEnt->GetString("origin", "0 0 0");
UTIL_StringToVector(SpawnVector.Base(), position);
float tmp[2];
const char *angle = pMapAddEnt->GetString("angle", "0 0 0");
UTIL_StringToFloatArray(tmp, 2, angle);
SpawnAngle[PITCH] = tmp[0];
SpawnAngle[YAW] = tmp[1];
SpawnAngle[ROLL] = tmp[2];
}
if (pEntKeyX && pEntKeyY && pEntKeyZ && pEntKeyRoll && pEntKeyYaw && pEntKeyPitch)
{
SpawnVector.x = pMapAddEnt->GetFloat("x", SpawnVector.x);
SpawnVector.y = pMapAddEnt->GetFloat("y", SpawnVector.y);
SpawnVector.z = pMapAddEnt->GetFloat("z", SpawnVector.z);
SpawnAngle[PITCH] = pMapAddEnt->GetFloat("pitch", SpawnAngle[PITCH]);
SpawnAngle[YAW] = pMapAddEnt->GetFloat("yaw", SpawnAngle[YAW]);
SpawnAngle[ROLL] = pMapAddEnt->GetFloat("roll", SpawnAngle[ROLL]);
}
CBaseEntity *createEnt = CBaseEntity::CreateNoSpawn(pMapAddEnt->GetName(), SpawnVector, SpawnAngle);
KeyValues *pEntKeyValues = pMapAddEnt->FindKey("KeyValues");
KeyValues *pEntFlags = pMapAddEnt->FindKey("Flags");
if (createEnt)
{
if (pEntKeyValues)
{
DevMsg("KeyValue for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntKeyValuesAdd = pEntKeyValues->GetFirstValue();
while (pEntKeyValuesAdd && createEnt)
{
if (AllocPooledString(pEntKeyValuesAdd->GetName()) == AllocPooledString("map"))
{
/*CBasePlayer *playerEnt = UTIL_GetLocalPlayer();
if (!playerEnt) //He doesn't exist, just pretend
break;*/
CBasePlayer *playerEnt = ToBasePlayer(ppEnts[i]);
if (!playerEnt) //He doesn't exist, just pretend
break;
cvar->FindVar("oc_mapadd_changelevel")->SetValue(1);
cvar->FindVar("PlayerHealth")->SetValue(playerEnt->GetHealth());
cvar->FindVar("PlayerArmor")->SetValue(playerEnt->ArmorValue());
if (playerEnt->HasNamedPlayerItem("weapon_airboatgun"))
cvar->FindVar("weapon_airboatgun")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("weapon_ar3"))
cvar->FindVar("weapon_ar3")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_ak47"))
cvar->FindVar("Weapon_ak47")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_autoshotgun"))
cvar->FindVar("Weapon_autoshotgun")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_barnacle"))
cvar->FindVar("Weapon_barnacle")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_beretta"))
cvar->FindVar("Weapon_beretta")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_binoculars"))
cvar->FindVar("Weapon_binoculars")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_bee"))
cvar->FindVar("Weapon_bee")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_adrenaline"))
cvar->FindVar("Weapon_adrenaline")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_cguard"))
cvar->FindVar("Weapon_cguard")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_deagle"))
cvar->FindVar("Weapon_deagle")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_disc"))
cvar->FindVar("Weapon_disc")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_displacer"))
cvar->FindVar("Weapon_displacer")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_dual_pistols"))
cvar->FindVar("Weapon_dual_pistols")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_egon"))
cvar->FindVar("Weapon_egon")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_extinguisher"))
cvar->FindVar("Weapon_extinguisher")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_fireball"))
cvar->FindVar("Weapon_fireball")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_flamethrower"))
cvar->FindVar("Weapon_flamethrower")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_flaregun"))
cvar->FindVar("Weapon_flaregun")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_gauss"))
cvar->FindVar("Weapon_gauss")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_glock"))
cvar->FindVar("Weapon_glock")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_grapple"))
cvar->FindVar("Weapon_grapple")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_grenadelauncher"))
cvar->FindVar("Weapon_grenadelauncher")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_hopwire"))
cvar->FindVar("Weapon_hopwire")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_iceaxe"))
cvar->FindVar("Weapon_iceaxe")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_immolator"))
cvar->FindVar("Weapon_immolator")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_ionrifle"))
cvar->FindVar("Weapon_ionrifle")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_knife"))
cvar->FindVar("Weapon_knife")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_laser"))
cvar->FindVar("Weapon_laser")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_laserpistol"))
cvar->FindVar("Weapon_laserpistol")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_m4"))
cvar->FindVar("Weapon_m4")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_machinegun"))
cvar->FindVar("Weapon_machinegun")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_molotov"))
cvar->FindVar("Weapon_molotov")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_mp5"))
cvar->FindVar("Weapon_mp5")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_objective"))
cvar->FindVar("Weapon_objective")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_oicw"))
cvar->FindVar("Weapon_oicw")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_physgun"))
cvar->FindVar("Weapon_physgun")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_pistol_silent"))
cvar->FindVar("Weapon_pistol_silent")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_sg552"))
cvar->FindVar("Weapon_sg552")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_shockrifle"))
cvar->FindVar("Weapon_shockrifle")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_smg2"))
cvar->FindVar("Weapon_smg2")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_smokegrenade"))
cvar->FindVar("Weapon_smokegrenade")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_sniper"))
cvar->FindVar("Weapon_sniper")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_teleport"))
cvar->FindVar("Weapon_teleport")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_thumper"))
cvar->FindVar("Weapon_thumper")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_wrench"))
cvar->FindVar("Weapon_wrench")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("grenade_ar2"))
cvar->FindVar("grenade_ar2")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_frag"))
cvar->FindVar("Weapon_frag")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_bugbait"))
cvar->FindVar("Weapon_bugbait")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_357"))
cvar->FindVar("Weapon_357")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_pistol"))
cvar->FindVar("Weapon_pistol")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_ar2"))
cvar->FindVar("Weapon_ar2")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_smg1"))
cvar->FindVar("Weapon_smg1")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_rpg"))
cvar->FindVar("Weapon_rpg")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_shotgun"))
cvar->FindVar("Weapon_shotgun")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_stunstick"))
cvar->FindVar("Weapon_stunstick")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_crowbar"))
cvar->FindVar("Weapon_crowbar")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_cubemap"))
cvar->FindVar("Weapon_cubemap")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_crossbow"))
cvar->FindVar("Weapon_crossbow")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_physcannon"))
cvar->FindVar("Weapon_physcannon")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_alyxgun"))
cvar->FindVar("Weapon_alyxgun")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("Weapon_annabelle"))
cvar->FindVar("Weapon_annabelle")->SetValue(1);
if (playerEnt->HasNamedPlayerItem("item_suit"))
cvar->FindVar("item_suit")->SetValue(1);
//cvar->FindVar("last_weapon")->SetDefault(playerEnt->GetActiveWeapon()->GetName());
char szCommand[256];
Q_snprintf(szCommand, sizeof(szCommand), "%s\n", pEntKeyValuesAdd->GetString(""));
engine->ServerCommand(szCommand);
}
if (AllocPooledString(pEntKeyValuesAdd->GetName()) == AllocPooledString("model"))
{
PrecacheModel(pEntKeyValuesAdd->GetString(""));
createEnt->SetModel(pEntKeyValuesAdd->GetString(""));
}
else
{
createEnt->KeyValue(pEntKeyValuesAdd->GetName(), pEntKeyValuesAdd->GetString(""));
}
pEntKeyValuesAdd = pEntKeyValuesAdd->GetNextValue();
}
}
if (pEntFlags)
{
DevMsg("Flag for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntFlagsAdd = pEntFlags->GetFirstValue();
while (pEntFlagsAdd && createEnt)
{
createEnt->AddSpawnFlags(pEntFlagsAdd->GetInt());
pEntFlagsAdd = pEntFlagsAdd->GetNextValue();
}
}
}
//createEnt->Activate();//Is this a good idea? Not sure!
//createEnt->Spawn();
DispatchSpawn(createEnt); //I derped
pMapAddEnt = pMapAddEnt->GetNextKey();//pMapAddEnt->GetNextTrueSubKey(); //Got to keep this!
if (pMapAddEnt->GetNextKey() == NULL)
break;
if (pMapAddEnt->IsEmpty())
break;
if (pMapAddEnt->FindKey("break"))
break;
}
}
//}
}
}
}
}
UTIL_Remove(this);
break;
// }
// SetNextThink( gpGlobals->curtime + 1 ); // Think again in 1 second
}
}
SetNextThink(gpGlobals->curtime + 0.3f); // Think again in 1 second
}
LINK_ENTITY_TO_CLASS(mapadd_changelevel, CMapChange);
BEGIN_DATADESC(CMapChange)
DEFINE_KEYFIELD(m_nTriggerArea, FIELD_FLOAT, "radius"),
DEFINE_KEYFIELD(m_bDeleteOnFire, FIELD_BOOLEAN, "deleteonfire"),
DEFINE_OUTPUT(m_OnTrigger, "OnTrigger"),
DEFINE_THINKFUNC(Think),
END_DATADESC()
class CMapSave : public CBaseEntity
{
public:
DECLARE_CLASS(CMapSave, CBaseEntity);
DECLARE_DATADESC();
CMapSave(int MnEntIndex = 0);
void Spawn()
{
BaseClass::Spawn();
SetNextThink(gpGlobals->curtime);
}
void Think();
private:
float m_nTriggerArea;
bool m_bDeleteOnFire;
COutputEvent m_OnTrigger;
protected:
int m_nEntIndexM;
};
CMapSave::CMapSave(int MnEntIndex)
{
m_nEntIndexM = MnEntIndex;
m_nTriggerArea = 32.0f;
m_bDeleteOnFire = true;
}
void CMapSave::Think()
{
BaseClass::Think();
CBaseEntity *ppEnts[256];
int nEntCount = UTIL_EntitiesInSphere(ppEnts, 256, this->GetAbsOrigin(), m_nTriggerArea, 0);
int i;
for (i = 0; i < nEntCount; i++)
{
//Look through the entities it found
if (ppEnts[i] != NULL)
if (ppEnts[i]->IsPlayer())
{
Msg("mapadd_trig was triggered!\n");
m_OnTrigger.FireOutput(ppEnts[i], this);
// if(m_bDeleteOnFire)
// {
// SetNextThink( gpGlobals->curtime + 1 ); // Think again in 1 second
//UTIL_Remove(this);
char szMapadd[128];
Q_snprintf(szMapadd, sizeof(szMapadd), "mapadd/%s.txt", gpGlobals->mapname);
//KeyValues *pMapAdd = new KeyValues("AddEntity");
KeyValues *pMapAdd = new KeyValues("MapAdd");
if (pMapAdd->LoadFromFile(filesystem, szMapadd, "MOD"))
{
DevMsg("KeyValues(AddEntity)");
//KeyValues *pMapAdd2 = pMapAdd->FindKey("Init");
//if (pMapAdd2)
{
//KeyValues *pMapAddEntP = pMapAdd->FindKey("AddEntity");
KeyValues *pMapAddEntP = pMapAdd->FindKey("Init");
if (pMapAddEntP)
{
DevMsg("KeyValues(pMapAddEntP)");
KeyValues *pMapAddEntS = pMapAddEntP->FindKey("mapadd_save");
if (pMapAddEntS)
{
/*DevMsg("m_nEntIndexM: %.2f \n", m_nEntIndexM);
KeyValues *pMapAddEntV = pMapAddEntS->GetFirstValue();
if (pMapAddEntV->GetInt() == m_nEntIndexM)
{*/
DevMsg("KeyValues(mapadd_trig)");
KeyValues *pMapAddEntD = pMapAddEntS->FindKey("Restore_Supply");
while (pMapAddEntD)
{
DevMsg("save\n\n\n\n");
/*CBasePlayer *playerEnt = UTIL_GetLocalPlayer();
if (!playerEnt) //He doesn't exist, just pretend
break;*/
CBasePlayer *playerEnt = ToBasePlayer(ppEnts[i]);
/*if (!playerEnt) //He doesn't exist, just pretend
break;*/
//DevMsg("MapAddNewLevel: %i \n", MapAddNewLevel);
if (cvar->FindVar("oc_mapadd_changelevel")->GetInt())
{
DevMsg("oc_mapadd_changelevel\n");
playerEnt->SetHealth(cvar->FindVar("PlayerHealth")->GetInt());
playerEnt->SetArmorValue(cvar->FindVar("PlayerArmor")->GetInt());
if (cvar->FindVar("Weapon_airboatgun")->GetInt())
engine->ServerCommand("give weapon_airboatgun\n");
if (cvar->FindVar("Weapon_ar3")->GetInt())
engine->ServerCommand("give weapon_ar3\n");
if (cvar->FindVar("Weapon_ak47")->GetInt())
engine->ServerCommand("give weapon_ak47\n");
if (cvar->FindVar("Weapon_autoshotgun")->GetInt())
engine->ServerCommand("give weapon_autoshotgun\n");
if (cvar->FindVar("Weapon_barnacle")->GetInt())
engine->ServerCommand("give weapon_barnacle\n");
if (cvar->FindVar("Weapon_beretta")->GetInt())
engine->ServerCommand("give weapon_beretta\n");
if (cvar->FindVar("Weapon_binoculars")->GetInt())
engine->ServerCommand("give weapon_binoculars\n");
if (cvar->FindVar("Weapon_bee")->GetInt())
engine->ServerCommand("give weapon_bee\n");
if (cvar->FindVar("Weapon_adrenaline")->GetInt())
engine->ServerCommand("give weapon_adrenaline\n");
if (cvar->FindVar("Weapon_cguard")->GetInt())
engine->ServerCommand("give weapon_cguard\n");
if (cvar->FindVar("Weapon_deagle")->GetInt())
engine->ServerCommand("give weapon_deagle\n");
if (cvar->FindVar("Weapon_disc")->GetInt())
engine->ServerCommand("give weapon_disc\n");
if (cvar->FindVar("Weapon_displacer")->GetInt())
engine->ServerCommand("give weapon_displacer\n");
if (cvar->FindVar("Weapon_dual_pistols")->GetInt())
engine->ServerCommand("give weapon_dual_pistols\n");
if (cvar->FindVar("Weapon_egon")->GetInt())
engine->ServerCommand("give weapon_egon\n");
if (cvar->FindVar("Weapon_extinguisher")->GetInt())
engine->ServerCommand("give weapon_extinguisher\n");
if (cvar->FindVar("Weapon_fireball")->GetInt())
engine->ServerCommand("give weapon_fireball\n");
if (cvar->FindVar("Weapon_flamethrower")->GetInt())
engine->ServerCommand("give weapon_flamethrower\n");
if (cvar->FindVar("Weapon_flaregun")->GetInt())
engine->ServerCommand("give weapon_flaregun\n");
if (cvar->FindVar("Weapon_gauss")->GetInt())
engine->ServerCommand("give weapon_gauss\n");
if (cvar->FindVar("Weapon_glock")->GetInt())
engine->ServerCommand("give weapon_glock\n");
if (cvar->FindVar("Weapon_grapple")->GetInt())
engine->ServerCommand("give weapon_grapple\n");
if (cvar->FindVar("Weapon_grenadelauncher")->GetInt())
engine->ServerCommand("give weapon_grenadelauncher\n");
if (cvar->FindVar("Weapon_hopwire")->GetInt())
engine->ServerCommand("give weapon_hopwire\n");
if (cvar->FindVar("Weapon_iceaxe")->GetInt())
engine->ServerCommand("give weapon_iceaxe\n");
if (cvar->FindVar("Weapon_immolator")->GetInt())
engine->ServerCommand("give weapon_immolator\n");
if (cvar->FindVar("Weapon_ionrifle")->GetInt())
engine->ServerCommand("give weapon_ionrifle\n");
if (cvar->FindVar("Weapon_knife")->GetInt())
engine->ServerCommand("give weapon_knife\n");
if (cvar->FindVar("Weapon_laser")->GetInt())
engine->ServerCommand("give weapon_laser\n");
if (cvar->FindVar("Weapon_laserpistol")->GetInt())
engine->ServerCommand("give weapon_laserpistol\n");
if (cvar->FindVar("Weapon_m4")->GetInt())
engine->ServerCommand("give weapon_m4\n");
if (cvar->FindVar("Weapon_machinegun")->GetInt())
engine->ServerCommand("give weapon_machinegun\n");
if (cvar->FindVar("Weapon_molotov")->GetInt())
engine->ServerCommand("give weapon_molotov\n");
if (cvar->FindVar("Weapon_mp5")->GetInt())
engine->ServerCommand("give weapon_mp5\n");
if (cvar->FindVar("Weapon_objective")->GetInt())
engine->ServerCommand("give weapon_objective\n");
if (cvar->FindVar("Weapon_oicw")->GetInt())
engine->ServerCommand("give weapon_oicw\n");
if (cvar->FindVar("Weapon_physgun")->GetInt())
engine->ServerCommand("give weapon_physgun\n");
if (cvar->FindVar("Weapon_pistol_silent")->GetInt())
engine->ServerCommand("give weapon_pistol_silent\n");
if (cvar->FindVar("Weapon_sg552")->GetInt())
engine->ServerCommand("give weapon_sg552\n");
if (cvar->FindVar("Weapon_shockrifle")->GetInt())
engine->ServerCommand("give weapon_shockrifle\n");
if (cvar->FindVar("Weapon_smg2")->GetInt())
engine->ServerCommand("give weapon_smg2\n");
if (cvar->FindVar("Weapon_smokegrenade")->GetInt())
engine->ServerCommand("give weapon_smokegrenade\n");
if (cvar->FindVar("Weapon_sniper")->GetInt())
engine->ServerCommand("give weapon_sniper\n");
if (cvar->FindVar("Weapon_teleport")->GetInt())
engine->ServerCommand("give weapon_teleport\n");
if (cvar->FindVar("Weapon_thumper")->GetInt())
engine->ServerCommand("give weapon_thumper\n");
if (cvar->FindVar("Weapon_wrench")->GetInt())
engine->ServerCommand("give weapon_wrench\n");
if (cvar->FindVar("grenade_ar2")->GetInt())
engine->ServerCommand("give grenade_ar2\n");
if (cvar->FindVar("Weapon_frag")->GetInt())
engine->ServerCommand("give weapon_frag\n");
if (cvar->FindVar("Weapon_bugbait")->GetInt())
engine->ServerCommand("give weapon_bugbait\n");
if (cvar->FindVar("Weapon_357")->GetInt())
{
DevMsg("Weapon_357\n");
engine->ServerCommand("give weapon_357\n");
//playerEnt->GiveNamedItem("Weapon_357");
}
if (cvar->FindVar("Weapon_pistol")->GetInt())
{
engine->ServerCommand("give weapon_pistol\n");
}
if (cvar->FindVar("Weapon_ar2")->GetInt())
engine->ServerCommand("give weapon_ar2\n");
if (cvar->FindVar("Weapon_smg1")->GetInt())
engine->ServerCommand("give weapon_smg1\n");
if (cvar->FindVar("Weapon_rpg")->GetInt())
engine->ServerCommand("give weapon_rpg\n");
if (cvar->FindVar("Weapon_shotgun")->GetInt())
engine->ServerCommand("give weapon_shotgun\n");
if (cvar->FindVar("Weapon_stunstick")->GetInt())
engine->ServerCommand("give weapon_stunstick\n");
if (cvar->FindVar("Weapon_crowbar")->GetInt())
engine->ServerCommand("give weapon_crowbar\n");
if (cvar->FindVar("Weapon_cubemap")->GetInt())
engine->ServerCommand("give weapon_cubemap\n");
if (cvar->FindVar("Weapon_crossbow")->GetInt())
engine->ServerCommand("give weapon_crossbow\n");
if (cvar->FindVar("Weapon_physcannon")->GetInt())
engine->ServerCommand("give weapon_physcannon\n");
if (cvar->FindVar("Weapon_alyxgun")->GetInt())
engine->ServerCommand("give weapon_alyxgun\n");
if (cvar->FindVar("Weapon_annabelle")->GetInt())
engine->ServerCommand("give weapon_annabelle\n");
if (cvar->FindVar("item_suit")->GetInt())
engine->ServerCommand("give item_suit\n");
cvar->FindVar("weapon_airboatgun")->SetValue(0);
cvar->FindVar("weapon_ar3")->SetValue(0);
cvar->FindVar("Weapon_ak47")->SetValue(0);
cvar->FindVar("Weapon_autoshotgun")->SetValue(0);
cvar->FindVar("Weapon_barnacle")->SetValue(0);
cvar->FindVar("Weapon_beretta")->SetValue(0);
cvar->FindVar("Weapon_binoculars")->SetValue(0);
cvar->FindVar("Weapon_bee")->SetValue(0);
cvar->FindVar("Weapon_adrenaline")->SetValue(0);
cvar->FindVar("Weapon_cguard")->SetValue(0);
cvar->FindVar("Weapon_deagle")->SetValue(0);
cvar->FindVar("Weapon_disc")->SetValue(0);
cvar->FindVar("Weapon_displacer")->SetValue(0);
cvar->FindVar("Weapon_dual_pistols")->SetValue(0);
cvar->FindVar("Weapon_egon")->SetValue(0);
cvar->FindVar("Weapon_extinguisher")->SetValue(0);
cvar->FindVar("Weapon_fireball")->SetValue(0);
cvar->FindVar("Weapon_flamethrower")->SetValue(0);
cvar->FindVar("Weapon_flaregun")->SetValue(0);
cvar->FindVar("Weapon_gauss")->SetValue(0);
cvar->FindVar("Weapon_glock")->SetValue(0);
cvar->FindVar("Weapon_grapple")->SetValue(0);
cvar->FindVar("Weapon_grenadelauncher")->SetValue(0);
cvar->FindVar("Weapon_hopwire")->SetValue(0);
cvar->FindVar("Weapon_iceaxe")->SetValue(0);
cvar->FindVar("Weapon_immolator")->SetValue(0);
cvar->FindVar("Weapon_ionrifle")->SetValue(0);
cvar->FindVar("Weapon_knife")->SetValue(0);
cvar->FindVar("Weapon_laser")->SetValue(0);
cvar->FindVar("Weapon_laserpistol")->SetValue(0);
cvar->FindVar("Weapon_m4")->SetValue(0);
cvar->FindVar("Weapon_machinegun")->SetValue(0);
cvar->FindVar("Weapon_molotov")->SetValue(0);
cvar->FindVar("Weapon_mp5")->SetValue(0);
cvar->FindVar("Weapon_objective")->SetValue(0);
cvar->FindVar("Weapon_oicw")->SetValue(0);
cvar->FindVar("Weapon_physgun")->SetValue(0);
cvar->FindVar("Weapon_pistol_silent")->SetValue(0);
cvar->FindVar("Weapon_sg552")->SetValue(0);
cvar->FindVar("Weapon_shockrifle")->SetValue(0);
cvar->FindVar("Weapon_smg2")->SetValue(0);
cvar->FindVar("Weapon_smokegrenade")->SetValue(0);
cvar->FindVar("Weapon_sniper")->SetValue(0);
cvar->FindVar("Weapon_teleport")->SetValue(0);
cvar->FindVar("Weapon_thumper")->SetValue(0);
cvar->FindVar("Weapon_wrench")->SetValue(0);
cvar->FindVar("grenade_ar2")->SetValue(0);
cvar->FindVar("Weapon_frag")->SetValue(0);
cvar->FindVar("Weapon_bugbait")->SetValue(0);
cvar->FindVar("Weapon_357")->SetValue(0);
cvar->FindVar("Weapon_pistol")->SetValue(0);
cvar->FindVar("Weapon_ar2")->SetValue(0);
cvar->FindVar("Weapon_smg1")->SetValue(0);
cvar->FindVar("Weapon_rpg")->SetValue(0);
cvar->FindVar("Weapon_shotgun")->SetValue(0);
cvar->FindVar("Weapon_stunstick")->SetValue(0);
cvar->FindVar("Weapon_crowbar")->SetValue(0);
cvar->FindVar("Weapon_cubemap")->SetValue(0);
cvar->FindVar("Weapon_crossbow")->SetValue(0);
cvar->FindVar("Weapon_physcannon")->SetValue(0);
cvar->FindVar("Weapon_alyxgun")->SetValue(0);
cvar->FindVar("Weapon_annabelle")->SetValue(0);
cvar->FindVar("item_suit")->SetValue(0);
//CBaseCombatWeapon *name = "";//cvar->FindVar("last_weapon")->GetString();
//playerEnt->Weapon_Switch(name);
//playerEnt->wea;
//cvar->FindVar("last_weapon")->GetString();
playerEnt->Weapon_Switch(playerEnt->Weapon_GetLast());
cvar->FindVar("oc_mapadd_changelevel")->SetValue(0);
}
if (pMapAddEntD->FindKey("break"))
break;
}
//}
}
}
}
}
UTIL_Remove(this);
break;
// }
// SetNextThink( gpGlobals->curtime + 1 ); // Think again in 1 second
}
}
SetNextThink(gpGlobals->curtime + 0.3f); // Think again in 1 second
}
LINK_ENTITY_TO_CLASS(mapadd_save, CMapSave);
BEGIN_DATADESC(CMapSave)
DEFINE_KEYFIELD(m_nTriggerArea, FIELD_FLOAT, "radius"),
DEFINE_KEYFIELD(m_bDeleteOnFire, FIELD_BOOLEAN, "deleteonfire"),
DEFINE_OUTPUT(m_OnTrigger, "OnTrigger"),
DEFINE_THINKFUNC(Think),
END_DATADESC()
#if 0
class CMapAddITrigger : public CMapAdd
{
public:
DECLARE_CLASS(CMapAddITrigger, CMapAdd);
DECLARE_DATADESC();
// Constructor
CMapAddITrigger(int MnEntIndex = 0);
void Spawn()
{
BaseClass::Spawn();
SetNextThink(gpGlobals->curtime); // Think now
}
//CMapAddITrigger *Pointer();
void Think();
void ActionAdd(KeyValues *pMapAddEnt);
void ActionMod(KeyValues *pMapAddEnt);
private:
CBaseEntity *mapaddEnt = NULL;
string_t labelName;
float m_nTriggerArea; // Count at which to fire our output
bool m_bDeleteOnFire;
COutputEvent m_OnTrigger; // Output event when the counter reaches the threshold
protected:
int m_nEntIndexM;
};
LINK_ENTITY_TO_CLASS(instant_trig, CMapAddITrigger);
// Start of our data description for the class
BEGIN_DATADESC(CMapAddITrigger)
// Links our member variable to our keyvalue from Hammer
DEFINE_KEYFIELD(m_nTriggerArea, FIELD_FLOAT, "radius"),
DEFINE_KEYFIELD(labelName, FIELD_STRING, "label"),
// Links our member variable to our keyvalue from Hammer
DEFINE_KEYFIELD(m_bDeleteOnFire, FIELD_BOOLEAN, "deleteonfire"),
// Links our input name from Hammer to our input member function
//DEFINE_INPUTFUNC( FIELD_VOID, "RunLabel", InputRunLabel ),
// Links our output member to the output name used by Hammer
DEFINE_OUTPUT(m_OnTrigger, "OnTrigger"),
DEFINE_THINKFUNC(Think), // Register new think function
END_DATADESC()
CMapAddITrigger::CMapAddITrigger(int MnEntIndex)
{
m_nEntIndexM = MnEntIndex;
m_nTriggerArea = 32.0f;
m_bDeleteOnFire = true;
}
void CMapAddITrigger::Think()
{
BaseClass::Think();
if (!mapaddEnt)
mapaddEnt = this->GetParent();
//CBaseEntity *nearestEnt = gEntList.FindEntityInSphere(this, this->GetAbsOrigin(), m_nTriggerArea);
CBaseEntity *ppEnts[512];
int nEntCount = UTIL_EntitiesInSphere(ppEnts, 512, this->GetAbsOrigin(), m_nTriggerArea, 0);
char szSSName[50];
Q_snprintf(szSSName, sizeof(szSSName), "Trigger_%d", entindex());
string_t iszSSName = AllocPooledString(szSSName);
this->SetName(iszSSName);
int i;
for (i = 0; i < nEntCount; i++)
{
//Look through the entities it found
if (ppEnts[i] != NULL)
if (ppEnts[i]->IsPlayer())
{
m_OnTrigger.FireOutput(ppEnts[i], this);
//CMapAdd *mapaddEnt2 = GetMapAddEntity();// = dynamic_cast<CMapAdd *>(mapaddEnt);
CMapAdd *mapaddEnt2 = dynamic_cast<CMapAdd *>(mapaddEnt);
if (!mapaddEnt2)
{
char szMapadd[128];
Q_snprintf(szMapadd, sizeof(szMapadd), "mapadd/%s.txt", gpGlobals->mapname);
char szLabelName[128];
Q_snprintf(szLabelName, sizeof(szLabelName), "entities:%s", labelName);
DevMsg("MapAdd found \n");
mapaddEnt2 = CreateMapAddEntity();
if (mapaddEnt2->RunTriggerLabel(szMapadd, szLabelName))
UTIL_Remove(this);
}
if (mapaddEnt2)
{
UTIL_Remove(this);
}
}
}
SetNextThink(gpGlobals->curtime + 0.3f); // Think again in 1 second
/*char szSSName[50];
Q_snprintf(szSSName, sizeof(szSSName), "Trigger_%d", entindex());
string_t iszSSName = AllocPooledString(szSSName);
this->SetName(iszSSName);
if (nearestEnt)
{
if (nearestEnt->IsPlayer())
{
CMapAdd *mapaddEnt2 = dynamic_cast< CMapAdd * >(mapaddEnt);
if (!mapaddEnt2)
{
char szMapadd[128];
Q_snprintf(szMapadd, sizeof(szMapadd), "mapadd/%s.txt", gpGlobals->mapname);
char szLabelName[128];
Q_snprintf(szLabelName, sizeof(szLabelName), "entities:%s", labelName);
DevMsg("MapAdd found \n");
mapaddEnt2 = CreateMapAddEntity();
if (mapaddEnt2->RunTriggerLabel(szMapadd, szLabelName))
UTIL_Remove(this);
}
if (mapaddEnt2)
{
UTIL_Remove(this);
}
}
}
SetNextThink(gpGlobals->curtime + 0.3f); // Think again in 1 second*/
}
#endif
#if 0
//-----------------------------------------------------------------------------
// Purpose: Handle a tick input from another entity
//-----------------------------------------------------------------------------
class CMapAddITrigger : public CBaseEntity
{
public:
DECLARE_CLASS(CMapAddITrigger, CBaseEntity);
DECLARE_DATADESC();
// Constructor
CMapAddITrigger(int MnEntIndex = 0);
void Spawn()
{
BaseClass::Spawn();
SetNextThink(gpGlobals->curtime); // Think now
}
//CMapAddITrigger *Pointer();
void Think();
void ActionAdd(KeyValues *pMapAddEnt);
void ActionMod(KeyValues *pMapAddEnt);
private:
float m_nTriggerArea; // Count at which to fire our output
bool m_bDeleteOnFire;
COutputEvent m_OnTrigger; // Output event when the counter reaches the threshold
protected:
int m_nEntIndexM;
};
/*CMapAddITrigger *CMapAddITrigger::Pointer()
{
CMapAddITrigger *trig = (CMapAddITrigger *)CreateEntityByName("instant_trig");
return trig;
}*/
CMapAddITrigger::CMapAddITrigger(int MnEntIndex)
{
m_nEntIndexM = MnEntIndex;
m_nTriggerArea = 32.0f;
m_bDeleteOnFire = true;
}
void CMapAddITrigger::ActionAdd(KeyValues *pMapAddEnt)
{
DevMsg("Add Entity \n");
Vector SpawnVector = Vector(0, 0, 0);
QAngle SpawnAngle = QAngle(0, 0, 0);
KeyValues *pEntKeyOrig = pMapAddEnt->FindKey("origin");
KeyValues *pEntKeyAng = pMapAddEnt->FindKey("angle");
KeyValues *pEntKeyX = pMapAddEnt->FindKey("x");
KeyValues *pEntKeyY = pMapAddEnt->FindKey("y");
KeyValues *pEntKeyZ = pMapAddEnt->FindKey("z");
KeyValues *pEntKeyRoll = pMapAddEnt->FindKey("roll");
KeyValues *pEntKeyYaw = pMapAddEnt->FindKey("yaw");
KeyValues *pEntKeyPitch = pMapAddEnt->FindKey("pitch");
if (pEntKeyOrig && pEntKeyAng)
{
const char *position = pMapAddEnt->GetString("origin", "0 0 0");
UTIL_StringToVector(SpawnVector.Base(), position);
float tmp[2];
const char *angle = pMapAddEnt->GetString("angle", "0 0 0");
UTIL_StringToFloatArray(tmp, 2, angle);
SpawnAngle[PITCH] = tmp[0];
SpawnAngle[YAW] = tmp[1];
SpawnAngle[ROLL] = tmp[2];
}
if (pEntKeyX && pEntKeyY && pEntKeyZ && pEntKeyRoll && pEntKeyYaw && pEntKeyPitch)
{
SpawnVector.x = pMapAddEnt->GetFloat("x", SpawnVector.x);
SpawnVector.y = pMapAddEnt->GetFloat("y", SpawnVector.y);
SpawnVector.z = pMapAddEnt->GetFloat("z", SpawnVector.z);
SpawnAngle[PITCH] = pMapAddEnt->GetFloat("pitch", SpawnAngle[PITCH]);
SpawnAngle[YAW] = pMapAddEnt->GetFloat("yaw", SpawnAngle[YAW]);
SpawnAngle[ROLL] = pMapAddEnt->GetFloat("roll", SpawnAngle[ROLL]);
}
CBaseEntity *createEnt = CBaseEntity::CreateNoSpawn(pMapAddEnt->GetName(), SpawnVector, SpawnAngle);
KeyValues *pEntKeyLongRange = pMapAddEnt->FindKey("longrange");
KeyValues *pEntKeyFreeze = pMapAddEnt->FindKey("freeze");
KeyValues *pEntKeyVel = pMapAddEnt->FindKey("velocity");
KeyValues *pEntKeyValues = pMapAddEnt->FindKey("KeyValues");
KeyValues *pEntFlags = pMapAddEnt->FindKey("Flags");
if (createEnt)
{
if (pEntKeyLongRange)
createEnt->AddSpawnFlags(SF_NPC_LONG_RANGE);
if (pEntKeyFreeze)
{
createEnt->VPhysicsInitStatic();
createEnt->SetMoveType(MOVETYPE_PUSH);
}
if (pEntKeyVel)
{
Vector VelVector = Vector(0, 0, 0);
const char *vel = pMapAddEnt->GetString("velocity", "0 0 0");
UTIL_StringToVector(VelVector.Base(), vel);
createEnt->SetAbsVelocity(VelVector);
}
if (pEntKeyValues)
{
DevMsg("KeyValue for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntKeyValuesAdd = pEntKeyValues->GetFirstValue();
while (pEntKeyValuesAdd && createEnt)
{
if (AllocPooledString(pEntKeyValuesAdd->GetName()) == AllocPooledString("model"))
{
PrecacheModel(pEntKeyValuesAdd->GetString(""));
createEnt->SetModel(pEntKeyValuesAdd->GetString(""));
}
else
{
createEnt->KeyValue(pEntKeyValuesAdd->GetName(), pEntKeyValuesAdd->GetString(""));
}
pEntKeyValuesAdd = pEntKeyValuesAdd->GetNextValue();
}
}
if (pEntFlags)
{
DevMsg("Flag for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntFlagsAdd = pEntFlags->GetFirstValue();
while (pEntFlagsAdd && createEnt)
{
createEnt->AddSpawnFlags(pEntFlagsAdd->GetInt());
pEntFlagsAdd = pEntFlagsAdd->GetNextValue();
}
}
}
//createEnt->Activate();//Is this a good idea? Not sure!
//createEnt->Spawn();
DispatchSpawn(createEnt); //I derped
}
void CMapAddITrigger::ActionMod(KeyValues *pMapAddEnt)
{
DevMsg("pName is %s \n", pMapAddEnt->GetName());
const char *pName = pMapAddEnt->GetName();
DevMsg("pName is %s \n", pName);
CBaseEntity *modEnt = gEntList.FindEntityGenericWithin(NULL, pName, this->GetAbsOrigin(), MAX_TRACE_LENGTH);
//CBaseEntity *modEnt = gEntList.FindEntityByName(this, AllocPooledString(pMapAddEnt->GetName()));
if (modEnt)
{
DevMsg("modEnt is %s \n", pName);
DevMsg("modEnt is %s \n", modEnt->GetEntityName());
}
KeyValues *pEntKeyValues = pMapAddEnt->FindKey("KeyValues");
KeyValues *pEntFlags = pMapAddEnt->FindKey("Flags");
if (modEnt)
{
DevMsg("modEnt func \n");
if (pEntKeyValues)
{
DevMsg("KeyValue for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntKeyValuesAdd = pEntKeyValues->GetFirstValue();
while (pEntKeyValuesAdd && modEnt)
{
if (AllocPooledString(pEntKeyValuesAdd->GetName()) == AllocPooledString("model"))
{
PrecacheModel(pEntKeyValuesAdd->GetString(""));
modEnt->SetModel(pEntKeyValuesAdd->GetString(""));
}
else
{
modEnt->KeyValue(pEntKeyValuesAdd->GetName(), pEntKeyValuesAdd->GetString(""));
}
pEntKeyValuesAdd = pEntKeyValuesAdd->GetNextValue();
}
}
if (pEntFlags)
{
DevMsg("Flag for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntFlagsAdd = pEntFlags->GetFirstValue();
while (pEntFlagsAdd && modEnt)
{
modEnt->AddSpawnFlags(pEntFlagsAdd->GetInt());
pEntFlagsAdd = pEntFlagsAdd->GetNextValue();
}
}
}
//createEnt->Activate();//Is this a good idea? Not sure!
//createEnt->Spawn();
//DispatchSpawn(createEnt); //I derped
}
void CMapAddITrigger::Think()
{
BaseClass::Think(); // Always do this if you override Think()
CBaseEntity *nearestEnt = gEntList.FindEntityInSphere(this, GetAbsOrigin(), m_nTriggerArea);
char szSSName[50];
Q_snprintf(szSSName, sizeof(szSSName), "Trigger_%d", entindex());
string_t iszSSName = AllocPooledString(szSSName);
this->SetName(iszSSName);
//int i;
//for (i = 0; i < nEntCount; i++)
{
//Look through the entities it found
if (nearestEnt)//(ppEnts[i] != NULL)
if (nearestEnt->IsPlayer())
{
Msg("mapadd_trig was triggered!\n");
m_OnTrigger.FireOutput(nearestEnt, this);
// if(m_bDeleteOnFire)
// {
// SetNextThink( gpGlobals->curtime + 1 ); // Think again in 1 second
//UTIL_Remove(this);
char szMapadd[128];
Q_snprintf(szMapadd, sizeof(szMapadd), "mapadd/%s.txt", gpGlobals->mapname);
KeyValues *pMapAdd = new KeyValues("MapAdd");
if (pMapAdd->LoadFromFile(filesystem, szMapadd, "MOD"))
{
KeyValues *pMapAddEntP = pMapAdd->FindKey("Init");
if (pMapAddEntP)
{
KeyValues *pMapAddEntS = pMapAddEntP->FindKey("instant_trig");
if (pMapAddEntS)
{
DevMsg("KeyValues(mapadd_trig) \n");
KeyValues *pMapAddEntD = pMapAddEntS->FindKey("AddEntity");
if (pMapAddEntS && pMapAddEntD)
{
DevMsg("AddEntity \n");
//KeyValues *pMapAddEnt = pMapAddEntD->GetFirstTrueSubKey();
KeyValues *pMapAddEnt = pMapAddEntD->GetFirstTrueSubKey();
while (pMapAddEntD)//if (pMapAddEnt)
{
if (AllocPooledString(pMapAddEnt->GetName()) == AllocPooledString("remove:sphere"))
{
DevMsg("remove:sphere \n");
GetMapAddEntity()->HandleRemoveEnitity(pMapAddEnt);
}
DevMsg("%s \n", pMapAddEntD->GetName());
ActionAdd(pMapAddEnt);
pMapAddEnt = pMapAddEnt->GetNextKey();
if (pMapAddEnt == NULL)
break;
if (pMapAddEnt->GetNextKey() == NULL)
break;
if (pMapAddEnt->IsEmpty())
break;
if (pMapAddEnt->FindKey("break"))
break;
}
}
KeyValues *pMapAddEntM = pMapAddEntS->FindKey("ModifyEntity");
if (pMapAddEntS && pMapAddEntM)
{
DevMsg("ModifyEntity \n");
KeyValues *pMapAddEnt = pMapAddEntM->GetFirstTrueSubKey();
while (pMapAddEntM)
{
DevMsg("%s \n", pMapAddEntM->GetName());
ActionMod(pMapAddEnt);
pMapAddEnt = pMapAddEnt->GetNextKey();
if (pMapAddEnt == NULL)
break;
if (pMapAddEnt->GetNextKey() == NULL)
break;
if (pMapAddEnt->IsEmpty())
break;
if (pMapAddEnt->FindKey("break"))
break;
}
}
}
}
}
UTIL_Remove(this);
//break;
// }
// SetNextThink( gpGlobals->curtime + 1 ); // Think again in 1 second
}
}
SetNextThink(gpGlobals->curtime + 0.3f); // Think again in 1 second
}
LINK_ENTITY_TO_CLASS(instant_trig, CMapAddITrigger);
// Start of our data description for the class
BEGIN_DATADESC(CMapAddITrigger)
// Links our member variable to our keyvalue from Hammer
DEFINE_KEYFIELD(m_nTriggerArea, FIELD_FLOAT, "radius"),
// Links our member variable to our keyvalue from Hammer
DEFINE_KEYFIELD(m_bDeleteOnFire, FIELD_BOOLEAN, "deleteonfire"),
// Links our input name from Hammer to our input member function
//DEFINE_INPUTFUNC( FIELD_VOID, "RunLabel", InputRunLabel ),
// Links our output member to the output name used by Hammer
DEFINE_OUTPUT(m_OnTrigger, "OnTrigger"),
DEFINE_THINKFUNC(Think), // Register new think function
END_DATADESC()
#endif
//-----------------------------------------------------------------------------
// Purpose: Handle a tick input from another entity
//-----------------------------------------------------------------------------
class CMapAddLabel : public CBaseEntity
{
public:
DECLARE_CLASS(CMapAddLabel, CBaseEntity);
DECLARE_DATADESC();
// Constructor
CMapAddLabel(int MnEntIndex = 0);
void Spawn()
{
BaseClass::Spawn();
SetNextThink(gpGlobals->curtime); // Think now
}
// Input function
//void InputRunLabel( inputdata_t &inputData ); //Runmapadd
void Think();
private:
float m_nTriggerArea; // Count at which to fire our output
// int m_nCounter; // Internal counter
bool m_bDeleteOnFire;
COutputEvent m_OnTrigger; // Output event when the counter reaches the threshold
protected:
int m_nEntIndexM;
};
CMapAddLabel::CMapAddLabel(int MnEntIndex)
{
m_nEntIndexM = MnEntIndex;
m_nTriggerArea = 32.0f;
m_bDeleteOnFire = true;
}
void CMapAddLabel::Think()
{
BaseClass::Think(); // Always do this if you override Think()
//What this does, is look through entities in a sphere, and then
//checks to see if they are valid, and if they are
//adds them to a second list of valid entities.
//Create an array of CBaseEntity pointers
CBaseEntity *ppEnts[256];
int nEntCount = UTIL_EntitiesInSphere(ppEnts, 256, this->GetAbsOrigin(), m_nTriggerArea*2, 0);
int i;
for (i = 0; i < nEntCount; i++)
{
//Look through the entities it found
if (ppEnts[i] != NULL)
if (ppEnts[i]->IsPlayer())
{
Msg("mapadd_trig was triggered!\n");
m_OnTrigger.FireOutput(ppEnts[i], this);
// if(m_bDeleteOnFire)
// {
// SetNextThink( gpGlobals->curtime + 1 ); // Think again in 1 second
//UTIL_Remove(this);
char szMapadd[128];
Q_snprintf(szMapadd, sizeof(szMapadd), "mapadd/%s.txt", gpGlobals->mapname);
//KeyValues *pMapAdd = new KeyValues("AddEntity");
KeyValues *pMapAdd = new KeyValues("MapAdd");
if (pMapAdd->LoadFromFile(filesystem, szMapadd, "MOD"))
{
KeyValues *pMapAddEntP = pMapAdd->FindKey("Init");
if (pMapAddEntP)
{
KeyValues *pMapAddEntS = pMapAddEntP->FindKey("mapadd_trig");
if (pMapAddEntS)
{
DevMsg("KeyValues(mapadd_trig)");
KeyValues *pMapAddEntD = pMapAddEntS->FindKey("AddEntity");
if (pMapAddEntS && pMapAddEntD)
{
DevMsg("KeyValues(AddEntity)");
//KeyValues *pMapAddEnt = pMapAddEntD->GetFirstTrueSubKey();
KeyValues *pMapAddEnt = pMapAddEntD->GetFirstTrueSubKey();
while (pMapAddEntD)//if (pMapAddEnt)
{
if (AllocPooledString(pMapAddEnt->GetName()) == AllocPooledString("remove:sphere"))
{
DevMsg("remove:sphere \n");
GetMapAddEntity()->HandleRemoveEnitity(pMapAddEnt);
}
Vector SpawnVector = Vector(0, 0, 0);
QAngle SpawnAngle = QAngle(0, 0, 0);
KeyValues *pEntKeyOrig = pMapAddEnt->FindKey("origin");
KeyValues *pEntKeyAng = pMapAddEnt->FindKey("angle");
KeyValues *pEntKeyX = pMapAddEnt->FindKey("x");
KeyValues *pEntKeyY = pMapAddEnt->FindKey("y");
KeyValues *pEntKeyZ = pMapAddEnt->FindKey("z");
KeyValues *pEntKeyRoll = pMapAddEnt->FindKey("roll");
KeyValues *pEntKeyYaw = pMapAddEnt->FindKey("yaw");
KeyValues *pEntKeyPitch = pMapAddEnt->FindKey("pitch");
if (pEntKeyOrig && pEntKeyAng)
{
const char *position = pMapAddEnt->GetString("origin", "0 0 0");
UTIL_StringToVector(SpawnVector.Base(), position);
float tmp[2];
const char *angle = pMapAddEnt->GetString("angle", "0 0 0");
UTIL_StringToFloatArray(tmp, 2, angle);
SpawnAngle[PITCH] = tmp[0];
SpawnAngle[YAW] = tmp[1];
SpawnAngle[ROLL] = tmp[2];
}
if (pEntKeyX && pEntKeyY && pEntKeyZ && pEntKeyRoll && pEntKeyYaw && pEntKeyPitch)
{
SpawnVector.x = pMapAddEnt->GetFloat("x", SpawnVector.x);
SpawnVector.y = pMapAddEnt->GetFloat("y", SpawnVector.y);
SpawnVector.z = pMapAddEnt->GetFloat("z", SpawnVector.z);
SpawnAngle[PITCH] = pMapAddEnt->GetFloat("pitch", SpawnAngle[PITCH]);
SpawnAngle[YAW] = pMapAddEnt->GetFloat("yaw", SpawnAngle[YAW]);
SpawnAngle[ROLL] = pMapAddEnt->GetFloat("roll", SpawnAngle[ROLL]);
}
CBaseEntity *createEnt = CBaseEntity::CreateNoSpawn(pMapAddEnt->GetName(), SpawnVector, SpawnAngle);
KeyValues *pEntKeyLongRange = pMapAddEnt->FindKey("longrange");
KeyValues *pEntKeyFreeze = pMapAddEnt->FindKey("freeze");
KeyValues *pEntKeyVel = pMapAddEnt->FindKey("velocity");
KeyValues *pEntKeyValues = pMapAddEnt->FindKey("KeyValues");
KeyValues *pEntFlags = pMapAddEnt->FindKey("Flags");
if (createEnt)
{
if (pEntKeyLongRange)
createEnt->AddSpawnFlags(SF_NPC_LONG_RANGE);
if (pEntKeyFreeze)
{
createEnt->VPhysicsInitStatic();
createEnt->SetMoveType(MOVETYPE_PUSH);
}
if (pEntKeyVel)
{
Vector VelVector = Vector(0, 0, 0);
const char *vel = pMapAddEnt->GetString("velocity", "0 0 0");
UTIL_StringToVector(VelVector.Base(), vel);
createEnt->SetAbsVelocity(VelVector);
}
if (pEntKeyValues)
{
DevMsg("KeyValue for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntKeyValuesAdd = pEntKeyValues->GetFirstValue();
while (pEntKeyValuesAdd && createEnt)
{
if (AllocPooledString(pEntKeyValuesAdd->GetName()) == AllocPooledString("model"))
{
PrecacheModel(pEntKeyValuesAdd->GetString(""));
createEnt->SetModel(pEntKeyValuesAdd->GetString(""));
}
else
{
createEnt->KeyValue(pEntKeyValuesAdd->GetName(), pEntKeyValuesAdd->GetString(""));
}
pEntKeyValuesAdd = pEntKeyValuesAdd->GetNextValue();
}
}
if (pEntFlags)
{
DevMsg("Flag for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntFlagsAdd = pEntFlags->GetFirstValue();
while (pEntFlagsAdd && createEnt)
{
createEnt->AddSpawnFlags(pEntFlagsAdd->GetInt());
pEntFlagsAdd = pEntFlagsAdd->GetNextValue();
}
}
}
//createEnt->Activate();//Is this a good idea? Not sure!
//createEnt->Spawn();
DispatchSpawn(createEnt); //I derped
pMapAddEnt = pMapAddEnt->GetNextKey();//pMapAddEnt->GetNextTrueSubKey(); //Got to keep this!
if (pMapAddEnt == NULL)
break;
if (pMapAddEnt->GetNextKey() == NULL)
break;
if (pMapAddEnt->IsEmpty())
break;
if (pMapAddEnt->FindKey("break"))
break;
}
}
KeyValues *pMapAddEntM = pMapAddEntS->FindKey("ModifyEntity");
if (pMapAddEntS && pMapAddEntM)
{
DevMsg("KeyValues(ModifyEntity)");
KeyValues *pMapAddEnt = pMapAddEntM->GetFirstTrueSubKey();
while (pMapAddEntM)
{
/*if (AllocPooledString(pMapAddEnt->GetName()) == AllocPooledString("remove:sphere"))
{
DevMsg("remove:sphere \n");
GetMapAddEntity()->HandleRemoveEnitity(pMapAddEnt);
}*/
/*CBaseEntity *createEnt = CBaseEntity::CreateNoSpawn(pMapAddEnt->GetName(), SpawnVector, SpawnAngle);*/
DevMsg("pName is %s \n", pMapAddEnt->GetName());
const char *pName = pMapAddEnt->GetName();
DevMsg("pName is %s \n", pName);
CBaseEntity *modEnt = gEntList.FindEntityGenericWithin(NULL, pName, this->GetAbsOrigin(), MAX_TRACE_LENGTH);
//CBaseEntity *modEnt = gEntList.FindEntityByName(this, AllocPooledString(pMapAddEnt->GetName()));
if (modEnt)
{
DevMsg("modEnt is %s \n", pName);
DevMsg("modEnt is %s \n", modEnt->GetEntityName());
}
KeyValues *pEntKeyValues = pMapAddEnt->FindKey("KeyValues");
KeyValues *pEntFlags = pMapAddEnt->FindKey("Flags");
if (modEnt)
{
DevMsg("modEnt func \n");
if (pEntKeyValues)
{
DevMsg("KeyValue for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntKeyValuesAdd = pEntKeyValues->GetFirstValue();
while (pEntKeyValuesAdd && modEnt)
{
if (AllocPooledString(pEntKeyValuesAdd->GetName()) == AllocPooledString("model"))
{
PrecacheModel(pEntKeyValuesAdd->GetString(""));
modEnt->SetModel(pEntKeyValuesAdd->GetString(""));
}
else
{
modEnt->KeyValue(pEntKeyValuesAdd->GetName(), pEntKeyValuesAdd->GetString(""));
}
pEntKeyValuesAdd = pEntKeyValuesAdd->GetNextValue();
}
}
if (pEntFlags)
{
DevMsg("Flag for %s Found!\n", pMapAddEnt->GetName());
KeyValues *pEntFlagsAdd = pEntFlags->GetFirstValue();
while (pEntFlagsAdd && modEnt)
{
modEnt->AddSpawnFlags(pEntFlagsAdd->GetInt());
pEntFlagsAdd = pEntFlagsAdd->GetNextValue();
}
}
}
//createEnt->Activate();//Is this a good idea? Not sure!
//createEnt->Spawn();
//DispatchSpawn(createEnt); //I derped
pMapAddEnt = pMapAddEnt->GetNextKey();//pMapAddEnt->GetNextTrueSubKey(); //Got to keep this!
if (pMapAddEnt == NULL)
break;
if (pMapAddEnt->GetNextKey() == NULL)
break;
if (pMapAddEnt->IsEmpty())
break;
if (pMapAddEnt->FindKey("break"))
break;
}
}
}
}
}
UTIL_Remove(this);
break;
// }
// SetNextThink( gpGlobals->curtime + 1 ); // Think again in 1 second
}
}
SetNextThink(gpGlobals->curtime + 0.3f); // Think again in 1 second
}
LINK_ENTITY_TO_CLASS(mapadd_trig, CMapAddLabel);
// Start of our data description for the class
BEGIN_DATADESC(CMapAddLabel)
// Links our member variable to our keyvalue from Hammer
DEFINE_KEYFIELD(m_nTriggerArea, FIELD_FLOAT, "radius"),
// Links our member variable to our keyvalue from Hammer
DEFINE_KEYFIELD(m_bDeleteOnFire, FIELD_BOOLEAN, "deleteonfire"),
// Links our input name from Hammer to our input member function
//DEFINE_INPUTFUNC( FIELD_VOID, "RunLabel", InputRunLabel ),
// Links our output member to the output name used by Hammer
DEFINE_OUTPUT(m_OnTrigger, "OnTrigger"),
DEFINE_THINKFUNC(Think), // Register new think function
END_DATADESC()