A
          / \      _              Play Now                         Nemesis on 
          | |     | |  _______   _        _   _______    _______   _    _______
          | |\    | | |   ____| |  \    /  | |   ____|  /   ____| | |  /   ____|
 /-------/-------------------------------------------------------------------,
O= Home <=XX|  About  News  Pics  Adventurers  Wizards  Download  Connect     >
 \-------\-------------------------------------------------------------------'
          | |   \   | |  |____  | |      | | |  |____   ___ \  \  | |  ___ \  \
          | |     \_| |_______| |_|      |_| |_______| |_______/  |_| |_______/
          \ /
           V  

Documentation Area

Document Path: /doc/LPC/inheritance


INHERITANCE

An object can inherit all variables and functions from another object.
This is done with the declaration 'inherit "file";'. This must come before
any local variables or functions.

An example, defining a monster:

inherit "obj/monster";

reset(arg) {
    ::reset(arg);
    if (arg) return;
    set_name("troll");
    set_level(9);
    set_hp(100);
    set_wc(12);
    set_al(-60);
    set_short("a troll");
    set_long("It is a nasty troll that looks very aggressive.\n");
    set_aggressive(1);
}

Here you see something like a "family tree" of the most important
inheritance in Nemesis:

  obj/wizard
      |
  obj/player         obj/monster
      |                    |
      +---------+----------+
                |
           obj/living

obj/living is inherited by obj/monster and obj/player as the base of livings.
The code there are the basics of "life". Monsters, based on obj/monster, need
different code as players or wizards. So they have there own code: obj/monster.
Players are clones of obj/players. Wizards, that are clones of obj/wizard
need a bit more code than players, so obj/wizard inherits obj/player.


INHERITING FROM MULTIPLE FILES

Consider the following code

  inherit "path/to/a";
  inherit "path/to/b";

  func() {
    return ::func();
  }

If both inherited files define func() this ::func will call func in the first
inherited file that defines the function (in this example "path/to/a").

If you want to call the function in a specific parent you can set its filename
before the ::, in this example:

  func() {
    return b::func();
  }

WARNING: Due to restrictions of the parser this syntax does not work with 
filenames containing a hyphen ("-")!

See also:


This page was generated in LPC

Imprint / Impressum