#include "living.h" /* * This is the object wich tries to behave like Leo the archwizard. * The purpose is to converse with players and give them portable castles. */ string next_out; object next_dest; object give_him_castle; int delay; string short() { return "Leo the Archwizard"; } void long() { write(short() + ".\n"); } int id(string str) { return str == name; } void reset(int arg) { if (arg) return; msgout = "leaves"; msgin = "enters"; name = "leo"; cap_name = "Leo"; next_out = 0; is_npc = 1; level = 40; alignment = 1000; weapon_class = WEAPON_CLASS_OF_HANDS; max_hp = 300; hit_point = 300; experience = 100; /* Changed due to a bug. Styles. */ enable_commands(); spell_points = 300; } void castle(); void catch_tell(string str) { object from; string a; string b; string c; from = this_player(); if (!from) return; /* Not from a real player. */ if (sscanf(str, "%sello%s", a, b) == 2 || sscanf(str, "%s hi%s", a, b) == 2 || sscanf(str, "%s Hi%s", a, b) == 2){ next_out = "Welcome, " + from->query_name() + ".\n"; if (from->query_level() == 20) next_out = next_out + "Now that you are a wizard, you can have a castle of your own.\n"; delay=2; next_dest = from; set_heart_beat(1); return; } if (sscanf(str, "%sgive%scastle%s", a, b, c) == 3 || sscanf(str, "%swant%scastle%s", a, b, c) == 3) { if (from->query_level() == 20) { castle(); return; } next_out = "What ! Give a castle to you ?\n"; next_dest = from; delay=2; set_heart_beat(1); return; } if (sscanf(str, "%s gives %s to Leo.", a, b) == 2) { object ob; ob = present(b, this_object()); if (!ob || !ob->id("orc slayer")) return; next_out = "Leo says: Well done. You have fullfilled this quest.\n"; next_dest = from; set_heart_beat(1); from->set_quest("orc_slayer"); destruct(ob); return; } log_file("LEO", str + "\n"); } /* * Always let the heart_beat do the talking, to simulate delay. */ void heart_beat() { age += 1; if (attacker_ob) { spell_name = "a blazing fireball"; spell_cost = 1; spell_dam = 30; } attack(); if (random(80) == 1) say("Leo smiles.\n"); if (delay>0) { delay -= 1; return; } if (next_out) { tell_object(next_dest, next_out); next_out = 0; } if (!attacker_ob && !alt_attacker_ob) set_heart_beat(0); } void castle() { write( "You are now ready to take the step into true wizardhood. But, to do this,\n"); write( "you must select one wizard that will take responsibility for you.\n"); write( "He must also back up your claim of being a wizard, not by cheating.\n"); write("If you have no name so far, come back here again.\n"); write("Now give me the name: "); input_to("castle2"); } void castle2(string back_up_wiz) { object castle_name; string player_name; string save_name; int save_level; if (back_up_wiz == "") { write("Welcome back.\n"); return; } back_up_wiz = lower_case(back_up_wiz); save_name = name; save_level = level; if (!restore_object("players/" + back_up_wiz)) { write("There is no player with that name.\n"); return; } name = save_name; if (level < 20) { write("That player is not full wizard !\n"); level = save_level; return; } level = save_level; castle_name = clone_object("room/port_castle"); player_name = this_player()->query_name(); castle_name->set_owner(player_name); move_object(castle_name, this_player()); log_file("SPONSOR", back_up_wiz + " : " + this_player()->query_name() + " " + ctime(time()) + "\n"); tell_object(this_player(), "\n" + "Congratulations, you are now a complete god with your own\n" + "castle. But beware, you can only drop it once !\n" + "When it is dropped, it can never be moved again.\n" + "You will get more wizard command at next log in.\n"); this_player()->set_level(21); this_player()->set_title(" the wizard"); }