//========================================================= // Crea un Jefe. //========================================================= CAI_BaseNPC *CDirectorSpawn::MakeBoss() { // Desactivado if ( Disabled ) return NULL; // Seleccionamos una clase de NPC para crear. const char *pClass = SelectRandomBoss(); CAI_BaseNPC *pNPC = VerifyClass(pClass); // Ocurrio algún problema. if ( !pNPC ) { Warning("[DIRECTOR SPAWN] Ha ocurrido un problema al intentar crear un Jefe. \r\n"); return NULL; } Vector origin; // Verificamos si podemos crear el Grunt en el radio. if ( !CanMakeNPC(pNPC, &origin) ) return NULL; // Lugar de creación. pNPC->SetAbsOrigin(origin); // Nombre del Jefe. pNPC->SetName(MAKE_STRING(BOSS_NAME)); QAngle angles = GetAbsAngles(); angles.x = 0.0; angles.z = 0.0; pNPC->SetAbsAngles(angles); // Tiene que caer al suelo. pNPC->AddSpawnFlags(SF_NPC_FALL_TO_GROUND); // Creamos al Jefe, le decimos quien es su dios (creador) y lo activamos. DispatchSpawn(pNPC); pNPC->SetOwnerEntity(this); DispatchActivate(pNPC); // Al parecer se atoro en una pared. if ( !PostSpawn(pNPC) ) return NULL; // Debe conocer la ubicación del jugador (Su enemigo) CIN_Player *pPlayer = UTIL_GetRandomInPlayer(); if ( pPlayer ) { // Ataca al jugador YA pNPC->SetEnemy(pPlayer); pNPC->UpdateEnemyMemory(pPlayer, pPlayer->GetAbsOrigin()); } return pNPC; }
JNIEXPORT jboolean VerifyClassCodes(JNIEnv *env, jclass cb, char *buffer, jint len) { return VerifyClass(env, cb, buffer, len); }
CVMBool CVMclassVerify(CVMExecEnv* ee, CVMClassBlock* cb, CVMBool isRedefine) { #ifdef CVM_TRUSTED_CLASSLOADERS CVMcbSetRuntimeFlag(cb, VERIFIED); return CVM_TRUE; #else if (CVMcbCheckRuntimeFlag(cb, VERIFIED)) { return CVM_TRUE; } CVMtraceClassLoading(("CL: Verifying class %C.\n", cb)); /* Do some quick integrity tests on interfaces. */ if (CVMcbIs(cb, INTERFACE)) { /* Interface's superclass must be java/lang/Object. */ CVMassert((CVMcbSuperclass(cb) != NULL) && (CVMcbSuperclass(cb) == CVMsystemClass(java_lang_Object))); /* The following check for interface methods is not needed. The * method modifier flags are checked by the class format checker * (in verifyformat.c). A ClassFormatError instead of VerifyError * is thrown for incorrect flags. */ #if 0 for (i = 0; i < CVMcbMethodCount(cb); i++) { CVMMethodBlock* mb = CVMcbMethodSlot(cb, i); if (CVMmbIs(mb, STATIC)) { if (!CVMtypeidIsStaticInitializer(CVMmbNameAndTypeID(mb))) { /* Only internal interface methods can be static */ CVMthrowVerifyError( ee, "Illegal static method %M in interface %C", mb, cb); goto failed; } } } #endif } else if (CVMcbSuperclass(cb) != NULL) { /*EMPTY*/ /* Ensuring that final classes are not subclassed, and that * final methods are not overridden. * DEFERRED into PrepareMethods */ } else if (cb != CVMsystemClass(java_lang_Object)) { CVMthrowVerifyError(ee, "Class %C does not have superclass", cb); goto failed; } { jint result; char message[256]; message[0] = 0; result = VerifyClass(ee, cb, message, sizeof(message), isRedefine); if (result < 0) { if (!CVMexceptionOccurred(ee)) { if (result == -1) { CVMthrowVerifyError(ee, "%s", message); } else if (result == -2) { CVMthrowClassFormatError(ee, "%s", message); } } goto failed; } } CVMcbSetRuntimeFlag(cb, ee, VERIFIED); CVMtraceClassLoading(("CL: Done verifying class %C.\n", cb)); return CVM_TRUE; failed: CVMtraceClassLoading(("CL: Failed verifying class %C.\n", cb)); return CVM_FALSE; #endif /* CVM_TRUSTED_CLASSLOADERS */ }
//========================================================= // Crea un Zombi. //========================================================= CAI_BaseNPC *CDirectorSpawn::MakeNPC(bool Horde, bool disclosePlayer, bool checkRadius) { // Desactivado // Esta entidad no funciona en Multiplayer. if ( Disabled ) return NULL; // Seleccionamos una clase de NPC para crear. const char *pClass = SelectRandom(); CAI_BaseNPC *pNPC = VerifyClass(pClass); // Emm... ¿puso todas las clases en "no crear"? :genius: if ( !pNPC ) { Warning("[DIRECTOR SPAWN] Ha ocurrido un problema al intentar crear un NPC. \r\n"); return NULL; } Vector origin; // Verificamos si podemos crear un zombi en el radio. if ( checkRadius ) { if ( !CanMakeNPC(pNPC, &origin) ) return NULL; } // Lugar de creación. pNPC->SetAbsOrigin(origin); QAngle angles = GetAbsAngles(); angles.x = 0.0; angles.z = 0.0; pNPC->SetAbsAngles(angles); // Tiene que caer al suelo. pNPC->AddSpawnFlags(SF_NPC_FALL_TO_GROUND); // Su cuerpo tiene que desaparecer al morir. pNPC->AddSpawnFlags(SF_NPC_FADE_CORPSE); // Creamos al NPC, le decimos quien es su dios (creador) y lo activamos. DispatchSpawn(pNPC); pNPC->SetOwnerEntity(this); DispatchActivate(pNPC); // Al parecer se atoro en una pared. if ( !PostSpawn(pNPC) ) return NULL; // Nombre del NPC. pNPC->SetName(MAKE_STRING(CHILD_NAME)); #ifdef APOCALYPSE // Skin al azar. if ( pNPC->GetClassname() == "npc_zombie" ) pNPC->m_nSkin = random->RandomInt(1, 4); #endif // Es un NPC para la horda ¡woot! if ( Horde ) { AddHealth(pNPC); #ifdef APOCALYPSE // Más rápido. pNPC->SetAddAccel(40); // No colisiona con otros NPC's. (Zombis) if ( random->RandomInt(1, 4) == 2 ) pNPC->SetCollisionGroup(COLLISION_GROUP_SPECIAL_NPC); #endif } // Debe conocer la ubicación del jugador (Su enemigo) if ( disclosePlayer ) { CIN_Player *pPlayer = UTIL_GetRandomInPlayer(); if ( pPlayer ) pNPC->UpdateEnemyMemory(pPlayer, pPlayer->GetAbsOrigin()); } Childs++; ChildsAlive++; LastSpawn = gpGlobals->curtime; OnSpawnNPC.FireOutput(pNPC, this); return pNPC; }