📄 inventory.cpp
字号:
else if(widget == player1Button) setSelectedPlayerAndMode(0, selectedMode); else if(widget == player2Button) setSelectedPlayerAndMode(1, selectedMode); else if(widget == player3Button) setSelectedPlayerAndMode(2, selectedMode); else if(widget == player4Button) setSelectedPlayerAndMode(3, selectedMode); else if(widget == inventoryButton) setSelectedPlayerAndMode(selected, INVENTORY); else if(widget == skillsButton) setSelectedPlayerAndMode(selected, CHARACTER); else if(widget == spellsButton) setSelectedPlayerAndMode(selected, SPELL); else if(widget == missionButton) setSelectedPlayerAndMode(selected, MISSION); else if(widget == openButton) { int itemIndex = invList->getSelectedLine(); if(itemIndex > -1) { Item *item = scourge->getParty()->getParty(selected)->getInventory(itemIndex); if(item->getRpgItem()->getType() == RpgItem::CONTAINER) { scourge->openContainerGui(item); } } } else if(widget == equipButton) { equipItem(); } else if(widget == eatDrinkButton) { if(scourge->getParty()->getParty(selected)->getStateMod(Constants::dead)) { scourge->showMessageDialog(Constants::getMessage(Constants::DEAD_CHARACTER_ERROR)); } else { int itemIndex = invList->getSelectedLine(); if(itemIndex > -1 && creature->getInventoryCount() > itemIndex) { // this action will occur in the next battle round creature->setAction(Constants::ACTION_EAT_DRINK, creature->getInventory(itemIndex), NULL); creature->setTargetCreature(creature); mainWin->setVisible(false); // if(scourge->getParty()->getParty(selected)->eatDrink(itemIndex)){ // scourge->getParty()->getParty(selected)->removeInventory(itemIndex); // } // refresh screen //setSelectedPlayerAndMode(selected, INVENTORY); } } } else if(widget == skillAddButton) { if(scourge->getParty()->getParty(selected)->getStateMod(Constants::dead) || !scourge->getParty()->getParty(selected)->getStateMod(Constants::leveled)) { error = Constants::getMessage(Constants::LEVEL_UP_ERROR); } else if(scourge->getParty()->getParty(selected)->getAvailableSkillPoints() <= 0) { // error = Constants::getMessage(Constants::OUT_OF_POINTS_ERROR); } else { int itemIndex = skillList->getSelectedLine(); if(itemIndex <= -1) { error = Constants::getMessage(Constants::NO_SKILL_ERROR); } else { scourge->getParty()->getParty(selected)->incSkillMod(itemIndex); // recreate list strings int oldLine = skillList->getSelectedLine(); setSelectedPlayerAndMode(selected, selectedMode); skillList->setSelectedLine(oldLine); } } if(error) { cerr << error << endl; scourge->showMessageDialog(error); } } else if(widget == skillSubButton) { if(scourge->getParty()->getParty(selected)->getStateMod(Constants::dead) || !scourge->getParty()->getParty(selected)->getStateMod(Constants::leveled)) { error = Constants::getMessage(Constants::LEVEL_UP_ERROR); } else if(scourge->getParty()->getParty(selected)->getAvailableSkillPoints() == scourge->getParty()->getParty(selected)->getCharacter()->getSkillBonus()) { // error = Constants::getMessage(Constants::OUT_OF_POINTS_ERROR); } else { int itemIndex = skillList->getSelectedLine(); if(itemIndex <= -1) { error = Constants::getMessage(Constants::NO_SKILL_ERROR); } else { scourge->getParty()->getParty(selected)->decSkillMod(itemIndex); // recreate list strings int oldLine = skillList->getSelectedLine(); setSelectedPlayerAndMode(selected, selectedMode); skillList->setSelectedLine(oldLine); } } if(error) { cerr << error << endl; scourge->showMessageDialog(error); } } else if(widget == levelUpButton) { if(scourge->getParty()->getParty(selected)->getStateMod(Constants::dead) || !scourge->getParty()->getParty(selected)->getStateMod(Constants::leveled)) { error = Constants::getMessage(Constants::LEVEL_UP_ERROR); } else { scourge->getParty()->getParty(selected)->applySkillMod(); // recreate list strings int oldLine = skillList->getSelectedLine(); setSelectedPlayerAndMode(selected, selectedMode); skillList->setSelectedLine(oldLine); } if(error) { cerr << error << endl; scourge->showMessageDialog(error); } } else if(widget == schoolList) { int n = schoolList->getSelectedLine(); if(n != -1 && n < MagicSchool::getMagicSchoolCount()) { showMemorizedSpellsInSchool( scourge->getParty()->getParty(selected), MagicSchool::getMagicSchool(n)); } } else if(widget == spellList) { Spell *spell = getSelectedSpell(); if(spell) showSpellDescription(spell); } else if(widget == castButton) { Spell *spell = getSelectedSpell(); if(spell) { if(spell->getMp() > creature->getMp()) { scourge->showMessageDialog("Not enough Magic Points to cast this spell!"); } else { creature->setAction(Constants::ACTION_CAST_SPELL, NULL, spell); scourge->setTargetSelectionFor(creature); mainWin->setVisible(false); } } } else if(widget == castScrollButton) { // no MP-s used when casting from scroll, but the scroll is destroyed. int itemIndex = invList->getSelectedLine(); if(itemIndex > -1 && creature->getInventoryCount() > itemIndex) { Item *item = creature->getInventory(itemIndex); if(item->getSpell()) { creature->setAction(Constants::ACTION_CAST_SPELL, item, item->getSpell()); scourge->setTargetSelectionFor(creature); mainWin->setVisible(false); } else { scourge->showMessageDialog("You can only cast objects of magical nature!"); } } } else if(widget == transcribeButton) { int itemIndex = invList->getSelectedLine(); if(itemIndex > -1 && creature->getInventoryCount() > itemIndex) { Item *item = creature->getInventory(itemIndex); if(item->getSpell()) { if(creature->getSkill(item->getSpell()->getSchool()->getSkill()) > item->getSpell()->getLevel() * 5 && creature->getMp() > 0) { bool res = creature->addSpell(item->getSpell()); if(res) { scourge->showMessageDialog("Spell was entered into your spellbook."); // destroy the scroll creature->removeInventory(itemIndex); setSelectedPlayerAndMode(selected, selectedMode); char msg[120]; sprintf(msg, "%s crumbles into dust.", item->getItemName()); scourge->getMap()->addDescription(msg); } else { scourge->showMessageDialog("You already know this spell"); } } else { scourge->showMessageDialog("You are not proficient enough to transcribe this scroll."); } } else { scourge->showMessageDialog("You can only transcribe scrolls!"); } } } return false;}void Inventory::moveItemTo(int playerIndex) { int itemIndex = invList->getSelectedLine(); if(itemIndex > -1 && scourge->getParty()->getParty(selected)->getInventoryCount() > itemIndex) { if(playerIndex != selected) { scourge->getParty()->getParty(playerIndex)-> addInventory(scourge->getParty()->getParty(selected)->removeInventory(itemIndex)); // recreate strings in list setSelectedPlayerAndMode(selected, selectedMode); } }}bool Inventory::handleEvent(SDL_Event *event) { switch(event->type) { case SDL_MOUSEBUTTONUP: break; case SDL_KEYUP: switch(event->key.keysym.sym) { // case SDLK_ESCAPE: // hide(); // return true; default: break; } default: break; } return false;}void Inventory::setSelectedPlayerAndMode(int player, int mode) { selected = player; selectedMode = mode; player1Button->setSelected(selected == 0); player2Button->setSelected(selected == 1); player3Button->setSelected(selected == 2); player4Button->setSelected(selected == 3); inventoryButton->setSelected(selectedMode == INVENTORY); skillsButton->setSelected(selectedMode == CHARACTER); spellsButton->setSelected(selectedMode == SPELL); missionButton->setSelected(selectedMode == MISSION); // show only the ui elements belonging to the current mode cards->setActiveCard(selectedMode); // arrange the gui Creature * selectedP = scourge->getParty()->getParty(selected); switch(selectedMode) { case CHARACTER: sprintf(skillsStr, "Skills: (Available points: %d)", selectedP->getAvailableSkillPoints()); sprintf(nameAndClassStr, "%s, %s (level %d)", selectedP->getName(), selectedP->getCharacter()->getName(), selectedP->getLevel()); nameAndClassLabel->setText(nameAndClassStr); stateCount = 0; for(int t = 0; t < Constants::STATE_MOD_COUNT; t++) { if(selectedP->getStateMod(t)) { sprintf(stateLine[stateCount], "%s", Constants::STATE_NAMES[t]); icons[stateCount] = scourge->getShapePalette()->getStatModIcon(t); stateCount++; } } stateList->setLines(stateCount, (const char**)stateLine, (const Color *)NULL, (stateCount ? (const GLuint*)icons : NULL)); for(int t = 0; t < Constants::SKILL_COUNT; t++) { sprintf(skillLine[t], "%d(%d) - %s", selectedP->getSkill(t), selectedP->getSkillMod(t), Constants::SKILL_NAMES[t]); } skillList->setLines(Constants::SKILL_COUNT, (const char**)skillLine); break; case INVENTORY: sprintf(inventoryWeightStr, " (Total : %2.2fkg / %2.2fkg)", selectedP->getInventoryWeight(), selectedP->getMaxInventoryWeight()); inventoryWeightLabel->setText(inventoryWeightStr); sprintf(coinsStr, "Coins: %d", selectedP->getMoney()); coinsLabel->setText(coinsStr); for(int t = 0; t < selectedP->getInventoryCount(); t++) { Item *item = selectedP->getInventory(t); int location = selectedP->getEquippedIndex(t); char s[100]; item->getDetailedDescription(s); sprintf(pcInvText[t], "%s %s", (location > -1 ? " *" : " "), s); } for(int t = selectedP->getInventoryCount(); t < MAX_INVENTORY_SIZE; t++) { strcpy(pcInvText[t], ""); } invList->setLines(selectedP->getInventoryCount(), (const char **)pcInvText); /* for(int i = 0; i < Character::INVENTORY_COUNT; i++) { Item *item = selectedP->getEquippedInventory(i); invEquipLabel[i]->setText((char *)(item ? item->getItemName() : NULL)); } */ break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -