#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; short() { return "Leo the Archwizard"; } long() { write(short() + ".\n"); } id(str) { return str == name; } reset(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; } catch_tell(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, " + call_other(from, "query_name", 0) + ".\n"; if (call_other(from, "query_level", 0) == 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 (call_other(from, "query_level", 0) == 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 || !call_other(ob, "id", "orc slayer")) return; next_out = "Leo says: Well done. You have fullfilled this quest.\n"; next_dest = from; set_heart_beat(1); call_other(from, "set_quest", "orc_slayer"); destruct(ob); return; } log_file("LEO", str + "\n"); } /* * Always let the heart_beat do the talking, to simulate delay. */ 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); } 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"); } castle2(back_up_wiz) { string castle_name; string player_name; object wiz; if (back_up_wiz == "") { write("Welcome back.\n"); return; } back_up_wiz = lower_case(back_up_wiz); wiz = find_player(back_up_wiz); if (!wiz || environment(wiz) != environment() || wiz->query_level() < 21) { write("No such wizard is present here.\n"); return; } castle_name = clone_object("room/port_castle"); player_name = call_other(this_player(), "query_name", 0); call_other(castle_name, "set_owner", player_name); move_object(castle_name, this_player()); log_file("SPONSOR", back_up_wiz + " : " + call_other(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"); call_other(this_player(), "set_level", 21); call_other(this_player(), "set_title", " the wizard"); }