void openTalentMenu(edict_t *ent, int talentID) { talent_t *talent = &ent->myskills.talents.talent[getTalentSlot(ent, talentID)]; int level = talent->upgradeLevel; int lineCount = 7;//12; if (!ShowMenu(ent)) return; clearmenu(ent); addlinetomenu(ent, "Talent", MENU_GREEN_CENTERED); addlinetomenu(ent, GetTalentString(talentID), MENU_WHITE_CENTERED); addlinetomenu(ent, " ", 0); lineCount += writeTalentDescription(ent, talentID); addlinetomenu(ent, " ", 0); //addlinetomenu(ent, "Current", MENU_GREEN_CENTERED); //writeTalentUpgrade(ent, talentID, level); addlinetomenu(ent, " ", 0); if(talent->upgradeLevel < talent->maxLevel) addlinetomenu(ent, "Upgrade this talent.", -1*(talentID+1)); else addlinetomenu(ent, " ", 0); addlinetomenu(ent, "Previous menu.", talentID+1); setmenuhandler(ent, TalentUpgradeMenu_handler); ent->client->menustorage.currentline = lineCount; showmenu(ent); }
//Upgrades the talent with a matching talentID void upgradeTalent(edict_t *ent, int talentID) { int slot = getTalentSlot(ent, talentID); talent_t *talent; if(slot == -1) return; talent = &ent->myskills.talents.talent[slot]; // check for conflicting talents if (talentID == TALENT_RAPID_ASSEMBLY && getTalentLevel(ent, TALENT_PRECISION_TUNING) > 0) { gi.cprintf(ent, PRINT_HIGH, "Rapid Assembly can't be combined with Precision Tuning.\n"); return; } if (talentID == TALENT_PRECISION_TUNING && getTalentLevel(ent, TALENT_RAPID_ASSEMBLY) > 0) { gi.cprintf(ent, PRINT_HIGH, "Precision Tuning can't be combined with Rapid Assembly.\n"); return; } if (talentID == TALENT_CORPULENCE && getTalentLevel(ent, TALENT_LIFE_TAP) > 0) { gi.cprintf(ent, PRINT_HIGH, "Corpulence can't be combined with Life Tap.\n"); return; } if (talentID == TALENT_LIFE_TAP && getTalentLevel(ent, TALENT_CORPULENCE) > 0) { gi.cprintf(ent, PRINT_HIGH, "Life Tap can't be combined with Corpulence.\n"); return; } if(talent->upgradeLevel == talent->maxLevel) { gi.cprintf(ent, PRINT_HIGH, "You can not upgrade this talent any further.\n"); return; } if(ent->myskills.talents.talentPoints < 1) { gi.cprintf(ent, PRINT_HIGH, "You do not have enough talent points.\n"); return; } //We can upgrade. talent->upgradeLevel++; ent->myskills.talents.talentPoints--; gi.cprintf(ent, PRINT_HIGH, va("%s upgraded to level %d/%d.\n", GetTalentString(talent->id), talent->upgradeLevel, talent->maxLevel)); gi.cprintf(ent, PRINT_HIGH, va("Talent points remaining: %d\n", ent->myskills.talents.talentPoints)); savePlayer(ent); }
void OpenTalentUpgradeMenu (edict_t *ent, int lastline) { talent_t *talent; char buffer[30]; int i; if (!ShowMenu(ent)) return; clearmenu(ent); // menu header addlinetomenu(ent, "Talents", MENU_GREEN_CENTERED); addlinetomenu(ent, " ", 0); for (i = 0; i < ent->myskills.talents.count; i++) { talent = &ent->myskills.talents.talent[i]; //create menu string strcpy(buffer, GetTalentString(talent->id)); strcat(buffer, ":"); padRight(buffer, 15); addlinetomenu(ent, va("%d. %s %d/%d", i+1, buffer, talent->upgradeLevel, talent->maxLevel), talent->id); } // menu footer addlinetomenu(ent, " ", 0); addlinetomenu(ent, va("You have %d talent points.", ent->myskills.talents.talentPoints), 0); addlinetomenu(ent, " ", 0); addlinetomenu(ent, "Exit", 9999); setmenuhandler(ent, openTalentMenu_handler); if (!lastline) ent->client->menustorage.currentline = ent->myskills.talents.count + 6; else ent->client->menustorage.currentline = lastline + 2; showmenu(ent); // try to shortcut to chat-protect mode if (ent->client->idle_frames < CHAT_PROTECT_FRAMES-51) ent->client->idle_frames = CHAT_PROTECT_FRAMES-51; }