ds2.9a12/bin/
ds2.9a12/extra/
ds2.9a12/extra/crat/
ds2.9a12/extra/creremote/
ds2.9a12/extra/mingw/
ds2.9a12/extra/wolfpaw/
ds2.9a12/fluffos-2.14-ds13/
ds2.9a12/fluffos-2.14-ds13/Win32/
ds2.9a12/fluffos-2.14-ds13/compat/
ds2.9a12/fluffos-2.14-ds13/compat/simuls/
ds2.9a12/fluffos-2.14-ds13/include/
ds2.9a12/fluffos-2.14-ds13/testsuite/
ds2.9a12/fluffos-2.14-ds13/testsuite/clone/
ds2.9a12/fluffos-2.14-ds13/testsuite/command/
ds2.9a12/fluffos-2.14-ds13/testsuite/data/
ds2.9a12/fluffos-2.14-ds13/testsuite/etc/
ds2.9a12/fluffos-2.14-ds13/testsuite/include/
ds2.9a12/fluffos-2.14-ds13/testsuite/inherit/
ds2.9a12/fluffos-2.14-ds13/testsuite/inherit/master/
ds2.9a12/fluffos-2.14-ds13/testsuite/log/
ds2.9a12/fluffos-2.14-ds13/testsuite/single/
ds2.9a12/fluffos-2.14-ds13/testsuite/single/tests/compiler/
ds2.9a12/fluffos-2.14-ds13/testsuite/single/tests/efuns/
ds2.9a12/fluffos-2.14-ds13/testsuite/single/tests/operators/
ds2.9a12/fluffos-2.14-ds13/testsuite/u/
ds2.9a12/lib/cmds/admins/
ds2.9a12/lib/cmds/common/
ds2.9a12/lib/cmds/creators/include/
ds2.9a12/lib/daemon/services/
ds2.9a12/lib/daemon/tmp/
ds2.9a12/lib/doc/
ds2.9a12/lib/doc/bguide/
ds2.9a12/lib/doc/efun/all/
ds2.9a12/lib/doc/efun/arrays/
ds2.9a12/lib/doc/efun/buffers/
ds2.9a12/lib/doc/efun/compile/
ds2.9a12/lib/doc/efun/floats/
ds2.9a12/lib/doc/efun/functions/
ds2.9a12/lib/doc/efun/general/
ds2.9a12/lib/doc/efun/mixed/
ds2.9a12/lib/doc/efun/numbers/
ds2.9a12/lib/doc/efun/parsing/
ds2.9a12/lib/doc/hbook/
ds2.9a12/lib/doc/help/classes/
ds2.9a12/lib/doc/help/races/
ds2.9a12/lib/doc/lfun/
ds2.9a12/lib/doc/lfun/all/
ds2.9a12/lib/doc/lfun/lib/abilities/
ds2.9a12/lib/doc/lfun/lib/armor/
ds2.9a12/lib/doc/lfun/lib/bank/
ds2.9a12/lib/doc/lfun/lib/bot/
ds2.9a12/lib/doc/lfun/lib/clay/
ds2.9a12/lib/doc/lfun/lib/clean/
ds2.9a12/lib/doc/lfun/lib/clerk/
ds2.9a12/lib/doc/lfun/lib/client/
ds2.9a12/lib/doc/lfun/lib/combat/
ds2.9a12/lib/doc/lfun/lib/connect/
ds2.9a12/lib/doc/lfun/lib/container/
ds2.9a12/lib/doc/lfun/lib/corpse/
ds2.9a12/lib/doc/lfun/lib/creator/
ds2.9a12/lib/doc/lfun/lib/daemon/
ds2.9a12/lib/doc/lfun/lib/damage/
ds2.9a12/lib/doc/lfun/lib/deterioration/
ds2.9a12/lib/doc/lfun/lib/donate/
ds2.9a12/lib/doc/lfun/lib/door/
ds2.9a12/lib/doc/lfun/lib/equip/
ds2.9a12/lib/doc/lfun/lib/file/
ds2.9a12/lib/doc/lfun/lib/fish/
ds2.9a12/lib/doc/lfun/lib/fishing/
ds2.9a12/lib/doc/lfun/lib/flashlight/
ds2.9a12/lib/doc/lfun/lib/follow/
ds2.9a12/lib/doc/lfun/lib/ftp_client/
ds2.9a12/lib/doc/lfun/lib/ftp_data_connection/
ds2.9a12/lib/doc/lfun/lib/fuel/
ds2.9a12/lib/doc/lfun/lib/furnace/
ds2.9a12/lib/doc/lfun/lib/genetics/
ds2.9a12/lib/doc/lfun/lib/holder/
ds2.9a12/lib/doc/lfun/lib/id/
ds2.9a12/lib/doc/lfun/lib/interactive/
ds2.9a12/lib/doc/lfun/lib/lamp/
ds2.9a12/lib/doc/lfun/lib/leader/
ds2.9a12/lib/doc/lfun/lib/light/
ds2.9a12/lib/doc/lfun/lib/limb/
ds2.9a12/lib/doc/lfun/lib/living/
ds2.9a12/lib/doc/lfun/lib/load/
ds2.9a12/lib/doc/lfun/lib/look/
ds2.9a12/lib/doc/lfun/lib/manipulate/
ds2.9a12/lib/doc/lfun/lib/meal/
ds2.9a12/lib/doc/lfun/lib/messages/
ds2.9a12/lib/doc/lfun/lib/player/
ds2.9a12/lib/doc/lfun/lib/poison/
ds2.9a12/lib/doc/lfun/lib/position/
ds2.9a12/lib/doc/lfun/lib/post_office/
ds2.9a12/lib/doc/lfun/lib/potion/
ds2.9a12/lib/doc/lfun/lib/room/
ds2.9a12/lib/doc/lfun/lib/server/
ds2.9a12/lib/doc/lfun/lib/spell/
ds2.9a12/lib/doc/lfun/lib/torch/
ds2.9a12/lib/doc/lfun/lib/vendor/
ds2.9a12/lib/doc/lfun/lib/virt_sky/
ds2.9a12/lib/doc/lfun/lib/weapon/
ds2.9a12/lib/doc/lfun/lib/worn_storage/
ds2.9a12/lib/doc/lpc/basic/
ds2.9a12/lib/doc/lpc/concepts/
ds2.9a12/lib/doc/lpc/constructs/
ds2.9a12/lib/doc/lpc/etc/
ds2.9a12/lib/doc/lpc/intermediate/
ds2.9a12/lib/doc/lpc/types/
ds2.9a12/lib/doc/misc/
ds2.9a12/lib/doc/old/
ds2.9a12/lib/domains/
ds2.9a12/lib/domains/Praxis/adm/
ds2.9a12/lib/domains/Praxis/attic/
ds2.9a12/lib/domains/Praxis/cemetery/mon/
ds2.9a12/lib/domains/Praxis/data/
ds2.9a12/lib/domains/Praxis/death/
ds2.9a12/lib/domains/Praxis/mountains/
ds2.9a12/lib/domains/Praxis/obj/armour/
ds2.9a12/lib/domains/Praxis/obj/magic/
ds2.9a12/lib/domains/Praxis/obj/weapon/
ds2.9a12/lib/domains/Praxis/orc_valley/
ds2.9a12/lib/domains/Ylsrim/
ds2.9a12/lib/domains/Ylsrim/adm/
ds2.9a12/lib/domains/Ylsrim/armor/
ds2.9a12/lib/domains/Ylsrim/broken/
ds2.9a12/lib/domains/Ylsrim/fish/
ds2.9a12/lib/domains/Ylsrim/meal/
ds2.9a12/lib/domains/Ylsrim/npc/
ds2.9a12/lib/domains/Ylsrim/obj/
ds2.9a12/lib/domains/Ylsrim/virtual/
ds2.9a12/lib/domains/Ylsrim/weapon/
ds2.9a12/lib/domains/campus/adm/
ds2.9a12/lib/domains/campus/etc/
ds2.9a12/lib/domains/campus/meals/
ds2.9a12/lib/domains/campus/save/
ds2.9a12/lib/domains/campus/txt/ai/charles/
ds2.9a12/lib/domains/campus/txt/ai/charles/bak2/
ds2.9a12/lib/domains/campus/txt/ai/charles/bak2/bak1/
ds2.9a12/lib/domains/campus/txt/ai/charly/
ds2.9a12/lib/domains/campus/txt/ai/charly/bak/
ds2.9a12/lib/domains/campus/txt/jenny/
ds2.9a12/lib/domains/cave/doors/
ds2.9a12/lib/domains/cave/etc/
ds2.9a12/lib/domains/cave/meals/
ds2.9a12/lib/domains/cave/weap/
ds2.9a12/lib/domains/default/creator/
ds2.9a12/lib/domains/default/doors/
ds2.9a12/lib/domains/default/etc/
ds2.9a12/lib/domains/default/vehicles/
ds2.9a12/lib/domains/default/virtual/
ds2.9a12/lib/domains/default/weap/
ds2.9a12/lib/domains/town/txt/shame/
ds2.9a12/lib/domains/town/virtual/
ds2.9a12/lib/domains/town/virtual/bottom/
ds2.9a12/lib/domains/town/virtual/space/
ds2.9a12/lib/estates/
ds2.9a12/lib/ftp/
ds2.9a12/lib/lib/comp/
ds2.9a12/lib/lib/daemons/
ds2.9a12/lib/lib/daemons/include/
ds2.9a12/lib/lib/lvs/
ds2.9a12/lib/lib/user/
ds2.9a12/lib/lib/virtual/
ds2.9a12/lib/log/
ds2.9a12/lib/log/adm/
ds2.9a12/lib/log/archive/
ds2.9a12/lib/log/chan/
ds2.9a12/lib/log/errors/
ds2.9a12/lib/log/law/adm/
ds2.9a12/lib/log/law/email/
ds2.9a12/lib/log/law/names/
ds2.9a12/lib/log/law/sites-misc/
ds2.9a12/lib/log/law/sites-register/
ds2.9a12/lib/log/law/sites-tempban/
ds2.9a12/lib/log/law/sites-watch/
ds2.9a12/lib/log/open/
ds2.9a12/lib/log/reports/
ds2.9a12/lib/log/router/
ds2.9a12/lib/log/secure/
ds2.9a12/lib/log/watch/
ds2.9a12/lib/obj/book_source/
ds2.9a12/lib/obj/include/
ds2.9a12/lib/powers/prayers/
ds2.9a12/lib/powers/spells/
ds2.9a12/lib/realms/template/adm/
ds2.9a12/lib/realms/template/area/armor/
ds2.9a12/lib/realms/template/area/npc/
ds2.9a12/lib/realms/template/area/obj/
ds2.9a12/lib/realms/template/area/room/
ds2.9a12/lib/realms/template/area/weap/
ds2.9a12/lib/realms/template/bak/
ds2.9a12/lib/realms/template/cmds/
ds2.9a12/lib/save/kills/o/
ds2.9a12/lib/secure/cfg/classes/
ds2.9a12/lib/secure/cmds/builders/
ds2.9a12/lib/secure/cmds/creators/include/
ds2.9a12/lib/secure/cmds/players/
ds2.9a12/lib/secure/cmds/players/include/
ds2.9a12/lib/secure/daemon/imc2server/
ds2.9a12/lib/secure/daemon/include/
ds2.9a12/lib/secure/lib/
ds2.9a12/lib/secure/lib/include/
ds2.9a12/lib/secure/lib/net/include/
ds2.9a12/lib/secure/lib/std/
ds2.9a12/lib/secure/log/adm/
ds2.9a12/lib/secure/log/bak/
ds2.9a12/lib/secure/log/intermud/
ds2.9a12/lib/secure/log/network/
ds2.9a12/lib/secure/modules/
ds2.9a12/lib/secure/npc/
ds2.9a12/lib/secure/obj/include/
ds2.9a12/lib/secure/room/
ds2.9a12/lib/secure/save/
ds2.9a12/lib/secure/save/backup/
ds2.9a12/lib/secure/save/boards/
ds2.9a12/lib/secure/tmp/
ds2.9a12/lib/secure/upgrades/files/
ds2.9a12/lib/secure/verbs/creators/
ds2.9a12/lib/std/board/
ds2.9a12/lib/std/lib/
ds2.9a12/lib/tmp/
ds2.9a12/lib/verbs/admins/include/
ds2.9a12/lib/verbs/builders/
ds2.9a12/lib/verbs/common/
ds2.9a12/lib/verbs/common/include/
ds2.9a12/lib/verbs/creators/
ds2.9a12/lib/verbs/creators/include/
ds2.9a12/lib/verbs/rooms/
ds2.9a12/lib/verbs/rooms/include/
ds2.9a12/lib/www/client/
ds2.9a12/lib/www/errors/
ds2.9a12/lib/www/images/
ds2.9a12/lib/www/lpmuds/downloads_files/
ds2.9a12/lib/www/lpmuds/intermud_files/
ds2.9a12/lib/www/lpmuds/links_files/
ds2.9a12/win32/
#include <lib.h>

