… | |
… | |
47 | * other player, or NULL otherwise. |
47 | * other player, or NULL otherwise. |
48 | */ |
48 | */ |
49 | static player * |
49 | static player * |
50 | get_other_player_from_name (object *op, char *name) |
50 | get_other_player_from_name (object *op, char *name) |
51 | { |
51 | { |
52 | player *pl; |
|
|
53 | |
|
|
54 | if (!name) |
52 | if (!name) |
55 | return NULL; |
53 | return NULL; |
56 | |
54 | |
57 | for (pl = first_player; pl != NULL; pl = pl->next) |
55 | for_all_players (pl) |
58 | if (!strncmp (pl->ob->name, name, MAX_NAME)) |
56 | if (!strncmp (pl->ob->name, name, MAX_NAME)) |
59 | break; |
|
|
60 | |
|
|
61 | if (pl == NULL) |
|
|
62 | { |
57 | { |
63 | new_draw_info (NDI_UNIQUE, 0, op, "No such player."); |
|
|
64 | return NULL; |
|
|
65 | } |
|
|
66 | |
|
|
67 | if (pl->ob == op) |
58 | if (pl->ob == op) |
68 | { |
59 | { |
69 | new_draw_info (NDI_UNIQUE, 0, op, "You can't do that to yourself."); |
60 | new_draw_info (NDI_UNIQUE, 0, op, "You can't do that to yourself."); |
70 | return NULL; |
61 | return NULL; |
71 | } |
62 | } |
72 | |
63 | |
73 | if (pl->ns->state != ST_PLAYING) |
64 | if (pl->ns->state != ST_PLAYING) |
74 | { |
65 | { |
75 | new_draw_info (NDI_UNIQUE, 0, op, "That player is in no state for that right now."); |
66 | new_draw_info (NDI_UNIQUE, 0, op, "That player is in no state for that right now."); |
76 | return NULL; |
67 | return NULL; |
|
|
68 | } |
|
|
69 | |
|
|
70 | return pl; |
77 | } |
71 | } |
78 | |
72 | |
|
|
73 | new_draw_info (NDI_UNIQUE, 0, op, "No such player."); |
79 | return pl; |
74 | return 0; |
80 | } |
75 | } |
81 | |
76 | |
82 | /** |
77 | /** |
83 | * Actually hides specified player (obviously a DM). |
78 | * Actually hides specified player (obviously a DM). |
84 | * If 'silent_dm' is non zero, other players are informed of DM entering/leaving, |
79 | * If 'silent_dm' is non zero, other players are informed of DM entering/leaving, |
… | |
… | |
232 | } |
227 | } |
233 | |
228 | |
234 | int |
229 | int |
235 | command_kick (object *op, char *params) |
230 | command_kick (object *op, char *params) |
236 | { |
231 | { |
237 | for (player *pl = first_player; pl; pl = pl->next) |
232 | for_all_players (pl) |
238 | if ((params == NULL || !strcmp (&pl->ob->name, params)) && !INVOKE_PLAYER (KICK, pl, ARG_STRING (params))) |
233 | if ((params == NULL || !strcmp (&pl->ob->name, params)) && !INVOKE_PLAYER (KICK, pl, ARG_STRING (params))) |
239 | { |
234 | { |
240 | object *op = pl->ob; |
235 | object *op = pl->ob; |
241 | |
236 | |
242 | if (!QUERY_FLAG (op, FLAG_REMOVED) && !QUERY_FLAG (op, FLAG_FREED)) |
237 | if (!QUERY_FLAG (op, FLAG_REMOVED) && !QUERY_FLAG (op, FLAG_FREED)) |
… | |
… | |
1069 | command_addexp (object *op, char *params) |
1064 | command_addexp (object *op, char *params) |
1070 | { |
1065 | { |
1071 | char buf[MAX_BUF], skill[MAX_BUF]; |
1066 | char buf[MAX_BUF], skill[MAX_BUF]; |
1072 | int i, q; |
1067 | int i, q; |
1073 | object *skillob = NULL; |
1068 | object *skillob = NULL; |
1074 | player *pl; |
|
|
1075 | |
1069 | |
1076 | skill[0] = '\0'; |
1070 | skill[0] = '\0'; |
1077 | if ((params == NULL) || (strlen (params) > MAX_BUF) || ((q = sscanf (params, "%s %d %s", buf, &i, skill)) < 2)) |
1071 | if ((params == NULL) || (strlen (params) > MAX_BUF) || ((q = sscanf (params, "%s %d %s", buf, &i, skill)) < 2)) |
1078 | { |
1072 | { |
1079 | new_draw_info (NDI_UNIQUE, 0, op, "Usage: addexp <who> <how much> [<skill>]."); |
1073 | new_draw_info (NDI_UNIQUE, 0, op, "Usage: addexp <who> <how much> [<skill>]."); |
1080 | return 1; |
1074 | return 1; |
1081 | } |
1075 | } |
1082 | |
1076 | |
1083 | for (pl = first_player; pl != NULL; pl = pl->next) |
1077 | for_all_players (pl) |
1084 | if (!strncmp (pl->ob->name, buf, MAX_NAME)) |
1078 | if (!strncmp (pl->ob->name, buf, MAX_NAME)) |
1085 | break; |
|
|
1086 | |
|
|
1087 | if (pl == NULL) |
|
|
1088 | { |
1079 | { |
1089 | new_draw_info (NDI_UNIQUE, 0, op, "No such player."); |
|
|
1090 | return 1; |
|
|
1091 | } |
|
|
1092 | |
|
|
1093 | if (q >= 3) |
1080 | if (q >= 3) |
1094 | { |
1081 | { |
1095 | skillob = find_skill_by_name (pl->ob, skill); |
1082 | skillob = find_skill_by_name (pl->ob, skill); |
1096 | if (!skillob) |
1083 | if (!skillob) |
1097 | { |
1084 | { |
1098 | new_draw_info_format (NDI_UNIQUE, 0, op, "Unable to find skill %s in %s", skill, buf); |
1085 | new_draw_info_format (NDI_UNIQUE, 0, op, "Unable to find skill %s in %s", skill, buf); |
|
|
1086 | return 1; |
|
|
1087 | } |
|
|
1088 | |
|
|
1089 | i = check_exp_adjust (skillob, i); |
|
|
1090 | skillob->stats.exp += i; |
|
|
1091 | calc_perm_exp (skillob); |
|
|
1092 | player_lvl_adj (pl->ob, skillob); |
|
|
1093 | } |
|
|
1094 | |
|
|
1095 | pl->ob->stats.exp += i; |
|
|
1096 | calc_perm_exp (pl->ob); |
|
|
1097 | player_lvl_adj (pl->ob, NULL); |
|
|
1098 | |
|
|
1099 | if (settings.real_wiz == FALSE) |
|
|
1100 | SET_FLAG (pl->ob, FLAG_WAS_WIZ); |
|
|
1101 | |
1099 | return 1; |
1102 | return 1; |
1100 | } |
1103 | } |
1101 | |
1104 | |
1102 | i = check_exp_adjust (skillob, i); |
1105 | new_draw_info (NDI_UNIQUE, 0, op, "No such player."); |
1103 | skillob->stats.exp += i; |
|
|
1104 | calc_perm_exp (skillob); |
|
|
1105 | player_lvl_adj (pl->ob, skillob); |
|
|
1106 | } |
|
|
1107 | |
|
|
1108 | pl->ob->stats.exp += i; |
|
|
1109 | calc_perm_exp (pl->ob); |
|
|
1110 | player_lvl_adj (pl->ob, NULL); |
|
|
1111 | |
|
|
1112 | if (settings.real_wiz == FALSE) |
|
|
1113 | SET_FLAG (pl->ob, FLAG_WAS_WIZ); |
|
|
1114 | return 1; |
1106 | return 1; |
1115 | } |
1107 | } |
1116 | |
1108 | |
1117 | /**************************************************************************/ |
1109 | /**************************************************************************/ |
1118 | |
1110 | |
… | |
… | |
1124 | |
1116 | |
1125 | int |
1117 | int |
1126 | command_stats (object *op, char *params) |
1118 | command_stats (object *op, char *params) |
1127 | { |
1119 | { |
1128 | char thing[20]; |
1120 | char thing[20]; |
1129 | player *pl; |
|
|
1130 | char buf[MAX_BUF]; |
1121 | char buf[MAX_BUF]; |
1131 | |
1122 | |
1132 | thing[0] = '\0'; |
1123 | thing[0] = '\0'; |
1133 | if (params == NULL || !sscanf (params, "%s", thing) || thing == NULL) |
1124 | if (params == NULL || !sscanf (params, "%s", thing) || thing == NULL) |
1134 | { |
1125 | { |
1135 | new_draw_info (NDI_UNIQUE, 0, op, "Who?"); |
1126 | new_draw_info (NDI_UNIQUE, 0, op, "Who?"); |
1136 | return 1; |
1127 | return 1; |
1137 | } |
1128 | } |
1138 | |
1129 | |
1139 | for (pl = first_player; pl != NULL; pl = pl->next) |
1130 | for_all_players (pl) |
1140 | if (!strcmp (pl->ob->name, thing)) |
1131 | if (!strcmp (pl->ob->name, thing)) |
1141 | { |
1132 | { |
1142 | sprintf (buf, "Str : %-2d H.P. : %-4d MAX : %d", pl->ob->stats.Str, pl->ob->stats.hp, pl->ob->stats.maxhp); |
1133 | sprintf (buf, "Str : %-2d H.P. : %-4d MAX : %d", pl->ob->stats.Str, pl->ob->stats.hp, pl->ob->stats.maxhp); |
1143 | new_draw_info (NDI_UNIQUE, 0, op, buf); |
1134 | new_draw_info (NDI_UNIQUE, 0, op, buf); |
1144 | sprintf (buf, "Dex : %-2d S.P. : %-4d MAX : %d", pl->ob->stats.Dex, pl->ob->stats.sp, pl->ob->stats.maxsp); |
1135 | sprintf (buf, "Dex : %-2d S.P. : %-4d MAX : %d", pl->ob->stats.Dex, pl->ob->stats.sp, pl->ob->stats.maxsp); |
… | |
… | |
1151 | new_draw_info (NDI_UNIQUE, 0, op, buf); |
1142 | new_draw_info (NDI_UNIQUE, 0, op, buf); |
1152 | sprintf (buf, "Pow : %-2d Grace : %d", pl->ob->stats.Pow, pl->ob->stats.grace); |
1143 | sprintf (buf, "Pow : %-2d Grace : %d", pl->ob->stats.Pow, pl->ob->stats.grace); |
1153 | new_draw_info (NDI_UNIQUE, 0, op, buf); |
1144 | new_draw_info (NDI_UNIQUE, 0, op, buf); |
1154 | sprintf (buf, "Cha : %-2d Food : %d", pl->ob->stats.Cha, pl->ob->stats.food); |
1145 | sprintf (buf, "Cha : %-2d Food : %d", pl->ob->stats.Cha, pl->ob->stats.food); |
1155 | new_draw_info (NDI_UNIQUE, 0, op, buf); |
1146 | new_draw_info (NDI_UNIQUE, 0, op, buf); |
1156 | break; |
1147 | return 1; |
1157 | } |
1148 | } |
1158 | if (pl == NULL) |
1149 | |
1159 | new_draw_info (NDI_UNIQUE, 0, op, "No such player."); |
1150 | new_draw_info (NDI_UNIQUE, 0, op, "No such player."); |
1160 | return 1; |
1151 | return 1; |
1161 | } |
1152 | } |
1162 | |
1153 | |
1163 | int |
1154 | int |
1164 | command_abil (object *op, char *params) |
1155 | command_abil (object *op, char *params) |
… | |
… | |
1187 | { |
1178 | { |
1188 | new_draw_info (NDI_UNIQUE, 0, op, "Illegal range of stat.\n"); |
1179 | new_draw_info (NDI_UNIQUE, 0, op, "Illegal range of stat.\n"); |
1189 | return 1; |
1180 | return 1; |
1190 | } |
1181 | } |
1191 | |
1182 | |
1192 | for (pl = first_player; pl != NULL; pl = pl->next) |
1183 | for_all_players (pl) |
1193 | { |
1184 | { |
1194 | if (!strcmp (pl->ob->name, thing)) |
1185 | if (!strcmp (pl->ob->name, thing)) |
1195 | { |
1186 | { |
1196 | if (settings.real_wiz == FALSE) |
1187 | if (settings.real_wiz == FALSE) |
1197 | SET_FLAG (pl->ob, FLAG_WAS_WIZ); |
1188 | SET_FLAG (pl->ob, FLAG_WAS_WIZ); |
… | |
… | |
1296 | insert_ob_in_map (op, m, NULL, 0); |
1287 | insert_ob_in_map (op, m, NULL, 0); |
1297 | dummy->destroy (); |
1288 | dummy->destroy (); |
1298 | } |
1289 | } |
1299 | |
1290 | |
1300 | new_draw_info (NDI_UNIQUE, 0, op, "Reset failed, couldn't swap map, the following players are on it:"); |
1291 | new_draw_info (NDI_UNIQUE, 0, op, "Reset failed, couldn't swap map, the following players are on it:"); |
1301 | for (pl = first_player; pl != NULL; pl = pl->next) |
1292 | |
1302 | { |
1293 | for_all_players (pl) |
1303 | if (pl->ob->map == m && pl->ob != op) |
1294 | if (pl->ob->map == m && pl->ob != op) |
1304 | { |
1295 | { |
1305 | new_draw_info_format (NDI_UNIQUE, 0, op, "%s", &pl->ob->name); |
1296 | new_draw_info_format (NDI_UNIQUE, 0, op, "%s", &pl->ob->name); |
1306 | playercount++; |
1297 | playercount++; |
1307 | } |
1298 | } |
1308 | } |
1299 | |
1309 | if (!playercount) |
1300 | if (!playercount) |
1310 | new_draw_info (NDI_UNIQUE, 0, op, "hmm, I don't see any other players on this map, something else is the problem."); |
1301 | new_draw_info (NDI_UNIQUE, 0, op, "hmm, I don't see any other players on this map, something else is the problem."); |
1311 | return 1; |
1302 | return 1; |
1312 | } |
1303 | } |
1313 | } |
1304 | } |