quixadhal

Try this.

May 28th, 2023
1,239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.57 KB | None | 0 0
  1. void do_olevel(CHAR_DATA *ch, char *argument)
  2. {
  3.     char buf[MAX_INPUT_LENGTH];
  4.     BUFFER *buffer = new_buf();
  5.  
  6.     OBJ_DATA *obj = NULL;
  7.     OBJ_DATA *in_obj = NULL;
  8.     bool found = FALSE;
  9.     int count = 0;
  10.     int page = 1;
  11.     int max_pages = 0;
  12.     int per_page = 100;
  13.  
  14.     char name[MAX_INPUT_LENGTH] = "";
  15.     int iLevel = 0;
  16.     int iPage = 0;
  17.     int match = 0;
  18.  
  19.     if (!argument || !*argument || strlen(argument) > MAX_INPUT_LENGTH) {
  20.         send_to_char("Syntax:  olevel [level] <name> [page]\n\r", ch);
  21.         send_to_char("         olevel <level> [page]\n\r", ch);
  22.         free_buf(buffer);
  23.         return;
  24.     }
  25.  
  26.     match = sscanf(argument, " %d %s %d ", &iLevel, name, &iPage);
  27.     if (match == 3) {
  28.         // We got all three valid arguments.
  29.     } else {
  30.         match = sscanf(argument, " %d %d ", &iLevel, &iPage);
  31.         if (match == 2) {
  32.             // We got our level and page.
  33.         } else {
  34.             match = sscanf(argument, " %d %s ", &iLevel, name);
  35.             if (match == 2) {
  36.                 // We got level and name.
  37.             } else {
  38.                 match = sscanf(argument, " %s %d ", name, &iPage);
  39.                 if (match == 2) {
  40.                     // We got name and page.
  41.                 } else {
  42.                     match = sscanf(argument, " %s ", name);
  43.                     if (match == 1) {
  44.                         // Only the name.
  45.                     } else {
  46.                         // Invalid input.
  47.                         send_to_char("Syntax:  olevel [level] <name> [page]\n\r", ch);
  48.                         send_to_char("         olevel <level> [page]\n\r", ch);
  49.                         free_buf(buffer);
  50.                         return;
  51.                     }
  52.                 }
  53.             }
  54.         }
  55.     }
  56.  
  57.     page = iPage;
  58.     if (page < 1)
  59.         page = 1;
  60.     if (page > 99)
  61.         page = 99;
  62.  
  63.     sprintf(buf, "{RObject{G  Level{R     Object Name                  Mobile      Mob/Character                Room   "
  64.                  "         Room Name{x\n\r");
  65.     add_buf(buffer, buf);
  66.     sprintf(buf, "{w---------------------------------------------------------------------------------------------------"
  67.                  "-----------------------{x\n\r");
  68.     add_buf(buffer, buf);
  69.  
  70.     for (obj = object_list; obj != NULL; obj = obj->next)
  71.     {
  72.         if (!can_see_obj(ch, obj) || ch->level < obj->level)
  73.             continue;
  74.  
  75.         if ((iLevel != 0 && iLevel != obj->level) || (name[0] != '\0' && !is_name(name, obj->name)))
  76.             continue;
  77.  
  78.         count++;
  79.  
  80.         if (count <= (page - 1) * per_page)
  81.             continue;
  82.  
  83.         if (count > page * per_page)
  84.             break;
  85.  
  86.         found = TRUE;
  87.  
  88.         for (in_obj = obj; in_obj->in_obj != NULL; in_obj = in_obj->in_obj)
  89.             ;
  90.  
  91.         if (in_obj->carried_by != NULL && can_see(ch, in_obj->carried_by) &&
  92.             !is_name(KEYSTRING, in_obj->carried_by->name) && in_obj->carried_by->in_room != NULL)
  93.         {
  94.             sprintf(buf, "{*[{R%5d{*] {*[{G%3d{*]{x %-30.30s   {*[{R%5d{*] {x%-30.30s   {*[{R%5d{*] {x%-30.30s{x\n\r",
  95.                     obj->pIndexData->vnum, obj->pIndexData->level, obj->short_descr,
  96.                     IS_NPC(in_obj->carried_by) ? in_obj->carried_by->pIndexData->vnum : 0, PERS(in_obj->carried_by, ch),
  97.                     in_obj->carried_by->in_room->vnum, in_obj->carried_by->in_room->name);
  98.         }
  99.         else if (in_obj->in_room != NULL && can_see_room(ch, in_obj->in_room))
  100.         {
  101.             sprintf(buf,
  102.                     "{*[{R%5d{*] {*[{G%3d{*]{x %-30.30s                                            {*[{R%5d{*] "
  103.                     "{x%-30.30s{x\n\r",
  104.                     obj->pIndexData->vnum, obj->pIndexData->level, obj->short_descr, in_obj->in_room->vnum,
  105.                     in_obj->in_room->name);
  106.         }
  107.         else
  108.         {
  109.             sprintf(buf, "{*[{R%5d{*] {*[{G%3d{*]{x %-30.30s    {xsomewhere\n\r", obj->pIndexData->vnum,
  110.                     obj->pIndexData->level, obj->short_descr);
  111.         }
  112.  
  113.         add_buf(buffer, buf);
  114.     }
  115.  
  116.     if (!found)
  117.     {
  118.         send_to_char("Nothing like that in heaven or earth.\n\r", ch);
  119.         free_buf(buffer);
  120.         return;
  121.     }
  122.  
  123.     max_pages = (count + 99) / per_page;
  124.  
  125.     if (page > max_pages)
  126.     {
  127.         send_to_char("Invalid page number.\n\r", ch);
  128.         free_buf(buffer);
  129.         return;
  130.     }
  131.  
  132.     sprintf(buf, "\n\rPage %d/%d\n\r", page, max_pages);
  133.     add_buf(buffer, buf);
  134.  
  135.     page_to_char(buf_string(buffer), ch);
  136.     free_buf(buffer);
  137. }
  138.  
Advertisement
Add Comment
Please, Sign In to add comment