diff -c -r --new-file ds2.0r27/lib/cmds/players/biography.c ds2.0r28/lib/cmds/players/biography.c *** ds2.0r27/lib/cmds/players/biography.c Wed Jul 5 00:01:03 2006 --- ds2.0r28/lib/cmds/players/biography.c Wed Jul 5 19:58:18 2006 *************** *** 93,99 **** d2 = ({}); } else { ! x = x/2; d1 = deaths[0..(x-1)]; d2 = deaths[x..]; } --- 93,99 ---- d2 = ({}); } else { ! //x = x/2; d1 = deaths[0..(x-1)]; d2 = deaths[x..]; } *************** *** 123,129 **** col3 = npcs[(2*x)..]; } for(i=0; i= sizeof(col1)) ? "" : col1[i] + " (" + kills[col1[i]] + ")", (i >= sizeof(col2)) ? "" : --- 123,129 ---- col3 = npcs[(2*x)..]; } for(i=0; i= sizeof(col1)) ? "" : col1[i] + " (" + kills[col1[i]] + ")", (i >= sizeof(col2)) ? "" : diff -c -r --new-file ds2.0r27/lib/cmds/players/mudlist.c ds2.0r28/lib/cmds/players/mudlist.c *** ds2.0r27/lib/cmds/players/mudlist.c Wed Jul 5 00:01:03 2006 --- ds2.0r28/lib/cmds/players/mudlist.c Wed Jul 5 19:58:18 2006 *************** *** 100,108 **** list = ({}); foreach(mud, info in borg) list += ({ sprintf("%:-15s %:-6s %:-15s %:-18s %s %d", ! mud, info[8], info[7], info[5], info[1], info[2]) }); list = sort_array(list, 1); ! list = ({ mud_name() + " recognizes " + consolidate(sizeof(borg), "a mud")+ " matching your query: ", "" }) + list; this_player()->eventPage(list); return 1; --- 100,108 ---- list = ({}); foreach(mud, info in borg) list += ({ sprintf("%:-15s %:-6s %:-15s %:-18s %s %d", ! replace_string(mud,"%^","%%^^"), info[8], info[7], info[5], info[1], info[2]) }); list = sort_array(list, 1); ! list = ({ replace_string(mud_name(),"%^","%%^^") + " recognizes " + consolidate(sizeof(borg), "a mud")+ " matching your query: ", "" }) + list; this_player()->eventPage(list); return 1; diff -c -r --new-file ds2.0r27/lib/doc/RELEASE_NOTES ds2.0r28/lib/doc/RELEASE_NOTES *** ds2.0r27/lib/doc/RELEASE_NOTES Wed Jul 5 00:52:42 2006 --- ds2.0r28/lib/doc/RELEASE_NOTES Wed Jul 5 20:52:28 2006 *************** *** 1,3 **** --- 1,11 ---- + ---- 2.0r28 --- + - Fixed minor bug in body.c that interfered with collapsing. + - Fixed message boards. + - Added command: snoopreport + - Fixed bug that caused players to be essentially immortal. + - Player death history is now accurately recorded. + - The command mudlist now ignores colors. + ---- 2.0r27 --- - Fixed currency problem in dying NPC's. - Added commands: env, polyglottize diff -c -r --new-file ds2.0r27/lib/domains/campus/npc/hans.c ds2.0r28/lib/domains/campus/npc/hans.c *** ds2.0r27/lib/domains/campus/npc/hans.c Wed Jul 5 00:01:11 2006 --- ds2.0r28/lib/domains/campus/npc/hans.c Wed Jul 5 19:58:19 2006 *************** *** 51,57 **** SetShort("Hans"); SetLong("Hans is a foreign exchange student from Germany."); SetLevel(5); - SetUnique(1); SetRace("human"); SetGender("male"); SetNoClean(1); --- 51,56 ---- diff -c -r --new-file ds2.0r27/lib/domains/campus/npc/rat.c ds2.0r28/lib/domains/campus/npc/rat.c *** ds2.0r27/lib/domains/campus/npc/rat.c Wed Jul 5 00:01:11 2006 --- ds2.0r28/lib/domains/campus/npc/rat.c Wed Jul 5 19:58:19 2006 *************** *** 1,9 **** - #include inherit LIB_SENTIENT; - static void create() { sentient::create(); SetKeyName("a mangy little rat"); --- 1,7 ---- *************** *** 12,18 **** SetLong("A scruffy little dirty rat."); SetLevel(1); SetMaxHealthPoints(5); - SetUnique(1); SetRace("rodent"); SetGender("male"); SetWanderSpeed(1); --- 10,15 ---- diff -c -r --new-file ds2.0r27/lib/domains/town/npc/rat.c ds2.0r28/lib/domains/town/npc/rat.c *** ds2.0r27/lib/domains/town/npc/rat.c Wed Jul 5 00:01:11 2006 --- ds2.0r28/lib/domains/town/npc/rat.c Wed Jul 5 20:52:28 2006 *************** *** 9,20 **** SetId( ({"rat"}) ); SetShort("a rat"); SetLong("A scruffy little dirty rat."); ! SetLevel(3); SetRace("rodent"); SetGender("male"); - SetClass("fighter"); - SetMaxHealthPoints(5); - SetWanderSpeed(1); SetEncounter(100); SetMessage("come","$N scurries in."); SetMessage("leave","$N scurries $D."); --- 9,17 ---- SetId( ({"rat"}) ); SetShort("a rat"); SetLong("A scruffy little dirty rat."); ! SetLevel(1); SetRace("rodent"); SetGender("male"); SetEncounter(100); SetMessage("come","$N scurries in."); SetMessage("leave","$N scurries $D."); diff -c -r --new-file ds2.0r27/lib/domains/town/obj/ebutton1.c ds2.0r28/lib/domains/town/obj/ebutton1.c *** ds2.0r27/lib/domains/town/obj/ebutton1.c Wed Jul 5 00:01:11 2006 --- ds2.0r28/lib/domains/town/obj/ebutton1.c Wed Jul 5 20:52:28 2006 *************** *** 16,25 **** static void create() { dummy::create(); SetKeyName("button"); ! SetId(({"button","one","first","1" })); ! SetAdjectives("elevator","button","one","first","1"); SetShort("a button"); SetLong("It is a button that you could probably press. The numeral \"1\" " ! "is printed on it."); SetPress((: openDoor :)); } --- 16,25 ---- static void create() { dummy::create(); SetKeyName("button"); ! SetId(({"button","one","1" })); ! SetAdjectives("elevator","button","one","1"); SetShort("a button"); SetLong("It is a button that you could probably press. The numeral \"1\" " ! "is printed on it. Try: press 1 button"); SetPress((: openDoor :)); } diff -c -r --new-file ds2.0r27/lib/domains/town/obj/ebutton2.c ds2.0r28/lib/domains/town/obj/ebutton2.c *** ds2.0r27/lib/domains/town/obj/ebutton2.c Wed Jul 5 00:01:11 2006 --- ds2.0r28/lib/domains/town/obj/ebutton2.c Wed Jul 5 20:52:28 2006 *************** *** 16,25 **** static void create() { dummy::create(); SetKeyName("button"); ! SetId(({"button","two","second","B" })); ! SetAdjectives("elevator","button","basement","second","B"); SetShort("a button"); SetLong("It is a button that you could probably press. The letter \"B\" " ! "is printed on it."); SetPress((: openDoor :)); } --- 16,25 ---- static void create() { dummy::create(); SetKeyName("button"); ! SetId(({"B"})); ! SetAdjectives("b", "elevator","button","basement","B"); SetShort("a button"); SetLong("It is a button that you could probably press. The letter \"B\" " ! "is printed on it. Try: press b button"); SetPress((: openDoor :)); } diff -c -r --new-file ds2.0r27/lib/lib/body.c ds2.0r28/lib/lib/body.c *** ds2.0r27/lib/lib/body.c Wed Jul 5 00:00:58 2006 --- ds2.0r28/lib/lib/body.c Wed Jul 5 19:58:19 2006 *************** *** 28,34 **** private int HealthPoints, MagicPoints, ExperiencePoints, QuestPoints; private int melee; ! private int Alcohol, Caffeine, Food, Drink, Poison, Sleeping, Deaths; private float StaminaPoints; private string Torso, Biter; private mapping Fingers, Limbs, MissingLimbs; --- 28,34 ---- private int HealthPoints, MagicPoints, ExperiencePoints, QuestPoints; private int melee; ! private int Alcohol, Caffeine, Food, Drink, Poison, Sleeping, DeathEvents; private float StaminaPoints; private string Torso, Biter; private mapping Fingers, Limbs, MissingLimbs; *************** *** 51,57 **** PoliticalParty = "UNDECIDED"; rifleshot_wounds = 0; gunshot_wounds = 0; ! NewBody(0); Protect = 0; WornItems = ([]); --- 51,57 ---- PoliticalParty = "UNDECIDED"; rifleshot_wounds = 0; gunshot_wounds = 0; ! DeathEvents = 0; NewBody(0); Protect = 0; WornItems = ([]); *************** *** 198,204 **** int eventCollapse() { int position = GetPosition(); ! foreach(object ob in all_inventory(environment(this_player()))){ if(inherits(LIB_CHAIR,ob) || inherits(LIB_BED,ob) ){ ob->eventReleaseStand(this_object()); } --- 198,204 ---- int eventCollapse() { int position = GetPosition(); ! foreach(object ob in all_inventory(environment(this_object()))){ if(inherits(LIB_CHAIR,ob) || inherits(LIB_BED,ob) ){ ob->eventReleaseStand(this_object()); } *************** *** 609,616 **** //if(!agent) agent = previous_object(); ! if(Deaths) return 1; ! Deaths = 1; if(agent && stringp(agent)) killer = agent + " "; else { --- 609,616 ---- //if(!agent) agent = previous_object(); ! if(DeathEvents) return 1; ! DeathEvents = 1; if(agent && stringp(agent)) killer = agent + " "; else { *************** *** 1102,1108 **** string limbname,adjname,templimbname; int i; ! if(limb == "torso") return 0; if( sscanf(limb, "%s %s", adjname, templimbname) == 2 ) limbname=templimbname; else limbname=limb; --- 1102,1108 ---- string limbname,adjname,templimbname; int i; ! if(limb == "torso" || limb == "neck") return 0; if( sscanf(limb, "%s %s", adjname, templimbname) == 2 ) limbname=templimbname; else limbname=limb; *************** *** 1705,1707 **** --- 1705,1717 ---- } + int GetDeathEvents(){ + return DeathEvents; + } + + int SetDeathEvents(int i){ + if(!i) DeathEvents = 0; + else DeathEvents = 1; + return DeathEvents; + } + diff -c -r --new-file ds2.0r27/lib/lib/combat.c ds2.0r28/lib/lib/combat.c *** ds2.0r27/lib/lib/combat.c Wed Jul 5 00:00:58 2006 --- ds2.0r28/lib/lib/combat.c Wed Jul 5 19:58:19 2006 *************** *** 61,66 **** --- 61,72 ---- return Dead; } + int SetDead(int i){ + if(!i) Dead = 0; + else Dead = 1; + return Dead; + } + object array GetEnemies() { return Enemies; } diff -c -r --new-file ds2.0r27/lib/lib/living.c ds2.0r28/lib/lib/living.c *** ds2.0r27/lib/lib/living.c Wed Jul 5 00:00:58 2006 --- ds2.0r28/lib/lib/living.c Wed Jul 5 19:58:19 2006 *************** *** 31,36 **** --- 31,40 ---- isPK = 0; } + int SetDead(int i){ + return combat::SetDead(i); + } + int is_living() { return 1; } int inventory_accessible() { return 1; } diff -c -r --new-file ds2.0r27/lib/lib/npc.c ds2.0r28/lib/lib/npc.c *** ds2.0r27/lib/lib/npc.c Wed Jul 5 00:00:58 2006 --- ds2.0r28/lib/lib/npc.c Wed Jul 5 19:58:20 2006 *************** *** 392,397 **** --- 392,399 ---- varargs int eventDie(mixed agent) { int x; + if(this_object()->GetDead() || this_object()->GetDeathEvents()) return 0; + if( (x = living::eventDie(agent)) != 1 ) return x; if( stringp(Die) ) { message("other_action", Die, environment(), ({ this_object() })); diff -c -r --new-file ds2.0r27/lib/lib/player.c ds2.0r28/lib/lib/player.c *** ds2.0r27/lib/lib/player.c Wed Jul 5 00:00:58 2006 --- ds2.0r28/lib/lib/player.c Wed Jul 5 19:58:20 2006 *************** *** 22,28 **** private string *Titles; string *Muffed = ({}); private class quest *Quests; ! private class death *Deaths; private int TrainingPoints, TitleLength; /* ***************** /lib/player.c driver applies ***************** */ --- 22,28 ---- private string *Titles; string *Muffed = ({}); private class quest *Quests; ! private mapping *Deaths; private int TrainingPoints, TitleLength; /* ***************** /lib/player.c driver applies ***************** */ *************** *** 125,163 **** int x, expee, subexpee; if( (x = living::eventDie(agent)) != 1 ) return x; ! if( !GetUndead() ) { ! eventDestroyUndead(agent); ! } ! else { ! message("my_action", "Consciousness passes from you after one last " ! "gasp for air.", this_object()); ! message("my_action", "You awake, but you find your body feels " ! "different, and the world about you is unfamiliar.", ! this_object()); ! if( agent ) { ! message("other_action", GetName() + " drops dead by the hand " ! "of " + (string)agent->GetName() + ".", ! environment(this_object()), ({ agent, this_object() })); ! message("other_action", "You send " + GetName() + " into the " ! "Underworld.", agent); ! } ! else message("other_action", GetName() + " drops dead.", ! environment(), ({ this_object() }) ); ! ! NewBody(GetRace()); ! ! expee = this_object()->GetExperiencePoints(); ! subexpee = to_int(expee * 0.25); ! ! eventCompleteHeal(GetMaxHealthPoints()/2); ! AddMagicPoints(-(random(GetMagicPoints()))); ! interactive::eventMove(ROOM_DEATH); ! this_object()->AddExperiencePoints(-subexpee); ! this_object()->save_player((string)this_object()->GetKeyName()); ! this_object()->eventForce("look"); } ! flush_messages(); ! return 1; } mixed eventTurn(object who) { --- 125,168 ---- int x, expee, subexpee; if( (x = living::eventDie(agent)) != 1 ) return x; ! ! if(!Deaths || !sizeof(Deaths)) ! Deaths = ({([ "date" : ctime(time()), "enemy" : ((agent->GetName()) ? agent->GetName() : agent) ])}); ! else Deaths += ({ ([ "date" : ctime(time()), "enemy" : agent->GetName() ]) }); ! ! if( !GetUndead() ) { ! eventDestroyUndead(agent); ! } ! else { ! message("my_action", "Consciousness passes from you after one last " ! "gasp for air.", this_object()); ! message("my_action", "You awake, but you find your body feels " ! "different, and the world about you is unfamiliar.", ! this_object()); ! if( agent ) { ! message("other_action", GetName() + " drops dead by the hand " ! "of " + (string)agent->GetName() + ".", ! environment(this_object()), ({ agent, this_object() })); ! message("other_action", "You send " + GetName() + " into the " ! "Underworld.", agent); } ! else message("other_action", GetName() + " drops dead.", ! environment(), ({ this_object() }) ); ! ! NewBody(GetRace()); ! ! expee = this_object()->GetExperiencePoints(); ! subexpee = to_int(expee * 0.25); ! ! eventCompleteHeal(GetMaxHealthPoints()/2); ! AddMagicPoints(-(random(GetMagicPoints()))); ! interactive::eventMove(ROOM_DEATH); ! this_object()->AddExperiencePoints(-subexpee); ! this_object()->save_player((string)this_object()->GetKeyName()); ! this_object()->eventForce("look"); ! } ! flush_messages(); ! return 1; } mixed eventTurn(object who) { *************** *** 171,176 **** --- 176,184 ---- void eventRevive() { string skill; + this_object()->SetDead(0); + this_object()->SetDeathEvents(0); + if( !GetUndead() ) return; SetUndead(0); if(this_player()->GetPoison() > 0){ *************** *** 528,534 **** return Muffed; } - string *SetTitles(string *titles) { if( sizeof(distinct_array(titles)) != sizeof(titles) ) return Titles; Titles = titles; --- 536,541 ---- *************** *** 783,830 **** mapping *GetDeaths() { if( !Deaths ) return ({}); ! return map(Deaths, function(class death morte) { ! return ([ "date" : morte->Date, ! "enemy" : morte->Enemy ]); ! }); ! } ! ! int AddTrainingPoints(int x) { ! log_file("TrainingPoints", GetName() + " received " + x + " training " ! "points at " + ctime(time()) + "\ncall chain: " + ! sprintf("%O\n", previous_object(-1)) ); ! return (TrainingPoints += x); ! } ! ! int RemoveTrainingPoints(int x) { ! return (TrainingPoints -= x); ! } ! ! int GetTrainingPoints() { return TrainingPoints; } ! ! varargs int eventTrain(string skill, int points) { ! float x = 0; ! mapping mp; ! ! if( points < 1 ) points = 1; ! if( !(mp = GetSkill(skill)) ) return 0; ! if( TrainingPoints < points ) return 0; ! while( points-- ) { ! int max = GetMaxSkillPoints(skill, mp["level"]); ! switch( mp["class"] ) { ! case 1: x = 50.0; break; ! case 2: x = 40.0; break; ! case 3: x = 30.0; break; ! case 4: x = 20.0; break; ! default: return 0; ! } ! TrainingPoints--; ! AddSkillPoints(skill, to_int( (max * x) / 100 )); } ! return 1; } ! //string ChangeClass(string cl) { ! // error("Players cannot change class.\n"); ! // return GetClass(); ! // } --- 790,834 ---- mapping *GetDeaths() { if( !Deaths ) return ({}); ! return copy(Deaths); ! } ! ! int AddTrainingPoints(int x) { ! log_file("TrainingPoints", GetName() + " received " + x + " training " ! "points at " + ctime(time()) + "\ncall chain: " + ! sprintf("%O\n", previous_object(-1)) ); ! return (TrainingPoints += x); ! } ! ! int RemoveTrainingPoints(int x) { ! return (TrainingPoints -= x); ! } ! ! int GetTrainingPoints() { return TrainingPoints; } ! ! varargs int eventTrain(string skill, int points) { ! float x = 0; ! mapping mp; ! ! if( points < 1 ) points = 1; ! if( !(mp = GetSkill(skill)) ) return 0; ! if( TrainingPoints < points ) return 0; ! while( points-- ) { ! int max = GetMaxSkillPoints(skill, mp["level"]); ! switch( mp["class"] ) { ! case 1: x = 50.0; break; ! case 2: x = 40.0; break; ! case 3: x = 30.0; break; ! case 4: x = 20.0; break; ! default: return 0; } ! TrainingPoints--; ! AddSkillPoints(skill, to_int( (max * x) / 100 )); } + return 1; + } ! //string ChangeClass(string cl) { ! // error("Players cannot change class.\n"); ! // return GetClass(); ! // } diff -c -r --new-file ds2.0r27/lib/secure/cmds/admins/snoopreport.c ds2.0r28/lib/secure/cmds/admins/snoopreport.c *** ds2.0r27/lib/secure/cmds/admins/snoopreport.c Wed Dec 31 19:00:00 1969 --- ds2.0r28/lib/secure/cmds/admins/snoopreport.c Wed Jul 5 19:58:20 2006 *************** *** 0 **** --- 1,16 ---- + // This command is only useful if you own an intermud channel + + #include + #include + + inherit LIB_DAEMON; + + mixed cmd(string args) { + string chan, mud; + + if(!this_player() || !archp(this_player())) return 0; + + SNOOP_D->Report(); + + return 1; + } diff -c -r --new-file ds2.0r27/lib/secure/daemon/bboard.c ds2.0r28/lib/secure/daemon/bboard.c *** ds2.0r27/lib/secure/daemon/bboard.c Wed Jul 5 00:48:29 2006 --- ds2.0r28/lib/secure/daemon/bboard.c Wed Jul 5 19:58:20 2006 *************** *** 49,60 **** static private int valid_access() { string str; ! ! if(!this_player() && __Owner == PRIV_SECURE && !((int)master()->valid_apply(({PRIV_ASSIST})))) return 0; - - if(!archp(this_player())) return 0; - str = query_privs(previous_object(0)); if(member_array(PRIV_SECURE, explode(str, ":")) != -1) return 1; return (__Owner == str); --- 49,57 ---- static private int valid_access() { string str; ! if(this_player() && archp(this_player())) true(); ! else if(__Owner == PRIV_SECURE && !((int)master()->valid_apply(({})))) return 0; str = query_privs(previous_object(0)); if(member_array(PRIV_SECURE, explode(str, ":")) != -1) return 1; return (__Owner == str); diff -c -r --new-file ds2.0r27/lib/secure/daemon/snoop.c ds2.0r28/lib/secure/daemon/snoop.c *** ds2.0r27/lib/secure/daemon/snoop.c Wed Jul 5 00:01:05 2006 --- ds2.0r28/lib/secure/daemon/snoop.c Wed Jul 5 19:58:20 2006 *************** *** 256,269 **** } int Report(){ ! if( !((int)master()->valid_apply(({ "PRIV_SECURE" }))) ){ return 0; } ! tc("Watchers: "+identify(Watchers)); ! tc("snoopers: "+identify(snoopers)); ! tc("prevusers: "+identify(prevusers)); ! tc("snooped: "+identify(snooped)); ! tc("monitored: "+identify(monitored)); return 1; } --- 256,269 ---- } int Report(){ ! if( !((int)master()->valid_apply(({ PRIV_SECURE }))) ){ return 0; } ! write("Watchers: "+identify(Watchers)+"\n"); ! write("snoopers: "+identify(snoopers)+"\n"); ! //write("prevusers: "+identify(prevusers)+"\n"); ! write("snooped: "+identify(snooped)+"\n"); ! write("monitored: "+identify(monitored)+"\n"); return 1; } diff -c -r --new-file ds2.0r27/lib/secure/sefun/mud_info.c ds2.0r28/lib/secure/sefun/mud_info.c *** ds2.0r27/lib/secure/sefun/mud_info.c Wed Jul 5 01:20:21 2006 --- ds2.0r28/lib/secure/sefun/mud_info.c Wed Jul 5 20:52:30 2006 *************** *** 27,33 **** string mudlib() { return "Dead Souls"; } ! string mudlib_version() { return "2.0r27"; } int query_host_port() { return __PORT__; } --- 27,33 ---- string mudlib() { return "Dead Souls"; } ! string mudlib_version() { return "2.0r28"; } int query_host_port() { return __PORT__; } diff -c -r --new-file ds2.0r27/lib/www/hotfix.html ds2.0r28/lib/www/hotfix.html *** ds2.0r27/lib/www/hotfix.html Wed Jul 5 00:00:59 2006 --- ds2.0r28/lib/www/hotfix.html Wed Jul 5 19:58:20 2006 *************** *** 36,60 **** affects all versions of Dead Souls below 2.0r26. The only fix is to apply the patch to upgrade to 2.0r26. That patch ! is available now. Try a sourceforege mirror for the patch ! download. This patch can be applied to any version of Dead Souls ! above 2.0r20.

!

For Dead Souls 2.0r26, the following fixes are available:

    !
  • The patch to 2.0r26 had to be done in great haste, to prevent the ! unnecessary exposure of muds to hacking. As a result, I had to drop ! some stuff in the middle. This bug is the result: copy this version of about.c ! over /secure/cmds/creators/about.c ! and the about command will work for rooms again.

--- 36,64 ---- affects all versions of Dead Souls below 2.0r26. The only fix is to apply the patch to upgrade to 2.0r26. That patch ! is available ! now. This patch can be applied to any version of Dead Souls ! above 2.0r20. If you plan to patch from pre- r26 to r27, you must reboot the mud between the ! installation of the two separate patches.

!

For Dead Souls 2.0r27, the following fixes are available:

    !
  • Right as I was about to release r27, someone asked an innocent ! question about bulletin boards, and I made a minor change to how they ! work to address a problem. You'd think I'd have learned my lesson about ! this sort of thing. The result is that bulletin boards don't work well ! on 2.0r27. To fix it, copy this file over ! /secure/daemon/bboard.c and this file over ! /secure/obj/arch_board.c .

diff -c -r --new-file ds2.0r27/lib/www/news.html ds2.0r28/lib/www/news.html *** ds2.0r27/lib/www/news.html Wed Jul 5 00:00:59 2006 --- ds2.0r28/lib/www/news.html Wed Jul 5 19:58:21 2006 *************** *** 19,24 **** --- 19,94 ----

+ 05 July 2006
+
+ router news:
+     The gjs router has been down for a week now, and
+ we may see some refugee muds start to make their
+ home on our router, yatmim (which by the way, stands
+ for Yet Another TMI Mud, which is how the router
+ started out. It's a DS mud now.) Yatmim is public and
+ so all are welcome, but there are some rules folks
+ need to abide by. The point of yatmim was to have
+ a reliable router for DS muds, but also one where
+ new people wouldn't be afraid to ask for help.
+
+     Please see the new router rules page + for more info.
+
+ update news:
+     Version 2.0r27 is out. I'm ever grateful to the
+ folks who find problems and report them...without
+ their help Dead Souls would take much longer to
+ get where it's going. Thanks, guys.
+
+     It probably still has a bug or two, specifically in
+ message boards. As usual, hotfixes will be posted
+ on the hotfix page. As + usual, please let me know what
+ bugs you find.
+
+     One of the new features in r27 is that the install
+ process will now work on Wolfpaw servers, so you folks
+ staying away because you couldn't get it to work, come
+ on in. The water's fine. Just be sure to run make -j 1
+ instead of just make.
+
+     For those uncomfortable with frequent patching,
+ please be aware that it isn't absolutely necessary.
+ See the patch + article for more details.
+
+     Note that for those unwilling to follow the
+ standard patch procedure, diffs are being made
+ available here.
+
+ LPUni news:
+     Tacitus has made some improvements to the front page.
+ Let's hope he keeps that up and fleshes out the rough
+ draft we see today.
+
+     He has also set up a "mud farm", with various LP
+ lib flavors running. Take a look in particular at the
+ Dead Souls 1.1 mud he's hosting. It should be interesting
+ to see how different it is from DS2. The address is:
+ lpuni.org 6501
+
+
+ Sourceforge news:
+     In case you haven't noticed, I'm relying less
+ and less on Sourceforge. They're great and everything,
+ but lately they've been down a lot, and it made me
+ realize I'm depending on them for stuff I can do
+ myself. The download stats are totally misleading,
+ and all their fancy project management stuff is just
+ a waste on me.
+     So you can pretty much figure on releases and
+ patches showing up here first and more often than
+ on Sourceforge.
+    
+
23 June 2006

    I've been frustrated for some time with the way
diff -c -r --new-file ds2.0r27/lib/www/router.html ds2.0r28/lib/www/router.html *** ds2.0r27/lib/www/router.html Wed Jul 5 00:00:59 2006 --- ds2.0r28/lib/www/router.html Wed Jul 5 19:58:21 2006 *************** *** 4,13 **** Dead Souls I3 router - -
--- 4,13 ---- Dead Souls I3 router + +
*************** *** 19,49 **** Dead Souls Intermud3 Router
!
!
This page is for folks ! already using Dead Souls and modifying
!
! !
their intermud configuration. If ! this does not apply to you, please
! return to the main site for general ! information:
!

-
- - Or the following FAQs:
-
-
The General FAQ  http://dead-souls.net/ds-faq.html
-
-
The Admin FAQ  http://dead-souls.net/ds-admin-faq.html
-
-
The Creator FAQ: http://dead-souls.net/ds-creator-faq.html
-
-
The Installation FAQ: http://dead-souls.net/ds-inst-faq.html
-

-
What is the Dead Souls router? It's an intermud protocol version 3
--- 19,26 ---- Dead Souls Intermud3 Router

!

What is the Dead Souls router? It's an intermud protocol version 3
*************** *** 52,57 **** --- 29,41 ---- was written by the legendary Tim@TimMUD.

+
+ What are + the rules?
+
+ Please read the router + rules page.
+

Is it private?
*************** *** 208,221 ****
!
More technical docs:
! Creator FAQ             ! Debugging FAQ         ! Editor Tutorial     !   !   The Quick Creation System         !

--- 192,202 ----
!
!
Dead Souls Home
!
diff -c -r --new-file ds2.0r27/lib/www/router_rules.html ds2.0r28/lib/www/router_rules.html *** ds2.0r27/lib/www/router_rules.html Wed Dec 31 19:00:00 1969 --- ds2.0r28/lib/www/router_rules.html Wed Jul 5 19:58:23 2006 *************** *** 0 **** --- 1,146 ---- + + + + Dead Souls I3 router + + + + + + +
+ +
+
+
+
+
Dead + Souls Router Rules
+
+
+
+
1) The point of this + router being up is not free speech.
+
+ 2) This router is up for the + following purposes:
+
+     * To provide technical help for LP muds.
+     * To provide a friendly space for chat between muds.
+     * To test and improve mud communication systems, + such as intermud mail.
+
+ 3) The router is not up for + testing security of an I3 router. Attempting
+    to exploit the router is not permitted, and not "cool". If + you find
+    a security weakness please email me so I can handle it + discreetly.
+    You will get full credit for the discovery when the patch + comes out.
+
+ 4) The following channels are + reserved for the topics described below:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
dsDead Souls mud code talk
ds_testtesting testing 1, 2, 3, etc
intergossipgeneral offtopic stuff
lpuniLPUniversity discussion
intercregeneral technical chatter
+
+

