void editVisit(){ if(isLoged == 0){ printf("\n!!Musisz byc zalogowany by edytowac wizyty!!\n"); return; } char choose; do{ getVisitInfo(); printf("\n#1. Odwolaj wizyte\n"); printf("#2. Zmien termin wizyty\n"); printf("#q. Cofnij\n"); fgets(&choose,5,stdin); switch(choose){ case '1' : { cancelVisit(); break; } case '2' : { //chooseDoctor(); break; } } }while(choose != 'q'); }
void CRewardableObject::grantReward(ui32 rewardID, const CGHeroInstance * hero) const { ChangeObjectVisitors cov(ChangeObjectVisitors::VISITOR_ADD, id, hero->id); cb->sendAndApply(&cov); cb->setObjProperty(id, ObjProperty::REWARD_SELECT, rewardID); grantRewardBeforeLevelup(getVisitInfo(rewardID, hero), hero); }
void CRewardableObject::onHeroVisit(const CGHeroInstance *h) const { auto grantRewardWithMessage = [&](int index) -> void { auto vi = getVisitInfo(index, h); logGlobal->debugStream() << "Granting reward " << index << ". Message says: " << vi.message.toString(); // show message only if it is not empty if (!vi.message.toString().empty()) { InfoWindow iw; iw.player = h->tempOwner; iw.soundID = soundID; iw.text = vi.message; vi.reward.loadComponents(iw.components, h); cb->showInfoDialog(&iw); } // grant reward afterwards. Note that it may remove object grantReward(index, h); }; auto selectRewardsMessage = [&](std::vector<ui32> rewards) -> void { BlockingDialog sd(canRefuse, rewards.size() > 1); sd.player = h->tempOwner; sd.soundID = soundID; sd.text = onSelect; for (auto index : rewards) sd.components.push_back(getVisitInfo(index, h).reward.getDisplayedComponent(h)); cb->showBlockingDialog(&sd); }; if(!wasVisited(h)) { auto rewards = getAvailableRewards(h); bool objectRemovalPossible = false; for(auto index : rewards) { if(getVisitInfo(index, h).reward.removeObject) objectRemovalPossible = true; } logGlobal->debugStream() << "Visiting object with " << rewards.size() << " possible rewards"; switch (rewards.size()) { case 0: // no available rewards, e.g. empty flotsam { InfoWindow iw; iw.player = h->tempOwner; iw.soundID = soundID; if (!onEmpty.toString().empty()) iw.text = onEmpty; else iw.text = onVisited; cb->showInfoDialog(&iw); break; } case 1: // one reward. Just give it with message { if (canRefuse) selectRewardsMessage(rewards); else grantRewardWithMessage(rewards[0]); break; } default: // multiple rewards. Act according to select mode { switch (selectMode) { case SELECT_PLAYER: // player must select selectRewardsMessage(rewards); break; case SELECT_FIRST: // give first available grantRewardWithMessage(rewards[0]); break; case SELECT_RANDOM: // select one randomly //TODO: use weights grantRewardWithMessage(rewards[CRandomGenerator::getDefault().nextInt(rewards.size()-1)]); break; } break; } } if(!objectRemovalPossible && getAvailableRewards(h).size() == 0) { ChangeObjectVisitors cov(ChangeObjectVisitors::VISITOR_ADD_TEAM, id, h->id); cb->sendAndApply(&cov); } } else { logGlobal->debugStream() << "Revisiting already visited object"; InfoWindow iw; iw.player = h->tempOwner; iw.soundID = soundID; if (!onVisited.toString().empty()) iw.text = onVisited; else iw.text = onEmpty; cb->showInfoDialog(&iw); } }
void CRewardableObject::heroLevelUpDone(const CGHeroInstance *hero) const { grantRewardAfterLevelup(getVisitInfo(selectedReward, hero), hero); }