git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5242 c06c8d41-db1a-0410-9941-cceddc491573
X3CWUWK437W32BTAAQY7DQ3P4KI5CM3KQW5AW4E2VCHGEOP5WKCAC
2NABXVORE3G444CLNMZRHFIDMOIXU5ZV5R6Y7QFJS7IY6WAGHWDQC
W3F2XPGTHDOSFFKZOHB3555C2ZTIG2KYSXEHSNODVUKGHOLYKGRQC
EJEHTLHZ5DL4SJQJBMQL5K3IV2ZMCZQBVCRRERER7SPOMNKFJTVQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
YATODO2EN3AW7IXW5PL25HHK34YHF6Y32QBMOUZXEATZZ4YQQWZQC
6PAG7GHXHIYXJPPTEK4KZQZT4CL2SJDAGTVIUDB4KK66PVSTWUMAC
GCDBSJXJCPEK4NCX5CVGDBK3432PFCU5OCO2F3DA32332ALI2ZYQC
NLQNXH3SVJ52CWXEV35FSSZP32VHC4QFGN3HINF4KO5GZHZMOBKQC
IIUK3DT26O7F4IBKB6QFTPLO4EVKBH55SAEXLNQEQRLDGJ37NDGAC
WHY6LRRJ5T2NSBE3IUCR4X3TOAH7TTK5NPUPUIFT7TPNJ6J4HBDAC
2Q3P7FHAAZRJ337GTR2ZLD72ECBUDJ42MROKVCNKNDV6CGMQOSYAC
VBG2GGMVC66LQM4OSI67VKXGAQK4GVOEHX3OL6V3IFOO52MQL72QC
};
// Calls did_god_conduct() when the object goes out of scope.
struct god_conduct_trigger
{
conduct_type conduct;
int pgain;
bool known;
bool enabled;
std::auto_ptr<monsters> victim;
god_conduct_trigger(conduct_type c = NUM_CONDUCTS,
int pg = 0,
bool kn = true,
const monsters *vict = NULL);
void set(conduct_type c = NUM_CONDUCTS,
int pg = 0,
bool kn = true,
const monsters *vict = NULL);
~god_conduct_trigger();
bool is_evil_god(god_type god);
bool is_good_god(god_type god);
bool is_chaotic_god(god_type god);
// Calls did_god_conduct when the object goes out of scope.
struct god_conduct_trigger
{
conduct_type conduct;
int pgain;
bool known;
bool enabled;
std::auto_ptr<monsters> victim;
god_conduct_trigger(conduct_type c = NUM_CONDUCTS,
int pg = 0,
bool kn = true,
const monsters *vict = NULL);
void set(conduct_type c = NUM_CONDUCTS,
int pg = 0,
bool kn = true,
const monsters *vict = NULL);
~god_conduct_trigger();
};
/////////////////////////////////////////////////////////////////////
// god_conduct_trigger
god_conduct_trigger::god_conduct_trigger(
conduct_type c, int pg, bool kn, const monsters *vict)
: conduct(c), pgain(pg), known(kn), enabled(true), victim(NULL)
{
if (vict)
{
victim.reset(new monsters);
*(victim.get()) = *vict;
}
}
void god_conduct_trigger::set(conduct_type c, int pg, bool kn,
const monsters *vict)
{
conduct = c;
pgain = pg;
known = kn;
victim.reset(NULL);
if (vict)
{
victim.reset(new monsters);
*victim.get() = *vict;
}
}
/////////////////////////////////////////////////////////////////////
// god_conduct_trigger
god_conduct_trigger::god_conduct_trigger(
conduct_type c, int pg, bool kn, const monsters *vict)
: conduct(c), pgain(pg), known(kn), enabled(true), victim(NULL)
{
if (vict)
{
victim.reset(new monsters);
*(victim.get()) = *vict;
}
}
void god_conduct_trigger::set(conduct_type c, int pg, bool kn,
const monsters *vict)
{
conduct = c;
pgain = pg;
known = kn;
victim.reset(NULL);
if (vict)
{
victim.reset(new monsters);
*victim.get() = *vict;
}
}
god_conduct_trigger::~god_conduct_trigger()
{
if (enabled && conduct != NUM_CONDUCTS)
did_god_conduct(conduct, pgain, known, victim.get());
}