|
|
@@ -245,9 +245,9 @@ void CCallback::selectionMade(int selection, int asker)
|
|
|
void CCallback::recruitCreatures(const CGObjectInstance *obj, int ID, int amount)
|
|
|
{
|
|
|
if(amount<=0) return;
|
|
|
- if(obj->ID==98)
|
|
|
+ if(obj->ID==98) //recruiting from town
|
|
|
{
|
|
|
- int ser=-1;
|
|
|
+ int ser=-1; //used dwelling level
|
|
|
CGTownInstance *t = const_cast<CGTownInstance*>(static_cast<const CGTownInstance*>(obj));
|
|
|
|
|
|
//verify
|
|
|
@@ -255,10 +255,10 @@ void CCallback::recruitCreatures(const CGObjectInstance *obj, int ID, int amount
|
|
|
typedef std::pair<const int,int> Parka;
|
|
|
for(std::map<int,int>::iterator av=t->strInfo.creatures.begin();av!=t->strInfo.creatures.end();av++)
|
|
|
{
|
|
|
- if( ( found = (ID == t->town->basicCreatures[av->first]) )
|
|
|
- || (found = (ID == t->town->upgradedCreatures[av->first])) )
|
|
|
+ if( ( found = (ID == t->town->basicCreatures[av->first]) ) //creature is available among basic cretures
|
|
|
+ || (found = (ID == t->town->upgradedCreatures[av->first])) )//creature is available among upgraded cretures
|
|
|
{
|
|
|
- amount = std::min(amount,av->second);
|
|
|
+ amount = std::min(amount,av->second); //reduce recruited amount up to available amount
|
|
|
ser = av->first;
|
|
|
break;
|
|
|
}
|
|
|
@@ -269,17 +269,17 @@ void CCallback::recruitCreatures(const CGObjectInstance *obj, int ID, int amount
|
|
|
if(amount > CGI->creh->creatures[ID].maxAmount(gs->players[player].resources))
|
|
|
return; //not enough resources
|
|
|
|
|
|
- for(int i=0;i<RESOURCE_QUANTITY;i++)
|
|
|
- if (gs->players[player].resources[i] < (CGI->creh->creatures[ID].cost[i] * amount))
|
|
|
- return; //not enough resources
|
|
|
+ //for(int i=0;i<RESOURCE_QUANTITY;i++)
|
|
|
+ // if (gs->players[player].resources[i] < (CGI->creh->creatures[ID].cost[i] * amount))
|
|
|
+ // return; //not enough resources
|
|
|
|
|
|
if(amount<=0) return;
|
|
|
|
|
|
//recruit
|
|
|
- int slot = -1;
|
|
|
+ int slot = -1; //slot ID
|
|
|
std::pair<int,std::pair<CCreature*,int> > parb;
|
|
|
|
|
|
- for(int i=0;i<7;i++)
|
|
|
+ for(int i=0;i<7;i++) //TODO: if there is already stack of same creatures it should be used always
|
|
|
{
|
|
|
if((!t->army.slots[i].first) || (t->army.slots[i].first->idNumber == ID)) //slot is free or there is saem creature
|
|
|
{
|
|
|
@@ -307,12 +307,13 @@ void CCallback::recruitCreatures(const CGObjectInstance *obj, int ID, int amount
|
|
|
CGI->playerint[gs->players[player].serial]->garrisonChanged(obj);
|
|
|
|
|
|
}
|
|
|
+ //TODO: recruit from dwellings on the adventure map
|
|
|
}
|
|
|
|
|
|
|
|
|
bool CCallback::dismissCreature(const CArmedInstance *obj, int stackPos)
|
|
|
{
|
|
|
- if(obj->tempOwner != player)
|
|
|
+ if((player>=0) && obj->tempOwner != player)
|
|
|
return false;
|
|
|
CArmedInstance *ob = const_cast<CArmedInstance*>(obj);
|
|
|
ob->army.slots.erase(stackPos);
|
|
|
@@ -321,6 +322,7 @@ bool CCallback::dismissCreature(const CArmedInstance *obj, int stackPos)
|
|
|
}
|
|
|
bool CCallback::upgradeCreature(const CArmedInstance *obj, int stackPos, int newID)
|
|
|
{
|
|
|
+ //TODO: write
|
|
|
return false;
|
|
|
}
|
|
|
UpgradeInfo CCallback::getUpgradeInfo(const CArmedInstance *obj, int stackPos)
|