Ne! weel I´ve got a barbarian class in my MUD, and I think that if a barbarian is a brutal guy, he can't cast spells... so I've taked the most needed protective spells and turned them into skills... maybe you think that it's not very useful but keep on mind that a Barbarian should turn more credible with only skills, and it turn very funny to a mudder that loves the massive destruction but hates the spells... ->Jinwe<- Implementador de Nueva Thoria MUD. ps: Sorry for the grammar, I'm chilean and I'm not so good at english. XD Well, here's the way to turn spells onto skills. NOTE: Make a backup of your SRC folder!!! First: Add this code to const.c after frenzy skill (really you can add it everywhere but inside the Combat skills. Note that there the levels are set all in 42, remember to put it correctly in your MUD, set your numbers correctly (here are a lot of levels, all my classes and my remort classes...) { "resistencia", { 130, 130, 130, 130, 130, 34, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130}, { 0, 0, 0, 4, 0, 1, 5, 0, 0, 0, 5, 0, 0, 5, 0, 130, 130, 130, 130, 130, 130}, spell_null, TAR_IGNORE, POS_RESTING, &gsn_resistencia, SLOT( 0), 0, 24, "", "Vuelves a temer de la magia.", "" }, { "desesperacion", { 130, 130, 130, 130, 130, 42, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130}, { 0, 0, 0, 4, 0, 1, 5, 0, 0, 0, 5, 0, 0, 5, 0, 130, 130, 130, 130, 130, 130}, spell_null, TAR_IGNORE, POS_FIGHTING, &gsn_desesperacion, SLOT( 0), 0, 24, "", "!Desesperacion!", "" }, { "defensa", { 130, 130, 130, 130, 130, 42, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130}, { 0, 0, 0, 4, 0, 1, 5, 0, 0, 0, 5, 0, 0, 5, 0, 130, 130, 130, 130, 130, 130}, spell_null, TAR_IGNORE, POS_RESTING, &gsn_defensa, SLOT( 0), 0, 24, "", "Tu aura de defensa se ha esfumado.", "" }, { "reforzar", { 130, 130, 130, 130, 130, 42, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130}, { 0, 0, 0, 4, 0, 1, 5, 0, 0, 0, 5, 0, 0, 5, 0, 130, 130, 130, 130, 130, 130}, spell_null, TAR_IGNORE, POS_RESTING, &gsn_reforzar, SLOT( 0), 0, 24, "", "El reforzamiento que te da el escudo desaparece.", "" }, { "peticion", { 130, 130, 130, 130, 130, 42, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130}, { 0, 0, 0, 4, 0, 1, 5, 0, 0, 0, 5, 0, 0, 5, 0, 130, 130, 130, 130, 130, 130}, spell_null, TAR_IGNORE, POS_RESTING, &gsn_proteccion_magna, SLOT( 0), 0, 24, "", "La proteccion otorgada por los dioses desaparece.", "" }, { "velocidad", { 130, 130, 130, 130, 130, 42, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130}, { 0, 0, 0, 4, 0, 1, 5, 0, 0, 0, 5, 0, 0, 5, 0, 130, 130, 130, 130, 130, 130}, spell_null, TAR_IGNORE, POS_RESTING, &gsn_velocidad, SLOT( 0), 0, 24, "", "Recuperas tu velocidad normal de movimientos.", "" }, { "vigorizacion", { 130, 130, 130, 130, 130, 42, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130}, { 0, 0, 0, 4, 0, 1, 5, 0, 0, 0, 5, 0, 0, 5, 0, 130, 130, 130, 130, 130, 130}, spell_null, TAR_IGNORE, POS_RESTING, &gsn_vigorizacion, SLOT( 0), 0, 24, "", "Recuperas tu velocidad normal de movimientos.", "" }, Second: In the file db.c, before the lines /* * Locals. */ add: sh_int gsn_resistencia; sh_int gsn_desesperacion; sh_int gsn_defensa; sh_int gsn_reforzar; sh_int gsn_proteccion_magna; sh_int gsn_velocidad; sh_int gsn_vigorizacion; Third: In interp.c, before the lines /* *Inmortal commands */ add this: /* Barbarian skills */ { "resistencia", do_resistencia, POS_RESTING, 0, LOG_NORMAL, 1 }, { "desesperacion", do_desesperacion, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "defensa", do_defensa, POS_RESTING, 0, LOG_NORMAL, 1 }, { "reforzar", do_reforzar, POS_RESTING, 0, LOG_NORMAL, 1 }, { "peticion", do_proteccion_magna, POS_RESTING, 0, LOG_NORMAL, 1 }, { "velocidad", do_velocidad, POS_RESTING, 0, LOG_NORMAL, 1 }, { "vigorizacion", do_vigorizacion, POS_RESTING, 0, LOG_NORMAL, 1 }, Fourth: After all the "DECLARE's" in the file interp.h add: /* Barbarian FUN */ DECLARE_DO_FUN( do_resistencia); DECLARE_DO_FUN( do_desesperacion); DECLARE_DO_FUN( do_defensa); DECLARE_DO_FUN( do_reforzar); DECLARE_DO_FUN( do_proteccion_magna); DECLARE_DO_FUN( do_velocidad); DECLARE_DO_FUN( do_vigorizacion); Fifth: In merc.h a) Increase MAX_SKILL seven times. b) Before the lines /* * Utility macros. */ add: extern sh_int gsn_resistencia; extern sh_int gsn_desesperacion; extern sh_int gsn_defensa; extern sh_int gsn_reforzar; extern sh_int gsn_proteccion_magna; extern sh_int gsn_velocidad; extern sh_int gsn_vigorizacion; And finally: In the file fight.c, at the bottom add: void do_desesperacion (CHAR_DATA *ch) { CHAR_DATA *victim = (CHAR_DATA *) ch; int chance, total; if (ch->hit == ch->max_hit) { send_to_char("Que desesperacion!!!... Pero si tienes tu vitalidad al maximo!\n\r", ch); return; } if (ch->hit >= ch->max_hit / 2) { send_to_char("Que te desespera tanto?, si tienes heridas mejor busca un curandero.\n\r", ch); return; } if ((ch->hit >= ch->max_hit / 2) && IS_SET (ch->position, POS_FIGHTING)) { send_to_char("No creo que una situacion como esta te desespere...\n\r",ch); return; } if ((ch->hit < ch->max_hit / 2) && !IS_SET (ch->position, POS_FIGHTING)) { send_to_char("Desesperarse por eso?, mejor ve donde un curandero...\n\r",ch); return; } if ((ch->move <= 0) || (ch->mana <= 0)) { send_to_char("Pero que energias vas a quemar?, si ya no te quedan...\n\r",ch); return; } if ((chance = get_skill(ch,gsn_desesperacion)) == 0) { send_to_char("Mejor huye o pide ayuda!!\n\r",ch); return; } if (number_percent() < chance) { WAIT_STATE( ch, skill_table[gsn_desesperacion].beats ); total = ((ch->mana) + (ch->move)); victim->hit = UMIN( victim->hit + total, victim->max_hit / 2 ); victim->mana = 0; victim->move = 0; update_pos( victim ); send_to_char( "{YQuemas todas tus energias para acabar esta batalla!!!{x\n\r", victim); act( "$n quema todas sus energias utilizando su ultimo refugio!", ch, NULL, NULL, TO_ROOM ); check_improve(ch,gsn_desesperacion,TRUE,2); } else { WAIT_STATE(ch,skill_table[gsn_desesperacion].beats); act("{YMejor pide ayuda!! tu ultimo refugio ha fracasado!!{x",ch,NULL,NULL,TO_CHAR); act("{5$n intenta desesperadamente de ganar un ultimo aliento.{x",ch,NULL,NULL,TO_ROOM); check_improve(ch,gsn_desesperacion,FALSE,1); } } void do_resistencia( CHAR_DATA *ch, char *argument) { int chance; if ((chance = get_skill(ch,gsn_resistencia)) == 0) { send_to_char("Resistencia? que diablos es eso?.\n\r",ch); return; } if (is_affected(ch,gsn_resistencia)) { send_to_char("Tu cuerpo ya puede resistir la magia.\n\r",ch); return; } if (ch->mana < 50) { send_to_char("Necesitas quemar mana para mentalizarte en eso.\n\r",ch); return; } /* fighting */ if (ch->position == POS_RESTING) chance += 10; if (number_percent() < chance) { AFFECT_DATA af; WAIT_STATE(ch,PULSE_VIOLENCE); ch->mana -= 50; ch->move /= 2; send_to_char("Te mentalizas en que la magia no hace danyo.\n\r",ch); act("$n se concentra en resistir la magia.\n\r",ch,NULL,NULL,TO_ROOM); check_improve(ch,gsn_resistencia,TRUE,2); af.where = TO_AFFECTS; af.type = gsn_resistencia; af.level = ch->level; af.duration = ch->level / 3; af.modifier = 1 - ch->level / 6; af.bitvector = 0; af.location = APPLY_SAVES; affect_to_char(ch,&af); } else { WAIT_STATE(ch,skill_table[gsn_resistencia].beats); act("{YTu intento de mentalizacion no da resultados!!{x",ch,NULL,NULL,TO_CHAR); act("{5$n se mentaliza en generar resistencia, pero se desconcentra.{x",ch,NULL,NULL,TO_ROOM); check_improve(ch,gsn_resistencia,FALSE,1); } } void do_defensa( CHAR_DATA *ch, char *argument, int level) { int chance; if ((chance = get_skill(ch,gsn_defensa)) == 0) { send_to_char("Generar defensas? como se hace eso?.\n\r",ch); return; } if (is_affected(ch,gsn_defensa) || is_affected(ch,skill_lookup("armadura"))) { send_to_char("Ya tienes un aura de armadura.\n\r",ch); return; } if (ch->mana < 40) { send_to_char("Necesitas quemar mana para generar un aura.\n\r",ch); return; } if (number_percent() < chance) { AFFECT_DATA af; WAIT_STATE(ch,PULSE_VIOLENCE); ch->mana -= 40; send_to_char("Un aura de armadura te protege.\n\r",ch); act("$n genera un aura de armadura desde su interior.\n\r",ch,NULL,NULL,TO_ROOM); check_improve(ch,gsn_defensa,TRUE,2); af.where = TO_AFFECTS; af.type = gsn_defensa; af.level = ch->level; af.duration = ch->level / 2; af.modifier = -20; af.location = APPLY_AC; af.bitvector = 0; affect_to_char(ch,&af); } else { WAIT_STATE(ch,skill_table[gsn_defensa].beats); act("{YTu intento de mentalizacion no da resultados!!{x",ch,NULL,NULL,TO_CHAR); act("{5$n se mentaliza en generar resistencia, pero se desconcentra.{x",ch,NULL,NULL,TO_ROOM); check_improve(ch,gsn_defensa,FALSE,1); } } void do_reforzar( CHAR_DATA *ch, char *argument, int level) { int chance; if ((chance = get_skill(ch,gsn_reforzar)) == 0) { send_to_char("Tratas de generar un escudo, pero no te concentras.\n\r",ch); return; } if (is_affected(ch,gsn_reforzar) || is_affected(ch,skill_lookup("escudo"))) { send_to_char("Ya tienes un escudo de energia.\n\r",ch); return; } if (ch->mana < 60) { send_to_char("Necesitas quemar mana para generar escudo.\n\r",ch); return; } if (number_percent() < chance) { AFFECT_DATA af; WAIT_STATE(ch,PULSE_VIOLENCE); ch->mana -= 60; send_to_char("Un escudo de energia te envuelve para reforzarte.\n\r",ch); act("$n genera un escudo con su ira.\n\r",ch,NULL,NULL,TO_ROOM); check_improve(ch,gsn_reforzar,TRUE,2); af.where = TO_AFFECTS; af.type = gsn_reforzar; af.level = ch->level; af.duration = ch->level / 2; af.modifier = -20; af.location = APPLY_SAVES; af.bitvector = 0; affect_to_char(ch,&af); } else { WAIT_STATE(ch,skill_table[gsn_reforzar].beats); act("{YNo consigues generar un escudo reforzador!!{x",ch,NULL,NULL,TO_CHAR); act("{5$n intenta generar un escudo pero no lo consigue.{x",ch,NULL,NULL,TO_ROOM); check_improve(ch,gsn_reforzar,FALSE,1); } } void do_proteccion_magna( CHAR_DATA *ch, char *argument, int level) { int chance; if ((chance = get_skill(ch,gsn_proteccion_magna)) == 0) { send_to_char("Clamas a los dioses por proteccion, al parecer, no te escuchan.\n\r",ch); return; } if (is_affected(ch,gsn_proteccion_magna) || IS_AFFECTED(ch, AFF_SANCTUARY)) { send_to_char("Los dioses ya te han otorgado un aura blanca.\n\r",ch); return; } if (ch->mana < 100) { send_to_char("Necesitas quemar mana para que tus dioses te escuchen.\n\r",ch); return; } if (number_percent() < chance) { AFFECT_DATA af; WAIT_STATE(ch,PULSE_VIOLENCE); ch->mana -= 100; send_to_char("Los dioses te otorgan un aura blanca.\n\r",ch); act("$n recibe un aura blanca como regalo de sus dioses.\n\r",ch,NULL,NULL,TO_ROOM); check_improve(ch,gsn_proteccion_magna,TRUE,2); af.where = TO_AFFECTS; af.type = gsn_proteccion_magna; af.level = ch->level; af.duration = ch->level / 10; af.location = APPLY_NONE; af.modifier = 0; af.bitvector = AFF_SANCTUARY; affect_to_char(ch,&af); } else { WAIT_STATE(ch,skill_table[gsn_proteccion_magna].beats); act("{YClamas a tus dioses por una magna proteccion pero nada ocurre{x",ch,NULL,NULL,TO_CHAR); act("{5$n pide a sus dioses por algo, pero nada ocurre.{x",ch,NULL,NULL,TO_ROOM); check_improve(ch,gsn_proteccion_magna,FALSE,1); } } void do_velocidad( CHAR_DATA *ch, char *argument, int level) { int chance; if ((chance = get_skill(ch,gsn_velocidad)) == 0) { send_to_char("No sabes como puedes andar a toda velocidad sin cansarte.\n\r",ch); return; } if (is_affected(ch,gsn_velocidad) || is_affected(ch,skill_lookup("prisa"))) { send_to_char("Ya andas a la maxima velocidad que alcanzas.\n\r",ch); return; } if (ch->mana < 60) { send_to_char("Necesitas quemar mana para obtener velocidad.\n\r",ch); return; } if (number_percent() < chance) { AFFECT_DATA af; WAIT_STATE(ch,PULSE_VIOLENCE); ch->mana -= 60; send_to_char("Concentras tus musculos y te mantienes a toda velocidad.\n\r",ch); act("$n comienza a moverse a toda velocidad.\n\r",ch,NULL,NULL,TO_ROOM); check_improve(ch,gsn_velocidad,TRUE,2); af.where = TO_AFFECTS; af.type = gsn_velocidad; af.level = ch->level; af.duration = ch->level/4; af.location = APPLY_DEX; af.modifier = 1 + (ch->level >= 18) + (ch->level >= 25) + (ch->level >= 32); af.bitvector = AFF_HASTE; affect_to_char( ch, &af ); } else { WAIT_STATE(ch,skill_table[gsn_velocidad].beats); act("{YComienzas a moverte a toda velocidad, pero te cansa y lo dejas...{x",ch,NULL,NULL,TO_CHAR); act("{5$n se mueve como un rayo, pero se cansa y mejor lo deja.{x",ch,NULL,NULL,TO_ROOM); check_improve(ch,gsn_velocidad,FALSE,1); } } void do_vigorizacion( CHAR_DATA *ch, char *argument, int level) { int chance; if ((chance = get_skill(ch,gsn_vigorizacion)) == 0) { send_to_char("Como incrementar tus musculos si no tienes ni idea?.\n\r",ch); return; } if (is_affected(ch,gsn_vigorizacion) || is_affected(ch,skill_lookup("vigor"))) { send_to_char("tu piel se romperia al no poder contener tus musculos.\n\r",ch); return; } if (ch->mana < 60) { send_to_char("Necesitas quemar mana para incrementar tus musculos.\n\r",ch); return; } if (number_percent() < chance) { AFFECT_DATA af; WAIT_STATE(ch,PULSE_VIOLENCE); ch->mana -= 60; send_to_char("Te esfuerzas e incrementas tus musculos con energia llena de furia.\n\r",ch); act("$n incrementa sus musculos con energia renovada.\n\r",ch,NULL,NULL,TO_ROOM); check_improve(ch,gsn_vigorizacion,TRUE,2); af.where = TO_AFFECTS; af.type = gsn_vigorizacion; af.level = ch->level; af.duration = ch->level/4; af.location = APPLY_STR; af.modifier = 1 + (ch->level >= 18) + (ch->level >= 25) + (ch->level >= 32); af.bitvector = 0; affect_to_char( ch, &af ); } else { WAIT_STATE(ch,skill_table[gsn_vigorizacion].beats); act("{YIncrementas tus musculos, pero te cansa, mejor lo dejas.{x",ch,NULL,NULL,TO_CHAR); act("{5$n incrementa sus musculos, pero se cansa y mejor lo deja.{x",ch,NULL,NULL,TO_ROOM); check_improve(ch,gsn_vigorizacion,FALSE,1); } } Well, now the explication... "Desesperacion" is a last resort skill, if you are fitghting and you got the half of your max_hp you can burn all your mana and all your movement to recover your hp (you will recover the hp by mana + move) * NOTE* Using this skill you can recover like max, the half of your total hp. "Resistencia" is the same thing that a "force shield" is, but it adds aditional saves to the barbarian, I think that if the barbarian can't cast spells, maybe he can have an extra proteccion against magic... "Reforzar" is the equal of "Force Shield"... no more explanation. "Proteccion Magna" is the equivalent of "Sanctuary"... "Velocidad" is the same thing that "Haste" is. "Vigorizacion" is like the "Giant Strenght" spell. Note that you can change the skills names as you like, and obvious, the explanations of the skills in the ACT or SEND_TO_CHAR... So that's all folks... this is my first snippet, so please be gentle to notify me if you like it or not, any bug or comment I'll be thnx to read it in my mail... well, I've got nothing else to say so good bye... ->Jinwe<- ...and ENJOY YOUR DESTRUCTORS BARBARIANS! If anyone wants more snippets 'bout the barbarians only send me a mail. >:D.