1 | /* |
1 | /* |
2 | * static char *rcsid_c_wiz_c = |
2 | * static char *rcsid_c_wiz_c = |
3 | * "$Id: c_wiz.c,v 1.1 2006/02/03 07:14:30 root Exp $"; |
3 | * "$Id: c_wiz.c,v 1.2 2006/05/11 15:43:17 root Exp $"; |
4 | */ |
4 | */ |
5 | |
5 | |
6 | /* |
6 | /* |
7 | CrossFire, A Multiplayer game for X-windows |
7 | CrossFire, A Multiplayer game for X-windows |
8 | |
8 | |
… | |
… | |
247 | struct pl *pl; |
247 | struct pl *pl; |
248 | |
248 | |
249 | for (pl = first_player; pl != NULL; pl = pl->next) { |
249 | for (pl = first_player; pl != NULL; pl = pl->next) { |
250 | if ((params == NULL || !strcmp(pl->ob->name, params)) && pl->ob != op) { |
250 | if ((params == NULL || !strcmp(pl->ob->name, params)) && pl->ob != op) { |
251 | object *op; |
251 | object *op; |
252 | int removed = 0; |
252 | int removed = QUERY_FLAG(op, FLAG_REMOVED); |
253 | |
253 | |
254 | op = pl->ob; |
254 | op = pl->ob; |
255 | if (!QUERY_FLAG(op, FLAG_REMOVED)) { |
255 | if (!removed) { |
256 | /* Avion : Here we handle the KICK global event */ |
256 | /* Avion : Here we handle the KICK global event */ |
257 | execute_global_event(EVENT_KICK, op, params); |
257 | execute_global_event(EVENT_KICK, op, params); |
258 | remove_ob(op); |
258 | remove_ob(op); |
259 | removed = 1; |
|
|
260 | } |
259 | } |
261 | op->direction = 0; |
260 | op->direction = 0; |
262 | new_draw_info_format(NDI_UNIQUE|NDI_ALL|NDI_RED, 5, op, |
261 | new_draw_info_format(NDI_UNIQUE|NDI_ALL|NDI_RED, 5, op, |
263 | "%s is kicked out of the game.", op->name); |
262 | "%s is kicked out of the game.", op->name); |
264 | strcpy(op->contr->killer, "left"); |
263 | strcpy(op->contr->killer, "left"); |
… | |
… | |
441 | new_draw_info(NDI_UNIQUE|NDI_RED, 0, pl->ob, "You have been frozen by the DM!"); |
440 | new_draw_info(NDI_UNIQUE|NDI_RED, 0, pl->ob, "You have been frozen by the DM!"); |
442 | new_draw_info_format(NDI_UNIQUE, 0, op, |
441 | new_draw_info_format(NDI_UNIQUE, 0, op, |
443 | "You freeze %s for %d ticks", pl->ob->name, ticks); |
442 | "You freeze %s for %d ticks", pl->ob->name, ticks); |
444 | pl->ob->speed_left = -(pl->ob->speed*ticks); |
443 | pl->ob->speed_left = -(pl->ob->speed*ticks); |
445 | return 0; |
444 | return 0; |
|
|
445 | } |
|
|
446 | |
|
|
447 | int command_arrest(object *op, char *params) { |
|
|
448 | object *dummy; |
|
|
449 | player *pl; |
|
|
450 | if (!op) return 0; |
|
|
451 | if(params==NULL) { |
|
|
452 | new_draw_info(NDI_UNIQUE, 0,op,"Usage: arrest <player>."); |
|
|
453 | return 1; |
|
|
454 | } |
|
|
455 | pl = get_other_player_from_name(op, params); |
|
|
456 | if (!pl) return 1; |
|
|
457 | dummy=get_jail_exit(pl->ob); |
|
|
458 | if (!dummy) { |
|
|
459 | /* we have nowhere to send the prisoner....*/ |
|
|
460 | new_draw_info(NDI_UNIQUE, 0,op,"can't jail player, there is no map to hold them"); |
|
|
461 | return 0; |
|
|
462 | } |
|
|
463 | enter_exit(pl->ob, dummy); |
|
|
464 | free_object(dummy); |
|
|
465 | new_draw_info(NDI_UNIQUE, 0,pl->ob,"You have been arrested."); |
|
|
466 | new_draw_info(NDI_UNIQUE, 0,op,"OK."); |
|
|
467 | LOG(llevInfo, "Player %s arrested by %s\n", pl->ob->name, op->name); |
|
|
468 | return 1; |
446 | } |
469 | } |
447 | |
470 | |
448 | int command_summon(object *op, char *params) { |
471 | int command_summon(object *op, char *params) { |
449 | int i; |
472 | int i; |
450 | object *dummy; |
473 | object *dummy; |
… | |
… | |
1149 | pl->ob->stats.Dex, pl->ob->stats.sp, pl->ob->stats.maxsp); |
1172 | pl->ob->stats.Dex, pl->ob->stats.sp, pl->ob->stats.maxsp); |
1150 | new_draw_info(NDI_UNIQUE, 0, op, buf); |
1173 | new_draw_info(NDI_UNIQUE, 0, op, buf); |
1151 | sprintf(buf, "Con : %-2d AC : %-4d WC : %d", |
1174 | sprintf(buf, "Con : %-2d AC : %-4d WC : %d", |
1152 | pl->ob->stats.Con, pl->ob->stats.ac, pl->ob->stats.wc) ; |
1175 | pl->ob->stats.Con, pl->ob->stats.ac, pl->ob->stats.wc) ; |
1153 | new_draw_info(NDI_UNIQUE, 0, op, buf); |
1176 | new_draw_info(NDI_UNIQUE, 0, op, buf); |
|
|
1177 | sprintf(buf, "Int : %-2d Damage : %d", |
|
|
1178 | pl->ob->stats.Int, pl->ob->stats.dam); |
|
|
1179 | new_draw_info(NDI_UNIQUE, 0, op, buf); |
1154 | #ifndef WIN32 |
1180 | #ifndef WIN32 |
1155 | sprintf(buf, "Wis : %-2d EXP : %lld", |
1181 | sprintf(buf, "Wis : %-2d EXP : %lld", |
1156 | pl->ob->stats.Wis, pl->ob->stats.exp); |
1182 | pl->ob->stats.Wis, pl->ob->stats.exp); |
1157 | #else |
1183 | #else |
1158 | sprintf(buf, "Wis : %-2d EXP : %I64d", |
1184 | sprintf(buf, "Wis : %-2d EXP : %I64d", |
1159 | pl->ob->stats.Wis, pl->ob->stats.exp); |
1185 | pl->ob->stats.Wis, pl->ob->stats.exp); |
1160 | #endif |
1186 | #endif |
1161 | new_draw_info(NDI_UNIQUE, 0, op, buf); |
1187 | new_draw_info(NDI_UNIQUE, 0, op, buf); |
|
|
1188 | sprintf(buf, "Pow : %-2d Grace : %d", |
|
|
1189 | pl->ob->stats.Pow, pl->ob->stats.grace); |
|
|
1190 | new_draw_info(NDI_UNIQUE, 0, op, buf); |
1162 | sprintf(buf, "Cha : %-2d Food : %d", |
1191 | sprintf(buf, "Cha : %-2d Food : %d", |
1163 | pl->ob->stats.Cha, pl->ob->stats.food); |
1192 | pl->ob->stats.Cha, pl->ob->stats.food); |
1164 | new_draw_info(NDI_UNIQUE, 0, op, buf); |
|
|
1165 | sprintf(buf, "Int : %-2d Damage : %d", |
|
|
1166 | pl->ob->stats.Int, pl->ob->stats.dam); |
|
|
1167 | sprintf(buf, "Pow : %-2d Grace : %d", |
|
|
1168 | pl->ob->stats.Pow, pl->ob->stats.grace); |
|
|
1169 | new_draw_info(NDI_UNIQUE, 0, op, buf); |
1193 | new_draw_info(NDI_UNIQUE, 0, op, buf); |
1170 | break; |
1194 | break; |
1171 | } |
1195 | } |
1172 | if (pl == NULL) |
1196 | if (pl == NULL) |
1173 | new_draw_info(NDI_UNIQUE, 0, op, "No such player."); |
1197 | new_draw_info(NDI_UNIQUE, 0, op, "No such player."); |
… | |
… | |
1918 | } |
1942 | } |
1919 | |
1943 | |
1920 | new_draw_info(NDI_UNIQUE, 0, op, diff); |
1944 | new_draw_info(NDI_UNIQUE, 0, op, diff); |
1921 | return 0; |
1945 | return 0; |
1922 | } |
1946 | } |
|
|
1947 | |
|
|
1948 | int command_insert_into(object* op, char *params) |
|
|
1949 | { |
|
|
1950 | object *left, *right, *inserted; |
|
|
1951 | const char *diff; |
|
|
1952 | int left_from, right_from; |
|
|
1953 | |
|
|
1954 | left = get_dm_object(op->contr, ¶ms, &left_from); |
|
|
1955 | if (!left) { |
|
|
1956 | new_draw_info(NDI_UNIQUE, 0, op, "Insert into what object?"); |
|
|
1957 | return 0; |
|
|
1958 | } |
|
|
1959 | |
|
|
1960 | if (left_from == STACK_FROM_NUMBER) |
|
|
1961 | /* Item was stacked, remove it else right will be the same... */ |
|
|
1962 | dm_stack_pop(op->contr); |
|
|
1963 | |
|
|
1964 | right = get_dm_object(op->contr, ¶ms, &right_from); |
|
|
1965 | |
|
|
1966 | if (!right) { |
|
|
1967 | new_draw_info(NDI_UNIQUE, 0, op, "Insert what item?"); |
|
|
1968 | return 0; |
|
|
1969 | } |
|
|
1970 | |
|
|
1971 | if (left_from == STACK_FROM_TOP && right_from == STACK_FROM_TOP) { |
|
|
1972 | /* |
|
|
1973 | * Special case: both items were taken from stack top. |
|
|
1974 | * Override the behaviour, taking left as item just below top, if exists. |
|
|
1975 | * See function description for why. |
|
|
1976 | * Besides, can't insert an item into itself. |
|
|
1977 | */ |
|
|
1978 | if (op->contr->stack_position > 1) { |
|
|
1979 | left = find_object(op->contr->stack_items[op->contr->stack_position-2]); |
|
|
1980 | if (left) |
|
|
1981 | new_draw_info(NDI_UNIQUE, 0, op, "(Note: item to insert into taken from undertop)"); |
|
|
1982 | else |
|
|
1983 | /* Stupid case: item under top was freed, fallback to stack top */ |
|
|
1984 | left = right; |
|
|
1985 | } |
|
|
1986 | } |
|
|
1987 | |
|
|
1988 | if (left == right) |
|
|
1989 | { |
|
|
1990 | new_draw_info(NDI_UNIQUE, 0, op, "Can't insert an object into itself!"); |
|
|
1991 | return 0; |
|
|
1992 | } |
|
|
1993 | |
|
|
1994 | if (right->type == PLAYER) |
|
|
1995 | { |
|
|
1996 | new_draw_info(NDI_UNIQUE, 0, op, "Can't insert a player into something!"); |
|
|
1997 | return 0; |
|
|
1998 | } |
|
|
1999 | |
|
|
2000 | if (!QUERY_FLAG(right,FLAG_REMOVED)) |
|
|
2001 | remove_ob(right); |
|
|
2002 | inserted = insert_ob_in_ob(right,left); |
|
|
2003 | if (left->type == PLAYER) |
|
|
2004 | if (inserted == right) |
|
|
2005 | esrv_send_item(left,right); |
|
|
2006 | else |
|
|
2007 | esrv_update_item(UPD_WEIGHT|UPD_NAME|UPD_NROF,left,inserted); |
|
|
2008 | |
|
|
2009 | new_draw_info_format(NDI_UNIQUE, 0, op, "Inserted %s in %s", query_name(inserted),query_name(left)); |
|
|
2010 | |
|
|
2011 | return 0; |
|
|
2012 | |
|
|
2013 | } |