Exemplo n.º 1
0
void add_limb(object ob, string limb, object tp, int healing) {
     object body;
     string *all, *wieldin, minor;
     int i;

     body = new(MONSTER);
     body->move("/d/nopk/standard/void.c");
     body->set_race(ob->query_race());
     body->set_body_type(ob->query_race());
     all = body->query_limbs();
     wieldin = body->query_wielding_limbs();

     if(member_array(limb, all) == -1) { write("Not a valid limb!"); body->remove(); return; }

     i = sizeof(all);
     while(i--) {
        if(body->query_reference(all[i]) == limb) {
          if(member_array(all[i], ob->query_limbs()) == -1) {
            write("You'll need to replace the "+all[i]+" first!");
            body->remove();
            return;
            }
          minor = "YES";
          }
       }
     if(!minor) {
       if(body->query_reference(limb) != "")
         minor = body->query_reference(limb);
       else
         minor = "NO";
       }

     if(minor == "NO")
       ob->add_limb(limb, "", ob->query_max_hp()/3, 0, 0);
     else if(minor == "YES")
       ob->add_limb(limb, "", ob->query_max_hp()/4, 0, 0);
     else
       ob->add_limb(limb, minor, ob->query_max_hp()/3, 0, 0);

     if(member_array(limb, wieldin) != -1)
       ob->add_wielding_limb(limb);

     if(tp==ob) {
       write("Your "+limb+" regenerates through prayer!");
       say(tp->query_cap_name()+"'s "+limb+" regenerates through prayer!", tp);
       tp->add_skill_points("healing", random(healing/2)*2);
       tp->add_exp(random(healing/2)*2);
       }

     else {
       write("You regenerate "+ob->query_cap_name()+"'s "+limb+" through prayer!\n");
       tell_object(ob, tp->query_cap_name()+" regenerates your "+limb+" through prayer!\n");
       tell_room(environment(tp), tp->query_cap_name()+" says a prayer that regenerates "+ob->query_cap_name()+"'s "+limb+".\n", ({ tp, ob }) );
       tp->add_skill_points("healing", healing);
       tp->add_exp(healing);
       tp->add_alignment(healing);
       }