Advertisement
Guest User

Changes sources

a guest
Dec 16th, 2011
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 25.79 KB | None | 0 0
  1. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Changes.c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2.  
  3. #if defined(macintosh)
  4. #include <types.h>
  5. #else
  6. #include <sys/types.h>
  7. #include <sys/time.h>
  8. #endif
  9.  
  10. #include <ctype.h>
  11. #include <errno.h>
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15. #include <time.h>
  16. #include <unistd.h>
  17. #include <stdarg.h>
  18. #include "mud.h"
  19.  
  20. /* New Types/Look by Vegeta */
  21. /*  
  22.  * Globals
  23.  */
  24. char *current_date args ((void));
  25. int   recent_changes     args( ( void ) );
  26. int   strip_change_day   args( ( char *date ) );
  27. int   strip_change_month args( ( char *date ) );
  28. int   strip_change_year  args( ( char *date ) );
  29. int   num_changes    args( ( void ) );
  30.  
  31.  
  32. void stc( const char *txt, CHAR_DATA *ch )
  33. {
  34.     send_to_char( txt, ch );
  35. }
  36.  
  37. int col_str_len (char *txt)
  38. {
  39.    int pos, len;
  40.    
  41.    len = 0;
  42.    for (pos = 0; txt[pos] != '\0'; pos++)
  43.    {
  44.       if (txt[pos] != '#')
  45.       {
  46.          len++;
  47.          continue;
  48.       }
  49.       pos++;
  50.       if (txt[pos] == '\0')
  51.          return len;
  52.       if (txt[pos] == '#' || txt[pos] == '-')
  53.          len++;
  54.    }
  55.    
  56.    return len;
  57. }
  58.  
  59. void ctc (char *txt, CHAR_DATA * ch, int length)
  60. {
  61.    int len, pos;
  62.    char buf[MAX_STRING_LENGTH];
  63.    
  64.    len = (length - col_str_len (txt)) / 2;
  65.    for (pos = 0; pos < len; pos++)
  66.    {
  67.       buf[pos] = ' ';
  68.    }
  69.    buf[pos] = '\0';
  70.    send_to_char (buf, ch);
  71.    send_to_char (txt, ch);
  72. }
  73.  
  74. void cent_to_char (char *txt, CHAR_DATA * ch)
  75. {
  76.    int len, pos;
  77.    char buf[MAX_STRING_LENGTH];
  78.  
  79.    len = (80 - col_str_len (txt)) / 2;
  80.    for (pos = 0; pos < len; pos++)
  81.    {
  82.       buf[pos] = ' ';
  83.    }  
  84.    buf[pos] = '\0';
  85.  
  86.    send_to_char (buf, ch);
  87.    send_to_char (txt, ch);
  88.    send_to_char ("\n\r", ch);
  89. }
  90. /*
  91.  * Local Functions
  92.  */
  93.  
  94. int maxChanges;
  95. #define  NULLSTR( str )  ( str == NULL || str[0] == '\0' )
  96. NEWCHANGE_DATA *changes_table;
  97.  
  98. char *nshort_date (time_t time)
  99. {
  100.    static char buf[20];
  101.    char tmp[20];
  102.    char *date;
  103.  
  104.    if (time < 0)
  105.    {
  106.       time = current_time;
  107.    }
  108.  
  109.    date = ctime (&time);
  110.  
  111.    tmp[0] = date[4];
  112.    tmp[1] = date[5];
  113.    tmp[2] = date[6];
  114.    tmp[3] = '\0';
  115.    if (!str_cmp (tmp, "jan"))
  116.    {
  117.       buf[0] = '0';
  118.       buf[1] = '1';
  119.    }
  120.    else if (!str_cmp (tmp, "feb"))
  121.    {
  122.       buf[0] = '0';
  123.       buf[1] = '2';
  124.    }
  125.    else if (!str_cmp (tmp, "mar"))
  126.    {
  127.       buf[0] = '0';
  128.       buf[1] = '3';
  129.    }
  130.    else if (!str_cmp (tmp, "apr"))
  131.    {
  132.       buf[0] = '0';
  133.       buf[1] = '4';
  134.    }
  135.    else if (!str_cmp (tmp, "may"))
  136.    {
  137.       buf[0] = '0';
  138.       buf[1] = '5';
  139.    }
  140.    else if (!str_cmp (tmp, "jun"))
  141.    {
  142.       buf[0] = '0';
  143.       buf[1] = '6';
  144.    }
  145.    else if (!str_cmp (tmp, "jul"))
  146.    {
  147.       buf[0] = '0';
  148.       buf[1] = '7';
  149.    }
  150.    else if (!str_cmp (tmp, "aug"))
  151.    {
  152.       buf[0] = '0';
  153.       buf[1] = '8';
  154.    }
  155.    else if (!str_cmp (tmp, "sep"))
  156.    {
  157.       buf[0] = '0';
  158.       buf[1] = '9';
  159.    }
  160.    else if (!str_cmp (tmp, "oct"))
  161.    {
  162.       buf[0] = '1';
  163.       buf[1] = '0';
  164.    }
  165.    else if (!str_cmp (tmp, "nov"))
  166.    {
  167.       buf[0] = '1';
  168.       buf[1] = '1';
  169.    }
  170.    else if (!str_cmp (tmp, "dec"))
  171.    {
  172.       buf[0] = '1';
  173.       buf[1] = '2';
  174.    }
  175.    else
  176.    {
  177.       buf[3] = '9';
  178.       buf[4] = '9';
  179.    }
  180.  
  181.    buf[2] = '/';
  182.  
  183.    if (date[8] == ' ')
  184.       buf[3] = '0';
  185.    else
  186.       buf[3] = date[8];
  187.  
  188.    buf[4] = date[9];
  189.  
  190.    buf[5] = '/';
  191.  
  192.    buf[6] = date[20];
  193.    buf[7] = date[21];
  194.    buf[8] = date[22];
  195.    buf[9] = date[23];
  196.  
  197.    return buf;
  198. }
  199.  
  200. void load_changes (void)
  201. {
  202.    FILE *fp;
  203.    int i;
  204.  
  205.    if (!(fp = fopen (CHANGES_FILE, "r")))
  206.    {
  207.       bug ("Could not open Changes File for reading.", 0);
  208.       return;
  209.    }
  210.    int fcheck;
  211.    fcheck =fscanf (fp, "%d\n", &maxChanges);
  212.  
  213.    /* Use malloc so we can realloc later on */
  214.    changes_table = malloc (sizeof (NEWCHANGE_DATA) * (maxChanges + 1));
  215.  
  216.    for (i = 0; i < maxChanges; i++)
  217.    {
  218.       changes_table[i].change = fread_string (fp);
  219.       changes_table[i].coder = fread_string (fp);
  220.       changes_table[i].date = fread_string (fp);
  221.       changes_table[i].mudtime = fread_number (fp);
  222.       changes_table[i].imm = fread_number (fp);
  223.       changes_table[i].type = fread_string (fp);
  224.    }
  225.  
  226.    changes_table[maxChanges].coder = str_dup ("");
  227.    fclose (fp);
  228.    return;          /* just return */
  229. }
  230.  
  231. char *current_date ()
  232. {
  233.    static char buf[128];
  234.    struct tm *t;
  235.    time_t nowtime;
  236.    nowtime = time (&current_time);
  237.    t = localtime (&nowtime);
  238.    strftime (buf, 100, "%d-%b-%Y", t);
  239.    return buf;
  240. }
  241.  
  242. void save_changes (void)
  243. {
  244.    FILE *fp;
  245.    int i;
  246.  
  247.    if (!(fp = fopen (CHANGES_FILE, "w")))
  248.    {
  249.       perror (CHANGES_FILE);
  250.       return;
  251.    }
  252.  
  253.    fprintf (fp, "%d\n", maxChanges);
  254.    for (i = 0; i < maxChanges; i++)
  255.    {
  256.       fprintf (fp, "%s~\n", changes_table[i].change);
  257.       fprintf (fp, "%s~\n", changes_table[i].coder);
  258.       fprintf (fp, "%s~\n", changes_table[i].date);
  259.       fprintf (fp, "%ld\n", changes_table[i].mudtime);
  260.       fprintf (fp, "%d\n", changes_table[i].imm);
  261.       fprintf (fp, "%s~\n", changes_table[i].type);
  262.       fprintf (fp, "\n");
  263.    }
  264.    fclose (fp);
  265.  
  266.    return;
  267. }
  268.  
  269.  void delete_change (int iChange)
  270. {
  271.    int i, j;
  272.    NEWCHANGE_DATA *new_table;
  273.  
  274.    new_table = malloc (sizeof (NEWCHANGE_DATA) * maxChanges);
  275.  
  276.    if (!new_table)
  277.       return;
  278.  
  279.    iChange--;
  280.    if( iChange < 0 || iChange > maxChanges )
  281.       return;
  282.  
  283.    for (i = 0, j = 0; i < maxChanges + 1; i++)
  284.    {
  285.       if (i != iChange)
  286.       {
  287. new_table[j] = changes_table[i];
  288. j++;
  289.       }
  290.    }
  291.  
  292.    free (changes_table);
  293.    changes_table = new_table;
  294.    maxChanges--;
  295.    save_changes ();
  296.    return;
  297. }
  298. // Count how many changes in the last 2 days - Luther
  299. int recent_changes( void )
  300. {
  301.    int i, count;
  302.  
  303.    count = 0;
  304.    for( i = 0; i <= maxChanges; i++ )
  305.    {
  306.       /* 172800 is equal to 2 days in seconds */
  307.       if( ( current_time - changes_table[i].mudtime ) > 172800 )
  308.          continue;
  309.       count++;
  310.    }
  311.  
  312.    return count;  
  313. }
  314.  
  315. // Take a changes date string and strip out the month value - Luther
  316. int strip_change_month( char *date )
  317. {
  318.     int a = 0;
  319.     int num = 0;
  320.     int value = -1;
  321.     int count = 1;
  322.     int total = 1;
  323.     if( date[0] == '\0' )
  324.         return -1;
  325.  
  326.     char dbuf[MAX_INPUT_LENGTH];
  327.  
  328.     for( a = 0; a < strlen(date); a++ )
  329.     {
  330.     sprintf(dbuf,"%c",date[a]);
  331.         num = 0;
  332.         if( is_number(dbuf) )
  333.         {
  334.           num = atoi(dbuf);
  335.           if( count == 1 )
  336.             value = 10 * num;
  337.           else if( count == 2 )
  338.           {
  339.             value += num;
  340.             count = 1;
  341.             continue;
  342.           }
  343.           count++;
  344.           continue;
  345.         }
  346.         else if( date[a] == '/' )
  347.         {
  348.           if( total == 1 )
  349.             return value;
  350.           total++;
  351.           value = 0;
  352.           continue;
  353.         }
  354.     }
  355.     return value;
  356. }
  357.  
  358. // Take a changes date string and strip out the day value - Luther
  359. int strip_change_day( char *date )
  360. {
  361.     int a = 0;
  362.     int num = 0;
  363.     int value = -1;
  364.     int count = 1;
  365.     int total = 1;
  366.     if( date[0] == '\0' )
  367.     return -1;
  368.  
  369.     char dbuf[MAX_INPUT_LENGTH];
  370.  
  371.     for( a = 0; a < strlen(date); a++ )
  372.     {
  373.         sprintf(dbuf,"%c",date[a]);
  374.     num = 0;
  375.     if( is_number(dbuf) )
  376.     {
  377.       num = atoi(dbuf);
  378.       if( count == 1 )
  379.         value = 10 * num;
  380.       else if( count == 2 )
  381.       {
  382.         value += num;
  383.         count = 1;
  384.         continue;
  385.       }
  386.       count++;
  387.       continue;
  388.     }
  389.     else if( date[a] == '/' )
  390.     {
  391.       if( total == 2 )
  392.         return value;
  393.       total++;
  394.       value = 0;
  395.       continue;
  396.     }
  397.     }
  398.     return value;
  399. }
  400.  
  401. // Take a changes date string and strip out the year value - Luther
  402. int strip_change_year( char *date )
  403. {
  404.     int a = 0;
  405.     int num = 0;
  406.     int value = -1;
  407.     int count = 1;
  408.     int total = 1;
  409.     if( date[0] == '\0' )
  410.         return -1;
  411.  
  412.     char dbuf[MAX_INPUT_LENGTH];
  413.  
  414.     for( a = 0; a < strlen(date); a++ )
  415.     {
  416.         sprintf(dbuf,"%c",date[a]);
  417.         num = 0;
  418.         if( is_number(dbuf) )
  419.         {
  420.           num = atoi(dbuf);
  421.           if( count == 1 )
  422.             value = 10 * num;
  423.           else if( count == 2 )
  424.           {
  425.             value += num;
  426.             count = 1;
  427.             continue;
  428.           }
  429.           count++;
  430.           continue;
  431.         }
  432.         else if( date[a] == '/' )
  433.         {
  434.           if( total == 3 )
  435.             return value;
  436.           total++;
  437.           value = 0;
  438.           continue;
  439.         }
  440.     }
  441.     return value;
  442. }
  443. void do_addimmchange (CHAR_DATA * ch, char *argument)
  444. {
  445.    CHAR_DATA *vch;
  446.    NEWCHANGE_DATA *new_table;
  447.    char buf[MAX_STRING_LENGTH];
  448.    char arg[MAX_STRING_LENGTH];
  449.    if (IS_NPC (ch))
  450.       return;
  451.    argument = one_argument(argument,arg);
  452.  
  453.    if ( !arg[0] )
  454.    {
  455.        send_to_char( "No type specified\n\r",ch );
  456.        return;
  457.    }
  458.  
  459.    if (str_cmp(arg, "code") && str_cmp(arg, "area") && str_cmp(arg, "misc") && str_cmp(arg,"clan") && str_cmp(arg,"help"))
  460.    {
  461.        send_to_char( "Code/Area/Misc/Clan/Help please.\n\r", ch );
  462.        return;
  463.    }
  464.  
  465.    if (argument[0] == '\0')
  466.    {
  467.       send_to_char ("Syntax: Addimmchange $ChangeString\n\r", ch);
  468.       send_to_char ("Type 'changes imm' to view the list.&D\n\r", ch);
  469.       return;
  470.    }
  471.  
  472.    maxChanges++;
  473.    new_table =
  474.       realloc (changes_table, sizeof (NEWCHANGE_DATA) * (maxChanges + 1));
  475.  
  476.    if (!new_table)
  477.    {                /* realloc failed */
  478.       send_to_char ("Memory allocation failed. Brace for impact.\n\r", ch);
  479.       return;
  480.    }
  481.    changes_table = new_table;
  482.    changes_table[maxChanges - 1].change = str_dup (argument);
  483.    changes_table[maxChanges - 1].coder = str_dup (ch->name);
  484.    changes_table[maxChanges - 1].date = str_dup (current_date ());
  485.    changes_table[maxChanges - 1].mudtime = current_time;
  486.    changes_table[maxChanges - 1].imm = 1;
  487.    changes_table[maxChanges - 1].type = str_dup (arg);
  488.  
  489.    for ( vch = first_char; vch != NULL; vch = vch->next )
  490.    {
  491.     if ( IS_NPC(vch) ) continue;
  492.     if ( !IS_IMMORTAL(vch) )continue;
  493.    sprintf (buf,
  494.         "&c%s &whas added a new Immortal-only change, type '&Ychanges imm&w' to see what it was",
  495.         ch->name);
  496.    cent_to_char( buf,vch );
  497.    }
  498.    save_changes ();
  499.    return;
  500. }
  501.  
  502. void do_addchange (CHAR_DATA * ch, char *argument)
  503. {
  504.    NEWCHANGE_DATA *new_table;
  505.    char buf[MAX_STRING_LENGTH];
  506.    char arg[MAX_STRING_LENGTH];
  507.    if (IS_NPC (ch))
  508.       return;
  509.  
  510.    argument = one_argument(argument,arg);
  511.  
  512.  
  513.    if (str_cmp(arg, "code") && str_cmp(arg, "area") && str_cmp(arg, "misc") && str_cmp(arg,"clan") && str_cmp(arg,"help"))
  514.    {
  515.        send_to_char( "Code/Area/Misc/Clan/Help please.\n\r", ch );
  516.        return;
  517.    }
  518.  
  519.    if (argument[0] == '\0')
  520.    {
  521.       send_to_char ("Syntax: Addchange <change desc>\n\r", ch);
  522.       send_to_char ("Type 'changes' to view the list.&D\n\r", ch);
  523.       return;
  524.    }
  525.  
  526.    maxChanges++;
  527.    new_table =
  528.       realloc (changes_table, sizeof (NEWCHANGE_DATA) * (maxChanges + 1));
  529.  
  530.    if (!new_table)
  531.    {                /* realloc failed */
  532.       send_to_char ("Memory allocation failed. Brace for impact.\n\r", ch);
  533.       return;
  534.    }
  535.    changes_table = new_table;
  536.    changes_table[maxChanges - 1].change = str_dup (argument);
  537.    changes_table[maxChanges - 1].coder = str_dup (ch->name);
  538.    changes_table[maxChanges - 1].date = str_dup (current_date ());
  539.    changes_table[maxChanges - 1].mudtime = current_time;
  540.    changes_table[maxChanges - 1].imm = 0;
  541.    changes_table[maxChanges - 1].type = str_dup (arg);
  542.  
  543. sprintf (buf,
  544.         "&c%s &Yhas added a new &c%s &Ychange, type &r'&zchanges&r'&W to see what it was",
  545.         ch->name, strupper(arg));
  546.    do_echo(ch ,buf);
  547.    save_changes ();
  548.    return;
  549. }
  550.  
  551. void do_chedit (CHAR_DATA * ch, char *argument)
  552. {
  553.    char arg1[MAX_INPUT_LENGTH];
  554.    char arg2[MAX_INPUT_LENGTH];
  555.    char buf[MAX_STRING_LENGTH];
  556.  
  557.    argument = one_argument (argument, arg1);
  558.    argument = one_argument (argument, arg2);
  559.  
  560.    if (IS_NPC (ch))
  561.       return;
  562.  
  563.    if (!ch->desc || NULLSTR (arg1))
  564.    {
  565.       send_to_char ("Syntax: chedit load/save\n\r", ch);
  566.       send_to_char ("Syntax: chedit delete (change number)\n\r", ch);
  567.       send_to_char ("Syntax: chedit rename (change number)\n\r", ch);
  568.       return;
  569.    }
  570.    else if (!str_cmp (arg1, "load"))
  571.    {
  572.       load_changes ();
  573.       send_to_char ("Changes Loaded.\n\r", ch);
  574.       return;
  575.    }
  576.    else if (!str_cmp (arg1, "save"))
  577.    {
  578.       save_changes ();
  579.       send_to_char ("Changes Saved.\n\r", ch);
  580.       return;
  581.    }
  582.    else if (!str_cmp (arg1, "delete"))
  583.    {
  584.       int num;
  585.  
  586.       if (NULLSTR (arg2) || !is_number (arg2))
  587.       {
  588.      send_to_char
  589.         ("&wFor editchange delete, you must provide a change number.&D\n\r",
  590.          ch);
  591.      send_to_char ("Syntax: chsave delete (change number)\n\r", ch);
  592.      return;
  593.       }
  594.  
  595.       num = atoi (arg2);
  596.  
  597.       if (num < 0 || num > maxChanges)
  598.       {
  599.      sprintf (buf, "Valid changes are from 0 to %d.\n\r", maxChanges);
  600.      send_to_char (buf, ch);
  601.      return;
  602.       }
  603.  
  604.       delete_change (num);
  605.       send_to_char ("Change deleted.\n\r", ch);
  606.  
  607.       return;
  608.    }
  609.    else if (strcmp (arg1, "rename") == 0)
  610.    {
  611.       int num;
  612.       if (NULLSTR (arg2) || !is_number (arg2) || NULLSTR (argument))
  613.       {
  614.      send_to_char
  615.         ("&YFor chsave rename, you must choose a change number.&D\n\r",
  616.          ch);
  617.      send_to_char
  618.         ("Syntax: chsave rename (change number) 'New Change'&D\n\r",
  619.          ch);
  620.      return;
  621.       }
  622.       num = atoi (arg2);
  623.       if (num < 0 || num > maxChanges)
  624.       {
  625.      char buf[MAX_STRING_LENGTH];
  626.      sprintf (buf, "Valid changes are from 0 to %d.\n\r", maxChanges);
  627.      send_to_char (buf, ch);
  628.      return;
  629.       }
  630.       changes_table[num - 1].change = str_dup (argument);
  631.       save_changes ();
  632.       send_to_char ("Change renamed.\n\r", ch);
  633.       return;
  634.    }
  635.  
  636. }
  637.  
  638.  
  639. char *line_indent (char *text, int wBegin, int wMax)
  640. {
  641.    static char buf[MAX_STRING_LENGTH];
  642.    char *ptr;
  643.    char *ptr2;
  644.    int count = 0;
  645.    bool stop = FALSE;
  646.    int wEnd = 0;
  647.    buf[0] = '\0';
  648.    ptr = text;
  649.    ptr2 = buf;
  650.  
  651.    while (!stop)
  652.    {
  653.       if (count == 0)
  654.       {
  655.      if (*ptr == '\0')
  656.         wEnd = wMax - wBegin;
  657.      else if (strlen (ptr) < (wMax - wBegin))
  658.         wEnd = wMax - wBegin;
  659.      else
  660.      {
  661.         int x = 0;
  662.  
  663.         while (*(ptr + (wMax - wBegin - x)) != ' ')
  664.            x++;
  665.         wEnd = wMax - wBegin - (x - 1);
  666.         if (wEnd < 1)
  667.            wEnd = wMax - wBegin;
  668.      }
  669.       }
  670.       if (count == 0 && *ptr == ' ')
  671.      ptr++;
  672.       else if (++count != wEnd)
  673.       {
  674.      if ((*ptr2++ = *ptr++) == '\0')
  675.         stop = TRUE;
  676.       }
  677.       else if (*ptr == '\0')
  678.       {
  679.      stop = TRUE;
  680.      *ptr2 = '\0';
  681.       }
  682.       else
  683.       {
  684.      int k;
  685.  
  686.      count = 0;
  687.      *ptr2++ = '\n';
  688.      *ptr2++ = '\r';
  689.      for (k = 0; k < wBegin; k++)
  690.         *ptr2++ = ' ';
  691.       }
  692.    }
  693.    return buf;
  694. }
  695. void nnum_changes (CHAR_DATA *ch)
  696. {
  697.     char buf[MAX_INPUT_LENGTH];
  698.     char *test;
  699.     int today;
  700.     int i;
  701.  
  702.     i = 0;
  703.     test = current_date ();
  704.     today = 0;
  705.  
  706.     for (i = 0; i < maxChanges; i++)
  707.        if ( changes_table[i].imm > 0 && !IS_IMMORTAL(ch)) maxChanges--;
  708.    
  709.    i = 0;
  710.    for (i = 0; i < maxChanges; i++)
  711.    {
  712.       if (!str_cmp (test, changes_table[i].date))
  713.       {
  714.         today++;
  715.       }
  716.    }
  717.  
  718.    if ( today > 0 )
  719.    {
  720.        sprintf( buf, " &zThere have been &W%d&z changes added to the MUD today &z-&W%d&z- total&D\n\r&z Type &W'&Wchanges&W'&zto view them&D\n\r", today, maxChanges );
  721.        send_to_char( buf, ch );
  722.        //return;
  723.    }
  724.    load_changes();
  725.    return;
  726. }
  727. int num_changes( void )
  728. {
  729.   char *test;
  730.   int today;
  731.   int i;
  732.  
  733.   i = 0;
  734.   test = current_date(  );
  735.   today = 0;
  736.  
  737.   for( i = 0; i < maxChanges; i++ )
  738.     if( !str_cmp( test, changes_table[i].date ) )
  739.       today++;
  740.   return today;
  741. }
  742. void do_changes (CHAR_DATA * ch, char *argument)
  743. {
  744.    char arg[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH], buf[MAX_STRING_LENGTH], *test;
  745.    int i, page = 0, maxpage = 0, today;
  746.    int display = 0;
  747.    argument = one_argument (argument, arg);
  748.    argument = one_argument (argument, arg2);
  749.  
  750.    if (IS_NPC (ch))
  751.       return;
  752.    if (maxChanges < 1)
  753.       return;
  754.  if( !str_cmp(arg,"recent") )
  755.   {  
  756.    send_to_char
  757. ("&z\n\r&c+&W==============================================================================&c+\n\r", ch);
  758.     sprintf( buf, "&WA total of &r[ &z%2d &r] &Wnew changes have been added today.&d\n\r", num_changes() );
  759.     send_to_char( buf, ch );
  760.     sprintf( buf, "&WA total of &r[ &z%2d &r] &Wchanges added in the last two days.&d\n\r", recent_changes());
  761.     send_to_char( buf, ch );
  762.     ch_printf(ch,"&WType &r'&zchanges&r' &Wto see a list of changes.\n\r");
  763.     send_to_char ("&c+&W==============================================================================&c+\n\r", ch);
  764.     return;
  765.   }
  766.    int fag = maxChanges;
  767.    i = 0;
  768.    test = current_date ();
  769.    today = 0;
  770.  
  771.    for (i = 0; i < fag; i++)
  772.        if ( changes_table[i].imm > 0 && !IS_IMMORTAL(ch)) fag--;
  773.    
  774.    i = 0;
  775.  
  776.    for (i = 0; i < maxChanges; i++)
  777.    {
  778.       if (!str_cmp (test, changes_table[i].date))
  779.       {
  780.         today++;
  781.       }
  782.    }
  783.  
  784.    if (is_number (arg))
  785.       page = atoi (arg);
  786.    //maxpage = (maxChanges/10)+1;
  787.    maxpage = (maxChanges + 9) / 10;
  788.    if ( maxChanges == 0 )
  789.    {
  790.    stc("\n\r&RCurrently No changes have been added to the changes list", ch );
  791.    return;
  792.    }
  793.    if (page > 0)
  794.    {
  795.       if (page > maxpage)
  796.       {
  797.      sprintf (buf, "Show which page 1-%d\n\r", maxpage);
  798.      send_to_char (buf, ch);
  799.      return;
  800.       }
  801.       page *= 10;
  802.    }
  803.    send_to_char ("\n\r&YNUMBER &WIMMORTAL      &zTYPE    &RDATE        &cCHANGE                                        &D\n\r", ch);
  804.  
  805.    send_to_char ("&c+&W==============================================================================&c+\n\r", ch);
  806.  
  807.    if (!str_cmp (arg, "code") || !str_cmp (arg, "misc") || !str_cmp (arg, "area") || !str_cmp (arg, "help")|| !str_cmp (arg, "clan"))
  808.    {
  809.        for( i = 0; i < maxChanges; i++ )
  810.        {
  811.            if( str_cmp(changes_table[i].type, arg) )
  812.            {
  813.               continue;
  814.            }
  815.  
  816.            sprintf (buf, "&r[&Y%4d&r] &W%-13s &z%-4s &R%11s &r- &c%-55s\n\r",
  817.                (i + 1),
  818.                changes_table[i].coder,
  819.                strupper(changes_table[i].type),
  820.                changes_table[i].date,
  821.                line_indent (changes_table[i].change, 40, 79));
  822.             send_to_char (buf, ch);
  823.         }
  824.    send_to_char ("&c+&W==============================================================================&c+\n\r", ch);
  825.         if (today > 0)
  826.               sprintf (buf,
  827.                    "&WThere is a total of &r[&z%d&r]&W changes of which &r[&z%d&r] &W%s been added today.&D",
  828.                    maxChanges, today, today > 1 ? "have" : "has");
  829.         else
  830.    sprintf (buf, "&WThere is a total of &r[&z%d&r]&W changes.&D", fag);
  831.    cent_to_char (buf, ch);
  832.    if ( IS_IMMORTAL(ch) ) cent_to_char ("&WBe sure to check &z<&Ychanges imm&r>&W!&d", ch );
  833.    send_to_char ("&c+&W==============================================================================&c+\n\r", ch);
  834.    sprintf (buf, "&WTo see pages of changes use: &r'&zchanges &z<&Y1&w-&O%d&w&z>&r'&D",
  835.             (maxChanges + 9) / 10);
  836.    cent_to_char (buf, ch);
  837.    cent_to_char
  838.       ("&WTo search all changes for a change use: &r'&Ychanges search &z<&rword&z>&r'&D",
  839.        ch);
  840.    send_to_char ("&c+&W==============================================================================&c+\n\r", ch);
  841.    load_changes();
  842.    return;
  843.   }
  844.    if (!str_cmp (arg, "imm"))
  845.    {
  846.        if ( !IS_IMMORTAL(ch) )
  847.        {
  848.             sprintf (buf, "&r[&zNone&r] &YNone &zNone &RNone &r- &cNone&d\n\r");
  849.              send_to_char (buf, ch);
  850.              return;
  851.        }
  852.        for ( i = 0; i < maxChanges; i++ )
  853.        {
  854.            if ( changes_table[i].imm != 1 ) continue;
  855.  
  856.            if (page == 0
  857.       && changes_table[i].mudtime + (2 * 24L * 3600L) < current_time)
  858.      continue;
  859.       display++;
  860.  
  861.       if (page > 0 && (page > 0 && (i < (page - 10) || i >= page)))
  862.      continue;
  863.  
  864.       sprintf (buf, "&r[&Y%4d&r] &W%-13s &z%-4s &Y%11s &r- &c%-55s &r[&YIMMCHANGE&r]&D\n\r",
  865.            (i + 1),
  866.            changes_table[i].coder,
  867.            strupper(changes_table[i].type),
  868.            changes_table[i].date,
  869.            line_indent (changes_table[i].change, 40, 79));
  870.       send_to_char (buf, ch);
  871.    }
  872.    send_to_char ("&c+&W==============================================================================&c+\n\r", ch);
  873.    if (today > 0)
  874.       sprintf (buf,
  875.            "&WThere is a total of &r[&z%d&r] &Wchanges of which&r [&Y%d&r] &W%s been added today.&D",
  876.            maxChanges, today, today > 1 ? "have" : "has");
  877.    else
  878.       sprintf (buf, "&WThere is a total of &r[&z%d&r]&W changes.&D", maxChanges);
  879.    cent_to_char (buf, ch);
  880.    send_to_char ("&c+&W==============================================================================&c+\n\r", ch);
  881.    sprintf (buf, "&WTo see pages of changes use: &r'&Ychanges &z<&r1&w-&Y%d&z>&r'",(maxChanges + 9) / 10);
  882.    cent_to_char (buf, ch);
  883.    cent_to_char ("&WTo search all changes for a change use: &r'&Ychanges search&w &z<&rword&z>&r'&D", ch);
  884.    send_to_char ("&c+&W==============================================================================&c+\n\r", ch);
  885.    return;
  886.    }
  887.  
  888.  
  889.    if (!str_cmp (arg, "search"))
  890.    {
  891.       int dsp = 0;
  892.  
  893.       if (arg2[0] == '\0')
  894.       {
  895.      send_to_char ("What do you want to search for??\n\r", ch);
  896.      return;
  897.       }
  898.  
  899.       for (i = 0; i < maxChanges; i++)
  900.       {
  901.      if (!str_infix (arg2, changes_table[i].change)
  902.          || !str_infix (arg2, changes_table[i].coder))
  903.  
  904.      {
  905.         sprintf (buf, "&r[&Y%4d&r] &W%-13s &z%-4s &R%11s &r- &W%-52s\n\r",
  906.              (++dsp),
  907.              changes_table[i].coder,
  908.              strupper(changes_table[i].type),
  909.              changes_table[i].date,
  910.              line_indent (changes_table[i].change, 40, 79));
  911.         send_to_char (buf, ch);
  912.      }
  913.       }
  914.       if (dsp == 0)
  915.      cent_to_char ("There is NO match with what you have entered!.", ch);
  916.    send_to_char ("&c+&W==============================================================================&c+\n\r", ch);
  917.       return;
  918.    }
  919.  
  920.    if ( !str_cmp(arg, "all") )
  921.    {
  922.     for (i = 0; i < maxChanges; i++)
  923.     {
  924.         sprintf (buf, "&r[&Y%4d&r] &W%-13s &z%-4s &R%11s &r- &c%-55s\n\r",
  925.                (i + 1),
  926.                changes_table[i].coder,
  927.                strupper(changes_table[i].type),
  928.                changes_table[i].date,
  929.                line_indent (changes_table[i].change, 40, 79));
  930.             send_to_char (buf, ch);
  931.         }
  932.    send_to_char ("&c+&W==============================================================================&c+\n\r", ch);
  933.     if (today > 0)
  934.          sprintf( buf,  "&WThere is a total of &r[&z%d&r] &Wchanges of which&r [&Y%d&r] &W%s&W been added today.&D",
  935.            maxChanges, today, today > 1 ? "have" : "has");
  936.         else
  937.    sprintf (buf, "&WThere is a total of &r[&Y%d&r]&W changes.&D", fag);
  938.    cent_to_char (buf, ch);
  939.    if ( IS_IMMORTAL(ch) ) cent_to_char ("&WBe sure to check &'Rchanges imm'&w!", ch );
  940.    send_to_char ("&c+&W==============================================================================&c+\n\r", ch);
  941.    sprintf (buf, "&WTo see pages of changes use: &r'&Ychanges &z<&R1&w-&Y%d&z>&r'",
  942.             (maxChanges + 9) / 10);
  943.    cent_to_char (buf, ch);
  944.    cent_to_char
  945.       ("&WTo search all changes for a change use: '&Ychanges search &r<&zword&r>&W'&D",
  946.        ch);
  947.    send_to_char ("&c+&W==============================================================================&c+\n\r", ch);
  948.    load_changes();
  949.    return;
  950.   }
  951.  
  952.  
  953.    for (i = 0; i < maxChanges; i++)
  954.    {
  955.       if (page == 0
  956.       && changes_table[i].mudtime + (2 * 24L * 3600L) < current_time)
  957.      continue;
  958.       if (changes_table[i].imm != 0 ) continue;
  959.       display++;
  960.  
  961.       if (page > 0 && (page > 0 && (i < (page - 10) || i >= page)))
  962.      continue;
  963.  
  964.       sprintf (buf, "&r[&Y%4d&r] &W%-13s &z%-4s &R%11s &r- &c%-55s\n\r",
  965.            (i + 1),
  966.            changes_table[i].coder,
  967.            strupper(changes_table[i].type),
  968.            changes_table[i].date,
  969.            line_indent (changes_table[i].change, 40, 79));
  970.       send_to_char (buf, ch);
  971.    }
  972.    send_to_char ("&c+&W==============================================================================&c+\n\r", ch);
  973.    if (today > 0)
  974.       sprintf (buf,
  975.            "&WThere is a total of &r[&z%d&r] &Wchanges of which&r [&Y%d&r] &W%s&W been added today.&D",
  976.            maxChanges, today, today > 1 ? "have" : "has");
  977.    else
  978.       sprintf (buf, "&WThere is a total of &r[&Y%d&r]&W changes.&D", fag);
  979.    cent_to_char (buf, ch);
  980.    if ( IS_IMMORTAL(ch) ) cent_to_char ("&WBe sure to check '&Rchanges imm'&w!", ch );
  981.    send_to_char ("&c+&W==============================================================================&c+\n\r", ch);
  982.    sprintf (buf, "&WTo see pages of changes use: &r'&Ychanges &z<&R1&w-&Y%d&z>&r'",
  983.             (maxChanges + 9) / 10);
  984.    cent_to_char (buf, ch);
  985.    cent_to_char
  986.       ("&WTo search all changes for a change use: '&Ychanges search &r<&zword&r>&W'&D",
  987.        ch);
  988.    send_to_char ("&c+&W==============================================================================&c+\n\r", ch);
  989.    load_changes();
  990.  
  991. }
  992.  
  993. //EOF
  994.  
  995.  
  996. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Changes.h~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  997. void load_changes args( (void) );
  998. void save_changes args( (void) );
  999. void delete_change args( (int num) );
  1000. #define CHANGES_FILE    SYSTEM_DIR "changes.dat" /* For projects  */
  1001.  
  1002. /*struct newchanges_data
  1003. {
  1004.  
  1005.     char *         change;
  1006.     char *         coder;
  1007.     char *         date;
  1008.     time_t         mudtime;
  1009.     int             imm;
  1010.     char *          type;
  1011. };
  1012. */
  1013. //extern struct  newchanges_data * changes_table;
  1014.  
  1015.  
  1016. void nnum_changes args ((CHAR_DATA *ch));
  1017. void    ctc             args( (char *txt, CHAR_DATA * ch, int length) );
  1018. void     cent_to_char   args( (char *txt, CHAR_DATA * ch) );
  1019. void    stc     args( ( const char *txt, CHAR_DATA *ch ) );
  1020. DECLARE_DO_FUN(do_changes);
  1021. DECLARE_DO_FUN(do_addchange);
  1022. DECLARE_DO_FUN(do_chedit);
  1023. DECLARE_DO_FUN(do_addimmchange);
  1024.  
  1025. //EOF
  1026.  
  1027.  
  1028. Please ya gotta help me out with this
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement