コード例 #1
0
void Area_NoclipSpawn(ServerEntity_t *area) {
	area->v.movetype = MOVETYPE_PUSH;
	area->Physics.solid	= SOLID_NOT;

	Entity_SetModel(area, area->v.model);
	Entity_SetOrigin(area, area->v.origin);
}
コード例 #2
0
void Point_ParticleSpawn(ServerEntity_t *ent)
{
	if(ent->local.count <= 0)
		ent->local.count = 1;

	if(ent->Model.fScale <= 0)
		ent->Model.fScale = 7;

	Engine.Server_PrecacheResource(RESOURCE_SPRITE,ent->v.model);

	Entity_SetOrigin(ent,ent->v.origin);

	switch(ent->local.style)
	{
	case PARTICLE_DEFAULT:
		break;
	case PARTICLE_STACK:
		ent->v.velocity[2] += 15.0f;
		break;
	default:
		Engine.Con_Warning("Unknown particle type (%i)!\n",ent->local.style);
	}

	if(ent->local.dAttackFinished > 0)
	{
		ent->v.think		= Point_ParticleEmit;
		ent->v.dNextThink	= Server.dTime+ent->local.dAttackFinished;
	}
	else
		ent->v.use = Point_ParticleTrigger;
}
コード例 #3
0
void Point_MultiTriggerSpawn(ServerEntity_t *eEntity)
{
	if(!eEntity->v.targetname)
	{
		Engine.Con_Warning("No targetname set for point_multitrigger! (%i %i %i)\n",
			(int)eEntity->v.origin[0],
			(int)eEntity->v.origin[1],
			(int)eEntity->v.origin[2]);

		Entity_Remove(eEntity);
		return;
	}

	if(!eEntity->v.message)
	{
		Engine.Con_Warning("No message set for point_multitrigger! (%i %i %i)\n",
			(int)eEntity->v.origin[0],
			(int)eEntity->v.origin[1],
			(int)eEntity->v.origin[2]);

		Entity_Remove(eEntity);
		return;
	}

	if(!eEntity->local.style)
		eEntity->local.style = 0;

	eEntity->v.use = Point_MultiTriggerUse;

	Entity_SetOrigin(eEntity,eEntity->v.origin);
}
コード例 #4
0
// [4/7/2012] Renamed to Discus_SpawnProjectile ~hogsy
void Discus_SpawnProjectile(ServerEntity_t *ent,vec3_t org)
{
	ServerEntity_t *eDiscus;
	MathVector3f_t mvDirection;

	eDiscus = Entity_Spawn();

	eDiscus->v.cClassname = "discus";
	eDiscus->v.movetype = MOVETYPE_FLYBOUNCE;
	eDiscus->Physics.iSolid = SOLID_BBOX;
	eDiscus->v.effects = EF_MOTION_ROTATE;
	eDiscus->v.enemy = ent;

	// [4/8/2012] Updated to use owner instead ~hogsy
	eDiscus->local.eOwner = ent;

	eDiscus->local.hit = 0;

	Math_MVToVector(Weapon_Aim(ent), mvDirection);
	Math_VectorScale(mvDirection, 700.0f, eDiscus->v.velocity);

	Math_MVToVector(Math_VectorToAngles(eDiscus->v.velocity), eDiscus->v.angles);

	eDiscus->v.TouchFunction = Discus_ProjectileTouch;

	Entity_SetModel(eDiscus, "models/w_daedalus.md2");
	Entity_SetSizeVector(eDiscus, g_mvOrigin3f, g_mvOrigin3f);
	Entity_SetOrigin(eDiscus, org);

	Sound(ent,CHAN_WEAPON,"weapons/discus/discusthrow.wav",255,ATTN_NORM);
}
コード例 #5
0
void Inmater_Spawn(ServerEntity_t *eInmater)
{
	Server_PrecacheModel(MODEL_INMATER_BODY);

	Entity_SetPhysics(eInmater, SOLID_SLIDEBOX, 3.0f, 4.5f);

	eInmater->Monster.type = MONSTER_INMATER;
	eInmater->Monster.Frame = Inmater_Think;
	eInmater->Monster.Pain = Inmater_Pain;

	Entity_SetKilledFunction(eInmater, Inmater_Die);

	eInmater->v.takedamage = true;
	eInmater->v.movetype = MOVETYPE_STEP;
	eInmater->v.health = INMATER_MAX_HEALTH;
	eInmater->v.netname = "Inmater";
	eInmater->v.frame = 0;
	eInmater->local.maxhealth = INMATER_MAX_HEALTH;

	AI_SetState(eInmater, AI_STATE_AWAKE);
	AI_SetThink(eInmater, AI_THINK_IDLE);

	Entity_SetModel(eInmater, MODEL_INMATER_BODY);
	Entity_SetSize(eInmater, -16.0f, -16.0f, -24.0f, 16.0f, 16.0f, 32.0f);
	Entity_SetOrigin(eInmater, eInmater->v.origin);

	Entity_DropToFloor(eInmater);
}
コード例 #6
0
bool Entity_DropToFloor(ServerEntity_t *eEntity)
{
	MathVector3f_t vEnd;
	trace_t	trGround;

	Math_VectorCopy(eEntity->v.origin, vEnd);

	vEnd[2] -= 256;

	trGround = Engine.Server_Move(eEntity->v.origin, eEntity->v.mins, eEntity->v.maxs, vEnd, false, eEntity);
	if (trGround.fraction == 1 || trGround.bAllSolid)
	{
		Engine.Con_Warning("Entity is stuck in world! (%s) (%i %i %i)\n", eEntity->v.cClassname,
			(int)eEntity->v.origin[0],
			(int)eEntity->v.origin[1],
			(int)eEntity->v.origin[2]);
		return false;
	}

	// Use SetOrigin so that it's automatically linked.
	Entity_SetOrigin(eEntity, trGround.endpos);

	Entity_AddFlags(eEntity, FL_ONGROUND);

	eEntity->v.groundentity = trGround.ent;

	return true;
}
コード例 #7
0
void Area_RotateSpawn(ServerEntity_t *area) {
	if(!area->local.speed) {
        area->local.speed = 100;
    }

#if 0
	// [26/7/2012] Check our spawn flags ~hogsy
	if(area->local.style == STYLE_ROTATE_DOOR)
	{
		if(area->v.spawnflags & SPAWNFLAG_ROTATE_REVERSE)
		{
		}

		if(area->v.spawnflags & SPAWNFLAG_ROTATE_X)
			area->v.movedir[0] = 1.0f;
		else if(area->v.spawnflags & SPAWNFLAG_ROTATE_Y)
			area->v.movedir[1] = 1.0f;
		else
			area->v.movedir[2] = 1.0f;

		Math_VectorCopy(area->v.angles,area->local.pos1);
		area->local.pos2[0] = area->local.pos1[0]+area->v.movedir[0]*area->local.distance;

		area->v.TouchFunction = Area_RotateTouch;

		area->local.dMoveFinished = 0;
	}
	else
#endif
	{
		if(area->v.spawnflags & SPAWNFLAG_ROTATE_REVERSE) {
            area->local.speed *= -1;
        }

		if(area->v.spawnflags & SPAWNFLAG_ROTATE_X) {
            area->v.avelocity.x = area->local.speed;
        }

		if(area->v.spawnflags & SPAWNFLAG_ROTATE_Y) {
            area->v.avelocity.y = area->local.speed;
        }

		if(area->v.spawnflags & SPAWNFLAG_ROTATE_Z) {
            area->v.avelocity.z = area->local.speed;
        }
	}

	Entity_SetBlockedFunction(area, Area_RotateBlocked);

	area->v.movetype    = MOVETYPE_PUSH;
	area->v.think       = Area_RotateThink;
	area->v.nextthink  = Server.time + 1000000000.0;	// TODO: This is a hack. A dirty filthy hack. Curse it and its family!

	area->Physics.solid = SOLID_BSP;

	Entity_SetModel(area,area->v.model);
	Entity_SetSizeVector(area,area->v.mins,area->v.maxs);
	Entity_SetOrigin(area,area->v.origin);
}
コード例 #8
0
void Point_FlareSpawn(ServerEntity_t *eFlare)
{
	Engine.Server_PrecacheResource(RESOURCE_SPRITE,eFlare->v.model);

	Entity_SetOrigin(eFlare,eFlare->v.origin);

//	Flare(ent->v.origin,ent->local.red,ent->local.green,ent->local.blue,ent->alpha,ent->local.scale,ent->v.model);
}
コード例 #9
0
void Area_ButtonSpawn(ServerEntity_t *eArea)
{
	float	fDist;
	PLVector3D vMoveDir;

	if(!eArea->v.spawnflags)
		eArea->v.spawnflags = 0;

	if(eArea->local.cSoundStart)
		Server_PrecacheSound(eArea->local.cSoundStart);
	if (eArea->local.sound_stop)
		Server_PrecacheSound(eArea->local.sound_stop);
	if(eArea->local.cSoundMoving)
		Server_PrecacheSound(eArea->local.cSoundMoving);
	if(eArea->local.cSoundReturn)
		Server_PrecacheSound(eArea->local.cSoundReturn);

	eArea->v.movetype = MOVETYPE_PUSH;

	eArea->Physics.solid = SOLID_BSP;

	// [18/5/2013] Changed to use ! check instead since it's safer here ~hogsy
	if(eArea->local.lip == 0) {
        eArea->local.lip = 4;
    }

	eArea->local.value = 0;
	eArea->local.flags = STATE_BOTTOM;

	Entity_SetModel(eArea,eArea->v.model);
	Entity_SetOrigin(eArea,eArea->v.origin);
	Entity_SetSizeVector(eArea,eArea->v.mins,eArea->v.maxs);

    eArea->local.pos1 = eArea->v.origin;

	Area_SetMoveDirection(eArea->v.angles,eArea->v.movedir);

    vMoveDir.x = std::fabs(eArea->v.movedir.x);
    vMoveDir.y = std::fabs(eArea->v.movedir.y);
    vMoveDir.z = std::fabs(eArea->v.movedir.z);

	fDist = vMoveDir.x*eArea->v.size.x+
			vMoveDir.y*eArea->v.size.y+
			vMoveDir.z*eArea->v.size.z-
			eArea->local.lip;

	Math_VectorMake(eArea->local.pos1,fDist,eArea->v.movedir,&eArea->local.pos2);

	if(eArea->v.spawnflags != 32) { // Toggle
        eArea->v.TouchFunction = Area_ButtonTouch;
    }

	if (eArea->local.damage) {
        Entity_SetBlockedFunction(eArea, Area_ButtonBlocked);
    }

	eArea->v.use = Area_ButtonUse;
}
コード例 #10
0
void Area_KillSpawn(ServerEntity_t *area) {
	area->Physics.solid = SOLID_TRIGGER;

	Entity_SetModel(area, area->v.model);
	Entity_SetOrigin(area, area->v.origin);
	Entity_SetTouchFunction(area, Area_KillTouch);

	area->v.model = 0;
}
コード例 #11
0
void Point_EffectSpawn(ServerEntity_t *eEntity)
{
	if(eEntity->v.noise)
		Server_PrecacheSound(eEntity->v.noise);

	eEntity->v.use = Point_EffectUse;

	Entity_SetOrigin(eEntity,eEntity->v.origin);
}
コード例 #12
0
void Area_CalculateMovementDone(ServerEntity_t *area) {
	Entity_SetOrigin(area, area->local.finaldest);

	area->v.velocity = 0;

	if(area->local.think1) {
        area->local.think1(area, area);
    }
}
コード例 #13
0
void Point_DynamicLight(ServerEntity_t *ent)
{
	Entity_SetOrigin(ent,ent->v.origin);

	ent->v.effects = EF_LIGHT_GREEN;

	ent->v.think		= Point_DynamicLightThink;
	ent->v.dNextThink	= Server.dTime+0.1;
}
コード例 #14
0
void Area_PlatformSpawn(ServerEntity_t *area) {
	if(!area->v.spawnflags) {
        area->v.spawnflags = 0;
    }

	if(area->local.cSoundStart) {
        Server_PrecacheSound(area->local.cSoundStart);
    }
	if (area->local.sound_stop) {
        Server_PrecacheSound(area->local.sound_stop);
    }
	if(area->local.cSoundMoving) {
        Server_PrecacheSound(area->local.cSoundMoving);
    }
	if(area->local.cSoundReturn) {
        Server_PrecacheSound(area->local.cSoundReturn);
    }

	area->v.movetype = MOVETYPE_PUSH;

	area->Physics.solid = SOLID_BSP;

	if(area->local.count == 0) {
        area->local.count = 100;
    }
	if(area->local.wait == 0) {
        area->local.wait = 3;
    }
	if(area->local.damage == 0) {
        area->local.damage = 20;
    }

	area->local.value = 0;
	area->local.flags = STATE_BOTTOM;

	Entity_SetModel(area,area->v.model);
	Entity_SetOrigin(area,area->v.origin);
	Entity_SetSizeVector(area,area->v.mins,area->v.maxs);

    area->local.pos1 = area->v.origin;
	Area_SetMoveDirection(area->v.angles, area->v.movedir);

	float dist = (float)area->local.count;

	Math_VectorMake(area->local.pos1, dist, area->v.movedir, &area->local.pos2);

	if(area->v.spawnflags != 32) { // Toggle
        area->v.TouchFunction = Area_PlatformTouch;
    }

	if (area->local.damage) {
        Entity_SetBlockedFunction(area, Area_PlatformBlocked);
    }

	area->v.use = Area_PlatformUse;
}
コード例 #15
0
void Area_ClimbSpawn(ServerEntity_t *area) {
	Area_SetMoveDirection(area->v.angles, area->v.movedir);
	area->v.TouchFunction = Area_ClimbTouch;

	area->Physics.solid = SOLID_TRIGGER;

	Entity_SetModel(area,area->v.model);
	Entity_SetOrigin(area,area->v.origin);
	area->v.model = 0;
}
コード例 #16
0
void Point_NullSpawn(ServerEntity_t *eEntity)
{
	// Remove if there is no name given!
	if (!eEntity->v.cName || (eEntity->v.cName[0] == ' '))
	{
		Entity_Remove(eEntity);
		return;
	}

	Entity_SetOrigin(eEntity,eEntity->v.origin);
}
コード例 #17
0
// Just for the compiler ~eukara
void Area_DetailSpawn(ServerEntity_t *area) {
	if(!area->v.model) {
		g_engine->Con_Warning("Area entity with no model!\n");

		Entity_Remove(area);
		return;
	}

	Entity_SetModel(area,area->v.model);
	Entity_SetOrigin(area,area->v.origin);
}
コード例 #18
0
// [4/8/2012] Renamed to SideWinder_SpawnMissle ~hogsy
void SideWinder_SpawnMissle(edict_t *ent,float fSpeed,float ox)
{
	// [26/2/2012] Revised and fixed ~hogsy
	vec3_t	vOrg;
	edict_t *eMissile = Entity_Spawn();

	/*	TODO:
			Spawn a flare at our position too
		~hogsy
	*/

	eMissile->v.cClassname	= "sidewindermissile";
	eMissile->v.movetype	= MOVETYPE_FLYMISSILE;
	eMissile->v.effects		= EF_PARTICLE_SMOKE|EF_DIMLIGHT;

	eMissile->Physics.iSolid	= SOLID_BBOX;
	eMissile->Physics.eIgnore	= ent;

	eMissile->local.speed	= SIDEWINDER_MAXSPEED;
	eMissile->local.eOwner	= ent;
	eMissile->local.count	= 0;
	// [4/8/2012] Change our speed depending on what contents we're within ~hogsy
	eMissile->local.speed	= fSpeed;

	Math_VectorScale(Engine.Aim(ent),eMissile->local.speed,eMissile->v.velocity);

	Math_AngleVectors(ent->v.v_angle,
		// [4/8/2012] Set up our angle vectors ~hogsy
		eMissile->v.vForward,
		eMissile->local.vRight,
		eMissile->local.vUp);
	Math_VectorCopy(ent->v.v_angle,eMissile->v.angles);

	Entity_SetModel(eMissile,"models/sidewinder_missile.md2");

	Math_VectorCopy(ent->v.origin,vOrg);

	vOrg[0] += eMissile->v.vForward[0]*8+eMissile->local.vRight[0]*ox;
	vOrg[1] += eMissile->v.vForward[1]*8+eMissile->local.vRight[1]*ox;
	vOrg[2] += eMissile->v.vForward[2]*24;

	Entity_SetSizeVector(eMissile,mv3Origin,mv3Origin);
	Entity_SetOrigin(eMissile,vOrg);

	// [4/8/2012] Time at which we'll be removed if nothing hit ~hogsy
	eMissile->local.fSpawnDelay = (float)(Server.dTime+8.0);

	eMissile->v.TouchFunction	= SideWinder_MissileExplode;
	eMissile->v.dNextThink		= Server.dTime+0.05;
	eMissile->v.think			= SideWinder_Think;

	// [4/8/2012] Moved so we do this last! ~hogsy
	Engine.LinkEntity(eMissile,false);
}
コード例 #19
0
void Point_DamageSpawn(ServerEntity_t *eEntity)
{
	if(!eEntity->local.iDamage)
		eEntity->local.iDamage = 10;

	if(!eEntity->local.style)
		eEntity->local.style = DAMAGE_TYPE_NORMAL;

	eEntity->v.use = Point_DamageUse;

	Entity_SetOrigin(eEntity,eEntity->v.origin);
}
コード例 #20
0
void Area_PushSpawn(ServerEntity_t *area) {
	if(!area->local.speed)
		area->local.speed = 500.0f;

	Area_SetMoveDirection(area->v.angles, area->v.movedir);

	area->v.TouchFunction = Area_PushTouch;
	area->Physics.solid	= SOLID_TRIGGER;

	Entity_SetModel(area,area->v.model);
	Entity_SetOrigin(area,area->v.origin);
	Entity_SetSizeVector(area,area->v.mins,area->v.maxs);

	area->v.model = 0;
}
コード例 #21
0
void C4Vizatergo_PrimaryAttack(ServerEntity_t *eOwner)
{
	MathVector3f_t vOrigin;
	MathVector3f_t mvDirection;
	ServerEntity_t *c4ball = Entity_Spawn();

	Sound(eOwner,CHAN_AUTO,"weapons/c4/c4fire.wav",255,ATTN_NORM);
	Sound(eOwner,CHAN_AUTO,"weapons/c4/c4cock.wav",255,ATTN_NORM);

	Weapon_Animate(eOwner,C4Animation_Fire1);
	Weapon_ViewPunch(eOwner, 7, true);

	eOwner->v.iPrimaryAmmo = eOwner->local.iC4Ammo -= 1;

	c4ball->v.cClassname	= "c4ball";
	c4ball->v.movetype		= MOVETYPE_BOUNCE;

	c4ball->local.style = AMMO_C4BOMBS;		// Cleaner way to tell if this can explode or not :V ~hogsy
	c4ball->local.iC4Ammo = 1;				// [11/8/2013] Since style is used for other shit too LAWL ~hogsy
	c4ball->local.eOwner = eOwner;

	// Set the physical properties.
	c4ball->Physics.iSolid = SOLID_BBOX;
	c4ball->Physics.fMass = 0.9f;
	c4ball->Physics.eIgnore = eOwner;
	c4ball->Physics.fGravity = SERVER_GRAVITY;

	Math_MVToVector(Weapon_Aim(eOwner), mvDirection);
	Math_VectorScale(mvDirection, C4VIZATERGO_MAX_RANGE, c4ball->v.velocity);

	c4ball->v.velocity[pY] += 20.0f;

	Math_MVToVector(Math_VectorToAngles(c4ball->v.velocity),c4ball->v.angles);
	Math_VectorCopy(eOwner->v.origin,vOrigin);

	c4ball->v.TouchFunction = C4Vizatergo_C4BallTouch;
	c4ball->v.think = C4Vizatergo_Think;
	c4ball->v.dNextThink = Server.dTime + 2.5;

	Entity_SetModel(c4ball,"models/c4ammo.md2");
	Entity_SetSizeVector(c4ball,g_mvOrigin3f,g_mvOrigin3f);
	Entity_SetOrigin(c4ball,vOrigin);

	if(eOwner->local.attackb_finished > Server.dTime)	// No attack boost...
		eOwner->local.dAttackFinished = Server.dTime+0.6;
	else
		eOwner->local.dAttackFinished = Server.dTime+1.2;
}
コード例 #22
0
void Area_PushableSpawn(ServerEntity_t *area) {
	// TODO: If designed to be breakable, make breakable? ~eukara
/*	if (area->v.health) {
		Area_BreakableSpawn(area);
	}
*/
	//area->Physics.fGravity = cv_server_gravity.value;
    area->v.angles = 0;

	area->Physics.solid = SOLID_SLIDEBOX;
	area->v.movetype = MOVETYPE_STEP;
	Entity_SetModel(area,area->v.model);
	Entity_SetOrigin(area,area->v.origin);
	Entity_SetSizeVector(area,area->v.mins,area->v.maxs);

	area->v.TouchFunction = Area_PushableTouch;
	area->v.think = Area_PushableThink;
}
コード例 #23
0
void Area_TriggerSpawn(ServerEntity_t *area) {
	if(!area->v.targetname) {
		g_engine->Con_Warning("'targetname' not set for trigger! (%i %i %i)\n",
			(int)area->v.origin.x,
			(int)area->v.origin.y,
			(int)area->v.origin.z);
		return;
	}

	area->v.TouchFunction = Area_TriggerTouch;

	area->Physics.solid = SOLID_TRIGGER;

	Entity_SetModel(area,area->v.model);
	Entity_SetOrigin(area,area->v.origin);

	area->v.model = 0;
}
コード例 #24
0
void Area_ChangeLevel(ServerEntity_t *area) {
	if(!area->v.targetname) {
		g_engine->Con_Warning("No targetname set for area_changelevel! (%i %i %i)\n",
			(int)area->v.origin.x,
			(int)area->v.origin.y,
			(int)area->v.origin.z);
		return;
	}

	area->v.TouchFunction	= Area_ChangeLevelTouch;

	area->Physics.solid = SOLID_TRIGGER;

	Entity_SetModel(area,area->v.model);
	Entity_SetOrigin(area,area->v.origin);

	area->v.model = 0;
}
コード例 #25
0
void Point_MonsterSpawn(ServerEntity_t *eMonster)
{
	if (cvServerMonsters.value <= 0)
	{
		Entity_Remove(eMonster);
		return;
	}

	// Set its origin and angles...
	Entity_SetOrigin(eMonster, eMonster->v.origin);
	Entity_SetAngles(eMonster, eMonster->v.angles);

	Server.iMonsters++;

	switch(eMonster->local.style)
	{
#ifdef GAME_OPENKATANA
	case MONSTER_PRISONER:
		eMonster->v.cClassname = "monster_prisoner";
		Prisoner_Spawn(eMonster);
		break;
	case MONSTER_LASERGAT:
		eMonster->v.cClassname = "monster_lasergat";
		LaserGat_Spawn(eMonster);
		break;
	case MONSTER_INMATER:
		eMonster->v.cClassname = "monster_inmater";
		Inmater_Spawn(eMonster);
		break;
#elif GAME_ADAMAS
	case MONSTER_HURLER:
		eMonster->v.cClassname = "monster_hurler";
		Hurler_Spawn(eMonster);
		break;
#endif
	default:
		Engine.Con_Warning("Invalid monster type (%i)!\n",eMonster->local.style);

		// Reduce the monster count. ~hogsy
		Server.iMonsters--;

		Entity_Remove(eMonster);
	}
}
コード例 #26
0
void Area_WallSpawn(ServerEntity_t *area) {
	if(!area->v.model) {
		g_engine->Con_Warning("Area entity with no model!\n");

		Entity_Remove(area);
		return;
	}

	if(area->v.name) {
        area->v.use = Area_WallUse;
    }

	area->v.movetype = MOVETYPE_PUSH;

	area->local.value = 1;

	Entity_SetModel(area,area->v.model);
	Entity_SetOrigin(area,area->v.origin);
}
コード例 #27
0
void Point_TimedTriggerSpawn(ServerEntity_t *eEntity)
{
	if(!eEntity->v.targetname)
	{
		Engine.Con_Warning("No targetname set for point_timedtrigger (%f %f %f)!\n",
			eEntity->v.origin[0],
			eEntity->v.origin[1],
			eEntity->v.origin[2]);

		Entity_Remove(eEntity);
		return;
	}

	eEntity->v.use = Point_TimedTriggerUse;

	if(eEntity->v.spawnflags & 32)
		eEntity->v.use(eEntity);

	Entity_SetOrigin(eEntity,eEntity->v.origin);
}
コード例 #28
0
void Hermes_PrimaryAttack(edict_t *ent)
{
	float	*dir;
	edict_t *cloud = Entity_Spawn();

	cloud->v.cClassname = "cloud";
	cloud->v.movetype	= MOVETYPE_FLYMISSILE;
	cloud->Physics.iSolid		= SOLID_TRIGGER;

	cloud->local.hit	= 10;
	cloud->local.eOwner	= ent;

	//SetSize(cloud,-16,-16,-16,16,16,16);
	Entity_SetOrigin(cloud,ent->v.origin);

	Engine.MakeVectors(ent->v.v_angle);

	dir = Engine.Aim(ent);
	cloud->v.velocity[0]	= dir[0]*100;
	cloud->v.velocity[1]	= dir[1]*100;
	cloud->v.velocity[2]	= dir[2]*100;
	cloud->v.dNextThink		= Server.dTime+0.3;
	cloud->v.think			= Hermes_CloudThink;
	cloud->v.TouchFunction	= HermesCloudTouch;

	Math_VectorAddValue(cloud->v.avelocity,300.0f,cloud->v.avelocity);

	if(ent->local.attackb_finished > Server.dTime)	// No attack boost...
		ent->local.dAttackFinished = Server.dTime+0.35;
	else
		ent->local.dAttackFinished = Server.dTime+0.7;

#if 0
	if(rand()%3 == 1)
		//Weapon_Animate(ent,FALSE,12,17,0.07f,10,19,0,FALSE);
	else if(rand()%3 == 2)
		//Weapon_Animate(ent,FALSE,18,23,0.07f,10,19,0,FALSE);
	else
		//Weapon_Animate(ent,FALSE,24,29,0.07f,10,19,0,FALSE);
#endif
}
コード例 #29
0
void Point_LogicSpawn(ServerEntity_t *eEntity)
{
	if(!eEntity->local.cTarget1)
	{
		Engine.Con_Warning("No target1 set for point_logic! (%i %i %i)\n",
			(int)eEntity->v.origin[0],
			(int)eEntity->v.origin[1],
			(int)eEntity->v.origin[2]);

		Entity_Remove(eEntity);
		return;
	}

	if(!eEntity->local.cTarget2 && eEntity->local.style != 3)
	{
		Engine.Con_Warning("No target2 set for point_logic! (%i %i %i)\n",
			(int)eEntity->v.origin[0],
			(int)eEntity->v.origin[1],
			(int)eEntity->v.origin[2]);

		Entity_Remove(eEntity);
		return;
	}

	if(!eEntity->local.style)
		eEntity->local.style = 1;

	if(!eEntity->local.dWait)
		eEntity->local.dWait = 1;

	if(eEntity->local.style != 3)
		eEntity->local.iValue = 0;
	else
		eEntity->local.iValue = 1;

	Entity_SetOrigin(eEntity,eEntity->v.origin);

	eEntity->v.think		= Point_LogicThink;
	eEntity->v.dNextThink	= Server.dTime+1.0f;
}
コード例 #30
0
void Point_MessageSpawn(ServerEntity_t *eEntity)
{
	if(!eEntity->v.message)
	{
		Engine.Con_Warning("Parameter 'message' not set! (%s) (%i %i %i)\n",
			eEntity->v.cClassname,
			(int)eEntity->v.origin[0],
			(int)eEntity->v.origin[1],
			(int)eEntity->v.origin[2]);

		Entity_Remove(eEntity);
		return;
	}

	Entity_SetOrigin(eEntity,eEntity->v.origin);

	switch(eEntity->local.style)
	{
	case POINT_MSG_CENTER:
		eEntity->v.use = Point_MessageCenter;
		break;
	case POINT_MSG_LOCALMESSAGE:
		eEntity->v.use = Point_MessageLocal;
		break;
	case POINT_MSG_SERVERMESSAGE:
		eEntity->v.use = Point_MessageServer;
		break;
	case POINT_MSG_INFOMESSAGE:
		eEntity->v.use = Point_InfoMessage;
		break;
	default:
		Engine.Con_Warning("Parameter 'style' not set! (%s) (%i %i %i)\n",
			eEntity->v.cClassname,
			(int)eEntity->v.origin[0],
			(int)eEntity->v.origin[1],
			(int)eEntity->v.origin[2]);

		Entity_Remove(eEntity);
	}
}