void OnStateChanged(uint32 state, Unit* unit) // the door is allways closed until destroyed.. { if (m_instance) if (state = 2) if (GameObject* cannon = ObjectAccessor::GetGameObject(*go, m_instance->GetData64(DATA_DEFIAS_CANNON))) // m_instance->GetGameObject(DefiasCannonGUID)) if (GameObject* door = ObjectAccessor::GetGameObject(*go, m_instance->GetData64(DATA_IRONCLAD_DOOR))) { cannon->SetGoState(GO_STATE_ACTIVE); DoPlaySound(cannon, SOUND_CANNONFIRE); cannon->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); DoPlaySound(cannon, SOUND_DESTROYDOOR); door->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); } }
void BlastOutDoor() { if (GameObject* pIronCladDoor = instance->GetGameObject(IronCladDoorGUID)) { pIronCladDoor->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); DoPlaySound(pIronCladDoor, SOUND_DESTROYDOOR); } }
void ShootCannon() { if (GameObject* pDefiasCannon = instance->GetGameObject(DefiasCannonGUID)) { pDefiasCannon->SetGoState(GO_STATE_ACTIVE); DoPlaySound(pDefiasCannon, SOUND_CANNONFIRE); } }
virtual void Update(uint32 diff) { if (!IronCladDoorGUID || !DefiasCannonGUID || !DoorLeverGUID) return; GameObject *pIronCladDoor = instance->GetGameObject( IronCladDoorGUID); if (!pIronCladDoor) return; switch (State) { case CANNON_GUNPOWDER_USED: CannonBlast_Timer = DATA_CANNON_BLAST_TIMER; // it's a hack - Mr. Smite should do that but his too far away pIronCladDoor->SetName("Mr. Smite"); pIronCladDoor->MonsterYell(SAY_MR_SMITE_ALARM1, LANG_UNIVERSAL, 0); DoPlaySound(pIronCladDoor, SOUND_MR_SMITE_ALARM1); State = CANNON_BLAST_INITIATED; break; case CANNON_BLAST_INITIATED: PiratesDelay_Timer = DATA_PIRATES_DELAY_TIMER; if (CannonBlast_Timer <= diff) { SummonCreatures(); ShootCannon(); BlastOutDoor(); LeverStucked(); pIronCladDoor->MonsterYell(SAY_MR_SMITE_ALARM2, LANG_UNIVERSAL, 0); DoPlaySound(pIronCladDoor, SOUND_MR_SMITE_ALARM2); State = PIRATES_ATTACK; } else CannonBlast_Timer -= diff; break; case PIRATES_ATTACK: if (PiratesDelay_Timer <= diff) { MoveCreaturesInside(); State = EVENT_DONE; } else PiratesDelay_Timer -= diff; break; } }
void BlastOutDoor() { IronCladDoor->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); DoPlaySound(IronCladDoor, SOUND_DESTROYDOOR); }
void ShootCannon() { DefiasCannon->SetGoState(GO_STATE_ACTIVE); DoPlaySound(DefiasCannon, SOUND_CANNONFIRE); }
int CTrigger::Operate (short nObject, int nPlayer, int bShot, bool bObjTrigger) { if (m_info.flags & TF_DISABLED) return 1; //1 means don't send trigger hit to other players CObject* objP = (nObject >= 0) ? OBJECTS + nObject : NULL; bool bIsPlayer = objP && (objP->info.nType == OBJ_PLAYER); if (bIsPlayer) { if (!IsMultiGame && (nObject != LOCALPLAYER.nObject)) return 1; } else { nPlayer = -1; if ((m_info.nType != TT_TELEPORT) && (m_info.nType != TT_SPEEDBOOST)) { if (objP && (objP->info.nType != OBJ_ROBOT) && (objP->info.nType != OBJ_REACTOR) && (objP->info.nType != OBJ_HOSTAGE) && (objP->info.nType != OBJ_POWERUP)) return 1; if (!bObjTrigger) return 1; } else if (objP && (objP->info.nType != OBJ_ROBOT) && (objP->info.nType != OBJ_REACTOR) && (objP->info.nType != OBJ_HOSTAGE) && (objP->info.nType != OBJ_POWERUP)) return 1; } int nTrigger = bObjTrigger ? OBJTRIGGERS.Index (this) : TRIGGERS.Index (this); if (!bObjTrigger && (m_info.nType != TT_TELEPORT) && (m_info.nType != TT_SPEEDBOOST)) { int t = gameStates.app.nSDLTicks; if ((gameData.trigs.delay [nTrigger] >= 0) && (t - gameData.trigs.delay [nTrigger] < 750)) return 1; gameData.trigs.delay [nTrigger] = gameStates.app.nSDLTicks; } if (m_info.flags & TF_ONE_SHOT) //if this is a one-bShot... m_info.flags |= TF_DISABLED; //..then don't let it happen again if (m_info.tOperated < 0) { m_info.tOperated = gameData.time.xGame; m_info.nObject = nObject; m_info.nPlayer = nPlayer; m_info.bShot = bShot; } if (Delay () > 0) { gameData.trigs.delay [nTrigger] = -1; return 0; } switch (m_info.nType) { case TT_EXIT: if (DoExit (nPlayer)) return 1; break; case TT_SECRET_EXIT: if (DoSecretExit (nPlayer)) return 1; break; case TT_OPEN_DOOR: DoLink (); PrintMessage (nPlayer, bShot, "Door%s opened!"); break; case TT_CLOSE_DOOR: DoCloseDoor (); PrintMessage (nPlayer, bShot, "Door%s closed!"); break; case TT_UNLOCK_DOOR: DoUnlockDoors (); PrintMessage (nPlayer, bShot, "Door%s unlocked!"); break; case TT_LOCK_DOOR: DoLockDoors (); PrintMessage (nPlayer, bShot, "Door%s locked!"); break; case TT_OPEN_WALL: if (DoChangeWalls ()) { if (WallIsForceField ()) PrintMessage (nPlayer, bShot, "Force field%s deactivated!"); else PrintMessage (nPlayer, bShot, "Wall%s opened!"); } break; case TT_CLOSE_WALL: if (DoChangeWalls ()) { if (WallIsForceField ()) PrintMessage (nPlayer, bShot, "Force field%s activated!"); else PrintMessage (nPlayer, bShot, "Wall%s closed!"); } break; case TT_ILLUSORY_WALL: //don't know what to say, so say nothing DoChangeWalls (); PrintMessage (nPlayer, bShot, "Creating Illusion!"); break; case TT_MATCEN: if (!(gameData.app.nGameMode & GM_MULTI) || (gameData.app.nGameMode & GM_MULTI_ROBOTS)) DoMatCen (nPlayer == gameData.multiplayer.nLocalPlayer); break; case TT_ILLUSION_ON: DoIllusionOn (); PrintMessage (nPlayer, bShot, "Illusion%s on!"); break; case TT_ILLUSION_OFF: DoIllusionOff (); PrintMessage (nPlayer, bShot, "Illusion%s off!"); break; case TT_LIGHT_OFF: if (DoLightOff ()) PrintMessage (nPlayer, bShot, "Lights off!"); break; case TT_LIGHT_ON: if (DoLightOn ()) PrintMessage (nPlayer, bShot, "Lights on!"); break; case TT_TELEPORT: if (bObjTrigger) { DoTeleportBot (objP); PrintMessage (nPlayer, bShot, "Robot is fleeing!"); } else { if (bIsPlayer) { if (nPlayer != gameData.multiplayer.nLocalPlayer) break; if ((LOCALPLAYER.shields < 0) || gameStates.app.bPlayerIsDead) break; } audio.PlaySound (SOUND_SECRET_EXIT, I2X (1)); DoTeleport (nObject); if (bIsPlayer) PrintMessage (nPlayer, bShot, "Teleport!"); } break; case TT_SPEEDBOOST: if (bIsPlayer) { if (nPlayer != gameData.multiplayer.nLocalPlayer) break; if ((LOCALPLAYER.shields < 0) || gameStates.app.bPlayerIsDead) break; } DoSpeedBoost (nObject); if (bIsPlayer) PrintMessage (nPlayer, bShot, "Speed Boost!"); break; case TT_SHIELD_DAMAGE: if (!gameStates.app.bPlayerIsDead) { if (gameStates.app.bD1Mission) LOCALPLAYER.shields -= TRIGGERS [nTrigger].m_info.value; else LOCALPLAYER.shields -= (fix) ((float (I2X (1)) * X2F (TRIGGERS [nTrigger].m_info.value))); if (LOCALPLAYER.shields < 0) StartPlayerDeathSequence (OBJECTS + gameData.multiplayer.players [gameData.multiplayer.nLocalPlayer].nObject); } break; case TT_ENERGY_DRAIN: if (!gameStates.app.bPlayerIsDead) { if (gameStates.app.bD1Mission) LOCALPLAYER.energy -= TRIGGERS [nTrigger].m_info.value; else LOCALPLAYER.energy -= (fix) (LOCALPLAYER.energy * X2F (TRIGGERS [nTrigger].m_info.value) / 100); if (LOCALPLAYER.energy < 0) LOCALPLAYER.energy = 0; } break; case TT_CHANGE_TEXTURE: DoChangeTexture (); PrintMessage (nPlayer, 2, "Walls have been changed!"); break; case TT_SPAWN_BOT: DoSpawnBots (objP); PrintMessage (nPlayer, 1, "Robot is summoning help!"); break; case TT_SET_SPAWN: DoSetSpawnPoints (); PrintMessage (nPlayer, 1, "New spawn points set!"); break; case TT_SMOKE_LIFE: case TT_SMOKE_SPEED: case TT_SMOKE_DENS: case TT_SMOKE_SIZE: case TT_SMOKE_DRIFT: break; case TT_COUNTDOWN: InitCountdown (this, 1, -1); break; case TT_MESSAGE: DoShowMessage (); break; case TT_SOUND: DoPlaySound (nObject); break; case TT_MASTER: DoMasterTrigger (nObject); break; case TT_ENABLE_TRIGGER: DoEnableTrigger (); #if DBG PrintMessage (nPlayer, 2, "Triggers have been enabled!"); #endif break; case TT_DISABLE_TRIGGER: DoDisableTrigger (); #if DBG PrintMessage (nPlayer, 2, "Triggers have been disabled!"); #endif break; case TT_DESCENT1: OperateD1 (nObject, nPlayer, bShot); break; default: Int3 (); break; } if (m_info.flags & TF_ALTERNATE) m_info.nType = oppTrigTypes [m_info.nType]; return 0; }
void BlastOutDoor() { IronCladDoor->SetUInt32Value(GAMEOBJECT_STATE, 2); DoPlaySound(IronCladDoor, SOUND_DESTROYDOOR); }
void ShootCannon() { DefiasCannon->SetUInt32Value(GAMEOBJECT_STATE, 0); DoPlaySound(DefiasCannon, SOUND_CANNONFIRE); }