--- Thomas Larcombe <raucous@DIM.COM> wrote:
> Hi all.
> I am requesting some help with multi class code I am attempting
> to develop on my own. I have checked the archives and the ftp site
> and they are sadly lacking in multi class code for the later patch
> levels. I am using circlemud3.0 bpl21, major code additions are
> OasisOLC, 128 bit patch, DG_scripts. Other minor code additions that
> are pertinent (or may be) are additions of 5 classes and 24 races.
> My problem is in one section only. I am using a GET_CLASS2,
> chclass2
> route towards the multiclassing. I have differing xp tables for
> classes
> which I want to keep. I can get the values into GET_CLASS2 and all
> the
> other pertinent variables, however when I try to set the initial
> skills
> (and I would assume skills gained with levels later on) I cannot get
> the mud to accept the skills from the second class. I think that they
> are assigned via init_spell_levels in class.c and spell_level in
> spell_parser.c. If this is correct can anyone give me a bit of help
> in
> how I can get the skills from the second class to actually be given
> to
> the character?
[snip]
Okay, here's what you have to do. Never tried this myself, but I'm
very positive this will work:
***WARNING: MAILER CODE, UNTESTED***
in spell_parser.c change
void spell_level(int spell, int chclass, int level)
to:
void spell_level(int spell, int chclass, int chclass2, int level)
Further down, you'll see:
if (chclass < 0 || chclass >= NUM_CLASSES) {
log("SYSERR: assigning '%s' to illegal class %d/%d.",
skill_name(spell),
chclass, NUM_CLASSES - 1);
bad = 1;
}
Add another case like so:
if (chclass2 < 0 || chclass2 >= NUM_CLASSES) {
log("SYSERR: assigning '%s' to illegal second class %d/%d.",
skill_name(spell),
chclass2, NUM_CLASSES - 1);
bad = 1;
}
Now then, in class.c, simply add the extra class to
void init_spell_levels(void)
Like this:
spell_level(SPELL_MAGIC_MISSILE, CLASS_MAGIC_USER, CLASS_MAGE, 1);
You'll have to make a check in the guild spec proc that searches
for the player's class, maybe something like this;
spec_proc.c:
Search for:
if (GET_LEVEL(ch) >= spell_info[i].min_level[(int) GET_CLASS(ch)])
{
and change it to:
/* This is messy code, but it should give you an idea of what I mean */
if (GET_LEVEL(ch) >= spell_info[i].min_level[(int) GET_CLASS(ch)]
|| GET_LEVEL(ch) >= spell_info[i].min_level[(int) GET_CLASS2(ch)]) {
***END MAILER CODE****
You are going to run into problems like this, of course, but it should
give you an idea of how to proceed. I myself completely re-wrote the
init_spells() function to read from a file, so that I could add new
skills/spells to the game as it was running.
If you're interested in that, email me off-list and I'll send you my
code.
-FIRE
=====
**************************************
* "Mommy! Make the bad man go away!" *
**************************************
__________________________________________________
Do You Yahoo!?
HotJobs - Search Thousands of New Jobs
http://www.hotjobs.com
--
+---------------------------------------------------------------+
| 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