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; }
void Point_LightstyleDie(ServerEntity_t *eEntity) { Engine.LightStyle(eEntity->local.style,"a"); if(eEntity->v.targetname) UseTargets(eEntity, eEntity); }
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); }
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); } }
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); } }
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); } }
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); } }
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); }
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 (); } }
void Point_TimedTriggerThink(ServerEntity_t *eEntity) { UseTargets(eEntity, eEntity); }