Ejemplo n.º 1
0
void Point_LogicThink(ServerEntity_t *eEntity)
{
	ServerEntity_t *eEnt1, *eEnt2 = NULL;

	eEnt1 = Engine.Server_FindEntity(Server.eWorld,eEntity->local.cTarget1,false);
	if(!eEnt1)
	{
		Engine.Con_Warning("Point_Logic: Can't find Target1!\n");
		return;
	}

	if(eEntity->local.style < 3)
	{
		eEnt2 = Engine.Server_FindEntity(Server.eWorld,eEntity->local.cTarget2,false);
		if(!eEnt2)
		{
			Engine.Con_Warning("Point_Logic: Can't find Target2!\n");
			return;
		}
	}

	switch(eEntity->local.style)
	{
	case 1:
		if(eEnt1->local.iValue && eEnt2->local.iValue)
		{
			if(eEntity->v.targetname && !eEntity->local.iValue)
				UseTargets(eEntity,eEntity->local.activator);

			eEntity->local.iValue = 1;
		}
		else
			eEntity->local.iValue = 0;
		break;
	case 2:
		if(eEnt1->local.iValue || eEnt2->local.iValue)
		{
			if(eEntity->v.targetname && eEntity->local.iValue)
				UseTargets(eEntity,eEntity->local.activator);

			eEntity->local.iValue = 1;
		}
		else
			eEntity->local.iValue = 0;
		break;
	case 3:
		if(!eEnt1->local.iValue)
			eEntity->local.iValue = 1;
		else
			eEntity->local.iValue = 0;
		break;
	}

	eEntity->v.dNextThink = Server.dTime+eEntity->local.dWait;
}
Ejemplo n.º 2
0
void Point_LightstyleDie(ServerEntity_t *eEntity)
{
	Engine.LightStyle(eEntity->local.style,"a");

	if(eEntity->v.targetname)
		UseTargets(eEntity, eEntity);
}
Ejemplo n.º 3
0
void Area_ButtonWait(ServerEntity_t *eArea, ServerEntity_t *eOther)
{
	UseTargets(eArea, eOther);

	eArea->local.flags = STATE_TOP;
	eArea->local.value = 1;

	eArea->v.think		= Area_ButtonReturn;
	eArea->v.nextthink	= eArea->v.ltime + 4;

	if (eArea->local.sound_stop)
		Sound(eArea, CHAN_VOICE, eArea->local.sound_stop, 255, ATTN_NORM);
}
Ejemplo n.º 4
0
void Area_TriggerTouch(ServerEntity_t *area, ServerEntity_t *other) {
	if(area->v.nextthink || ((area->Monster.type != MONSTER_PLAYER) && other->v.health <= 0)) {
        return;
    }

	area->v.nextthink = Server.time + area->local.wait;

	UseTargets(area,other);

	if(area->local.wait < 0) {
        Entity_Remove(area);
    }
}
Ejemplo n.º 5
0
void Point_MultiTriggerUse(ServerEntity_t *eEntity)
{
	int iRand;

	if(eEntity->local.style)
	{
		iRand = rand();

		if(iRand < 0.5)
			UseTargets(eEntity, eEntity);
		else
		{
			strcpy(eEntity->v.targetname, eEntity->v.message);
			UseTargets(eEntity, eEntity);
		}
	}
	else
	{
		UseTargets(eEntity, eEntity);
		strcpy(eEntity->v.targetname, eEntity->v.message);
		UseTargets(eEntity, eEntity);
	}
}
Ejemplo n.º 6
0
void Area_DoorWait(ServerEntity_t *door, ServerEntity_t *other) {
	UseTargets(door, other);

	door->local.flags = STATE_TOP;

	if (door->local.wait >= 0) {
        door->v.nextthink = Server.time + door->local.wait;
    }

	door->v.think = Area_DoorReturn;

	if (door->local.sound_stop) {
        Sound(door, CHAN_VOICE, door->local.sound_stop, 255, ATTN_NORM);
    }
}
Ejemplo n.º 7
0
void Area_PlatformWait(ServerEntity_t *area, ServerEntity_t *other) {
	UseTargets(area, other);

	area->local.flags = STATE_TOP;
	area->local.value = 1;

	area->v.think = Area_PlatformReturn;

	if(area->local.wait >= 0) {
        area->v.nextthink = area->v.ltime + area->local.wait;
    }

	if (area->local.sound_stop) {
        Sound(area, CHAN_VOICE, area->local.sound_stop, 255, ATTN_NORM);
    }
}
Ejemplo n.º 8
0
void Area_BreakableDie(ServerEntity_t *area, ServerEntity_t *other, EntityDamageType_t type) {
	char sound[128], model[PL_SYSTEM_MAX_PATH];
	switch (area->local.style) {
	case BREAKABLE_GLASS:
		PHYSICS_SOUND_GLASS(sound);
		PHYSICS_MODEL_GLASS(model);
		break;
	case BREAKABLE_WOOD:
		PHYSICS_SOUND_WOOD(sound);
		PHYSICS_MODEL_WOOD(model);
		break;
	case BREAKABLE_ROCK:
		PHYSICS_SOUND_ROCK(sound);
		PHYSICS_MODEL_ROCK(model);
		break;
	case BREAKABLE_METAL:
		PHYSICS_SOUND_METAL(sound);
		PHYSICS_MODEL_METAL(model);
		break;
    default: return;
	}

	Sound(area, CHAN_AUTO, sound, 255, ATTN_STATIC);

	for (int i = 0; i < area->local.count; i++) {
        Area_CreateGib(area, model);
    }

	// Needs to be set to prevent a recursion.
	area->v.takedamage = false;

	if (area->v.targetname) { // Trigger doors, etc. ~eukos
        UseTargets(area, other);
    }

	Entity_Remove(area);
}
Ejemplo n.º 9
0
void CItemEntity::Touch(IBaseEntity *Other, SBSPPlane *plane, SBSPSurface *surf)
{
	if (!Other)
		return;
	if (!(Other->EntityFlags & EF_PLAYER))
		return;

	if (!(LinkedItem->Flags & ITEMFLAG_GRABBABLE))
		return;		// not a grabbable item?

	CPlayerEntity *Player = entity_cast<CPlayerEntity>(Other);

	if (Player->Health <= 0)
		return; // Dead players can't grab items

	if (!(SpawnFlags & ITEM_TARGETS_USED))
	{
		UseTargets (Other, Message);
		SpawnFlags |= ITEM_TARGETS_USED;
	}

	if (!LinkedItem->Pickup(this,Player))
		return;

	// flash the screen
	Player->Client.BonusAlpha = 0.25;	

	// show icon and name on status bar
	if (Player->Client.Timers.PickupMessageTime != (Level.Frame + 30))
	{
		Player->Client.PlayerState.GetStat (STAT_PICKUP_ICON) = LinkedItem->GetIconIndex();
		Player->Client.PlayerState.GetStat (STAT_PICKUP_STRING) = LinkedItem->GetConfigStringNumber();
		Player->Client.Timers.PickupMessageTime = Level.Frame + 30;
	}

	// change selected item
	if (LinkedItem->Flags & ITEMFLAG_USABLE)
	{
		Player->Client.Persistent.Inventory.SelectedItem = LinkedItem->GetIndex();
		Player->Client.PlayerState.GetStat (STAT_SELECTED_ITEM) = Player->Client.Persistent.Inventory.SelectedItem;
	}

	if (LinkedItem->PickupSound)
		Player->PlaySound (
#if CLEANCTF_ENABLED
		(LinkedItem == NItems::RedFlag || LinkedItem == NItems::BlueFlag) ? CHAN_AUTO : 
#endif
		CHAN_ITEM, LinkedItem->GetPickupSound()
#if CLEANCTF_ENABLED
		, 255, (LinkedItem == NItems::RedFlag || LinkedItem == NItems::BlueFlag) ? ATTN_NONE : ATTN_NORM
#endif
		);

	if (!((Game.GameMode & GAME_COOPERATIVE) &&  (LinkedItem->Flags & ITEMFLAG_STAY_COOP)) || (SpawnFlags & (DROPPED_ITEM | DROPPED_PLAYER_ITEM)))
	{
		if (ShouldRespawn)
			ShouldRespawn = false;
		else
			Free ();
	}
}
Ejemplo n.º 10
0
void Point_TimedTriggerThink(ServerEntity_t *eEntity)
{
	UseTargets(eEntity, eEntity);
}