37
37
class QuestCitySack : public Quest, public sigc::trackable
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.
47
QuestCitySack(QuestsManager& q_mgr, guint32 hero);
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.
54
QuestCitySack(QuestsManager& q_mgr, XML_Helper* helper);
56
// Construct from remote action.
57
QuestCitySack(QuestsManager& q_mgr, guint32 hero, guint32 target);
59
//! Returns whether or not this quest is impossible.
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(guint32 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.
78
std::string getProgress() const;
80
//! Return a queue of strings to show when the quest is compeleted.
81
void getSuccessMsg(std::queue<std::string>& msgs) const;
83
//! Return a queue of strings to show when the quest has expired.
84
void getExpiredMsg(std::queue<std::string>& msgs) const;
86
//! Returns the id of the City object to be sacked.
87
guint32 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);
121
//! Make a quest description about the city that needs to be sacked.
122
void initDescription();
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);
140
//! The Id of the target City object to sack.
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.
47
QuestCitySack(QuestsManager& q_mgr, guint32 hero);
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.
54
QuestCitySack(QuestsManager& q_mgr, XML_Helper* helper);
56
// Construct from remote action.
57
QuestCitySack(QuestsManager& q_mgr, guint32 hero, guint32 target);
61
//! Return a description of how well the city sacking quest is going.
62
std::string getProgress() const;
64
//! Return a queue of strings to show when the quest is compeleted.
65
void getSuccessMsg(std::queue<std::string>& msgs) const;
67
//! Return a queue of strings to show when the quest has expired.
68
void getExpiredMsg(std::queue<std::string>& msgs) const;
70
//! Returns the id of the City object to be sacked.
71
guint32 getCityId() const {return d_city;}
74
// Methods that operate on the class data but do not modify the class.
76
//! Saves the sacking quest data to an opened saved-game file.
77
bool save(XML_Helper* helper) const;
79
//! Returns a pointer to the City object to be sacked.
80
City* getCity() const;
83
// Methods that need to be implemented from the superclass.
85
//! Callback for when an Army object is killed.
87
* @note This method is not used.
89
void armyDied(Army *a, bool heroIsCulprit);
91
//! Callback for when a City object is defeated.
93
* This method notifies the Quest that a City has fallen, and what the
94
* conquering action (pillage/sack/raze/occupy) was. It also notifies
95
* whether or not the hero responsible for this quest was involved in
96
* the conquering, and how much gold was taken as a result.
98
* If the city isn't sacked then the Quest is expired.
99
* If the city is sacked then the Quest is completed.
101
* @param city The City object that has been conquered.
102
* @param action What action was taken by the Player. See
103
* CityDefeatedAction for more information.
104
* @param heroIsCulprit Whether or not the Hero object associated with
105
* this Quest object is responsible for
106
* conquering the given City object.
107
* @param gold How many gold pieces were taken as a result
110
void cityAction(City *city, CityDefeatedAction action,
111
bool heroIsCulprit, int gold);
116
//! Returns whether or not this quest is impossible.
118
* Scans all City objects in the Citylist to see if there is one the
119
* active player can sack.
121
* @note This method is static because it is executed before the
122
* Quest is instantiated. It is also called from within the
123
* instantiated Quest.
125
* @param heroId The Id of the Hero responsible for the sacking quest.
127
* @return Whether or not the quest is possible.
129
static bool isFeasible(guint32 heroId);
133
//! Make a quest description about the city that needs to be sacked.
134
void initDescription();
136
//! Return a pointer to a random city not owned by the given player.
138
* Find a city to sack.
140
* Scan through all of the City objects in the Citylist for a city
141
* that is not owned by the given player or by neutral. Pick a random
142
* one that has more than 1 Army production base and return it.
144
* @param player The player whose City objects are exempt from being
145
* selected as a target for sacking.
147
* @return A pointer to a City object that can be sacked by the Hero.
148
* If no valid City objects are found, this method returns NULL.
150
static City* chooseToSack(Player *p);
152
//! The Id of the target City object to sack.