1 
2 /***************************************************************************
3           statemodexpirationevent.cpp  -  State mod expiration event
4                              -------------------
5     begin                : Thu Apr 8 2004
6     copyright            : (C) 2004 by Gabor Torok
7     email                : cctorok@yahoo.com
8  ***************************************************************************/
9 
10 /***************************************************************************
11  *                                                                         *
12  *   This program is free software; you can redistribute it and/or modify  *
13  *   it under the terms of the GNU General Public License as published by  *
14  *   the Free Software Foundation; either version 2 of the License, or     *
15  *   (at your option) any later version.                                   *
16  *                                                                         *
17  ***************************************************************************/
18 
19 #include "../common/constants.h"
20 #include "statemodexpirationevent.h"
21 #include "../render/renderlib.h"
22 #include "../creature.h"
23 #include "../session.h"
24 
StateModExpirationEvent(Date currentDate,Date timeOut,Creature * c,int stateMod,Session * session,int nbExecutionsToDo)25 StateModExpirationEvent::StateModExpirationEvent( Date currentDate, Date timeOut, Creature *c,
26     int stateMod, Session *session, int nbExecutionsToDo ) :
27 		Event( currentDate, timeOut, nbExecutionsToDo ) {
28 	this->creature = c;
29 	this->stateMod = stateMod;
30 	this->session = session;
31 }
32 
~StateModExpirationEvent()33 StateModExpirationEvent::~StateModExpirationEvent() {
34 }
35 
execute()36 void StateModExpirationEvent::execute() {
37 	if ( creature->getStateMod( StateMod::dead ) ) return;
38 	if ( stateMod == StateMod::poisoned ) {
39 		// apply poison damage
40 		if ( creature->getStateMod( StateMod::poisoned ) ) {
41 			Creature *tmp = creature->getTargetCreature();
42 			creature->setTargetCreature( creature );
43 			char message[80];
44 			snprintf( message, 80, _( "%s suffers poison damage!" ), creature->getName() );
45 			if ( creature->getCharacter() ) {
46 				session->getGameAdapter()->writeLogMessage( message, Constants::MSGTYPE_PLAYERDAMAGE );
47 			} else {
48 				session->getGameAdapter()->writeLogMessage( message, Constants::MSGTYPE_NPCDAMAGE );
49 			}
50 
51 			char tmp2[255];
52 			snprintf( tmp2, 255, _( "%s poison." ),
53 			          Constants::getMessage( Constants::CAUSE_OF_DEATH ) );
54 			creature->getTargetCreature()->setPendingCauseOfDeath( tmp2 );
55 
56 			creature->getBattle()->dealDamage( Util::roll( 0.0f, 4.0f ),
57 			                                   //4,
58 			                                   Constants::EFFECT_GREEN, true );
59 			creature->setTargetCreature( tmp );
60 		}
61 	}
62 }
63 
executeBeforeDelete()64 void StateModExpirationEvent::executeBeforeDelete() {
65 	// Don't need this event anymore
66 	scheduleDeleteEvent();
67 
68 	if ( creature->getStateMod( StateMod::dead ) ||
69 	        !( creature->getStateMod( stateMod ) ) ) return;
70 
71 	creature->setStateMod( stateMod, false );
72 
73 	char msg[255];
74 	snprintf( msg, 255, StateMod::stateMods[ stateMod ]->getUnsetState(), creature->getName() );
75 	session->getGameAdapter()->writeLogMessage( msg, Constants::MSGTYPE_STATS );
76 	creature->startEffect( Constants::EFFECT_GREEN, ( Constants::DAMAGE_DURATION * 4 ) );
77 }
78 
doesReferenceCreature(Creature * creature)79 bool StateModExpirationEvent::doesReferenceCreature( Creature *creature ) {
80 	return( this->creature == creature );
81 }
82 
83