<snip of implementation details/reasons> > struct trainer_data trn_skills[MAX_SPELLS + MAX_SKILLS] This should just be /* +1 because of all skills + skill number 0 */ struct trainer_data trn_skills[MAX_SKILLS+1] > Now I have the following questions, how is it I can designate to an > array a meaningful set of values based upon SPELL/SKILL numbers, when > the two differ widely from each other. They don't - see below. > struct trainer_data trn_skills[MAX_SPELLS + MAX_SKILLS] > Use: struct trainer_data trn_skills[MAX_SKILLS+1] for the reasons in the other posting. See below for another idea. > In turn designating each chosen SKILL/SPELL from a menu layout in medit, > in an assignment line similar to: > > trn_skills[(atoi(arg))] = { (atoi(arg)), (2nd input for percent), > -> cont'd. (3rd input for cost of learning)}; > ^ spell number as produced from listing. > This part is easily emulated from the rest of the medit code. See below. > Now I have the following questions, how is it I can designate to an > array a meaningful set of values based upon SPELL/SKILL numbers, when > the two differ widely from each other. They don't - see below (and yes, this time there really is something below) > How do I distinguish between > SKILL/SPELL (after) user input. The skill-list in stock circle is constructed via these principles: first skill is 0 - reserved next entries in the list (from 1 to MAX_SPELLS) are spells next entried in the list (from MAX_SPELLS+1 to MAX_SKILLS) are skills next entries in the list (MAX_SKILLS+1 to MAX_SPELL_DEFINE) cannot be learned by players, but can still be cast from scrolls, potions etc. entries above MAX_SPELL_DEFINE (up to TYPE_SUFFERING) are weapon attack types. Thus, to distinguish between skills and spells after user input, just check if the entered number is less than or equal to MAX_SPELLS. > How do I list through a medit display > feature I would create a numbered display of both skills and spells, > and accept inputted value as the number to which corresponds to that > skill and or spell. Take a look at the oedit_disp_spells_menu() function and mimic what that one does - you'll just want to make it loop all the way to MAX_SKILLS instead. > Aswell if the above even close to a slight > representation of how this can be done effectively? The entering values part is no problem - it can hardly be done more effectively. The memory consumption of the struct is something completely different. See below. > And last but not > least if so... how would I go about initializing and or maintaining > minimal memory use without having to fill up MOB values with 0. > What I mean there is, if I'm creating a new mob, will it fill it's > values all to 0, and blow memory away.. or will it not become > initialized > and or set unless specified by the builder. Sorry forgot one - > if it will not become initialized and I don't have to run through all > my mob files adding 330 0's for every mob inorder for db.c to boot up, > what means of initializing will be inorder to remember mob related > attributes (that of which they can teach) to others. This is the main disadvantage of this setup. Another way to do it would be to make the 'trainer list' a linked list, like this: struct trainer_data { int spell_num; int percent; int cost; struct trainer_data *next; } This way you only use the memory for the skills the trainer actually can train. If in doubt about how to use linked lists, you might want to have a look at the code where it handles affects. Welcor -- +---------------------------------------------------------------+ | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html | +---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/04/01 PST