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