1
// Copyright (C) 2002, 2003, 2004, 2005, 2006 Ulf Lorenz
2
// Copyright (C) 2003 Michael Bartl
3
// Copyright (C) 2007, 2008 Ben Asselstine
4
// Copyright (C) 2008 Ole Laursen
1
6
// This program is free software; you can redistribute it and/or modify
2
7
// it under the terms of the GNU General Public License as published by
3
8
// the Free Software Foundation; either version 2 of the License, or
11
16
// You should have received a copy of the GNU General Public License
12
17
// along with this program; if not, write to the Free Software
13
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15
21
#include <stdlib.h>
54
Action::Action(XML_Helper *helper)
57
helper->getData(t, "type");
58
d_type = Action::Type(t);
59
helper->getData(d_player, "player");
66
bool Action::save(XML_Helper* helper) const
70
retval &= helper->openTag("action");
71
retval &= helper->saveData("type", d_type);
72
retval &= helper->saveData("player", d_player);
73
retval &= doSave(helper);
74
retval &= helper->closeTag();
52
79
Action* Action::handle_load(XML_Helper* helper)
232
bool Action_Move::save(XML_Helper* helper) const
277
bool Action_Move::doSave(XML_Helper* helper) const
234
279
bool retval = true;
236
retval &= helper->openTag("action");
237
retval &= helper->saveData("type", d_type);
238
281
retval &= helper->saveData("stack", d_stack);
239
282
retval &= helper->saveData("x", d_dest.x);
240
283
retval &= helper->saveData("y", d_dest.y);
241
retval &= helper->closeTag();
303
345
s <<d_armies_moved[i] <<" ";
304
346
s <<d_armies_moved[MAX_STACK_SIZE - 1];
306
retval &= helper->openTag("action");
307
retval &= helper->saveData("type", Action::STACK_SPLIT);
308
348
retval &= helper->saveData("orig_stack", d_orig);
309
349
retval &= helper->saveData("new_stack", d_added);
310
350
retval &= helper->saveData("moved", s.str());
311
retval &= helper->closeTag();
480
bool Action_Join::save(XML_Helper* helper) const
518
bool Action_Join::doSave(XML_Helper* helper) const
482
520
bool retval = true;
484
retval &= helper->openTag("action");
485
retval &= helper->saveData("type", d_type);
486
522
retval &= helper->saveData("receiver", d_orig_id);
487
523
retval &= helper->saveData("joining", d_joining_id);
488
retval &= helper->closeTag();
541
bool Action_Ruin::save(XML_Helper* helper) const
576
bool Action_Ruin::doSave(XML_Helper* helper) const
543
578
bool retval = true;
545
retval &= helper->openTag("action");
546
retval &= helper->saveData("type", Action::RUIN_SEARCH);
547
580
retval &= helper->saveData("ruin", d_ruin);
548
581
retval &= helper->saveData("seeker", d_stack);
549
582
retval &= helper->saveData("searched", d_searched);
550
retval &= helper->closeTag();
593
bool Action_Temple::save(XML_Helper* helper) const
625
bool Action_Temple::doSave(XML_Helper* helper) const
595
627
bool retval = true;
597
retval &= helper->openTag("action");
598
retval &= helper->saveData("type", Action::TEMPLE_SEARCH);
599
629
retval &= helper->saveData("temple", d_temple);
600
630
retval &= helper->saveData("stack", d_stack);
601
retval &= helper->closeTag();
866
bool Action_Buy::save(XML_Helper* helper) const
880
bool Action_Buy::doSave(XML_Helper* helper) const
868
882
bool retval = true;
870
retval &= helper->openTag("action");
871
retval &= helper->saveData("type", Action::CITY_BUY);
872
884
retval &= helper->saveData("city", d_city);
873
885
retval &= helper->saveData("slot", d_slot);
874
886
retval &= helper->saveData("production", d_prod);
875
retval &= helper->closeTag();
880
bool Action_Buy::fillData(City* c, int slot, int prod)
891
bool Action_Buy::fillData(City* c, int slot, const Army *prod)
882
893
d_city = c->getId();
895
d_prod = prod->getType();
918
bool Action_Production::save(XML_Helper* helper) const
929
bool Action_Production::doSave(XML_Helper* helper) const
920
931
bool retval = true;
922
retval &= helper->openTag("action");
923
retval &= helper->saveData("type", Action::CITY_PROD);
924
933
retval &= helper->saveData("city", d_city);
925
934
retval &= helper->saveData("production", d_prod);
926
retval &= helper->closeTag();
931
bool Action_Production::fillData(City* c, int prod)
939
bool Action_Production::fillData(City* c, int slot)
933
941
d_city = c->getId();
970
978
Action_Reward::Action_Reward(XML_Helper* helper)
971
:Action(Action::REWARD)
973
helper->registerTag("reward", sigc::mem_fun((*this), &Action_Reward::load));
981
helper->getData(d_stack, "stack");
982
helper->registerTag("reward", sigc::mem_fun(this, &Action_Reward::load));
976
985
Action_Reward::~Action_Reward()
980
bool Action_Reward::fillData(Reward* r)
989
bool Action_Reward::fillData(Stack *s, Reward* r)
991
d_stack = s->getId();
996
bool Action_Reward::save(XML_Helper* helper) const
1006
bool Action_Reward::doSave(XML_Helper* helper) const
998
1008
bool retval = true;
1000
retval &= helper->openTag("action");
1001
retval &= helper->saveData("type", Action::REWARD);
1010
retval &= helper->saveData("stack", d_stack);
1002
1011
if (d_reward->getType() == Reward::GOLD)
1003
1012
static_cast<Reward_Gold*>(d_reward)->save(helper);
1004
1013
else if (d_reward->getType() == Reward::ALLIES)
1046
1054
return ss.str();
1049
bool Action_Quest::save(XML_Helper* helper) const
1057
bool Action_Quest::doSave(XML_Helper* helper) const
1051
1059
bool retval = true;
1053
retval &= helper->openTag("action");
1054
retval &= helper->saveData("type", d_type);
1055
1061
retval &= helper->saveData("hero", d_hero);
1056
1062
retval &= helper->saveData("quest", d_questtype);
1057
1063
retval &= helper->saveData("data", d_data);
1058
1064
retval &= helper->saveData("victim_player", d_victim_player);
1059
retval &= helper->closeTag();
1126
1131
return ss.str();
1129
bool Action_Equip::save(XML_Helper* helper) const
1134
bool Action_Equip::doSave(XML_Helper* helper) const
1131
1136
bool retval = true;
1133
retval &= helper->openTag("action");
1134
retval &= helper->saveData("type", d_type);
1135
1138
retval &= helper->saveData("hero", d_hero);
1136
1139
retval &= helper->saveData("item", d_item);
1137
1140
retval &= helper->saveData("dest", d_slot);
1138
retval &= helper->closeTag();
1143
bool Action_Equip::fillData(Uint32 hero, Uint32 item, Action_Equip::Slot slot)
1145
bool Action_Equip::fillData(Hero *hero, Item *item, Action_Equip::Slot slot)
1147
d_hero = hero->getId();
1148
d_item = item->getId();
1178
1180
return ss.str();
1181
bool Action_Level::save(XML_Helper* helper) const
1183
bool Action_Level::doSave(XML_Helper* helper) const
1183
1185
bool retval = true;
1185
retval &= helper->openTag("action");
1186
retval &= helper->saveData("type", d_type);
1187
1187
retval &= helper->saveData("army", d_army);
1188
1188
retval &= helper->saveData("stat", d_stat);
1189
retval &= helper->closeTag();
1194
bool Action_Level::fillData(Uint32 unit, Army::Stat raised)
1193
bool Action_Level::fillData(Army *unit, Army::Stat raised)
1195
d_army = unit->getId();
1197
1196
d_stat = raised;
1272
1268
return s.str();
1275
bool Action_ModifySignpost::save(XML_Helper* helper) const
1271
bool Action_ModifySignpost::doSave(XML_Helper* helper) const
1277
1273
bool retval = true;
1279
retval &= helper->openTag("action");
1280
retval &= helper->saveData("type", d_type);
1281
1275
retval &= helper->saveData("signpost", d_signpost);
1282
1276
retval &= helper->saveData("message", d_message);
1283
retval &= helper->closeTag();
1320
1313
return s.str();
1323
bool Action_RenameCity::save(XML_Helper* helper) const
1316
bool Action_RenameCity::doSave(XML_Helper* helper) const
1325
1318
bool retval = true;
1327
retval &= helper->openTag("action");
1328
retval &= helper->saveData("type", d_type);
1329
1320
retval &= helper->saveData("city", d_city);
1330
1321
retval &= helper->saveData("name", d_name);
1331
retval &= helper->closeTag();
1373
1363
return s.str();
1376
bool Action_Vector::save(XML_Helper* helper) const
1366
bool Action_Vector::doSave(XML_Helper* helper) const
1378
1368
bool retval = true;
1380
retval &= helper->openTag("action");
1381
retval &= helper->saveData("type", d_type);
1382
1370
retval &= helper->saveData("city", d_city);
1383
1371
retval &= helper->saveData("x", d_dest.x);
1384
1372
retval &= helper->saveData("y", d_dest.y);
1385
retval &= helper->closeTag();
1437
1424
return s.str();
1440
bool Action_FightOrder::save(XML_Helper* helper) const
1427
bool Action_FightOrder::doSave(XML_Helper* helper) const
1442
1429
bool retval = true;
1444
retval &= helper->openTag("action");
1445
retval &= helper->saveData("type", d_type);
1446
1431
std::stringstream fight_order;
1447
1432
for (std::list<Uint32>::const_iterator it = d_order.begin();
1448
1433
it != d_order.end(); it++)
1529
1509
return s.str();
1532
bool Action_Plant::save(XML_Helper* helper) const
1512
bool Action_Plant::doSave(XML_Helper* helper) const
1534
1514
bool retval = true;
1536
retval &= helper->openTag("action");
1537
retval &= helper->saveData("type", d_type);
1538
1516
retval &= helper->saveData("hero", d_hero);
1539
1517
retval &= helper->saveData("item", d_item);
1540
retval &= helper->closeTag();
1545
bool Action_Plant::fillData(Uint32 hero, Uint32 item)
1522
bool Action_Plant::fillData(Hero *hero, Item *item)
1524
d_hero = hero->getId();
1525
d_item = item->getId();
1580
1557
return s.str();
1583
bool Action_Produce::save(XML_Helper* helper) const
1560
bool Action_Produce::doSave(XML_Helper* helper) const
1585
1562
bool retval = true;
1587
retval &= helper->openTag("action");
1588
retval &= helper->saveData("type", d_type);
1589
1564
retval &= helper->saveData("army_type", d_army_type);
1590
1565
retval &= helper->saveData("city", d_city);
1591
1566
retval &= helper->saveData("vectored", d_vectored);
1592
retval &= helper->closeTag();
1597
bool Action_Produce::fillData(Uint32 army_type, City *city, bool vectored)
1571
bool Action_Produce::fillData(const Army *army, City *city, bool vectored)
1599
d_army_type = army_type;
1576
d_army_type = army->getType();
1600
1577
d_city = city->getId();
1601
1578
d_vectored = vectored;
1634
1611
return s.str();
1637
bool Action_ProduceVectored::save(XML_Helper* helper) const
1614
bool Action_ProduceVectored::doSave(XML_Helper* helper) const
1639
1616
bool retval = true;
1641
retval &= helper->openTag("action");
1642
retval &= helper->saveData("type", d_type);
1643
1618
retval &= helper->saveData("army_type", d_army_type);
1644
1619
retval &= helper->saveData("x", d_dest.x);
1645
1620
retval &= helper->saveData("y", d_dest.y);
1646
retval &= helper->closeTag();
1691
1665
return s.str();
1694
bool Action_DiplomacyState::save(XML_Helper* helper) const
1668
bool Action_DiplomacyState::doSave(XML_Helper* helper) const
1696
1670
bool retval = true;
1698
retval &= helper->openTag("action");
1699
retval &= helper->saveData("type", d_type);
1700
1672
retval &= helper->saveData("opponent_id", d_opponent_id);
1701
1673
retval &= helper->saveData("state", (Uint32)d_diplomatic_state);
1702
retval &= helper->closeTag();
1749
1720
return s.str();
1752
bool Action_DiplomacyProposal::save(XML_Helper* helper) const
1723
bool Action_DiplomacyProposal::doSave(XML_Helper* helper) const
1754
1725
bool retval = true;
1756
retval &= helper->openTag("action");
1757
retval &= helper->saveData("type", d_type);
1758
1727
retval &= helper->saveData("opponent_id", d_opponent_id);
1759
1728
retval &= helper->saveData("proposal", (Uint32)d_diplomatic_proposal);
1760
retval &= helper->closeTag();
1801
1769
return s.str();
1804
bool Action_DiplomacyScore::save(XML_Helper* helper) const
1772
bool Action_DiplomacyScore::doSave(XML_Helper* helper) const
1806
1774
bool retval = true;
1808
retval &= helper->openTag("action");
1809
retval &= helper->saveData("type", d_type);
1810
1776
retval &= helper->saveData("opponent_id", d_opponent_id);
1811
1777
retval &= helper->saveData("amount", d_amount);
1812
retval &= helper->closeTag();
1820
1785
d_amount = amount;
1789
//-----------------------------------------------------------------------------
1792
Action_EndTurn::Action_EndTurn()
1793
:Action(Action::END_TURN)
1797
Action_EndTurn::Action_EndTurn(XML_Helper* helper)
1802
Action_EndTurn::~Action_EndTurn()
1806
std::string Action_EndTurn::dump() const
1808
return "ending turn\n";
1811
bool Action_EndTurn::doSave(XML_Helper* helper) const
1818
//-----------------------------------------------------------------------------
1819
//Action_ConquerCity
1821
Action_ConquerCity::Action_ConquerCity()
1822
:Action(Action::CITY_CONQUER), d_city(0), d_stack(0)
1826
Action_ConquerCity::Action_ConquerCity(XML_Helper* helper)
1829
helper->getData(d_city, "city");
1830
helper->getData(d_stack, "stack");
1833
Action_ConquerCity::~Action_ConquerCity()
1837
std::string Action_ConquerCity::dump() const
1839
std::stringstream s;
1841
s <<"City " <<d_city <<" occupied by " << d_stack << "\n";
1846
bool Action_ConquerCity::doSave(XML_Helper* helper) const
1850
retval &= helper->saveData("city", d_city);
1851
retval &= helper->saveData("stack", d_stack);
1856
bool Action_ConquerCity::fillData(City* c, Stack *s)
1858
d_city = c->getId();
1859
d_stack = s->getId();
1863
//-----------------------------------------------------------------------------
1864
//Action_RecruitHero
1866
Action_RecruitHero::Action_RecruitHero()
1867
:Action(Action::RECRUIT_HERO), d_hero(0)
1871
Action_RecruitHero::Action_RecruitHero(XML_Helper* helper)
1874
helper->getData(d_city, "city");
1875
helper->getData(d_cost, "cost");
1876
helper->getData(d_allies, "allies");
1877
helper->getData(d_ally_army_type, "ally_army_type");
1878
helper->registerTag("hero", sigc::mem_fun(this, &Action_RecruitHero::load));
1881
bool Action_RecruitHero::load(std::string tag, XML_Helper *helper)
1885
d_hero = new Hero(helper);
1892
Action_RecruitHero::~Action_RecruitHero()
1896
std::string Action_RecruitHero::dump() const
1898
std::stringstream s;
1900
s << "Hero " << d_hero->getId() << " recruited with " << d_allies << "allies\n";
1905
bool Action_RecruitHero::doSave(XML_Helper* helper) const
1909
retval &= helper->saveData("city", d_city);
1910
retval &= helper->saveData("cost", d_cost);
1911
retval &= helper->saveData("allies", d_allies);
1912
retval &= helper->saveData("ally_army_type", d_ally_army_type);
1913
retval &= d_hero->save(helper);
1918
bool Action_RecruitHero::fillData(Hero* hero, City *city, int cost, int alliesCount, const Army *ally)
1921
d_city = city->getId();
1923
d_allies = alliesCount;
1924
if (alliesCount > 0)
1925
d_ally_army_type = ally->getType();
1927
d_ally_army_type = 0;