Hooks
static bool BeforeCvUnit_gift(CvUnit* self, bool bTestTransport);static void AfterCvUnit_gift(CvUnit* self, bool bTestTransport);static void ReplaceCvUnit_gift(void (*original)(CvUnit*, bool), CvUnit* self, bool bTestTransport);CivRegisterBefore<CivHooks::CvUnit_gift>(host, &BeforeCvUnit_gift);CivRegisterAfter<CivHooks::CvUnit_gift>(host, &AfterCvUnit_gift);CivRegisterReplace<CivHooks::CvUnit_gift>(host, &ReplaceCvUnit_gift);
Code
4135void CvUnit::gift(bool bTestTransport)4136{4137 VALIDATE_OBJECT4138 IDInfo* pUnitNode;4139 CvUnit* pGiftUnit;4140 CvUnit* pLoopUnit;4141 CvPlot* pPlot;4142 CvString strBuffer;4143 PlayerTypes eOwner;41444145 if(!canGift(false, bTestTransport))4146 {4147 return;4148 }41494150 pPlot = plot();41514152 pUnitNode = pPlot->headUnitNode();41534154 while(pUnitNode != NULL)4155 {4156 pLoopUnit = ::getUnit(*pUnitNode);41574158 if(pLoopUnit && pLoopUnit->getTransportUnit() == this)4159 {4160 pLoopUnit->kill(false);4161 pUnitNode = pPlot->headUnitNode();4162 }4163 else4164 {4165 pUnitNode = pPlot->nextUnitNode(pUnitNode);4166 }4167 }41684169 CvAssertMsg(plot()->getOwner() != NO_PLAYER, "plot()->getOwner() is not expected to be equal with NO_PLAYER");4170 pGiftUnit = GET_PLAYER(plot()->getOwner()).initUnit(getUnitType(), getX(), getY(), AI_getUnitAIType(), NO_DIRECTION, false, false);41714172 CvAssertMsg(pGiftUnit != NULL, "GiftUnit is not assigned a valid value");41734174 if(pGiftUnit != NULL)4175 {4176 eOwner = getOwner();41774178 pGiftUnit->convert(this, false);4179 pGiftUnit->setupGraphical();41804181 pGiftUnit->GetReligionData()->SetReligion(GetReligionData()->GetReligion());4182 pGiftUnit->GetReligionData()->SetReligiousStrength(GetReligionData()->GetReligiousStrength());4183 pGiftUnit->GetReligionData()->SetSpreadsLeft(GetReligionData()->GetSpreadsLeft());41844185 if(pGiftUnit->getOwner() == GC.getGame().getActivePlayer())4186 {4187 strBuffer = GetLocalizedText("TXT_KEY_MISC_GIFTED_UNIT_TO_YOU", GET_PLAYER(eOwner).getNameKey(), pGiftUnit->getNameKey());4188 DLLUI->AddUnitMessage(0, pGiftUnit->GetIDInfo(), pGiftUnit->getOwner(), false, GC.getEVENT_MESSAGE_TIME(), strBuffer/*, "AS2D_UNITGIFTED", MESSAGE_TYPE_INFO, pGiftUnit->getUnitInfo().GetButton(), (ColorTypes)GC.getInfoTypeForString("COLOR_WHITE"), pGiftUnit->getX(), pGiftUnit->getY(), true, true*/);4189 }41904191 CvPlayer* pMinorCiv = &GET_PLAYER(pGiftUnit->getOwner());41924193 // Gift to Minor Civ4194 CvPlayer& kPlayer = GET_PLAYER(getOwner());4195 if(!kPlayer.isMinorCiv() && pMinorCiv->isMinorCiv())4196 {4197 pMinorCiv->GetMinorCivAI()->DoUnitGiftFromMajor(eOwner, pGiftUnit, /*bDistanceGift*/ false);4198 }4199 }4200}