… | |
… | |
3 | * |
3 | * |
4 | * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team |
4 | * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team |
5 | * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team |
5 | * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team |
6 | * Copyright (©) 1992,2007 Frank Tore Johansen |
6 | * Copyright (©) 1992,2007 Frank Tore Johansen |
7 | * |
7 | * |
8 | * Crossfire TRT is free software; you can redistribute it and/or modify it |
8 | * Crossfire TRT is free software: you can redistribute it and/or modify |
9 | * under the terms of the GNU General Public License as published by the Free |
9 | * it under the terms of the GNU General Public License as published by |
10 | * Software Foundation; either version 2 of the License, or (at your option) |
10 | * the Free Software Foundation, either version 3 of the License, or |
11 | * any later version. |
11 | * (at your option) any later version. |
12 | * |
12 | * |
13 | * This program is distributed in the hope that it will be useful, but |
13 | * This program is distributed in the hope that it will be useful, |
14 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | * for more details. |
16 | * GNU General Public License for more details. |
17 | * |
17 | * |
18 | * You should have received a copy of the GNU General Public License along |
18 | * You should have received a copy of the GNU General Public License |
19 | * with Crossfire TRT; if not, write to the Free Software Foundation, Inc. 51 |
19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
20 | * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
|
|
21 | * |
20 | * |
22 | * The authors can be reached via e-mail to <crossfire@schmorp.de> |
21 | * The authors can be reached via e-mail to <crossfire@schmorp.de> |
23 | */ |
22 | */ |
24 | |
23 | |
25 | /* Created July 95 to separate skill utilities from actual skills -b.t. */ |
24 | /* Created July 95 to separate skill utilities from actual skills -b.t. */ |
… | |
… | |
657 | * Note this function is a bit more complicated becauase we |
656 | * Note this function is a bit more complicated becauase we |
658 | * we want ot sort the skills before printing them. If we |
657 | * we want ot sort the skills before printing them. If we |
659 | * just dumped this as we found it, this would be a bit |
658 | * just dumped this as we found it, this would be a bit |
660 | * simpler. |
659 | * simpler. |
661 | */ |
660 | */ |
662 | |
661 | //TODO: egad, do it in perl, do not suffer from the big buffer on stack, make it one single drawinfo. |
663 | void |
662 | void |
664 | show_skills (object *op, const char *search) |
663 | show_skills (object *op, const char *search) |
665 | { |
664 | { |
666 | object *tmp = NULL; |
665 | object *tmp = NULL; |
667 | char buf[MAX_BUF]; |
666 | char buf[MAX_BUF]; |
… | |
… | |
669 | int i, num_skills_found = 0; |
668 | int i, num_skills_found = 0; |
670 | static const char *const periods = "........................................"; |
669 | static const char *const periods = "........................................"; |
671 | |
670 | |
672 | /* Need to have a pointer and use strdup for qsort to work properly */ |
671 | /* Need to have a pointer and use strdup for qsort to work properly */ |
673 | char skills[NUM_SKILLS][MAX_BUF]; |
672 | char skills[NUM_SKILLS][MAX_BUF]; |
674 | |
|
|
675 | |
673 | |
676 | for (tmp = op->inv; tmp != NULL; tmp = tmp->below) |
674 | for (tmp = op->inv; tmp != NULL; tmp = tmp->below) |
677 | { |
675 | { |
678 | if (tmp->type == SKILL) |
676 | if (tmp->type == SKILL) |
679 | { |
677 | { |
… | |
… | |
682 | /* Basically want to fill this out to 40 spaces with periods */ |
680 | /* Basically want to fill this out to 40 spaces with periods */ |
683 | sprintf (buf, "%s%s", &tmp->name, periods); |
681 | sprintf (buf, "%s%s", &tmp->name, periods); |
684 | buf[40] = 0; |
682 | buf[40] = 0; |
685 | |
683 | |
686 | if (settings.permanent_exp_ratio) |
684 | if (settings.permanent_exp_ratio) |
687 | { |
|
|
688 | sprintf (skills[num_skills_found++], "%slvl:%3d (xp:%" PRId64 "/%" PRId64 "/%d%%)", |
685 | sprintf (skills[num_skills_found++], "%slvl:%3d (xp:%" PRId64 "/%" PRId64 "/%d%%)", |
689 | buf, tmp->level, tmp->stats.exp, |
686 | buf, tmp->level, tmp->stats.exp, |
690 | level_exp (tmp->level + 1, op->expmul), clipped_percent (tmp->perm_exp, tmp->stats.exp)); |
687 | level_exp (tmp->level + 1, op->expmul), clipped_percent (tmp->perm_exp, tmp->stats.exp)); |
691 | } |
|
|
692 | else |
688 | else |
693 | { |
|
|
694 | sprintf (skills[num_skills_found++], "%slvl:%3d (xp:%" PRId64 "/%" PRId64 ")", |
689 | sprintf (skills[num_skills_found++], "%slvl:%3d (xp:%" PRId64 "/%" PRId64 ")", |
695 | buf, tmp->level, tmp->stats.exp, level_exp (tmp->level + 1, op->expmul)); |
690 | buf, tmp->level, tmp->stats.exp, level_exp (tmp->level + 1, op->expmul)); |
696 | } |
691 | |
697 | /* I don't know why some characters get a bunch of skills, but |
692 | /* I don't know why some characters get a bunch of skills, but |
698 | * it sometimes happens (maybe a leftover from bugier earlier code |
693 | * it sometimes happens (maybe a leftover from bugier earlier code |
699 | * and those character are still about). In any case, lets handle |
694 | * and those character are still about). In any case, lets handle |
700 | * it so it doesn't crash the server - otherwise, one character may |
695 | * it so it doesn't crash the server - otherwise, one character may |
701 | * crash the server numerous times. |
696 | * crash the server numerous times. |
… | |
… | |
707 | break; |
702 | break; |
708 | } |
703 | } |
709 | } |
704 | } |
710 | } |
705 | } |
711 | |
706 | |
712 | clear_win_info (op); |
|
|
713 | new_draw_info (NDI_UNIQUE, 0, op, "Player skills:"); |
707 | new_draw_info (NDI_UNIQUE, 0, op, "Player skills:"); |
714 | if (num_skills_found > 1) |
708 | if (num_skills_found > 1) |
715 | qsort (skills, num_skills_found, MAX_BUF, (int (*)(const void *, const void *)) std::strcmp); |
709 | qsort (skills, num_skills_found, MAX_BUF, (int (*)(const void *, const void *)) std::strcmp); |
716 | |
710 | |
717 | for (i = 0; i < num_skills_found; i++) |
711 | for (i = 0; i < num_skills_found; i++) |