00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #if defined(macintosh)
00017 #include <types.h>
00018 #else
00019 #include <sys/types.h>
00020 #endif
00021 #include <ctype.h>
00022 #include <stdio.h>
00023 #include <stdlib.h>
00024 #include <string.h>
00025 #include <time.h>
00026 #include "merc.h"
00027 #include "tables.h"
00028 #include "olc.h"
00029 #include "vehicles.h"
00030
00031
00032
00033
00034 AREA_DATA *get_area_data args ((int vnum));
00035
00036
00037
00038 bool run_olc_editor (DESCRIPTOR_DATA * d)
00039 {
00040 switch (d->editor)
00041 {
00042 case ED_AREA:
00043 aedit (d->character, d->incomm);
00044 break;
00045 case ED_ROOM:
00046 redit (d->character, d->incomm);
00047 break;
00048 case ED_OBJECT:
00049 oedit (d->character, d->incomm);
00050 break;
00051 case ED_MOBILE:
00052 medit (d->character, d->incomm);
00053 break;
00054 case ED_MPCODE:
00055 mpedit (d->character, d->incomm);
00056 break;
00057 case ED_HELP:
00058 hedit (d->character, d->incomm);
00059 break;
00060 case ED_SOCIAL:
00061 sedit (d->character, d->incomm);
00062 break;
00063 case ED_CLASS:
00064 cedit (d->character, d->incomm);
00065 break;
00066 case ED_VEHICLE:
00067 vedit (d->character, d->incomm);
00068 break;
00069 default:
00070 return FALSE;
00071 }
00072 return TRUE;
00073 }
00074
00075
00076
00077 char *olc_ed_name (CHAR_DATA * ch)
00078 {
00079 static char buf[10];
00080
00081 buf[0] = '\0';
00082 switch (ch->desc->editor)
00083 {
00084 case ED_AREA:
00085 sprintf (buf, "AEdit");
00086 break;
00087 case ED_ROOM:
00088 sprintf (buf, "REdit");
00089 break;
00090 case ED_OBJECT:
00091 sprintf (buf, "OEdit");
00092 break;
00093 case ED_MOBILE:
00094 sprintf (buf, "MEdit");
00095 break;
00096 case ED_MPCODE:
00097 sprintf (buf, "MPEdit");
00098 break;
00099 case ED_SOCIAL:
00100 sprintf (buf, "SEdit");
00101 break;
00102 case ED_HELP:
00103 sprintf (buf, "HEdit");
00104 break;
00105 case ED_CLASS:
00106 sprintf(buf, "CEdit");
00107 break;
00108 case ED_VEHICLE:
00109 sprintf(buf, "VEdit");
00110 default:
00111 sprintf (buf, " ");
00112 break;
00113 }
00114 return buf;
00115 }
00116
00117
00118
00119 char *olc_ed_vnum (CHAR_DATA * ch)
00120 {
00121 AREA_DATA *pArea;
00122 ROOM_INDEX_DATA *pRoom;
00123 OBJ_INDEX_DATA *pObj;
00124 MOB_INDEX_DATA *pMob;
00125 MPROG_CODE *pMprog;
00126 HELP_DATA *pHelp;
00127 SOCIAL_LIST *pSocial;
00128 OCLASS_DATA *pClass;
00129 VDATA *pVehicle;
00130 static char buf[MIL];
00131
00132 buf[0] = '\0';
00133 switch (ch->desc->editor)
00134 {
00135 case ED_AREA:
00136 pArea = (AREA_DATA *) ch->desc->pEdit;
00137 sprintf (buf, "%d", pArea ? pArea->vnum : 0);
00138 break;
00139 case ED_ROOM:
00140 pRoom = ch->in_room;
00141 sprintf (buf, "%d", pRoom ? pRoom->vnum : 0);
00142 break;
00143 case ED_OBJECT:
00144 pObj = (OBJ_INDEX_DATA *) ch->desc->pEdit;
00145 sprintf (buf, "%d", pObj ? pObj->vnum : 0);
00146 break;
00147 case ED_MOBILE:
00148 pMob = (MOB_INDEX_DATA *) ch->desc->pEdit;
00149 sprintf (buf, "%d", pMob ? pMob->vnum : 0);
00150 break;
00151 case ED_MPCODE:
00152 pMprog = (MPROG_CODE *) ch->desc->pEdit;
00153 sprintf (buf, "%d", pMprog ? pMprog->vnum : 0);
00154 break;
00155 case ED_SOCIAL:
00156 pSocial = (SOCIAL_LIST *) ch->desc->pEdit;
00157 sprintf (buf, "%d", pSocial ? pSocial->name : 0);
00158 break;
00159 case ED_VEHICLE:
00160 pVehicle = (VDATA*)ch->desc->pEdit;
00161 sprintf(buf, "%d", pVehicle ? pVehicle->name : 0);
00162 break;
00163 case ED_HELP:
00164 pHelp = (HELP_DATA *) ch->desc->pEdit;
00165 sprintf (buf, "%s", pHelp ? pHelp->keyword : "");
00166 break;
00167 case ED_CLASS:
00168 pClass = (OCLASS_DATA *) ch->desc->pEdit;
00169 sprintf (buf, "%s", pClass ? pClass->name : 0);
00170 break;
00171
00172 default:
00173 sprintf (buf, " ");
00174 break;
00175 }
00176
00177 return buf;
00178 }
00179
00180
00181
00182
00183
00184
00185
00186
00187 void show_olc_cmds (CHAR_DATA * ch, const struct olc_cmd_type *olc_table)
00188 {
00189 char buf[MAX_STRING_LENGTH];
00190 char buf1[MAX_STRING_LENGTH];
00191 int cmd;
00192 int col;
00193
00194 buf1[0] = '\0';
00195 col = 0;
00196 for (cmd = 0; olc_table[cmd].name != NULL; cmd++)
00197 {
00198 sprintf (buf, "%-15.15s", olc_table[cmd].name);
00199 strcat (buf1, buf);
00200 if (++col % 5 == 0)
00201 strcat (buf1, "\n\r");
00202 }
00203
00204 if (col % 5 != 0)
00205 strcat (buf1, "\n\r");
00206
00207 send_to_char (buf1, ch);
00208 return;
00209 }
00210
00211
00212
00213
00214
00215
00216
00217
00218 bool show_commands (CHAR_DATA * ch, char *argument)
00219 {
00220 switch (ch->desc->editor)
00221 {
00222 case ED_AREA:
00223 show_olc_cmds (ch, aedit_table);
00224 break;
00225 case ED_ROOM:
00226 show_olc_cmds (ch, redit_table);
00227 break;
00228 case ED_OBJECT:
00229 show_olc_cmds (ch, oedit_table);
00230 break;
00231 case ED_MOBILE:
00232 show_olc_cmds (ch, medit_table);
00233 break;
00234 case ED_MPCODE:
00235 show_olc_cmds (ch, mpedit_table);
00236 break;
00237 case ED_SOCIAL:
00238 show_olc_cmds (ch, sedit_table);
00239 break;
00240 case ED_HELP:
00241 show_olc_cmds (ch, hedit_table);
00242 break;
00243 case ED_CLASS:
00244 show_olc_cmds (ch, cedit_table);
00245 break;
00246 case ED_VEHICLE:
00247 show_olc_cmds(ch, vedit_table);
00248 break;
00249 }
00250
00251 return FALSE;
00252 }
00253
00254
00255
00256
00257
00258
00259 const struct olc_cmd_type aedit_table[] = {
00260
00261
00262 {"age", aedit_age},
00263 {"builder", aedit_builder},
00264 {"commands", show_commands},
00265 {"create", aedit_create},
00266 {"filename", aedit_file},
00267 {"name", aedit_name},
00268
00269 {"reset", aedit_reset},
00270 {"security", aedit_security},
00271 {"show", aedit_show},
00272 {"vnum", aedit_vnum},
00273 {"lvnum", aedit_lvnum},
00274 {"uvnum", aedit_uvnum},
00275 {"credits", aedit_credits},
00276 {"cont", aedit_cont},
00277 {"delete", aedit_delete},
00278
00279 {"?", show_help},
00280 {"version", show_version},
00281
00282 {NULL, 0,}
00283 };
00284
00285 const struct olc_cmd_type vedit_table[] =
00286 {
00287 {"commands", show_commands},
00288 {"vnum", vedit_vnum},
00289 {"svnum", vedit_svnum},
00290 {"armor", vedit_armor},
00291 {"maxriders",vedit_max_riders},
00292 {"path", vedit_path},
00293 {"terrain", vedit_terrain},
00294 {"speed", vedit_speed},
00295 {"type", vedit_type},
00296 {"name", vedit_name},
00297 {"show", vedit_show},
00298 {"delete", vedit_delete},
00299 {"?", show_help},
00300 {NULL,0,}
00301 };
00302
00303
00304 const struct olc_cmd_type hedit_table[] =
00305 {
00306
00307 { "commands", show_commands },
00308 { "desc", hedit_desc },
00309 { "keywords", hedit_keywords },
00310 { "level", hedit_level },
00311 { "make", hedit_make },
00312 { "show", hedit_show },
00313 { "delete", hedit_delete },
00314 { "?", show_help },
00315 { NULL, 0, }
00316
00317 };
00318
00319 const struct olc_cmd_type sedit_table[] =
00320 {
00321
00322 { "commands", show_commands },
00323 { "create", sedit_create },
00324 { "show", sedit_show },
00325 { "cnoarg", sedit_char_no_arg },
00326 { "onoarg", sedit_others_no_arg },
00327 { "cfound", sedit_char_found },
00328 { "vfound", sedit_vict_found },
00329 { "ofound", sedit_others_found },
00330 { "cself", sedit_char_auto },
00331 { "oself", sedit_others_auto },
00332 { "cnone", sedit_char_not_found },
00333 { "delete", sedit_delete },
00334 { "?", show_help },
00335 { NULL, 0, }
00336
00337 };
00338
00339 const struct olc_cmd_type redit_table[] = {
00340
00341
00342 {"commands", show_commands},
00343 {"create", redit_create},
00344 {"desc", redit_desc},
00345 {"night", redit_night_desc},
00346 {"dfix", redit_dfix},
00347 {"ed", redit_ed},
00348 {"format", redit_format},
00349 {"name", redit_name},
00350 {"show", redit_show},
00351 {"heal", redit_heal},
00352 {"mana", redit_mana},
00353 {"clan", redit_clan},
00354
00355 {"north", redit_north},
00356 {"south", redit_south},
00357 {"east", redit_east},
00358 {"west", redit_west},
00359 {"up", redit_up},
00360 {"down", redit_down},
00361 {"northeast", redit_northeast},
00362 {"northwest", redit_northwest},
00363 {"southeast", redit_southeast},
00364 {"southwest", redit_southwest},
00365
00366 {"mreset", redit_mreset},
00367 {"oreset", redit_oreset},
00368 {"mlist", redit_mlist},
00369 {"rlist", redit_rlist},
00370 {"olist", redit_olist},
00371 {"mshow", redit_mshow},
00372 {"oshow", redit_oshow},
00373 {"owner", redit_owner},
00374 {"room", redit_room},
00375 {"extended", redit_extra},
00376 {"sector", redit_sector},
00377 {"delete", redit_delete},
00378 {"copy", redit_copy},
00379 {"troute", redit_troute},
00380 {"tstate", redit_tstate},
00381 {"ttype", redit_ttype},
00382
00383
00384 {"?", show_help},
00385 {"version", show_version},
00386
00387 {NULL, 0,}
00388 };
00389
00390
00391
00392 const struct olc_cmd_type oedit_table[] = {
00393
00394
00395 {"addaffect", oedit_addaffect},
00396 {"addapply", oedit_addapply},
00397 {"commands", show_commands},
00398 {"cost", oedit_cost},
00399 {"create", oedit_create},
00400 {"delaffect", oedit_delaffect},
00401 {"ed", oedit_ed},
00402 {"long", oedit_long},
00403 {"name", oedit_name},
00404 {"short", oedit_short},
00405 {"show", oedit_show},
00406 {"v0", oedit_value0},
00407 {"v1", oedit_value1},
00408 {"v2", oedit_value2},
00409 {"v3", oedit_value3},
00410 {"v4", oedit_value4},
00411 {"weight", oedit_weight},
00412
00413 {"extra", oedit_extra},
00414 {"wear", oedit_wear},
00415 {"type", oedit_type},
00416 {"material", oedit_material},
00417 {"level", oedit_level},
00418 {"condition", oedit_condition},
00419
00420 {"?", show_help},
00421 {"version", show_version},
00422
00423 {NULL, 0,}
00424 };
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445 const struct olc_cmd_type medit_table[] = {
00446
00447
00448 {"alignment", medit_align},
00449 {"commands", show_commands},
00450 {"create", medit_create},
00451 {"desc", medit_desc},
00452 {"level", medit_level},
00453 {"long", medit_long},
00454 {"name", medit_name},
00455 {"shop", medit_shop},
00456 {"short", medit_short},
00457 {"show", medit_show},
00458 {"spec", medit_spec},
00459
00460 {"sex", medit_sex},
00461 {"act", medit_act},
00462 {"affect", medit_affect},
00463 {"armor", medit_ac},
00464 {"form", medit_form},
00465 {"part", medit_part},
00466 {"imm", medit_imm},
00467 {"res", medit_res},
00468 {"vuln", medit_vuln},
00469 {"material", medit_material},
00470 {"off", medit_off},
00471 {"size", medit_size},
00472 {"hitdice", medit_hitdice},
00473 {"manadice", medit_manadice},
00474 {"damdice", medit_damdice},
00475 {"race", medit_race},
00476 {"position", medit_position},
00477 {"wealth", medit_gold},
00478 {"hitroll", medit_hitroll},
00479 {"damtype", medit_damtype},
00480 {"group", medit_group},
00481 {"addmprog", medit_addmprog},
00482 {"delmprog", medit_delmprog},
00483
00484 {"?", show_help},
00485 {"version", show_version},
00486
00487 {NULL, 0,}
00488 };
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501 AREA_DATA *get_area_data (int vnum)
00502 {
00503 AREA_DATA *pArea;
00504
00505 for (pArea = area_first; pArea; pArea = pArea->next)
00506 {
00507 if (pArea->vnum == vnum)
00508 return pArea;
00509 }
00510
00511 return 0;
00512 }
00513
00514
00515
00516
00517
00518
00519
00520
00521 bool edit_done (CHAR_DATA * ch)
00522 {
00523 ch->desc->pEdit = NULL;
00524 ch->desc->editor = 0;
00525 return FALSE;
00526 }
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536 void aedit (CHAR_DATA * ch, char *argument)
00537 {
00538 AREA_DATA *pArea;
00539 char command[MAX_INPUT_LENGTH];
00540 char arg[MAX_INPUT_LENGTH];
00541 int cmd;
00542 int value;
00543
00544 EDIT_AREA (ch, pArea);
00545 smash_tilde (argument);
00546 strcpy (arg, argument);
00547 argument = one_argument (argument, command);
00548
00549 if (ch->level < 59)
00550 {
00551 send_to_char ("AEdit: You are not high enough in level to do this.\n\r",
00552 ch);
00553 edit_done (ch);
00554 return;
00555 }
00556
00557 if (!str_cmp (command, "done"))
00558 {
00559 edit_done (ch);
00560 return;
00561 }
00562
00563 if (command[0] == '\0')
00564 {
00565 aedit_show (ch, argument);
00566 return;
00567 }
00568
00569 if ((value = flag_value (area_flags, command)) != NO_FLAG)
00570 {
00571 TOGGLE_BIT (pArea->area_flags, value);
00572
00573 send_to_char ("Flag toggled.\n\r", ch);
00574 return;
00575 }
00576
00577
00578 for (cmd = 0; aedit_table[cmd].name != NULL; cmd++)
00579 {
00580 if (!str_prefix (command, aedit_table[cmd].name))
00581 {
00582 if ((*aedit_table[cmd].olc_fun) (ch, argument))
00583 {
00584 SET_BIT (pArea->area_flags, AREA_CHANGED);
00585 return;
00586 }
00587 else
00588 return;
00589 }
00590 }
00591
00592
00593 interpret (ch, arg);
00594 return;
00595 }
00596
00597
00598
00599
00600 void redit (CHAR_DATA * ch, char *argument)
00601 {
00602 AREA_DATA *pArea;
00603 ROOM_INDEX_DATA *pRoom;
00604 char arg[MAX_STRING_LENGTH];
00605 char command[MAX_INPUT_LENGTH];
00606 int cmd;
00607
00608 EDIT_ROOM (ch, pRoom);
00609 pArea = pRoom->area;
00610
00611 smash_tilde (argument);
00612 strcpy (arg, argument);
00613 argument = one_argument (argument, command);
00614
00615 if (ch->level < 55)
00616 {
00617 send_to_char ("REdit: You're level is not high enough to do this.\n\r",
00618 ch);
00619 edit_done (ch);
00620 return;
00621 }
00622
00623 if (!str_cmp (command, "done"))
00624 {
00625 edit_done (ch);
00626 return;
00627 }
00628
00629 if (command[0] == '\0')
00630 {
00631 redit_show (ch, argument);
00632 return;
00633 }
00634
00635
00636 for (cmd = 0; redit_table[cmd].name != NULL; cmd++)
00637 {
00638 if (!str_prefix (command, redit_table[cmd].name))
00639 {
00640 if ((*redit_table[cmd].olc_fun) (ch, argument))
00641 {
00642 SET_BIT (pArea->area_flags, AREA_CHANGED);
00643 return;
00644 }
00645 else
00646 return;
00647 }
00648 }
00649
00650
00651 interpret (ch, arg);
00652 return;
00653 }
00654
00655
00656
00657
00658 void oedit (CHAR_DATA * ch, char *argument)
00659 {
00660 AREA_DATA *pArea;
00661 OBJ_INDEX_DATA *pObj;
00662 char arg[MAX_STRING_LENGTH];
00663 char command[MAX_INPUT_LENGTH];
00664 int cmd;
00665
00666 smash_tilde (argument);
00667 strcpy (arg, argument);
00668 argument = one_argument (argument, command);
00669
00670 EDIT_OBJ (ch, pObj);
00671 pArea = pObj->area;
00672
00673 if (!IS_BUILDER (ch, pArea))
00674 {
00675 send_to_char ("OEdit: Insufficient security to modify area.\n\r", ch);
00676 edit_done (ch);
00677 return;
00678 }
00679
00680 if (!str_cmp (command, "done"))
00681 {
00682 edit_done (ch);
00683 return;
00684 }
00685
00686 if (command[0] == '\0')
00687 {
00688 oedit_show (ch, argument);
00689 return;
00690 }
00691
00692
00693 for (cmd = 0; oedit_table[cmd].name != NULL; cmd++)
00694 {
00695 if (!str_prefix (command, oedit_table[cmd].name))
00696 {
00697 if ((*oedit_table[cmd].olc_fun) (ch, argument))
00698 {
00699 SET_BIT (pArea->area_flags, AREA_CHANGED);
00700 return;
00701 }
00702 else
00703 return;
00704 }
00705 }
00706
00707
00708 interpret (ch, arg);
00709 return;
00710 }
00711
00712
00713
00714
00715 void medit (CHAR_DATA * ch, char *argument)
00716 {
00717 AREA_DATA *pArea;
00718 MOB_INDEX_DATA *pMob;
00719 char command[MAX_INPUT_LENGTH];
00720 char arg[MAX_STRING_LENGTH];
00721 int cmd;
00722
00723 smash_tilde (argument);
00724 strcpy (arg, argument);
00725 argument = one_argument (argument, command);
00726
00727 EDIT_MOB (ch, pMob);
00728 pArea = pMob->area;
00729
00730 if (ch->level < 55)
00731 {
00732 send_to_char ("MEdit: You're not high enough level to do this.\n\r", ch);
00733 edit_done (ch);
00734 return;
00735 }
00736
00737 if (!str_cmp (command, "done"))
00738 {
00739 edit_done (ch);
00740 return;
00741 }
00742
00743 if (command[0] == '\0')
00744 {
00745 medit_show (ch, argument);
00746 return;
00747 }
00748
00749
00750 for (cmd = 0; medit_table[cmd].name != NULL; cmd++)
00751 {
00752 if (!str_prefix (command, medit_table[cmd].name))
00753 {
00754 if ((*medit_table[cmd].olc_fun) (ch, argument))
00755 {
00756 SET_BIT (pArea->area_flags, AREA_CHANGED);
00757 return;
00758 }
00759 else
00760 return;
00761 }
00762 }
00763
00764
00765 interpret (ch, arg);
00766 return;
00767 }
00768
00769
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786
00787
00788
00789
00790
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800
00801
00802
00803
00804
00805
00806
00807
00808
00809
00810
00811
00812
00813
00814
00815 const struct editor_cmd_type editor_table[] = {
00816
00817
00818 {"area", do_aedit},
00819 {"room", do_redit},
00820 {"object", do_oedit},
00821 {"mobile", do_medit},
00822 {"mpcode", do_mpedit},
00823 {"hedit", do_hedit},
00824 {"cedit", do_cedit},
00825
00826 {NULL, 0,}
00827 };
00828
00829
00830 void do_olc (CHAR_DATA * ch, char *argument)
00831 {
00832 char command[MAX_INPUT_LENGTH];
00833 int cmd;
00834
00835 if (IS_NPC (ch))
00836 return;
00837
00838 argument = one_argument (argument, command);
00839
00840 if (command[0] == '\0')
00841 {
00842 do_help (ch, "olc");
00843 return;
00844 }
00845
00846
00847 for (cmd = 0; editor_table[cmd].name != NULL; cmd++)
00848 {
00849 if (!str_prefix (command, editor_table[cmd].name))
00850 {
00851 (*editor_table[cmd].do_fun) (ch, argument);
00852 return;
00853 }
00854 }
00855
00856
00857 do_help (ch, "olc");
00858 return;
00859 }
00860
00861
00862
00863
00864
00865
00866
00867
00868
00869
00870
00871
00872
00873
00874
00875
00876
00877
00878
00879
00880
00881
00882
00883
00884
00885
00886
00887
00888
00889
00890
00891 void vedit (CHAR_DATA *ch, char *argument)
00892 {
00893 char arg[MAX_INPUT_LENGTH];
00894 char command[MAX_INPUT_LENGTH];
00895 int cmd;
00896
00897 smash_tilde (argument);
00898 strcpy(arg,argument);
00899 argument = one_argument(argument,command);
00900
00901 if (ch->pcdata->security < 5)
00902 {
00903 send_to_char("VEdit: Insufficient security to modify vehicles.\n\r",ch);
00904 edit_done(ch);
00905 return;
00906 }
00907 if (!str_cmp(command,"done"))
00908 {
00909 edit_done(ch);
00910 send_to_char("Vehicles Saved.\n\r",ch);
00911 save_vehicles();
00912 return;
00913 }
00914 if (command[0] == '\0')
00915 {
00916 vedit_show(ch,argument);
00917 return;
00918 }
00919 for (cmd=0;vedit_table[cmd].name != NULL;cmd++)
00920 {
00921 if (!str_prefix(command, vedit_table[cmd].name))
00922 {
00923 (*vedit_table[cmd].olc_fun) (ch,argument);
00924 return;
00925 }
00926 }
00927 interpret(ch,arg);
00928 return;
00929 }
00930
00931 void do_vedit (CHAR_DATA *ch, char *argument)
00932 {
00933 VDATA *vehicle;
00934 char arg1[MIL];
00935 char argall[MIL];
00936 char argone[MIL];
00937 char pbuf[MSL];
00938
00939 strcpy(arg1,argument);
00940
00941 if (argument[0] == '\0')
00942 {
00943 argall[0] = '\0';
00944 }
00945
00946 argument = one_argument(argument, arg1);
00947 if (!str_cmp(arg1, "create"))
00948 {
00949 if (argument[0] == '\0')
00950 {
00951 send_to_char("VEdit: Syntax: vedit [create <vehicle] vehicle\n\r",ch);
00952 return;
00953 }
00954 if (vedit_create(ch,argument))
00955 ch->desc->editor = ED_VEHICLE;
00956 return;
00957 }
00958 else
00959 {
00960 for (vehicle=v_list;vehicle;vehicle = vehicle->next)
00961 {
00962 if (vehicle->name == NULL)
00963 continue;
00964 colourconv2(pbuf,vehicle->name);
00965 if (!str_prefix(arg1,pbuf))
00966 {
00967 ch->desc->pEdit = (void*)vehicle;
00968 ch->desc->editor = ED_VEHICLE;
00969 return;
00970 }
00971 }
00972 send_to_char("VEdit: Vehicle Not Found.\n\r",ch);
00973 }
00974 return;
00975 }
00976
00977
00978
00979
00980
00981
00982
00983
00984 void sedit( CHAR_DATA *ch, char *argument)
00985 {
00986
00987 char arg[MAX_INPUT_LENGTH];
00988 char command[MAX_INPUT_LENGTH];
00989 int cmd;
00990
00991 smash_tilde (argument);
00992 strcpy (arg, argument);
00993 argument = one_argument (argument, command);
00994
00995
00996 if (ch->pcdata->security < 5)
00997 {
00998 send_to_char("SEdit: Insufficient security to modify code\n\r", ch);
00999 edit_done(ch);
01000 }
01001
01002
01003 if (!str_cmp(command, "done"))
01004 {
01005 edit_done(ch);
01006 send_to_char("Socials saved.\n\r",ch);
01007 save_socials();
01008 return;
01009 }
01010
01011
01012 if (command[0] == '\0')
01013 {
01014 sedit_show(ch, argument);
01015 return;
01016 }
01017
01018
01019 for (cmd = 0; sedit_table[cmd].name != NULL; cmd++)
01020 {
01021
01022 if (!str_prefix (command, sedit_table[cmd].name))
01023 {
01024 (*sedit_table[cmd].olc_fun) (ch, argument);
01025 return;
01026 }
01027 }
01028
01029
01030 interpret (ch, arg);
01031 return;
01032 }
01033
01034
01035 void do_sedit( CHAR_DATA *ch, char *argument)
01036 {
01037
01038 SOCIAL_LIST *pSocial;
01039 char arg1[MAX_INPUT_LENGTH];
01040 char argall[MAX_INPUT_LENGTH];
01041 char argone[MAX_INPUT_LENGTH];
01042 bool found = FALSE;
01043
01044 strcpy(arg1, argument);
01045
01046 if (argument[0] != '\0')
01047 {
01048 argall[0] = '\0';
01049
01050
01051 }
01052
01053 if (!found)
01054 {
01055 argument = one_argument(arg1, arg1);
01056
01057
01058 if (!str_cmp(arg1, "create"))
01059 {
01060 if (argument[0] == '\0')
01061 {
01062 send_to_char("Syntax: blah blah blah dumb social [topic]\n\r", ch);
01063 return;
01064 }
01065
01066 if (sedit_create(ch, argument))
01067 { ch->desc->editor = ED_SOCIAL; }
01068
01069 return;
01070 }
01071 else
01072 {
01073 for (pSocial = sociallist;pSocial;pSocial = pSocial->next)
01074 {
01075 if (!str_prefix(pSocial->name, arg1))
01076 {
01077 ch->desc->pEdit = (void*)pSocial;
01078 ch->desc->editor = ED_SOCIAL;
01079 return;
01080 }
01081 }
01082 }
01083 }
01084
01085 send_to_char("SEdit: There is no social to edit.\n\r", ch);
01086 return;
01087 }
01088
01089
01090 void hedit( CHAR_DATA *ch, char *argument)
01091 {
01092 char command[MIL];
01093 char arg[MIL];
01094 int cmd;
01095
01096 smash_tilde(argument);
01097 strcpy(arg, argument);
01098 argument = one_argument( argument, command);
01099
01100 if (ch->pcdata->security < 5)
01101 {
01102 send_to_char("HEdit: Insufficient security to modify code\n\r",ch);
01103 edit_done(ch);
01104 }
01105
01106 if ( !str_cmp(command, "done") )
01107 {
01108 edit_done( ch );
01109 return;
01110 }
01111
01112 if ( command[0] == '\0' )
01113 {
01114 hedit_show( ch, argument );
01115 return;
01116 }
01117
01118 for ( cmd = 0; hedit_table[cmd].name != NULL; cmd++ )
01119 {
01120 if ( !str_prefix( command, hedit_table[cmd].name ) )
01121 {
01122 (*hedit_table[cmd].olc_fun) ( ch, argument );
01123 return;
01124 }
01125 }
01126
01127 interpret( ch, arg );
01128 return;
01129 }
01130
01131
01132 void do_hedit( CHAR_DATA *ch, char *argument )
01133 {
01134 HELP_DATA *pHelp;
01135 char arg1[MIL];
01136 char argall[MAX_INPUT_LENGTH],argone[MAX_INPUT_LENGTH];
01137 bool found = FALSE;
01138
01139 strcpy(arg1,argument);
01140
01141 if(argument[0] != '\0')
01142 {
01143
01144 argall[0] = '\0';
01145 while (argument[0] != '\0' )
01146 {
01147 argument = one_argument(argument,argone);
01148 if (argall[0] != '\0')
01149 strcat(argall," ");
01150 strcat(argall,argone);
01151 }
01152
01153 for ( pHelp = help_first; pHelp != NULL; pHelp = pHelp->next )
01154 {
01155 if ( is_name( argall, pHelp->keyword ) )
01156 {
01157 ch->desc->pEdit=(void *)pHelp;
01158 ch->desc->editor= ED_HELP;
01159 found = TRUE;
01160 return;
01161 }
01162 }
01163 }
01164
01165 if(!found)
01166 {
01167 argument = one_argument(arg1, arg1);
01168
01169 if(!str_cmp(arg1,"make"))
01170 {
01171 if (argument[0] == '\0')
01172 {
01173 send_to_char("Syntax: edit help new [topic]\n\r",ch);
01174 return;
01175 }
01176 if (hedit_make(ch, argument) )
01177 ch->desc->editor = ED_HELP;
01178 return;
01179 }
01180 }
01181
01182 send_to_char( "HEdit: There is no default help to edit.\n\r", ch );
01183 return;
01184 }
01185
01186
01187 void do_aedit (CHAR_DATA * ch, char *argument)
01188 {
01189 AREA_DATA *pArea;
01190 int value;
01191 char arg[MAX_STRING_LENGTH];
01192
01193 if (IS_NPC (ch))
01194 return;
01195
01196 pArea = ch->in_room->area;
01197
01198 argument = one_argument (argument, arg);
01199
01200 if (is_number (arg))
01201 {
01202 value = atoi (arg);
01203 if (!(pArea = get_area_data (value)))
01204 {
01205 send_to_char ("That area vnum does not exist.\n\r", ch);
01206 return;
01207 }
01208 }
01209 else if (!str_cmp (arg, "create"))
01210 {
01211 if (ch->pcdata->security < 9)
01212 {
01213 send_to_char ("AEdit : Insufficient security to create area.\n\r",
01214 ch);
01215 return;
01216 }
01217
01218 aedit_create (ch, "");
01219 ch->desc->editor = ED_AREA;
01220 return;
01221 }
01222
01223 if (!IS_BUILDER (ch, pArea))
01224 {
01225 send_to_char ("Insufficient security to edit areas.\n\r", ch);
01226 return;
01227 }
01228
01229 ch->desc->pEdit = (void *) pArea;
01230 ch->desc->editor = ED_AREA;
01231 return;
01232 }
01233
01234
01235
01236
01237 void do_redit (CHAR_DATA * ch, char *argument)
01238 {
01239 ROOM_INDEX_DATA *pRoom;
01240 char arg1[MAX_STRING_LENGTH];
01241
01242 if (IS_NPC (ch))
01243 return;
01244
01245 argument = one_argument (argument, arg1);
01246
01247 pRoom = ch->in_room;
01248
01249 if (!str_cmp (arg1, "reset"))
01250 {
01251 if (!IS_BUILDER (ch, pRoom->area))
01252 {
01253 send_to_char ("Insufficient security to modify room.\n\r", ch);
01254 return;
01255 }
01256
01257 reset_room (pRoom);
01258 send_to_char ("Room reset.\n\r", ch);
01259
01260 return;
01261 }
01262 else if (!str_cmp (arg1, "create"))
01263 {
01264 if (argument[0] == '\0' || atoi (argument) == 0)
01265 {
01266 send_to_char ("Syntax: edit room create [vnum]\n\r", ch);
01267 return;
01268 }
01269
01270 if (redit_create (ch, argument))
01271 {
01272 ch->desc->editor = ED_ROOM;
01273 char_from_room (ch);
01274 char_to_room (ch, ch->desc->pEdit);
01275 SET_BIT (((ROOM_INDEX_DATA *) ch->desc->pEdit)->area->area_flags,
01276 AREA_CHANGED);
01277 }
01278
01279 return;
01280 }
01281 else if (!IS_NULLSTR (arg1))
01282 {
01283 pRoom = get_room_index (atoi (arg1));
01284
01285 if (!pRoom)
01286 {
01287 send_to_char ("REdit : Nonexistant room.\n\r", ch);
01288 return;
01289 }
01290
01291 if (!IS_BUILDER (ch, pRoom->area))
01292 {
01293 send_to_char ("REdit : Insufficient security to modify room.\n\r",
01294 ch);
01295 return;
01296 }
01297
01298 char_from_room (ch);
01299 char_to_room (ch, pRoom);
01300 }
01301
01302 if (!IS_BUILDER (ch, pRoom->area))
01303 {
01304 send_to_char ("REdit : Insufficient security to modify room.\n\r",
01305 ch);
01306 return;
01307 }
01308
01309 ch->desc->pEdit = (void *) pRoom;
01310 ch->desc->editor = ED_ROOM;
01311
01312 return;
01313 }
01314
01315
01316
01317
01318 void do_oedit (CHAR_DATA * ch, char *argument)
01319 {
01320 OBJ_INDEX_DATA *pObj;
01321 AREA_DATA *pArea;
01322 char arg1[MAX_STRING_LENGTH];
01323 int value;
01324
01325 if (ch->level < 55)
01326 {
01327 send_to_char("OEdit: You're not high enough level to do this.\n\r",ch);
01328 return;
01329 }
01330 if (IS_NPC (ch))
01331 return;
01332
01333 argument = one_argument (argument, arg1);
01334
01335 if (is_number (arg1))
01336 {
01337 value = atoi (arg1);
01338 if (!(pObj = get_obj_index (value)))
01339 {
01340 send_to_char ("OEdit: That vnum does not exist.\n\r", ch);
01341 return;
01342 }
01343
01344 if (!IS_BUILDER (ch, pObj->area))
01345 {
01346 send_to_char ("Insufficient security to modify objects.\n\r", ch);
01347 return;
01348 }
01349
01350 ch->desc->pEdit = (void *) pObj;
01351 ch->desc->editor = ED_OBJECT;
01352 return;
01353 }
01354 else
01355 {
01356 if (!str_cmp (arg1, "create"))
01357 {
01358 value = atoi (argument);
01359 if (argument[0] == '\0' || value == 0)
01360 {
01361 send_to_char ("Syntax: edit object create [vnum]\n\r", ch);
01362 return;
01363 }
01364
01365 pArea = get_vnum_area (value);
01366
01367 if (!pArea)
01368 {
01369 send_to_char
01370 ("OEdit: That vnum is not assigned an area.\n\r", ch);
01371 return;
01372 }
01373
01374 if (!IS_BUILDER (ch, pArea))
01375 {
01376 send_to_char ("Insufficient security to modify objects.\n\r",
01377 ch);
01378 return;
01379 }
01380
01381 if (oedit_create (ch, argument))
01382 {
01383 SET_BIT (pArea->area_flags, AREA_CHANGED);
01384 ch->desc->editor = ED_OBJECT;
01385 }
01386 return;
01387 }
01388 }
01389
01390 send_to_char ("OEdit: There is no default object to edit.\n\r", ch);
01391 return;
01392 }
01393
01394
01395
01396
01397 void do_medit (CHAR_DATA * ch, char *argument)
01398 {
01399 MOB_INDEX_DATA *pMob;
01400 AREA_DATA *pArea;
01401 int value;
01402 char arg1[MAX_STRING_LENGTH];
01403
01404 argument = one_argument (argument, arg1);
01405
01406 if (IS_NPC (ch))
01407 return;
01408
01409 if (is_number (arg1))
01410 {
01411 value = atoi (arg1);
01412 if (!(pMob = get_mob_index (value)))
01413 {
01414 send_to_char ("MEdit: That vnum does not exist.\n\r", ch);
01415 return;
01416 }
01417
01418 if (!IS_BUILDER (ch, pMob->area))
01419 {
01420 send_to_char ("Insufficient security to modify mobs.\n\r", ch);
01421 return;
01422 }
01423
01424 ch->desc->pEdit = (void *) pMob;
01425 ch->desc->editor = ED_MOBILE;
01426 return;
01427 }
01428 else
01429 {
01430 if (!str_cmp (arg1, "create"))
01431 {
01432 value = atoi (argument);
01433 if (arg1[0] == '\0' || value == 0)
01434 {
01435 send_to_char ("Syntax: edit mobile create [vnum]\n\r", ch);
01436 return;
01437 }
01438
01439 pArea = get_vnum_area (value);
01440
01441 if (!pArea)
01442 {
01443 send_to_char
01444 ("OEdit: That vnum is not assigned an area.\n\r", ch);
01445 return;
01446 }
01447
01448 if (!IS_BUILDER (ch, pArea))
01449 {
01450 send_to_char ("Insufficient security to modify mobs.\n\r",
01451 ch);
01452 return;
01453 }
01454
01455 if (medit_create (ch, argument))
01456 {
01457 SET_BIT (pArea->area_flags, AREA_CHANGED);
01458 ch->desc->editor = ED_MOBILE;
01459 }
01460 return;
01461 }
01462 }
01463
01464 send_to_char ("MEdit: There is no default mobile to edit.\n\r", ch);
01465 return;
01466 }
01467
01468
01469
01470 void display_resets (CHAR_DATA * ch)
01471 {
01472 ROOM_INDEX_DATA *pRoom;
01473 RESET_DATA *pReset;
01474 MOB_INDEX_DATA *pMob = NULL;
01475 char buf[MAX_STRING_LENGTH];
01476 char final[MAX_STRING_LENGTH];
01477 int iReset = 0;
01478
01479 EDIT_ROOM (ch, pRoom);
01480 final[0] = '\0';
01481
01482 send_to_char
01483 (" No. Loads Description Location Vnum Mx Mn Description"
01484 "\n\r"
01485 "==== ======== ============= =================== ======== ===== ==========="
01486 "\n\r", ch);
01487
01488 for (pReset = pRoom->reset_first; pReset; pReset = pReset->next)
01489 {
01490 OBJ_INDEX_DATA *pObj;
01491 MOB_INDEX_DATA *pMobIndex;
01492 OBJ_INDEX_DATA *pObjIndex;
01493 OBJ_INDEX_DATA *pObjToIndex;
01494 ROOM_INDEX_DATA *pRoomIndex;
01495
01496 final[0] = '\0';
01497 sprintf (final, "[%2d] ", ++iReset);
01498
01499 switch (pReset->command)
01500 {
01501 default:
01502 sprintf (buf, "Bad reset command: %c.", pReset->command);
01503 strcat (final, buf);
01504 break;
01505
01506 case 'M':
01507 if (!(pMobIndex = get_mob_index (pReset->arg1)))
01508 {
01509 sprintf (buf, "Load Mobile - Bad Mob %d\n\r",
01510 pReset->arg1);
01511 strcat (final, buf);
01512 continue;
01513 }
01514
01515 if (!(pRoomIndex = get_room_index (pReset->arg3)))
01516 {
01517 sprintf (buf, "Load Mobile - Bad Room %d\n\r",
01518 pReset->arg3);
01519 strcat (final, buf);
01520 continue;
01521 }
01522
01523 pMob = pMobIndex;
01524 sprintf (buf,
01525 "M[%5d] %-13.13s in room R[%5d] %2d-%2d %-15.15s\n\r",
01526 pReset->arg1, pMob->short_descr, pReset->arg3,
01527 pReset->arg2, pReset->arg4, pRoomIndex->name);
01528 strcat (final, buf);
01529
01530
01531
01532
01533
01534 {
01535 ROOM_INDEX_DATA *pRoomIndexPrev;
01536
01537 pRoomIndexPrev = get_room_index (pRoomIndex->vnum - 1);
01538 if (pRoomIndexPrev
01539 && IS_SET (pRoomIndexPrev->room_flags, ROOM_PET_SHOP))
01540 final[5] = 'P';
01541 }
01542
01543 break;
01544
01545 case 'O':
01546 if (!(pObjIndex = get_obj_index (pReset->arg1)))
01547 {
01548 sprintf (buf, "Load Object - Bad Object %d\n\r",
01549 pReset->arg1);
01550 strcat (final, buf);
01551 continue;
01552 }
01553
01554 pObj = pObjIndex;
01555
01556 if (!(pRoomIndex = get_room_index (pReset->arg3)))
01557 {
01558 sprintf (buf, "Load Object - Bad Room %d\n\r",
01559 pReset->arg3);
01560 strcat (final, buf);
01561 continue;
01562 }
01563
01564 sprintf (buf, "O[%5d] %-13.13s in room "
01565 "R[%5d] %-15.15s\n\r",
01566 pReset->arg1, pObj->short_descr,
01567 pReset->arg3, pRoomIndex->name);
01568 strcat (final, buf);
01569
01570 break;
01571
01572 case 'P':
01573 if (!(pObjIndex = get_obj_index (pReset->arg1)))
01574 {
01575 sprintf (buf, "Put Object - Bad Object %d\n\r",
01576 pReset->arg1);
01577 strcat (final, buf);
01578 continue;
01579 }
01580
01581 pObj = pObjIndex;
01582
01583 if (!(pObjToIndex = get_obj_index (pReset->arg3)))
01584 {
01585 sprintf (buf, "Put Object - Bad To Object %d\n\r",
01586 pReset->arg3);
01587 strcat (final, buf);
01588 continue;
01589 }
01590
01591 sprintf (buf,
01592 "O[%5d] %-13.13s inside O[%5d] %2d-%2d %-15.15s\n\r",
01593 pReset->arg1,
01594 pObj->short_descr,
01595 pReset->arg3,
01596 pReset->arg2, pReset->arg4,
01597 pObjToIndex->short_descr);
01598 strcat (final, buf);
01599
01600 break;
01601
01602 case 'G':
01603 case 'E':
01604 if (!(pObjIndex = get_obj_index (pReset->arg1)))
01605 {
01606 sprintf (buf, "Give/Equip Object - Bad Object %d\n\r",
01607 pReset->arg1);
01608 strcat (final, buf);
01609 continue;
01610 }
01611
01612 pObj = pObjIndex;
01613
01614 if (!pMob)
01615 {
01616 sprintf (buf,
01617 "Give/Equip Object - No Previous Mobile\n\r");
01618 strcat (final, buf);
01619 break;
01620 }
01621
01622 if (pMob->pShop)
01623 {
01624 sprintf (buf,
01625 "O[%5d] %-13.13s in the inventory of S[%5d] %-15.15s\n\r",
01626 pReset->arg1,
01627 pObj->short_descr, pMob->vnum,
01628 pMob->short_descr);
01629 }
01630 else
01631 sprintf (buf,
01632 "O[%5d] %-13.13s %-19.19s M[%5d] %-15.15s\n\r",
01633 pReset->arg1,
01634 pObj->short_descr,
01635 (pReset->command == 'G') ?
01636 flag_string (wear_loc_strings, WEAR_NONE)
01637 : flag_string (wear_loc_strings, pReset->arg3),
01638 pMob->vnum, pMob->short_descr);
01639 strcat (final, buf);
01640
01641 break;
01642
01643
01644
01645
01646
01647
01648 case 'D':
01649 pRoomIndex = get_room_index (pReset->arg1);
01650 sprintf (buf, "R[%5d] %s door of %-19.19s reset to %s\n\r",
01651 pReset->arg1,
01652 capitalize (dir_name[pReset->arg2]),
01653 pRoomIndex->name,
01654 flag_string (door_resets, pReset->arg3));
01655 strcat (final, buf);
01656
01657 break;
01658
01659
01660
01661 case 'R':
01662 if (!(pRoomIndex = get_room_index (pReset->arg1)))
01663 {
01664 sprintf (buf, "Randomize Exits - Bad Room %d\n\r",
01665 pReset->arg1);
01666 strcat (final, buf);
01667 continue;
01668 }
01669
01670 sprintf (buf, "R[%5d] Exits are randomized in %s\n\r",
01671 pReset->arg1, pRoomIndex->name);
01672 strcat (final, buf);
01673
01674 break;
01675 }
01676 send_to_char (final, ch);
01677 }
01678
01679 return;
01680 }
01681
01682
01683
01684
01685
01686
01687
01688
01689 void add_reset (ROOM_INDEX_DATA * room, RESET_DATA * pReset, int index)
01690 {
01691 RESET_DATA *reset;
01692 int iReset = 0;
01693
01694 if (!room->reset_first)
01695 {
01696 room->reset_first = pReset;
01697 room->reset_last = pReset;
01698 pReset->next = NULL;
01699 return;
01700 }
01701
01702 index--;
01703
01704 if (index == 0)
01705 {
01706 pReset->next = room->reset_first;
01707 room->reset_first = pReset;
01708 return;
01709 }
01710
01711
01712
01713
01714 for (reset = room->reset_first; reset->next; reset = reset->next)
01715 {
01716 if (++iReset == index)
01717 break;
01718 }
01719
01720 pReset->next = reset->next;
01721 reset->next = pReset;
01722 if (!pReset->next)
01723 room->reset_last = pReset;
01724 return;
01725 }
01726
01727
01728
01729 void do_resets (CHAR_DATA * ch, char *argument)
01730 {
01731 char arg1[MAX_INPUT_LENGTH];
01732 char arg2[MAX_INPUT_LENGTH];
01733 char arg3[MAX_INPUT_LENGTH];
01734 char arg4[MAX_INPUT_LENGTH];
01735 char arg5[MAX_INPUT_LENGTH];
01736 char arg6[MAX_INPUT_LENGTH];
01737 char arg7[MAX_INPUT_LENGTH];
01738 RESET_DATA *pReset = NULL;
01739
01740 argument = one_argument (argument, arg1);
01741 argument = one_argument (argument, arg2);
01742 argument = one_argument (argument, arg3);
01743 argument = one_argument (argument, arg4);
01744 argument = one_argument (argument, arg5);
01745 argument = one_argument (argument, arg6);
01746 argument = one_argument (argument, arg7);
01747
01748 if (!IS_BUILDER (ch, ch->in_room->area))
01749 {
01750 send_to_char ("Resets: Invalid security for editing this area.\n\r",
01751 ch);
01752 return;
01753 }
01754
01755
01756
01757
01758
01759 if (arg1[0] == '\0')
01760 {
01761 if (ch->in_room->reset_first)
01762 {
01763 send_to_char ("Resets: M = mobile, R = room, O = object, "
01764 "P = pet, S = shopkeeper\n\r", ch);
01765 display_resets (ch);
01766 }
01767 else
01768 send_to_char ("No resets in this room.\n\r", ch);
01769 }
01770
01771
01772
01773
01774
01775
01776 if (is_number (arg1))
01777 {
01778 ROOM_INDEX_DATA *pRoom = ch->in_room;
01779
01780
01781
01782
01783
01784 if (!str_cmp (arg2, "delete"))
01785 {
01786 int insert_loc = atoi (arg1);
01787
01788 if (!ch->in_room->reset_first)
01789 {
01790 send_to_char ("No resets in this area.\n\r", ch);
01791 return;
01792 }
01793
01794 if (insert_loc - 1 <= 0)
01795 {
01796 pReset = pRoom->reset_first;
01797 pRoom->reset_first = pRoom->reset_first->next;
01798 if (!pRoom->reset_first)
01799 pRoom->reset_last = NULL;
01800 }
01801 else
01802 {
01803 int iReset = 0;
01804 RESET_DATA *prev = NULL;
01805
01806 for (pReset = pRoom->reset_first;
01807 pReset; pReset = pReset->next)
01808 {
01809 if (++iReset == insert_loc)
01810 break;
01811 prev = pReset;
01812 }
01813
01814 if (!pReset)
01815 {
01816 send_to_char ("Reset not found.\n\r", ch);
01817 return;
01818 }
01819
01820 if (prev)
01821 prev->next = prev->next->next;
01822 else
01823 pRoom->reset_first = pRoom->reset_first->next;
01824
01825 for (pRoom->reset_last = pRoom->reset_first;
01826 pRoom->reset_last->next;
01827 pRoom->reset_last = pRoom->reset_last->next);
01828 }
01829
01830 free_reset_data (pReset);
01831 send_to_char ("Reset deleted.\n\r", ch);
01832 }
01833 else
01834
01835
01836
01837
01838 if ((!str_cmp (arg2, "mob") && is_number (arg3))
01839 || (!str_cmp (arg2, "obj") && is_number (arg3)))
01840 {
01841
01842
01843
01844
01845 if (!str_cmp (arg2, "mob"))
01846 {
01847 if (get_mob_index (is_number (arg3) ? atoi (arg3) : 1) ==
01848 NULL)
01849 {
01850 send_to_char ("Mob doesn't exist.\n\r", ch);
01851 return;
01852 }
01853 pReset = new_reset_data ();
01854 pReset->command = 'M';
01855 pReset->arg1 = atoi (arg3);
01856 pReset->