#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((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(mapaddEnt); CMapAdd *mapaddEnt2 = dynamic_cast(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()