1
#ifndef __QUEST_CITY_SACK_H
2
#define __QUEST_CITY_SACK_H
1
// Copyright (C) 2007, 2008 Ben Asselstine
3
// This program is free software; you can redistribute it and/or modify
4
// it under the terms of the GNU General Public License as published by
5
// the Free Software Foundation; either version 2 of the License, or
6
// (at your option) any later version.
8
// This program is distributed in the hope that it will be useful,
9
// but WITHOUT ANY WARRANTY; without even the implied warranty of
10
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
// GNU Library General Public License for more details.
13
// You should have received a copy of the GNU General Public License
14
// along with this program; if not, write to the Free Software
15
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17
#ifndef QUEST_CITY_SACK_H
18
#define QUEST_CITY_SACK_H
4
20
#include <sigc++/trackable.h>
14
/** Class describing a city sack quest
16
* A hero that receives this quest has to sack a specific city to fulfill
28
//! A Quest where the Hero must sack a City owned by another Player.
30
* A hero that receives this quest has to sack a specific city to fulfill
31
* it. The Quest is completed when this happens, but the quest is expired if
32
* the user conquers the correct city but forgets to sack the city.
34
* Sacking involves cashing in all of the Army production bases that the City
35
* offers, except for the weakest one.
20
37
class QuestCitySack : public Quest, public sigc::trackable
23
/** \brief Constructor - create a new quest */
40
//! Default constructor.
42
* Make a new city sacking quest.
44
* @param q_mgr The quests manager to associate this quest with.
45
* @param hero The Id of the Hero who is responsible for the quest.
24
47
QuestCitySack(QuestsManager& q_mgr, Uint32 hero);
26
/** \brief Constructor - create a new quest from
49
//! Loading constructor.
51
* @param q_mgr The quests manager to associate this quest with.
52
* @param helper The opened saved-game file to load this quest from.
28
54
QuestCitySack(QuestsManager& q_mgr, XML_Helper* helper);
31
* \brief Checks if such a quest is possible at all.
33
static bool isFeasible(Uint32 heroId);
35
//! Saves the quest data.
36
bool save(XML_Helper* helper) const;
56
// Construct from remote action.
57
QuestCitySack(QuestsManager& q_mgr, Uint32 hero, Uint32 target);
59
//! Returns whether or not this quest is impossible.
39
* \brief Get progress information
41
* \param s here we append the progress information
61
* Scans all City objects in the Citylist to see if there is one the
62
* active player can sack.
64
* @note This method is static because it is executed before the
65
* Quest is instantiated. It is also called from within the
68
* @param heroId The Id of the Hero responsible for the sacking quest.
70
* @return Whether or not the quest is possible.
72
static bool isFeasible(Uint32 heroId);
74
//! Saves the sacking quest data to an opened saved-game file.
75
bool save(XML_Helper* helper) const;
77
//! Return a description of how well the city sacking quest is going.
43
78
std::string getProgress() const;
46
* \brief Provide the lines of the message describing
80
//! Return a queue of strings to show when the quest is compeleted.
49
81
void getSuccessMsg(std::queue<std::string>& msgs) const;
52
* \brief Provide the lines of the message describing
83
//! Return a queue of strings to show when the quest has expired.
55
84
void getExpiredMsg(std::queue<std::string>& msgs) const;
58
//! Returns the id of the city to be sacked
59
Uint32 getCityId() const {return d_city;}
61
//! Returns the city to be sacked
62
City* getCity() const;
64
void armyDied(Army *a, bool heroIsCulprit);
65
void cityAction(City *c, CityDefeatedAction action,
66
bool heroIsCulprit, int gold);
86
//! Returns the id of the City object to be sacked.
87
Uint32 getCityId() const {return d_city;}
89
//! Returns a pointer to the City object to be sacked.
90
City* getCity() const;
92
//! Callback for when an Army object is killed.
94
* @note This method is not used.
96
void armyDied(Army *a, bool heroIsCulprit);
98
//! Callback for when a City object is defeated.
100
* This method notifies the Quest that a City has fallen, and what the
101
* conquering action (pillage/sack/raze/occupy) was. It also notifies
102
* whether or not the hero responsible for this quest was involved in
103
* the conquering, and how much gold was taken as a result.
105
* If the city isn't sacked then the Quest is expired.
106
* If the city is sacked then the Quest is completed.
108
* @param city The City object that has been conquered.
109
* @param action What action was taken by the Player. See
110
* CityDefeatedAction for more information.
111
* @param heroIsCulprit Whether or not the Hero object associated with
112
* this Quest object is responsible for
113
* conquering the given City object.
114
* @param gold How many gold pieces were taken as a result
117
void cityAction(City *city, CityDefeatedAction action,
118
bool heroIsCulprit, int gold);
69
/** \brief Make quest description from the city we'll sack */
70
void initDescription();
121
//! Make a quest description about the city that needs to be sacked.
122
void initDescription();
72
/** \brief Select a victim city */
73
static City* chooseToSack(Player *p);
124
//! Return a pointer to a random city not owned by the given player.
126
* Find a city to sack.
128
* Scan through all of the City objects in the Citylist for a city
129
* that is not owned by the given player or by neutral. Pick a random
130
* one that has more than 1 Army production base and return it.
132
* @param player The player whose City objects are exempt from being
133
* selected as a target for sacking.
135
* @return A pointer to a City object that can be sacked by the Hero.
136
* If no valid City objects are found, this method returns NULL.
138
static City* chooseToSack(Player *p);
75
/** city id to be sacked by the hero */
140
//! The Id of the target City object to sack.