Ejemplo n.º 1
0
 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);
                 }
 }
Ejemplo n.º 2
0
 void BlastOutDoor()
 {
     if (GameObject* pIronCladDoor = instance->GetGameObject(IronCladDoorGUID))
     {
         pIronCladDoor->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
         DoPlaySound(pIronCladDoor, SOUND_DESTROYDOOR);
     }
 }
Ejemplo n.º 3
0
 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;
			}
		}
Ejemplo n.º 5
0
 void BlastOutDoor()
 {
     IronCladDoor->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
     DoPlaySound(IronCladDoor, SOUND_DESTROYDOOR);
 }
Ejemplo n.º 6
0
 void ShootCannon()
 {
     DefiasCannon->SetGoState(GO_STATE_ACTIVE);
     DoPlaySound(DefiasCannon, SOUND_CANNONFIRE);
 }
Ejemplo n.º 7
0
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;
}
Ejemplo n.º 8
0
 void BlastOutDoor()
 {
     IronCladDoor->SetUInt32Value(GAMEOBJECT_STATE, 2);
     DoPlaySound(IronCladDoor, SOUND_DESTROYDOOR);
 }
Ejemplo n.º 9
0
 void ShootCannon()
 {
     DefiasCannon->SetUInt32Value(GAMEOBJECT_STATE, 0);
     DoPlaySound(DefiasCannon, SOUND_CANNONFIRE);
 }