/**************************************************************************/ // obskill.cpp - skills from Oblivion /*************************************************************************** * The Dawn of Time v1.69r (c)1997-2004 Michael Garratt * * >> A number of people have contributed to the Dawn codebase, with the * * majority of code written by Michael Garratt - www.dawnoftime.org * * >> To use this source code, you must fully comply with all the licenses * * in licenses.txt... In particular, you may not remove this copyright * * notice. * *************************************************************************** * >> Original Diku Mud copyright (c)1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, & Katja Nyboe. * * >> Merc Diku Mud improvements copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * >> ROM 2.4 is copyright 1993-1995 Russ Taylor and has been brought to * * you by the ROM consortium: Russ Taylor(rtaylor@pacinfo.com), * * Gabrielle Taylor(gtaylor@pacinfo.com) & Brian Moore(rom@rom.efn.org) * * >> Oblivion 1.2 is copyright 1996 Wes Wagner * **************************************************************************/ #include "include.h" // dawn standard includes #include "magic.h" /**************************************************************************/ void do_channel(char_data *ch, char *argument) { char arg1 [MIL]; char arg2 [MIL]; char_data *victim; int roll, roll2; argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); if ( IS_OOC(ch) || IS_SET( ch->in_room->room_flags, ROOM_ANTIMAGIC )) { ch->println("You cannot focus your magic for some reason."); return; } if (get_skill(ch,gsn_channel) < 1) { ch->println("You have not the power in your soul."); return; } if ( arg1[0] == '\0' ) { ch->println("Channel how much?"); return; } if (is_number(arg1) ) { int amount; amount = atoi(arg1); if (amount<1) { ch->println("Yeah right!"); return; } if(amount>ch->hit) { ch->println("You can not channel more power then you have."); return; } if(arg2[0] == '\0' ) { ch->hit-=amount; update_pos(ch); roll=number_percent(); if(roll<get_skill(ch,gsn_channel)) { ch->mana+=amount; ch->println("You feel physically exhausted."); if(number_percent()<amount-10){ check_improve(ch,gsn_channel,true,14); } return; } else { ch->println("You feel no gain from your rigorous attempts at power."); if(number_percent()<amount-10){ check_improve(ch,gsn_channel,false,14); } return; } } else { roll=number_percent(); roll2=number_percent(); if( (victim = get_char_icworld(ch, arg2)) ==NULL ) { ch->println("You send your power to nobody."); return; } if(amount>ch->mana) { ch->println("You have not enough mana."); return; } if(roll<get_skill(ch,gsn_channel)) { if(get_skill(victim,gsn_channel)<1) { ch->println("Your target had not the skill to receive your power."); ch->mana-=amount; return; } if(roll2<get_skill(victim,gsn_channel)) { ch->mana-=amount; victim->mana+= amount*roll2/90; ch->println("You send your power to him."); victim->println("You receive magical power from an outer source."); if(number_percent()<amount-10){ check_improve(ch,gsn_channel,true,14); } if(number_percent()<amount-10){ check_improve(victim,gsn_channel,true,14); } return; } else { ch->mana-=amount; ch->println("Your power is received by the inept who can not harnass it."); if(number_percent()<amount-10){ check_improve(ch,gsn_channel,false,14); } return; } } else { ch->println("You failed to send any power."); if(number_percent()<amount-10){ check_improve(ch,gsn_channel,true,14); } return; } } } else { ch->println("You must specify how much to channel in hit points or mana."); return; } return; } /**************************************************************************/ void do_awareness(char_data *ch, char *) { if(IS_NPC(ch)) return; if (get_skill(ch,gsn_awareness) < 1) { ch->println("Your sense are not that acute."); return; } if(ch->pcdata->is_trying_aware) { ch->pcdata->is_trying_aware=false; ch->println("You let your guard down."); } else { ch->pcdata->is_trying_aware=true; ch->println("You make yourself more paranoid."); } return; } /**************************************************************************/