+ 5) The following are not + tolerated on those channels: hate speech, social engineering
+    hacks, unwarranted hostility to newbies, spamming, + commercial advertising. All of
+    these will be judged by my subjective opinion of what + constitutes a violation.
+    Types of violations can be added to this list without + warning by me.
+
+ 6) You may create up to 8 + intermud channels for your mud. These channels can
+    have any content you want that is permissible by all + applicable laws. I
+    don't want to control the intermud with an iron hand. I + just want those five
+    channels listed above to be a safe place for newbies to + congregate, socialize,
+    and/or get work done.
+
+ 7) If you don't like these + rules, set up your own router. Or go play on the
+    gjs router, if ever it comes back up.
+
+ 8) I will not help or support + you in any way in setting up a router, or
+    in creating a channel for your mud. These undocumented + procedures require
+    expertise to accomplish that you have to earn on your own + by reading
+    the code on your mud and the i3 specs ( intermud.org ).
+
+ 9) I will not ban a mud just + because of your tattle tales. I expect you
+    to handle your own personal problems. If someone bugs you, + use the earmuff
+    command. Earmuff the person, or earmuff the mud, or just + stay off the
+    channel in question. The chances I'll step into something + like this
+    are slight, so don't look to me to solve your online + disputes. I'm
+    your Dutch uncle, not your coddling mommy.
+
+
+
+ Note: I'm not normally this + harsh or fascistic. I just want to make things clear
+ right from the start, because I refuse to get into who was
+ mean to whom on what channel. It's a waste of everyone's time. If you + break
+ the rules, I will probably ask you politely to stop, or I may just
+ ban you. Please be reasonable and play nice, or don't come into my + house.
+

+ - Cratylus <my name here> @comcast.net
+
+
+
Dead Souls Home  +
+
+
+
+
+
+
+
+
+
+ +