/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ /*************************************************************************** * God Wars Mud originally written by KaVir aka Richard Woolcock. * * Changes done to the code done by Sage aka Walter Howard, this mud is * * for the public, however if you run this code it means you agree * * to the license.low, license.gw, and license.merc have fun. :) * ***************************************************************************/ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "merc.h" int clan_table_search args( (CHAR_DATA *ch) ); void format_string_spaces args ( (char *argument,int spaces) ); /* * Donate Command */ void do_donate(CHAR_DATA *ch, char *argument) { char Object_Name[MAX_INPUT_LENGTH]; ROOM_INDEX_DATA *xRoom; OBJ_DATA *xObject; int DONATION_ROOM; argument = one_argument(argument, Object_Name); if ( Object_Name == '\0' ) { send_to_char("Donate WHAT Object?",ch); return; } if ( ( xObject= get_obj_carry(ch,Object_Name)) == NULL) { send_to_char("You can't donate that item! You have not got it!",ch); return; } switch(xObject->item_type) { case ITEM_WEAPON : DONATION_ROOM=DONATION_ROOM_WEAPON; break; case ITEM_ARMOR : DONATION_ROOM=DONATION_ROOM_ARMOR; break; default : DONATION_ROOM=DONATION_ROOM_REST; break; } if ( ( xRoom = get_room_index(DONATION_ROOM)) == NULL) { bug("Donate Room Does Not Exist : %d",DONATION_ROOM); return; } act("$p vanishes from your hands in a pink mist.",ch,xObject,NULL,TO_CHAR); act("$p vanishes from $n's hands in a pink mist.",ch,xObject,NULL,TO_ROOM); obj_from_char(xObject); obj_to_room(xObject,xRoom); act("$p appears in a pink mist in the room.",ch,xObject,NULL,TO_ROOM); return; } /* * OutPuts Current Mud Code Version */ void do_version( CHAR_DATA *ch, char *argument) { char buf[MAX_INPUT_LENGTH]; sprintf(buf, "\n\r*************************************\n\rGodwars Version Number :- %d\n\r*************************************\n\r",VERSION_NUMBER); send_to_char(buf,ch); return; } void clan_table_write() { int clan_pos; int kill_count; FILE *fp; if ( ( fp = fopen(CLAN_LIST, "w") ) !=NULL) { for(clan_pos=0;clan_pos<=MAX_CLAN-1;clan_pos++) { fprintf( fp, "ClanName %s~\n",clan_table[clan_pos].clan_name); fprintf( fp, "ClanLeader %s~\n",clan_table[clan_pos].clan_leader); fprintf( fp, "ClanPower1 %s~\n",clan_table[clan_pos].clan_powers_1); fprintf( fp, "ClanPower2 %s~\n",clan_table[clan_pos].clan_powers_2); fprintf( fp, "ClanPower3 %s~\n",clan_table[clan_pos].clan_powers_3); fprintf( fp, "LowerVnum %d\n",clan_table[clan_pos].lvnum); fprintf( fp, "UpperVnum %d\n",clan_table[clan_pos].uvnum); fprintf( fp, "ClanRecall %d\n",clan_table[clan_pos].clan_recall); fprintf( fp, "ClanKills "); for(kill_count=0;kill_count<=MAX_CLAN-1;kill_count++) { fprintf(fp, "%d ", clan_table[clan_pos].clan_kills[kill_count]); } fprintf( fp, "\n"); } fclose( fp ); } else { /*bug("Cannot Open Clan file :- WRITE CLAN TABLE", 0);*/ } return; } void clan_table_read() { int clan_pos; int kill_count; FILE *fp; char *dummy; if ( ( fp = fopen(CLAN_LIST, "r") ) !=NULL) { for(clan_pos=0;clan_pos<=MAX_CLAN-1;clan_pos++) { dummy=fread_word( fp ); clan_table[clan_pos].clan_name=fread_string( fp ); dummy=fread_word( fp ); clan_table[clan_pos].clan_leader=fread_string( fp ); dummy=fread_word( fp ); clan_table[clan_pos].clan_powers_1=fread_string( fp ); dummy=fread_word( fp ); clan_table[clan_pos].clan_powers_2=fread_string( fp ); dummy=fread_word( fp ); clan_table[clan_pos].clan_powers_3=fread_string( fp ); dummy=fread_word( fp ); clan_table[clan_pos].lvnum=fread_number( fp ); dummy=fread_word( fp ); clan_table[clan_pos].uvnum=fread_number( fp ); dummy=fread_word( fp ); clan_table[clan_pos].clan_recall=fread_number( fp ); dummy=fread_word( fp ); for(kill_count=0;kill_count<=MAX_CLAN-1;kill_count++) { clan_table[clan_pos].clan_kills[kill_count]=fread_number( fp ); } } } else { /*bug("Cannot Open Clan Table:- Loading Default Table", 0);*/ return; } fclose( fp ); return; } void show_clan_info(CHAR_DATA *ch, char *argument) { char buf[MAX_INPUT_LENGTH]; int clan_pos; int clan_pos_outer; if (!strcmp(argument,"more")) { sprintf( buf, "\n\r Inter-Clan Kills\n\r\n\r"); send_to_char(buf,ch); sprintf( buf,"Clan Name"); format_string_spaces(buf,15); send_to_char(buf,ch); for (clan_pos=0;clan_pos<MAX_CLAN-1;clan_pos++) { sprintf( buf,"%d",clan_pos); format_string_spaces(buf,5); send_to_char(buf,ch); } sprintf( buf,"\n\r\n\r"); send_to_char(buf,ch); for (clan_pos_outer=0;clan_pos_outer<MAX_CLAN-1;clan_pos_outer++) { sprintf( buf,"%d) %s",clan_pos_outer,clan_table[clan_pos_outer].clan_name); format_string_spaces(buf,15); send_to_char(buf,ch); for (clan_pos=0;clan_pos<MAX_CLAN-1;clan_pos++) { sprintf( buf,"%d",clan_table[clan_pos_outer].clan_kills[clan_pos]); format_string_spaces(buf,5); send_to_char(buf,ch); } sprintf( buf,"\n\r"); send_to_char(buf,ch); } } else { sprintf( buf, "\n\r Current Vampire Clans\n\r\n\r"); send_to_char(buf,ch); sprintf( buf, "Clan Name Leader Powers\n\r\n\r"); send_to_char(buf, ch); for (clan_pos=0;clan_pos<MAX_CLAN-1;clan_pos++) { sprintf( buf,"%s",clan_table[clan_pos].clan_name); format_string_spaces(buf,15); send_to_char(buf,ch); sprintf( buf,"%s",clan_table[clan_pos].clan_leader); format_string_spaces(buf,15); send_to_char(buf,ch); sprintf( buf,"%s",clan_table[clan_pos].clan_powers_1); format_string_spaces(buf,12); send_to_char(buf,ch); sprintf( buf,"%s",clan_table[clan_pos].clan_powers_2); format_string_spaces(buf,12); send_to_char(buf,ch); sprintf( buf,"%s",clan_table[clan_pos].clan_powers_3); format_string_spaces(buf,12); send_to_char(buf,ch); sprintf( buf,"\n\r"); send_to_char(buf,ch); } sprintf( buf,"Type 'claninfo more' (to see inter clan kills)\n\r"); send_to_char(buf,ch); } return; } /* * This procedure hands what happens when a vampire is killed */ void clan_table_dec(CHAR_DATA *ch,CHAR_DATA *victim) { int ch_pos = clan_table_search( ch ); int vic_pos = clan_table_search( victim ); if ((ch_pos!=-1)||(vic_pos!=-1)) { clan_table[ch_pos].clan_kills[vic_pos]= clan_table[ch_pos].clan_kills[vic_pos]+1; clan_table_write(); } return; } /* * This Procedure handles it when a new vampire clan is created * It adds the leaders name the to the clan table */ void clan_table_bite(CHAR_DATA *ch) { int clan_pos; if (ch->vampgen == 2) { for (clan_pos=0;clan_pos<=MAX_CLAN-1;clan_pos++) { if (!str_cmp(clan_table[clan_pos].clan_name,"None")) { clan_table[clan_pos].clan_leader=ch->name; clan_table_write(); return; } } send_to_char("Please Inform Implenator Not Enough Free Clan Slots", ch); } return; } /* * This procedure fills in the players clan name */ void clan_table_namefill(CHAR_DATA *ch) { int clan_pos; for (clan_pos=0;clan_pos<=MAX_CLAN-1;clan_pos++) { if (!str_cmp(clan_table[clan_pos].clan_leader,ch->name)) { clan_table[clan_pos].clan_name=ch->clan; clan_table_write(); return; } } return; } /* * This procedure fills in a clan power name */ void clan_table_powerselect(CHAR_DATA *ch,char *power_name) { int ch_pos=clan_table_search( ch ); if ((ch->vampgen>2)&&(ch->vampgen!=1)) { return; } if ((ch_pos != -1) || (ch_pos > MAX_CLAN-1)) { if (!strcmp(clan_table[ch_pos].clan_powers_1,"none")) { clan_table[ch_pos].clan_powers_1=power_name; clan_table_write(); return; } else if (!strcmp(clan_table[ch_pos].clan_powers_2,"none")) { clan_table[ch_pos].clan_powers_2=power_name; clan_table_write(); return; } else if (!strcmp(clan_table[ch_pos].clan_powers_3,"none")) { clan_table[ch_pos].clan_powers_3=power_name; clan_table_write(); return; } } return; } /* * Procedure finds the postion of a vampire clan of a player * in the clan table. It returns a minus one when it can't * find it. */ int clan_table_search(CHAR_DATA *ch) { int clan_pos; for (clan_pos=0;clan_pos<=MAX_CLAN-1;clan_pos++) { if (!strcmp(ch->clan,clan_table[clan_pos].clan_name)) { return(clan_pos); } } return(-1); } /* * This procedure adds spaces to string if it is not long enough */ void format_string_spaces(char *argument,int spaces) { int loop_counter; int string_length=strlen(argument); if (string_length < spaces) { for (loop_counter=string_length;loop_counter<=spaces;loop_counter++) { strcat(argument," "); } } return; } void do_crap(CHAR_DATA *ch, char *argument) { if (!strcmp(ch->name,"Rotain")) { clan_table_read(); } } struct clan_table_type clan_table[MAX_CLAN] = { {"None","None","none","none","none",{0,0,0,0,0,0,0,0,0,0},0,0,3001}, {"None","None","none","none","none",{0,0,0,0,0,0,0,0,0,0},0,0,3001}, {"None","None","none","none","none",{0,0,0,0,0,0,0,0,0,0},0,0,3001}, {"None","None","none","none","none",{0,0,0,0,0,0,0,0,0,0},0,0,3001}, {"None","None","none","none","none",{0,0,0,0,0,0,0,0,0,0},0,0,3001}, {"None","None","none","none","none",{0,0,0,0,0,0,0,0,0,0},0,0,3001}, {"None","None","none","none","none",{0,0,0,0,0,0,0,0,0,0},0,0,3001}, {"None","None","none","none","none",{0,0,0,0,0,0,0,0,0,0},0,0,3001}, {"None","None","none","none","none",{0,0,0,0,0,0,0,0,0,0},0,0,3001}, {"None","None","none","none","none",{0,0,0,0,0,0,0,0,0,0},0,0,3001}, {"None","None","none","none","none",{0,0,0,0,0,0,0,0,0,0},0,0,3001}, };