inherit LIB_NPC;

void create() {
    ::create();
    SetKeyName("mora");
    SetId( ({ "mora", "medium", "fortune teller", "teller" }) );
    SetShort( "Mora, the teller of fortunes");
    SetLong(
      "She is spiritually on a plane beyond this reality.  "
      "A medium of the highest caliber, she tells the "
      "fortunes of those who come and seek her words.  "
      "It is 60 gold to \"horoscope\" yourself.  "
      "It is 100 gold for others."
    );
    SetRace( "gnome");
    SetGender("female");
    SetRace("human");
    SetHealthPoints(950);
    SetLanguage( "nibelungen",100  );
    SetMaxHealthPoints(950);
    SetMagicPoints(900);
    SetMaxMagicPoints(900);
    SetLevel(17);
    SetStat("wisdom", 40);
    SetSkill("magic attack", 100);
    SetAction(12,
      ({
        "Come! Let me tell you your horoscope!",
        "Only 60 gold to know your horoscope.",
        "I am in touch with alternate realities.",
        "I can tell you the horoscope of your enemies.",
        "I am always spiritually well."
      })
    );
    SetMorality(-5);
    AddCurrency("gold", random(60));
}

void init() {
    ::init();
    add_action("horoscope", "horoscope");
}

int horoscope(string str) {
    object ob;
    string msg;
    int mag, phy, cost;

    if(!str || str == "me" || str == "myself") ob = this_player();
    else ob = find_player(lower_case(str));
    if(!ob) {
        notify_fail("I cannot find "+capitalize(str)+".\n");
        return 0;
    }
    if(ob == this_player()) cost = 60;
    else cost = 110;
    if((int)this_player()->query_money("gold") < cost) {
        notify_fail("You do not have enough gold.\n");
        return 0;
    }
    mag = (int)ob->query_spiritual();
    phy = (int)ob->query_physical();
    this_player()->AddCurrency("gold", -cost);
    write("You pay "+cost+" gold for Mora to give you a reading for today.");
    say(this_player()->query_cap_name()+" pays Mora for a horoscope reading.", this_player());
    switch(mag) {
    case -5:
        if(ob == this_player()) msg = "Spiritual reality is disconnected from your soul.";
        else msg = "Spiritual reality is disconnected from "+ob->query_possessive()+" soul.";
        break;
    case -4:
        if(ob == this_player()) msg = "You are feeling out of touch with spiritual reality.";
        else msg = capitalize(str)+" is feeling out of touch with spiritual reality.";
        break;
    case -3:
        if(ob == this_player()) msg = "Your soul is particularly weak today.";
        else msg = capitalize(str)+"'s soul is particularly weak today.";
        break;
    case -2:
        if(ob == this_player()) msg = "You are best advised not to rely on spiritual matters today.";
        else msg = capitalize(str)+" is best advised not to rely on spiritual matters today.";
        break;
    case -1:
        if(ob == this_player()) msg = "You will need to concentrate to excel spiritually.";
        else msg = capitalize(str)+" will need to concentrate to excel spiritually.";
        break;
    case 0:
        if(ob == this_player()) msg = "Today is an average day for you on the spiritual planes.";
        else msg = "Today is an average day for "+capitalize(str)+" on the spiritual planes.";
        break;
    case 1:
        if(ob == this_player()) msg = "You will need to do little to excel spiritually.";
        else msg = capitalize(str)+" will need to do a little to excel spiritually.";
        break;
    case 2:
        if(ob == this_player()) msg = "You will do well with your magic today.";
        else msg = capitalize(str)+" will do well with "+ob->query_possessive()+" magic today.";
        break;
    case 3:
        if(ob == this_player()) msg = "Your spiritual aura shines very strongly today.";
        else msg = capitalize(str)+"'s spiritual aura shines very strongly today.";
        break;
    case 4:
        if(ob == this_player()) msg = "You have an unusually radiant spiritual aura today.";
        else msg = capitalize(str)+" have and unusually radiant spiritual aura today.";
        break;
    case 5:
        if(ob == this_player()) msg = "No one should get in the way of your magic today.";
        else msg = "No one should get in the way of "+ob->query_possessive()+" magic today.";
        break;
    }
    write(""+msg);
    switch(phy) {
    case -5:
        if(ob == this_player()) msg = "You really should stay in bed today.";
        else msg = capitalize(str)+" really should stay in bed today.";
        break;
    case -4:
        if(ob == this_player()) msg = "You are feeling quite pathetic today.";
        else msg = capitalize(str)+" is feeling quite pathetic today.";
        break;
    case -3:
        if(ob == this_player()) msg = "It is not the best of days for your body.";
        else msg = "It is not the best of days for "+capitalize(str)+"'s body.";
        break;
    case -2:
        if(ob == this_player()) msg = "You are going to have a bad day with your body.";
        else msg = capitalize(str)+" is going to have a bad day with "+ob->query_possessive()+" body.";
        break;
    case -1:
        if(ob == this_player()) msg = "Your body is a bit under the weather today.";
        else msg = capitalize(str)+"'s body is a bit under the weather today.";
        break;
    case 0:
        if(ob == this_player()) msg = "You will do fine today.";
        else msg = capitalize(str)+" will be doing fine today.";
        break;
    case 1:
        if(ob == this_player()) msg = "You will do well today.";
        else msg = capitalize(str)+" will do well today.";
        break;
    case 2:
        if(ob == this_player()) msg = "Your physical strength is somewhat high.";
        else msg = capitalize(str)+"'s physical strength is somewhat high.";
        break;
    case 3:
        if(ob == this_player()) msg = "Today is a very robust day for you physically.";
        else msg = "Today is a very robust day for "+capitalize(str)+" physically.";
        break;
    case 4:
        if(ob == this_player()) msg = "You are in superior physical condition!";
        else msg = capitalize(str)+" is in superior physical condition!";
        break;
    case 5:
        if(ob == this_player()) msg = "Physically, you are in a rare top form.";
        else msg = "Physically, "+capitalize(str)+" is in a rare top form.";
        break;
    }
    write(""+msg);
    return 1;
}