1 | /* |
1 | /* |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
3 | * |
3 | * |
4 | * Copyright (©) 2005,2006,2007,2008,2009 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
4 | * Copyright (©) 2005,2006,2007,2008,2009,2010 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
5 | * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team |
5 | * Copyright (©) 2002 Mark Wedel & Crossfire Development Team |
6 | * Copyright (©) 1992,2007 Frank Tore Johansen |
6 | * Copyright (©) 1992 Frank Tore Johansen |
7 | * |
7 | * |
8 | * Deliantra is free software: you can redistribute it and/or modify it under |
8 | * Deliantra is free software: you can redistribute it and/or modify it under |
9 | * the terms of the Affero GNU General Public License as published by the |
9 | * the terms of the Affero GNU General Public License as published by the |
10 | * Free Software Foundation, either version 3 of the License, or (at your |
10 | * Free Software Foundation, either version 3 of the License, or (at your |
11 | * option) any later version. |
11 | * option) any later version. |
… | |
… | |
59 | /* init_skills basically just sets up the skill_names table |
59 | /* init_skills basically just sets up the skill_names table |
60 | * above. The index into the array is set up by the |
60 | * above. The index into the array is set up by the |
61 | * subtypes. |
61 | * subtypes. |
62 | */ |
62 | */ |
63 | void |
63 | void |
64 | init_skills (void) |
64 | init_skills () |
65 | { |
65 | { |
66 | for_all_archetypes (at) |
66 | for_all_archetypes (at) |
67 | if (at->type == SKILL) |
67 | if (at->type == SKILL) |
68 | { |
68 | { |
69 | if (skill_names[at->subtype]) |
69 | if (skill_names[at->subtype]) |
… | |
… | |
168 | |
168 | |
169 | if (!skill) |
169 | if (!skill) |
170 | skill = give_skill_by_name (who, skill_tool->skill); |
170 | skill = give_skill_by_name (who, skill_tool->skill); |
171 | |
171 | |
172 | if (!skill_tool->flag [FLAG_APPLIED]) |
172 | if (!skill_tool->flag [FLAG_APPLIED]) |
173 | if (apply_special (who, splay (skill_tool), AP_APPLY | AP_NO_READY)) |
173 | if (apply_special (who, splay (skill_tool), AP_APPLY)) |
174 | return 0; |
174 | return 0; |
175 | |
175 | |
176 | return splay (skill); |
176 | return splay (skill); |
177 | } |
177 | } |
178 | |
178 | |
… | |
… | |
808 | } |
808 | } |
809 | |
809 | |
810 | static bool |
810 | static bool |
811 | hth_skill_p (object *skill) |
811 | hth_skill_p (object *skill) |
812 | { |
812 | { |
813 | return (skill_flags [skill->subtype] & (SF_COMBAT | SF_NEED_WEAPON)) == SF_COMBAT; |
813 | return (skill_flags [skill->subtype] & (SF_COMBAT | SF_NEED_ITEM)) == SF_COMBAT; |
814 | } |
814 | } |
815 | |
815 | |
816 | /* This finds the first unarmed skill the player has, and returns it. |
816 | /* This finds the first unarmed skill the player has, and returns it. |
817 | */ |
817 | */ |
818 | static object * |
818 | static object * |
… | |
… | |
879 | |
879 | |
880 | if (!skill) |
880 | if (!skill) |
881 | new_draw_info (NDI_BLACK, 0, op, "You have no unarmed combat skills!"); |
881 | new_draw_info (NDI_BLACK, 0, op, "You have no unarmed combat skills!"); |
882 | } |
882 | } |
883 | |
883 | |
884 | if (skill) |
884 | op->apply (skill); |
885 | { |
|
|
886 | op->change_skill (0); |
|
|
887 | apply_special (op, skill, AP_APPLY); |
|
|
888 | } |
|
|
889 | } |
885 | } |
890 | |
886 | |
891 | if (!pl->combat_ob) |
887 | if (!pl->combat_ob) |
892 | { |
888 | { |
893 | LOG (llevError, "Could not find anything to attack on %s\n", &op->name); |
889 | LOG (llevError, "Could not find anything to attack on %s\n", &op->name); |
894 | return 0; |
890 | return 0; |
895 | } |
891 | } |
896 | } |
892 | } |
897 | |
893 | |
898 | if (!op->change_weapon (pl->combat_ob)) |
894 | if (!op->apply (pl->combat_ob)) |
899 | return 0; |
895 | return 0; |
900 | } |
896 | } |
901 | |
897 | |
902 | /* lose invisiblity/hiding status for running attacks */ |
898 | /* lose invisiblity/hiding status for running attacks */ |
903 | if (pl->tmp_invis) |
899 | if (pl->tmp_invis) |