I'm working on adapting Erwin's MERC introduction/memory system to circle and have run into a number of questions. Perhaps someone feels like taking a shot at helping me out on this? Goal of course is to create a fully-functional version of an introduction/memory system which can then be at least in part placed in the circle ftp site. (Because it was honestly quite a pain to track down even the MERC stuff!) Changes made thusfar: Added to struct player_special_data in structs.h: int *memory; /* PC's memory for intro system */ Added to db.c: (in load_char): } else if(!strcmp(tag, "Mem ")) { ch->player_specials->memory = fbgetstring(fl); (in save_char): if(ch->player_specials->memory && *ch->player_specials->memory) { strcpy(buf, ch->player_specials->memory); fbprintf(fl, "Mem : %s\n", buf); } Created a memory.c file containing the following code: /* Does ch know victim? */ bool knows_char(struct char_data *ch, struct char_data *victim) { int i; /* Characters always know NPCs and IMMORTALS and vice versa */ if (IS_NPC(ch) || IS_NPC(victim) || (GET_LEVEL(ch) >= LVL_IMMORT) || (GET_LEVEL(victim) >= LVL_IMMORT)) return TRUE; /* Simple sequential search. If the data was sorted, a binary search could be attempted */ for (i = 1; i < ch->player_specials->memory; i++) if (ch->player_specials->memory[i] == GET_IDNUM(victim)) return TRUE; return FALSE; } /* Add victim to ch's know list */ void add_know(struct char_data *ch, struct char_data *victim) { int *memory; if (knows_char(ch,victim)) return; /* Allocate space for the new array * We need 1 int for the counter, 1 for the new addition and * as many ints as the people that ch used to know * Alternatively, the libc memory manager rather than MUD's own * could be used, and with it, realloc */ /* This function had slight problems -jun99 */ memory = malloc(sizeof(int) * (ch->player_specials->memory[0] + 1)); memory[0] = ch->player_specials->memory[0] + 1; memcpy(memory+1, ch->player_specials->memory+1, (ch->player_specials->memory[0]-1) *sizeof(int)); /* This could be extended to insert in a sorted order */ memory[ch->player_specials->memory[0]] = GET_IDNUM(victim); free(ch->player_specials->memory); ch->player_specials->memory = memory; } Questions: Is malloc() the correct method of memory allocation to use in add_know? (And of course, free() afterwards?) Why do I get a warning for comparing a pointer to an integer in this line of knows_char(): for (i = 1; i < ch->player_specials->memory; i++) Did I add the int *memory to the right structure? (And is int* memory; correct in the first place?) Am I saving and loading the data to the pfile (ASCII, of course) in a manner which will allow it to function in the intended manner? -Mathew -- +---------------------------------------------------------------+ | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html | | Newbie List: http://groups.yahoo.com/group/circle-newbies/ | +---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/25/03 PDT