mud/lib/lib/teach.c
2020-09-06 05:43:07 -07:00

77 lines
2.4 KiB
C

#include <lib.h>
private static mapping Teaching = ([]);
private static int OfferExpires = 60;
int direct_teach_str_to_liv(){ return 1;}
int direct_teach_liv_to_str(){ return 1;}
varargs int CanTeach(object whom, string what){
if(whom == this_object()){
write("You are not a member of the autodidact guild.");
return 0;
}
if(member_array(what, keys(this_object()->GetSpellBook())) != -1){
int magpoint = this_object()->GetMagicPoints();
int maxmagpoint = this_object()->GetMaxMagicPoints();
if(magpoint < maxmagpoint){
write("You must have your full mana to teach magic.");
return 0;
}
return 1;
}
return 0;
}
int eventOfferTeaching(object who, string what){
if(!CanTeach(who, what)){
write("You are unable to teach that.");
return 0;
}
//if(!Teaching[who] || !Teaching[who][0] || Teaching[who][0] != what){
tell_player(who,this_object()->GetName()+
" offers to teach you "+what+".");
tell_player(this_object(),"You offer to teach "+what+
" to "+who->GetName()+".");
//}
Teaching[who] = ({ what, time() });
return 1;
}
int eventTeach(object who, string what){
int magpoint = this_object()->GetMagicPoints();
if(!CanTeach(who, what)){
write("They can't teach that.");
return 0;
}
if(!Teaching[who]){
write("They're not interested in teaching you anything.");
return 0;
}
if(time() - Teaching[who][1] > OfferExpires){
write("It's too late. Their offer to teach you expired.");
map_delete(Teaching,who);
return 0;
}
if( !who->eventLearnSpell(what) ){
write("You are not prepared for that spell!");
return 0;
}
who->eventPrint(this_object()->GetName() + " touches your forehead and gives "
"you knowledge of " + what + ".");
environment()->eventPrint(this_object()->GetName() + " touches " +
possessive_noun(who) +
" forehead and gives " +
objective(who) + " knowledge of " +
what + ".", ({ who, this_object() }));
this_object()->eventPrint("You touch "+possessive_noun(who) +
" forehead and give " + objective(who) + " knowledge of " +
what + ".");
if(!creatorp(this_object())){
this_object()->AddMagicPoints(-magpoint);
}
map_delete(Teaching,who);
return 1;
}