Browsed by
Tag: dead souls mudlib

Mod: Wizzes can’t be killed

Mod: Wizzes can’t be killed

Add this block of code to the beginning of varargs int eventDie(mixed agent) in /lib/player.c.


int mhp, msp, mmp;
string *limb_arr = ({});

if(!agent) agent = previous_object();
if(!agent) agent = this_object();

if(wizardp(agent)) {
mhp = agent->GetMaxHealthPoints();
msp = agent->GetMaxStaminaPoints();
mmp = agent->GetMaxMagicPoints();
agent->AddHP(mhp);
agent->AddStaminaPoints(msp);
agent->AddMagicPoints(mmp);
if(agent->GetPoison() > 0) agent->AddPoison(0 - agent->GetPoison());
limb_arr = agent->GetLimbs();
foreach(string limb in limb_arr) {
agent->HealLimb(limb);
}
return 1;
}

This code is formed such that when a wizard should die, they are instead healed and restored to full health, stamina, and magic.

This code falls under the Dead Souls license.

No Zapping Arch Wizzes

No Zapping Arch Wizzes

Here’s how to prevent zapping of arch wizards:

In /verbs/creators/zap.c, change:


if(!living(ob)) {
write("You can only zap living things.");
return 1;
}
else name = ob->GetName();

to


if(!living(ob)) {
write("You can only zap living things.");
return 1;
} else if (archp(ob)) {
write("You can't zap an Arch!");
return 1;
} else name = ob->GetName();

Dead Souls 2.3a1 Wordy Exit Code

Dead Souls 2.3a1 Wordy Exit Code

This is my update to the /lib/exits.c, /lib/std/room.c and /lib/interactive.c to allow for worded exits in verbose mode, and the usual short exits in brief mode.

Examples:

  • Verbose:
    • Creators’ Hall
    • Immortals come here to communicate with each other about the world they are building. The Adventurer’s Guild is north. The Arch Room is south. To visit the Dead Souls test and development mud, go west. The test lab facilities are east.
    • There are five obvious exits: west, north, east, south, and up.
  • Brief:
    • Creators’ Hall [n, s, e, w, u]

This code includes my HideExit Modifications:nod:

As usual, please see the license at Dead Souls.net, this code is not GPL.

Update: Moved one block of code in GenerateVerboseExits() in room.c to allow you to HideExit() enters. (Example: HideExit(“enter office”); )

Update 2: Fixed a problem with grammar by adding (Example: “desc” : “gate leading”) to the SetSide Mapping. If there is no “desc”, it will show “door” in the verbose exits. This was needed to be able to colorize the door based on its open/closed status. Added a modified door.c and door.h for this purpose.

Dead Souls HideExit code

Dead Souls HideExit code

This is my update to the /lib/exits.c and /lib/std/room.c to make obvious exits easier to use and worth with. It adds the following:

  • a sub-mapping to the Exits mapping in exits.c to include ([ “obv” : 0 or 1 ]).
  • HideExit(dir), which hides the given exit (and should be used in your room code to hide exits)
  • GetObvMap(), which returns a mapping of direction and hidden [Example where south is hidden by HideExit(“south”): ([ “west” : 1, “north” : 1, “east” : 1, “south” : 0 ]) ].

Room Exits default to Obvious, so there is no need to set them. The old SetObviousExits and its related functions are still included and valid for compatibility purposes.

I will be releasing another version of this code for use with muds who want more than the [n, s, e, w, u] exit list.

:thumbsup:

Insert this code into /lib/exits.c:

//Use this to get whether or not an exit is obvious.
int GetExitObv( string str ) {
    if( !Exits[str] ) return 0;
    else return Exits[str]["obv"];
}

//Use this or GetFullExitData to get a mapping of obvious or not, to use for visible/invisible doors in std/room.c
mapping GetObvMap() {
    mapping ret = ([]);
    foreach(string key in keys(Exits)){
	ret[key] = Exits[key]["obv"];
    }

    return ret;
}

//Use this to hide an exit
int HideExit( string dir ) {
	  return Exits[dir]["obv"] = 0;
}

Replace the existing GenerateObviousExits() in /lib/std/room.c with this:

 int GenerateObviousExits(){
    string *normals;
    string *exits;
    string dir_string, enters;
    mapping obv;

    exits = GetExits();
    obv = GetObvMap();

    enters = "";
    normals = ({ "north", "south", "east", "west", "up", "down" });
    normals += ({ "northeast", "southeast", "northwest", "southwest" });
    normals += ({ "out" });
    dir_string = "";

    if(sizeof(GetEnters(1)-({0}))){
			foreach(string enter in this_object()->GetEnters(1)){
			    if (obv["enter "+enter] == 1) {
				    enters += "enter "+enter;
				    if(member_array(enter,this_object()->GetEnters(1)) !=
				     sizeof(this_object()->GetEnters(1)) -1) {
							  enters +=", ";
				    }
			    }
			}
    }

    if(member_array("north",exits) != -1 && obv["north"] == 1) dir_string += "n, ";
    if(member_array("south",exits) != -1 && obv["south"] == 1) dir_string += "s, ";
    if(member_array("east",exits) != -1 && obv["east"] == 1) dir_string += "e, ";
    if(member_array("west",exits) != -1 && obv["west"] == 1) dir_string += "w, ";
    if(member_array("northeast",exits) != -1 && obv["northeast"] == 1) dir_string += "ne, ";
    if(member_array("northwest",exits) != -1 && obv["northwest"] == 1) dir_string += "nw, ";
    if(member_array("southeast",exits) != -1 && obv["southeast"] == 1) dir_string += "se, ";
    if(member_array("southwest",exits) != -1 && obv["southwest"] == 1) dir_string += "sw, ";
    if(member_array("up",exits) != -1 && obv["up"] == 1) dir_string += "u, ";
    if(member_array("down",exits) != -1 && obv["down"] == 1) dir_string += "d, ";
    if(member_array("out",exits) != -1 && obv["out"] == 1) dir_string += "out, ";

    if(sizeof(this_object()->GetEnters(1) - ({0}) )) {
			if(sizeof(this_object()->GetExits())) dir_string += ", ";
			dir_string += enters;
    }

    if(last(dir_string,2) == ", ") dir_string = truncate(dir_string,2);
    dir_string = replace_string(dir_string,", , ",", ");
    if(ObviousVisible) SetObviousExits(dir_string);
    return 1;
}