Code:
/*
Dragonball Z Dimension Snippet Version 1.0
Author: David Piner
Email: Dapiner@yahoo.com <---Not that long
http://newpinerorder.hypermart.net
Date: June 26, 2001
*/
Binary files old/bin/circle and new/bin/circle differ
Binary files old/src/act.informative.o and new/src/act.informative.o differ
Binary files old/src/act.item.o and new/src/act.item.o differ
Binary files old/src/act.movement.o and new/src/act.movement.o differ
Binary files old/src/act.offensive.o and new/src/act.offensive.o differ
Binary files old/src/act.other.o and new/src/act.other.o differ
Binary files old/src/act.social.o and new/src/act.social.o differ
Binary files old/src/act.wizard.o and new/src/act.wizard.o differ
Binary files old/src/asciimap.o and new/src/asciimap.o differ
Binary files old/src/castle.o and new/src/castle.o differ
diff -uNr old/src/class.c new/src/class.c
--- old/src/class.c 2013-01-29 18:11:10.000000000 -0800
+++ new/src/class.c 2013-01-29 18:52:11.013294335 -0800
@@ -1585,78 +1585,85 @@
void init_spell_levels(void)
{
/* MAGES */
- spell_level(SPELL_MAGIC_MISSILE, CLASS_MAGIC_USER, 1);
- spell_level(SPELL_DETECT_INVIS, CLASS_MAGIC_USER, 2);
- spell_level(SPELL_DETECT_MAGIC, CLASS_MAGIC_USER, 2);
- spell_level(SPELL_CHILL_TOUCH, CLASS_MAGIC_USER, 3);
- spell_level(SPELL_INFRAVISION, CLASS_MAGIC_USER, 3);
- spell_level(SPELL_INVISIBLE, CLASS_MAGIC_USER, 4);
- spell_level(SPELL_ARMOR, CLASS_MAGIC_USER, 4);
- spell_level(SPELL_BURNING_HANDS, CLASS_MAGIC_USER, 5);
- spell_level(SPELL_LOCATE_OBJECT, CLASS_MAGIC_USER, 6);
- spell_level(SPELL_STRENGTH, CLASS_MAGIC_USER, 6);
- spell_level(SPELL_SHOCKING_GRASP, CLASS_MAGIC_USER, 7);
- spell_level(SPELL_SLEEP, CLASS_MAGIC_USER, 8);
- spell_level(SPELL_LIGHTNING_BOLT, CLASS_MAGIC_USER, 9);
- spell_level(SPELL_BLINDNESS, CLASS_MAGIC_USER, 9);
- spell_level(SPELL_DETECT_POISON, CLASS_MAGIC_USER, 10);
- spell_level(SPELL_COLOR_SPRAY, CLASS_MAGIC_USER, 11);
- spell_level(SPELL_ENERGY_DRAIN, CLASS_MAGIC_USER, 13);
- spell_level(SPELL_CURSE, CLASS_MAGIC_USER, 14);
- spell_level(SPELL_POISON, CLASS_MAGIC_USER, 14);
- spell_level(SPELL_FIREBALL, CLASS_MAGIC_USER, 15);
- spell_level(SPELL_CHARM, CLASS_MAGIC_USER, 16);
- spell_level(SPELL_IDENTIFY, CLASS_MAGIC_USER, 20);
- spell_level(SPELL_FLY, CLASS_MAGIC_USER, 22);
- spell_level(SPELL_ENCHANT_WEAPON, CLASS_MAGIC_USER, 26);
- spell_level(SPELL_CLONE, CLASS_MAGIC_USER, 30);
+ spell_level_class(SPELL_MAGIC_MISSILE, CLASS_MAGIC_USER, 1);
+ spell_level_class(SPELL_DETECT_INVIS, CLASS_MAGIC_USER, 2);
+ spell_level_class(SPELL_DETECT_MAGIC, CLASS_MAGIC_USER, 2);
+ spell_level_class(SPELL_CHILL_TOUCH, CLASS_MAGIC_USER, 3);
+ spell_level_class(SPELL_INFRAVISION, CLASS_MAGIC_USER, 3);
+ spell_level_class(SPELL_INVISIBLE, CLASS_MAGIC_USER, 4);
+ spell_level_class(SPELL_ARMOR, CLASS_MAGIC_USER, 4);
+ spell_level_class(SPELL_BURNING_HANDS, CLASS_MAGIC_USER, 5);
+ spell_level_class(SPELL_LOCATE_OBJECT, CLASS_MAGIC_USER, 6);
+ spell_level_class(SPELL_STRENGTH, CLASS_MAGIC_USER, 6);
+ spell_level_class(SPELL_SHOCKING_GRASP, CLASS_MAGIC_USER, 7);
+ spell_level_class(SPELL_SLEEP, CLASS_MAGIC_USER, 8);
+ spell_level_class(SPELL_LIGHTNING_BOLT, CLASS_MAGIC_USER, 9);
+ spell_level_class(SPELL_BLINDNESS, CLASS_MAGIC_USER, 9);
+ spell_level_class(SPELL_DETECT_POISON, CLASS_MAGIC_USER, 10);
+ spell_level_class(SPELL_COLOR_SPRAY, CLASS_MAGIC_USER, 11);
+ spell_level_class(SPELL_ENERGY_DRAIN, CLASS_MAGIC_USER, 13);
+ spell_level_class(SPELL_CURSE, CLASS_MAGIC_USER, 14);
+ spell_level_class(SPELL_POISON, CLASS_MAGIC_USER, 14);
+ spell_level_class(SPELL_FIREBALL, CLASS_MAGIC_USER, 15);
+ spell_level_class(SPELL_CHARM, CLASS_MAGIC_USER, 16);
+ spell_level_class(SPELL_IDENTIFY, CLASS_MAGIC_USER, 20);
+ spell_level_class(SPELL_FLY, CLASS_MAGIC_USER, 22);
+ spell_level_class(SPELL_ENCHANT_WEAPON, CLASS_MAGIC_USER, 26);
+ spell_level_class(SPELL_CLONE, CLASS_MAGIC_USER, 30);
/* CLERICS */
- spell_level(SPELL_CURE_LIGHT, CLASS_CLERIC, 1);
- spell_level(SPELL_ARMOR, CLASS_CLERIC, 1);
- spell_level(SPELL_CREATE_FOOD, CLASS_CLERIC, 2);
- spell_level(SPELL_CREATE_WATER, CLASS_CLERIC, 2);
- spell_level(SPELL_DETECT_POISON, CLASS_CLERIC, 3);
- spell_level(SPELL_DETECT_ALIGN, CLASS_CLERIC, 4);
- spell_level(SPELL_CURE_BLIND, CLASS_CLERIC, 4);
- spell_level(SPELL_BLESS, CLASS_CLERIC, 5);
- spell_level(SPELL_DETECT_INVIS, CLASS_CLERIC, 6);
- spell_level(SPELL_BLINDNESS, CLASS_CLERIC, 6);
- spell_level(SPELL_INFRAVISION, CLASS_CLERIC, 7);
- spell_level(SPELL_PROT_FROM_EVIL, CLASS_CLERIC, 8);
- spell_level(SPELL_POISON, CLASS_CLERIC, 8);
- spell_level(SPELL_GROUP_ARMOR, CLASS_CLERIC, 9);
- spell_level(SPELL_CURE_CRITIC, CLASS_CLERIC, 9);
- spell_level(SPELL_SUMMON, CLASS_CLERIC, 10);
- spell_level(SPELL_REMOVE_POISON, CLASS_CLERIC, 10);
- spell_level(SPELL_IDENTIFY, CLASS_CLERIC, 11);
- spell_level(SPELL_WORD_OF_RECALL, CLASS_CLERIC, 12);
- spell_level(SPELL_EARTHQUAKE, CLASS_CLERIC, 12);
- spell_level(SPELL_DISPEL_EVIL, CLASS_CLERIC, 14);
- spell_level(SPELL_DISPEL_GOOD, CLASS_CLERIC, 14);
- spell_level(SPELL_SANCTUARY, CLASS_CLERIC, 15);
- spell_level(SPELL_CALL_LIGHTNING, CLASS_CLERIC, 15);
- spell_level(SPELL_HEAL, CLASS_CLERIC, 16);
- spell_level(SPELL_CONTROL_WEATHER, CLASS_CLERIC, 17);
- spell_level(SPELL_SENSE_LIFE, CLASS_CLERIC, 18);
- spell_level(SPELL_HARM, CLASS_CLERIC, 19);
- spell_level(SPELL_GROUP_HEAL, CLASS_CLERIC, 22);
- spell_level(SPELL_REMOVE_CURSE, CLASS_CLERIC, 26);
+ spell_level_class(SPELL_CURE_LIGHT, CLASS_CLERIC, 1);
+ spell_level_class(SPELL_ARMOR, CLASS_CLERIC, 1);
+ spell_level_class(SPELL_CREATE_FOOD, CLASS_CLERIC, 2);
+ spell_level_class(SPELL_CREATE_WATER, CLASS_CLERIC, 2);
+ spell_level_class(SPELL_DETECT_POISON, CLASS_CLERIC, 3);
+ spell_level_class(SPELL_DETECT_ALIGN, CLASS_CLERIC, 4);
+ spell_level_class(SPELL_CURE_BLIND, CLASS_CLERIC, 4);
+ spell_level_class(SPELL_BLESS, CLASS_CLERIC, 5);
+ spell_level_class(SPELL_DETECT_INVIS, CLASS_CLERIC, 6);
+ spell_level_class(SPELL_BLINDNESS, CLASS_CLERIC, 6);
+ spell_level_class(SPELL_INFRAVISION, CLASS_CLERIC, 7);
+ spell_level_class(SPELL_PROT_FROM_EVIL, CLASS_CLERIC, 8);
+ spell_level_class(SPELL_POISON, CLASS_CLERIC, 8);
+ spell_level_class(SPELL_GROUP_ARMOR, CLASS_CLERIC, 9);
+ spell_level_class(SPELL_CURE_CRITIC, CLASS_CLERIC, 9);
+ spell_level_class(SPELL_SUMMON, CLASS_CLERIC, 10);
+ spell_level_class(SPELL_REMOVE_POISON, CLASS_CLERIC, 10);
+ spell_level_class(SPELL_IDENTIFY, CLASS_CLERIC, 11);
+ spell_level_class(SPELL_WORD_OF_RECALL, CLASS_CLERIC, 12);
+ spell_level_class(SPELL_EARTHQUAKE, CLASS_CLERIC, 12);
+ spell_level_class(SPELL_DISPEL_EVIL, CLASS_CLERIC, 14);
+ spell_level_class(SPELL_DISPEL_GOOD, CLASS_CLERIC, 14);
+ spell_level_class(SPELL_SANCTUARY, CLASS_CLERIC, 15);
+ spell_level_class(SPELL_CALL_LIGHTNING, CLASS_CLERIC, 15);
+ spell_level_class(SPELL_HEAL, CLASS_CLERIC, 16);
+ spell_level_class(SPELL_CONTROL_WEATHER, CLASS_CLERIC, 17);
+ spell_level_class(SPELL_SENSE_LIFE, CLASS_CLERIC, 18);
+ spell_level_class(SPELL_HARM, CLASS_CLERIC, 19);
+ spell_level_class(SPELL_GROUP_HEAL, CLASS_CLERIC, 22);
+ spell_level_class(SPELL_REMOVE_CURSE, CLASS_CLERIC, 26);
/* THIEVES */
- spell_level(SKILL_SNEAK, CLASS_THIEF, 1);
- spell_level(SKILL_PICK_LOCK, CLASS_THIEF, 2);
- spell_level(SKILL_BACKSTAB, CLASS_THIEF, 3);
- spell_level(SKILL_STEAL, CLASS_THIEF, 4);
- spell_level(SKILL_HIDE, CLASS_THIEF, 5);
- spell_level(SKILL_TRACK, CLASS_THIEF, 6);
+ spell_level_class(SKILL_SNEAK, CLASS_THIEF, 1);
+ spell_level_class(SKILL_PICK_LOCK, CLASS_THIEF, 2);
+ spell_level_class(SKILL_BACKSTAB, CLASS_THIEF, 3);
+ spell_level_class(SKILL_STEAL, CLASS_THIEF, 4);
+ spell_level_class(SKILL_HIDE, CLASS_THIEF, 5);
+ spell_level_class(SKILL_TRACK, CLASS_THIEF, 6);
/* WARRIORS */
- spell_level(SKILL_KICK, CLASS_WARRIOR, 1);
- spell_level(SKILL_RESCUE, CLASS_WARRIOR, 3);
- spell_level(SKILL_TRACK, CLASS_WARRIOR, 9);
- spell_level(SKILL_BASH, CLASS_WARRIOR, 12);
- spell_level(SKILL_WHIRLWIND, CLASS_WARRIOR, 12);
+ spell_level_class(SKILL_KICK, CLASS_WARRIOR, 1);
+ spell_level_class(SKILL_RESCUE, CLASS_WARRIOR, 3);
+ spell_level_class(SKILL_TRACK, CLASS_WARRIOR, 9);
+ spell_level_class(SKILL_BASH, CLASS_WARRIOR, 12);
+ spell_level_class(SKILL_WHIRLWIND, CLASS_WARRIOR, 12);
+
+ /* WARRIORS */
+ spell_level(SKILL_KICK, RACE_HUMANOID, 1);
+ spell_level(SKILL_RESCUE, RACE_HUMANOID, 3);
+ spell_level(SKILL_TRACK, RACE_HUMANOID, 9);
+ spell_level(SKILL_BASH, RACE_HUMANOID, 12);
+ spell_level(SKILL_WHIRLWIND, RACE_HUMANOID, 12);
}
/* This is the exp given to implementors -- it must always be greater than the
Binary files old/src/class.o and new/src/class.o differ
Binary files old/src/comm.o and new/src/comm.o differ
Binary files old/src/db.o and new/src/db.o differ
Binary files old/src/dg_handler.o and new/src/dg_handler.o differ
Binary files old/src/dg_misc.o and new/src/dg_misc.o differ
Binary files old/src/dg_mobcmd.o and new/src/dg_mobcmd.o differ
Binary files old/src/dg_scripts.o and new/src/dg_scripts.o differ
Binary files old/src/dg_triggers.o and new/src/dg_triggers.o differ
Binary files old/src/dg_variables.o and new/src/dg_variables.o differ
Binary files old/src/fight.o and new/src/fight.o differ
Binary files old/src/genmob.o and new/src/genmob.o differ
Binary files old/src/graph.o and new/src/graph.o differ
Binary files old/src/handler.o and new/src/handler.o differ
Binary files old/src/interpreter.o and new/src/interpreter.o differ
Binary files old/src/limits.o and new/src/limits.o differ
Binary files old/src/magic.o and new/src/magic.o differ
Binary files old/src/medit.o and new/src/medit.o differ
Binary files old/src/mobact.o and new/src/mobact.o differ
Binary files old/src/modify.o and new/src/modify.o differ
Binary files old/src/oasis_list.o and new/src/oasis_list.o differ
Binary files old/src/objsave.o and new/src/objsave.o differ
Binary files old/src/oedit.o and new/src/oedit.o differ
Binary files old/src/races.o and new/src/races.o differ
Binary files old/src/shop.o and new/src/shop.o differ
diff -uNr old/src/spec_procs.c new/src/spec_procs.c
--- old/src/spec_procs.c 2012-04-04 16:11:23.000000000 -0700
+++ new/src/spec_procs.c 2013-01-29 18:56:29.573294339 -0800
@@ -101,6 +101,7 @@
const char *overflow = "\r\n**OVERFLOW**\r\n";
int i, sortpos;
size_t len = 0, nlen;
+ char buf[MAX_STRING_LENGTH];
char buf2[MAX_STRING_LENGTH];
len = snprintf(buf2, sizeof(buf2), "You have %d practice session%s remaining.\r\n"
@@ -115,6 +116,10 @@
break;
len += nlen;
}
+ if (GET_LEVEL(ch) >= spell_info[i].min_level_race[(int) GET_RACE(ch)]) {
+ sprintf(buf, "%-20s %s\r\n", spell_info[i].name, how_good(GET_SKILL(ch, i)));
+ strcat(buf2, buf); /* This shows the Race practices */
+ }
}
if (len >= sizeof(buf2))
strcpy(buf2 + sizeof(buf2) - strlen(overflow) - 1, overflow); /* strcpy: OK */
@@ -142,8 +147,9 @@
skill_num = find_skill_num(argument);
- if (skill_num < 1 ||
- GET_LEVEL(ch) < spell_info[skill_num].min_level[(int) GET_CLASS(ch)]) {
+ if (skill_num < 1 ||
+ (GET_LEVEL(ch) < spell_info[skill_num].min_level[(int) GET_CLASS(ch)] &&
+ GET_LEVEL(ch) < spell_info[skill_num].min_level_race[(int) GET_RACE(ch)])){
send_to_char(ch, "You do not know of that %s.\r\n", SPLSKL(ch));
return (TRUE);
}
Binary files old/src/spec_procs.o and new/src/spec_procs.o differ
diff -uNr old/src/spell_parser.c new/src/spell_parser.c
--- old/src/spell_parser.c 2012-04-04 16:11:23.000000000 -0700
+++ new/src/spell_parser.c 2013-01-29 18:55:50.721294311 -0800
@@ -520,10 +520,11 @@
send_to_char(ch, "Cast what?!?\r\n");
return;
}
- if (GET_LEVEL(ch) < SINFO.min_level[(int) GET_CLASS(ch)]) {
- send_to_char(ch, "You do not know that spell!\r\n");
+ if ((GET_LEVEL(ch) < SINFO.min_level[(int) GET_CLASS(ch)]) &&
+ (GET_LEVEL(ch) < SINFO.min_level_race[(int) GET_RACE(ch)])) {
+ send_to_char(ch, "You do not know that attack!\r\n");
return;
- }
+ }
if (GET_SKILL(ch, spellnum) == 0) {
send_to_char(ch, "You are unfamiliar with that spell.\r\n");
return;
@@ -626,7 +627,35 @@
}
}
-void spell_level(int spell, int chclass, int level)
+void spell_level(int spell, int race, int level)
+{
+ int bad = 0;
+
+ if (spell < 0 || spell > TOP_SPELL_DEFINE) {
+ log("SYSERR: attempting assign to illegal spellnum %d/%d", spell, TOP_SPELL_DEFINE);
+ return;
+ }
+
+ if (race < 0 || race >= NUM_RACES) {
+ log("SYSERR: assigning '%s' to illegal race %d/%d.", skill_name(spell),
+ race, NUM_RACES -1); /* If you have a good compiler, this should not happen*/
+ bad = 1;
+ }
+
+
+ if (level < 1 || level > LVL_IMPL) {
+ log("SYSERR: assigning '%s' to illegal level %d/%d.", skill_name(spell),
+ level, LVL_IMPL);
+ bad = 1;
+ }
+
+ if (!bad) /* Right there \ is the new race stuff to */
+ spell_info[spell].min_level_race[race] = level;
+}
+
+/* This is the old class one, if you don't use races that much
+ switch the names */
+void spell_level_class(int spell, int chclass, int level)
{
int bad = 0;
@@ -635,7 +664,7 @@
return;
}
- if (chclass < 0 || chclass >= NUM_CLASSES) {
+ if (chclass < 0 || chclass >= NUM_CLASSES) {
log("SYSERR: assigning '%s' to illegal class %d/%d.", skill_name(spell),
chclass, NUM_CLASSES - 1);
bad = 1;
@@ -647,7 +676,7 @@
bad = 1;
}
- if (!bad)
+ if (!bad)
spell_info[spell].min_level[chclass] = level;
}
@@ -658,6 +687,9 @@
{
int i;
+ for (i = 0; i < NUM_RACES; i++)
+ spell_info[spl].min_level_race[i] = LVL_IMMORT;
+
for (i = 0; i < NUM_CLASSES; i++)
spell_info[spl].min_level[i] = LVL_IMMORT;
spell_info[spl].mana_max = max_mana;
@@ -675,6 +707,9 @@
{
int i;
+ for (i = 0; i < NUM_RACES; i++)
+ spell_info[spl].min_level_race[i] = LVL_IMPL + 1;
+
for (i = 0; i < NUM_CLASSES; i++)
spell_info[spl].min_level[i] = LVL_IMPL + 1;
spell_info[spl].mana_max = 0;
Binary files old/src/spell_parser.o and new/src/spell_parser.o differ
diff -uNr old/src/spells.h new/src/spells.h
--- old/src/spells.h 2012-04-04 16:11:23.000000000 -0700
+++ new/src/spells.h 2013-01-29 18:43:21.693294378 -0800
@@ -184,6 +184,7 @@
int mana_change; /* Change in mana used by spell from lev to lev */
int min_level[NUM_CLASSES];
+ int min_level_race[NUM_RACES];
int routines;
byte violent;
int targets; /* See below for use with TAR_XXX */
@@ -265,7 +266,8 @@
struct obj_data *tobj, int spellnum);
/* other prototypes */
-void spell_level(int spell, int chclass, int level);
+void spell_level(int spell, int race, int level);
+void spell_level_class(int spell, int chclass, int level);
void init_spell_levels(void);
const char *skill_name(int num);
Binary files old/src/spells.o and new/src/spells.o differ
Binary files old/src/utils.o and new/src/utils.o differ
All I did was add this code to tbamud (3.63), and fix any errors that came up. I used the Races3.1 snippet, other race snippets may cause issues. I have also added the patch file. It was super easy to put in and fix the small errors.